diff options
Diffstat (limited to 'netwerk/protocol/http/make_outgoing_tables.py')
-rw-r--r-- | netwerk/protocol/http/make_outgoing_tables.py | 58 |
1 files changed, 58 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 0000000000..b9a4268202 --- /dev/null +++ b/netwerk/protocol/http/make_outgoing_tables.py @@ -0,0 +1,58 @@ +# 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 const 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 +""" +) |