1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
import asyncio
import functools
import logging
import os
import sys
from collections.abc import Callable, Coroutine
if sys.version_info >= (3, 10):
from typing import ParamSpec
else:
from typing_extensions import ParamSpec
from aioice import ice
P = ParamSpec("P")
def asynctest(
coro: Callable[P, Coroutine[None, None, None]],
) -> Callable[P, None]:
@functools.wraps(coro)
def wrap(*args: P.args, **kwargs: P.kwargs) -> None:
asyncio.run(coro(*args, **kwargs))
return wrap
async def invite_accept(conn_a: ice.Connection, conn_b: ice.Connection) -> None:
# invite
await conn_a.gather_candidates()
for candidate in conn_a.local_candidates:
await conn_b.add_remote_candidate(candidate)
await conn_b.add_remote_candidate(None)
conn_b.remote_username = conn_a.local_username
conn_b.remote_password = conn_a.local_password
# accept
await conn_b.gather_candidates()
for candidate in conn_b.local_candidates:
await conn_a.add_remote_candidate(candidate)
await conn_a.add_remote_candidate(None)
conn_a.remote_username = conn_b.local_username
conn_a.remote_password = conn_b.local_password
def read_message(name: str) -> bytes:
path = os.path.join(os.path.dirname(__file__), "data", name)
with open(path, "rb") as fp:
return fp.read()
if os.environ.get("AIOICE_DEBUG"):
logging.basicConfig(level=logging.DEBUG)
|