diff --git a/CMakeLists.txt b/CMakeLists.txt index 887d2abad903e87e1e5d277a91e7f16020c6de30..8e9b4502acb5c37eb4ca726f26322496dba8949f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ project(cellframe-sdk C) cmake_minimum_required(VERSION 2.8) set(CMAKE_C_STANDARD 11) -set(CELLFRAME_SDK_NATIVE_VERSION "2.6-89") +set(CELLFRAME_SDK_NATIVE_VERSION "2.6-90") add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"") set(DAPSDK_MODULES "") diff --git a/dap-sdk/net/core/dap_worker.c b/dap-sdk/net/core/dap_worker.c index 2f157b2dd26b94d1e90a9aaee6c5dc4f3de972a1..f33dd00378d3ea78699216cf8d7c098869a2018e 100644 --- a/dap-sdk/net/core/dap_worker.c +++ b/dap-sdk/net/core/dap_worker.c @@ -403,7 +403,7 @@ void *dap_worker_thread(void *arg) } else if ( (! l_flag_rdhup || !l_flag_error ) && (!(l_cur->flags& DAP_SOCK_CONNECTING )) ) { log_it(L_DEBUG, "EPOLLIN triggered but nothing to read"); - dap_events_socket_set_readable_unsafe(l_cur,false); + //dap_events_socket_set_readable_unsafe(l_cur,false); } } } diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c index 829f72ad5cf39bd039cc63a1667dce3e356211b5..c131dd4f3afa2b5f511e62429a6aa70ceb41f3c5 100644 --- a/modules/chain/dap_chain_ledger.c +++ b/modules/chain/dap_chain_ledger.c @@ -1787,8 +1787,6 @@ int dap_chain_ledger_tx_cache_check(dap_ledger_t *a_ledger, dap_chain_datum_tx_t break; } } - pthread_rwlock_unlock(&l_ledger_priv->tokens_rwlock); - } diff --git a/modules/channel/chain/dap_stream_ch_chain.c b/modules/channel/chain/dap_stream_ch_chain.c index cad808a43ce0301ef5a131b672566dfb4eb388d3..dcb1527bd513c32a9dea70f0c951a38ec37b02b0 100644 --- a/modules/channel/chain/dap_stream_ch_chain.c +++ b/modules/channel/chain/dap_stream_ch_chain.c @@ -202,6 +202,7 @@ static void s_sync_out_chains_first_worker_callback(dap_worker_t *a_worker, void dap_stream_ch_chain_t * l_ch_chain = DAP_STREAM_CH_CHAIN(l_ch); l_ch_chain->state = CHAIN_STATE_SYNC_CHAINS; + l_ch_chain->request_atom_iter = l_sync_request->chain.request_atom_iter; dap_chain_node_addr_t l_node_addr = {}; dap_chain_net_t *l_net = dap_chain_net_by_id(l_sync_request->request_hdr.net_id); l_node_addr.uint64 = dap_chain_net_get_cur_addr_int(l_net); @@ -233,6 +234,7 @@ static void s_sync_out_chains_last_worker_callback(dap_worker_t *a_worker, void } dap_stream_ch_chain_t * l_ch_chain = DAP_STREAM_CH_CHAIN(l_ch); + l_ch_chain->request_atom_iter = l_sync_request->chain.request_atom_iter; // last packet dap_stream_ch_chain_sync_request_t l_request = {0}; if (s_debug_chain_sync ) diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index 6aa49a7a8c6dd66c0f5688aa3308026433b4615d..089f36a8952d9950c9a79e44b137a60818fa0e35 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -180,7 +180,18 @@ static const char * c_net_states[]={ static dap_chain_net_t * s_net_new(const char * a_id, const char * a_name , const char * a_node_role); inline static const char * s_net_state_to_str(dap_chain_net_state_t l_state); + + +// Node link callbacks +static void s_node_link_callback_connected(dap_chain_node_client_t * a_node_client, void * a_arg); +static void s_node_link_callback_disconnected(dap_chain_node_client_t * a_node_client, void * a_arg); +static void s_node_link_callback_stage(dap_chain_node_client_t * a_node_client,dap_client_stage_t a_stage, void * a_arg); +static void s_node_link_callback_error(dap_chain_node_client_t * a_node_client, int a_error, void * a_arg); + static int s_net_states_proc(dap_chain_net_t * a_net); + + + static void * s_net_check_thread ( void * a_net); static void s_net_check_thread_start( dap_chain_net_t * a_net ); static void s_net_proc_kill( dap_chain_net_t * a_net ); @@ -371,6 +382,52 @@ static void s_fill_links_from_root_aliases(dap_chain_net_t * a_net) } } +/** + * @brief s_node_link_callback_connected + * @param a_node_client + * @param a_arg + */ +static void s_node_link_callback_connected(dap_chain_node_client_t * a_node_client, void * a_arg) +{ + dap_chain_net_t * l_net = (dap_chain_net_t *) a_arg; +} + +/** + * @brief s_node_link_callback_disconnected + * @param a_node_client + * @param a_arg + */ +static void s_node_link_callback_disconnected(dap_chain_node_client_t * a_node_client, void * a_arg) +{ + dap_chain_net_t * l_net = (dap_chain_net_t *) a_arg; + +} + +/** + * @brief s_node_link_callback_stage + * @param a_node_client + * @param a_stage + * @param a_arg + */ +static void s_node_link_callback_stage(dap_chain_node_client_t * a_node_client,dap_client_stage_t a_stage, void * a_arg) +{ + dap_chain_net_t * l_net = (dap_chain_net_t *) a_arg; + +} + +/** + * @brief s_node_link_callback_error + * @param a_node_client + * @param a_error + * @param a_arg + */ +static void s_node_link_callback_error(dap_chain_node_client_t * a_node_client, int a_error, void * a_arg) +{ + dap_chain_net_t * l_net = (dap_chain_net_t *) a_arg; + +} + + /** * @brief s_net_states_proc * @param l_net @@ -494,10 +551,12 @@ static int s_net_states_proc(dap_chain_net_t *a_net) log_it(L_DEBUG, "%s.state: NET_STATE_LINKS_CONNECTING",a_net->pub.name); for (dap_list_t *l_tmp = l_pvt_net->links_info; l_tmp; l_tmp = dap_list_next(l_tmp)) { dap_chain_node_info_t *l_link_info = (dap_chain_node_info_t *)l_tmp->data; - dap_chain_node_client_t *l_node_client = dap_chain_node_client_connect(l_link_info); + dap_chain_node_client_t *l_node_client = dap_chain_node_client_create_n_connect(l_link_info,"CN",s_node_link_callback_connected, + s_node_link_callback_disconnected,s_node_link_callback_stage, + s_node_link_callback_error,NULL); if (l_node_client) { // wait connected - int res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_CONNECTED, 10000 ); + int res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_CONNECTED, 20000 ); if (res == 0 ) { log_it(L_DEBUG, "Established connection with "NODE_ADDR_FP_STR, NODE_ADDR_FP_ARGS_S(l_link_info->hdr.address)); l_pvt_net->links = dap_list_append(l_pvt_net->links, l_node_client); diff --git a/modules/net/dap_chain_node_client.c b/modules/net/dap_chain_node_client.c index 06c6d203283e07135f7dca461485fcdce577b0bf..c5b1d9da9668d230e8e1002872a058c8beba763a 100644 --- a/modules/net/dap_chain_node_client.c +++ b/modules/net/dap_chain_node_client.c @@ -126,7 +126,7 @@ static void s_stage_status_error_callback(dap_client_t *a_client, void *a_arg) pthread_mutex_lock(&l_node_client->wait_mutex); l_node_client->state = NODE_CLIENT_STATE_DISCONNECTED; #ifndef _WIN32 - pthread_cond_signal(&l_node_client->wait_cond); + pthread_cond_broadcast(&l_node_client->wait_cond); #else SetEvent( l_node_client->wait_cond ); #endif @@ -145,7 +145,7 @@ static void s_stage_status_error_callback(dap_client_t *a_client, void *a_arg) l_node_client->state = NODE_CLIENT_STATE_ERROR; #ifndef _WIN32 - pthread_cond_signal(&l_node_client->wait_cond); + pthread_cond_broadcast(&l_node_client->wait_cond); #else SetEvent( l_node_client->wait_cond ); #endif @@ -463,11 +463,12 @@ dap_chain_node_client_t* dap_chain_node_client_create_n_connect(dap_chain_node_i { struct sockaddr_in sa4 = { .sin_family = AF_INET, .sin_addr = a_node_info->hdr.ext_addr_v4 }; inet_ntop(AF_INET, &(((struct sockaddr_in *) &sa4)->sin_addr), host, hostlen); - } - else + log_it(L_DEBUG, "Connect to %s address",host); + } else { struct sockaddr_in6 sa6 = { .sin6_family = AF_INET6, .sin6_addr = a_node_info->hdr.ext_addr_v6 }; inet_ntop(AF_INET6, &(((struct sockaddr_in6 *) &sa6)->sin6_addr), host, hostlen); + log_it(L_DEBUG, "Connect to %s address",host); } // address not defined if(!strcmp(host, "::")) {