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 e760a2f5d6e54a231def678493c46c546890fb13..16bf96af49e79300b077077a29f0874185b37e14 100644 --- a/modules/channel/chain-net/dap_stream_ch_chain_net.c +++ b/modules/channel/chain-net/dap_stream_ch_chain_net.c @@ -190,7 +190,7 @@ void s_stream_ch_packet_in(dap_stream_ch_t *a_ch, void* a_arg) dap_stream_ch_set_ready_to_write_unsafe(a_ch, true); log_it(L_ERROR, "Invalid net id in packet"); } else { - dap_chain_net_srv_order_t * l_orders = NULL; + dap_list_t * l_orders = NULL; dap_enc_key_t * enc_key_pvt = NULL; dap_chain_t *l_chain = NULL; DL_FOREACH(l_net->pub.chains, l_chain) @@ -236,20 +236,18 @@ void s_stream_ch_packet_in(dap_stream_ch_t *a_ch, void* a_arg) //strncpy(send->header.data,(uint8_t*)l_ch_chain_net_pkt->data,10); flags = (l_net->pub.mempool_autoproc) ? flags | A_PROC : flags & ~A_PROC; - dap_chain_net_srv_order_find_all_by(l_net,SERV_DIR_UNDEFINED,l_uid, - l_price_unit,NULL,l_price_min,l_price_max,&l_orders,&l_orders_num); - size_t l_orders_size = 0; - for (size_t i = 0; i< l_orders_num; i++){ - dap_chain_net_srv_order_t *l_order =(dap_chain_net_srv_order_t *) (((byte_t*) l_orders) + l_orders_size); - l_orders_size += dap_chain_net_srv_order_get_size(l_order); - if(l_order->node_addr.uint64 == l_cur_node_addr.uint64) - { - flags = flags | F_ORDR; - break; + if (dap_chain_net_srv_order_find_all_by(l_net,SERV_DIR_UNDEFINED,l_uid, + l_price_unit,NULL,l_price_min,l_price_max,&l_orders,&l_orders_num)==0){ + for (dap_list_t *l_temp = l_orders;l_temp; l_temp = l_orders->next){ + dap_chain_net_srv_order_t *l_order =(dap_chain_net_srv_order_t *) l_temp->data; + if(l_order->node_addr.uint64 == l_cur_node_addr.uint64) + { + flags = flags | F_ORDR; + break; + } } + dap_list_free_full(l_orders, NULL); } - if (l_orders_num) - DAP_DELETE(l_orders); bool auto_online = dap_config_get_item_bool_default( g_config, "general", "auto_online", false ); bool auto_update = false; if((system("systemctl status cellframe-updater.service") == 768) && (system("systemctl status cellframe-updater.timer") == 0)) diff --git a/modules/common/include/dap_chain_common.h b/modules/common/include/dap_chain_common.h index 109d128d70d23b859dfcb12825727da124bc410c..6256c84afaa77c7389fb418f50ddc965df4ac65f 100644 --- a/modules/common/include/dap_chain_common.h +++ b/modules/common/include/dap_chain_common.h @@ -126,10 +126,7 @@ extern const dap_chain_addr_t c_dap_chain_addr_blank; enum dap_chain_srv_unit_enum { SERV_UNIT_UNDEFINED = 0 , - SERV_UNIT_MB = 0x00000001, // megabytes SERV_UNIT_SEC = 0x00000002, // seconds - SERV_UNIT_DAY = 0x00000003, // days - SERV_UNIT_KB = 0x00000010, // kilobytes SERV_UNIT_B = 0x00000011, // bytes SERV_UNIT_PCS = 0x00000022 // pieces }; @@ -138,13 +135,10 @@ typedef uint32_t dap_chain_srv_unit_enum_t; DAP_STATIC_INLINE const char *dap_chain_srv_unit_enum_to_str(dap_chain_srv_unit_enum_t a_unit_enum) { switch (a_unit_enum) { - case SERV_UNIT_UNDEFINED: return "SERV_UNIT_UNDEFINED"; - case SERV_UNIT_MB: return "SERV_UNIT_MB"; - case SERV_UNIT_SEC: return "SERV_UNIT_SEC"; - case SERV_UNIT_DAY: return "SERV_UNIT_DAY"; - case SERV_UNIT_KB: return "SERV_UNIT_KB"; - case SERV_UNIT_B: return "SERV_UNIT_B"; - case SERV_UNIT_PCS: return "SERV_UNIT_PCS"; + case SERV_UNIT_UNDEFINED: return "UNDEFINED"; + case SERV_UNIT_SEC: return "SEC"; + case SERV_UNIT_B: return "B"; + case SERV_UNIT_PCS: return "PCS"; default: return "UNDEFINED"; } } @@ -152,14 +146,8 @@ DAP_STATIC_INLINE const char *dap_chain_srv_unit_enum_to_str(dap_chain_srv_unit_ DAP_STATIC_INLINE dap_chain_srv_unit_enum_t dap_chain_srv_str_to_unit_enum(char* a_price_unit_str) { if (!a_price_unit_str) return SERV_UNIT_UNDEFINED; - if (!dap_strcmp(a_price_unit_str, "MB")){ - return SERV_UNIT_MB; - } else if (!dap_strcmp(a_price_unit_str, "SEC")){ + if (!dap_strcmp(a_price_unit_str, "SEC")){ return SERV_UNIT_SEC; - } else if (!dap_strcmp(a_price_unit_str, "DAY")){ - return SERV_UNIT_DAY; - } else if (!dap_strcmp(a_price_unit_str, "KB")){ - return SERV_UNIT_KB; } else if (!dap_strcmp(a_price_unit_str, "B")){ return SERV_UNIT_B; } else if (!dap_strcmp(a_price_unit_str, "PCS")){ diff --git a/modules/net/srv/dap_chain_net_srv.c b/modules/net/srv/dap_chain_net_srv.c index f357e5b9e5e7c51dbb0cb603a41a8dda8733e8e7..09299514ba4743837a1fd43626ccf81419f93337 100644 --- a/modules/net/srv/dap_chain_net_srv.c +++ b/modules/net/srv/dap_chain_net_srv.c @@ -434,36 +434,63 @@ static int s_cli_net_srv( int argc, char **argv, void **a_str_reply) } } else { - dap_chain_net_srv_order_t * l_orders = NULL; + dap_list_t * l_orders; size_t l_orders_num = 0; - dap_chain_net_srv_uid_t l_srv_uid={{0}}; - uint256_t l_price_min = {}; - uint256_t l_price_max = {}; - dap_chain_net_srv_price_unit_uid_t l_price_unit={{0}}; - dap_chain_net_srv_order_direction_t l_direction = SERV_DIR_UNDEFINED; - - if( !dap_chain_net_srv_order_find_all_by( l_net,l_direction,l_srv_uid,l_price_unit, NULL, l_price_min, l_price_max,&l_orders,&l_orders_num) ){ - dap_string_append_printf(l_string_ret,"Found %zd orders:\n",l_orders_num); - size_t l_orders_size = 0; - for(size_t i = 0; i < l_orders_num; i++) { - dap_chain_net_srv_order_t *l_order =(dap_chain_net_srv_order_t *) (((byte_t*) l_orders) + l_orders_size); + if( dap_chain_net_srv_order_find_all_by( l_net, l_direction,l_srv_uid,l_price_unit,l_price_token_str,l_price_min, l_price_max,&l_orders,&l_orders_num) == 0 ){ + dap_string_append_printf(l_string_ret, "Found %zu orders:\n", l_orders_num); + for (dap_list_t *l_temp = l_orders;l_temp; l_temp = l_orders->next){ + dap_chain_net_srv_order_t *l_order =(dap_chain_net_srv_order_t *) l_temp->data; dap_chain_net_srv_order_dump_to_string(l_order, l_string_ret, l_hash_out_type, l_net->pub.native_ticker); - l_orders_size += dap_chain_net_srv_order_get_size(l_order); - dap_string_append(l_string_ret, "\n"); + dap_string_append(l_string_ret,"\n"); } l_ret = 0; + dap_list_free_full(l_orders, NULL); }else{ l_ret = -5 ; dap_string_append(l_string_ret,"Can't get orders: some internal error or wrong params\n"); } - DAP_DELETE(l_orders); - } - } else if(!dap_strcmp( l_order_str, "delete" )) { - if (l_order_hash_str) { - dap_chain_net_srv_order_t *l_order = dap_chain_net_srv_order_find_by_hash_str(l_net, l_order_hash_hex_str); - if (l_order) { - if (!dap_chain_net_srv_order_delete_by_hash_str_sync(l_net, l_order_hash_hex_str)) { + } else if(!dap_strcmp( l_order_str, "dump" )) { + // Select with specified service uid + if ( l_order_hash_str ){ + dap_chain_net_srv_order_t * l_order = dap_chain_net_srv_order_find_by_hash_str( l_net, l_order_hash_hex_str ); + if (l_order) { + dap_chain_net_srv_order_dump_to_string(l_order,l_string_ret, l_hash_out_type, l_net->pub.native_ticker); l_ret = 0; + }else{ + l_ret = -7 ; + if(!dap_strcmp(l_hash_out_type,"hex")) + dap_string_append_printf(l_string_ret,"Can't find order with hash %s\n", l_order_hash_hex_str ); + else + dap_string_append_printf(l_string_ret,"Can't find order with hash %s\n", l_order_hash_base58_str ); + } + } else { + + dap_list_t * l_orders = NULL; + size_t l_orders_num = 0; + dap_chain_net_srv_uid_t l_srv_uid={{0}}; + uint256_t l_price_min = {}; + uint256_t l_price_max = {}; + dap_chain_net_srv_price_unit_uid_t l_price_unit={{0}}; + dap_chain_net_srv_order_direction_t l_direction = SERV_DIR_UNDEFINED; + + if( !dap_chain_net_srv_order_find_all_by( l_net,l_direction,l_srv_uid,l_price_unit, NULL, l_price_min, l_price_max,&l_orders,&l_orders_num) ){ + dap_string_append_printf(l_string_ret,"Found %zd orders:\n",l_orders_num); + for(dap_list_t *l_temp = l_orders;l_temp; l_temp = l_orders->next) { + dap_chain_net_srv_order_t *l_order =(dap_chain_net_srv_order_t *) l_temp->data; + dap_chain_net_srv_order_dump_to_string(l_order, l_string_ret, l_hash_out_type, l_net->pub.native_ticker); + dap_string_append(l_string_ret, "\n"); + } + l_ret = 0; + }else{ + l_ret = -5 ; + dap_string_append(l_string_ret,"Can't get orders: some internal error or wrong params\n"); + } + dap_list_free_full(l_orders, NULL); + } + } else if (!dap_strcmp(l_order_str, "delete")) { + if (l_order_hash_str) { + l_ret = dap_chain_net_srv_order_delete_by_hash_str_sync(l_net, l_order_hash_hex_str); + if (!l_ret) dap_string_append_printf(l_string_ret, "Deleted order %s\n", l_order_hash_str); } else { l_ret = -9; diff --git a/modules/net/srv/dap_chain_net_srv_order.c b/modules/net/srv/dap_chain_net_srv_order.c index abe28cddc1fc415ab5e4226e4778faa543c1b19b..c90391e0823693b853788559dbf518ad02944878 100644 --- a/modules/net/srv/dap_chain_net_srv_order.c +++ b/modules/net/srv/dap_chain_net_srv_order.c @@ -449,13 +449,15 @@ int dap_chain_net_srv_order_find_all_by(dap_chain_net_t * a_net,const dap_chain_ const dap_chain_net_srv_uid_t a_srv_uid, const dap_chain_net_srv_price_unit_uid_t a_price_unit,const char a_price_ticker[DAP_CHAIN_TICKER_SIZE_MAX], const uint256_t a_price_min, const uint256_t a_price_max, - dap_chain_net_srv_order_t ** a_output_orders, size_t * a_output_orders_count) + dap_list_t** a_output_orders, size_t * a_output_orders_count) { if (!a_net || !a_output_orders || !a_output_orders_count) return -1; size_t l_orders_size = 0, l_output_orders_count = 0; *a_output_orders = NULL; + dap_list_t* l_out_list = NULL; + for (int i = 0; i < 2; i++) { char *l_gdb_group_str = i ? dap_chain_net_srv_order_get_gdb_group(a_net) : dap_chain_net_srv_order_get_common_group(a_net); @@ -464,7 +466,6 @@ int dap_chain_net_srv_order_find_all_by(dap_chain_net_t * a_net,const dap_chain_ log_it( L_DEBUG, "Loaded %zu orders", l_orders_count); dap_chain_net_srv_order_t *l_order = NULL; for (size_t i = 0; i < l_orders_count; i++) { - DAP_DEL_Z(l_order); l_order = dap_chain_net_srv_order_read(l_orders[i].value, l_orders[i].value_len); if (!l_order) { dap_global_db_del_sync(l_gdb_group_str, l_orders[i].key); @@ -495,17 +496,14 @@ int dap_chain_net_srv_order_find_all_by(dap_chain_net_t * a_net,const dap_chain_ // Check ticker if (a_price_ticker && strcmp( l_order->price_ticker, a_price_ticker)) continue; - size_t l_order_mem_size = dap_chain_net_srv_order_get_size(l_order); - *a_output_orders = DAP_REALLOC(*a_output_orders, l_orders_size + l_order_mem_size); - memcpy((byte_t *)*a_output_orders + l_orders_size, l_order, l_order_mem_size); - DAP_DEL_Z(l_order); - l_orders_size += l_order_mem_size; + l_out_list = dap_list_append(l_out_list, l_order); l_output_orders_count++; } dap_global_db_objs_delete(l_orders, l_orders_count); DAP_DELETE(l_gdb_group_str); } *a_output_orders_count = l_output_orders_count; + *a_output_orders = l_out_list; return 0; } diff --git a/modules/net/srv/include/dap_chain_net_srv_order.h b/modules/net/srv/include/dap_chain_net_srv_order.h index 8ebb4ed5d09f22a68d468d1645d844085c9f80a6..a0686c672921d80290fbc325c5ec30a868694a75 100644 --- a/modules/net/srv/include/dap_chain_net_srv_order.h +++ b/modules/net/srv/include/dap_chain_net_srv_order.h @@ -104,7 +104,7 @@ int dap_chain_net_srv_order_find_all_by( const dap_chain_net_srv_price_unit_uid_t a_price_unit, const char a_price_ticker[DAP_CHAIN_TICKER_SIZE_MAX], const uint256_t a_price_min, const uint256_t a_price_max, - dap_chain_net_srv_order_t** a_output_orders, + dap_list_t** a_output_orders, size_t* a_output_orders_count); int dap_chain_net_srv_order_delete_by_hash_str_sync( dap_chain_net_t * a_net,const char * a_hash_str ); diff --git a/modules/service/vpn/dap_chain_net_vpn_client.c b/modules/service/vpn/dap_chain_net_vpn_client.c index 1ef5e9feddf6250a2c4a2e3b946ab569f1319ee6..75c951a9bbf46daabd3dd936eb894227d8aee5da 100644 --- a/modules/service/vpn/dap_chain_net_vpn_client.c +++ b/modules/service/vpn/dap_chain_net_vpn_client.c @@ -441,7 +441,8 @@ char *dap_chain_net_vpn_client_check_result(dap_chain_net_t *a_net, const char* { - dap_chain_net_srv_order_t * l_orders = NULL; + // dap_chain_net_srv_order_t + dap_list_t* l_orders = NULL; size_t l_orders_num = 0; dap_chain_net_srv_uid_t l_srv_uid = { { 0 } }; uint256_t l_price_min = {}; @@ -452,8 +453,8 @@ char *dap_chain_net_vpn_client_check_result(dap_chain_net_t *a_net, const char* if(dap_chain_net_srv_order_find_all_by(a_net, l_direction, l_srv_uid, l_price_unit, NULL, l_price_min, l_price_max, &l_orders, &l_orders_num) == 0){ size_t l_orders_size = 0; - for(size_t i = 0; i < l_orders_num; i++) { - dap_chain_net_srv_order_t *l_order = (dap_chain_net_srv_order_t *) (((byte_t*) l_orders) + l_orders_size); + for(dap_list_t *l_temp = l_orders;l_temp; l_temp = l_orders->next) { + dap_chain_net_srv_order_t *l_order = (dap_chain_net_srv_order_t *) l_temp->data; //dap_chain_net_srv_order_dump_to_string(l_order, l_string_ret, l_hash_out_type); dap_chain_hash_fast_t l_hash={0}; char *l_hash_str; @@ -477,9 +478,9 @@ char *dap_chain_net_vpn_client_check_result(dap_chain_net_t *a_net, const char* } dap_string_append_printf(l_string_ret, "Order %s: State %s\n", l_hash_str, l_state_str); DAP_DELETE(l_hash_str); - l_orders_size += dap_chain_net_srv_order_get_size(l_order); //dap_string_append(l_string_ret, "\n"); } + dap_list_free_full(l_orders, NULL); } // return str from dap_string_t return dap_string_free(l_string_ret, false);