diff --git a/dap_chain_net_srv.c b/dap_chain_net_srv.c
index 1e9b4c0a8fe0f493f5269fba967d0eba6eb99208..4c730e4c94853c9d3b9091eca8f576d549e3171b 100755
--- a/dap_chain_net_srv.c
+++ b/dap_chain_net_srv.c
@@ -394,7 +394,7 @@ static int s_cli_net_srv( int argc, char **argv, char **a_str_reply)
  * @param a_uid
  * @param a_callback_new
  */
-int dap_chain_net_srv_add(dap_chain_net_srv_uid_t a_uid,dap_chain_net_srv_callback_request_after_t a_callback_request)
+int dap_chain_net_srv_add(dap_chain_net_srv_uid_t a_uid,dap_chain_net_srv_callback_data_t a_callback_request)
 {
     int ret=0;
     service_list_t *l_sdata = NULL;
@@ -404,7 +404,7 @@ int dap_chain_net_srv_add(dap_chain_net_srv_uid_t a_uid,dap_chain_net_srv_callba
     if(l_sdata == NULL) {
         dap_chain_net_srv_t * l_srv = DAP_NEW_Z(dap_chain_net_srv_t);
         l_srv->uid.uint64 = a_uid.uint64;
-        l_srv->callback_request = a_callback_request;
+        l_srv->callback_requested = a_callback_request;
         l_sdata = DAP_NEW_Z(service_list_t);
         memcpy(&l_sdata->uid, &l_uid, sizeof(l_uid));
         l_sdata->srv = DAP_NEW(dap_chain_net_srv_t);
@@ -455,7 +455,7 @@ void dap_chain_net_srv_del_all(void)
  * @param a_uid
  * @return
  */
-dap_chain_net_srv_t * dap_chain_net_srv_get(dap_chain_net_srv_uid_t *a_uid)
+dap_chain_net_srv_t * dap_chain_net_srv_get(dap_chain_net_srv_uid_t a_uid)
 {
     service_list_t *l_sdata = NULL;
     pthread_mutex_lock(&s_srv_list_mutex);
diff --git a/dap_chain_net_srv.h b/dap_chain_net_srv.h
index 348a4bcf6cef3f696187584ff6bc265a9b72f7db..4d2b20505862453e9768b76bb2ffc1a2ec8c2f24 100755
--- a/dap_chain_net_srv.h
+++ b/dap_chain_net_srv.h
@@ -30,8 +30,8 @@ along with any CellFrame SDK based project.  If not, see <http://www.gnu.org/lic
 
 typedef struct dap_chain_net_srv dap_chain_net_srv_t;
 
-typedef void (*dap_chain_net_srv_callback_t)(dap_chain_net_srv_t *);
-typedef int (*dap_chain_net_srv_callback_request_after_t)(dap_chain_net_srv_t *, dap_chain_net_srv_client_t *, const void *, size_t );
+typedef void (*dap_chain_net_srv_callback_t)(dap_chain_net_srv_t *, dap_chain_net_srv_client_t *);
+typedef int (*dap_chain_net_srv_callback_data_t)(dap_chain_net_srv_t *, dap_chain_net_srv_client_t *, const void *, size_t );
 
 typedef struct dap_chain_net_srv
 {
@@ -39,7 +39,9 @@ typedef struct dap_chain_net_srv
     dap_chain_net_srv_abstract_t srv_common;
     dap_chain_net_srv_price_t *pricelist;
     dap_chain_callback_trafic_t callback_trafic;
-    dap_chain_net_srv_callback_request_after_t callback_request;
+    dap_chain_net_srv_callback_data_t callback_requested;
+    dap_chain_net_srv_callback_data_t callback_response_success;
+    dap_chain_net_srv_callback_data_t callback_response_error;
     void * _inhertor;
 } dap_chain_net_srv_t;
 typedef void (*dap_chain_net_srv_callback_new_t)(dap_chain_net_srv_t *, dap_config_t *);
@@ -47,10 +49,10 @@ typedef void (*dap_chain_net_srv_callback_new_t)(dap_chain_net_srv_t *, dap_conf
 
 int dap_chain_net_srv_init(void);
 void dap_chain_net_srv_deinit(void);
-int dap_chain_net_srv_add(dap_chain_net_srv_uid_t a_uid,dap_chain_net_srv_callback_request_after_t a_callback_request);
+int dap_chain_net_srv_add(dap_chain_net_srv_uid_t a_uid,dap_chain_net_srv_callback_data_t a_callback_request);
 void dap_chain_net_srv_del(dap_chain_net_srv_t * a_srv);
 void dap_chain_net_srv_del_all(void);
-dap_chain_net_srv_t * dap_chain_net_srv_get(dap_chain_net_srv_uid_t *a_uid);
+dap_chain_net_srv_t * dap_chain_net_srv_get(dap_chain_net_srv_uid_t a_uid);
 size_t dap_chain_net_srv_count(void);
 const dap_chain_net_srv_uid_t * dap_chain_net_srv_list(void);
 
diff --git a/dap_chain_net_srv_client.h b/dap_chain_net_srv_client.h
index 25824f15194f2b81037ba4a32e1887e7ef17fe5a..d385f29c3d01aa4465bbb7448956a6667af758b2 100644
--- a/dap_chain_net_srv_client.h
+++ b/dap_chain_net_srv_client.h
@@ -33,4 +33,6 @@ typedef struct dap_chain_net_srv_client
     dap_chain_net_remote_t *net_remote; // For remotes
     uint64_t bytes_received;
     uint64_t bytes_sent;
+    struct dap_chain_net_srv_client *prev;
+    struct dap_chain_net_srv_client *next;
 } dap_chain_net_srv_client_t;
diff --git a/dap_chain_net_srv_common.h b/dap_chain_net_srv_common.h
index 556a9ec481ce74c4545ba71334af69b28dcf5d4d..b210f987d834e9d18e78811b4861f3449b5518ec 100755
--- a/dap_chain_net_srv_common.h
+++ b/dap_chain_net_srv_common.h
@@ -83,6 +83,8 @@ typedef struct dap_chain_net_srv_price
     char token[DAP_CHAIN_TICKER_SIZE_MAX];
     uint64_t units;
     dap_chain_net_srv_price_unit_uid_t units_uid;
+    struct dap_chain_net_srv_price * next;
+    struct dap_chain_net_srv_price * prev;
 } dap_chain_net_srv_price_t;