private static void validateHeaders(AsciiString[] pseudoHeaders, AsciiString... otherHeaders) { // We are only validating values... so start at 1 and go until end. for (int i = 1; i < pseudoHeaders.length; i += 2) { // pseudoHeaders names are only set internally so they are assumed to be valid. if (pseudoHeaders[i] == null) { throw new IllegalArgumentException("pseudoHeaders value at index " + i + " is null"); } } boolean seenNonPseudoHeader = false; final int otherHeadersEnd = otherHeaders.length - 1; for (int i = 0; i < otherHeadersEnd; i += 2) { AsciiString name = otherHeaders[i]; HTTP2_NAME_VALIDATOR.validateName(name); if (!seenNonPseudoHeader && !name.isEmpty() && name.byteAt(0) != PSEUDO_HEADER_TOKEN) { seenNonPseudoHeader = true; } else if (seenNonPseudoHeader && !name.isEmpty() && name.byteAt(0) == PSEUDO_HEADER_TOKEN) { throw new IllegalArgumentException( "otherHeaders name at index " + i + " is a pseudo header that appears after non-pseudo headers."); } if (otherHeaders[i + 1] == null) { throw new IllegalArgumentException("otherHeaders value at index " + (i + 1) + " is null"); } } }
if (res.get(i).isEmpty()) { res.remove(i); } else {
if (res.get(i).isEmpty()) { res.remove(i); } else {
private static void convertHeaders(HttpHeaders headers, MimeHeaders cHeaders) { if (headers.isEmpty()) { return; } for (Entry<AsciiString, String> e : headers) { final AsciiString k = e.getKey(); final String v = e.getValue(); if (k.isEmpty() || k.byteAt(0) == ':') { continue; } final MessageBytes cValue = cHeaders.addValue(k.array(), k.arrayOffset(), k.length()); final byte[] valueBytes = v.getBytes(StandardCharsets.US_ASCII); cValue.setBytes(valueBytes, 0, valueBytes.length); } }
if (res.get(i).isEmpty()) { res.remove(i); } else {
if (name.isEmpty() || HTTP2_TO_HTTP_HEADER_BLACKLIST.contains(name)) { continue;
private static MetaData.Request toRequestMetadata(ServiceRequestContext ctx, AggregatedHttpMessage aReq) { // Construct the HttpURI final StringBuilder uriBuf = new StringBuilder(); final HttpHeaders aHeaders = aReq.headers(); uriBuf.append(ctx.sessionProtocol().isTls() ? "https" : "http"); uriBuf.append("://"); uriBuf.append(aHeaders.authority()); uriBuf.append(aHeaders.path()); final HttpURI uri = new HttpURI(uriBuf.toString()); uri.setPath(ctx.mappedPath()); // Convert HttpHeaders to HttpFields final HttpFields jHeaders = new HttpFields(aHeaders.size()); aHeaders.forEach(e -> { final AsciiString key = e.getKey(); if (!key.isEmpty() && key.byteAt(0) != ':') { jHeaders.add(key.toString(), e.getValue()); } }); return new MetaData.Request( aHeaders.method().name(), uri, HttpVersion.HTTP_1_1, jHeaders, aReq.content().length()); }
final AsciiString name = entry.getKey(); final String value = entry.getValue(); if (name.isEmpty() || HTTP_TRAILER_BLACKLIST.contains(name)) { continue;
if (res.get(i).isEmpty()) { res.remove(i); } else {
private static void validateHeaders(AsciiString[] pseudoHeaders, AsciiString... otherHeaders) { // We are only validating values... so start at 1 and go until end. for (int i = 1; i < pseudoHeaders.length; i += 2) { // pseudoHeaders names are only set internally so they are assumed to be valid. if (pseudoHeaders[i] == null) { throw new IllegalArgumentException("pseudoHeaders value at index " + i + " is null"); } } boolean seenNonPseudoHeader = false; final int otherHeadersEnd = otherHeaders.length - 1; for (int i = 0; i < otherHeadersEnd; i += 2) { AsciiString name = otherHeaders[i]; HTTP2_NAME_VALIDATOR.validateName(name); if (!seenNonPseudoHeader && !name.isEmpty() && name.byteAt(0) != PSEUDO_HEADER_TOKEN) { seenNonPseudoHeader = true; } else if (seenNonPseudoHeader && !name.isEmpty() && name.byteAt(0) == PSEUDO_HEADER_TOKEN) { throw new IllegalArgumentException( "otherHeaders name at index " + i + " is a pseudo header that appears after non-pseudo headers."); } if (otherHeaders[i + 1] == null) { throw new IllegalArgumentException("otherHeaders value at index " + (i + 1) + " is null"); } } }
private static void validateHeaders(AsciiString[] pseudoHeaders, AsciiString... otherHeaders) { // We are only validating values... so start at 1 and go until end. for (int i = 1; i < pseudoHeaders.length; i += 2) { // pseudoHeaders names are only set internally so they are assumed to be valid. if (pseudoHeaders[i] == null) { throw new IllegalArgumentException("pseudoHeaders value at index " + i + " is null"); } } boolean seenNonPseudoHeader = false; final int otherHeadersEnd = otherHeaders.length - 1; for (int i = 0; i < otherHeadersEnd; i += 2) { AsciiString name = otherHeaders[i]; HTTP2_NAME_VALIDATOR.validateName(name); if (!seenNonPseudoHeader && !name.isEmpty() && name.byteAt(0) != PSEUDO_HEADER_TOKEN) { seenNonPseudoHeader = true; } else if (seenNonPseudoHeader && !name.isEmpty() && name.byteAt(0) == PSEUDO_HEADER_TOKEN) { throw new IllegalArgumentException( "otherHeaders name at index " + i + " is a pseudo header that appears after non-pseudo headers."); } if (otherHeaders[i + 1] == null) { throw new IllegalArgumentException("otherHeaders value at index " + (i + 1) + " is null"); } } }
if (res.get(i).isEmpty()) { res.remove(i); } else {
if (res.get(i).isEmpty()) { res.remove(i); } else {