diff --git a/dap-sdk/net/client/dap_client_pvt.c b/dap-sdk/net/client/dap_client_pvt.c index 3e6c98f74b689d701f00a373bd031505889115fe..011d380a78aadfb7888542d045b5a740b8c2126f 100644 --- a/dap-sdk/net/client/dap_client_pvt.c +++ b/dap-sdk/net/client/dap_client_pvt.c @@ -399,7 +399,7 @@ static void s_stage_status_after(dap_client_pvt_t * a_client_pvt) case STAGE_STATUS_IN_PROGRESS: { switch (a_client_pvt->stage) { case STAGE_ENC_INIT: { - log_it(L_INFO, "Go to stage ENC: prepare the request"); + log_it(L_INFO, "Go to stage ENC: prepare the request"); a_client_pvt->session_key_open = dap_enc_key_new_generate(DAP_ENC_KEY_TYPE_MSRLN, NULL, 0, NULL, 0, 0); if (!a_client_pvt->session_key_open) { log_it(L_ERROR, "Insufficient memory! May be a huge memory leak present"); @@ -449,7 +449,7 @@ static void s_stage_status_after(dap_client_pvt_t * a_client_pvt) a_client_pvt->active_channels); }else{ l_suburl = dap_strdup_printf("stream_ctl,channels=%s,enc_type=%d,enc_headers=%d", - a_client_pvt->active_channels,s_dap_client_pvt_preferred_encryption_type,0); + a_client_pvt->active_channels,dap_stream_get_preferred_encryption_type(),0); } // dap_client_pvt_request_enc(a_client_pvt, @@ -469,7 +469,7 @@ static void s_stage_status_after(dap_client_pvt_t * a_client_pvt) a_client_pvt->stage_status = STAGE_STATUS_ERROR; break; } -#ifdef _WIN32 +#ifdef _WIN32 { int buffsize = 65536; int optsize = sizeof( int ); @@ -1349,4 +1349,3 @@ void m_es_stream_error(dap_events_socket_t * a_es, int a_arg) } log_it(L_INFO, "m_es_stream_error: code %d", a_arg); } - diff --git a/dap-sdk/net/core/dap_events_socket.c b/dap-sdk/net/core/dap_events_socket.c index 5bd377d9245f8c9cb475cfdd807e131f1c6a2984..5da958b3f0e48621f3f13c9e44b0a6e27e46c83a 100644 --- a/dap-sdk/net/core/dap_events_socket.c +++ b/dap-sdk/net/core/dap_events_socket.c @@ -490,9 +490,7 @@ int dap_events_socket_queue_ptr_send( dap_events_socket_t * a_es, void* a_arg) return 0; else{ char l_errbuf[128]; - l_errbuf[0]=0; - strerror_r(l_errno, l_errbuf, sizeof (l_errbuf)); - log_it(L_ERROR, "Can't send ptr to queue:\"%s\" code %d", l_errbuf, l_errno); + log_it(L_ERROR, "Can't send ptr to queue:\"%s\" code %d", strerror_r(l_errno, l_errbuf, sizeof (l_errbuf)), l_errno); return l_errno; } #elif defined (DAP_EVENTS_CAPS_QUEUE_POSIX) diff --git a/dap-sdk/net/stream/stream/dap_stream.c b/dap-sdk/net/stream/stream/dap_stream.c index 35b1dc91dc4cc1c10d8a467f1eef7a603cb5719a..e9598cdf910e84952313b2e19feb0793448a701b 100644 --- a/dap-sdk/net/stream/stream/dap_stream.c +++ b/dap-sdk/net/stream/stream/dap_stream.c @@ -90,11 +90,28 @@ bool dap_stream_get_dump_packet_headers(){ return s_dump_packet_headers; } static struct timespec keepalive_loop_sleep = { 0, STREAM_KEEPALIVE_TIMEOUT * 1000 * 1000 }; static bool s_detect_loose_packet(dap_stream_t * a_stream); +dap_enc_key_type_t s_stream_get_preferred_encryption_type = DAP_ENC_KEY_TYPE_IAES; + +void s_dap_stream_load_preferred_encryption_type(dap_config_t * a_config){ + const char * l_preferred_encryption_name = dap_config_get_item_str(a_config, "stream", "preferred_encryption"); + if(l_preferred_encryption_name){ + dap_enc_key_type_t l_found_key_type = dap_enc_key_type_find_by_name(l_preferred_encryption_name); + if(l_found_key_type != DAP_ENC_KEY_TYPE_INVALID) + s_stream_get_preferred_encryption_type = l_found_key_type; + } + + log_it(L_NOTICE,"ecryption type is set to %s", dap_enc_get_type_name(s_stream_get_preferred_encryption_type)); +} + +dap_enc_key_type_t dap_stream_get_preferred_encryption_type(){ + return s_stream_get_preferred_encryption_type; +} + /** * @brief stream_init Init stream module * @return 0 if ok others if not */ -int dap_stream_init( bool a_dump_packet_headers) +int dap_stream_init(dap_config_t * a_config) { if( dap_stream_ch_init() != 0 ){ log_it(L_CRITICAL, "Can't init channel types submodule"); @@ -105,7 +122,8 @@ int dap_stream_init( bool a_dump_packet_headers) return -2; } - s_dump_packet_headers = a_dump_packet_headers; + s_dap_stream_load_preferred_encryption_type(a_config); + s_dump_packet_headers = dap_config_get_item_bool_default(g_config,"general","debug_dump_stream_headers",false); s_keep_alive_loop_quit_signal = false; pthread_mutex_init( &s_mutex_keepalive_list, NULL ); //pthread_create( &keepalive_thread, NULL, stream_loop, NULL ); diff --git a/dap-sdk/net/stream/stream/dap_stream_ctl.c b/dap-sdk/net/stream/stream/dap_stream_ctl.c index 696b0eb0961140db9a536c87be284fee781715a4..f0c65390ab04812a9c76024dc2427b79882ad4e8 100644 --- a/dap-sdk/net/stream/stream/dap_stream_ctl.c +++ b/dap-sdk/net/stream/stream/dap_stream_ctl.c @@ -69,30 +69,15 @@ static struct { dap_enc_key_type_t type; } s_socket_forward_key; -static const dap_enc_key_type_t s_dap_stream_default_preferred_encryption = DAP_ENC_KEY_TYPE_IAES; - /** * @brief stream_ctl_init Initialize stream control module * @return Zero if ok others if not */ -int dap_stream_ctl_init(dap_config_t * a_config, - size_t socket_forward_key_size) +int dap_stream_ctl_init(size_t socket_forward_key_size) { s_socket_forward_key.size = socket_forward_key_size; + s_socket_forward_key.type = dap_stream_get_preferred_encryption_type(); - const char *l_preferred_encryption_name = dap_config_get_item_str(a_config, "stream", "preferred_encryption"); - if(!l_preferred_encryption_name){ - s_socket_forward_key.type = s_dap_stream_default_preferred_encryption; - }else{ - dap_enc_key_type_t l_found_key_type = dap_enc_key_type_find_by_name(l_preferred_encryption_name); - - if(l_found_key_type != DAP_ENC_KEY_TYPE_INVALID) - s_socket_forward_key.type = l_found_key_type; - else - s_socket_forward_key.type = s_dap_stream_default_preferred_encryption; - } - - log_it(L_NOTICE,"Initialized stream control module: ecryption type is set to %s", dap_enc_get_type_name(s_socket_forward_key.type)); return 0; } @@ -135,7 +120,7 @@ void s_proc(struct dap_http_simple *a_http_simple, void * a_arg) size_t l_channels_str_size = sizeof(ss->active_channels); char l_channels_str[sizeof(ss->active_channels)]; dap_enc_key_type_t l_enc_type = s_socket_forward_key.type; - int l_enc_headers; + int l_enc_headers = 0; int l_url_sscanf_res = sscanf(l_dg->url_path, "stream_ctl,channels=%16s,enc_type=%d,enc_headers=%d", l_channels_str, &l_enc_type, &l_enc_headers); if(l_url_sscanf_res > 0){ if(l_url_sscanf_res < 3){ diff --git a/dap-sdk/net/stream/stream/include/dap_stream.h b/dap-sdk/net/stream/stream/include/dap_stream.h index 888be346b5ae1b3b43b0d3aea5bc9004bfc999e1..0c0325bc3064b3903506d466f48e435025e78162 100644 --- a/dap-sdk/net/stream/stream/include/dap_stream.h +++ b/dap-sdk/net/stream/stream/include/dap_stream.h @@ -26,6 +26,8 @@ #include <pthread.h> #include <stdbool.h> #include <pthread.h> + +#include "dap_config.h" #include "dap_stream_session.h" #include "dap_stream_ch.h" @@ -91,7 +93,7 @@ typedef struct dap_stream { #define DAP_STREAM(a) ((dap_stream_t *) (a)->_inheritor ) -int dap_stream_init(bool a_dump_packet_headers); +int dap_stream_init(dap_config_t * g_config); bool dap_stream_get_dump_packet_headers(); @@ -110,4 +112,6 @@ void dap_stream_proc_pkt_in(dap_stream_t * sid); void dap_stream_es_rw_states_update(struct dap_stream *a_stream); void dap_stream_set_ready_to_write(dap_stream_t * a_stream,bool a_is_ready); +dap_enc_key_type_t dap_stream_get_preferred_encryption_type(); + diff --git a/dap-sdk/net/stream/stream/include/dap_stream_ctl.h b/dap-sdk/net/stream/stream/include/dap_stream_ctl.h index ff5f7369beb1059147aac173f5afe28437a96be3..a040b2eb0086c106ad8f681229c552a2a406a9d8 100644 --- a/dap-sdk/net/stream/stream/include/dap_stream_ctl.h +++ b/dap-sdk/net/stream/stream/include/dap_stream_ctl.h @@ -26,7 +26,6 @@ typedef struct dap_http dap_http_t; #define KEX_KEY_STR_SIZE 128 -int dap_stream_ctl_init(dap_config_t * a_config, - size_t socket_forward_key_size); +int dap_stream_ctl_init(size_t socket_forward_key_size); void dap_stream_ctl_deinit(); void dap_stream_ctl_add_proc(struct dap_http * sh, const char * url);