diff options
Diffstat (limited to 'netwerk/protocol/http/make_outgoing_tables.py')
-rw-r--r-- | netwerk/protocol/http/make_outgoing_tables.py | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/netwerk/protocol/http/make_outgoing_tables.py b/netwerk/protocol/http/make_outgoing_tables.py new file mode 100644 index 000000000..abf559dad --- /dev/null +++ b/netwerk/protocol/http/make_outgoing_tables.py @@ -0,0 +1,55 @@ +# This script exists to auto-generate Http2HuffmanOutgoing.h from the table +# contained in the HPACK spec. It's pretty simple to run: +# python make_outgoing_tables.py < http2_huffman_table.txt > Http2HuffmanOutgoing.h +# where huff_outgoing.txt is copy/pasted text from the latest version of the +# HPACK spec, with all non-relevant lines removed (the most recent version +# of huff_outgoing.txt also lives in this directory as an example). +import sys + +sys.stdout.write('''/* + * THIS FILE IS AUTO-GENERATED. DO NOT EDIT! + */ +#ifndef mozilla__net__Http2HuffmanOutgoing_h +#define mozilla__net__Http2HuffmanOutgoing_h + +namespace mozilla { +namespace net { + +struct HuffmanOutgoingEntry { + uint32_t mValue; + uint8_t mLength; +}; + +static HuffmanOutgoingEntry HuffmanOutgoing[] = { +''') + +entries = [] +for line in sys.stdin: + line = line.strip() + obracket = line.rfind('[') + nbits = int(line[obracket + 1:-1]) + + lastbar = line.rfind('|') + space = line.find(' ', lastbar) + encend = line.rfind(' ', 0, obracket) + + enc = line[space:encend].strip() + val = int(enc, 16) + + entries.append({'length': nbits, 'value': val}) + +line = [] +for i, e in enumerate(entries): + sys.stdout.write(' { 0x%08x, %s }' % + (e['value'], e['length'])) + if i < (len(entries) - 1): + sys.stdout.write(',') + sys.stdout.write('\n') + +sys.stdout.write('''}; + +} // namespace net +} // namespace mozilla + +#endif // mozilla__net__Http2HuffmanOutgoing_h +''') |