From 486f495f639a6e88225b2d81a4f1e0ad06922ada Mon Sep 17 00:00:00 2001 From: "daniil.frolov" <daniil.frolov@demlabs.net> Date: Thu, 17 Aug 2023 12:44:39 +0700 Subject: [PATCH] .. --- .../dap_stream_ch_chain_net_srv.c | 19 ++++++++++++++----- modules/service/vpn/dap_chain_net_srv_vpn.c | 13 +++++++++---- 2 files changed, 23 insertions(+), 9 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 ff41271a4f..9ffcd4bc11 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 @@ -182,10 +182,11 @@ void s_stream_ch_delete(dap_stream_ch_t* a_ch , void* a_arg) (void) a_arg; log_it(L_DEBUG, "Stream ch chain net srv delete"); - dap_chain_net_srv_stream_session_t * l_srv_session = (dap_chain_net_srv_stream_session_t *) a_ch->stream->session->_inheritor; - dap_chain_net_srv_t * l_srv = dap_chain_net_srv_get(l_srv_session->usage_active->service->uid); + dap_chain_net_srv_stream_session_t * l_srv_session = a_ch && a_ch->stream && a_ch->stream->session ? (dap_chain_net_srv_stream_session_t *) a_ch->stream->session->_inheritor : NULL; + dap_chain_net_srv_t * l_srv = l_srv_session ? dap_chain_net_srv_get(l_srv_session->usage_active->service->uid) : NULL; - l_srv->callbacks.save_remain_service(l_srv, l_srv_session->usage_active->id, l_srv_session->usage_active->client); + if (l_srv) + l_srv->callbacks.save_remain_service(l_srv, l_srv_session->usage_active->id, l_srv_session->usage_active->client); dap_chain_net_srv_call_closed_all(a_ch); if (a_ch->stream->session && a_ch->stream->session->_inheritor) @@ -496,6 +497,7 @@ static void s_grace_period_start(dap_chain_net_srv_grace_t *a_grace) return; } + memcpy(&a_grace->usage->client_pkey_hash, &l_tx_out_cond->subtype.srv_pay.pkey_hash, sizeof(dap_chain_hash_fast_t)); dap_stream_ch_chain_net_srv_remain_service_store_t* l_remain_service = NULL; l_remain_service = a_grace->usage->service->callbacks.get_remain_service(a_grace->usage->service, a_grace->usage->id, a_grace->usage->client); if (l_remain_service && !a_grace->usage->is_active && @@ -523,6 +525,8 @@ static void s_grace_period_start(dap_chain_net_srv_grace_t *a_grace) log_it(L_INFO, "User has %d %s remain service. Start service without paying.", l_remain_service->remain_units, l_unit_type_str); DAP_DELETE(l_unit_type_str); + + 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); @@ -544,7 +548,9 @@ static void s_grace_period_start(dap_chain_net_srv_grace_t *a_grace) a_grace->usage->service->uid, l_remain_service->remain_units_type, l_remain_service->remain_units, uint256_0, NULL, NULL); if (a_grace->usage->service->callbacks.response_success) - a_grace->usage->service->callbacks.response_success(a_grace->usage->service, a_grace->usage->id, a_grace->usage->client, NULL, 0); + a_grace->usage->service->callbacks.response_success(a_grace->usage->service, a_grace->usage->id, + a_grace->usage->client, a_grace->usage->receipt, + sizeof(dap_chain_datum_tx_receipt_t) + a_grace->usage->receipt->size + a_grace->usage->receipt->exts_size); DAP_DELETE(l_success); } DAP_DELETE(a_grace->request); @@ -682,6 +688,7 @@ static bool s_grace_period_finish(usages_in_grace_t *a_grace_item) RET_WITH_DEL_A_GRACE; } + memcpy(&l_grace->usage->client_pkey_hash, &l_tx_out_cond->subtype.srv_pay.pkey_hash, sizeof(dap_chain_hash_fast_t)); // get remain units from DB dap_stream_ch_chain_net_srv_remain_service_store_t* l_remain_service = NULL; l_remain_service = l_grace->usage->service->callbacks.get_remain_service(l_grace->usage->service, l_grace->usage->id, l_grace->usage->client); @@ -731,7 +738,9 @@ static bool s_grace_period_finish(usages_in_grace_t *a_grace_item) l_grace->usage->service->uid, l_remain_service->remain_units_type, l_remain_service->remain_units, uint256_0, NULL, NULL); if (l_grace->usage->service->callbacks.response_success) - l_grace->usage->service->callbacks.response_success(l_grace->usage->service, l_grace->usage->id, l_grace->usage->client, NULL, 0); + l_grace->usage->service->callbacks.response_success(l_grace->usage->service, l_grace->usage->id, + l_grace->usage->client, l_grace->usage->receipt, + sizeof(dap_chain_datum_tx_receipt_t) + l_grace->usage->receipt->size + l_grace->usage->receipt->exts_size); DAP_DELETE(l_success); } DAP_DELETE(l_grace->request); diff --git a/modules/service/vpn/dap_chain_net_srv_vpn.c b/modules/service/vpn/dap_chain_net_srv_vpn.c index ec1623f5ca..90cb795682 100644 --- a/modules/service/vpn/dap_chain_net_srv_vpn.c +++ b/modules/service/vpn/dap_chain_net_srv_vpn.c @@ -950,15 +950,12 @@ static int s_callback_response_success(dap_chain_net_srv_t * a_srv, uint32_t a_u dap_chain_net_srv_usage_t * l_usage_active = l_srv_session->usage_active;// dap_chain_net_srv_usage_find_unsafe(l_srv_session,a_usage_id); dap_chain_net_srv_ch_vpn_t * l_srv_ch_vpn =(dap_chain_net_srv_ch_vpn_t*) a_srv_client->ch->stream->channel[DAP_CHAIN_NET_SRV_VPN_ID] ? a_srv_client->ch->stream->channel[DAP_CHAIN_NET_SRV_VPN_ID]->internal : NULL; - if ( !l_usage_active){ log_it( L_ERROR, "No active service usage, can't success"); return -1; } - usage_client_t * l_usage_client = NULL; - - l_usage_client = DAP_NEW_Z(usage_client_t); + usage_client_t * l_usage_client = DAP_NEW_Z(usage_client_t); if (!l_usage_client) { log_it(L_CRITICAL, "Memory allocation error"); return -1; @@ -993,6 +990,7 @@ static int s_callback_response_success(dap_chain_net_srv_t * a_srv, uint32_t a_u // set start limits if(!l_usage_active->is_free){ + l_srv_session->limits_units_type.uint32 = l_usage_active->receipt->receipt_info.units_type.uint32; switch( l_usage_active->receipt->receipt_info.units_type.enm){ case SERV_UNIT_DAY:{ l_srv_session->last_update_ts = time(NULL); @@ -1107,6 +1105,7 @@ static dap_stream_ch_chain_net_srv_remain_service_store_t* s_callback_get_remain static int s_callback_save_remain_service(dap_chain_net_srv_t * a_srv, uint32_t a_usage_id, dap_chain_net_srv_client_remote_t * a_srv_client) { + UNUSED(a_srv); dap_chain_net_srv_stream_session_t * l_srv_session = a_srv_client && a_srv_client->ch && a_srv_client->ch->stream && a_srv_client->ch->stream->session ? (dap_chain_net_srv_stream_session_t *) a_srv_client->ch->stream->session->_inheritor : NULL; @@ -1121,6 +1120,9 @@ static int s_callback_save_remain_service(dap_chain_net_srv_t * a_srv, uint32_t return -101; } + if (l_usage->is_free) + return -110; + dap_chain_net_t *l_net = l_usage->net; // get remain units from DB @@ -1143,6 +1145,9 @@ static int s_callback_save_remain_service(dap_chain_net_srv_t * a_srv, uint32_t break; } + if (l_srv_session->usage_active->receipt_next) + l_remain_service.remain_units += l_srv_session->usage_active->receipt_next->receipt_info.units; + if(dap_global_db_set_sync(l_remain_limits_gdb_group, l_user_key, &l_remain_service, sizeof(l_remain_service), false)) { DAP_DELETE(l_remain_limits_gdb_group); -- GitLab