From b9f5f8413d7f88ada5e959cad3ab5196e1f0f369 Mon Sep 17 00:00:00 2001
From: Roman Khlopkov <roman.khlopkov@demlabs.net>
Date: Fri, 15 Jul 2022 03:38:35 +0000
Subject: [PATCH] bugs-6494

---
 .../net/server/http_server/dap_http_simple.c  |  1 -
 modules/net/dap_chain_net.c                   |  2 +-
 modules/service/vpn/dap_chain_net_srv_vpn.c   | 50 +++++++++----------
 3 files changed, 25 insertions(+), 28 deletions(-)

diff --git a/dap-sdk/net/server/http_server/dap_http_simple.c b/dap-sdk/net/server/http_server/dap_http_simple.c
index 10a3a0d7ae..7fd16a1306 100644
--- a/dap-sdk/net/server/http_server/dap_http_simple.c
+++ b/dap-sdk/net/server/http_server/dap_http_simple.c
@@ -227,7 +227,6 @@ inline static void s_write_data_to_socket(dap_proc_thread_t *a_thread, dap_http_
 {
     dap_http_client_out_header_generate(a_simple->http_client);
     a_simple->http_client->state_write = DAP_HTTP_CLIENT_STATE_START;
-    dap_http_client_write(a_simple->esocket, NULL);
     dap_proc_thread_worker_exec_callback_inter(a_thread, a_simple->worker->id, s_esocket_worker_write_callback, a_simple->esocket);
 }
 
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index 55316fc5d4..a387eb04d7 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -1070,7 +1070,7 @@ static void s_node_link_callback_error(dap_chain_node_client_t * a_node_client,
            NODE_ADDR_FP_ARGS_S(a_node_client->remote_node_addr));
     struct json_object *l_json = net_states_json_collect(l_net);
     char l_node_addr_str[INET_ADDRSTRLEN] = {};
-    inet_ntop(AF_INET, &a_node_client->info->hdr.ext_addr_v4, l_node_addr_str, sizeof (a_node_client->info->hdr.ext_addr_v4));
+    inet_ntop(AF_INET, &a_node_client->info->hdr.ext_addr_v4, l_node_addr_str, INET_ADDRSTRLEN);
     char l_err_str[128] = { };
     dap_snprintf(l_err_str, sizeof(l_err_str)
                  , "Link " NODE_ADDR_FP_STR " [%s] can't be established, errno %d"
diff --git a/modules/service/vpn/dap_chain_net_srv_vpn.c b/modules/service/vpn/dap_chain_net_srv_vpn.c
index eb6f0af92f..eb5644d01a 100644
--- a/modules/service/vpn/dap_chain_net_srv_vpn.c
+++ b/modules/service/vpn/dap_chain_net_srv_vpn.c
@@ -237,6 +237,7 @@ static bool s_tun_client_send_data_unsafe(dap_chain_net_srv_ch_vpn_t * l_ch_vpn,
     dap_chain_net_srv_usage_t * l_usage = dap_chain_net_srv_usage_find_unsafe(l_srv_session,  l_ch_vpn->usage_id);
 
     size_t l_data_to_send = (l_pkt_out->header.op_data.data_size + sizeof(l_pkt_out->header));
+    debug_if(s_debug_more, L_DEBUG, "Sent stream pkt size %zu on worker #%u", l_data_to_send, l_ch_vpn->ch->stream_worker->worker->id);
     size_t l_data_sent = dap_stream_ch_pkt_write_unsafe(l_ch_vpn->ch, DAP_STREAM_CH_PKT_TYPE_NET_SRV_VPN_DATA, l_pkt_out, l_data_to_send);
     s_update_limits(l_ch_vpn->ch,l_srv_session,l_usage, l_data_sent );
     if ( l_data_sent < l_data_to_send){
@@ -305,7 +306,7 @@ static bool s_tun_client_send_data(dap_chain_net_srv_ch_vpn_info_t * l_ch_vpn_in
             }
             if(s_debug_more){
                 char l_str_daddr[INET_ADDRSTRLEN];
-                inet_ntop(AF_INET,&l_in_daddr,l_str_daddr,sizeof (l_in_daddr));
+                inet_ntop(AF_INET, &l_in_daddr, l_str_daddr, INET_ADDRSTRLEN);
                 log_it(L_DEBUG, "Sent packet size %zd for desitnation in own context", a_data_size);
             }
 
@@ -332,8 +333,8 @@ static bool s_tun_client_send_data(dap_chain_net_srv_ch_vpn_info_t * l_ch_vpn_in
         }
         if(s_debug_more){
             char l_str_daddr[INET_ADDRSTRLEN];
-            inet_ntop(AF_INET,&l_in_daddr,l_str_daddr,sizeof (l_in_daddr));
-            log_it(L_INFO, "Sent packet for desitnation %zd between contexts",a_data_size);
+            inet_ntop(AF_INET, &l_in_daddr, l_str_daddr, INET_ADDRSTRLEN);
+            log_it(L_INFO, "Sent packet for %s desitnation %zd between contexts", l_str_daddr, a_data_size);
         }
 
     }
@@ -368,7 +369,7 @@ static void s_tun_recv_msg_callback(dap_events_socket_t * a_esocket_queue, void
                 }
             }else{
                 if(dap_log_level_get() <= L_INFO){
-                    char l_addrbuf[17];
+                    char l_addrbuf[INET_ADDRSTRLEN] = {[0]='\0'};
                     inet_ntop(AF_INET,&l_msg->esocket_reassigment.addr, l_addrbuf, sizeof (l_addrbuf));
                     log_it(L_INFO,"Reassigment message for address %s on worker %u comes but no such address was found on tun socket %u",
                            l_addrbuf, l_msg->esocket_reassigment.worker_id,
@@ -479,9 +480,8 @@ static void s_tun_send_msg_ip_assigned(uint32_t a_worker_own_id, uint32_t a_work
  */
 static void s_tun_send_msg_ip_assigned_all(uint32_t a_worker_own_id, dap_chain_net_srv_ch_vpn_t * a_ch_vpn, struct in_addr a_addr)
 {
-    for( uint32_t i=0; i< s_tun_sockets_count; i++)
-        //if( i != a_worker_own_id)
-            s_tun_send_msg_ip_assigned(a_worker_own_id, i, a_ch_vpn , a_addr );
+    for (uint32_t i = 0; i < s_tun_sockets_count; i++)
+        s_tun_send_msg_ip_assigned(a_worker_own_id, i, a_ch_vpn, a_addr);
 }
 
 /**
@@ -503,7 +503,7 @@ static void s_tun_send_msg_ip_unassigned(uint32_t a_worker_own_id, uint32_t a_wo
 
     if( a_worker_own_id != a_worker_id){
         if ( dap_events_socket_queue_ptr_send(s_tun_sockets_queue_msg[a_worker_id], l_msg) != 0 ) {
-            log_it(L_WARNING, "Cant send new  ip unassign message to the tun msg queue #%u", a_worker_id);
+            log_it(L_WARNING, "Cant send new ip unassign message to the tun msg queue #%u", a_worker_id);
         }
     }else{ // We're sending on our own worker so lets just call the process callback
         s_tun_recv_msg_callback(s_tun_sockets_queue_msg[a_worker_id], l_msg);
@@ -1465,7 +1465,7 @@ void s_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg)
 
                 size_t l_size_to_send = l_vpn_pkt->header.op_data.data_size;
                 size_t l_size_sent = dap_events_socket_write_unsafe( l_tun->es,l_vpn_pkt->data, l_size_to_send);
-
+                debug_if(s_debug_more, L_DEBUG, "Recieved stream pkt size %zu on worker #%u", l_size_to_send, a_ch->stream_worker->worker->id);
                 s_update_limits(a_ch, l_srv_session, l_usage, l_size_sent);
                 if (l_size_sent == l_size_to_send) {
                     l_srv_session->stats.packets_sent++;
@@ -1553,22 +1553,22 @@ static void s_es_tun_read(dap_events_socket_t * a_es, void * arg)
     if (s_debug_more){
         char l_str_daddr[INET_ADDRSTRLEN]={[0]='\0'};
         char l_str_saddr[INET_ADDRSTRLEN]={[0]='\0'};
+        struct in_addr l_daddr;
+        struct in_addr l_saddr;
+        size_t l_ip_tot_len;
 #ifdef DAP_OS_LINUX
-        struct in_addr l_daddr={ .s_addr = iph->daddr};
-        struct in_addr l_saddr={ .s_addr = iph->saddr};
-        inet_ntop(AF_INET,&l_daddr,l_str_daddr,sizeof (iph->daddr));
-        inet_ntop(AF_INET,&l_saddr,l_str_saddr,sizeof (iph->saddr));
-        size_t l_ip_tot_len = iph->tot_len;
+        l_daddr.s_addr = iph->daddr;
+        l_saddr.s_addr = iph->saddr;
+        l_ip_tot_len = ntohs(iph->tot_len);
 #else
-        struct in_addr l_daddr={ .s_addr = iph->ip_dst.s_addr };
-        struct in_addr l_saddr={ .s_addr = iph->ip_src.s_addr};
-        inet_ntop(AF_INET,&l_daddr,l_str_daddr,sizeof (l_daddr));
-        inet_ntop(AF_INET,&l_saddr,l_str_saddr,sizeof (l_saddr));
-        size_t l_ip_tot_len = iph->ip_len ;
+        l_daddr.s_addr = iph->ip_dst.s_addr;
+        l_saddr.s_addr = iph->ip_src.s_addr;
+        l_ip_tot_len = ntohs(iph->ip_len);
 #endif
-
-        log_it(L_DEBUG,"m_es_tun_read() received ip packet %s->%s tot_len: %zu ",
-               l_str_saddr, l_str_saddr, l_ip_tot_len);
+        inet_ntop(AF_INET, &l_daddr, l_str_daddr, INET_ADDRSTRLEN);
+        inet_ntop(AF_INET, &l_saddr, l_str_saddr, INET_ADDRSTRLEN);
+        log_it(L_DEBUG,"TUN#%u received ip packet %s->%s tot_len: %zu",
+                        l_tun_socket->worker_id, l_str_saddr, l_str_daddr, l_ip_tot_len);
     }
 
     if(l_buf_in_size) {
@@ -1578,8 +1578,6 @@ static void s_es_tun_read(dap_events_socket_t * a_es, void * arg)
 #else
         l_in_daddr.s_addr = iph->ip_dst.s_addr;
 #endif
-
-        //
         dap_chain_net_srv_ch_vpn_info_t * l_vpn_info = NULL;
         // Try to find in worker's clients, without locks
         if ( l_tun_socket->clients){
@@ -1595,8 +1593,8 @@ 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]={[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);
+            inet_ntop(AF_INET, &l_in_daddr, l_str_daddr, INET_ADDRSTRLEN);
+            log_it(L_WARNING, "Can't find route for desitnation %s", l_str_daddr);
         }
     }
     a_es->buf_in_size=0; // NULL it out because read it all
-- 
GitLab