示例#1
0
def client_and_server(
    client_options={},
    client_patch=lambda x: None,
    server_options={},
    server_patch=lambda x: None,
    transport_options={},
):
    client = QuicConnection(
        configuration=QuicConfiguration(is_client=True, **client_options))
    client._ack_delay = 0
    client_patch(client)

    server = QuicConnection(
        configuration=QuicConfiguration(is_client=False,
                                        certificate=SERVER_CERTIFICATE,
                                        private_key=SERVER_PRIVATE_KEY,
                                        **server_options))
    server._ack_delay = 0
    server_patch(server)

    # perform handshake
    client.connect(SERVER_ADDR, now=time.time())
    for i in range(3):
        roundtrip(client, server)

    yield client, server

    # close
    client.close()
    server.close()
示例#2
0
def client_and_server(
    client_options={},
    client_patch=lambda x: None,
    server_options={},
    server_patch=lambda x: None,
    server_stream_handler=None,
    transport_options={},
):
    client = QuicConnection(
        configuration=QuicConfiguration(is_client=True, **client_options))
    client_patch(client)

    server = QuicConnection(
        configuration=QuicConfiguration(is_client=False,
                                        certificate=SERVER_CERTIFICATE,
                                        private_key=SERVER_PRIVATE_KEY,
                                        **server_options),
        stream_handler=server_stream_handler,
    )
    server_patch(server)

    # perform handshake
    create_transport(client, server, **transport_options)

    yield client, server

    # close
    client.close()
    server.close()
示例#3
0
def client_and_server():
    client = QuicConnection(is_client=True)
    server = QuicConnection(
        is_client=False, certificate=SERVER_CERTIFICATE, private_key=SERVER_PRIVATE_KEY
    )

    # perform handshake
    create_transport(client, server)

    yield client, server
    client.close()
    server.close()
示例#4
0
    def test_handle_connection_close_frame_app(self):
        client = QuicConnection(is_client=True)
        server = QuicConnection(
            is_client=False,
            certificate=SERVER_CERTIFICATE,
            private_key=SERVER_PRIVATE_KEY,
        )

        # perform handshake
        client_transport, server_transport = create_transport(client, server)
        self.assertEqual(client_transport.sent, 4)
        self.assertEqual(server_transport.sent, 4)

        # close
        server.close(error_code=QuicErrorCode.NO_ERROR)
        self.assertEqual(client_transport.sent, 5)
        self.assertEqual(server_transport.sent, 5)
示例#5
0
    def test_decryption_error(self):
        client = QuicConnection(is_client=True)

        server = QuicConnection(
            is_client=False,
            certificate=SERVER_CERTIFICATE,
            private_key=SERVER_PRIVATE_KEY,
        )

        # perform handshake
        client_transport, server_transport = create_transport(client, server)
        self.assertEqual(client_transport.sent, 4)
        self.assertEqual(server_transport.sent, 4)

        # mess with encryption key
        server.spaces[tls.Epoch.ONE_RTT].crypto.send.setup(
            tls.CipherSuite.AES_128_GCM_SHA256, bytes(48))

        # close
        server.close(error_code=QuicErrorCode.NO_ERROR)
        self.assertEqual(client_transport.sent, 4)
        self.assertEqual(server_transport.sent, 5)