def parse_frames_processed()

in scripts/qlog_parser.py [0:0]


def parse_frames_processed(line):
    data = {
           "frames":[{"frame_type" : "unknow"}]
    }
    event_scid = "unknown"
    segments = line.split('|')
    segments = [segment.strip() for segment in segments]
    assert(len(segments) > 1)
    frame_type = -1
    for i in range(1,len(segments)):
        item = segments[i].split(':')
        item = [i.strip() for i in item]
        if len(item) == 2 and item[0] == "scid":
            event_scid = item[1]
        if(len(item) == 2 and item[0] == "type"):
            frame_type = int(item[1])
            break
    data["frames"][0]["frame_type"] = frame_type_[frame_type].lower()
    type_str = frame_type_[frame_type]

    if type_str == "PADDING":
        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] == "length":
                data["frames"][0]["payload_length"] = int(item[1])
        return (data, event_scid)
    elif type_str == "PING":
        return (data, event_scid)
    
    elif type_str == "ACK":
        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] == "ack_range":
                s_clean = item[1].strip("{}")  
                pairs = s_clean.split(", ")  
                result = [list(map(int, pair.split(" - "))) for pair in pairs]
                for i in range(len(result)):
                    if result[i][0] == result[i][1]:
                        result[i] = [result[i][0]]
                data["frames"][0]["acked_ranges"] = result
        return (data, event_scid)
    
    elif type_str == "RESET_STREAM" or type_str == "STOP_SENDING":
        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] == "stream_id":
                data["frames"][0]["stream_id"] = int(item[1])
            elif item[0] == "err_code":
                data["frames"][0]["error_code"] = int(item[1])
            elif item[0] == "final_size":
                data["frames"][0]["final_size"] = int(item[1])
        return (data, event_scid)
    
    elif type_str == "CRYPTO":
        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] == "offset":
                data["frames"][0]["offset"] = int(item[1])
            elif item[0] == "length":
                data["frames"][0]["length"] = int(item[1])
        return (data, event_scid)
    
    elif type_str == "NEW_TOKEN":
        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] == "token":
                data["frames"][0]["token"] = item[1]
        return (data, event_scid)
    
    elif type_str == "STREAM":
        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] == "data_length":
                data["frames"][0]["length"] = int(item[1])
            elif item[0] == "data_offset":
                data["frames"][0]["offset"] = int(item[1])
            elif item[0] == "fin":
                data["frames"][0]["fin"] = False
                if int(item[1]):
                    data["frames"][0]["offset"] = True
        return (data, event_scid)
    
    elif type_str == "MAX_DATA":
        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] == "max_data":
                data["frames"][0]["maximum"] = int(item[1])
        return (data, event_scid)
    
    elif type_str == "MAX_STREAM_DATA":
        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] == "stream_id":
                data["frames"][0]["stream_id"] = int(item[1])
            elif item[0] == "max_stream_data":
                data["frames"][0]["maximum"] = int(item[1])
        return (data, event_scid)
    
    elif type_str == "MAX_STREAMS":
        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] == "stream_type":
                data["frames"][0]["stream_type"] = item[1]
            elif item[0] == "maximum":
                data["frames"][0]["maximum"] = int(item[1])
        return (data, event_scid)
    
    elif type_str == "DATA_BLOCKED":
        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] == "limit":
                data["frames"][0]["limit"] = int(item[1])
        return (data, event_scid)
    
    elif type_str == "STREAM_DATA_BLOCKED":
        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] == "stream_id":
                data["frames"][0]["stream_id"] = int(item[1])
            elif item[0] == "limit":
                data["frames"][0]["limit"] = int(item[1])
        return (data, event_scid)
    
    elif type_str == "STREAMS_BLOCKED":
        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] == "stream_type":
                data["frames"][0]["stream_type"] = item[1]
            elif item[0] == "limit":
                data["frames"][0]["limit"] = int(item[1])
        return (data, event_scid)
    
    elif type_str == "NEW_CONNECTION_ID":
        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] in ["sequence_number", "retire_prior_to", "connection_id_length"]:
                data["frames"][0][item[0]] = int(item[1])
            elif item[0] == "connection_id":
                data["frames"][0]["connection_id"] = item[1]
        return (data, event_scid)

    elif type_str == "CONNECTION_CLOSE":
        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] == "err_code":
                data["frames"][0]["error_code"] = int(item[1])
        return (data, event_scid)
    else:
        return (data, event_scid)