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 95348965690a9bfd4b827817c93a537f6c931c20..d25a159ee5274a17db5099ddbcb73ceba2a8417b 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 @@ -82,7 +82,7 @@ static bool s_stream_ch_packet_out(dap_stream_ch_t* ch , void* arg); static bool s_unban_client(dap_chain_net_srv_banlist_item_t *a_item); -static bool s_service_start(dap_stream_ch_t* a_ch , dap_stream_ch_chain_net_srv_pkt_request_t * a_request, size_t a_request_size); +static bool s_service_start(dap_stream_ch_t *a_ch , dap_stream_ch_chain_net_srv_pkt_request_t *a_request, size_t a_request_size); static bool s_grace_period_start(dap_chain_net_srv_grace_t *a_grace); static bool s_grace_period_finish(dap_chain_net_srv_grace_usage_t *a_grace); static void s_set_usage_data_to_gdb(const dap_chain_net_srv_usage_t *a_usage); @@ -309,7 +309,7 @@ void dap_stream_ch_chain_net_srv_tx_cond_added_cb(UNUSED_ARG void *a_arg, UNUSED } } -static bool s_service_start(dap_stream_ch_t* a_ch , dap_stream_ch_chain_net_srv_pkt_request_t * a_request, size_t a_request_size) +static bool s_service_start(dap_stream_ch_t *a_ch , dap_stream_ch_chain_net_srv_pkt_request_t *a_request, size_t a_request_size) { assert(a_ch); dap_stream_ch_chain_net_srv_pkt_error_t l_err; @@ -1189,14 +1189,24 @@ static bool s_stream_ch_packet_in(dap_stream_ch_t *a_ch, void *a_arg) switch (l_ch_pkt->hdr.type) { case DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_CHECK_REQUEST: { typedef dap_stream_ch_chain_net_srv_pkt_test_t pkt_test_t; + if (l_ch_pkt->hdr.data_size < sizeof(pkt_test_t)) { + log_it(L_WARNING, "Wrong CHECK_REQUEST size %u, must be at least %zu", l_ch_pkt->hdr.data_size, sizeof(pkt_test_t)); + return false; + } pkt_test_t *l_request = (pkt_test_t*)l_ch_pkt->data; size_t l_request_size = l_request->data_size + sizeof(pkt_test_t); if (l_ch_pkt->hdr.data_size != l_request_size) { - log_it(L_WARNING, "Wrong request size %u, must be %zu [pkt seq %"DAP_UINT64_FORMAT_U"]", l_ch_pkt->hdr.data_size, l_request_size, l_ch_pkt->hdr.seq_id); + log_it(L_WARNING, "Wrong CHECK_REQUEST size %u, must be %zu [pkt seq %"DAP_UINT64_FORMAT_U"]", l_ch_pkt->hdr.data_size, l_request_size, l_ch_pkt->hdr.seq_id); l_err.code = DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_WRONG_SIZE; dap_stream_ch_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR, &l_err, sizeof(l_err)); return false; } + if(l_request->data_size_recv > DAP_CHAIN_NET_SRV_CH_REQUEST_SIZE_MAX) { + log_it(L_WARNING, "Too large payload %zu [pkt seq %"DAP_UINT64_FORMAT_U"]", l_request->data_size_recv, l_ch_pkt->hdr.seq_id); + l_err.code = DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_BIG_SIZE; + dap_stream_ch_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR, &l_err, sizeof(l_err)); + return false; + } dap_chain_hash_fast_t l_data_hash; dap_hash_fast(l_request->data, l_request->data_size, &l_data_hash); if (l_request->data_size > 0 && !dap_hash_fast_compare(&l_data_hash, &l_request->data_hash)) { @@ -1205,12 +1215,6 @@ static bool s_stream_ch_packet_in(dap_stream_ch_t *a_ch, void *a_arg) dap_stream_ch_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR, &l_err, sizeof(l_err)); return false; } - if(l_request->data_size_recv > UINT_MAX) { - log_it(L_WARNING, "Too large payload %zu [pkt seq %"DAP_UINT64_FORMAT_U"]", l_request->data_size_recv, l_ch_pkt->hdr.seq_id); - l_err.code = DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_BIG_SIZE; - dap_stream_ch_pkt_write_unsafe(a_ch, DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR, &l_err, sizeof(l_err)); - return false; - } /* No need for bare copying, resend it back modified */ if (l_request->data_size_recv) { l_request->data_size = l_request->data_size_recv; @@ -1240,7 +1244,7 @@ static bool s_stream_ch_packet_in(dap_stream_ch_t *a_ch, void *a_arg) case DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_REQUEST: { //Service request if (l_ch_pkt->hdr.data_size < sizeof(dap_stream_ch_chain_net_srv_pkt_request_hdr_t) ){ - log_it( L_WARNING, "Wrong request size, less than minimum"); + log_it( L_WARNING, "Wrong request size %u, less than minimum %zu", l_ch_pkt->hdr.data_size, sizeof(dap_stream_ch_chain_net_srv_pkt_request_hdr_t)); return false; } dap_stream_ch_chain_net_srv_pkt_request_t *l_request = (dap_stream_ch_chain_net_srv_pkt_request_t*)l_ch_pkt->data; @@ -1265,7 +1269,7 @@ static bool s_stream_ch_packet_in(dap_stream_ch_t *a_ch, void *a_arg) }else if (l_usage->receipt ){ // If we sign first receipt DAP_DEL_Z(l_usage->receipt); } - break; + return false; } dap_chain_datum_tx_receipt_t * l_receipt = (dap_chain_datum_tx_receipt_t *) l_ch_pkt->data; size_t l_receipt_size = l_ch_pkt->hdr.data_size; @@ -1504,15 +1508,19 @@ static bool s_stream_ch_packet_in(dap_stream_ch_t *a_ch, void *a_arg) } break; case DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_DATA: { - if (l_ch_pkt->hdr.data_size < sizeof(dap_stream_ch_chain_net_srv_pkt_data_hdr_t) ){ - log_it( L_WARNING, "Wrong request size, less than minimum"); - break; - } typedef dap_stream_ch_chain_net_srv_pkt_data_t pkt_t; + if (l_ch_pkt->hdr.data_size < sizeof(pkt_t)) { + log_it( L_WARNING, "Wrong request size %u, less than minimum %zu", l_ch_pkt->hdr.data_size, sizeof(pkt_t)); + return false; + } pkt_t * l_pkt =(pkt_t *) l_ch_pkt->data; size_t l_pkt_size = l_ch_pkt->hdr.data_size - sizeof(pkt_t); + if (l_pkt_size != l_pkt->hdr.data_size) { + log_it( L_WARNING, "Wrong request size %zu, expected %hu", l_pkt_size, l_pkt->hdr.data_size); + return false; + } dap_chain_net_srv_t * l_srv = dap_chain_net_srv_get( l_pkt->hdr.srv_uid); - dap_chain_net_srv_usage_t * l_usage = l_srv_session->usage_active;//dap_chain_net_srv_usage_find_unsafe( l_srv_session, l_pkt->hdr.usage_id ); + dap_chain_net_srv_usage_t * l_usage = l_srv_session->usage_active; // If service not found if ( l_srv == NULL){ l_err.code = DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_SERVICE_NOT_FOUND ; @@ -1549,6 +1557,11 @@ static bool s_stream_ch_packet_in(dap_stream_ch_t *a_ch, void *a_arg) } } break; case DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_NEW_TX_COND_RESPONSE:{ + if (l_ch_pkt->hdr.data_size != sizeof(dap_stream_ch_chain_net_srv_pkt_request_hdr_t) ){ + log_it( L_WARNING, "Wrong request size %u, expected %zu", + l_ch_pkt->hdr.data_size, sizeof(dap_stream_ch_chain_net_srv_pkt_request_hdr_t)); + return false; + } dap_chain_net_srv_usage_t * l_usage = NULL; l_usage = l_srv_session->usage_active; dap_stream_ch_chain_net_srv_pkt_request_t* l_responce = (dap_stream_ch_chain_net_srv_pkt_request_t*)l_ch_pkt->data; diff --git a/modules/channel/chain-net-srv/include/dap_stream_ch_chain_net_srv_pkt.h b/modules/channel/chain-net-srv/include/dap_stream_ch_chain_net_srv_pkt.h index 9da89fdedb07ccfb9f4d8b314cd117d9b39cfd6a..3bca41c7ed362b4ebda3893e9fa3c31f0748cfff 100644 --- a/modules/channel/chain-net-srv/include/dap_stream_ch_chain_net_srv_pkt.h +++ b/modules/channel/chain-net-srv/include/dap_stream_ch_chain_net_srv_pkt.h @@ -33,6 +33,115 @@ along with any CellFrame SDK based project. If not, see <http://www.gnu.org/lic #include "dap_chain_net_srv_stream_session.h" +// Ch pkt types +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_REQUEST 0x01 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_SIGN_REQUEST 0x10 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_SIGN_RESPONSE 0x11 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_NOTIFY_STOPPED 0x20 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_DATA 0x30 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_DATA 0x31 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_NEW_TX_COND_REQUEST 0x40 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_NEW_TX_COND_RESPONSE 0x41 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_SUCCESS 0xf0 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR 0xff +// for connection testing +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_CHECK_REQUEST 0x50 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_CHECK_RESPONSE 0x51 + +#define DAP_CHAIN_NET_SRV_CH_REQUEST_SIZE_MAX 10240 //4096 + +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_UNDEFINED 0x00000000 + +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_SERVICE_NOT_FOUND 0x00000100 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_SERVICE_CH_NOT_FOUND 0x00000101 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_SERVICE_IN_CLIENT_MODE 0x00000102 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_NETWORK_NOT_FOUND 0x00000200 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_NETWORK_NO_LEDGER 0x00000201 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_NETWORK_IS_OFFLINE 0x00000202 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_CANT_ADD_USAGE 0x00000300 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_TX_COND_NOT_FOUND 0x00000400 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_TX_COND_NO_COND_OUT 0x00000401 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_TX_COND_NOT_ENOUGH 0x00000402 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_TX_COND_NOT_ACCEPT_TOKEN 0x00000403 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_TX_COND_WRONG_SRV_UID 0x00000404 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_TX_COND_NO_NEW_COND 0x00000405 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_WRONG_SIZE 0x00000406 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_BIG_SIZE 0x00000407 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_NEW_TX_COND_NOT_ENOUGH 0x00000408 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_RECEIPT_CANT_FIND 0x00000500 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_RECEIPT_NO_SIGN 0x00000501 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_RECEIPT_WRONG_PKEY_HASH 0x00000502 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_RECEIPT_BANNED_PKEY_HASH 0x00000503 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_RECEIPT_IS_NOT_PRESENT 0x00000504 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_PRICE_NOT_FOUND 0x00000600 +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_WRONG_HASH 0x00000BAD +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_ALLOC_MEMORY_ERROR 0x00BADA55 + + +#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_UNKNOWN 0xffffffff +// TYPE_REQUEST +typedef struct dap_stream_ch_chain_net_srv_pkt_request_hdr{ + dap_chain_net_id_t net_id;// Network id wheither to request + dap_chain_hash_fast_t tx_cond; // Conditioned transaction with paymemt for + dap_chain_net_srv_uid_t srv_uid; + char token[DAP_CHAIN_TICKER_SIZE_MAX]; + dap_chain_hash_fast_t client_pkey_hash; + dap_chain_hash_fast_t order_hash; +} DAP_ALIGN_PACKED dap_stream_ch_chain_net_srv_pkt_request_hdr_t; + +typedef struct dap_stream_ch_chain_net_srv_pkt_request{ + dap_stream_ch_chain_net_srv_pkt_request_hdr_t hdr; + uint8_t data[]; +} DAP_ALIGN_PACKED dap_stream_ch_chain_net_srv_pkt_request_t; + +// Custom service data packet +typedef struct dap_stream_ch_chain_net_srv_pkt_data_hdr{ + uint8_t version; + uint16_t data_size; + uint8_t padding; + uint32_t usage_id; + dap_chain_net_srv_uid_t srv_uid; +} DAP_ALIGN_PACKED dap_stream_ch_chain_net_srv_pkt_data_hdr_t; + +typedef struct dap_stream_ch_chain_net_srv_pkt_data{ + dap_stream_ch_chain_net_srv_pkt_data_hdr_t hdr; + uint8_t data[]; +} DAP_ALIGN_PACKED dap_stream_ch_chain_net_srv_pkt_data_t; + + +typedef struct dap_stream_ch_chain_net_srv_pkt_success_hdr{ + uint32_t usage_id; + dap_chain_net_id_t net_id; + dap_chain_net_srv_uid_t srv_uid; +} DAP_ALIGN_PACKED dap_stream_ch_chain_net_srv_pkt_success_hdr_t; + +typedef struct dap_stream_ch_chain_net_srv_pkt_success{ + dap_stream_ch_chain_net_srv_pkt_success_hdr_t hdr; + uint8_t custom_data[]; +} DAP_ALIGN_PACKED dap_stream_ch_chain_net_srv_pkt_success_t; + +// TYPE_RESPONSE_ERROR +typedef struct dap_stream_ch_chain_net_srv_pkt_error{ + dap_chain_net_id_t net_id; + dap_chain_net_srv_uid_t srv_uid; + uint32_t usage_id; + uint32_t code; // error code +} DAP_ALIGN_PACKED dap_stream_ch_chain_net_srv_pkt_error_t; + +// data packet for connectiont test +typedef struct dap_stream_ch_chain_net_srv_pkt_test { + uint32_t usage_id; + dap_chain_net_id_t net_id; + dap_chain_net_srv_uid_t srv_uid; + int32_t time_connect_ms; + dap_nanotime_t recv_time1, recv_time2, send_time1, send_time2; + char host_send[DAP_HOSTADDR_STRLEN], host_recv[DAP_HOSTADDR_STRLEN]; + int32_t err_code; + uint64_t data_size_send, data_size_recv, data_size; + dap_chain_hash_fast_t data_hash; + uint8_t data[]; +} DAP_ALIGN_PACKED dap_stream_ch_chain_net_srv_pkt_test_t; + size_t dap_stream_ch_chain_net_srv_pkt_data_write(dap_stream_ch_t *a_ch, dap_chain_net_srv_uid_t a_srv_uid, uint32_t a_usage_id , diff --git a/modules/common/dap_chain_datum_tx_receipt.c b/modules/common/dap_chain_datum_tx_receipt.c index 068bd365b83e2be92812e311cedf8c8d007b005a..c21099f921225284537647f54974dc7b602e3f35 100644 --- a/modules/common/dap_chain_datum_tx_receipt.c +++ b/modules/common/dap_chain_datum_tx_receipt.c @@ -93,15 +93,17 @@ dap_chain_datum_tx_receipt_t *dap_chain_datum_tx_receipt_sign_add(dap_chain_datu * @param a_sign_position * @return */ -dap_sign_t* dap_chain_datum_tx_receipt_sign_get(dap_chain_datum_tx_receipt_t * l_receipt, size_t l_receipt_size, uint16_t a_sign_position) +dap_sign_t* dap_chain_datum_tx_receipt_sign_get(dap_chain_datum_tx_receipt_t *a_receipt, size_t a_receipt_size, uint16_t a_sign_position) { - if (!l_receipt || l_receipt_size != l_receipt->size || - l_receipt->size == sizeof(dap_chain_datum_tx_receipt_t) + l_receipt->exts_size) - return NULL; - dap_sign_t *l_sign = (dap_sign_t *)l_receipt->exts_n_signs + l_receipt->exts_size; + dap_return_val_if_fail(a_receipt && a_receipt_size == a_receipt->size && + a_receipt_size >= sizeof(dap_chain_datum_tx_receipt_t) + a_receipt->exts_size, + NULL); + if (a_receipt_size < sizeof(dap_chain_datum_tx_receipt_t) + a_receipt->exts_size + sizeof(dap_sign_t)) + return NULL; // No signs at all + dap_sign_t *l_sign = (dap_sign_t *)(a_receipt->exts_n_signs + a_receipt->exts_size); uint16_t l_sign_position; for (l_sign_position = a_sign_position; - l_sign_position && l_receipt_size > (size_t)((byte_t *)l_sign - (byte_t *)l_receipt); + l_sign_position && a_receipt_size > (size_t)((byte_t *)l_sign - (byte_t *)a_receipt) + sizeof(dap_sign_t); l_sign_position--) { l_sign = (dap_sign_t *)((byte_t *)l_sign + dap_sign_get_size(l_sign)); } @@ -109,35 +111,31 @@ dap_sign_t* dap_chain_datum_tx_receipt_sign_get(dap_chain_datum_tx_receipt_t * l if (l_sign_position > 0) return NULL; // too big sign size - if ((size_t)(l_sign->header.sign_size + ((byte_t *)l_sign - l_receipt->exts_n_signs)) >= l_receipt->size) + if (dap_sign_get_size(l_sign) + ((byte_t *)l_sign - a_receipt->exts_n_signs) + sizeof(dap_chain_datum_tx_receipt_t) > a_receipt_size) return NULL; return l_sign; } -uint32_t dap_chain_datum_tx_receipt_type_get(dap_chain_datum_tx_receipt_t * l_receipt) +uint32_t dap_chain_datum_tx_receipt_type_get(dap_chain_datum_tx_receipt_t *a_receipt) { - if (!l_receipt) - return -1; - return l_receipt->receipt_info.units_type.enm; + dap_return_val_if_fail(a_receipt, -1); + return a_receipt->receipt_info.units_type.enm; } -uint64_t dap_chain_datum_tx_receipt_srv_uid_get(dap_chain_datum_tx_receipt_t * l_receipt) + +uint64_t dap_chain_datum_tx_receipt_srv_uid_get(dap_chain_datum_tx_receipt_t *a_receipt) { - if (!l_receipt) - return -1; - return l_receipt->receipt_info.srv_uid.uint64; + dap_return_val_if_fail(a_receipt, -1) + return a_receipt->receipt_info.srv_uid.uint64; } -uint64_t dap_chain_datum_tx_receipt_units_get(dap_chain_datum_tx_receipt_t * l_receipt) +uint64_t dap_chain_datum_tx_receipt_units_get(dap_chain_datum_tx_receipt_t *a_receipt) { - if (!l_receipt) - return -1; - return l_receipt->receipt_info.units; + dap_return_val_if_fail(a_receipt, -1); + return a_receipt->receipt_info.units; } -uint256_t dap_chain_datum_tx_receipt_value_get(dap_chain_datum_tx_receipt_t * l_receipt) +uint256_t dap_chain_datum_tx_receipt_value_get(dap_chain_datum_tx_receipt_t *a_receipt) { - uint256_t res = {}; - if (!l_receipt) - return res; - return l_receipt->receipt_info.value_datoshi; + dap_return_val_if_fail(a_receipt, uint256_0); + return a_receipt->receipt_info.value_datoshi; } /** diff --git a/modules/common/include/dap_chain_datum_tx_receipt.h b/modules/common/include/dap_chain_datum_tx_receipt.h index b8de175ec636e029e46f406fb92eb72c31ddfa05..cbbb246d2ac7caff59dab448d94f0506233628e7 100644 --- a/modules/common/include/dap_chain_datum_tx_receipt.h +++ b/modules/common/include/dap_chain_datum_tx_receipt.h @@ -62,12 +62,12 @@ dap_chain_datum_tx_receipt_t * dap_chain_datum_tx_receipt_create(dap_chain_net_s dap_chain_datum_tx_receipt_t *dap_chain_datum_tx_receipt_sign_add(dap_chain_datum_tx_receipt_t *a_receipt, dap_enc_key_t *a_key); json_object *dap_chain_receipt_info_to_json(dap_chain_receipt_info_t *a_info); json_object *dap_chain_datum_tx_receipt_to_json(dap_chain_datum_tx_receipt_t *a_receipt); -dap_sign_t* dap_chain_datum_tx_receipt_sign_get(dap_chain_datum_tx_receipt_t * l_receipt, size_t l_receipt_size , uint16_t sign_position); -uint32_t dap_chain_datum_tx_receipt_utype_get(dap_chain_datum_tx_receipt_t * l_receipt); -uint64_t dap_chain_datum_tx_receipt_srv_uid_get(dap_chain_datum_tx_receipt_t * l_receipt); -uint64_t dap_chain_datum_tx_receipt_units_get(dap_chain_datum_tx_receipt_t * l_receipt); -uint256_t dap_chain_datum_tx_receipt_value_get(dap_chain_datum_tx_receipt_t * l_receipt); -uint16_t dap_chain_datum_tx_receipt_signs_count(dap_chain_datum_tx_receipt_t * l_receipt, size_t l_receipt_size); +dap_sign_t* dap_chain_datum_tx_receipt_sign_get(dap_chain_datum_tx_receipt_t *a_receipt, size_t a_receipt_size , uint16_t sign_position); +uint32_t dap_chain_datum_tx_receipt_utype_get(dap_chain_datum_tx_receipt_t *a_receipt); +uint64_t dap_chain_datum_tx_receipt_srv_uid_get(dap_chain_datum_tx_receipt_t *a_receipt); +uint64_t dap_chain_datum_tx_receipt_units_get(dap_chain_datum_tx_receipt_t *a_receipt); +uint256_t dap_chain_datum_tx_receipt_value_get(dap_chain_datum_tx_receipt_t *a_receipt); +uint16_t dap_chain_datum_tx_receipt_signs_count(dap_chain_datum_tx_receipt_t *a_receipt, size_t a_receipt_size); #ifdef __cplusplus } diff --git a/modules/net/srv/include/dap_chain_net_srv.h b/modules/net/srv/include/dap_chain_net_srv.h index c524cb3a91872d44780ed1e4f799d845fe01f0a1..b6510231d08b5354d215fb147358d994e9f11409 100755 --- a/modules/net/srv/include/dap_chain_net_srv.h +++ b/modules/net/srv/include/dap_chain_net_srv.h @@ -31,6 +31,7 @@ along with any CellFrame SDK based project. If not, see <http://www.gnu.org/lic #include "dap_common.h" #include "dap_stream_ch.h" #include "dap_time.h" +#include "dap_stream_ch_chain_net_srv_pkt.h" #define DAP_CHAIN_NET_SRV_GRACE_PERIOD_DEFAULT 60 @@ -87,113 +88,6 @@ typedef struct dap_chain_net_srv_price struct dap_chain_net_srv_price *prev; } dap_chain_net_srv_price_t; -// Ch pkt types -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_REQUEST 0x01 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_SIGN_REQUEST 0x10 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_SIGN_RESPONSE 0x11 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_NOTIFY_STOPPED 0x20 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_DATA 0x30 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_DATA 0x31 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_NEW_TX_COND_REQUEST 0x40 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_NEW_TX_COND_RESPONSE 0x41 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_SUCCESS 0xf0 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR 0xff -// for connection testing -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_CHECK_REQUEST 0x50 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_CHECK_RESPONSE 0x51 - -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_UNDEFINED 0x00000000 - -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_SERVICE_NOT_FOUND 0x00000100 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_SERVICE_CH_NOT_FOUND 0x00000101 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_SERVICE_IN_CLIENT_MODE 0x00000102 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_NETWORK_NOT_FOUND 0x00000200 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_NETWORK_NO_LEDGER 0x00000201 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_NETWORK_IS_OFFLINE 0x00000202 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_CANT_ADD_USAGE 0x00000300 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_TX_COND_NOT_FOUND 0x00000400 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_TX_COND_NO_COND_OUT 0x00000401 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_TX_COND_NOT_ENOUGH 0x00000402 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_TX_COND_NOT_ACCEPT_TOKEN 0x00000403 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_TX_COND_WRONG_SRV_UID 0x00000404 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_TX_COND_NO_NEW_COND 0x00000405 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_WRONG_SIZE 0x00000406 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_BIG_SIZE 0x00000407 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_NEW_TX_COND_NOT_ENOUGH 0x00000408 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_RECEIPT_CANT_FIND 0x00000500 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_RECEIPT_NO_SIGN 0x00000501 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_RECEIPT_WRONG_PKEY_HASH 0x00000502 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_RECEIPT_BANNED_PKEY_HASH 0x00000503 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_RECEIPT_IS_NOT_PRESENT 0x00000504 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_PRICE_NOT_FOUND 0x00000600 -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_WRONG_HASH 0x00000BAD -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_ALLOC_MEMORY_ERROR 0x00BADA55 - - -#define DAP_STREAM_CH_CHAIN_NET_SRV_PKT_TYPE_RESPONSE_ERROR_CODE_UNKNOWN 0xffffffff -// TYPE_REQUEST -typedef struct dap_stream_ch_chain_net_srv_pkt_request_hdr{ - dap_chain_net_id_t net_id;// Network id wheither to request - dap_chain_hash_fast_t tx_cond; // Conditioned transaction with paymemt for - dap_chain_net_srv_uid_t srv_uid; - char token[DAP_CHAIN_TICKER_SIZE_MAX]; - dap_chain_hash_fast_t client_pkey_hash; - dap_chain_hash_fast_t order_hash; -} DAP_ALIGN_PACKED dap_stream_ch_chain_net_srv_pkt_request_hdr_t; - -typedef struct dap_stream_ch_chain_net_srv_pkt_request{ - dap_stream_ch_chain_net_srv_pkt_request_hdr_t hdr; - uint8_t data[]; -} DAP_ALIGN_PACKED dap_stream_ch_chain_net_srv_pkt_request_t; - -// Custom service data packet -typedef struct dap_stream_ch_chain_net_srv_pkt_data_hdr{ - uint8_t version; - uint16_t data_size; - uint8_t padding; - uint32_t usage_id; - dap_chain_net_srv_uid_t srv_uid; -} DAP_ALIGN_PACKED dap_stream_ch_chain_net_srv_pkt_data_hdr_t; - -typedef struct dap_stream_ch_chain_net_srv_pkt_data{ - dap_stream_ch_chain_net_srv_pkt_data_hdr_t hdr; - uint8_t data[]; -} DAP_ALIGN_PACKED dap_stream_ch_chain_net_srv_pkt_data_t; - - -typedef struct dap_stream_ch_chain_net_srv_pkt_success_hdr{ - uint32_t usage_id; - dap_chain_net_id_t net_id; - dap_chain_net_srv_uid_t srv_uid; -} DAP_ALIGN_PACKED dap_stream_ch_chain_net_srv_pkt_success_hdr_t; - -typedef struct dap_stream_ch_chain_net_srv_pkt_success{ - dap_stream_ch_chain_net_srv_pkt_success_hdr_t hdr; - uint8_t custom_data[]; -} DAP_ALIGN_PACKED dap_stream_ch_chain_net_srv_pkt_success_t; - -// TYPE_RESPONSE_ERROR -typedef struct dap_stream_ch_chain_net_srv_pkt_error{ - dap_chain_net_id_t net_id; - dap_chain_net_srv_uid_t srv_uid; - uint32_t usage_id; - uint32_t code; // error code -} DAP_ALIGN_PACKED dap_stream_ch_chain_net_srv_pkt_error_t; - -// data packet for connectiont test -typedef struct dap_stream_ch_chain_net_srv_pkt_test { - uint32_t usage_id; - dap_chain_net_id_t net_id; - dap_chain_net_srv_uid_t srv_uid; - int32_t time_connect_ms; - dap_nanotime_t recv_time1, recv_time2, send_time1, send_time2; - char host_send[DAP_HOSTADDR_STRLEN], host_recv[DAP_HOSTADDR_STRLEN]; - int32_t err_code; - uint64_t data_size_send, data_size_recv, data_size; - dap_chain_hash_fast_t data_hash; - uint8_t data[]; -} DAP_ALIGN_PACKED dap_stream_ch_chain_net_srv_pkt_test_t; - typedef struct dap_chain_net_srv dap_chain_net_srv_t; typedef struct dap_chain_net_srv_usage dap_chain_net_srv_usage_t; diff --git a/modules/net/srv/include/dap_chain_net_srv_stream_session.h b/modules/net/srv/include/dap_chain_net_srv_stream_session.h index 3ec4c2c7973f58d588742e80f3f8259f7cdd34ea..4209f0a89991317ebd2ef08106c5194fea3800e2 100644 --- a/modules/net/srv/include/dap_chain_net_srv_stream_session.h +++ b/modules/net/srv/include/dap_chain_net_srv_stream_session.h @@ -31,11 +31,11 @@ along with any CellFrame SDK based project. If not, see <http://www.gnu.org/lic #include "dap_sign.h" #include "dap_chain_datum_tx.h" #include "dap_chain_datum_tx_receipt.h" -#include "dap_chain_net_srv.h" #include "dap_chain_wallet.h" typedef struct dap_chain_net_srv dap_chain_net_srv_t; typedef struct dap_chain_net_srv_client_remote dap_chain_net_srv_client_remote_t; +typedef struct dap_chain_net_srv_price dap_chain_net_srv_price_t; typedef struct dap_chain_net_srv_usage{ uint32_t id; // Usage id diff --git a/modules/service/vpn/dap_chain_net_vpn_client.c b/modules/service/vpn/dap_chain_net_vpn_client.c index df23f1f0e6e724586b4817d77171e1e2eda2d3c2..3478c73d2e3e243ebf92e080836fc77f97df9924 100644 --- a/modules/service/vpn/dap_chain_net_vpn_client.c +++ b/modules/service/vpn/dap_chain_net_vpn_client.c @@ -494,11 +494,11 @@ char *dap_chain_net_vpn_client_check_result(dap_chain_net_t *a_net, const char* int dap_chain_net_vpn_client_check(dap_chain_net_t *a_net, const char *a_host, uint16_t a_port, size_t a_data_size_to_send, size_t a_data_size_to_recv, int a_timeout_test_ms) { dap_return_val_if_fail(a_net && a_host && (*a_host) && a_port, -1); - // default 10k + // default 1k if(a_data_size_to_send== (size_t) -1) - a_data_size_to_send = 10240; + a_data_size_to_send = 1024; if(a_data_size_to_recv== (size_t) -1) - a_data_size_to_recv = 10240; + a_data_size_to_recv = 1024; // default 10 sec = 10000 ms if(a_timeout_test_ms==-1) a_timeout_test_ms = 10000;