diff --git a/dap-sdk b/dap-sdk index 8ea87036ecc4a222c0879e6fd87aa7bb19606b0e..f5409cdd40208193ec7d0e577318bfeb30f994e5 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 8ea87036ecc4a222c0879e6fd87aa7bb19606b0e +Subproject commit f5409cdd40208193ec7d0e577318bfeb30f994e5 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 4bcb0990194bc4f0d3fbc246e17a4906aec722e6..ff58899f5bd79b9a33e03c6f4d39e9fecaaaba8b 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 @@ -330,6 +330,10 @@ static bool s_service_start(dap_stream_ch_t* a_ch , dap_stream_ch_chain_net_srv_ return false; } + char l_order_hash_str[DAP_CHAIN_HASH_FAST_STR_SIZE] = {}; + dap_chain_hash_fast_to_str(&a_request->hdr.order_hash, l_order_hash_str, DAP_CHAIN_HASH_FAST_STR_SIZE); + log_it(L_MSG, "Got order with hash %s.", l_order_hash_str); + if ( ! l_net ) { // Network not found log_it( L_ERROR, "Can't find net with id 0x%016"DAP_UINT64_FORMAT_x"", a_request->hdr.srv_uid.uint64); @@ -398,14 +402,14 @@ static bool s_service_start(dap_stream_ch_t* a_ch , dap_stream_ch_chain_net_srv_ l_price = dap_chain_net_srv_get_price_from_order(l_srv, "srv_vpn", &a_request->hdr.order_hash); if (!l_price){ log_it(L_ERROR, "Can't get price from order!"); - l_err.code = DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_PRICE_NOT_FOUND; - if(a_ch) - dap_stream_ch_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR, &l_err, sizeof (l_err)); - if (l_srv && l_srv->callbacks.response_error) - l_srv->callbacks.response_error(l_srv, 0, NULL, &l_err, sizeof(l_err)); - DAP_DEL_Z(l_usage->client); - DAP_DEL_Z(l_usage); - return false; + l_err.code = DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_PRICE_NOT_FOUND; + if(a_ch) + dap_stream_ch_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR, &l_err, sizeof (l_err)); + if (l_srv && l_srv->callbacks.response_error) + l_srv->callbacks.response_error(l_srv, 0, NULL, &l_err, sizeof(l_err)); + // DAP_DEL_Z(l_usage->client); + // DAP_DEL_Z(l_usage); + return false; } if (IS_ZERO_256(l_price->value_datoshi)){ @@ -439,8 +443,8 @@ static bool s_service_start(dap_stream_ch_t* a_ch , dap_stream_ch_chain_net_srv_ dap_stream_ch_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR, &l_err, sizeof (l_err)); if (l_srv && l_srv->callbacks.response_error) l_srv->callbacks.response_error(l_srv, 0, NULL, &l_err, sizeof(l_err)); - DAP_DEL_Z(l_usage->client); - DAP_DEL_Z(l_usage); + // DAP_DEL_Z(l_usage->client); + // DAP_DEL_Z(l_usage); return false; } l_grace->request = DAP_DUP_SIZE(a_request, a_request_size); @@ -451,8 +455,8 @@ static bool s_service_start(dap_stream_ch_t* a_ch , dap_stream_ch_chain_net_srv_ dap_stream_ch_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR, &l_err, sizeof (l_err)); if (l_srv && l_srv->callbacks.response_error) l_srv->callbacks.response_error(l_srv, 0, NULL, &l_err, sizeof(l_err)); - DAP_DEL_Z(l_usage->client); - DAP_DEL_Z(l_usage); + // DAP_DEL_Z(l_usage->client); + // DAP_DEL_Z(l_usage); DAP_DEL_Z(l_grace); return false; } @@ -476,8 +480,8 @@ static bool s_service_start(dap_stream_ch_t* a_ch , dap_stream_ch_chain_net_srv_ dap_stream_ch_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR, &l_err, sizeof (l_err)); if (l_srv && l_srv->callbacks.response_error) l_srv->callbacks.response_error(l_srv, 0, NULL, &l_err, sizeof(l_err)); - DAP_DEL_Z(l_usage->client); - DAP_DEL_Z(l_usage); + // DAP_DEL_Z(l_usage->client); + // DAP_DEL_Z(l_usage); return false; } l_success->hdr.usage_id = l_usage->id; diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index ec9ea01373890fb85a9f715fc5a8a3218da418d0..1e668e7933db5c50f5d9ea57c75046885b2f206d 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -103,7 +103,6 @@ #include "dap_json_rpc_errors.h" #include "dap_http_ban_list_client.h" #include "dap_chain_datum_tx_voting.h" -#include "dap_enc_ks.h" #define LOG_TAG "chain_node_cli_cmd" diff --git a/modules/net/srv/dap_chain_net_srv.c b/modules/net/srv/dap_chain_net_srv.c index 374696c0d3138e7e9c5fb0c950bf36b1ccbb0b3a..1b08433f5e70f07a7feb0a7edf6545b41de06a27 100644 --- a/modules/net/srv/dap_chain_net_srv.c +++ b/modules/net/srv/dap_chain_net_srv.c @@ -410,8 +410,7 @@ static int s_cli_net_srv( int argc, char **argv, void **a_str_reply) } 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_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{ @@ -446,6 +445,7 @@ static int s_cli_net_srv( int argc, char **argv, void **a_str_reply) } } 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); diff --git a/modules/net/srv/dap_chain_net_srv_order.c b/modules/net/srv/dap_chain_net_srv_order.c index e81bda4bd2797581d256366b80df284d4adbac97..62557e76331009418730cc1e80f336a256663035 100644 --- a/modules/net/srv/dap_chain_net_srv_order.c +++ b/modules/net/srv/dap_chain_net_srv_order.c @@ -429,6 +429,11 @@ dap_chain_net_srv_order_t *dap_chain_net_srv_order_find_by_hash_str(dap_chain_ne return NULL; } l_order = dap_chain_net_srv_order_read(l_gdb_order, l_order_size); + if (!l_order || (l_order->ts_expires && l_order->ts_expires < dap_time_now())){ + DAP_DEL_Z(l_order); + DAP_DELETE(l_gdb_order); + continue; + } DAP_DELETE(l_gdb_order); } return l_order; @@ -472,31 +477,49 @@ int dap_chain_net_srv_order_find_all_by(dap_chain_net_t * a_net,const dap_chain_ dap_global_db_del_sync(l_gdb_group_str, l_orders[i].key); continue; // order is corrupted } + if (l_order->ts_expires && l_order->ts_expires < dap_time_now()){ + DAP_DEL_Z(l_order); + continue; + } + dap_chain_hash_fast_t l_hash, l_hash_gdb; dap_hash_fast(l_orders[i].value, l_orders[i].value_len, &l_hash); dap_chain_hash_fast_from_str(l_orders[i].key, &l_hash_gdb); if (memcmp(&l_hash, &l_hash_gdb, sizeof(dap_chain_hash_fast_t))) { dap_global_db_del_sync(l_gdb_group_str, l_orders[i].key); + DAP_DEL_Z(l_order); continue; // order is corrupted } // Check direction - if (a_direction != SERV_DIR_UNDEFINED && l_order->direction != a_direction) + if (a_direction != SERV_DIR_UNDEFINED && l_order->direction != a_direction){ + DAP_DEL_Z(l_order); continue; + } // Check srv uid - if (a_srv_uid.uint64 && l_order->srv_uid.uint64 != a_srv_uid.uint64) + if (a_srv_uid.uint64 && l_order->srv_uid.uint64 != a_srv_uid.uint64){ + DAP_DEL_Z(l_order); continue; + } // check price unit - if (a_price_unit.uint32 && a_price_unit.uint32 != l_order->price_unit.uint32) + if (a_price_unit.uint32 && a_price_unit.uint32 != l_order->price_unit.uint32){ + DAP_DEL_Z(l_order); continue; + } // Check price minimum - if (!IS_ZERO_256(a_price_min) && compare256(l_order->price, a_price_min) == -1) + if (!IS_ZERO_256(a_price_min) && compare256(l_order->price, a_price_min) == -1){ + DAP_DEL_Z(l_order); continue; + } // Check price maximum - if (!IS_ZERO_256(a_price_max) && compare256(l_order->price, a_price_max) == 1) + if (!IS_ZERO_256(a_price_max) && compare256(l_order->price, a_price_max) == 1){ + DAP_DEL_Z(l_order); continue; + } // Check ticker - if (a_price_ticker && strcmp( l_order->price_ticker, a_price_ticker)) + if (a_price_ticker && strcmp( l_order->price_ticker, a_price_ticker)){ + DAP_DEL_Z(l_order); continue; + } size_t l_order_mem_size = dap_chain_net_srv_order_get_size(l_order); dap_chain_net_srv_order_t *l_output_order = DAP_DUP_SIZE(l_order, l_order_mem_size); DAP_DEL_Z(l_order); @@ -520,13 +543,14 @@ int dap_chain_net_srv_order_find_all_by(dap_chain_net_t * a_net,const dap_chain_ int dap_chain_net_srv_order_delete_by_hash_str_sync(dap_chain_net_t *a_net, const char *a_hash_str) { int l_ret = -2; + + dap_chain_net_srv_order_t *l_order = NULL; for (int i = 0; a_net && a_hash_str && 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); - l_ret = dap_global_db_del_sync(l_gdb_group_str, a_hash_str); + + int l_ret = dap_global_db_del_sync(l_gdb_group_str, a_hash_str); DAP_DELETE(l_gdb_group_str); - if (!l_ret) - break; } return l_ret; } 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 fe1c8031d5193d47fac54fdb987c87466813debd..68c0194f11c1332cbd54d49418856f8147f02d72 100644 --- a/modules/net/srv/include/dap_chain_net_srv_order.h +++ b/modules/net/srv/include/dap_chain_net_srv_order.h @@ -114,7 +114,7 @@ int dap_chain_net_srv_order_delete_by_hash_str_sync(dap_chain_net_t *a_net, cons * @param a_hash * @return */ -DAP_STATIC_INLINE int dap_chain_net_srv_order_delete_by_hash(dap_chain_net_t * a_net, dap_chain_hash_fast_t * a_hash ) +DAP_STATIC_INLINE int dap_chain_net_srv_order_delete_by_hash(dap_chain_net_t * a_net, dap_chain_hash_fast_t * a_hash) { char l_hash_str[DAP_CHAIN_HASH_FAST_SIZE * 2 + 4]; dap_chain_hash_fast_to_str(a_hash,l_hash_str,sizeof(l_hash_str)-1); diff --git a/modules/service/xchange/dap_chain_net_srv_xchange.c b/modules/service/xchange/dap_chain_net_srv_xchange.c index 1dfb28254649743a6250343023d540446e168ade..4b6423062287fda667929c1351a82d331e246aa0 100644 --- a/modules/service/xchange/dap_chain_net_srv_xchange.c +++ b/modules/service/xchange/dap_chain_net_srv_xchange.c @@ -2769,11 +2769,8 @@ dap_chain_net_srv_xchange_purchase_error_t dap_chain_net_srv_xchange_purchase(da // Create conditional transaction char *l_ret = NULL; dap_chain_datum_tx_t *l_tx = s_xchange_tx_create_exchange(l_price, a_wallet, a_value, a_fee); - if (l_tx && (l_ret = s_xchange_tx_put(l_tx, a_net)) && - dap_hash_fast_is_blank(&l_price->order_hash)) { - char *l_order_hash_str = dap_hash_fast_to_str_new(a_order_hash); - dap_chain_net_srv_order_delete_by_hash_str_sync(l_price->net, l_order_hash_str); - DAP_DELETE(l_order_hash_str); + if (l_tx && !dap_hash_fast_is_blank(&l_price->order_hash)) { + l_ret = s_xchange_tx_put(l_tx, a_net); } DAP_DELETE(l_price); if (l_tx && l_ret){