Browse Source

chatgui: fix invite link and Russian channel name encoding

- chat_sync.c: after invite trampoline, check if connection to invite
  node is already UP and trigger cs_on_conn_up to send CHANNEL_INFO_REQ.
  Fixes invite not completing when connection is reused (Fix 1 side effect).
- mainwindow.cpp: use name.toUtf8().constData() instead of qPrintable()
  to preserve UTF-8 encoding on Windows (Russian channel names).
topo_upd
Evgeny 2 months ago
parent
commit
cbd9536a28
  1. 2
      tools/chatgui/src/mainwindow.cpp
  2. 12
      tools/chatgui/transport/chat_sync.c

2
tools/chatgui/src/mainwindow.cpp

@ -479,7 +479,7 @@ void MainWindow::onCreateGroupRequested() {
struct chat_channel_create* req = (struct chat_channel_create*)u_malloc(sizeof(*req));
memset(req, 0, sizeof(*req));
snprintf(req->channel_id, sizeof(req->channel_id), "%s", qPrintable(channelId));
snprintf(req->name, sizeof(req->name), "%s", qPrintable(name));
snprintf(req->name, sizeof(req->name), "%s", name.toUtf8().constData());
req->owner_node_id = ownerNodeId;
memcpy(req->x25519_pubkey, x25519_pub, 32);
memcpy(req->x25519_privkey, x25519_priv, 32);

12
tools/chatgui/transport/chat_sync.c

@ -650,6 +650,18 @@ static void cm_invite_trampoline(void* arg) {
conn_mgr_connect_from_invite(g->conn_mgr, ni, channel_id, 0, NULL, NULL);
}
if (g_cs && g_cs->pending_invite_ch_id != 0 && !g_cs->info_req_timer) {
struct ETCP_CONN* conn = NULL;
{
struct ll_entry* e = queue_find_data_by_index(inst->connections, (const uint8_t*)&node_id);
if (e) { struct conn_queue_entry* ce = (struct conn_queue_entry*)e->data; if (ce->conn->links_up) conn = ce->conn; }
}
if (conn) {
DEBUG_INFO(DEBUG_CATEGORY_DB_SYNC, "%s: invite conn already UP node=0x%016llx, triggering cs_on_conn_up", CS_ID, (unsigned long long)node_id);
cs_on_conn_up(conn, NULL);
}
}
/* free caller-owned ni */
while (ni->v4_addrs) { struct TOPO_ADDR4* n = ni->v4_addrs->next; u_free(ni->v4_addrs); ni->v4_addrs = n; }
u_free(ni);

Loading…
Cancel
Save