Implemented put_value

This commit is contained in:
John Jones 2017-09-14 11:35:16 -05:00
parent 5712e920d1
commit e922c7ef14
2 changed files with 39 additions and 15 deletions

View file

@ -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
return 0; if (message->record == NULL)
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);

View file

@ -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");
} }