p2p: split peer_timeout(120s) from direct_timeout(15s) so pairing code stays usable for its full TTL
This commit is contained in:
1 parent
8f9732ec0c
commit
4e92d5d88d
1 file changed
+9
-6
@@ -250,11 +250,13 @@ class P2PSocket:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self, signal_url, room, *, direct_timeout=15, retries=6, stun=True,
|
self, signal_url, room, *, direct_timeout=15, peer_timeout=120, retries=6,
|
||||||
access_key=DEFAULT_ACCESS_KEY,
|
stun=True, access_key=DEFAULT_ACCESS_KEY,
|
||||||
):
|
):
|
||||||
self.signal = Signal(signal_url, room, retries, access_key)
|
self.signal = Signal(signal_url, room, retries, access_key)
|
||||||
self.direct_timeout = direct_timeout
|
self.direct_timeout = direct_timeout
|
||||||
|
# 等对端进房的时长;须 >= 配对码有效期(120s),否则码没过期本端已离房
|
||||||
|
self.peer_timeout = peer_timeout
|
||||||
self.stun = stun
|
self.stun = stun
|
||||||
self.mode = "connecting"
|
self.mode = "connecting"
|
||||||
self.closed = False
|
self.closed = False
|
||||||
@@ -270,12 +272,13 @@ class P2PSocket:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def connect(
|
async def connect(
|
||||||
cls, signal_url: str, room: str, *, direct_timeout=15, retries=6, stun=True,
|
cls, signal_url: str, room: str, *, direct_timeout=15, peer_timeout=120,
|
||||||
access_key=DEFAULT_ACCESS_KEY,
|
retries=6, stun=True, access_key=DEFAULT_ACCESS_KEY,
|
||||||
):
|
):
|
||||||
"""连接同一 UUID 的另一个客户端,直连失败自动回退中继。"""
|
"""连接同一 UUID 的另一个客户端,直连失败自动回退中继。"""
|
||||||
self = cls(
|
self = cls(
|
||||||
signal_url, room, direct_timeout=direct_timeout, retries=retries, stun=stun,
|
signal_url, room, direct_timeout=direct_timeout,
|
||||||
|
peer_timeout=peer_timeout, retries=retries, stun=stun,
|
||||||
access_key=access_key,
|
access_key=access_key,
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
@@ -289,7 +292,7 @@ class P2PSocket:
|
|||||||
|
|
||||||
async def _connect(self):
|
async def _connect(self):
|
||||||
await self.signal.start()
|
await self.signal.start()
|
||||||
peer = await self.signal.expect("peer")
|
peer = await self.signal.expect("peer", self.peer_timeout)
|
||||||
|
|
||||||
# 一次性 ECDH:即使走中继,服务器也拿不到会话密钥。
|
# 一次性 ECDH:即使走中继,服务器也拿不到会话密钥。
|
||||||
private, public = keypair()
|
private, public = keypair()
|
||||||
|
|||||||
Reference in new issue
Block a user