chat: invite-ссылки с выбором достижимого узла + tcp_io фикс half-close FIN
- Общий модуль invite_build: сборка utun://-ссылок, авто-выбор лучшего достижимого узла, список кандидатов (вынесено из android jni_bridge) - chatgui: диалог invite с выбором узла (комбобокс), события INVITE_CANDIDATES / INVITE_LINK_READY через gui_bridge - headless/chatcli: invite <ch_id> [node_id], команда invite_nodes - tcp_io: error_cb отличает грациозный EPOLLHUP (SO_ERROR==0) от реальной ошибки — при приостановленном чтении FIN не роняет недослейные данные (фикс flaky half-close) - run_test.sh: half-close echo на выделенном порту 19190 + отдельный DNAT (был недостижим)
This commit is contained in:
1 parent
a17a85a383
commit
1345f44e10
23 files changed
+872
-539
No files matched your search
+12
-4
@@ -14,7 +14,8 @@
|
||||
# members <ch_id> list members with full state
|
||||
# messages <ch_id> [count] read last messages
|
||||
# send <ch_id> <text> send text message
|
||||
# invite <ch_id> create invite link
|
||||
# invite <ch_id> [node_id] create invite link (auto best node by default)
|
||||
# invite_nodes <ch_id> list reachable nodes for invite
|
||||
# connect <utun://...> join channel via invite link
|
||||
# create <name> create new channel
|
||||
# invite_to <ch_id> <node_id> <pubkey_hex> <ip:port> [proto]
|
||||
@@ -97,8 +98,14 @@ def cmd_messages(ch_id, count=None):
|
||||
def cmd_send(ch_id, text):
|
||||
_req("send", ch=ch_id, content_type="text", data=text)
|
||||
|
||||
def cmd_invite(ch_id):
|
||||
_req("invite", ch=ch_id)
|
||||
def cmd_invite(ch_id, node_id=None):
|
||||
params = {"ch": ch_id}
|
||||
if node_id:
|
||||
params["node_id"] = node_id
|
||||
_req("invite", **params)
|
||||
|
||||
def cmd_invite_nodes(ch_id):
|
||||
_req("invite_nodes", ch=ch_id)
|
||||
|
||||
def cmd_connect(link):
|
||||
_req("connect", link=link)
|
||||
@@ -166,7 +173,8 @@ def main():
|
||||
elif cmd == "members": cmd_members(*args[1:2] if len(args) > 1 else (_die("usage: members <ch_id>"),))
|
||||
elif cmd in ("messages","msgs"): cmd_messages(*args[1:3] if len(args) > 1 else (_die("usage: messages <ch_id> [count]"),))
|
||||
elif cmd == "send": cmd_send(*args[1:3] if len(args) > 2 else (_die("usage: send <ch_id> <text>"),))
|
||||
elif cmd == "invite": cmd_invite(*args[1:2] if len(args) > 1 else (_die("usage: invite <ch_id>"),))
|
||||
elif cmd == "invite": cmd_invite(*args[1:3] if len(args) > 1 else (_die("usage: invite <ch_id> [node_id]"),))
|
||||
elif cmd == "invite_nodes": cmd_invite_nodes(*args[1:2] if len(args) > 1 else (_die("usage: invite_nodes <ch_id>"),))
|
||||
elif cmd in ("connect","join"): cmd_connect(*args[1:2] if len(args) > 1 else (_die("usage: connect <utun://...>"),))
|
||||
elif cmd == "create": cmd_create(*args[1:2] if len(args) > 1 else (_die("usage: create <name>"),))
|
||||
elif cmd == "invite_to": cmd_invite_to(*args[1:6] if len(args) > 4 else (_die("usage: invite_to <ch_id> <node_id> <pubkey_hex> <ip:port> [proto]"),))
|
||||
|
||||
Reference in new issue
Block a user