HPackHeader(final Header header) { this(header.getName(), header.getValue(), header.isSensitive()); }
public void encodeHeader( final ByteArrayBuffer dst, final Header header) throws CharacterCodingException { Args.notNull(dst, "ByteArrayBuffer"); Args.notNull(header, "Header"); encodeHeader(dst, header.getName(), header.getValue(), header.isSensitive()); }
void encodeHeader( final ByteArrayBuffer dst, final String name, final String value, final boolean sensitive, final boolean noIndexing, final boolean useHuffman) throws CharacterCodingException { final HPackRepresentation representation; if (sensitive) { representation = HPackRepresentation.NEVER_INDEXED; } else if (noIndexing) { representation = HPackRepresentation.WITHOUT_INDEXING; } else { representation = HPackRepresentation.WITH_INDEXING; } final List<HPackEntry> staticEntries = StaticTable.INSTANCE.getByName(name); if (representation == HPackRepresentation.WITH_INDEXING) { // Try to find full match and encode as as index final int staticIndex = findFullMatch(staticEntries, value); if (staticIndex > 0) { encodeIndex(dst, staticIndex); return; } final List<HPackEntry> dynamicEntries = dynamicTable.getByName(name); final int dynamicIndex = findFullMatch(dynamicEntries, value); if (dynamicIndex > 0) { encodeIndex(dst, dynamicIndex); return; } } // Encode as literal
void encodeLiteralHeader( final ByteArrayBuffer dst, final HPackEntry existing, final String key, final String value, final boolean sensitive, final HPackRepresentation representation, final boolean useHuffman) throws CharacterCodingException { final int n; final int mask; switch (representation) { case WITH_INDEXING: mask = 0x40; n = 6; break; case WITHOUT_INDEXING: mask = 0x00; n = 4; break; case NEVER_INDEXED: mask = 0x10; n = 4; break; default: throw new IllegalStateException("Unexpected value: " + representation); } final int index = existing != null ? existing.getIndex() : 0; final int nameLen; if (index <= 0) { encodeInt(dst, n, 0, mask); nameLen = encodeString(dst, key, useHuffman); } else { encodeInt(dst, n, index, mask); nameLen = existing.getHeader().getNameLen();