import datetime
import argparse
import struct
import json
import base64
import sqlite3
parser = argparse.ArgumentParser()
parser.add_argument("dir")
args = parser.parse_args()

streams = {}

database = args.dir + '/db/schedule.db'
captures = args.dir + '/f/'

conn = sqlite3.connect(database)
for row in conn.execute('SELECT * FROM capture'):
    cid          = row[0]
    capture_time = row[1]
    filename     = captures + row[2][row[2].rfind('/'):]
    server_ip    = row[3]
    server_port  = row[4]
    app_name     = row[5]
    package_name = row[9]
    capture_set  = row[10]


    f = open(filename, "rb")
    packets = {}
    seq = 0
    while 1:
        header = f.read(16)
        if header:
            (timestamp, direction, length) = struct.unpack('Qii', header)
            #dt =  datetime.datetime.fromtimestamp(timestamp/1000)
            #print("DATETIME: ", dt)
            #print("direction: ", direction)
            #print("LENGTH: ", length)
            data =  f.read(length)
            packets[seq] =  {"timestamp": timestamp, "direction": direction, "data": base64.b64encode(data).decode('utf-8') }
            seq += 1
        else:
            break

    streams[cid] = {
        "capture_time": capture_time,
        "server_ip": server_ip,
        "server_port": server_port,
        "app_name": app_name,
        "package_name": package_name,
        "capture_set": capture_set,
        "packets": packets}

print( json.dumps(streams) )
