Refine search
private final boolean handleSetSpecialHeaders(final Header header, final String value) { return isSpecialHeaderSet(header.toString()) && setValueBasedOnHeader(header, value); }
/** * Add the HTTP mime header. * * @param header the mime {@link Header}. * @param value the mime header value. */ public final CompressedHeadersBuilder header(Header header, String value) { headers.put(header.getLowerCase(), value); return this; }
private String getValueBasedOnHeader(final Header header) { if (Header.ContentType.equals(header)) { final String value = getContentType(); if (value != null) { return value; } } else if (Header.ContentLength.equals(header)) { final long value = getContentLength(); if (value >= 0) { return Long.toString(value); } } else if (Header.Upgrade.equals(header)) { return getUpgrade(); } return null; }
private static void processNormalHeader(final HttpHeader httpHeader, final String name, final String value) { if (name.equals(Header.Host.getLowerCase())) { return; } final MimeHeaders mimeHeaders = httpHeader.getHeaders(); final DataChunk valueChunk = mimeHeaders.addValue(name); validateHeaderCharacters(name, value); valueChunk.setString(value); finalizeKnownHeader(httpHeader, name, value); }
/** * Removes the headers with the given name whose values contain the * given string. * * @param header The name of the {@link Header}s to be removed * @param regex The regex string to check the header values against */ public void removeHeaderMatches(final Header header, final String regex) { for (int i = 0; i < count; i++) { if (headers[i].getName().equalsIgnoreCaseLowerCase( header.getLowerCaseBytes()) && getValue(i) != null && getValue(i).toString() != null && getValue(i).toString().matches(regex)) { removeHeader(i--); } } }
/** * Set internal fields for special header names. * Called from set/addHeader. * Return true if the header is special, no need to set the header. */ private boolean setValueBasedOnHeader(final Header header, final String value) { if (Header.ContentType.equals(header)) { setContentType(value); return true; } else if (Header.ContentLength.equals(header)) { headers.removeHeader(Header.TransferEncoding); setChunked(false); return setContentLenth(value); } else if (Header.Upgrade.equals(header)) { setUpgrade(value); } else if (Header.TransferEncoding.equals(header)) { if ("chunked".equalsIgnoreCase(value)) { setContentLengthLong(-1); setChunked(true); } return true; } //if (name.equalsIgnoreCase("Content-Language")) { // // TODO XXX XXX Need to construct Locale or something else //} return false; }
protected boolean checkResponseHeadersOnUpgrade( final HttpResponsePacket httpResponse) { if (httpResponse.getStatus() != 101) { // Not "HTTP/1.1 101 Switching Protocols" return false; } if (!httpResponse.isUpgrade()) { // No Upgrade header return false; } // Check "Connection: Upgrade, HTTP2-Settings" header final DataChunk connectionHeaderDC = httpResponse.getHeaders().getValue(Header.Connection); return !(connectionHeaderDC == null || connectionHeaderDC.isNull() || !connectionHeaderDC.equals(Header.Upgrade.getBytes())); }
public void removeHeader(final Header header) { for (int i = 0; i < count; i++) { if (headers[i].getName().equalsIgnoreCase(header.getBytes())) { removeHeader(i--); } } }
/** Create a new named header , return the MessageBytes container for the new value */ public DataChunk addValue(final Header header) { if (!isValidName(header)) { return NOOP_CHUNK; } MimeHeaderField mh = createHeader(); mh.getName().setBytes(header.toByteArray()); return mh.getValue(); }
/** * Allow "set" operations - * return a DataChunk container for the * header value ( existing header or new * if this . */ public DataChunk setValue(final Header header) { if (!isValidName(header)) { return NOOP_CHUNK; } final byte[] bytes = header.getLowerCaseBytes(); for (int i = 0; i < count; i++) { if (headers[i].getName().equalsIgnoreCaseLowerCase(bytes)) { for (int j = i + 1; j < count; j++) { if (headers[j].getName().equalsIgnoreCaseLowerCase(bytes)) { removeHeader(j--); } } return headers[i].getValue(); } } MimeHeaderField mh = createHeader(); mh.getName().setBytes(header.toByteArray()); return mh.getValue(); }
private static Buffer encodeContentEncodingHeader(final MemoryManager memoryManager, Buffer buffer, final HttpHeader httpHeader, final CacheableDataChunk name, final CacheableDataChunk value) { final List<ContentEncoding> packetContentEncodings = httpHeader.getContentEncodings(true); name.setBytes(Header.ContentEncoding.toByteArray()); value.reset(); httpHeader.extractContentEncoding(value); boolean needComma = !value.isNull(); final byte[] tempBuffer = httpHeader.getTempHeaderEncodingBuffer(); buffer = encodeMimeHeader(memoryManager, buffer, name, value, tempBuffer, false); for (ContentEncoding encoding : packetContentEncodings) { if (needComma) { buffer = put(memoryManager, buffer, Constants.COMMA); } buffer = put(memoryManager, buffer, tempBuffer, encoding.getName()); needComma = true; } buffer = put(memoryManager, buffer, CRLF_BYTES); return buffer; }
private static Request newRequest(final HttpTransactionContext ctx, final Uri newUri, final HttpResponsePacket response, final Realm realm, boolean asGet) { final Request prototype = ctx.getAhcRequest(); final FluentCaseInsensitiveStringsMap prototypeHeaders = prototype.getHeaders(); prototypeHeaders.remove(Header.Host.toString()); prototypeHeaders.remove(Header.ContentLength.toString()); if (asGet) prototypeHeaders.remove(Header.ContentType.toString()); if (realm != null && realm.getScheme() == AuthScheme.NTLM) { prototypeHeaders.remove(Header.Authorization.toString()); prototypeHeaders.remove(Header.ProxyAuthorization.toString()); } final RequestBuilder builder = new RequestBuilder(prototype); if (asGet) { builder.setMethod("GET"); } builder.setUrl(newUri.toString()); for (String cookieStr : response.getHeaders().values(Header.SetCookie)) { builder.addOrReplaceCookie(CookieDecoder.decode(cookieStr)); } return builder.build(); }
/** * Finds and returns a header field with the given name. If no such * field exists, null is returned. If more than one such field is * in the header, an arbitrary one is returned. */ public DataChunk getValue(final Header header) { final byte[] bytes = header.getLowerCaseBytes(); for (int i = 0; i < count; i++) { if (headers[i].getName().equalsIgnoreCaseLowerCase(bytes)) { return headers[i].getValue(); } } return null; }
private final String handleGetSpecialHeader(final Header header) { return ((isSpecialHeader(header.toString())) ? getValueBasedOnHeader(header) : null); }
private static void processNormalHeader(final HttpHeader httpHeader, final String name, final String value) { if (name.equals(Header.Host.getLowerCase())) { return; } final MimeHeaders mimeHeaders = httpHeader.getHeaders(); final DataChunk valueChunk = mimeHeaders.addValue(name); validateHeaderCharacters(name, value); valueChunk.setString(value); finalizeKnownHeader(httpHeader, name, value); }
/** * Removes the headers with the given name whose values contain the * given string. * * @param header The name of the {@link Header}s to be removed * @param regex The regex string to check the header values against */ public void removeHeaderMatches(final Header header, final String regex) { for (int i = 0; i < count; i++) { if (headers[i].getName().equalsIgnoreCaseLowerCase( header.getLowerCaseBytes()) && getValue(i) != null && getValue(i).toString() != null && getValue(i).toString().matches(regex)) { removeHeader(i--); } } }
/** * Set internal fields for special header names. * Called from set/addHeader. * Return true if the header is special, no need to set the header. */ private boolean setValueBasedOnHeader(final Header header, final String value) { if (Header.ContentType.equals(header)) { setContentType(value); return true; } else if (Header.ContentLength.equals(header)) { headers.removeHeader(Header.TransferEncoding); setChunked(false); return setContentLenth(value); } else if (Header.Upgrade.equals(header)) { setUpgrade(value); } else if (Header.TransferEncoding.equals(header)) { if ("chunked".equalsIgnoreCase(value)) { setContentLengthLong(-1); setChunked(true); } return true; } //if (name.equalsIgnoreCase("Content-Language")) { // // TODO XXX XXX Need to construct Locale or something else //} return false; }
protected boolean checkResponseHeadersOnUpgrade( final HttpResponsePacket httpResponse) { if (httpResponse.getStatus() != 101) { // Not "HTTP/1.1 101 Switching Protocols" return false; } if (!httpResponse.isUpgrade()) { // No Upgrade header return false; } // Check "Connection: Upgrade, HTTP2-Settings" header final DataChunk connectionHeaderDC = httpResponse.getHeaders().getValue(Header.Connection); return !(connectionHeaderDC == null || connectionHeaderDC.isNull() || !connectionHeaderDC.equals(Header.Upgrade.getBytes())); }
public void removeHeader(final Header header) { for (int i = 0; i < count; i++) { if (headers[i].getName().equalsIgnoreCase(header.getBytes())) { removeHeader(i--); } } }