diff options
author | Bjørn Christian Seime <bjorn.christian@seime.no> | 2017-04-21 15:27:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-21 15:27:02 +0200 |
commit | e6079fa5fbf8143b266add48d6672b7bf4b7974a (patch) | |
tree | be5c985c0cb2d46de0382ce54ca8479f02ac8b22 /jdisc_http_service/src/main | |
parent | 2d62cda1a75a2aeb6bdd5652a62f8f8aacbde06e (diff) |
Revert "Remove some netty usage in jdisc_http_service"
Diffstat (limited to 'jdisc_http_service/src/main')
-rw-r--r-- | jdisc_http_service/src/main/java/com/yahoo/jdisc/http/HttpRequest.java | 13 | ||||
-rw-r--r-- | jdisc_http_service/src/main/java/com/yahoo/jdisc/http/core/HeaderFieldsUtil.java | 67 |
2 files changed, 65 insertions, 15 deletions
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/HttpRequest.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/HttpRequest.java index 50806cc655d..ff80a8a845d 100644 --- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/HttpRequest.java +++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/HttpRequest.java @@ -9,8 +9,7 @@ import com.yahoo.jdisc.handler.RequestHandler; import com.yahoo.jdisc.handler.ResponseHandler; import com.yahoo.jdisc.http.servlet.ServletOrJdiscHttpRequest; import com.yahoo.jdisc.service.CurrentContainer; -import org.eclipse.jetty.http.HttpURI; -import org.eclipse.jetty.util.MultiMap; +import org.jboss.netty.handler.codec.http.QueryStringDecoder; import java.net.InetAddress; import java.net.InetSocketAddress; @@ -85,7 +84,7 @@ public class HttpRequest extends Request implements ServletOrJdiscHttpRequest { this.method = method; this.version = version; this.remoteAddress = remoteAddress; - this.parameters.putAll(getUriQueryParameters(uri)); + this.parameters.putAll(new QueryStringDecoder(uri.toString(), true).getParameters()); if (connectedAtMillis != null) { this.connectedAt = connectedAtMillis; } else { @@ -103,7 +102,7 @@ public class HttpRequest extends Request implements ServletOrJdiscHttpRequest { this.method = method; this.version = version; this.remoteAddress = null; - this.parameters.putAll(getUriQueryParameters(uri)); + this.parameters.putAll(new QueryStringDecoder(uri.toString(), true).getParameters()); this.connectedAt = creationTime(TimeUnit.MILLISECONDS); } catch (RuntimeException e) { release(); @@ -111,12 +110,6 @@ public class HttpRequest extends Request implements ServletOrJdiscHttpRequest { } } - private static Map<String, List<String>> getUriQueryParameters(URI uri) { - MultiMap<String> queryParameters = new MultiMap<>(); - new HttpURI(uri).decodeQueryTo(queryParameters); - return queryParameters; - } - public Method getMethod() { return method; } diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/core/HeaderFieldsUtil.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/core/HeaderFieldsUtil.java index 710820e7259..065276962f7 100644 --- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/core/HeaderFieldsUtil.java +++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/core/HeaderFieldsUtil.java @@ -3,7 +3,10 @@ package com.yahoo.jdisc.http.core; import com.ning.http.client.RequestBuilder; import com.yahoo.jdisc.HeaderFields; -import com.yahoo.jdisc.http.HttpHeaders; +import org.jboss.netty.handler.codec.http.HttpChunkTrailer; +import org.jboss.netty.handler.codec.http.HttpHeaders; +import org.jboss.netty.handler.codec.http.HttpMessage; +import org.jboss.netty.handler.codec.http.HttpResponse; import java.io.ByteArrayOutputStream; import java.nio.charset.StandardCharsets; @@ -24,12 +27,24 @@ public class HeaderFieldsUtil { HttpHeaders.Names.CONTENT_LENGTH, HttpHeaders.Names.TRANSFER_ENCODING)); + public static void copyHeaders(com.yahoo.jdisc.Response src, HttpResponse dst) { + copyHeaderFields(src.headers(), newSimpleHeaders(dst)); + } + public static void copyHeaders(com.yahoo.jdisc.Request src, RequestBuilder dst) { - copyHeaderFields(src.headers(), dst::addHeader); + copyHeaderFields(src.headers(), newSimpleHeaders(dst)); + } + + public static void copyTrailers(com.yahoo.jdisc.Response src, HttpResponse dst) { + copyTrailers(src, newSimpleHeaders(dst)); + } + + public static void copyTrailers(com.yahoo.jdisc.Response src, HttpChunkTrailer dst) { + copyTrailers(src, newSimpleHeaders(dst)); } public static void copyTrailers(com.yahoo.jdisc.Request src, RequestBuilder dst) { - copyTrailers(src, dst::addHeader); + copyTrailers(src, newSimpleHeaders(dst)); } public static void copyTrailers(com.yahoo.jdisc.Request src, ByteArrayOutputStream dst) { @@ -47,6 +62,17 @@ public class HeaderFieldsUtil { } } + @SuppressWarnings("SynchronizationOnLocalVariableOrMethodParameter") + public static void copyTrailers(com.yahoo.jdisc.Response src, SimpleHeaders dst) { + if (!(src instanceof com.yahoo.jdisc.http.HttpResponse)) { + return; + } + final HeaderFields trailers = ((com.yahoo.jdisc.http.HttpResponse)src).trailers(); + synchronized (trailers) { + copyHeaderFields(trailers, dst); + } + } + private static void copyHeaderFields(HeaderFields src, SimpleHeaders dst) { for (Map.Entry<String, List<String>> entry : src.entrySet()) { String key = entry.getKey(); @@ -62,6 +88,16 @@ public class HeaderFieldsUtil { } } + private static SimpleHeaders newSimpleHeaders(final RequestBuilder dst) { + return new SimpleHeaders() { + + @Override + public void addHeader(String name, String value) { + dst.addHeader(name, value); + } + }; + } + private static SimpleHeaders newSimpleHeaders(final ByteArrayOutputStream dst) { return new SimpleHeaders() { @@ -79,7 +115,28 @@ public class HeaderFieldsUtil { }; } - private interface SimpleHeaders { - void addHeader(String name, String value); + private static SimpleHeaders newSimpleHeaders(final HttpMessage dst) { + return new SimpleHeaders() { + + @Override + public void addHeader(String name, String value) { + dst.addHeader(name, value); + } + }; + } + + private static SimpleHeaders newSimpleHeaders(final HttpChunkTrailer dst) { + return new SimpleHeaders() { + + @Override + public void addHeader(String name, String value) { + dst.addHeader(name, value); + } + }; + } + + private static interface SimpleHeaders { + + public void addHeader(String name, String value); } } |