From 0c60105198863a88112a0e5e0c40e79c08de0cb2 Mon Sep 17 00:00:00 2001
From: "roman.khlopkov" <roman.khlopkov@demlabs.net>
Date: Wed, 14 Feb 2024 12:04:28 +0300
Subject: [PATCH] [*] Write callback prototype change

---
 modules/chain/dap_chain_ch.c                  | 17 ++++++------
 .../dap_stream_ch_chain_net_srv.c             |  5 ++--
 .../chain-net/dap_stream_ch_chain_net.c       | 14 +---------
 modules/service/vpn/dap_chain_net_srv_vpn.c   | 26 +++++++++----------
 .../vpn/dap_chain_net_vpn_client_tun.c        |  3 ++-
 5 files changed, 27 insertions(+), 38 deletions(-)

diff --git a/modules/chain/dap_chain_ch.c b/modules/chain/dap_chain_ch.c
index 5baf69dbad..52747f63e0 100644
--- a/modules/chain/dap_chain_ch.c
+++ b/modules/chain/dap_chain_ch.c
@@ -101,8 +101,8 @@ static inline bool s_ch_chain_get_idle(dap_chain_ch_t *a_ch_chain) { return a_ch
 static void s_stream_ch_new(dap_stream_ch_t* a_ch, void* a_arg);
 static void s_stream_ch_delete(dap_stream_ch_t* a_ch, void* a_arg);
 static void s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg);
-static void s_stream_ch_packet_out(dap_stream_ch_t* a_ch, void* a_arg);
-static void s_stream_ch_io_complete(dap_events_socket_t *a_es, void *a_arg, int a_errno);
+static bool s_stream_ch_packet_out(dap_stream_ch_t* a_ch, void* a_arg);
+static void s_stream_ch_io_complete(dap_events_socket_t *a_es, void *a_arg);
 static void s_stream_ch_write_error_unsafe(dap_stream_ch_t *a_ch, uint64_t a_net_id, uint64_t a_chain_id, uint64_t a_cell_id, const char * a_err_string);
 
 static bool s_sync_out_chains_proc_callback(void *a_arg);
@@ -1216,10 +1216,8 @@ struct chain_io_complete {
     byte_t data[];
 };
 
-static void s_stream_ch_io_complete(dap_events_socket_t *a_es, void *a_arg, int a_errno)
+static void s_stream_ch_io_complete(dap_events_socket_t *a_es, void *a_arg)
 {
-    if (a_errno)
-        return;
     dap_stream_t *l_stream = NULL;
     if (!a_es->server) {
         dap_client_t *l_client = DAP_ESOCKET_CLIENT(a_es);
@@ -1281,13 +1279,13 @@ static void s_stream_ch_chain_pkt_write(dap_stream_ch_t *a_ch, uint8_t a_type, u
  * @param ch
  * @param arg
  */
-void s_stream_ch_packet_out(dap_stream_ch_t *a_ch, void *a_arg)
+static bool s_stream_ch_packet_out(dap_stream_ch_t *a_ch, void *a_arg)
 {
     dap_chain_ch_t *l_ch_chain = DAP_STREAM_CH_CHAIN(a_ch);
     if (!l_ch_chain) {
         log_it(L_CRITICAL, "Channel without chain, dump it");
         s_ch_chain_go_idle(l_ch_chain);
-        return;
+        return false;
     }
     bool l_go_idle = false, l_was_sent_smth = false;
     switch (l_ch_chain->state) {
@@ -1549,7 +1547,7 @@ void s_stream_ch_packet_out(dap_stream_ch_t *a_ch, void *a_arg)
                     l_hash_item = DAP_NEW_Z(dap_chain_ch_hash_item_t);
                     if (!l_hash_item) {
                         log_it(L_CRITICAL, "Memory allocation error");
-                        return;
+                        return false;
                     }
                     l_hash_item->hash = *l_ch_chain->request_atom_iter->cur_hash;
                     if(s_debug_more){
@@ -1587,6 +1585,7 @@ void s_stream_ch_packet_out(dap_stream_ch_t *a_ch, void *a_arg)
                                                            0, l_ch_chain->callback_notify_arg);
             }
         } break;
+
         default: break;
     }
     if (l_was_sent_smth) {
@@ -1601,5 +1600,7 @@ void s_stream_ch_packet_out(dap_stream_ch_t *a_ch, void *a_arg)
                 dap_timerfd_delete_unsafe(l_ch_chain->activity_timer);
             l_ch_chain->activity_timer = NULL;
         }
+        return false;
     }
+    return true;
 }
diff --git a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
index c14c1be39b..d890a0c250 100644
--- a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
+++ b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c
@@ -53,7 +53,7 @@ typedef struct usages_in_grace{
 static void s_stream_ch_new(dap_stream_ch_t* ch , void* arg);
 static void s_stream_ch_delete(dap_stream_ch_t* ch , void* arg);
 static void s_stream_ch_packet_in(dap_stream_ch_t* ch , void* arg);
-static void s_stream_ch_packet_out(dap_stream_ch_t* ch , void* arg);
+static bool s_stream_ch_packet_out(dap_stream_ch_t* ch , void* arg);
 
 static bool s_unban_client(dap_chain_net_srv_banlist_item_t *a_item);
 
@@ -1592,11 +1592,12 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch , void* a_arg)
  * @param a_ch
  * @param a_arg
  */
-void s_stream_ch_packet_out(dap_stream_ch_t* a_ch , void* a_arg)
+static bool s_stream_ch_packet_out(dap_stream_ch_t* a_ch , void* a_arg)
 {
     (void) a_arg;
 
     dap_stream_ch_set_ready_to_write_unsafe(a_ch, false);
     // Callback should note that after write action it should restore write flag if it has more data to send on next iteration
     dap_chain_net_srv_call_write_all( a_ch);
+    return false;
 }
diff --git a/modules/channel/chain-net/dap_stream_ch_chain_net.c b/modules/channel/chain-net/dap_stream_ch_chain_net.c
index 066697d82f..f610520e9f 100644
--- a/modules/channel/chain-net/dap_stream_ch_chain_net.c
+++ b/modules/channel/chain-net/dap_stream_ch_chain_net.c
@@ -60,7 +60,6 @@
 static void s_stream_ch_new(dap_stream_ch_t* ch, void* arg);
 static void s_stream_ch_delete(dap_stream_ch_t* ch, void* arg);
 static void s_stream_ch_packet_in(dap_stream_ch_t* ch, void* arg);
-static void s_stream_ch_packet_out(dap_stream_ch_t* ch, void* arg);
 
 /**
  * @brief dap_stream_ch_chain_net_init
@@ -70,7 +69,7 @@ int dap_stream_ch_chain_net_init()
 {
     log_it(L_NOTICE, "Chain network channel initialized");
     dap_stream_ch_proc_add(DAP_STREAM_CH_NET_ID, s_stream_ch_new, s_stream_ch_delete,
-            s_stream_ch_packet_in, s_stream_ch_packet_out);
+            s_stream_ch_packet_in, NULL);
 
     return 0;
 }
@@ -289,14 +288,3 @@ void s_stream_ch_packet_in(dap_stream_ch_t *a_ch, void* a_arg)
 
     }
 }
-
-
-
-/**
- * @brief s_stream_ch_packet_out
- * @param ch
- * @param arg
- */
-void s_stream_ch_packet_out(dap_stream_ch_t* a_ch, void* a_arg)
-{
-}
diff --git a/modules/service/vpn/dap_chain_net_srv_vpn.c b/modules/service/vpn/dap_chain_net_srv_vpn.c
index 3cd1c8e594..a500e77323 100644
--- a/modules/service/vpn/dap_chain_net_srv_vpn.c
+++ b/modules/service/vpn/dap_chain_net_srv_vpn.c
@@ -201,7 +201,7 @@ static bool s_save_limits(void* arg);
 static void s_ch_vpn_new(dap_stream_ch_t* ch, void* arg);
 static void s_ch_vpn_delete(dap_stream_ch_t* ch, void* arg);
 static void s_ch_packet_in(dap_stream_ch_t* ch, void* a_arg);
-static void s_ch_packet_out(dap_stream_ch_t* ch, void* arg);
+static bool s_ch_packet_out(dap_stream_ch_t* ch, void* arg);
 
 static void s_ch_vpn_esocket_assigned(dap_events_socket_t* a_es, dap_worker_t * l_worker);
 static void s_ch_vpn_esocket_unassigned(dap_events_socket_t* a_es, dap_worker_t * l_worker);
@@ -220,8 +220,8 @@ static void s_es_tun_new(dap_events_socket_t * a_es, void * arg);
 static void s_es_tun_delete(dap_events_socket_t * a_es, void * arg);
 static void s_es_tun_read(dap_events_socket_t * a_es, void * arg);
 static void s_es_tun_error(dap_events_socket_t * a_es,int arg);
-static void s_es_tun_write(dap_events_socket_t* a_es, void* arg);
-static void s_es_tun_write_finished(dap_events_socket_t* a_es, void* a_arg, int a_errno);
+static bool s_es_tun_write(dap_events_socket_t* a_es, void* arg);
+static void s_es_tun_write_finished(dap_events_socket_t *a_es, void* a_arg);
 
 static void s_tun_recv_msg_callback(dap_events_socket_t * a_esocket_queue, void * a_msg );
 static void s_tun_send_msg_ip_assigned(uint32_t a_worker_own_id, uint32_t a_worker_id, dap_chain_net_srv_ch_vpn_t * a_ch_vpn, struct in_addr a_addr);
@@ -1808,7 +1808,7 @@ void s_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg)
  * @param ch
  * @param arg
  */
-static void s_ch_packet_out(dap_stream_ch_t* a_ch, void* a_arg)
+static bool s_ch_packet_out(dap_stream_ch_t* a_ch, void* a_arg)
 {
     (void) a_arg;
     dap_chain_net_srv_stream_session_t * l_srv_session = DAP_CHAIN_NET_SRV_STREAM_SESSION( a_ch->stream->session );
@@ -1819,7 +1819,7 @@ static void s_ch_packet_out(dap_stream_ch_t* a_ch, void* a_arg)
         log_it(L_NOTICE, "No active usage in list, possible disconnected. Send nothing on this channel");
         dap_stream_ch_set_ready_to_write_unsafe(a_ch,false);
         dap_stream_ch_set_ready_to_read_unsafe(a_ch,false);
-        return;
+        return false;
     }
 
     if ( ! l_usage->is_active ){
@@ -1828,7 +1828,7 @@ static void s_ch_packet_out(dap_stream_ch_t* a_ch, void* a_arg)
             dap_stream_ch_pkt_write_unsafe( l_usage->client->ch , DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_NOTIFY_STOPPED , NULL, 0 );
         dap_stream_ch_set_ready_to_write_unsafe(a_ch,false);
         dap_stream_ch_set_ready_to_read_unsafe(a_ch,false);
-        return;
+        return false;
     }
     if ( (! l_usage->is_free) && (! l_usage->receipt && !l_usage->is_grace) ){
         log_it(L_WARNING, "No active receipt, switching off");
@@ -1836,12 +1836,9 @@ static void s_ch_packet_out(dap_stream_ch_t* a_ch, void* a_arg)
             dap_stream_ch_pkt_write_unsafe( l_usage->client->ch , DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_NOTIFY_STOPPED , NULL, 0 );
         dap_stream_ch_set_ready_to_write_unsafe(a_ch,false);
         dap_stream_ch_set_ready_to_read_unsafe(a_ch,false);
-        return;
+        return false;
     }
-    // Check for empty buffer out here to prevent warnings in worker
-    if ( ! a_ch->stream->esocket->buf_out_size )
-        dap_events_socket_set_writable_unsafe(a_ch->stream->esocket,false);
-
+    return false;
 }
 
 /**
@@ -1864,7 +1861,7 @@ static void s_es_tun_delete(dap_events_socket_t * a_es, void * arg)
  * @param a_es
  * @param arg
  */
-static void s_es_tun_write(dap_events_socket_t *a_es, void *arg)
+static bool s_es_tun_write(dap_events_socket_t *a_es, void *arg)
 {
     (void) arg;
     dap_chain_net_srv_vpn_tun_socket_t *l_tun = CH_SF_TUN_SOCKET(a_es);
@@ -1913,11 +1910,12 @@ static void s_es_tun_write(dap_events_socket_t *a_es, void *arg)
     }
     l_tun->buf_size_aux = l_tun->es->buf_out_size;  /* We backup the genuine buffer size... */
     l_tun->es->buf_out_size = 0;                    /* ... and insure the socket against coursing thru regular writing operations */
+    return false;
 }
 
-static void s_es_tun_write_finished(dap_events_socket_t *a_es, void *a_arg, int a_errno) {
+static void s_es_tun_write_finished(dap_events_socket_t *a_es, void *a_arg)
+{
     UNUSED(a_arg);
-    UNUSED(a_errno);
     dap_chain_net_srv_vpn_tun_socket_t *l_tun = CH_SF_TUN_SOCKET(a_es);
     assert(l_tun);
     assert(l_tun->es == a_es);
diff --git a/modules/service/vpn/dap_chain_net_vpn_client_tun.c b/modules/service/vpn/dap_chain_net_vpn_client_tun.c
index ffd219b19f..43f92ee72a 100644
--- a/modules/service/vpn/dap_chain_net_vpn_client_tun.c
+++ b/modules/service/vpn/dap_chain_net_vpn_client_tun.c
@@ -342,8 +342,9 @@ static void m_client_tun_delete(dap_events_socket_t * a_es, void * arg)
   log_it(L_NOTICE, "Raw sockets listen thread is stopped");
 }
 
-static void m_client_tun_write(dap_events_socket_t * a_es, void * arg)
+static bool m_client_tun_write(dap_events_socket_t * a_es, void * arg)
 {
+    return false;
 }
 
 void m_client_tun_new(dap_events_socket_t * a_es, void * arg)
-- 
GitLab