diff --git a/dap-sdk/net/client/dap_client_pvt.c b/dap-sdk/net/client/dap_client_pvt.c index b2c15f14b12208354f607460a588b7958cefb7bd..58349cc6a5df98a64ee225eb72fa3561f504dec1 100644 --- a/dap-sdk/net/client/dap_client_pvt.c +++ b/dap-sdk/net/client/dap_client_pvt.c @@ -167,8 +167,8 @@ void dap_client_pvt_new(dap_client_pvt_t * a_client_pvt) void dap_client_pvt_delete(dap_client_pvt_t * a_client_pvt) { assert(a_client_pvt); - // delete from list - if(dap_client_pvt_hh_del_unsafe(a_client_pvt)<0){ + + if (!dap_client_pvt_find(a_client_pvt->uuid)) { if(s_debug_more) log_it(L_DEBUG, "dap_client_pvt 0x%x already deleted", a_client_pvt); return; @@ -178,6 +178,8 @@ void dap_client_pvt_delete(dap_client_pvt_t * a_client_pvt) if (a_client_pvt->stream_es) { dap_events_socket_remove_and_delete_unsafe(a_client_pvt->stream_es, true); } + // delete from list + dap_client_pvt_hh_del_unsafe(a_client_pvt); if(s_debug_more) log_it(L_INFO, "dap_client_pvt_delete 0x%x", a_client_pvt); @@ -236,17 +238,21 @@ static bool s_stream_timer_timeout_check(void * a_arg) dap_events_socket_t * l_es = dap_worker_esocket_find_uuid(l_worker, *l_es_uuid_ptr); if(l_es){ if (l_es->flags & DAP_SOCK_CONNECTING ){ - dap_client_pvt_t * l_client_pvt =(dap_client_pvt_t *) l_es->_inheritor;//(l_client) ? DAP_CLIENT_PVT(l_client) : NULL; - - log_it(L_WARNING,"Connecting timeout for stream uplink request http://%s:%u/, possible network problems or host is down", - l_client_pvt->uplink_addr, l_client_pvt->uplink_port); - l_client_pvt->is_closed_by_timeout = true; - if(l_es->callbacks.error_callback) { - l_es->callbacks.error_callback(l_es,ETIMEDOUT); + dap_client_pvt_t * l_client_pvt = (dap_client_pvt_t *)l_es->_inheritor; + if (dap_client_pvt_find(l_client_pvt->uuid)) { + log_it(L_WARNING,"Connecting timeout for stream uplink request http://%s:%u/, possible network problems or host is down", + l_client_pvt->uplink_addr, l_client_pvt->uplink_port); + l_client_pvt->is_closed_by_timeout = true; + if(l_es->callbacks.error_callback) { + l_es->callbacks.error_callback(l_es,ETIMEDOUT); + } + log_it(L_INFO, "Close %s sock %u type %d by timeout", + l_es->remote_addr_str ? l_es->remote_addr_str : "", l_es->socket, l_es->type); + dap_client_delete_unsafe(l_client_pvt->client); + } else { + log_it(L_ERROR,"Connecting timeout for unexistent client"); + dap_events_socket_remove_and_delete_unsafe(l_es,true); } - log_it(L_INFO, "Close %s sock %u type %d by timeout", - l_es->remote_addr_str ? l_es->remote_addr_str : "", l_es->socket, l_es->type); - dap_events_socket_remove_and_delete_unsafe(l_es,true); }else if(s_debug_more) log_it(L_DEBUG,"Socket %d is connected, close check timer", l_es->socket); @@ -273,21 +279,27 @@ static bool s_stream_timer_timeout_after_connected_check(void * a_arg) dap_events_socket_t * l_es = dap_worker_esocket_find_uuid(l_worker, *l_es_uuid_ptr); if( l_es ){ - dap_client_pvt_t * l_client_pvt =(dap_client_pvt_t *) l_es->_inheritor;//(l_client) ? DAP_CLIENT_PVT(l_client) : NULL; - if ( time(NULL)- l_client_pvt->ts_last_read >= s_client_timeout_read_after_connect_seconds){ - - log_it(L_WARNING,"Connecting timeout for streaming uplink http://%s:%u/, possible network problems or host is down", - l_client_pvt->uplink_addr, l_client_pvt->uplink_port); - l_client_pvt->is_closed_by_timeout = true; - if(l_es->callbacks.error_callback) { - l_es->callbacks.error_callback(l_es,ETIMEDOUT); - } - log_it(L_INFO, "Close streaming socket %s by timeout", - l_es->remote_addr_str ? l_es->remote_addr_str : "", l_es->socket); + dap_client_pvt_t * l_client_pvt = (dap_client_pvt_t *)l_es->_inheritor; + if (dap_client_pvt_find(l_client_pvt->uuid)) { + if ( time(NULL)- l_client_pvt->ts_last_read >= s_client_timeout_read_after_connect_seconds){ + + log_it(L_WARNING,"Activity timeout for streaming uplink http://%s:%u/, possible network problems or host is down", + l_client_pvt->uplink_addr, l_client_pvt->uplink_port); + l_client_pvt->is_closed_by_timeout = true; + if(l_es->callbacks.error_callback) { + l_es->callbacks.error_callback(l_es,ETIMEDOUT); + } + log_it(L_INFO, "Close streaming socket %s by timeout", + l_es->remote_addr_str ? l_es->remote_addr_str : "", l_es->socket); + dap_client_delete_unsafe(l_client_pvt->client); + }else + if(s_debug_more) + log_it(L_DEBUG,"Streaming socket %d is connected, close check timer", l_es->socket); + } else { + log_it(L_ERROR,"Activity timeout for unexistent client"); dap_events_socket_remove_and_delete_unsafe(l_es,true); - }else - if(s_debug_more) - log_it(L_DEBUG,"Streaming socket %d is connected, close check timer", l_es->socket); + } + }else if(s_debug_more) log_it(L_DEBUG,"Streaming socket %"DAP_UINT64_FORMAT_u" is finished, close check timer", *l_es_uuid_ptr); @@ -652,7 +664,7 @@ static bool s_stage_status_after(dap_client_pvt_t * a_client_pvt) log_it(L_ERROR,"Can't run timer for bigger delay before the next enc_init request"); } } else { - log_it(L_ERROR, "Connet to %s:%u failed", a_client_pvt->uplink_addr, a_client_pvt->uplink_port); + log_it(L_ERROR, "Connect to %s:%u failed", a_client_pvt->uplink_addr, a_client_pvt->uplink_port); dap_client_delete_mt(a_client_pvt->client); } } @@ -928,8 +940,7 @@ static void s_request_response(void * a_response, size_t a_response_size, void * static void s_enc_init_response(dap_client_t * a_client, void * a_response, size_t a_response_size) { dap_client_pvt_t * l_client_pvt = dap_client_pvt_find(a_client->pvt_uuid); - if (!l_client_pvt) - return; + if (!l_client_pvt) return; if (!l_client_pvt->session_key_open){ log_it(L_ERROR, "m_enc_init_response: session is NULL!"); @@ -1044,9 +1055,9 @@ static void s_enc_init_response(dap_client_t * a_client, void * a_response, size */ static void s_enc_init_error(dap_client_t * a_client, int a_err_code) { - dap_client_pvt_t * l_client_pvt = DAP_CLIENT_PVT(a_client); - assert(l_client_pvt); + dap_client_pvt_t * l_client_pvt = dap_client_pvt_find(a_client->pvt_uuid); log_it(L_ERROR, "ENC: Can't init ecnryption session, err code %d", a_err_code); + if (!l_client_pvt) return; if (a_err_code == ETIMEDOUT) { l_client_pvt->last_error = ERROR_NETWORK_CONNECTION_TIMEOUT; } else { @@ -1064,9 +1075,8 @@ static void s_enc_init_error(dap_client_t * a_client, int a_err_code) */ static void s_stream_ctl_response(dap_client_t * a_client, void * a_data, size_t a_data_size) { - dap_client_pvt_t * l_client_pvt = DAP_CLIENT_PVT(a_client); - assert(l_client_pvt); - + dap_client_pvt_t *l_client_pvt = dap_client_pvt_find(a_client->pvt_uuid); + if (!l_client_pvt) return; if(s_debug_more) log_it(L_DEBUG, "STREAM_CTL response %u bytes length recieved", a_data_size); char * l_response_str = DAP_NEW_Z_SIZE(char, a_data_size + 1); @@ -1225,8 +1235,7 @@ static void s_stream_es_callback_delete(dap_events_socket_t *a_es, void *arg) (void) arg; log_it(L_INFO, "Stream delete callback"); - dap_client_pvt_t * l_client_pvt =(dap_client_pvt_t*) a_es->_inheritor; - + dap_client_pvt_t *l_client_pvt = (dap_client_pvt_t *)a_es->_inheritor; a_es->_inheritor = NULL; // To prevent delete in reactor if(l_client_pvt == NULL) { @@ -1234,16 +1243,14 @@ static void s_stream_es_callback_delete(dap_events_socket_t *a_es, void *arg) return; } + if (!dap_client_pvt_find(l_client_pvt->uuid)) { + log_it(L_ERROR, "dap_client_pvt is corrupted"); + return; + } + if(s_debug_more) log_it(L_DEBUG, "Delete stream socket for client_pvt=0x%x", l_client_pvt); - if (l_client_pvt->stage_status_error_callback) { - if(l_client_pvt == l_client_pvt->client->_internal) - l_client_pvt->stage_status_error_callback(l_client_pvt->client, (void *) true); - else { - log_it(L_ERROR, "client_pvt->client=%x corrupted", l_client_pvt->client->_internal); - } - } dap_stream_delete(l_client_pvt->stream); if (l_client_pvt->stream_es) { DAP_DEL_Z(l_client_pvt->stream_es->remote_addr_str) @@ -1261,8 +1268,7 @@ static void s_stream_es_callback_delete(dap_events_socket_t *a_es, void *arg) static void s_stream_es_callback_read(dap_events_socket_t * a_es, void * arg) { (void) arg; - //dap_client_t * l_client = DAP_CLIENT(a_es); - dap_client_pvt_t * l_client_pvt =(dap_client_pvt_t *) a_es->_inheritor;//(l_client) ? DAP_CLIENT_PVT(l_client) : NULL; + dap_client_pvt_t * l_client_pvt =(dap_client_pvt_t *) a_es->_inheritor; l_client_pvt->ts_last_read = time(NULL); switch (l_client_pvt->stage) { @@ -1308,8 +1314,6 @@ static void s_stream_es_callback_read(dap_events_socket_t * a_es, void * arg) static void s_stream_es_callback_write(dap_events_socket_t * a_es, void * arg) { (void) arg; - //dap_client_t * l_client = DAP_CLIENT(a_es); - //dap_client_pvt_t * l_client_pvt = (l_client) ? DAP_CLIENT_PVT(l_client) : NULL; dap_client_pvt_t * l_client_pvt = a_es->_inheritor; if (l_client_pvt->stage_status == STAGE_STATUS_ERROR || !l_client_pvt->stream) @@ -1345,7 +1349,6 @@ static void s_stream_es_callback_write(dap_events_socket_t * a_es, void * arg) */ static void s_stream_es_callback_error(dap_events_socket_t * a_es, int a_error) { - a_es->flags |= DAP_SOCK_SIGNAL_CLOSE; dap_client_pvt_t *l_client_pvt = (dap_client_pvt_t *) a_es->_inheritor; if (!l_client_pvt) return; diff --git a/modules/channel/chain/dap_stream_ch_chain.c b/modules/channel/chain/dap_stream_ch_chain.c index 6a8beefe1c1ad9c583939bd407cbd73b3ef6684b..a567e3ac4f6b83e750289a9bb7e05a3c1a49bf4d 100644 --- a/modules/channel/chain/dap_stream_ch_chain.c +++ b/modules/channel/chain/dap_stream_ch_chain.c @@ -1483,7 +1483,7 @@ void s_stream_ch_packet_out(dap_stream_ch_t* a_ch, void* a_arg) dap_stream_ch_chain_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNCED_CHAINS, l_ch_chain->request_hdr.net_id.uint64, l_ch_chain->request_hdr.chain_id.uint64, l_ch_chain->request_hdr.cell_id.uint64, &l_request, sizeof(l_request)); - log_it( L_INFO,"Synced: %"DAP_UINT64_FORMAT_U" atoms processed", l_ch_chain->stats_request_atoms_processed); + log_it( L_INFO,"Synced: %"DAP_UINT64_FORMAT_u" atoms processed", l_ch_chain->stats_request_atoms_processed); dap_stream_ch_chain_go_idle(l_ch_chain); if (l_ch_chain->callback_notify_packet_out) l_ch_chain->callback_notify_packet_out(l_ch_chain, DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNCED_CHAINS, NULL, diff --git a/modules/net/dap_chain_node_client.c b/modules/net/dap_chain_node_client.c index 4677ee5561b9ad7dc82166e6795d16d43cda8676..7cb430b8e5da31dda64d09075eed61b1a93b3c99 100644 --- a/modules/net/dap_chain_node_client.c +++ b/modules/net/dap_chain_node_client.c @@ -698,7 +698,6 @@ void dap_chain_node_client_close(dap_chain_node_client_t *a_client) // clean client dap_client_pvt_t *l_client_pvt = dap_client_pvt_find(a_client->client->pvt_uuid); if (l_client_pvt) { - l_client_pvt->stage_status_error_callback = NULL; dap_client_delete_mt(a_client->client); a_client->client->_inheritor = NULL; } diff --git a/modules/service/vpn/dap_chain_net_vpn_client.c b/modules/service/vpn/dap_chain_net_vpn_client.c index 4021249ad7183dc948d52fdd2c0d4cfb7f013555..6a220358b91a66869a23d19e4deecc9879d78153 100644 --- a/modules/service/vpn/dap_chain_net_vpn_client.c +++ b/modules/service/vpn/dap_chain_net_vpn_client.c @@ -412,8 +412,8 @@ int dap_chain_net_vpn_client_check(dap_chain_net_t *a_net, const char *a_ipv4_st // default 10 sec = 10000 ms if(a_timeout_test_ms==-1) a_timeout_test_ms = 10000; - // default 5 sec = 5000 ms - int l_timeout_conn_ms = 25000; + // default 10 sec = 10000 ms + int l_timeout_conn_ms = 10000; int l_ret = 0; if(!a_ipv4_str) // && !a_ipv6_str)