public Entry add(HttpField field) { Entry entry=new Entry(field); int size = entry.getSize(); if (size>_maxDynamicTableSizeInBytes) { if (LOG.isDebugEnabled()) LOG.debug(String.format("HdrTbl[%x] !added size %d>%d",hashCode(),size,_maxDynamicTableSizeInBytes)); _dynamicTable.evictAll(); return null; } _dynamicTableSizeInBytes+=size; _dynamicTable.add(entry); _fieldMap.put(field,entry); _nameMap.put(StringUtil.asciiToLowerCase(field.getName()),entry); if (LOG.isDebugEnabled()) LOG.debug(String.format("HdrTbl[%x] added %s",hashCode(),entry)); _dynamicTable.evict(); return entry; }
private void evict() { while (_dynamicTableSizeInBytes>_maxDynamicTableSizeInBytes) { Entry entry = _entries[_offset]; _entries[_offset]=null; _offset = (_offset+1)%_entries.length; _size--; if (LOG.isDebugEnabled()) LOG.debug(String.format("HdrTbl[%x] evict %s",HpackContext.this.hashCode(),entry)); _dynamicTableSizeInBytes-=entry.getSize(); entry._slot=-1; _fieldMap.remove(entry.getHttpField()); String lc=StringUtil.asciiToLowerCase(entry.getHttpField().getName()); if (entry==_nameMap.get(lc)) _nameMap.remove(lc); } if (LOG.isDebugEnabled()) LOG.debug(String.format("HdrTbl[%x] entries=%d, size=%d, max=%d",HpackContext.this.hashCode(),_dynamicTable.size(),_dynamicTableSizeInBytes,_maxDynamicTableSizeInBytes)); }
@Override public String toString() { return String.format("{%s,%d,%s,%x}",isStatic()?"S":"D",_slot,_field,hashCode()); } }
throw new HpackException.SessionException("Unknown index %d",index); if (entry.isStatic()) _builder.emit(entry.getHttpField()); _builder.emit(entry.getHttpField()); name=name_entry.getHttpField().getName(); header=name_entry.getHttpField().getHeader();
if (entry.isStatic()) 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,huffman,field.getValue()); if (_debug) encoding=((name==null)?"LitHuffN":("LitIdxN"+(name.isStatic()?"S":"")+(1+NBitInteger.octectsNeeded(6,_context.index(name)))))+ (huffman?"HuffVIdx":"LitVIdx");
public int index(Entry entry) { if (entry._slot<0) return 0; if (entry.isStatic()) return entry._slot; return _dynamicTable.index(entry); }