From c3f2ab5f68f006f271837935838afc6fe0237949 Mon Sep 17 00:00:00 2001
From: Aleksandr Lysikov <lysikov@inbox.ru>
Date: Fri, 29 Mar 2019 20:56:57 +0500
Subject: [PATCH] replaced Glib functions to dap_xxx()

---
 dap_chain_node_cli.c     |  40 ++++++------
 dap_chain_node_cli_cmd.c | 128 ++++++++++++++++++++++++---------------
 dap_chain_node_client.c  |  69 +++++++++++++--------
 dap_chain_node_client.h  |   2 +-
 iputils/iputils.c        |  10 +--
 iputils/ping.c           |   8 ++-
 6 files changed, 156 insertions(+), 101 deletions(-)

diff --git a/dap_chain_node_cli.c b/dap_chain_node_cli.c
index 4efe82a53b..85d556f390 100644
--- a/dap_chain_node_cli.c
+++ b/dap_chain_node_cli.c
@@ -23,7 +23,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <errno.h>
-#include <glib.h>
+//#include <glib.h>
 
 #ifndef _WIN32
 #include <poll.h>
@@ -48,6 +48,8 @@ typedef int SOCKET;
 
 #include "iputils/iputils.h"
 #include "dap_common.h"
+#include "dap_strfuncs.h"
+#include "dap_list.h"
 #include "dap_chain_node_cli_cmd.h"
 #include "dap_chain_node_client.h"
 #include "dap_chain_node_cli.h"
@@ -265,7 +267,7 @@ static void* thread_one_client_func(void *args)
     int timeout = 5000; // 5 sec
     char **argv = NULL;
     int argc = 0;
-    GList *cmd_param_list = NULL;
+    dap_list_t *cmd_param_list = NULL;
     while(1)
     {
         // wait data from client
@@ -294,57 +296,57 @@ static void* thread_one_client_func(void *args)
         }
         // filling parameters of command
         if(marker == 1) {
-            cmd_param_list = g_list_append(cmd_param_list, str_header);
+            cmd_param_list = dap_list_append(cmd_param_list, str_header);
             //printf("g_list_append argc=%d command=%s ", argc, str_header);
             argc++;
         }
         else
             free(str_header);
         if(marker == 2) {
-            GList *list = cmd_param_list;
+            dap_list_t *list = cmd_param_list;
             // form command
-            guint argc = g_list_length(list);
+            unsigned int argc = dap_list_length(list);
             // command is found
             if(argc >= 1) {
                 char *cmd_name = list->data;
-                list = g_list_next(list);
+                list = dap_list_next(list);
                 // execute command
-                char *str_cmd = g_strdup_printf("%s", cmd_name);
+                char *str_cmd = dap_strdup_printf("%s", cmd_name);
                 const COMMAND *command = find_command(cmd_name);
                 int res = -1;
                 char *str_reply = NULL;
                 if(command)
                 {
                     while(list) {
-                        str_cmd = g_strdup_printf("%s;%s", str_cmd, list->data);
-                        list = g_list_next(list);
+                        str_cmd = dap_strdup_printf("%s;%s", str_cmd, list->data);
+                        list = dap_list_next(list);
                     }
                     log_it(L_INFO, "execute command=%s", str_cmd);
                     // exec command
 
-                    char **argv = g_strsplit(str_cmd, ";", -1);
+                    char **argv = dap_strsplit(str_cmd, ";", -1);
                     // Call the command function
                     if(command && command->func)
                         res = (*(command->func))(argc, (const char **) argv, &str_reply);
-                    g_strfreev(argv);
+                    dap_strfreev(argv);
                 }
                 else
                 {
-                    str_reply = g_strdup_printf("can't recognize command=%s", str_cmd);
+                    str_reply = dap_strdup_printf("can't recognize command=%s", str_cmd);
                     log_it(L_ERROR, str_reply);
                 }
-                gchar *reply_body = g_strdup_printf("%d\r\n%s\r\n", res, (str_reply) ? str_reply : "");
+                char *reply_body = dap_strdup_printf("%d\r\n%s\r\n", res, (str_reply) ? str_reply : "");
                 // return the result of the command function
-                gchar *reply_str = g_strdup_printf("HTTP/1.1 200 OK\r\nContent-Length: %d\r\n\r\n%s",
+                char *reply_str = dap_strdup_printf("HTTP/1.1 200 OK\r\nContent-Length: %d\r\n\r\n%s",
                         strlen(reply_body), reply_body);
                 int ret = send(newsockfd, reply_str, strlen(reply_str), 1000);
-                g_free(str_reply);
-                g_free(reply_str);
-                g_free(reply_body);
+                DAP_DELETE(str_reply);
+                DAP_DELETE(reply_str);
+                DAP_DELETE(reply_body);
 
-                g_free(str_cmd);
+                DAP_DELETE(str_cmd);
             }
-            g_list_free_full(cmd_param_list, free);
+            dap_list_free_full(cmd_param_list, free);
             break;
         }
     }
diff --git a/dap_chain_node_cli_cmd.c b/dap_chain_node_cli_cmd.c
index 2ddfdd6d2e..a0b82ecd57 100644
--- a/dap_chain_node_cli_cmd.c
+++ b/dap_chain_node_cli_cmd.c
@@ -34,6 +34,9 @@
 //#include "dap_common.h"
 #include "dap_hash.h"
 #include "dap_chain_common.h"
+#include "dap_strfuncs.h"
+#include "dap_list.h"
+#include "dap_string.h"
 #include "dap_chain_wallet.h"
 #include "dap_chain_node.h"
 #include "dap_chain_global_db.h"
@@ -45,13 +48,10 @@
 #include "dap_chain_datum_tx_ctrl.h"
 #include "dap_chain_datum_tx_items.h"
 #include "dap_chain_datum_tx_cache.h"
+#include "dap_chain_global_db.h"
 
 #include "dap_stream_ch_chain_net.h"
 
-// Max and min macros
-#define max(a,b)              ((a) > (b) ? (a) : (b))
-#define min(a,b)              ((a) < (b) ? (a) : (b))
-
 #define LOG_TAG "chain_node_cli_cmd"
 
 /**
@@ -158,14 +158,14 @@ dap_chain_node_addr_t* get_name_by_alias(const char *alias)
  *
  * return list of addr, NULL if not found
  */
-static GList* get_aliases_by_name(dap_chain_node_addr_t *addr)
+static dap_list_t* get_aliases_by_name(dap_chain_node_addr_t *addr)
 {
     if(!addr)
         return NULL;
-    GList *list_aliases = NULL;
+    dap_list_t *list_aliases = NULL;
     size_t data_size = 0;
     // read all aliases
-    dap_global_db_obj_t **objs = dap_chain_global_db_gr_load(&data_size, GROUP_ALIAS);
+    dap_global_db_obj_t **objs = dap_chain_global_db_gr_load(GROUP_ALIAS, &data_size);
     if(!objs || !data_size)
         return NULL;
     for(int i = 0; i < data_size; i++) {
@@ -180,7 +180,7 @@ static GList* get_aliases_by_name(dap_chain_node_addr_t *addr)
                 continue;
             }
             if(addr->uint64 == addr_i.uint64) {
-                list_aliases = g_list_prepend(list_aliases, strdup(obj->key));
+                list_aliases = dap_list_prepend(list_aliases, strdup(obj->key));
             }
         }
     }
@@ -216,12 +216,12 @@ static void set_reply_text(char **str_reply, const char *str, ...)
     if(str_reply) {
         if(*str_reply) {
             assert(!*str_reply);
-            g_free(*str_reply);
+            DAP_DELETE(*str_reply);
             *str_reply = NULL;
         }
         va_list args;
         va_start(args, str);
-        *str_reply = g_strdup_vprintf(str, args); //*str_reply = g_strdup(str);
+        *str_reply = dap_strdup_vprintf(str, args); //*str_reply = dap_strdup(str);
         va_end(args);
     }
 }
@@ -355,15 +355,15 @@ static int com_global_db_del(dap_chain_node_info_t *node_info, const char *alias
         if(res) {
             // delete all aliases for node address
             {
-                GList *list_aliases = get_aliases_by_name(address);
-                GList *list = list_aliases;
+                dap_list_t *list_aliases = get_aliases_by_name(address);
+                dap_list_t *list = list_aliases;
                 while(list)
                 {
                     const char *alias = (const char *) list->data;
                     del_alias(alias);
-                    list = g_list_next(list);
+                    list = dap_list_next(list);
                 }
-                g_list_free_full(list_aliases, (GDestroyNotify) free);
+                dap_list_free_full(list_aliases, (DapDestroyNotify) free);
             }
             // set text response
             set_reply_text(str_reply, "node deleted");
@@ -522,27 +522,27 @@ static int com_global_db_dump(dap_chain_node_info_t *node_info, const char *alia
     const char* str_ip6 = inet_ntop(AF_INET6, &(((struct sockaddr_in6 *) &sa6)->sin6_addr), host6, hostlen);
 
     // get aliases in form of string
-    GString *aliases_string = g_string_new(NULL);
-    GList *list_aliases = get_aliases_by_name(address);
+    dap_string_t *aliases_string = dap_string_new(NULL);
+    dap_list_t *list_aliases = get_aliases_by_name(address);
     if(list_aliases)
     {
-        GList *list = list_aliases;
+        dap_list_t *list = list_aliases;
         while(list)
         {
             const char *alias = (const char *) list->data;
-            g_string_append_printf(aliases_string, "\nalias %s", alias);
-            list = g_list_next(list);
+            dap_string_append_printf(aliases_string, "\nalias %s", alias);
+            list = dap_list_next(list);
         }
-        g_list_free_full(list_aliases, (GDestroyNotify) free);
+        dap_list_free_full(list_aliases, (DapDestroyNotify) free);
     }
     else
-        g_string_append(aliases_string, "\nno aliases");
+        dap_string_append(aliases_string, "\nno aliases");
 
     // get links in form of string
-    GString *links_string = g_string_new(NULL);
+    dap_string_t *links_string = dap_string_new(NULL);
     for(int i = 0; i < node_info_read->hdr.links_number; i++) {
         dap_chain_node_addr_t link_addr = node_info_read->links[i];
-        g_string_append_printf(links_string, "\nlink%02d address : 0x%llx", i, link_addr.uint64);
+        dap_string_append_printf(links_string, "\nlink%02d address : 0x%llx", i, link_addr.uint64);
     }
 
     // set full reply with node param
@@ -550,8 +550,8 @@ static int com_global_db_dump(dap_chain_node_info_t *node_info, const char *alia
             node_info_read->hdr.address, node_info_read->hdr.shard_id, aliases_string->str,
             str_ip4, str_ip6,
             node_info_read->hdr.links_number, links_string->str);
-    g_string_free(aliases_string, TRUE);
-    g_string_free(links_string, TRUE);
+    dap_string_free(aliases_string, true);
+    dap_string_free(links_string, true);
 
     DAP_DELETE(address);
     DAP_DELETE(node_info_read);
@@ -741,13 +741,33 @@ int com_node(int argc, const char ** argv, char **str_reply)
             set_reply_text(str_reply, "addr not found");
             return -1;
         }
-
+        // debug
+        if(0)
+        {
+#include "dap_chain_global_db.h"
+            size_t l_data_size_out = 0;
+            dap_global_db_obj_t a_objs[2];
+            a_objs[0].key = "k1";
+            a_objs[1].key = "k2";
+            a_objs[0].value = "v1";
+            a_objs[1].value = "v2";
+            dap_chain_global_db_save(a_objs, 2); //dap_chain_global_db_save
+            char *l_diff = dap_db_log_get_diff(NULL);
+            DAP_DELETE(l_diff);
+            dap_global_db_obj_t **db1 = dap_chain_global_db_gr_load(GROUP_DATUM, &l_data_size_out);
+            printf("GROUP_DATUM size = %d\n", l_data_size_out);
+            dap_global_db_obj_t **db2 = dap_chain_global_db_gr_load(GROUP_ALIAS, &l_data_size_out);
+            printf("GROUP_ALIAS size = %d\n", l_data_size_out);
+            dap_global_db_obj_t **db3 = dap_chain_global_db_gr_load(GROUP_NODE, &l_data_size_out);
+            printf("GROUP_NODE size = %d\n", l_data_size_out);
+            set_reply_text(str_reply, "debug ok");
+            return 0;
+        }
         dap_chain_node_info_t *node_info = dap_chain_node_info_read(&address, str_reply);
         if(!node_info) {
             set_reply_text(str_reply, "node by addr not found");
             return -1;
         }
-        int timeout_ms = 1000000; //10 sec = 10000 ms
         // start connect
         dap_chain_node_client_t *client = dap_chain_node_client_connect(node_info);
         if(!client) {
@@ -756,6 +776,7 @@ int com_node(int argc, const char ** argv, char **str_reply)
             return -1;
         }
         // wait connected
+        int timeout_ms = 150000; //15 sec = 15000 ms
         int res = chain_node_client_wait(client, NODE_CLIENT_STATE_CONNECTED, timeout_ms);
         if(res != 1) {
             set_reply_text(str_reply, "no response from node");
@@ -766,8 +787,17 @@ int com_node(int argc, const char ** argv, char **str_reply)
         }
 
         // send request
+        size_t l_data_size_out = 0;
+        // Get last timestamp in log
+        char *l_str = dap_db_log_get_last_timestamp();
+        // Get log diff
+        //char *l_str = dap_db_log_get_diff(&l_data_size_out);
+        //dap_global_db_obj_t **l_hist_objs = dap_chain_global_db_load(l_data_size_out);
+        //size_t *a_data_size_out(l_hist_objs);
+
         uint8_t l_ch_id = dap_stream_ch_chain_net_get_id(); // Channel id for global_db sync
-        res = dap_chain_node_client_send_chain_request(client, l_ch_id, "start", 5); //, NULL);
+        res = dap_chain_node_client_send_chain_net_request(client, l_ch_id,
+                STREAM_CH_CHAIN_NET_PKT_TYPE_GLOBAL_DB_REQUEST_SYNC, l_str, (l_str) ? strlen(l_str) : 0); //, NULL);
         if(res != 1) {
             set_reply_text(str_reply, "no response from node(send request)");
             // clean client struct
@@ -777,7 +807,9 @@ int com_node(int argc, const char ** argv, char **str_reply)
         }
 
         // wait for finishing of request
-        res = chain_node_client_wait(client, NODE_CLIENT_STATE_PONG, timeout_ms);
+        timeout_ms = 120000; // 2 min = 120 sec = 120 000 ms
+        // TODO add progress info to console
+        res = chain_node_client_wait(client, NODE_CLIENT_STATE_END, timeout_ms);
         DAP_DELETE(node_info);
         dap_client_disconnect(client->client);
         dap_chain_node_client_close(client);
@@ -1096,7 +1128,7 @@ int com_tx_wallet(int argc, const char ** argv, char **str_reply)
     find_option_val(argv, arg_index, argc, "-addr", &addr_str);
     find_option_val(argv, arg_index, argc, "-w", &wallet_name);
 
-    GString *l_string_ret = g_string_new(NULL);
+    dap_string_t *l_string_ret = dap_string_new(NULL);
     switch (cmd_num) {
     // wallet list
     case CMD_WALLET_LIST: {
@@ -1107,17 +1139,17 @@ int com_tx_wallet(int argc, const char ** argv, char **str_reply)
                 l_file = g_dir_read_name(l_dir);
                 int l_file_len = (l_file) ? strlen(l_file) : 0;
                 if(l_file_len > 8 && !g_strcmp0(l_file + l_file_len - 8, ".dwallet")) {
-                    char *l_file_path_tmp = g_strdup_printf("%s/%s", c_wallets_path, l_file);
+                    char *l_file_path_tmp = dap_strdup_printf("%s/%s", c_wallets_path, l_file);
                     dap_chain_wallet_t *l_wallet = dap_chain_wallet_open_file(l_file_path_tmp);
                     if(l_wallet) {
                         dap_chain_addr_t *l_addr = (dap_chain_addr_t *) dap_chain_wallet_get_addr(l_wallet);
                         char *l_addr_str = dap_chain_addr_to_str((dap_chain_addr_t*) l_addr);
-                        g_string_append_printf(l_string_ret, "\nwallet: %s\n", l_wallet->name);
-                        g_string_append_printf(l_string_ret, "addr: %s\n", (l_addr_str) ? l_addr_str : "-");
+                        dap_string_append_printf(l_string_ret, "\nwallet: %s\n", l_wallet->name);
+                        dap_string_append_printf(l_string_ret, "addr: %s\n", (l_addr_str) ? l_addr_str : "-");
                         DAP_DELETE(l_addr_str);
                         dap_chain_wallet_close(l_wallet);
                     }
-                    g_free(l_file_path_tmp);
+                    DAP_DELETE(l_file_path_tmp);
                 }
             }
             while(l_file);
@@ -1135,14 +1167,14 @@ int com_tx_wallet(int argc, const char ** argv, char **str_reply)
             dap_chain_addr_t *l_addr = (dap_chain_addr_t *) dap_chain_wallet_get_addr(l_wallet);
             char *l_addr_str = dap_chain_addr_to_str((dap_chain_addr_t*) l_addr);
             uint64_t balance = dap_chain_datum_tx_cache_calc_balance(l_addr);
-            g_string_append_printf(l_string_ret, "\nwallet: %s\n", l_wallet->name);
-            g_string_append_printf(l_string_ret, "addr: %s\n", (l_addr_str) ? l_addr_str : "-");
-            g_string_append_printf(l_string_ret, "balance: %lld\n", balance);
+            dap_string_append_printf(l_string_ret, "\nwallet: %s\n", l_wallet->name);
+            dap_string_append_printf(l_string_ret, "addr: %s\n", (l_addr_str) ? l_addr_str : "-");
+            dap_string_append_printf(l_string_ret, "balance: %lld\n", balance);
             DAP_DELETE(l_addr_str);
             dap_chain_wallet_close(l_wallet);
         }
         else {
-            g_string_free(l_string_ret, TRUE);
+            dap_string_free(l_string_ret, true);
             set_reply_text(str_reply, "wallet not found");
             return -1;
         }
@@ -1150,10 +1182,10 @@ int com_tx_wallet(int argc, const char ** argv, char **str_reply)
         break;
     }
 
-    char *l_str_ret_tmp = g_string_free(l_string_ret, FALSE);
-    char *str_ret = strdup(l_str_ret_tmp);
+    char *l_str_ret_tmp = dap_string_free(l_string_ret, false);
+    char *str_ret = dap_strdup(l_str_ret_tmp);
     set_reply_text(str_reply, str_ret);
-    g_free(l_str_ret_tmp);
+    DAP_DELETE(l_str_ret_tmp);
     return 0;
 }
 
@@ -1286,34 +1318,34 @@ int com_tx_create(int argc, const char ** argv, char **str_reply)
         dap_chain_node_datum_tx_cache_init(l_key, l_token_name, (dap_chain_addr_t*) l_addr, 1000);
         l_first_start = false;
     }
-    GString *string_ret = g_string_new(NULL);
+    dap_string_t *string_ret = dap_string_new(NULL);
     //g_string_printf(string_ret, "from=%s\nto=%s\nval=%lld\nfee=%s\nval_fee=%lld\n\n",
     //        addr_base58_from, addr_base58_to, value, addr_base58_fee, value_fee);
 
     uint64_t balance2 = dap_chain_datum_tx_cache_calc_balance(addr_to);
     uint64_t balance3 = dap_chain_datum_tx_cache_calc_balance(addr_fee);
     uint64_t balance1 = dap_chain_datum_tx_cache_calc_balance(addr_from);
-    g_string_append_printf(string_ret, "transactions in cache=%d balance w_from=%lld w_to=%lld w_feee=%lld\n",
+    dap_string_append_printf(string_ret, "transactions in cache=%d balance w_from=%lld w_to=%lld w_feee=%lld\n",
             dap_chain_node_datum_tx_cache_count(),
             balance1, balance2, balance3);
 
     int res = dap_chain_datum_tx_ctrl_create_transfer(l_key, addr_from, addr_to, addr_fee, value, value_fee);
-    g_string_append_printf(string_ret, "transfer=%s\n", (res == 1) ? "Ok" : "False");
+    dap_string_append_printf(string_ret, "transfer=%s\n", (res == 1) ? "Ok" : "False");
 
     if(1) {
         uint64_t balance1 = dap_chain_datum_tx_cache_calc_balance(addr_from);
         uint64_t balance2 = dap_chain_datum_tx_cache_calc_balance(addr_to);
         uint64_t balance3 = dap_chain_datum_tx_cache_calc_balance(addr_fee);
-        g_string_append_printf(string_ret, "transactions in cache=%d balance w_from=%lld w_to=%lld w_feee=%lld\n",
+        dap_string_append_printf(string_ret, "transactions in cache=%d balance w_from=%lld w_to=%lld w_feee=%lld\n",
                 dap_chain_node_datum_tx_cache_count(),
                 balance1, balance2, balance3);
     }
 
-    char *str_ret_tmp = g_string_free(string_ret, FALSE);
+    char *str_ret_tmp = dap_string_free(string_ret, false);
     char *str_ret = strdup(str_ret_tmp);
     set_reply_text(str_reply, str_ret);
 
-    g_free(str_ret_tmp);
+    DAP_DELETE(str_ret_tmp);
     DAP_DELETE(addr_to);
     DAP_DELETE(addr_fee);
     dap_chain_wallet_close(wallet_bliss);
@@ -1515,7 +1547,7 @@ int com_tx_verify(int argc, const char ** argv, char **str_reply)
         if(cmd)
         {
             if(str_reply)
-                *str_reply = g_strdup(cmd->doc);
+                *str_reply = dap_strdup(cmd->doc);
             return 1;
         }
         if(str_reply)
diff --git a/dap_chain_node_client.c b/dap_chain_node_client.c
index e7ef53cfc9..9d57141bff 100644
--- a/dap_chain_node_client.c
+++ b/dap_chain_node_client.c
@@ -159,26 +159,26 @@ void dap_chain_node_client_close(dap_chain_node_client_t *a_client)
 }
 
 /*
-// callback for dap_client_request_enc() in client_mempool_send_datum()
-static void s_response_proc(dap_client_t *a_client, void *str, size_t str_len)
-{
-    printf("* s_response_proc a_client=%x str=%s str_len=%d\n", a_client, str, str_len);
-    dap_chain_node_client_t *l_client = a_client->_inheritor;
-    assert(l_client);
-    if(l_client) {
-        if(str_len > 0) {
-//            l_client->read_data_t.data = DAP_NEW_Z_SIZE(uint8_t, str_len + 1);
-//          if(l_client->read_data_t.data) {
-//                memcpy(l_client->read_data_t.data, str, str_len);
-//                l_client->read_data_t.data_len = str_len;
-        }
-    }
-    pthread_mutex_lock(&l_client->wait_mutex);
-    l_client->state = NODE_CLIENT_STATE_SENDED;
-    pthread_cond_signal(&l_client->wait_cond);
-    pthread_mutex_unlock(&l_client->wait_mutex);
-}
-*/
+ // callback for dap_client_request_enc() in client_mempool_send_datum()
+ static void s_response_proc(dap_client_t *a_client, void *str, size_t str_len)
+ {
+ printf("* s_response_proc a_client=%x str=%s str_len=%d\n", a_client, str, str_len);
+ dap_chain_node_client_t *l_client = a_client->_inheritor;
+ assert(l_client);
+ if(l_client) {
+ if(str_len > 0) {
+ //            l_client->read_data_t.data = DAP_NEW_Z_SIZE(uint8_t, str_len + 1);
+ //          if(l_client->read_data_t.data) {
+ //                memcpy(l_client->read_data_t.data, str, str_len);
+ //                l_client->read_data_t.data_len = str_len;
+ }
+ }
+ pthread_mutex_lock(&l_client->wait_mutex);
+ l_client->state = NODE_CLIENT_STATE_SENDED;
+ pthread_cond_signal(&l_client->wait_cond);
+ pthread_mutex_unlock(&l_client->wait_mutex);
+ }
+ */
 
 /*// callback for dap_client_request_enc() in client_mempool_send_datum()
  static void s_response_error(dap_client_t *a_client, int val)
@@ -209,11 +209,28 @@ static void s_response_proc(dap_client_t *a_client, void *str, size_t str_len)
 
 static void dap_chain_node_client_callback(dap_stream_ch_chain_net_pkt_t *a_ch_chain_net, void *a_arg)
 {
-    dap_chain_node_client_t *client = (dap_chain_node_client_t*)a_arg;
+    dap_chain_node_client_t *client = (dap_chain_node_client_t*) a_arg;
     assert(client);
-    if(a_ch_chain_net->hdr.type==STREAM_CH_CHAIN_NET_PKT_TYPE_PONG) {
+    int l_state;
+    switch (a_ch_chain_net->hdr.type) {
+    case STREAM_CH_CHAIN_NET_PKT_TYPE_PING:
+        l_state = NODE_CLIENT_STATE_PING;
+        break;
+    case STREAM_CH_CHAIN_NET_PKT_TYPE_PONG:
+        l_state = NODE_CLIENT_STATE_PONG;
+        break;
+    case STREAM_CH_CHAIN_NET_PKT_TYPE_GLOVAL_DB:
+        l_state = NODE_CLIENT_STATE_END;
+        break;
+
+    default:
+        l_state = NODE_CLIENT_STATE_ERROR;
+
+    }
+    if(client)
+    {
         pthread_mutex_lock(&client->wait_mutex);
-        client->state = NODE_CLIENT_STATE_PONG;
+        client->state = l_state;
         pthread_cond_signal(&client->wait_cond);
         pthread_mutex_unlock(&client->wait_mutex);
     }
@@ -222,7 +239,7 @@ static void dap_chain_node_client_callback(dap_stream_ch_chain_net_pkt_t *a_ch_c
 /**
  * Send stream request to server
  */
-int dap_chain_node_client_send_chain_request(dap_chain_node_client_t *a_client, uint8_t a_ch_id,
+int dap_chain_node_client_send_chain_net_request(dap_chain_node_client_t *a_client, uint8_t a_ch_id, uint8_t a_type,
         char *a_buf, size_t a_buf_size)
 {
     if(!a_client || a_client->state < NODE_CLIENT_STATE_CONNECTED)
@@ -234,8 +251,8 @@ int dap_chain_node_client_send_chain_request(dap_chain_node_client_t *a_client,
         dap_stream_ch_chain_net_t * l_ch_chain = DAP_STREAM_CH_CHAIN_NET(l_ch);
         l_ch_chain->notify_callback = dap_chain_node_client_callback;
         l_ch_chain->notify_callback_arg = a_client;
-        int l_res = dap_stream_ch_chain_net_pkt_write(l_ch, STREAM_CH_CHAIN_NET_PKT_TYPE_PING, a_buf, a_buf_size);
-        if(l_res <=0)
+        int l_res = dap_stream_ch_chain_net_pkt_write(l_ch, a_type, a_buf, a_buf_size);
+        if(l_res <= 0)
             return -1;
         bool is_ready = true;
         dap_events_socket_set_writable(l_ch->stream->events_socket, is_ready);
diff --git a/dap_chain_node_client.h b/dap_chain_node_client.h
index 5f2a0e88cf..c9b07cb4fa 100644
--- a/dap_chain_node_client.h
+++ b/dap_chain_node_client.h
@@ -77,7 +77,7 @@ void dap_chain_node_client_close(dap_chain_node_client_t *client);
 /**
  * Send stream request to server
  */
-int dap_chain_node_client_send_chain_request(dap_chain_node_client_t *a_client, uint8_t a_ch_id,
+int dap_chain_node_client_send_chain_net_request(dap_chain_node_client_t *a_client, uint8_t a_ch_id, uint8_t a_type,
         char *a_buf, size_t a_buf_size);
 
 /**
diff --git a/iputils/iputils.c b/iputils/iputils.c
index 0e16de9e96..07184747f1 100644
--- a/iputils/iputils.c
+++ b/iputils/iputils.c
@@ -4,7 +4,9 @@
 
 #include <stdio.h>
 #include <stdbool.h>
-#include <glib.h>
+//#include <glib.h>
+#include "dap_common.h"
+#include "dap_strfuncs.h"
 
 static bool LOG_VERBOSE = false;
 
@@ -30,18 +32,18 @@ int log_printf(const char *format, ...)
     int ret = 0;
     if(LOG_VERBOSE)
     {
-        gchar *log_str = NULL;
+        char *log_str = NULL;
         va_list args;
 
         va_start(args, format);
-        log_str = g_strdup_vprintf(format, args);
+        log_str = dap_strdup_vprintf(format, args);
         va_end(args);
 
         if(log_str)
         {
 
             ret = printf(log_str);
-            g_free(log_str);
+            DAP_DELETE(log_str);
         }
     }
     return ret;
diff --git a/iputils/ping.c b/iputils/ping.c
index 491a5e4d7f..98a62dc4df 100644
--- a/iputils/ping.c
+++ b/iputils/ping.c
@@ -56,7 +56,9 @@
 #include <netinet/ip_icmp.h>
 #include <ifaddrs.h>
 #include <math.h>
-#include <glib.h>
+//#include <glib.h>
+#include "dap_common.h"
+#include "dap_strfuncs.h"
 
 #ifndef ICMP_FILTER
 #define ICMP_FILTER	1
@@ -547,10 +549,10 @@ int ping_util_common(int type, const char *addr, int count)
         argv[0] = "ping6";
     else
         argv[0] = "ping4";
-    argv[1] = g_strdup_printf("-c%d", count);
+    argv[1] = dap_strdup_printf("-c%d", count);
     argv[2] = addr;
     int status = ping_main(argc, (char**) argv);
-    g_free((char*) argv[1]);
+    DAP_DELETE((char*) argv[1]);
     if(ntransmitted >= 1 && nreceived >= 1)
         return tsum;
     return status;
-- 
GitLab