if __name__ == '__main__':
    host, port = parse_args()
    out_dir = os.path.join(os.getcwd(), host)
    if not os.path.exists(out_dir):
        try:
            os.mkdir(out_dir)
        except OSError:
            out_dir = mkdtemp()
    print('Using %s as output directory' % (out_dir))
    print('Trying to connect to %s:%i' % (host, port))
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((host, port))
    connection = TLSConnection(sock)
    connection.handshakeClientCert(nextProtos=["spdy/%i" % SPDY_VERSION])
    print('TLS NPN Selected: %s' % connection.next_proto)
    spdy_ctx = Context(CLIENT, version=SPDY_VERSION)
    connection.write(get_site_resource(spdy_ctx, host))
    headers = {spdy_ctx._last_stream_id: {'path': 'index'}}
    res_files = {
        spdy_ctx._last_stream_id: (os.path.join(out_dir, 'index'), None)
    }
    resources = None
    goaway = False
    while not goaway:
        answer = connection.read()  # Blocking
        spdy_ctx.incoming(answer)
        frame = get_frame(spdy_ctx)
        while frame:
            sid = getattr(frame, 'stream_id', None)
            if hasattr(frame, 'headers'):
                print('<<', frame, 'Headers:', frame.headers)  # DEBUG
Example #2
0
        TODO: Doesn't work in python 2, remedy this
    """
    hexa = ''
    for s in string:
        hexa += '0x%02x' % s + ' '
    return hexa.rstrip()


def print_encoded_frame(frame):
    for i in range(0, len(frame), 4):
        print(str2hexa(frame[i:i + 4]))


if __name__ == '__main__':
    ctx = Context(CLIENT)
    frame = SynStream(1,
                      headers={
                          'method': 'GET',
                          'url': '/',
                          'version': 'HTTP/1.1',
                          'host': 'www.google.com',
                          'scheme': 'https',
                      })
    print('SYN Frame')
    byte_frame = ctx._encode_frame(frame)
    print_encoded_frame(byte_frame)
    frame2 = ctx._parse_frame(byte_frame)[0]
    print('decoded: %s, %r' % (frame2, frame.headers))

    print('SETTINGS Frame')
        print(str(resp) + ", SAYS SERVER")
        data = DataFrame(f.stream_id, b"hello, world!", flags=1)
        conn.put_frame(data)
        print(str(data) + ", SAYS SERVER")
        goaway = Goaway(f.stream_id)
        conn.put_frame(goaway)
        print(str(goaway) + ", SAYS SERVER")
    elif isinstance(f, Goaway):
        return True


try:
    print('Running one-time one-client SPDY Server...')
    client_socket, address = server.accept()
    ss = ctx.wrap_socket(client_socket, server_side=True)
    conn = Context(SERVER)
    finish = False
    while not finish:
        d = ss.recv(1024)
        conn.incoming(d)
        frame = conn.get_frame()
        if frame:
            finish = handle_frame(conn, frame)
            outgoing = conn.outgoing()
            if outgoing:
                ss.sendall(outgoing)

except Exception as exc:
    print(exc)
finally:
    server.close()