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)