From 8d38e709bb0214a780f4babcebb3b1dd7c8354ce Mon Sep 17 00:00:00 2001 From: "roman.khlopkov" <roman.khlopkov@demlabs.net> Date: Mon, 24 Jun 2024 18:25:21 +0300 Subject: [PATCH] [*] Order creation fix --- modules/net/srv/dap_chain_net_srv.c | 45 +++++++++++------------ modules/net/srv/dap_chain_net_srv_order.c | 7 +++- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/modules/net/srv/dap_chain_net_srv.c b/modules/net/srv/dap_chain_net_srv.c index 9aa1dc9a76..62941a875f 100644 --- a/modules/net/srv/dap_chain_net_srv.c +++ b/modules/net/srv/dap_chain_net_srv.c @@ -450,6 +450,7 @@ static int s_cli_net_srv( int argc, char **argv, void **a_str_reply) l_ret = -9 ; dap_string_append(l_string_ret,"need -hash param to obtain what the order we need to dump\n"); } + } else if(!dap_strcmp( l_order_str, "create" )) { if (dap_chain_net_get_role(l_net).enums > NODE_ROLE_MASTER) { dap_cli_server_cmd_set_reply_text(a_str_reply, "Node role should be not lower than master\n"); @@ -475,7 +476,6 @@ static int s_cli_net_srv( int argc, char **argv, void **a_str_reply) log_it(L_DEBUG, "Created order to buy"); } else { log_it(L_WARNING, "Undefined order direction"); - dap_string_free(l_string_ret, true); dap_cli_server_cmd_set_reply_text(a_str_reply, "Wrong direction of the token was " "specified, possible directions: buy, sell."); return -18; @@ -486,11 +486,9 @@ static int s_cli_net_srv( int argc, char **argv, void **a_str_reply) l_expires = (dap_time_t ) atoll( l_expires_str); if (l_srv_uid_str && dap_id_uint64_parse(l_srv_uid_str ,&l_srv_uid.uint64)) { dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't recognize '%s' string as 64-bit id, hex or dec.", l_srv_uid_str); - dap_string_free(l_string_ret, true); return -21; }else if (!l_srv_uid_str){ dap_cli_server_cmd_set_reply_text(a_str_reply, "Parameter -srv_uid is required."); - dap_string_free(l_string_ret, true); return -22; } if (l_node_addr_str){ @@ -501,7 +499,6 @@ static int s_cli_net_srv( int argc, char **argv, void **a_str_reply) dap_cli_server_cmd_set_reply_text(a_str_reply, "The order has not been created. " "Failed to convert string representation of '%s' " "to node address.", l_node_addr_str); - dap_string_free(l_string_ret, true); return -17; } } else { @@ -530,58 +527,58 @@ static int s_cli_net_srv( int argc, char **argv, void **a_str_reply) l_price_unit.enm = SERV_UNIT_PCS; } else { log_it(L_ERROR, "Undefined price unit"); - dap_string_free(l_string_ret, true); dap_cli_server_cmd_set_reply_text(a_str_reply, "Wrong unit type sepcified, possible values: B, KB, MB, SEC, DAY, PCS"); return -18; } - - strncpy(l_price_token, l_price_token_str, DAP_CHAIN_TICKER_SIZE_MAX - 1); size_t l_ext_len = l_ext? strlen(l_ext) + 1 : 0; // get cert to order sign dap_cert_t *l_cert = NULL; dap_enc_key_t *l_key = NULL; - if(l_order_cert_name) { + if (l_order_cert_name) { l_cert = dap_cert_find_by_name(l_order_cert_name); - if(l_cert) { + if (l_cert) { l_key = l_cert->enc_key; + if (!l_key->priv_key_data || !l_key->priv_key_data_size) { + log_it(L_ERROR, "Certificate '%s' doesn't contain a private key", l_order_cert_name); + dap_cli_server_cmd_set_reply_text(a_str_reply, "Certificate '%s' doesn't contain a private key", l_order_cert_name); + return -25; + } } else { log_it(L_ERROR, "Can't load cert '%s' for sign order", l_order_cert_name); dap_cli_server_cmd_set_reply_text(a_str_reply, "Can't load cert '%s' for sign " "order", l_order_cert_name); - dap_string_free(l_string_ret, true); return -19; } } else { dap_cli_server_cmd_set_reply_text(a_str_reply, "The certificate name was not " "specified. Since version 5.2 it is not possible to " "create unsigned orders."); - dap_string_free(l_string_ret, true); return -20; } // create order - char * l_order_new_hash_str = dap_chain_net_srv_order_create( + char *l_order_new_hash_str = dap_chain_net_srv_order_create( l_net,l_direction, l_srv_uid, l_node_addr,l_tx_cond_hash, &l_price, l_price_unit, l_price_token, l_expires, (uint8_t *)l_ext, l_ext_len, l_units, l_region_str, l_continent_num, l_key); - if(l_cert) - dap_cert_delete(l_cert); - if (l_order_new_hash_str) - dap_string_append_printf( l_string_ret, "Created order %s\n", l_order_new_hash_str); - else { - dap_string_append_printf( l_string_ret, "Error! Can't created order\n"); - l_ret = -4; + if (l_order_new_hash_str) { + dap_cli_server_cmd_set_reply_text(a_str_reply, "Created order %s\n", l_order_new_hash_str); + DAP_DELETE(l_order_new_hash_str); + return 0; + } else { + dap_cli_server_cmd_set_reply_text(a_str_reply, "Error! Can't created order\n"); + return -4; } } else { - dap_string_append_printf( l_string_ret, "Missed some required params\n"); - l_ret=-5; + dap_cli_server_cmd_set_reply_text(a_str_reply, "Missed some required params\n"); + return -5; } } else if (l_order_str) { - dap_string_append_printf(l_string_ret, "Unrecognized subcommand '%s'", l_order_str); - l_ret = -14; + dap_cli_server_cmd_set_reply_text(a_str_reply, "Unrecognized subcommand '%s'", l_order_str); + return -14; } dap_cli_server_cmd_set_reply_text(a_str_reply, "%s", l_string_ret->str); - dap_string_free(l_string_ret, true); + } else if (l_get_limits_str){ const char *l_provider_pkey_hash_str = NULL; dap_cli_server_cmd_find_option_val(argv, arg_index, argc, "-provider_pkey_hash", &l_provider_pkey_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 5a6b2dc00f..5a41dfa02c 100644 --- a/modules/net/srv/dap_chain_net_srv_order.c +++ b/modules/net/srv/dap_chain_net_srv_order.c @@ -350,14 +350,17 @@ char *dap_chain_net_srv_order_save(dap_chain_net_t *a_net, dap_chain_net_srv_ord dap_chain_hash_fast_t l_order_hash; size_t l_order_size = dap_chain_net_srv_order_get_size(a_order); dap_hash_fast(a_order, l_order_size, &l_order_hash); - const char *l_order_hash_str = dap_chain_hash_fast_to_str_static(&l_order_hash); + char *l_order_hash_str = dap_chain_hash_fast_to_str_new(&l_order_hash); char *l_gdb_group_str = a_common ? dap_chain_net_srv_order_get_common_group(a_net) : dap_chain_net_srv_order_get_gdb_group(a_net); if (!l_gdb_group_str) return NULL; int l_rc = dap_global_db_set_sync(l_gdb_group_str, l_order_hash_str, a_order, l_order_size, false); DAP_DELETE(l_gdb_group_str); - return l_rc == DAP_GLOBAL_DB_RC_SUCCESS ? dap_strdup(l_order_hash_str) : NULL; + if (l_rc == DAP_GLOBAL_DB_RC_SUCCESS) + return l_order_hash_str; + DAP_DELETE(l_order_hash_str); + return NULL; } dap_chain_net_srv_order_t *dap_chain_net_srv_order_read(byte_t *a_order, size_t a_order_size) -- GitLab