Implemented put_value
This commit is contained in:
parent
5712e920d1
commit
e922c7ef14
2 changed files with 39 additions and 15 deletions
|
@ -320,7 +320,7 @@ int libp2p_routing_dht_handle_add_provider(struct SessionContext* session, struc
|
||||||
* @param message the message
|
* @param message the message
|
||||||
* @param peerstore the peerstore
|
* @param peerstore the peerstore
|
||||||
* @param providerstore the providerstore
|
* @param providerstore the providerstore
|
||||||
* @param result_buffer the results
|
* @param result_buffer the results, as a protobuf'd KademliaMessage
|
||||||
* @param result_buffer_size the size of the results
|
* @param result_buffer_size the size of the results
|
||||||
* @returns true(1) on success, otherwise false(0)
|
* @returns true(1) on success, otherwise false(0)
|
||||||
*/
|
*/
|
||||||
|
@ -364,14 +364,38 @@ int libp2p_routing_dht_handle_get_value(struct SessionContext* session, struct K
|
||||||
* @param message the message
|
* @param message the message
|
||||||
* @param peerstore the peerstore
|
* @param peerstore the peerstore
|
||||||
* @param providerstore the providerstore
|
* @param providerstore the providerstore
|
||||||
* @param result_buffer the results
|
|
||||||
* @param result_buffer_size the size of the results
|
|
||||||
* @returns true(1) on success, otherwise false(0)
|
* @returns true(1) on success, otherwise false(0)
|
||||||
*/
|
*/
|
||||||
int libp2p_routing_dht_handle_put_value(struct SessionContext* session, struct KademliaMessage* message,
|
int libp2p_routing_dht_handle_put_value(struct SessionContext* session, struct KademliaMessage* message,
|
||||||
struct Peerstore* peerstore, struct ProviderStore* providerstore, unsigned char** result_buffer, size_t *result_buffer_size) {
|
struct Peerstore* peerstore, struct ProviderStore* providerstore) {
|
||||||
//TODO: implement this
|
|
||||||
|
if (message->record == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
struct DatastoreRecord* record = libp2p_datastore_record_new();
|
||||||
|
if (record == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
// set the key from the message->record->key
|
||||||
|
record->key_size = message->record->key_size;
|
||||||
|
record->key = (uint8_t*) malloc(record->key_size);
|
||||||
|
if (record->key == NULL) {
|
||||||
|
libp2p_datastore_record_free(record);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
memcpy(record->key, message->record->key, record->key_size);
|
||||||
|
// set the value from the message->record->value
|
||||||
|
record->value_size = message->record->value_size;
|
||||||
|
record->value = (uint8_t*) malloc(record->value_size);
|
||||||
|
if (record->value == NULL) {
|
||||||
|
libp2p_datastore_record_free(record);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
memcpy(record->value, message->record->value, record->value_size);
|
||||||
|
|
||||||
|
int retVal = session->datastore->datastore_put(record, session->datastore);
|
||||||
|
libp2p_datastore_record_free(record);
|
||||||
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -423,7 +447,7 @@ int libp2p_routing_dht_handle_message(struct SessionContext* session, struct Pee
|
||||||
// handle message
|
// handle message
|
||||||
switch(message->message_type) {
|
switch(message->message_type) {
|
||||||
case(MESSAGE_TYPE_PUT_VALUE): // store a value in local storage
|
case(MESSAGE_TYPE_PUT_VALUE): // store a value in local storage
|
||||||
libp2p_routing_dht_handle_put_value(session, message, peerstore, providerstore, &result_buffer, &result_buffer_size);
|
libp2p_routing_dht_handle_put_value(session, message, peerstore, providerstore);
|
||||||
break;
|
break;
|
||||||
case(MESSAGE_TYPE_GET_VALUE): // get a value from local storage
|
case(MESSAGE_TYPE_GET_VALUE): // get a value from local storage
|
||||||
libp2p_routing_dht_handle_get_value(session, message, peerstore, providerstore, &result_buffer, &result_buffer_size);
|
libp2p_routing_dht_handle_get_value(session, message, peerstore, providerstore, &result_buffer, &result_buffer_size);
|
||||||
|
|
|
@ -933,7 +933,7 @@ int libp2p_secio_handshake(struct SessionContext* local_session, struct RsaPriva
|
||||||
if (bytes_written != propose_out_size) {
|
if (bytes_written != propose_out_size) {
|
||||||
libp2p_logger_error("secio", "Sent propose_out, but did not write the correct number of bytes. Should be %d but was %d.\n", propose_out_size, bytes_written);
|
libp2p_logger_error("secio", "Sent propose_out, but did not write the correct number of bytes. Should be %d but was %d.\n", propose_out_size, bytes_written);
|
||||||
} else {
|
} else {
|
||||||
libp2p_logger_debug("secio", "Sent propose out.\n");
|
//libp2p_logger_debug("secio", "Sent propose out.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// try to get the Propse struct from the remote peer
|
// try to get the Propse struct from the remote peer
|
||||||
|
@ -942,7 +942,7 @@ int libp2p_secio_handshake(struct SessionContext* local_session, struct RsaPriva
|
||||||
libp2p_logger_error("secio", "Unable to get the remote's Propose struct.\n");
|
libp2p_logger_error("secio", "Unable to get the remote's Propose struct.\n");
|
||||||
goto exit;
|
goto exit;
|
||||||
} else {
|
} else {
|
||||||
libp2p_logger_debug("secio", "Received their propose struct.\n");
|
//libp2p_logger_debug("secio", "Received their propose struct.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!libp2p_secio_propose_protobuf_decode(propose_in_bytes, propose_in_size -1, &propose_in)) {
|
if (!libp2p_secio_propose_protobuf_decode(propose_in_bytes, propose_in_size -1, &propose_in)) {
|
||||||
|
@ -1040,13 +1040,13 @@ int libp2p_secio_handshake(struct SessionContext* local_session, struct RsaPriva
|
||||||
libp2p_secio_exchange_protobuf_encode(exchange_out, exchange_out_protobuf, exchange_out_protobuf_size, &bytes_written);
|
libp2p_secio_exchange_protobuf_encode(exchange_out, exchange_out_protobuf, exchange_out_protobuf_size, &bytes_written);
|
||||||
exchange_out_protobuf_size = bytes_written;
|
exchange_out_protobuf_size = bytes_written;
|
||||||
|
|
||||||
libp2p_logger_log("secio", LOGLEVEL_DEBUG, "Writing exchange_out\n");
|
//libp2p_logger_log("secio", LOGLEVEL_DEBUG, "Writing exchange_out\n");
|
||||||
bytes_written = libp2p_secio_unencrypted_write(local_session, exchange_out_protobuf, exchange_out_protobuf_size);
|
bytes_written = libp2p_secio_unencrypted_write(local_session, exchange_out_protobuf, exchange_out_protobuf_size);
|
||||||
if (exchange_out_protobuf_size != bytes_written) {
|
if (exchange_out_protobuf_size != bytes_written) {
|
||||||
libp2p_logger_error("secio", "Unable to write exchange_out\n");
|
libp2p_logger_error("secio", "Unable to write exchange_out\n");
|
||||||
goto exit;
|
goto exit;
|
||||||
} else {
|
} else {
|
||||||
libp2p_logger_debug("secio", "Sent exchange_out.\n");
|
//libp2p_logger_debug("secio", "Sent exchange_out.\n");
|
||||||
}
|
}
|
||||||
free(exchange_out_protobuf);
|
free(exchange_out_protobuf);
|
||||||
exchange_out_protobuf = NULL;
|
exchange_out_protobuf = NULL;
|
||||||
|
@ -1060,7 +1060,7 @@ int libp2p_secio_handshake(struct SessionContext* local_session, struct RsaPriva
|
||||||
libp2p_peer_handle_connection_error(remote_peer);
|
libp2p_peer_handle_connection_error(remote_peer);
|
||||||
goto exit;
|
goto exit;
|
||||||
} else {
|
} else {
|
||||||
libp2p_logger_debug("secio", "Read exchange packet.\n");
|
//libp2p_logger_debug("secio", "Read exchange packet.\n");
|
||||||
}
|
}
|
||||||
libp2p_secio_exchange_protobuf_decode(results, results_size, &exchange_in);
|
libp2p_secio_exchange_protobuf_decode(results, results_size, &exchange_in);
|
||||||
free(results);
|
free(results);
|
||||||
|
@ -1137,7 +1137,7 @@ int libp2p_secio_handshake(struct SessionContext* local_session, struct RsaPriva
|
||||||
libp2p_secio_initialize_crypto(local_session);
|
libp2p_secio_initialize_crypto(local_session);
|
||||||
|
|
||||||
// send their nonce to verify encryption works
|
// send their nonce to verify encryption works
|
||||||
libp2p_logger_log("secio", LOGLEVEL_DEBUG, "Sending their nonce\n");
|
//libp2p_logger_log("secio", LOGLEVEL_DEBUG, "Sending their nonce\n");
|
||||||
if (libp2p_secio_encrypted_write(local_session, (unsigned char*)local_session->remote_nonce, 16) <= 0) {
|
if (libp2p_secio_encrypted_write(local_session, (unsigned char*)local_session->remote_nonce, 16) <= 0) {
|
||||||
libp2p_logger_error("secio", "Encrytped write returned 0 or less.\n");
|
libp2p_logger_error("secio", "Encrytped write returned 0 or less.\n");
|
||||||
goto exit;
|
goto exit;
|
||||||
|
@ -1174,7 +1174,7 @@ int libp2p_secio_handshake(struct SessionContext* local_session, struct RsaPriva
|
||||||
|
|
||||||
retVal = 1;
|
retVal = 1;
|
||||||
|
|
||||||
libp2p_logger_log("secio", LOGLEVEL_DEBUG, "Handshake complete\n");
|
//libp2p_logger_log("secio", LOGLEVEL_DEBUG, "Handshake complete\n");
|
||||||
exit:
|
exit:
|
||||||
if (propose_in_bytes != NULL)
|
if (propose_in_bytes != NULL)
|
||||||
free(propose_in_bytes);
|
free(propose_in_bytes);
|
||||||
|
@ -1197,7 +1197,7 @@ int libp2p_secio_handshake(struct SessionContext* local_session, struct RsaPriva
|
||||||
libp2p_secio_propose_free(propose_in);
|
libp2p_secio_propose_free(propose_in);
|
||||||
|
|
||||||
if (retVal == 1) {
|
if (retVal == 1) {
|
||||||
libp2p_logger_log("secio", LOGLEVEL_DEBUG, "Handshake success!\n");
|
//libp2p_logger_log("secio", LOGLEVEL_DEBUG, "Handshake success!\n");
|
||||||
} else {
|
} else {
|
||||||
libp2p_logger_log("secio", LOGLEVEL_DEBUG, "Handshake returning false\n");
|
libp2p_logger_log("secio", LOGLEVEL_DEBUG, "Handshake returning false\n");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue