StaticEntry(int index,HttpField field) { super(field); _slot=index; String value = field.getValue(); if (value!=null && value.length()>0) { int huffmanLen = Huffman.octetsNeeded(value); int lenLen = NBitInteger.octectsNeeded(7,huffmanLen); _huffmanValue = new byte[1+lenLen+huffmanLen]; ByteBuffer buffer = ByteBuffer.wrap(_huffmanValue); // Indicate Huffman buffer.put((byte)0x80); // Add huffman length NBitInteger.encode(buffer,7,huffmanLen); // Encode value Huffman.encode(buffer,value); } else _huffmanValue=null; _encodedField=(byte)(0x80|index); }
public void encodeMaxDynamicTableSize(ByteBuffer buffer, int maxDynamicTableSize) { if (maxDynamicTableSize>_remoteMaxDynamicTableSize) throw new IllegalArgumentException(); buffer.put((byte)0x20); NBitInteger.encode(buffer,5,maxDynamicTableSize); _context.resize(maxDynamicTableSize); }
int index = NBitInteger.decode(buffer,7); Entry entry=_context.get(index); if (entry==null) case 3: // 7.3 int size = NBitInteger.decode(buffer,5); if (LOG.isDebugEnabled()) LOG.debug("decode resize="+size); case 1: // 7.2.3 indexed=false; name_index=NBitInteger.decode(buffer,4); break; case 7: // 7.2.1 indexed=true; name_index=NBitInteger.decode(buffer,6); break; int length = NBitInteger.decode(buffer,7); _builder.checkSize(length,huffmanName); if (huffmanName) int length = NBitInteger.decode(buffer,7); _builder.checkSize(length,huffmanValue); if (huffmanValue)
static void encodeValue(ByteBuffer buffer, boolean huffman, String value) { if (huffman) { // huffman literal value buffer.put((byte)0x80); NBitInteger.encode(buffer,7,Huffman.octetsNeeded(value)); Huffman.encode(buffer,value); } else { // add literal assuming iso_8859_1 buffer.put((byte)0x00); NBitInteger.encode(buffer,7,value.length()); for (int i=0;i<value.length();i++) { char c=value.charAt(i); if (c<' '|| c>127) throw new IllegalArgumentException(); buffer.put((byte)c); } } } }
NBitInteger.encode(buffer,7,index); if (_debug) encoding="IdxField"+(entry.isStatic()?"S":"")+(1+NBitInteger.octectsNeeded(7,index)); ((name==null)?"HuffN":("IdxN"+(name.isStatic()?"S":"")+(1+NBitInteger.octectsNeeded(4,_context.index(name)))))+ (huffman?"HuffV":"LitV")+ (never_index?"!!Idx":"!Idx"); encodeValue(buffer,true,field.getValue()); if (_debug) encoding="LitIdxNS"+(1+NBitInteger.octectsNeeded(4,_context.index(name)))+"HuffV!Idx"; encodeValue(buffer,huffman,field.getValue()); if (_debug) encoding=((name==null)?"LitHuffN":("LitIdxN"+(name.isStatic()?"S":"")+(1+NBitInteger.octectsNeeded(6,_context.index(name)))))+ (huffman?"HuffVIdx":"LitVIdx");
private void encodeName(ByteBuffer buffer, byte mask, int bits, String name, Entry entry) { buffer.put(mask); if (entry==null) { // leave name index bits as 0 // Encode the name always with lowercase huffman buffer.put((byte)0x80); NBitInteger.encode(buffer,7,Huffman.octetsNeededLC(name)); Huffman.encodeLC(buffer,name); } else { NBitInteger.encode(buffer,bits,_context.index(entry)); } }