diff --git a/CMakeLists.txt b/CMakeLists.txt index f6e662eb8cc361a254273a62252ec6d55f6c9ce7..313b192a5898bc439e6bd772599b26b45ace4e6e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ project(cellframe-sdk C) cmake_minimum_required(VERSION 2.8) set(CMAKE_C_STANDARD 11) -set(CELLFRAME_SDK_NATIVE_VERSION "2.6-65") +set(CELLFRAME_SDK_NATIVE_VERSION "2.6-66") add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"") set(DAPSDK_MODULES "") diff --git a/dap-sdk/net/client/dap_client_pvt.c b/dap-sdk/net/client/dap_client_pvt.c index 77f47f987301ec0bd3638b64f460abccd700eab1..43c40404c619fdf1fca519af657be595874af737 100644 --- a/dap-sdk/net/client/dap_client_pvt.c +++ b/dap-sdk/net/client/dap_client_pvt.c @@ -698,19 +698,19 @@ void dap_client_pvt_request_enc(dap_client_pvt_t * a_client_internal, const char */ static void s_request_error(int a_err_code, void * a_obj) { - dap_client_pvt_t * a_client_internal = (dap_client_pvt_t *) a_obj; + dap_client_pvt_t * l_client_pvt = (dap_client_pvt_t *) a_obj; dap_client_pvt_hh_lock(); - if(!dap_client_pvt_hh_get(a_client_internal)){ + if(!dap_client_pvt_hh_get(l_client_pvt)){ dap_client_pvt_hh_unlock(); return; } - dap_client_pvt_hh_unlock(); - if(a_client_internal && a_client_internal->request_error_callback && a_client_internal->client) + if(l_client_pvt && l_client_pvt->request_error_callback && l_client_pvt->client) { - if(a_client_internal && a_client_internal->request_error_callback && a_client_internal->client && a_client_internal->client->_internal) - a_client_internal->request_error_callback(a_client_internal->client, a_err_code); + if(l_client_pvt && l_client_pvt->request_error_callback && l_client_pvt->client && l_client_pvt->client->_internal) + l_client_pvt->request_error_callback(l_client_pvt->client, a_err_code); } + dap_client_pvt_hh_unlock(); } /** @@ -722,8 +722,9 @@ static void s_request_error(int a_err_code, void * a_obj) static void s_request_response(void * a_response, size_t a_response_size, void * a_obj) { dap_client_pvt_t * l_client_pvt = (dap_client_pvt_t *) a_obj; - if (! l_client_pvt || !dap_client_pvt_check(l_client_pvt) ){ - // Response received after client_pvt was deleted + dap_client_pvt_hh_lock(); + if(!dap_client_pvt_hh_get(l_client_pvt)){ + dap_client_pvt_hh_unlock(); return; } @@ -768,11 +769,7 @@ static void s_request_response(void * a_response, size_t a_response_size, void * else log_it(L_ERROR, "NULL request_response_callback for unencrypted client %p", l_client_pvt->client ); } - - //int l_ref2 = dap_client_pvt_get_ref(a_client_internal); - // unref pvt client - //dap_client_pvt_unref(a_client_internal); - //dap_client_pvt_unref(DAP_CLIENT_PVT(a_client_internal->client)); + dap_client_pvt_hh_unlock(); } /** @@ -783,11 +780,9 @@ 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 = a_client ? DAP_CLIENT_PVT(a_client) : NULL; - if (! l_client_pvt || !dap_client_pvt_check(l_client_pvt) ){ - // Response received after client_pvt was deleted - return; - } + dap_client_pvt_t * l_client_pvt = DAP_CLIENT_PVT(a_client); + assert(l_client_pvt); + if (!l_client_pvt->session_key_open){ log_it(L_ERROR, "m_enc_init_response: session is NULL!"); l_client_pvt->last_error = ERROR_ENC_SESSION_CLOSED ; @@ -890,12 +885,7 @@ 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); - if (! l_client_pvt || !dap_client_pvt_check(l_client_pvt) ){ - // Response received after client_pvt was deleted - return; - } - - //dap_client_internal_t * l_client_internal = dap_CLIENT_INTERNAL(a_client); + assert(l_client_pvt); log_it(L_ERROR, "ENC: Can't init ecnryption session, err code %d", a_err_code); if (a_err_code == ETIMEDOUT) { l_client_pvt->last_error = ERROR_NETWORK_CONNECTION_TIMEOUT; @@ -915,10 +905,7 @@ 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); - if (!dap_client_pvt_check(l_client_pvt) ){ - // Response received after client_pvt was deleted - return; - } + assert(l_client_pvt); 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); @@ -1005,10 +992,7 @@ static void s_stream_ctl_error(dap_client_t * a_client, int a_error) log_it(L_WARNING, "STREAM_CTL error %d", a_error); dap_client_pvt_t * l_client_pvt = DAP_CLIENT_PVT(a_client); - if (! l_client_pvt || !dap_client_pvt_check(l_client_pvt) ){ - // Response received after client_pvt was deleted - return; - } + assert(l_client_pvt); if (a_error == ETIMEDOUT) { l_client_pvt->last_error = ERROR_NETWORK_CONNECTION_TIMEOUT; @@ -1031,10 +1015,7 @@ static void s_stream_ctl_error(dap_client_t * a_client, int a_error) static void s_stream_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); - if (!dap_client_pvt_check(l_client_pvt) ){ - // Response received after client_pvt was deleted - return; - } + assert(l_client_pvt); log_it(L_DEBUG, "STREAM response %u bytes length recieved", a_data_size); // char * l_response_str = DAP_NEW_Z_SIZE(char, a_data_size + 1); // memcpy(l_response_str, a_data, a_data_size);