From ecbf9be8819da313d3abbe41bfd55e78adfc937d Mon Sep 17 00:00:00 2001 From: "daniil.frolov" <daniil.frolov@demlabs.net> Date: Mon, 17 Jul 2023 18:37:38 +0700 Subject: [PATCH 1/3] ... --- modules/net/srv/dap_chain_net_srv.c | 1 + modules/net/srv/include/dap_chain_net_srv.h | 1 + 2 files changed, 2 insertions(+) diff --git a/modules/net/srv/dap_chain_net_srv.c b/modules/net/srv/dap_chain_net_srv.c index 4556ef32e5..df48a10ca3 100644 --- a/modules/net/srv/dap_chain_net_srv.c +++ b/modules/net/srv/dap_chain_net_srv.c @@ -769,6 +769,7 @@ int dap_chain_net_srv_price_apply_from_my_order(dap_chain_net_srv_t *a_srv, cons return -4; } a_srv->grace_period = dap_config_get_item_uint32_default(g_config, a_config_section, "grace_period", 60); + a_srv->allow_free_srv = dap_config_get_item_bool_default(g_config, a_config_section, "allow_free_srv", false); int l_err_code = 0; dap_chain_node_addr_t *l_node_addr = NULL; l_node_addr = dap_chain_net_get_cur_addr(l_net); diff --git a/modules/net/srv/include/dap_chain_net_srv.h b/modules/net/srv/include/dap_chain_net_srv.h index db494599b1..ef2e03ce1e 100755 --- a/modules/net/srv/include/dap_chain_net_srv.h +++ b/modules/net/srv/include/dap_chain_net_srv.h @@ -246,6 +246,7 @@ typedef struct dap_chain_net_srv dap_chain_net_srv_abstract_t srv_common; dap_chain_net_srv_price_t *pricelist; + bool allow_free_srv; uint32_t grace_period; pthread_mutex_t banlist_mutex; dap_chain_net_srv_banlist_item_t *ban_list; -- GitLab From ea29e18821ba75419b36962ba556a1b397ce18c5 Mon Sep 17 00:00:00 2001 From: "daniil.frolov" <daniil.frolov@demlabs.net> Date: Tue, 18 Jul 2023 18:41:29 +0700 Subject: [PATCH 2/3] Add price validating in price searching --- .../dap_stream_ch_chain_net_srv.c | 28 +++++++++++-------- modules/net/srv/dap_chain_net_srv.c | 15 ++++++++++ 2 files changed, 31 insertions(+), 12 deletions(-) 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 1e330ae02d..8787918996 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 @@ -269,22 +269,21 @@ static void s_service_start(dap_stream_ch_t* a_ch , dap_stream_ch_chain_net_srv_ l_usage->net = l_net; l_usage->service = l_srv; - - dap_chain_net_srv_grace_t *l_grace = DAP_NEW_Z(dap_chain_net_srv_grace_t); - l_grace->request = DAP_NEW_Z_SIZE(dap_stream_ch_chain_net_srv_pkt_request_t, a_request_size); - memcpy(l_grace->request, a_request, a_request_size); - l_grace->request_size = a_request_size; - l_grace->ch_uuid = a_ch->uuid; - l_grace->stream_worker = a_ch->stream_worker; - l_grace->usage = l_usage; - if (l_srv->pricelist){ // not free service + log_it( L_INFO, "Valid pricelist is founded. Start service in pay mode."); + dap_chain_net_srv_grace_t *l_grace = DAP_NEW_Z(dap_chain_net_srv_grace_t); + l_grace->request = DAP_NEW_Z_SIZE(dap_stream_ch_chain_net_srv_pkt_request_t, a_request_size); + memcpy(l_grace->request, a_request, a_request_size); + l_grace->request_size = a_request_size; + l_grace->ch_uuid = a_ch->uuid; + l_grace->stream_worker = a_ch->stream_worker; + l_grace->usage = l_usage; s_grace_period_start(l_grace); - } else { + } else if (l_srv->allow_free_srv){ // Start service for free - log_it( L_INFO, "Service provide for free"); - l_grace->usage->is_free = true; + log_it( L_INFO, "Can't find a valid pricelist. Service provide for free"); + l_usage->is_free = true; size_t l_success_size = sizeof (dap_stream_ch_chain_net_srv_pkt_success_hdr_t ); dap_stream_ch_chain_net_srv_pkt_success_t *l_success = DAP_NEW_Z_SIZE(dap_stream_ch_chain_net_srv_pkt_success_t, l_success_size); @@ -295,6 +294,11 @@ static void s_service_start(dap_stream_ch_t* a_ch , dap_stream_ch_chain_net_srv_ if (l_usage->service->callbacks.response_success) l_usage->service->callbacks.response_success(l_usage->service, l_usage->id, l_usage->client, NULL, 0); DAP_DELETE(l_success); + }else { + log_it( L_INFO, "No pricelists. Free service sharing is not allowed. Service stop."); + 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)); } return; } diff --git a/modules/net/srv/dap_chain_net_srv.c b/modules/net/srv/dap_chain_net_srv.c index df48a10ca3..862654ad11 100644 --- a/modules/net/srv/dap_chain_net_srv.c +++ b/modules/net/srv/dap_chain_net_srv.c @@ -786,11 +786,26 @@ int dap_chain_net_srv_price_apply_from_my_order(dap_chain_net_srv_t *a_srv, cons dap_chain_net_srv_price_t *l_price = DAP_NEW_Z(dap_chain_net_srv_price_t); l_price->net = l_net; l_price->net_name = dap_strdup(l_net->pub.name); + uint256_t l_max_price = GET_256_FROM_64((uint64_t)100); // Change this value when max price wil be calculated + if (!compare256(l_order->price, uint256_0) || l_order->units == 0 ){ + DAP_DELETE(l_price); + continue; + } l_price->value_datoshi = l_order->price; dap_stpcpy(l_price->token, l_order->price_ticker); l_price->units = l_order->units; l_price->units_uid = l_order->price_unit; + if (compare256(l_max_price, uint256_0)){ + uint256_t l_price_unit = uint256_0; + DIV_256(l_price->value_datoshi, GET_256_FROM_64(l_order->units), &l_price_unit); + if (compare256(l_price_unit, l_max_price)>0){ + DAP_DELETE(l_price); + continue; + } + } + l_price->wallet = l_wallet; + DL_APPEND(a_srv->pricelist, l_price); break; } DAP_DELETE(l_order); -- GitLab From ad9cc6c84e4832126a8522b55958c27aa1c1f10c Mon Sep 17 00:00:00 2001 From: "daniil.frolov" <daniil.frolov@demlabs.net> Date: Fri, 21 Jul 2023 20:19:34 +0700 Subject: [PATCH 3/3] change max price --- modules/net/srv/dap_chain_net_srv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/net/srv/dap_chain_net_srv.c b/modules/net/srv/dap_chain_net_srv.c index 862654ad11..3fad147ed0 100644 --- a/modules/net/srv/dap_chain_net_srv.c +++ b/modules/net/srv/dap_chain_net_srv.c @@ -786,7 +786,7 @@ int dap_chain_net_srv_price_apply_from_my_order(dap_chain_net_srv_t *a_srv, cons dap_chain_net_srv_price_t *l_price = DAP_NEW_Z(dap_chain_net_srv_price_t); l_price->net = l_net; l_price->net_name = dap_strdup(l_net->pub.name); - uint256_t l_max_price = GET_256_FROM_64((uint64_t)100); // Change this value when max price wil be calculated + uint256_t l_max_price = GET_256_FROM_64((uint64_t)1000000000000000); // Change this value when max price wil be calculated if (!compare256(l_order->price, uint256_0) || l_order->units == 0 ){ DAP_DELETE(l_price); continue; -- GitLab