in scripts/qlog_parser.py [0:0]
def parse_http_frame_created(line):
data = {"stream_id": "unknown",
"frame": {"frame_type": "unknown"}
}
event_scid = "unknown"
segments = line.split('|')
segments = [segment.strip() for segment in segments]
assert(len(segments) > 1)
h3_frame_type = "unknown"
kv = {}
for i in range(1,len(segments)):
item = segments[i].split(':')
item = [i.strip() for i in item]
if(len(item) != 2):
continue
if item[0] == "scid":
event_scid = item[1]
if item[0] == "type":
h3_frame_type = h3_frame_type_[int(item[1])]
else:
kv[item[0]] = item[1]
data["frame"]["frame_type"] = h3_frame_type
data["stream_id"] = kv["stream_id"]
if h3_frame_type == "data":
return (data, event_scid)
elif h3_frame_type == "headers":
header_list = []
for i in range(1,len(segments)):
if segments[i].startswith("{name"):
match_header = re.findall(r'\{(.*?)\}', segments[i])
temp_header = {"name": "unknown", "value": "/"}
temp_header["name"] = match_header[0][5:]
if len(match_header) == 2:
temp_header["value"] = match_header[0][6:]
header_list.append(temp_header)
data["frame"]["headers"] = header_list
return (data, event_scid)
elif h3_frame_type == "cancel_push" or h3_frame_type == "push_promise":
data["frame"]["push_id"] = kv["push_id"]
return (data, event_scid)
elif h3_frame_type == "settings":
temp_set = []
for set_i in ["max_field_section_size", "max_pushes",
"qpack_max_table_capacity", "qpack_blocked_streams"]:
temp_set.append({set_i: int(kv[set_i])})
data["frame"]["settings"] = temp_set
return (data, event_scid)
else:
return (data, event_scid)