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 6684f8a0f9181ec4d3ede58d50f9782a8e25ac9f..9f7a128ec97a985b8c886dc05e5127382cd225e5 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 @@ -512,23 +512,39 @@ static void s_grace_period_start(dap_chain_net_srv_grace_t *a_grace) dap_chain_net_srv_price_t *l_price_tmp; DL_FOREACH(a_grace->usage->service->pricelist, l_price_tmp) { - if (l_price_tmp && l_price_tmp->net->pub.id.uint64 == a_grace->usage->net->pub.id.uint64 - && dap_strcmp(l_price_tmp->token, l_ticker) == 0 - && l_price_tmp->units_uid.enm == l_tx_out_cond->subtype.srv_pay.unit.enm) - { - uint256_t l_unit_price = {}; - if (l_price_tmp->units != 0){ - DIV_256(l_price_tmp->value_datoshi, GET_256_FROM_64(l_price_tmp->units), &l_unit_price); - } else { - break; - } + if (!l_price_tmp){ + continue; + } - if(!compare256(uint256_0, l_tx_out_cond->subtype.srv_pay.unit_price_max_datoshi) || - compare256(l_unit_price, l_tx_out_cond->subtype.srv_pay.unit_price_max_datoshi) <= 0){ - l_price = l_price_tmp; - break; - } + if (l_price_tmp->net->pub.id.uint64 != a_grace->usage->net->pub.id.uint64){ + log_it( L_WARNING, "Pricelist is not for net %s.", a_grace->usage->net->pub.id.uint64); + continue; + } + + if (dap_strcmp(l_price_tmp->token, l_ticker) != 0){ + log_it( L_WARNING, "Token ticker in the pricelist and tx do not match"); + continue; + } + if (l_price_tmp->units_uid.enm == l_tx_out_cond->subtype.srv_pay.unit.enm){ + log_it( L_WARNING, "Unit ID in the pricelist and tx do not match"); + continue; + } + + uint256_t l_unit_price = {}; + if (l_price_tmp->units != 0){ + DIV_256(l_price_tmp->value_datoshi, GET_256_FROM_64(l_price_tmp->units), &l_unit_price); + } else { + log_it( L_WARNING, "Units in pricelist is zero. "); + continue; + } + + if(!compare256(uint256_0, l_tx_out_cond->subtype.srv_pay.unit_price_max_datoshi) || + compare256(l_unit_price, l_tx_out_cond->subtype.srv_pay.unit_price_max_datoshi) <= 0){ + l_price = l_price_tmp; + break; + } else { + log_it( L_WARNING, "Unit price in pricelist is greater than max allowable."); } } if ( !l_price ) { @@ -706,22 +722,39 @@ static bool s_grace_period_finish(usages_in_grace_t *a_grace_item) dap_chain_net_srv_price_t *l_price_tmp; DL_FOREACH(l_grace->usage->service->pricelist, l_price_tmp) { - if (l_price_tmp && l_price_tmp->net->pub.id.uint64 == l_grace->usage->net->pub.id.uint64 - && dap_strcmp(l_price_tmp->token, l_ticker) == 0 - && l_price_tmp->units_uid.enm == l_tx_out_cond->subtype.srv_pay.unit.enm) - { - uint256_t l_unit_price = {}; - if (l_price_tmp->units != 0){ - DIV_256(l_price_tmp->value_datoshi, GET_256_FROM_64(l_price_tmp->units), &l_unit_price); - } else { - break; - } + if (!l_price_tmp){ + continue; + } - if(!compare256(uint256_0, l_tx_out_cond->subtype.srv_pay.unit_price_max_datoshi) || - compare256(l_unit_price, l_tx_out_cond->subtype.srv_pay.unit_price_max_datoshi) <= 0){ - l_price = l_price_tmp; - break; - } + if (l_price_tmp->net->pub.id.uint64 != l_grace->usage->net->pub.id.uint64){ + log_it( L_WARNING, "Pricelist is not for net %s.", l_grace->usage->net->pub.id.uint64); + continue; + } + + if (dap_strcmp(l_price_tmp->token, l_ticker) != 0){ + log_it( L_WARNING, "Token ticker in the pricelist and tx do not match"); + continue; + } + + if (l_price_tmp->units_uid.enm == l_tx_out_cond->subtype.srv_pay.unit.enm){ + log_it( L_WARNING, "Unit ID in the pricelist and tx do not match"); + continue; + } + + uint256_t l_unit_price = {}; + if (l_price_tmp->units != 0){ + DIV_256(l_price_tmp->value_datoshi, GET_256_FROM_64(l_price_tmp->units), &l_unit_price); + } else { + log_it( L_WARNING, "Units in pricelist is zero. "); + continue; + } + + if(!compare256(uint256_0, l_tx_out_cond->subtype.srv_pay.unit_price_max_datoshi) || + compare256(l_unit_price, l_tx_out_cond->subtype.srv_pay.unit_price_max_datoshi) <= 0){ + l_price = l_price_tmp; + break; + } else { + log_it( L_WARNING, "Unit price in pricelist is greater than max allowable."); } } if ( !l_price ) { diff --git a/modules/service/vpn/dap_chain_net_srv_vpn.c b/modules/service/vpn/dap_chain_net_srv_vpn.c index a8a4e3f9f5cb1eea12e047b6adaabc97d8c50b8b..02fdbfb3ef20f273a3b7efbb295c0ce259e89171 100644 --- a/modules/service/vpn/dap_chain_net_srv_vpn.c +++ b/modules/service/vpn/dap_chain_net_srv_vpn.c @@ -1350,7 +1350,7 @@ static void s_update_limits(dap_stream_ch_t * a_ch , } break; case SERV_UNIT_SEC:{ a_srv_session->limits_ts += (time_t)a_usage->receipt->receipt_info.units; - log_it(L_INFO,"%"DAP_UINT64_FORMAT_U" seconds more for VPN usage", a_srv_session->limits_ts); + log_it(L_INFO,"%"DAP_UINT64_FORMAT_U" seconds more for VPN usage", a_usage->receipt->receipt_info.units); } break; default: { log_it(L_WARNING, "VPN doesnt accept serv unit type 0x%08X for limits_ts", a_usage->receipt->receipt_info.units_type.uint32 );