Skip to content
Snippets Groups Projects
Commit 17a058bf authored by Dmitriy A. Gerasimov's avatar Dmitriy A. Gerasimov
Browse files

[-] Old useless stuff

[+] Callback and fields for receipt-by-receipt signing process
[+] Limitations update by timestamp and by traffic
parent a6dff403
No related branches found
No related tags found
No related merge requests found
......@@ -50,6 +50,7 @@
#include "dap_chain_net.h"
#include "dap_chain_net_srv.h"
#include "dap_chain_net_srv_order.h"
#include "dap_chain_net_srv_stream_session.h"
#include "dap_chain_node_cli_cmd.h"
......@@ -398,7 +399,9 @@ static int s_cli_net_srv( int argc, char **argv, char **a_str_reply)
* @return
*/
dap_chain_net_srv_t* dap_chain_net_srv_add(dap_chain_net_srv_uid_t a_uid,dap_chain_net_srv_callback_data_t a_callback_request,
dap_chain_net_srv_callback_data_t a_callback_response_success,dap_chain_net_srv_callback_data_t a_callback_response_error)
dap_chain_net_srv_callback_data_t a_callback_response_success,
dap_chain_net_srv_callback_data_t a_callback_response_error,
dap_chain_net_srv_callback_data_t a_callback_receipt_next_success)
{
service_list_t *l_sdata = NULL;
dap_chain_net_srv_t * l_srv = NULL;
......@@ -409,8 +412,9 @@ dap_chain_net_srv_t* dap_chain_net_srv_add(dap_chain_net_srv_uid_t a_uid,dap_cha
l_srv = DAP_NEW_Z(dap_chain_net_srv_t);
l_srv->uid.uint64 = a_uid.uint64;
l_srv->callback_requested = a_callback_request;
l_srv->callback_response_success = a_callback_response_success;
l_srv->callback_receipt_first_success = a_callback_response_success;
l_srv->callback_response_error = a_callback_response_error;
l_srv->callback_receipt_next_success = a_callback_receipt_next_success;
l_sdata = DAP_NEW_Z(service_list_t);
memcpy(&l_sdata->uid, &l_uid, sizeof(l_uid));
l_sdata->srv = DAP_NEW(dap_chain_net_srv_t);
......@@ -522,3 +526,30 @@ const dap_chain_net_srv_uid_t * dap_chain_net_srv_list(void)
return l_srv_uids;
}
/**
* @brief dap_chain_net_srv_issue_receipt
* @param a_srv
* @param a_usage
* @param a_price
* @return
*/
dap_chain_datum_tx_receipt_t * dap_chain_net_srv_issue_receipt(dap_chain_net_srv_t *a_srv,
dap_chain_net_srv_usage_t * a_usage,
dap_chain_net_srv_price_t * a_price
)
{
dap_chain_datum_tx_receipt_t * l_receipt = dap_chain_datum_tx_receipt_create(
a_srv->uid, a_price->units_uid, a_price->units, a_price->value_datoshi);
size_t l_receipt_size = sizeof(dap_chain_receipt_t)+1; // nested receipt plus 8 bits for type
// Sign with our wallet
l_receipt_size = dap_chain_datum_tx_receipt_sign_add(l_receipt,l_receipt_size , dap_chain_wallet_get_key( a_usage->wallet,0) );
a_usage->receipt = l_receipt;
a_usage->receipt_size = l_receipt_size;
a_usage->wallet = a_price->wallet;
return l_receipt;
}
......@@ -27,6 +27,7 @@ along with any CellFrame SDK based project. If not, see <http://www.gnu.org/lic
#include "dap_config.h"
#include "dap_chain_net_srv_common.h"
#include "dap_chain_net_srv_client.h"
#include "dap_chain_net_srv_stream_session.h"
typedef struct dap_chain_net_srv dap_chain_net_srv_t;
......@@ -40,8 +41,9 @@ typedef struct dap_chain_net_srv
dap_chain_net_srv_price_t *pricelist;
dap_chain_callback_trafic_t callback_trafic;
dap_chain_net_srv_callback_data_t callback_requested;
dap_chain_net_srv_callback_data_t callback_response_success;
dap_chain_net_srv_callback_data_t callback_receipt_first_success;
dap_chain_net_srv_callback_data_t callback_response_error;
dap_chain_net_srv_callback_data_t callback_receipt_next_success;
void * _inhertor;
} dap_chain_net_srv_t;
typedef void (*dap_chain_net_srv_callback_new_t)(dap_chain_net_srv_t *, dap_config_t *);
......@@ -51,10 +53,16 @@ int dap_chain_net_srv_init(dap_config_t * a_cfg);
void dap_chain_net_srv_deinit(void);
dap_chain_net_srv_t* dap_chain_net_srv_add(dap_chain_net_srv_uid_t a_uid,dap_chain_net_srv_callback_data_t a_callback_requested,
dap_chain_net_srv_callback_data_t a_callback_response_success,
dap_chain_net_srv_callback_data_t a_callback_response_error);
dap_chain_net_srv_callback_data_t a_callback_response_error,
dap_chain_net_srv_callback_data_t a_callback_receipt_next_success
);
void dap_chain_net_srv_del(dap_chain_net_srv_t * a_srv);
void dap_chain_net_srv_del_all(void);
dap_chain_net_srv_t * dap_chain_net_srv_get(dap_chain_net_srv_uid_t a_uid);
size_t dap_chain_net_srv_count(void);
const dap_chain_net_srv_uid_t * dap_chain_net_srv_list(void);
dap_chain_datum_tx_receipt_t * dap_chain_net_srv_issue_receipt(dap_chain_net_srv_t *a_srv,
dap_chain_net_srv_usage_t * a_usage,
dap_chain_net_srv_price_t * a_price
);
......@@ -47,83 +47,3 @@
#include "dap_chain_net_srv_key.h"
#include "dap_chain_net_srv_common.h"
/**
* copy a_value_dst to a_uid_src
*/
void dap_chain_net_srv_uid_set(dap_chain_net_srv_uid_t *a_uid_src, uint128_t a_value_dst)
{
memset(a_uid_src->raw, 0, sizeof(a_uid_src->raw));
memcpy(a_uid_src->raw, &a_value_dst, min(sizeof(a_uid_src->raw), sizeof(uint128_t)));
}
/**
* Generate unique id for service
*/
bool dap_chain_net_srv_gen_uid(uint8_t *a_srv, size_t a_srv_size)
{
if(!a_srv)
return false;
randombytes(a_srv, a_srv_size);
return true;
}
/**
* Initialize dap_chain_net_srv_abstract_t structure
*/
void dap_chain_net_srv_abstract_set(dap_chain_net_srv_abstract_t *a_cond, uint8_t a_class, uint128_t a_type_id,
uint64_t a_price, uint8_t a_price_units, const char *a_decription)
{
memset(a_cond, 0, sizeof(dap_chain_net_srv_abstract_t));
// generate unique proposal_id
//dap_chain_net_srv_gen_uid((uint8_t*) &a_cond->proposal_id, sizeof(a_cond->proposal_id));
// fill structure
a_cond->class = a_class;
dap_chain_net_srv_uid_set(&a_cond->type_id, a_type_id);
a_cond->price = a_price;
a_cond->price_units = a_price_units;
if(a_decription)
strncpy(a_cond->decription, a_decription, sizeof(a_cond->decription) - 1);
}
/**
*
*/
uint64_t dap_chain_net_srv_client_auth(dap_ledger_t *a_ledger,
const char *a_service_key, const dap_chain_net_srv_abstract_t **a_cond_out)
{
char *l_addr_base58;
char *l_sign_hash_str;
if(dap_chain_net_srv_key_parse(a_service_key, &l_addr_base58, &l_sign_hash_str)) {
return 0;
}
if(!dap_chain_net_srv_key_check(l_addr_base58, l_sign_hash_str)) {
// invalid signature
return 0;
}
dap_chain_addr_t *l_addr = (l_addr_base58) ? dap_chain_addr_from_str(l_addr_base58) : NULL;
dap_chain_tx_out_cond_t *l_tx_out_cond = NULL;
dap_sign_type_t l_sig_type;
if(l_addr)
memcpy(&l_sig_type, &l_addr->sig_type, sizeof(dap_sign_type_t));
// Search all value in transactions with l_addr in 'out_cond' item
uint64_t l_value = dap_chain_ledger_tx_cache_get_out_cond_value(a_ledger, l_addr, &l_tx_out_cond);
DAP_DELETE(l_addr);
// not found transaction with l_addr in 'out_cond' item
if(!l_value)
return 0;
size_t l_pkey_size = 0;
size_t l_cond_size = 0;
uint8_t *l_cond = dap_chain_datum_tx_out_cond_item_get_params(l_tx_out_cond, &l_cond_size);
//uint8_t *l_pkey = dap_chain_datum_tx_out_cond_item_get_pkey(l_tx_out_cond, &l_pkey_size);
if(l_cond_size != sizeof(dap_chain_net_srv_abstract_t)) {
return 0;
}
if(a_cond_out)
*a_cond_out = (const dap_chain_net_srv_abstract_t*) l_cond;
return l_value;
}
......@@ -153,16 +153,3 @@ DAP_STATIC_INLINE const char * dap_chain_net_srv_price_unit_uid_to_str( dap_chai
default: return "UNKNOWN";
}
}
// Initialize dap_chain_net_srv_abstract_t structure
void dap_chain_net_srv_abstract_set(dap_chain_net_srv_abstract_t *a_cond, uint8_t a_class, uint128_t a_type_id,
uint64_t a_price, uint8_t a_price_units, const char *a_decription);
// copy a_value_dst to a_uid_src
void dap_chain_net_srv_uid_set(dap_chain_net_srv_uid_t *a_uid_src, uint128_t a_value_dst);
// generate new dap_chain_net_srv_uid_t
bool dap_chain_net_srv_gen_uid(uint8_t *a_srv, size_t a_srv_size);
uint64_t dap_chain_net_srv_client_auth(dap_ledger_t *a_ledger,
const char *a_service_key, const dap_chain_net_srv_abstract_t **a_cond_out);
......@@ -24,6 +24,7 @@ along with any CellFrame SDK based project. If not, see <http://www.gnu.org/lic
#include "dap_common.h"
#include "rand/dap_rand.h"
#include "dap_chain_net_srv.h"
#include "dap_chain_net_srv_stream_session.h"
#define LOG_TAG "dap_stream_ch_chain_net_srv_session"
......
......@@ -31,10 +31,12 @@ 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_net_srv.h"
#include "dap_chain_net_srv_order.h"
#include "dap_chain_net_srv_client.h"
#include "dap_chain_wallet.h"
typedef struct dap_chain_net_srv dap_chain_net_srv_t;
typedef struct dap_chain_net_srv_usage{
uint32_t id; // Usage id
pthread_rwlock_t rwlock;
......@@ -42,8 +44,12 @@ typedef struct dap_chain_net_srv_usage{
dap_chain_net_t * net; // Chain network where everything happens
dap_chain_wallet_t * wallet;
dap_chain_net_srv_t * service; // Service that used
dap_chain_datum_tx_receipt_t* receipt;
dap_chain_datum_tx_receipt_t* receipt_next; // Receipt on the next units amount
dap_chain_net_srv_price_t * price; // Price for issue next receipt
size_t receipt_size;
size_t receipt_next_size;
dap_chain_net_srv_client_t * clients;
dap_chain_datum_tx_t * tx_cond;
dap_chain_hash_fast_t tx_cond_hash;
......@@ -56,8 +62,11 @@ typedef struct dap_chain_net_srv_stream_session {
dap_stream_session_t * parent;
dap_chain_net_srv_usage_t * usages;
dap_chain_net_srv_usage_t * usage_active;
uint64_t bytes_sent;
uint64_t bytes_received;
uint128_t limits_bytes; // Bytes left
time_t limits_ts; // Timestamp until its activte
dap_chain_net_srv_price_unit_uid_t limits_units_type;
time_t ts_activated;
dap_sign_t* user_sign; // User's signature for auth if reconnect
} dap_chain_net_srv_stream_session_t;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment