2424import java .util .ArrayList ;
2525import java .util .Arrays ;
2626import java .util .List ;
27- import java .util .logging .Logger ;
2827import javax .annotation .CheckReturnValue ;
2928
3029/**
3534 */
3635public final class TransportFrameUtil {
3736
38- private static final Logger logger = Logger .getLogger (TransportFrameUtil .class .getName ());
39-
4037 private static final byte [] binaryHeaderSuffixBytes =
4138 Metadata .BINARY_HEADER_SUFFIX .getBytes (US_ASCII );
4239
@@ -57,26 +54,14 @@ public static byte[][] toHttp2Headers(Metadata headers) {
5754 for (int i = 0 ; i < serializedHeaders .length ; i += 2 ) {
5855 byte [] key = serializedHeaders [i ];
5956 byte [] value = serializedHeaders [i + 1 ];
60- if (endsWith (key , binaryHeaderSuffixBytes )) {
61- // Binary header.
62- serializedHeaders [k ] = key ;
63- serializedHeaders [k + 1 ]
64- = InternalMetadata .BASE64_ENCODING_OMIT_PADDING .encode (value ).getBytes (US_ASCII );
65- k += 2 ;
66- } else {
67- // Non-binary header.
68- // Filter out headers that contain non-spec-compliant ASCII characters.
69- // TODO(zhangkun83): only do such check in development mode since it's expensive
70- if (isSpecCompliantAscii (value )) {
71- serializedHeaders [k ] = key ;
72- serializedHeaders [k + 1 ] = value ;
73- k += 2 ;
74- } else {
75- String keyString = new String (key , US_ASCII );
76- logger .warning ("Metadata key=" + keyString + ", value=" + Arrays .toString (value )
77- + " contains invalid ASCII characters" );
78- }
79- }
57+ serializedHeaders [k ] = key ;
58+ serializedHeaders [k + 1 ] =
59+ endsWith (key , binaryHeaderSuffixBytes )
60+ // Binary header.
61+ ? InternalMetadata .BASE64_ENCODING_OMIT_PADDING .encode (value ).getBytes (US_ASCII )
62+ // Non-binary header.
63+ : value ;
64+ k += 2 ;
8065 }
8166 // Fast path, everything worked out fine.
8267 if (k == serializedHeaders .length ) {
@@ -163,18 +148,5 @@ private static boolean endsWith(byte[] subject, byte[] suffix) {
163148 return true ;
164149 }
165150
166- /**
167- * Returns {@code true} if {@code subject} contains only bytes that are spec-compliant ASCII
168- * characters and space.
169- */
170- private static boolean isSpecCompliantAscii (byte [] subject ) {
171- for (byte b : subject ) {
172- if (b < 32 || b > 126 ) {
173- return false ;
174- }
175- }
176- return true ;
177- }
178-
179151 private TransportFrameUtil () {}
180152}
0 commit comments