From e0179465cdd7cc8552a818748522ccee315ac1d9 Mon Sep 17 00:00:00 2001
From: "aleksei.voronin" <aleksei.voronin@demlabs.net>
Date: Fri, 31 Jul 2020 18:10:24 +0300
Subject: [PATCH] [*] reading in m_es_tun_read is not cycled now

---
 modules/service/vpn/dap_chain_net_srv_vpn.c | 66 ++++++++++-----------
 1 file changed, 33 insertions(+), 33 deletions(-)

diff --git a/modules/service/vpn/dap_chain_net_srv_vpn.c b/modules/service/vpn/dap_chain_net_srv_vpn.c
index 2f92c76950..5f5e56c22b 100644
--- a/modules/service/vpn/dap_chain_net_srv_vpn.c
+++ b/modules/service/vpn/dap_chain_net_srv_vpn.c
@@ -1646,41 +1646,41 @@ void m_es_tun_read(dap_events_socket_t * a_es, void * arg)
 
     size_t l_read_ret;
 
-    do{
-        l_read_ret = dap_events_socket_read(s_raw_server->tun_events_socket, l_tmp_buf, sizeof(l_tmp_buf));
-
-        if(l_read_ret > 0) {
-            struct iphdr *iph = (struct iphdr*) l_tmp_buf;
-            struct in_addr in_daddr, in_saddr;
-            in_daddr.s_addr = iph->daddr;
-            in_saddr.s_addr = iph->saddr;
-            char str_daddr[42], str_saddr[42];
-            dap_snprintf(str_saddr, sizeof(str_saddr), "%s",inet_ntoa(in_saddr) );
-            dap_snprintf(str_daddr, sizeof(str_daddr), "%s",inet_ntoa(in_daddr) );
-
-            dap_chain_net_srv_ch_vpn_t * l_ch_vpn = NULL;
-            pthread_rwlock_rdlock(&s_clients_rwlock);
-            HASH_FIND(hh,s_ch_vpn_addrs, &in_daddr, sizeof (in_daddr), l_ch_vpn);
-
-            if(l_ch_vpn) { // Is present in hash table such destination address
-
-                if (dap_stream_ch_get_ready_to_read(l_ch_vpn->ch ) ){
-                    dap_chain_net_srv_stream_session_t * l_srv_session = DAP_CHAIN_NET_SRV_STREAM_SESSION (l_ch_vpn->ch->stream->session );
-                    dap_chain_net_srv_usage_t * l_usage = dap_chain_net_srv_usage_find(l_srv_session,  l_ch_vpn->usage_id);
-                    ch_vpn_pkt_t *l_pkt_out = DAP_NEW_Z_SIZE(ch_vpn_pkt_t, sizeof(l_pkt_out->header) + l_read_ret);
-                    l_pkt_out->header.op_code = VPN_PACKET_OP_CODE_VPN_RECV;
-                    l_pkt_out->header.sock_id = s_raw_server->tun_fd;
-                    l_pkt_out->header.usage_id = l_ch_vpn->usage_id;
-                    l_pkt_out->header.op_data.data_size = l_read_ret;
-                    memcpy(l_pkt_out->data, l_tmp_buf, l_read_ret);
-                    dap_stream_ch_pkt_write(l_ch_vpn->ch, DAP_STREAM_CH_PKT_TYPE_NET_SRV_VPN_DATA, l_pkt_out,
-                            l_pkt_out->header.op_data.data_size + sizeof(l_pkt_out->header));
-                    s_update_limits(l_ch_vpn->ch,l_srv_session,l_usage, l_read_ret);
-                }
+
+    l_read_ret = dap_events_socket_read(s_raw_server->tun_events_socket, l_tmp_buf, sizeof(l_tmp_buf));
+
+    if(l_read_ret > 0) {
+        struct iphdr *iph = (struct iphdr*) l_tmp_buf;
+        struct in_addr in_daddr, in_saddr;
+        in_daddr.s_addr = iph->daddr;
+        in_saddr.s_addr = iph->saddr;
+        char str_daddr[42], str_saddr[42];
+        dap_snprintf(str_saddr, sizeof(str_saddr), "%s",inet_ntoa(in_saddr) );
+        dap_snprintf(str_daddr, sizeof(str_daddr), "%s",inet_ntoa(in_daddr) );
+
+        dap_chain_net_srv_ch_vpn_t * l_ch_vpn = NULL;
+        pthread_rwlock_rdlock(&s_clients_rwlock);
+        HASH_FIND(hh,s_ch_vpn_addrs, &in_daddr, sizeof (in_daddr), l_ch_vpn);
+
+        if(l_ch_vpn) { // Is present in hash table such destination address
+
+            if (dap_stream_ch_get_ready_to_read(l_ch_vpn->ch ) ){
+                dap_chain_net_srv_stream_session_t * l_srv_session = DAP_CHAIN_NET_SRV_STREAM_SESSION (l_ch_vpn->ch->stream->session );
+                dap_chain_net_srv_usage_t * l_usage = dap_chain_net_srv_usage_find(l_srv_session,  l_ch_vpn->usage_id);
+                ch_vpn_pkt_t *l_pkt_out = DAP_NEW_Z_SIZE(ch_vpn_pkt_t, sizeof(l_pkt_out->header) + l_read_ret);
+                l_pkt_out->header.op_code = VPN_PACKET_OP_CODE_VPN_RECV;
+                l_pkt_out->header.sock_id = s_raw_server->tun_fd;
+                l_pkt_out->header.usage_id = l_ch_vpn->usage_id;
+                l_pkt_out->header.op_data.data_size = l_read_ret;
+                memcpy(l_pkt_out->data, l_tmp_buf, l_read_ret);
+                dap_stream_ch_pkt_write(l_ch_vpn->ch, DAP_STREAM_CH_PKT_TYPE_NET_SRV_VPN_DATA, l_pkt_out,
+                        l_pkt_out->header.op_data.data_size + sizeof(l_pkt_out->header));
+                s_update_limits(l_ch_vpn->ch,l_srv_session,l_usage, l_read_ret);
             }
-            pthread_rwlock_unlock(&s_clients_rwlock);
         }
-    }while(l_read_ret > 0);
+        pthread_rwlock_unlock(&s_clients_rwlock);
+    }
+
 
     dap_events_socket_set_readable(a_es, true);
 }
-- 
GitLab