From e92ebd7ea09530be58aeebe7253dcd7f29a6a662 Mon Sep 17 00:00:00 2001
From: "Dmitriy A. Gerasimov" <dmitriy.gerasimov@demlabs.net>
Date: Mon, 14 Dec 2020 19:54:35 +0700
Subject: [PATCH] [*] VPN fixes

---
 CMakeLists.txt                                |  2 +-
 dap-sdk/net/core/dap_events_socket.c          | 37 +++++++++----
 dap-sdk/net/core/dap_worker.c                 | 12 ++---
 dap-sdk/net/core/include/dap_events_socket.h  |  2 +
 dap-sdk/net/server/enc_server/dap_enc_http.c  | 11 ++--
 .../net/server/http_server/dap_http_folder.c  |  2 +-
 modules/channel/chain/dap_stream_ch_chain.c   | 12 +++--
 modules/service/vpn/dap_chain_net_srv_vpn.c   | 52 ++++++++++++++-----
 .../vpn/include/dap_chain_net_srv_vpn.h       |  5 --
 9 files changed, 88 insertions(+), 47 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index dfd7013c88..81616169ba 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-80")
+set(CELLFRAME_SDK_NATIVE_VERSION "2.6-81")
 add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"")
 set(DAPSDK_MODULES "")
 
diff --git a/dap-sdk/net/core/dap_events_socket.c b/dap-sdk/net/core/dap_events_socket.c
index ca1770fbdf..edcbf55644 100644
--- a/dap-sdk/net/core/dap_events_socket.c
+++ b/dap-sdk/net/core/dap_events_socket.c
@@ -137,8 +137,12 @@ dap_events_socket_t *dap_events_socket_wrap_no_add( dap_events_t *a_events,
     ret->events = a_events;
     memcpy(&ret->callbacks, a_callbacks, sizeof(ret->callbacks) );
     ret->flags = DAP_SOCK_READY_TO_READ;
-    ret->buf_in     = a_callbacks->timer_callback ? NULL : DAP_NEW_Z_SIZE(byte_t, DAP_EVENTS_SOCKET_BUF + 1);
-    ret->buf_out    = a_callbacks->timer_callback ? NULL : DAP_NEW_Z_SIZE(byte_t, DAP_EVENTS_SOCKET_BUF + 1);
+
+    ret->buf_in_size_max = DAP_EVENTS_SOCKET_BUF;
+    ret->buf_out_size_max = DAP_EVENTS_SOCKET_BUF;
+
+    ret->buf_in     = a_callbacks->timer_callback ? NULL : DAP_NEW_Z_SIZE(byte_t, ret->buf_in_size_max + 1);
+    ret->buf_out    = a_callbacks->timer_callback ? NULL : DAP_NEW_Z_SIZE(byte_t, ret->buf_out_size_max + 1);
     ret->buf_in_size = ret->buf_out_size = 0;
     #if defined(DAP_EVENTS_CAPS_EPOLL)
     ret->ev_base_flags = EPOLLERR | EPOLLRDHUP | EPOLLHUP;
@@ -318,7 +322,8 @@ dap_events_socket_t * dap_events_socket_queue_ptr_create_input(dap_events_socket
 {
     dap_events_socket_t * l_es = DAP_NEW_Z(dap_events_socket_t);
     l_es->type = DESCRIPTOR_TYPE_QUEUE;
-    l_es->buf_out       = DAP_NEW_Z_SIZE(byte_t, 8 * sizeof(void*));
+    l_es->buf_out_size_max = 8 * sizeof(void*);
+    l_es->buf_out       = DAP_NEW_Z_SIZE(byte_t,l_es->buf_out_size_max );
     //l_es->buf_out_size  = 8 * sizeof(void*);
     l_es->events = a_es->events;
 #if defined(DAP_EVENTS_CAPS_EPOLL)
@@ -418,6 +423,11 @@ dap_events_socket_t * s_create_type_queue_ptr(dap_worker_t * a_w, dap_events_soc
         l_es->worker = a_w;
     }
     l_es->callbacks.queue_ptr_callback = a_callback; // Arm event callback
+    if (l_es->buf_out){
+        DAP_DELETE(l_es->buf_out);
+        l_es->buf_out_size_max =0;
+
+    }
     l_es->buf_out = NULL;
 
 #if defined(DAP_EVENTS_CAPS_EPOLL)
@@ -727,8 +737,8 @@ int dap_events_socket_queue_proc_input_unsafe(dap_events_socket_t * a_esocket)
 dap_events_socket_t * s_create_type_event(dap_worker_t * a_w, dap_events_socket_callback_event_t a_callback)
 {
     dap_events_socket_t * l_es = DAP_NEW_Z(dap_events_socket_t); if (!l_es) return NULL;
-    l_es->buf_out        = DAP_NEW_Z_SIZE(byte_t, 1);
-    l_es->buf_out_size   = 1;
+    l_es->buf_out_size_max = 1;
+    l_es->buf_out        = DAP_NEW_Z_SIZE(byte_t, l_es->buf_out_size_max);
     l_es->type = DESCRIPTOR_TYPE_EVENT;
     if (a_w){
         l_es->events = a_w->events;
@@ -1137,7 +1147,9 @@ dap_events_socket_t * dap_events_socket_wrap2( dap_server_t *a_server, struct da
   ret->server = a_server;
 
   memcpy(&ret->callbacks,a_callbacks, sizeof ( ret->callbacks) );
-  ret->buf_in = ret->buf_out = a_callbacks->timer_callback ? NULL : DAP_NEW_Z_SIZE(byte_t, DAP_EVENTS_SOCKET_BUF+1);
+  ret->buf_out_size_max = ret->buf_in_size_max = DAP_EVENTS_SOCKET_BUF;
+  ret->buf_in = a_callbacks->timer_callback ? NULL : DAP_NEW_Z_SIZE(byte_t, ret->buf_in_size_max+1);
+  ret->buf_out = a_callbacks->timer_callback ? NULL : DAP_NEW_Z_SIZE(byte_t, ret->buf_out_size_max+1);
   ret->buf_in_size = ret->buf_out_size = 0;
   ret->flags = DAP_SOCK_READY_TO_READ;
   ret->last_time_active = ret->last_ping_request = time( NULL );
@@ -1592,12 +1604,12 @@ size_t dap_events_socket_write_f_mt(dap_worker_t * a_w,dap_events_socket_t *a_es
  */
 size_t dap_events_socket_write_unsafe(dap_events_socket_t *sc, const void * data, size_t data_size)
 {
-    if(sc->buf_out_size > DAP_EVENTS_SOCKET_BUF){
-        log_it(L_DEBUG,"write buffer already overflow size=%u/max=%u", sc->buf_out_size, DAP_EVENTS_SOCKET_BUF);
+    if(sc->buf_out_size > sc->buf_out_size_max){
+        log_it(L_DEBUG,"write buffer already overflow size=%u/max=%u", sc->buf_out_size, sc->buf_out_size_max);
         return 0;
     }
      //log_it(L_DEBUG,"dap_events_socket_write %u sock data %X size %u", sc->socket, data, data_size );
-     data_size = (sc->buf_out_size + data_size < DAP_EVENTS_SOCKET_BUF) ? data_size : (DAP_EVENTS_SOCKET_BUF - sc->buf_out_size);
+     data_size = (sc->buf_out_size + data_size < sc->buf_out_size_max) ? data_size : (sc->buf_out_size_max - sc->buf_out_size);
      memcpy(sc->buf_out + sc->buf_out_size, data, data_size);
      sc->buf_out_size += data_size;
      dap_events_socket_set_writable_unsafe(sc, true);
@@ -1614,10 +1626,13 @@ size_t dap_events_socket_write_f_unsafe(dap_events_socket_t *sc, const char * fo
 {
     //log_it(L_DEBUG,"dap_events_socket_write_f %u sock", sc->socket );
 
-    size_t max_data_size = DAP_EVENTS_SOCKET_BUF - sc->buf_out_size;
+    size_t l_max_data_size = sc->buf_out_size_max - sc->buf_out_size;
+    if (! l_max_data_size)
+        return 0;
+
     va_list ap;
     va_start(ap, format);
-    int ret=dap_vsnprintf((char*)sc->buf_out + sc->buf_out_size, max_data_size, format, ap);
+    int ret=dap_vsnprintf((char*)sc->buf_out + sc->buf_out_size, l_max_data_size, format, ap);
     va_end(ap);
     if(ret > 0) {
         sc->buf_out_size += (unsigned int)ret;
diff --git a/dap-sdk/net/core/dap_worker.c b/dap-sdk/net/core/dap_worker.c
index c8efe36d2a..37e8917935 100644
--- a/dap-sdk/net/core/dap_worker.c
+++ b/dap-sdk/net/core/dap_worker.c
@@ -273,7 +273,7 @@ void *dap_worker_thread(void *arg)
             if(l_flag_read) {
 
                 //log_it(L_DEBUG, "Comes connection with type %d", l_cur->type);
-                if(l_cur->buf_in_size >= DAP_EVENTS_SOCKET_BUF) {
+                if(l_cur->buf_in_size >= l_cur->buf_in_size_max) {
                     log_it(L_WARNING, "Buffer is full when there is smth to read. Its dropped!");
                     l_cur->buf_in_size = 0;
                 }
@@ -286,24 +286,24 @@ void *dap_worker_thread(void *arg)
                     case DESCRIPTOR_TYPE_FILE:
                         l_must_read_smth = true;
 #ifdef DAP_OS_WINDOWS
-                        l_bytes_read = dap_recvfrom(l_cur->socket, l_cur->buf_in + l_cur->buf_in_size, DAP_EVENTS_SOCKET_BUF - l_cur->buf_in_size);
+                        l_bytes_read = dap_recvfrom(l_cur->socket, l_cur->buf_in + l_cur->buf_in_size, l_cur->buf_in_size_max - l_cur->buf_in_size);
 #else
                         l_bytes_read = read(l_cur->socket, (char *) (l_cur->buf_in + l_cur->buf_in_size),
-                                sizeof(l_cur->buf_in) - l_cur->buf_in_size);
+                                l_cur->buf_in_size_max - l_cur->buf_in_size);
 #endif
                         l_errno = errno;
                     break;
                     case DESCRIPTOR_TYPE_SOCKET:
                         l_must_read_smth = true;
                         l_bytes_read = recv(l_cur->fd, (char *) (l_cur->buf_in + l_cur->buf_in_size),
-                                            DAP_EVENTS_SOCKET_BUF - l_cur->buf_in_size, 0);
+                                            l_cur->buf_in_size_max - l_cur->buf_in_size, 0);
                         l_errno = errno;
                     break;
                     case DESCRIPTOR_TYPE_SOCKET_UDP: {
                         l_must_read_smth = true;
                         socklen_t l_size = sizeof(l_cur->remote_addr);
                         l_bytes_read = recvfrom(l_cur->fd, (char *) (l_cur->buf_in + l_cur->buf_in_size),
-                                                DAP_EVENTS_SOCKET_BUF - l_cur->buf_in_size, 0,
+                                                l_cur->buf_in_size_max - l_cur->buf_in_size, 0,
                                                 (struct sockaddr *)&l_cur->remote_addr, &l_size);
 
                         l_errno = errno;
@@ -374,7 +374,7 @@ void *dap_worker_thread(void *arg)
                         }
                         l_cur->buf_in_size += l_bytes_read;
                         if(s_debug_reactor)
-                            log_it(L_DEBUG, "Received %d bytes", l_bytes_read);
+                            log_it(L_DEBUG, "Received %d bytes for fd %d ", l_bytes_read, l_cur->fd);
                         if(l_cur->callbacks.read_callback){
                             l_cur->callbacks.read_callback(l_cur, NULL); // Call callback to process read event. At the end of callback buf_in_size should be zero if everything was read well
                             if (l_cur->worker == NULL ){ // esocket was unassigned in callback, we don't need any ops with it now,
diff --git a/dap-sdk/net/core/include/dap_events_socket.h b/dap-sdk/net/core/include/dap_events_socket.h
index aea7be30d5..06203e8a02 100644
--- a/dap-sdk/net/core/include/dap_events_socket.h
+++ b/dap-sdk/net/core/include/dap_events_socket.h
@@ -178,6 +178,7 @@ typedef struct dap_events_socket {
         //uint8_t buf_in[DAP_EVENTS_SOCKET_BUF+1]; // Internal buffer for input data
         //char buf_in_str[DAP_EVENTS_SOCKET_BUF+1];
     byte_t  *buf_in;
+    size_t buf_in_size_max; //  size of alloced buffer
         //char    *buf_in_str;
     size_t buf_in_size; // size of data that is in the input buffer
 
@@ -186,6 +187,7 @@ typedef struct dap_events_socket {
     //byte_t buf_out[DAP_EVENTS_SOCKET_BUF+1]; // Internal buffer for output data
     byte_t *buf_out;
     size_t buf_out_size; // size of data that is in the output buffer
+    size_t buf_out_size_max; // max size of data
     dap_events_socket_t * pipe_out; // Pipe socket with data for output
 
     // Stored string representation
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 840cdb5a68..0f3bc63e25 100644
--- a/dap-sdk/net/server/enc_server/dap_enc_http.c
+++ b/dap-sdk/net/server/enc_server/dap_enc_http.c
@@ -103,8 +103,9 @@ void enc_http_proc(struct dap_http_simple *cl_st, void * arg)
         dap_enc_key_type_t l_pkey_exchange_type =DAP_ENC_KEY_TYPE_MSRLN ;
         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_enc_type,&l_pkey_exchange_type,&l_pkey_exchange_size);
+        size_t l_block_key_size=DAP_ENC_KS_KEY_ID_SIZE;
+        sscanf(cl_st->http_client->in_query_string, "enc_type=%d,pkey_exchange_type=%d,pkey_exchange_size=%zd,block_key_size=%zd",
+                                      &l_enc_type,&l_pkey_exchange_type,&l_pkey_exchange_size,&l_block_key_size);
 
         log_it(L_DEBUG, "Stream encryption: %s\t public key exchange: %s",dap_enc_get_type_name(l_enc_type),
                dap_enc_get_type_name(l_pkey_exchange_type));
@@ -150,12 +151,12 @@ void enc_http_proc(struct dap_http_simple *cl_st, void * arg)
         l_enc_key_ks->key = dap_enc_key_new_generate(l_enc_type,
                                                l_pkey_exchange_key->priv_key_data, // shared key
                                                l_pkey_exchange_key->priv_key_data_size,
-                                               l_enc_key_ks->id, DAP_ENC_KS_KEY_ID_SIZE, 0);
+                                               l_enc_key_ks->id, l_block_key_size, 0);
         dap_enc_ks_save_in_storage(l_enc_key_ks);
 
-        char encrypt_id[DAP_ENC_BASE64_ENCODE_SIZE(DAP_ENC_KS_KEY_ID_SIZE) + 1];
+        char encrypt_id[DAP_ENC_BASE64_ENCODE_SIZE(l_block_key_size) + 1];
 
-        size_t encrypt_id_size = dap_enc_base64_encode(l_enc_key_ks->id, DAP_ENC_KS_KEY_ID_SIZE, encrypt_id, DAP_ENC_DATA_TYPE_B64);
+        size_t encrypt_id_size = dap_enc_base64_encode(l_enc_key_ks->id, l_block_key_size, encrypt_id, DAP_ENC_DATA_TYPE_B64);
         encrypt_id[encrypt_id_size] = '\0';
 
         _enc_http_write_reply(cl_st, encrypt_id, encrypt_msg);
diff --git a/dap-sdk/net/server/http_server/dap_http_folder.c b/dap-sdk/net/server/http_server/dap_http_folder.c
index fa2286d3e9..1d748ce158 100644
--- a/dap-sdk/net/server/http_server/dap_http_folder.c
+++ b/dap-sdk/net/server/http_server/dap_http_folder.c
@@ -295,7 +295,7 @@ void dap_http_folder_data_write(dap_http_client_t * cl_ht, void * arg)
 {
     (void) arg;
     dap_http_file_t * cl_ht_file= DAP_HTTP_FILE(cl_ht);
-    cl_ht->esocket->buf_out_size=fread(cl_ht->esocket->buf_out, 1, DAP_EVENTS_SOCKET_BUF + 1, cl_ht_file->fd);
+    cl_ht->esocket->buf_out_size=fread(cl_ht->esocket->buf_out, 1, cl_ht->esocket->buf_out_size_max + 1, cl_ht_file->fd);
     cl_ht_file->position+=cl_ht->esocket->buf_out_size;
     dap_events_socket_set_writable_unsafe(cl_ht->esocket, true);
 
diff --git a/modules/channel/chain/dap_stream_ch_chain.c b/modules/channel/chain/dap_stream_ch_chain.c
index 1bde325d68..f442ce86f2 100644
--- a/modules/channel/chain/dap_stream_ch_chain.c
+++ b/modules/channel/chain/dap_stream_ch_chain.c
@@ -867,7 +867,7 @@ static bool s_out_pkt_callback(dap_proc_thread_t *a_thread, void *a_arg)
         } break;
         default: break;
     }
-    if (l_ch->stream->esocket->buf_out_size > DAP_EVENTS_SOCKET_BUF - DAP_CHAIN_PKT_MAX_SIZE ||
+    if (l_ch->stream->esocket->buf_out_size + DAP_CHAIN_PKT_MAX_SIZE > l_ch->stream->esocket->buf_out_size_max  ||
             l_ch_chain->state == CHAIN_STATE_IDLE) {
         if (l_ch->stream->esocket->buf_out_size) {
             dap_stream_ch_set_ready_to_write_unsafe(l_ch, true);
@@ -886,9 +886,13 @@ static bool s_out_pkt_callback(dap_proc_thread_t *a_thread, void *a_arg)
 void s_stream_ch_packet_out(dap_stream_ch_t* a_ch, void* a_arg)
 {
     (void) a_arg;
-    if (a_ch->stream->esocket->buf_out_size > DAP_EVENTS_SOCKET_BUF / 4) {
-        return;
-    }
+
+    /// That was for what?!
+    ///
+    /// if (a_ch->stream->esocket->buf_out_size > ( a_ch->stream->esocket->buf_out_size_max / 4 )) {
+    ///        return;
+    ///   }
+    ///
     dap_stream_ch_set_ready_to_write_unsafe(a_ch, false);
     dap_stream_ch_chain_t *l_ch_chain = DAP_STREAM_CH_CHAIN(a_ch);
     if (l_ch_chain && l_ch_chain->state != CHAIN_STATE_IDLE) {
diff --git a/modules/service/vpn/dap_chain_net_srv_vpn.c b/modules/service/vpn/dap_chain_net_srv_vpn.c
index 541b19a32b..f74d371013 100644
--- a/modules/service/vpn/dap_chain_net_srv_vpn.c
+++ b/modules/service/vpn/dap_chain_net_srv_vpn.c
@@ -24,12 +24,18 @@
     along with any DAP based project.  If not, see <http://www.gnu.org/licenses/>.
 */
 
+#ifdef DAP_OS_UNIX
+#include <netinet/in.h>
+#include <linux/if.h>
+#include <linux/if_tun.h>
+#include <sys/ioctl.h>
+#endif
+
 #include <sys/select.h>
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/epoll.h>
 #include <sys/un.h>
-#include <sys/ioctl.h>
 
 #include <netinet/in.h>
 #include <netinet/ip.h>
@@ -43,8 +49,6 @@
 #include <errno.h>
 #include <signal.h>
 
-#include <linux/if.h>
-#include <linux/if_tun.h>
 
 #include "uthash.h"
 #include "utlist.h"
@@ -274,7 +278,6 @@ static void s_tun_recv_msg_callback(dap_events_socket_t * a_esocket_queue, void
             assert(l_msg->esocket_reassigment.worker_id < s_tun_sockets_count);
             ch_sf_tun_socket_t * l_tun_sock = s_tun_sockets[a_esocket_queue->worker->id];
             assert(l_tun_sock);
-
             dap_chain_net_srv_ch_vpn_info_t * l_info = NULL;
             HASH_FIND(hh,l_tun_sock->clients,&l_msg->esocket_reassigment.addr , sizeof (l_msg->esocket_reassigment.addr), l_info);
             if (l_info){ // Updating info
@@ -282,6 +285,12 @@ static void s_tun_recv_msg_callback(dap_events_socket_t * a_esocket_queue, void
                 l_info->queue_msg = s_tun_sockets_queue_msg[l_msg->esocket_reassigment.worker_id];
                 l_info->is_reassigned_once = true;
                 l_info->is_on_this_worker =(a_esocket_queue->worker->id == l_msg->esocket_reassigment.worker_id);
+                if(s_debug_more){
+                    char l_addrbuf[INET_ADDRSTRLEN]= { [0]='\0'};
+                    inet_ntop(AF_INET,&l_msg->esocket_reassigment.addr, l_addrbuf, sizeof (l_addrbuf));
+                    log_it(L_DEBUG, "Tun:%u message: addr %s reassign on worker #%u",a_esocket_queue->worker->id,
+                           l_addrbuf, l_msg->esocket_reassigment.worker_id);
+                }
             }else{
                 if(dap_log_level_get() <= L_INFO){
                     char l_addrbuf[17];
@@ -300,7 +309,7 @@ static void s_tun_recv_msg_callback(dap_events_socket_t * a_esocket_queue, void
             dap_chain_net_srv_ch_vpn_info_t * l_new_info = NULL;
             HASH_FIND(hh,l_tun_sock->clients,&l_msg->ip_assigment.addr, sizeof (l_msg->ip_assigment.addr), l_new_info);
             if( l_new_info){
-                char l_addrbuf[17];
+                char l_addrbuf[INET_ADDRSTRLEN]= { [0]='\0'};
                 inet_ntop(AF_INET,&l_msg->ip_assigment.addr, l_addrbuf, sizeof (l_addrbuf));
                 log_it(L_WARNING, "Already assigned address %s on tun sock #%u", l_addrbuf, l_tun_sock->worker_id);
             }else{
@@ -314,6 +323,12 @@ static void s_tun_recv_msg_callback(dap_events_socket_t * a_esocket_queue, void
                 l_new_info->esocket = l_msg->esocket;
                 l_new_info->worker = dap_events_worker_get(l_msg->ip_assigment.worker_id);
                 HASH_ADD(hh,l_tun_sock->clients, addr_ipv4, sizeof (l_new_info->addr_ipv4), l_new_info);
+                if(s_debug_more){
+                    char l_addrbuf[INET_ADDRSTRLEN]= { [0]='\0'};
+                    inet_ntop(AF_INET,&l_msg->ip_assigment.addr, l_addrbuf, sizeof (l_addrbuf));
+                    log_it(L_DEBUG, "Tun:%u message: addr %s assigned for worker #%u on tun #u",a_esocket_queue->worker->id,
+                           l_addrbuf, l_msg->ip_assigment.worker_id);
+                }
             }
 
         }break;
@@ -340,6 +355,12 @@ static void s_tun_recv_msg_callback(dap_events_socket_t * a_esocket_queue, void
 
         }break;
         case TUN_SOCKET_MSG_CH_VPN_SEND:{
+            if(s_debug_more){
+                char l_addrbuf[INET_ADDRSTRLEN]= { [0]='\0'};
+                inet_ntop(AF_INET,&l_msg->ip_assigment.addr, l_addrbuf, sizeof (l_addrbuf));
+                log_it(L_DEBUG, "Tun:%u message: send %zd bytes for ch vpn protocol",a_esocket_queue->worker->id,
+                       l_msg->ch_vpn_send.pkt->header.op_data.data_size );
+            }
             if(dap_events_socket_check_unsafe(a_esocket_queue->worker, l_msg->esocket ) )
                 s_tun_client_send_data_unsafe(l_msg->ch_vpn,l_msg->ch_vpn_send.pkt);
             DAP_DELETE(l_msg->ch_vpn_send.pkt);
@@ -469,8 +490,6 @@ static dap_events_socket_t * s_tun_event_stream_create(dap_worker_t * a_worker,
     l_s_callbacks.error_callback = s_es_tun_error;
     l_s_callbacks.delete_callback = s_es_tun_delete;
 
-    s_tun_deattach_queue(a_tun_fd);
-
     dap_events_socket_t * l_es = dap_events_socket_wrap_no_add(a_worker->events ,
                                           a_tun_fd, &l_s_callbacks);
     l_es->type = DESCRIPTOR_TYPE_FILE;
@@ -1141,6 +1160,11 @@ static void send_pong_pkt(dap_stream_ch_t* a_ch)
     free(pkt_out);
 }
 
+/**
+ * @brief s_ch_packet_in_vpn_address_request
+ * @param a_ch
+ * @param a_usage
+ */
 static void s_ch_packet_in_vpn_address_request(dap_stream_ch_t* a_ch, dap_chain_net_srv_usage_t * a_usage){
     dap_chain_net_srv_ch_vpn_t *l_ch_vpn = CH_VPN(a_ch);
     dap_chain_net_srv_vpn_t * l_srv_vpn =(dap_chain_net_srv_vpn_t *) a_usage->service->_inhertor;
@@ -1506,12 +1530,12 @@ static void s_es_tun_read(dap_events_socket_t * a_es, void * arg)
     size_t l_buf_in_size = a_es->buf_in_size;
     struct iphdr *iph = (struct iphdr*) a_es->buf_in;
     if (s_debug_more){
-        char l_str_daddr[INET_ADDRSTRLEN];
-        char l_str_saddr[INET_ADDRSTRLEN];
+        char l_str_daddr[INET_ADDRSTRLEN]={[0]='\0'};
+        char l_str_saddr[INET_ADDRSTRLEN]={[0]='\0'};
         inet_ntop(AF_INET,&iph->daddr,l_str_daddr,sizeof (iph->daddr));
         inet_ntop(AF_INET,&iph->saddr,l_str_saddr,sizeof (iph->saddr));
-        log_it(L_DEBUG,"m_es_tun_read() received ip packet %s->%s size %u ",
-               l_str_saddr, l_str_saddr,   l_buf_in_size);
+        log_it(L_DEBUG,"m_es_tun_read() received ip packet %s->%s tot_len: %u ",
+               l_str_saddr, l_str_saddr, iph->tot_len);
     }
 
     if(l_buf_in_size) {
@@ -1534,7 +1558,7 @@ static void s_es_tun_read(dap_events_socket_t * a_es, void * arg)
             }
             s_tun_client_send_data(l_vpn_info, a_es->buf_in, l_buf_in_size);
         }else if(s_debug_more){
-            char l_str_daddr[INET_ADDRSTRLEN];
+            char l_str_daddr[INET_ADDRSTRLEN]={[0]='\0'};
             inet_ntop(AF_INET,&l_in_daddr,l_str_daddr,sizeof (l_in_daddr));
             log_it(L_WARNING, "Can't find route for desitnation %s",l_str_daddr);
         }
@@ -1578,8 +1602,8 @@ static void s_es_tun_new(dap_events_socket_t * a_es, void * arg)
         // Create for all previous created sockets the input queue
         for (size_t n=0; n< s_tun_sockets_count; n++){
             if (s_tun_sockets[n]){
-                dap_events_socket_t * l_queue_msg_input =  s_tun_sockets[n]->queue_tun_msg_input[l_worker_id] =
-                        dap_events_socket_queue_ptr_create_input(s_tun_sockets_queue_msg[l_worker_id] );
+                dap_events_socket_t * l_queue_msg_input = s_tun_sockets[n]->queue_tun_msg_input[l_worker_id]
+                                                        = dap_events_socket_queue_ptr_create_input(s_tun_sockets_queue_msg[l_worker_id]);
                 dap_events_socket_assign_on_worker_inter(l_worker->queue_es_new_input[n],l_queue_msg_input);
             }
         }
diff --git a/modules/service/vpn/include/dap_chain_net_srv_vpn.h b/modules/service/vpn/include/dap_chain_net_srv_vpn.h
index 6a3ee3b1a0..0051d29434 100644
--- a/modules/service/vpn/include/dap_chain_net_srv_vpn.h
+++ b/modules/service/vpn/include/dap_chain_net_srv_vpn.h
@@ -24,11 +24,6 @@
     along with any DAP based project.  If not, see <http://www.gnu.org/licenses/>.
 */
 #pragma once
-#ifdef DAP_OS_UNIX
-#include <netinet/in.h>
-#include <linux/if.h>
-#include <linux/if_tun.h>
-#endif
 
 #include "dap_config.h"
 #include "dap_chain_net_srv.h"
-- 
GitLab