public static String decode(ByteBuffer buffer) throws HpackException.CompressionException { return decode(buffer,buffer.remaining()); }
public static void encode(ByteBuffer buffer,String s) { encode(CODES,buffer,s); }
public static int octetsNeeded(String s) { return octetsNeeded(CODES,s); }
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)); } }
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,Huffman.octetsNeededLC(name)); Huffman.encodeLC(buffer,name);
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 static void encodeLC(ByteBuffer buffer, String s) { encode(LCCODES,buffer,s); }
public static int octetsNeededLC(String s) { return octetsNeeded(LCCODES,s); }