diff options
Diffstat (limited to 'jdisc_http_service/src/main/java/com/yahoo/jdisc/http/core/HeaderFieldsUtil.java')
-rw-r--r-- | jdisc_http_service/src/main/java/com/yahoo/jdisc/http/core/HeaderFieldsUtil.java | 67 |
1 files changed, 62 insertions, 5 deletions
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); } } |