diff --git a/dap-sdk b/dap-sdk index 8b19997fc272166ab0ed5f4a68d960cb20dbb5fc..40146669e1c129c8dd3bf841ad8ab353c69a808f 160000 --- a/dap-sdk +++ b/dap-sdk @@ -1 +1 @@ -Subproject commit 8b19997fc272166ab0ed5f4a68d960cb20dbb5fc +Subproject commit 40146669e1c129c8dd3bf841ad8ab353c69a808f diff --git a/modules/net/dap_chain_node.c b/modules/net/dap_chain_node.c index a0b601f7eceb6a1957734e228270d7cb182581e5..30f6b15d65ddddbe28d187e177fa922146f47ff3 100644 --- a/modules/net/dap_chain_node.c +++ b/modules/net/dap_chain_node.c @@ -271,6 +271,7 @@ bool dap_chain_node_mempool_process(dap_chain_t *a_chain, dap_chain_datum_t *a_d if (l_verify_datum != 0 && l_verify_datum != DAP_CHAIN_CS_VERIFY_CODE_TX_NO_PREVIOUS && l_verify_datum != DAP_CHAIN_CS_VERIFY_CODE_TX_NO_EMISSION && + l_verify_datum != DAP_CHAIN_CS_VERIFY_CODE_NOT_ENOUGH_SIGNS && l_verify_datum != DAP_CHAIN_CS_VERIFY_CODE_NO_DECREE) return true; if (!l_verify_datum diff --git a/modules/net/include/dap_chain_ledger.h b/modules/net/include/dap_chain_ledger.h index 777e259835417b9ddd7e0c28b401d82452309431..a9b58d5bc4b9a86817fd7b3aadc31e02ef3a549e 100644 --- a/modules/net/include/dap_chain_ledger.h +++ b/modules/net/include/dap_chain_ledger.h @@ -177,11 +177,13 @@ typedef bool (*dap_ledger_tag_check_callback_t)(dap_ledger_t *a_ledger, dap_chai #define DAP_LEDGER_CACHE_ENABLED 0x0200 // Error code for no previous transaction (for stay in mempool) -#define DAP_CHAIN_CS_VERIFY_CODE_TX_NO_PREVIOUS DAP_LEDGER_TX_CHECK_PREV_TX_NOT_FOUND -// Error code for no emission for a transaction (for stay in mempoold) -#define DAP_CHAIN_CS_VERIFY_CODE_TX_NO_EMISSION DAP_LEDGER_TX_CHECK_EMISSION_NOT_FOUND +#define DAP_CHAIN_CS_VERIFY_CODE_TX_NO_PREVIOUS DAP_LEDGER_TX_CHECK_PREV_TX_NOT_FOUND +// Error code for no emission for a transaction (for stay in mempool) +#define DAP_CHAIN_CS_VERIFY_CODE_TX_NO_EMISSION DAP_LEDGER_TX_CHECK_EMISSION_NOT_FOUND +// Error code for not enough valid emission signs (for stay in mempool) +#define DAP_CHAIN_CS_VERIFY_CODE_NOT_ENOUGH_SIGNS DAP_LEDGER_EMISSION_ADD_CHECK_NOT_ENOUGH_VALID_SIGNS // Error code for no decree for anchor (for stay in mempool) -#define DAP_CHAIN_CS_VERIFY_CODE_NO_DECREE -1113 +#define DAP_CHAIN_CS_VERIFY_CODE_NO_DECREE -1113 #define DAP_LEDGER_TOKENS_STR "tokens" #define DAP_LEDGER_EMISSIONS_STR "emissions" diff --git a/modules/service/vpn/dap_chain_net_srv_vpn.c b/modules/service/vpn/dap_chain_net_srv_vpn.c index bc70d6a6b4daa34db798af19c8d1137392b0b213..81a078789adbdd6003050ef8fc6a1d8c15ab2da5 100644 --- a/modules/service/vpn/dap_chain_net_srv_vpn.c +++ b/modules/service/vpn/dap_chain_net_srv_vpn.c @@ -1491,7 +1491,8 @@ static void send_pong_pkt(dap_stream_ch_t* a_ch) * @param a_ch * @param a_usage */ -static void s_ch_packet_in_vpn_address_request(dap_stream_ch_t* a_ch, dap_chain_net_srv_usage_t * a_usage){ +static void s_ch_packet_in_vpn_address_request(dap_stream_ch_t *a_ch, dap_chain_net_srv_usage_t *a_usage) +{ dap_chain_net_srv_ch_vpn_t *l_ch_vpn = CH_VPN(a_ch); dap_chain_net_srv_vpn_t *l_srv_vpn = (dap_chain_net_srv_vpn_t*)a_usage->service->_internal; dap_chain_net_srv_stream_session_t *l_srv_session = DAP_CHAIN_NET_SRV_STREAM_SESSION(l_ch_vpn->ch->stream->session); @@ -1691,10 +1692,12 @@ static bool s_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) { dap_stream_ch_pkt_t * l_pkt = (dap_stream_ch_pkt_t *) a_arg; ch_vpn_pkt_t *l_vpn_pkt = (ch_vpn_pkt_t*)l_pkt->data; - size_t l_vpn_pkt_size = l_pkt->hdr.data_size; - if (l_vpn_pkt_size < sizeof(l_vpn_pkt->header)) + if (l_pkt->hdr.data_size < sizeof(l_vpn_pkt->header)) { + log_it(L_WARNING, "Data size of stream channel packet %u is lesser than size of VPN packet header %zu", + l_pkt->hdr.data_size, sizeof(l_vpn_pkt->header)); return false; - + } + size_t l_vpn_pkt_data_size = l_pkt->hdr.data_size - sizeof(l_vpn_pkt->header); dap_chain_net_srv_stream_session_t * l_srv_session = DAP_CHAIN_NET_SRV_STREAM_SESSION (a_ch->stream->session ); // dap_chain_net_srv_ch_vpn_t *l_ch_vpn = CH_VPN(a_ch); dap_chain_net_srv_usage_t * l_usage = l_srv_session->usage_active;// dap_chain_net_srv_usage_find_unsafe(l_srv_session, l_ch_vpn->usage_id); @@ -1729,29 +1732,28 @@ static bool s_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) } // TODO move address leasing to this structure - //dap_chain_net_srv_vpn_t * l_srv_vpn =(dap_chain_net_srv_vpn_t *) l_usage->service->_internal; - l_vpn_pkt_size -= sizeof (l_vpn_pkt->header); debug_if(s_debug_more, L_INFO, "Got srv_vpn packet with op_code=0x%02x", l_vpn_pkt->header.op_code); if(l_vpn_pkt->header.op_code >= 0xb0) { // Raw packets switch (l_vpn_pkt->header.op_code) { case VPN_PACKET_OP_CODE_PING: a_ch->stream->esocket->last_ping_request = time(NULL); - l_srv_session->stats.bytes_recv += l_vpn_pkt_size; + l_srv_session->stats.bytes_recv += l_vpn_pkt_data_size; l_srv_session->stats.packets_recv++; send_pong_pkt(a_ch); break; case VPN_PACKET_OP_CODE_PONG: a_ch->stream->esocket->last_ping_request = time(NULL); - l_srv_session->stats.bytes_recv += l_vpn_pkt_size; + l_srv_session->stats.bytes_recv += l_vpn_pkt_data_size; l_srv_session->stats.packets_recv++; break; // for client case VPN_PACKET_OP_CODE_VPN_ADDR_REPLY: { // Assigned address for peer - if(ch_sf_tun_addr_leased(CH_VPN(a_ch), l_vpn_pkt, l_vpn_pkt_size) < 0) { + if(ch_sf_tun_addr_leased(CH_VPN(a_ch), l_vpn_pkt, l_pkt->hdr.data_size) < 0) { log_it(L_ERROR, "Can't create tun"); - }else - s_tun_send_msg_ip_assigned_all(a_ch->stream_worker->worker->id, CH_VPN(a_ch), CH_VPN(a_ch)->addr_ipv4); - l_srv_session->stats.bytes_recv += l_vpn_pkt_size; + break; + } + s_tun_send_msg_ip_assigned_all(a_ch->stream_worker->worker->id, CH_VPN(a_ch), CH_VPN(a_ch)->addr_ipv4); + l_srv_session->stats.bytes_recv += l_pkt->hdr.data_size; l_srv_session->stats.packets_recv++; } break; // for server @@ -1765,11 +1767,16 @@ static bool s_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) dap_stream_ch_pkt_write_unsafe( l_usage->client->ch , DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR, &l_err, sizeof (l_err)); } - l_srv_session->stats.bytes_recv += l_vpn_pkt_size; + l_srv_session->stats.bytes_recv += l_pkt->hdr.data_size; l_srv_session->stats.packets_recv++; } break; // for client only case VPN_PACKET_OP_CODE_VPN_RECV:{ + if (l_vpn_pkt_data_size != l_vpn_pkt->header.op_data.data_size) { + log_it(L_WARNING, "Size of VPN packet data %zu is not equal to estimated size %u", + l_vpn_pkt_data_size, l_vpn_pkt->header.op_data.data_size); + return false; + } a_ch->stream->esocket->last_ping_request = time(NULL); // not ping, but better ;-) dap_events_socket_t *l_es = dap_chain_net_vpn_client_tun_get_esock(); // Find tun socket for current worker @@ -1786,9 +1793,13 @@ static bool s_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) l_srv_session->stats.packets_sent_lost++; } } break; - // for server only case VPN_PACKET_OP_CODE_VPN_SEND: { + if (l_vpn_pkt_data_size != l_vpn_pkt->header.op_data.data_size) { + log_it(L_WARNING, "Size of VPN packet data %zu is not equal to estimated size %u", + l_vpn_pkt_data_size, l_vpn_pkt->header.op_data.data_size); + return false; + } dap_chain_net_srv_vpn_tun_socket_t *l_tun = s_tun_sockets[a_ch->stream_worker->worker->id]; assert(l_tun); size_t l_ret = dap_events_socket_write_unsafe(l_tun->es, l_vpn_pkt, @@ -1807,6 +1818,7 @@ static bool s_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) } break; default: log_it(L_WARNING, "Can't process SF type 0x%02x", l_vpn_pkt->header.op_code); + return false; } } return true; diff --git a/modules/service/vpn/include/dap_chain_net_srv_vpn.h b/modules/service/vpn/include/dap_chain_net_srv_vpn.h index 877082a4c85923154bb852d64157006a9397a359..dbcbaa095b276cb86c6a9f8b7384bf6d7aa5e00c 100644 --- a/modules/service/vpn/include/dap_chain_net_srv_vpn.h +++ b/modules/service/vpn/include/dap_chain_net_srv_vpn.h @@ -92,19 +92,6 @@ typedef struct ch_vpn_pkt { typedef struct dap_chain_net_srv_vpn_tun_socket dap_chain_net_srv_vpn_tun_socket_t; typedef struct dap_chain_net_srv_ch_vpn dap_chain_net_srv_ch_vpn_t; - - -// Copy is present on each tun socket -typedef struct usage_client { - dap_chain_net_srv_ch_vpn_t * ch_vpn; - dap_chain_datum_tx_receipt_t * receipt; - size_t receipt_size; - uint32_t usage_id; - dap_chain_net_srv_t * srv; - dap_chain_net_srv_vpn_tun_socket_t * tun_socket; - UT_hash_handle hh; -} usage_client_t; - typedef struct dap_chain_net_srv_ch_vpn_info dap_chain_net_srv_ch_vpn_info_t; typedef struct dap_chain_net_srv_vpn_tun_socket { diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c index 86bf719e88b7da036ff270137406456d04a7e010..01a2468ff55625627c71735f8a5129ec0dd21d83 100644 --- a/modules/type/blocks/dap_chain_cs_blocks.c +++ b/modules/type/blocks/dap_chain_cs_blocks.c @@ -1438,7 +1438,6 @@ static int s_delete_atom_datums(dap_chain_cs_blocks_t *a_blocks, dap_chain_block i++, l_block_offset += l_datum_size){ dap_hash_fast_t *l_datum_hash = a_block_cache->datum_hash + i; dap_chain_datum_t *l_datum = a_block_cache->datum[i]; - pthread_rwlock_wrlock(&PVT(a_blocks)->datums_rwlock); dap_chain_block_datum_index_t *l_datum_index = NULL; size_t l_datum_data_size = l_datum->header.data_size; l_datum_size = l_datum_data_size + sizeof(l_datum->header); @@ -1449,7 +1448,6 @@ static int s_delete_atom_datums(dap_chain_cs_blocks_t *a_blocks, dap_chain_block l_ret++; HASH_DEL(PVT(a_blocks)->datum_index, l_datum_index); } - pthread_rwlock_unlock(&PVT(a_blocks)->datums_rwlock); } debug_if(s_debug_more, L_DEBUG, "Block %s checked, %s", a_block_cache->block_hash_str, l_ret == (int)a_block_cache->datum_count ? "all correct" : "there are rejected datums");