예제 #1
0
async def test_pid():
    s = settings.default()

    async def handler(client):
        assert client.pid() is None

    async with prudp.serve(handler, s, HOST, 12345):
        async with prudp.connect(s, HOST, 12345) as client:
            assert client.pid() is None
예제 #2
0
async def test_unreliable():
    s = settings.default()

    async def handler(client):
        assert await client.recv_unreliable() == b"ping"
        await client.send_unreliable(b"pong")

    async with prudp.serve(handler, s, HOST, 12345):
        async with prudp.connect(s, HOST, 12345) as client:
            await client.send_unreliable(b"ping")
            assert await client.recv_unreliable() == b"pong"
예제 #3
0
async def test_lite():
    s = settings.load("switch")

    async def handler(client):
        assert await client.recv() == b"ping"
        await client.send(b"pong")

    async with prudp.serve(handler, s, HOST, 12345):
        async with prudp.connect(s, HOST, 12345) as client:
            await client.send(b"ping")
            assert await client.recv() == b"pong"
예제 #4
0
async def test_fragmentation():
    s = settings.default()
    s["prudp.fragment_size"] = 10

    async def handler(client):
        assert await client.recv() == b"a" * 40
        await client.send(b"b" * 40)

    async with prudp.serve(handler, s, HOST, 12345):
        async with prudp.connect(s, HOST, 12345) as client:
            await client.send(b"a" * 40)
            assert await client.recv() == b"b" * 40
예제 #5
0
async def test_compression():
    s = settings.default()
    s["prudp.compression"] = s.COMPRESSION_ZLIB

    async def handler(client):
        assert await client.recv() == b"ping"
        await client.send(b"pong")

    async with prudp.serve(handler, s, HOST, 12345):
        async with prudp.connect(s, HOST, 12345) as client:
            await client.send(b"ping")
            assert await client.recv() == b"pong"
예제 #6
0
async def test_negotiation():
    s1 = settings.default()
    s1["prudp.minor_version"] = 2

    s2 = settings.default()
    s2["prudp.minor_version"] = 5

    async def handler(client):
        assert client.minor_version() == 2

    async with prudp.serve(handler, s1, HOST, 12345):
        async with prudp.connect(s2, HOST, 12345) as client:
            assert client.minor_version() == 2
예제 #7
0
async def serve(settings, servers, host="", port=0, vport=1, context=None, key=None):
	async def handle(client):
		host, port = client.remote_address()
		logger.debug("New RMC connection: %s:%i", host, port)
		
		client = RMCClient(settings, client)
		async with client:
			await client.start(servers)
	
	logger.info("Starting RMC server at %s:%i:%i", host, port, vport)
	async with prudp.serve(handle, settings, host, port, vport, 10, context, key):
		yield
	logger.info("RMC server is closed")
예제 #8
0
async def test_v0():
    s = settings.load("3ds")
    s["prudp.access_key"] = b"access key"

    async def handler(client):
        assert await client.recv() == b"ping"
        await client.send(b"pong")

    async with prudp.serve(handler, s, HOST, 12345):
        async with prudp.connect(s, HOST, 12345) as client:
            assert client.remote_address() == (HOST, 12345)

            await client.send(b"ping")
            assert await client.recv() == b"pong"
예제 #9
0
async def test_v0_alt():
    s = settings.load("3ds")
    s["prudp_v0.signature_version"] = 1
    s["prudp_v0.flags_version"] = 0
    s["prudp_v0.checksum_version"] = 0

    async def handler(client):
        assert await client.recv() == b"ping"
        await client.send(b"pong")

    async with prudp.serve(handler, s, HOST, 12345):
        async with prudp.connect(s, HOST, 12345) as client:
            await client.send(b"ping")
            assert await client.recv() == b"pong"
예제 #10
0
async def test_client_transport():
	s = settings.default()
	
	async def handler(client):
		data = await client.recv()
		await client.send(data[::-1])
	
	async with prudp.serve(handler, s, HOST, 12345):
		async with prudp.connect_transport(s, HOST, 12345) as transport:
			async with transport.connect(1) as client1:
				async with transport.connect(1) as client2:
					await client1.send(b"ping")
					await client2.send(b"test")
					assert await client1.recv() == b"gnip"
					assert await client2.recv() == b"tset"
예제 #11
0
async def test_substreams():
    s = settings.default()
    s["prudp.max_substream_id"] = 1

    async def handler(client):
        assert await client.recv(0) == b"test1"
        assert await client.recv(0) == b"test3"
        assert await client.recv(1) == b"test2"
        await client.send(b"pong", 1)

    async with prudp.serve(handler, s, HOST, 12345):
        async with prudp.connect(s, HOST, 12345) as client:
            await client.send(b"test1", 0)
            await client.send(b"test2", 1)
            await client.send(b"test3", 0)
            assert await client.recv(1) == b"pong"
예제 #12
0
async def test_credentials():
    s = settings.default()

    async def handler(client):
        assert client.pid() == 1000

    ticket = kerberos.ServerTicket()
    ticket.timestamp = common.DateTime.now()
    ticket.source = 1000
    ticket.session_key = bytes(32)
    data = ticket.encrypt(b"server key", s)

    ticket = kerberos.ClientTicket()
    ticket.session_key = bytes(32)
    ticket.target = 1001
    ticket.internal = data

    creds = kerberos.Credentials(ticket, 1000, 2000)
    async with prudp.serve(handler, s, HOST, 12345, key=b"server key"):
        async with prudp.connect(s, HOST, 12345, credentials=creds) as client:
            assert client.pid() == 1000