summaryrefslogtreecommitdiffstats
path: root/netwerk/protocol/http/make_outgoing_tables.py
blob: b9a4268202a582c8d6a84a0c5de42ae56069eeca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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
"""
)