def parse_http_frame_created()

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)