fix: stable ETCP reconnect (no REINIT loop), own voice playback, peersOnline via conn state, UDP log diagnostics
This commit is contained in:
1 parent
70797f921e
commit
a3b00984ed
4 files changed
+67
-26
No files matched your search
+9
-2
@@ -82,6 +82,7 @@ void chat_core_submit_trampoline(void* arg) {
|
||||
struct media_submit_ctx {
|
||||
char channel_id[64];
|
||||
char content_type[32];
|
||||
char media_dest[512];
|
||||
char media_base[512];
|
||||
uint8_t msg_data[4096];
|
||||
uint32_t msg_data_len;
|
||||
@@ -153,11 +154,16 @@ static void on_media_registered(void* arg, int err, const struct media_index_res
|
||||
}
|
||||
|
||||
int ret = db_sync_insert_signed(si, json, strlen(json), json_sig, 64, ts, NULL);
|
||||
if (ret != 0)
|
||||
if (ret != 0) {
|
||||
DEBUG_ERROR(DEBUG_CATEGORY_DB_SYNC, "%s: media insert failed ret=%d", CC_ID, ret);
|
||||
else
|
||||
} else {
|
||||
DEBUG_INFO(DEBUG_CATEGORY_DB_SYNC, "%s: media message inserted ch=%s ts=%llu",
|
||||
CC_ID, mctx->channel_id, (unsigned long long)ts);
|
||||
const char* base = strrchr(mctx->media_dest, '/');
|
||||
const char* filename = base ? base + 1 : mctx->media_dest;
|
||||
char attrs[320]; snprintf(attrs, sizeof(attrs), "{\"st\":\"fl\",\"fp\":\"%s\"}", filename);
|
||||
chat_core_update_local_attrs(mctx->channel_id, ts, json_sig, attrs);
|
||||
}
|
||||
|
||||
u_free(sig_msg); u_free(json); u_free(full_data); u_free(mctx);
|
||||
}
|
||||
@@ -190,6 +196,7 @@ static void chat_core_submit_media_message(struct chat_msg_submit* req) {
|
||||
if (!mctx) return;
|
||||
snprintf(mctx->channel_id, sizeof(mctx->channel_id), "%s", req->channel_id);
|
||||
snprintf(mctx->content_type, sizeof(mctx->content_type), "%s", req->content_type);
|
||||
snprintf(mctx->media_dest, sizeof(mctx->media_dest), "%s", req->media_dest);
|
||||
snprintf(mctx->media_base, sizeof(mctx->media_base), "%s", media_base);
|
||||
mctx->timestamp = req->timestamp;
|
||||
if (req->data && req->data_len > 0) {
|
||||
|
||||
@@ -195,6 +195,8 @@ static void etcp_link_init_timer_cbk(void* arg) {
|
||||
}
|
||||
link->init_timer = uasync_set_timeout(link->etcp->instance->ua, link->init_timeout, link, etcp_link_init_timer_cbk, "link_init");
|
||||
|
||||
if (link->link_state == 3 && link->initialized) return;
|
||||
if (link->etcp->links_up > 0) return; /* another link is already UP on this connection */
|
||||
if (link->link_state == 1) etcp_link_send_init(link,1,0);// init (with etcp reset)
|
||||
else etcp_link_send_init(link,0,0);// no etcp reset (reinit)
|
||||
}
|
||||
@@ -1533,11 +1535,7 @@ static int handle_init_response_client(struct ETCP_SOCKET* e_sock, struct ETCP_D
|
||||
link->init_timer = NULL;
|
||||
}
|
||||
|
||||
if (pkt_code == ETCP_INIT_RESPONSE && link->etcp->got_initial_pkt) {
|
||||
DEBUG_INFO(DEBUG_CATEGORY_ETCP, "[%s] REINIT from client: INIT_RESPONSE(0x03) received, reinit conn=%p",
|
||||
link->etcp->log_name, link->etcp);
|
||||
etcp_conn_reinit(link->etcp);
|
||||
}
|
||||
|
||||
|
||||
if (link->etcp->initialized == 0) {
|
||||
etcp_conn_ready(link->etcp);
|
||||
@@ -1895,6 +1893,7 @@ void etcp_connections_read_callback_socket(socket_t sock, void* arg) {
|
||||
// Check if WE have an outbound (master) link on this conn
|
||||
struct ETCP_LINK* ml = conn->links;
|
||||
while (ml) { if (ml->is_server == 0) break; ml = ml->next; }
|
||||
int yielding = 0;
|
||||
if (ml) {
|
||||
if (conn->instance->node_id < peer_id) {
|
||||
DEBUG_INFO(DEBUG_CATEGORY_CONNECTION, "[%s] COLLISION: we=master node_id=%016llx < peer=%016llx — sending collision INIT",
|
||||
@@ -1905,17 +1904,17 @@ void etcp_connections_read_callback_socket(socket_t sock, void* arg) {
|
||||
}
|
||||
DEBUG_INFO(DEBUG_CATEGORY_CONNECTION, "[%s] COLLISION: peer smaller, yielding master, processing as slave",
|
||||
conn->log_name);
|
||||
yielding = 1;
|
||||
}
|
||||
|
||||
// Always sync session_id; reset if new session or data was flowing
|
||||
{ int sess_changed = (conn->session_id != session_id);
|
||||
conn->session_id = session_id;
|
||||
if (sess_changed || conn->got_initial_pkt) {
|
||||
send_reset = 1;
|
||||
DEBUG_INFO(DEBUG_CATEGORY_CONNECTION, "[%s] REINIT existing link: code=0x%02x sess=%08x→%08x got_init=%d initialized=%d links_up=%d",
|
||||
conn->log_name, code, conn->session_id, session_id, conn->got_initial_pkt, conn->initialized, conn->links_up);
|
||||
etcp_conn_reinit(conn);
|
||||
} }
|
||||
/* Sync session_id; reset only if new session (not when yielding to master) */
|
||||
conn->session_id = session_id;
|
||||
if (!yielding && conn->got_initial_pkt) {
|
||||
send_reset = 1;
|
||||
DEBUG_INFO(DEBUG_CATEGORY_CONNECTION, "[%s] REINIT existing link: code=0x%02x sess=%08x→%08x got_init=%d initialized=%d links_up=%d",
|
||||
conn->log_name, code, conn->session_id, session_id, conn->got_initial_pkt, conn->initialized, conn->links_up);
|
||||
etcp_conn_reinit(conn);
|
||||
}
|
||||
}
|
||||
|
||||
// Cancel existing timers
|
||||
|
||||
Reference in new issue
Block a user