summaryrefslogtreecommitdiffstats
path: root/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/core/HeaderFieldsUtil.java
diff options
context:
space:
mode:
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.java67
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);
}
}