diff --git a/CMakeLists.txt b/CMakeLists.txt index 56bcfbe61d7859b821cfc08eb1bbc7949a319884..b1586fb2bca8918f1d47233fe0cfad9296bc202f 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.5-22") +set(CELLFRAME_SDK_NATIVE_VERSION "2.5-23") 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 f2be7f840fc40c359df7b1d2ef0461bcf758c7ee..acccb093f8348564e3797d504a0b940f32ed0e20 100644 --- a/dap-sdk/net/client/dap_client_pvt.c +++ b/dap-sdk/net/client/dap_client_pvt.c @@ -506,6 +506,7 @@ static void s_stage_status_after(dap_client_pvt_t * a_client_pvt) a_client_pvt->stream_es->_inheritor = a_client_pvt;//->client; a_client_pvt->stream = dap_stream_new_es_client(a_client_pvt->stream_es); + assert(a_client_pvt->stream); a_client_pvt->stream->is_client_to_uplink = true; a_client_pvt->stream->session = dap_stream_session_pure_new(); // may be from in packet? @@ -522,7 +523,7 @@ static void s_stage_status_after(dap_client_pvt_t * a_client_pvt) if(inet_pton(AF_INET, a_client_pvt->uplink_addr, &(l_remote_addr.sin_addr)) < 0) { log_it(L_ERROR, "Wrong remote address '%s:%u'", a_client_pvt->uplink_addr, a_client_pvt->uplink_port); //close(a_client_pvt->stream_socket); - dap_events_socket_remove_and_delete_mt(a_client_pvt->stream_es->worker, a_client_pvt->stream_es); + dap_events_socket_remove_and_delete_mt(a_client_pvt->stream_worker->worker, a_client_pvt->stream_es); //a_client_pvt->stream_socket = 0; a_client_pvt->stage_status = STAGE_STATUS_ERROR; } @@ -530,7 +531,8 @@ static void s_stage_status_after(dap_client_pvt_t * a_client_pvt) int l_err = 0; if((l_err = connect(a_client_pvt->stream_socket, (struct sockaddr *) &l_remote_addr, sizeof(struct sockaddr_in))) != -1) { - a_client_pvt->stream_es->flags &= ~DAP_SOCK_SIGNAL_CLOSE; + + // a_client_pvt->stream_es->flags &= ~DAP_SOCK_SIGNAL_CLOSE;// ??? what it was? Why out of esocket context??? //s_set_sock_nonblock(a_client_pvt->stream_socket, false); log_it(L_INFO, "Remote address connected (%s:%u) with sock_id %d (assign on worker #%u)", a_client_pvt->uplink_addr, a_client_pvt->uplink_port, a_client_pvt->stream_socket, l_worker->id); @@ -539,7 +541,7 @@ static void s_stage_status_after(dap_client_pvt_t * a_client_pvt) else { log_it(L_ERROR, "Remote address can't connected (%s:%u) with sock_id %d", a_client_pvt->uplink_addr, a_client_pvt->uplink_port); - dap_events_socket_remove_and_delete_mt(a_client_pvt->stream_es->worker, a_client_pvt->stream_es); + dap_events_socket_remove_and_delete_mt(a_client_pvt->stream_worker->worker, a_client_pvt->stream_es); //close(a_client_pvt->stream_socket); a_client_pvt->stream_socket = 0; a_client_pvt->stage_status = STAGE_STATUS_ERROR; @@ -551,7 +553,7 @@ static void s_stage_status_after(dap_client_pvt_t * a_client_pvt) break; case STAGE_STREAM_CONNECTED: { log_it(L_INFO, "Go to stage STAGE_STREAM_CONNECTED"); - size_t count_channels = strlen(a_client_pvt->active_channels); + size_t count_channels = a_client_pvt->active_channels? strlen(a_client_pvt->active_channels) : 0; for(size_t i = 0; i < count_channels; i++) { dap_stream_ch_new(a_client_pvt->stream, (uint8_t) a_client_pvt->active_channels[i]); //sid->channel[i]->ready_to_write = true; @@ -1237,6 +1239,7 @@ void m_es_stream_delete(dap_events_socket_t *a_es, void *arg) log_it(L_INFO, "================= stream delete/peer reconnect"); dap_client_pvt_t * l_client_pvt = a_es->_inheritor; + a_es->_inheritor = NULL; // To prevent delete in reactor if(l_client_pvt == NULL) { log_it(L_ERROR, "dap_client_pvt_t is not initialized"); diff --git a/dap-sdk/net/core/dap_events_socket.c b/dap-sdk/net/core/dap_events_socket.c index 5a9d6458a9484895801c87f57297aa21b524429d..0676e1b9fbe8bb2d1812108b32a0709c5383a2c5 100644 --- a/dap-sdk/net/core/dap_events_socket.c +++ b/dap-sdk/net/core/dap_events_socket.c @@ -584,8 +584,10 @@ int dap_events_socket_queue_ptr_send( dap_events_socket_t * a_es, void* a_arg) char l_errbuf[128]; log_it(L_ERROR, "Can't send ptr to queue:\"%s\" code %d", strerror_r(l_errno, l_errbuf, sizeof (l_errbuf)), l_errno); // Try again - if(l_errno == EAGAIN) + if(l_errno == EAGAIN){ add_ptr_to_buf(a_es, a_arg); + return 0; + } return l_errno; } #elif defined (DAP_EVENTS_CAPS_QUEUE_POSIX) diff --git a/dap-sdk/net/server/enc_server/dap_enc_http.c b/dap-sdk/net/server/enc_server/dap_enc_http.c index dc64d018b711e4fa9a41a2a427f47cb3c9fb986d..1235945309a220b941313c288c878efd18941a2a 100644 --- a/dap-sdk/net/server/enc_server/dap_enc_http.c +++ b/dap-sdk/net/server/enc_server/dap_enc_http.c @@ -104,7 +104,7 @@ void enc_http_proc(struct dap_http_simple *cl_st, void * arg) dap_enc_key_type_t l_enc_type = DAP_ENC_KEY_TYPE_IAES; size_t l_pkey_exchange_size=MSRLN_PKA_BYTES; sscanf(cl_st->http_client->in_query_string, "enc_type=%d,pkey_exchange_type=%d,pkey_exchange_size=%zd", - &l_pkey_exchange_type,&l_enc_type,&l_pkey_exchange_size); + &l_enc_type,&l_pkey_exchange_type,&l_pkey_exchange_size); uint8_t alice_msg[cl_st->request_size];