/** * Set the maximum table size. */ public void setMaxHeaderTableSize(OutputStream out, int maxHeaderTableSize) throws IOException { if (maxHeaderTableSize < 0) { throw new IllegalArgumentException("Illegal Capacity: " + maxHeaderTableSize); } if (capacity == maxHeaderTableSize) { return; } capacity = maxHeaderTableSize; ensureCapacity(0); encodeInteger(out, 0x20, 5, maxHeaderTableSize); }
/** * Encode string literal according to Section 5.2. */ private void encodeStringLiteral(OutputStream out, byte[] string) throws IOException { int huffmanLength = Huffman.ENCODER.getEncodedLength(string); if ((huffmanLength < string.length && !forceHuffmanOff) || forceHuffmanOn) { encodeInteger(out, 0x80, 7, huffmanLength); Huffman.ENCODER.encode(out, string); } else { encodeInteger(out, 0x00, 7, string.length); out.write(string, 0, string.length); } }
/** * Encode string literal according to Section 5.2. */ private void encodeStringLiteral(OutputStream out, byte[] string) throws IOException { int huffmanLength = Huffman.ENCODER.getEncodedLength(string); if ((huffmanLength < string.length && !forceHuffmanOff) || forceHuffmanOn) { encodeInteger(out, 0x80, 7, huffmanLength); Huffman.ENCODER.encode(out, string); } else { encodeInteger(out, 0x00, 7, string.length); out.write(string, 0, string.length); } }
/** * Set the maximum table size. */ public void setMaxHeaderTableSize(OutputStream out, int maxHeaderTableSize) throws IOException { if (maxHeaderTableSize < 0) { throw new IllegalArgumentException("Illegal Capacity: " + maxHeaderTableSize); } if (capacity == maxHeaderTableSize) { return; } capacity = maxHeaderTableSize; ensureCapacity(0); encodeInteger(out, 0x20, 5, maxHeaderTableSize); }
/** * Encode literal header field according to Section 6.2. */ private void encodeLiteral(OutputStream out, byte[] name, byte[] value, IndexType indexType, int nameIndex) throws IOException { int mask; int prefixBits; switch(indexType) { case INCREMENTAL: mask = 0x40; prefixBits = 6; break; case NONE: mask = 0x00; prefixBits = 4; break; case NEVER: mask = 0x10; prefixBits = 4; break; default: throw new IllegalStateException("should not reach here"); } encodeInteger(out, mask, prefixBits, nameIndex == -1 ? 0 : nameIndex); if (nameIndex == -1) { encodeStringLiteral(out, name); } encodeStringLiteral(out, value); }
/** * Encode literal header field according to Section 6.2. */ private void encodeLiteral(OutputStream out, byte[] name, byte[] value, IndexType indexType, int nameIndex) throws IOException { int mask; int prefixBits; switch(indexType) { case INCREMENTAL: mask = 0x40; prefixBits = 6; break; case NONE: mask = 0x00; prefixBits = 4; break; case NEVER: mask = 0x10; prefixBits = 4; break; default: throw new IllegalStateException("should not reach here"); } encodeInteger(out, mask, prefixBits, nameIndex == -1 ? 0 : nameIndex); if (nameIndex == -1) { encodeStringLiteral(out, name); } encodeStringLiteral(out, value); }
encodeLiteral(out, name, value, IndexType.NONE, nameIndex); } else { encodeInteger(out, 0x80, 7, staticTableIndex); int index = getIndex(headerField.index) + StaticTable.length; encodeInteger(out, 0x80, 7, index); } else { int staticTableIndex = StaticTable.getIndex(name, value); if (staticTableIndex != -1) { encodeInteger(out, 0x80, 7, staticTableIndex); } else { int nameIndex = getNameIndex(name);
encodeLiteral(out, name, value, IndexType.NONE, nameIndex); } else { encodeInteger(out, 0x80, 7, staticTableIndex); int index = getIndex(headerField.index) + StaticTable.length; encodeInteger(out, 0x80, 7, index); } else { int staticTableIndex = StaticTable.getIndex(name, value); if (staticTableIndex != -1) { encodeInteger(out, 0x80, 7, staticTableIndex); } else { int nameIndex = getNameIndex(name);