diff --git a/include/libp2p/peer/providerstore.h b/include/libp2p/peer/providerstore.h index fe23b22..ebc216e 100644 --- a/include/libp2p/peer/providerstore.h +++ b/include/libp2p/peer/providerstore.h @@ -32,6 +32,6 @@ struct ProviderStore* libp2p_providerstore_new(); */ void libp2p_providerstore_free(struct ProviderStore* in); -void libp2p_providerstore_add(struct ProviderStore* store, unsigned char* hash, int hash_size, unsigned char* peer_id, int peer_id_size); +int libp2p_providerstore_add(struct ProviderStore* store, unsigned char* hash, int hash_size, unsigned char* peer_id, int peer_id_size); int libp2p_providerstore_get(struct ProviderStore* store, unsigned char* hash, int hash_size, unsigned char** peer_id, int *peer_id_size); diff --git a/peer/providerstore.c b/peer/providerstore.c index c3a218f..cc2334c 100644 --- a/peer/providerstore.c +++ b/peer/providerstore.c @@ -42,7 +42,7 @@ void libp2p_providerstore_free(struct ProviderStore* in) { } } -void libp2p_providerstore_add(struct ProviderStore* store, unsigned char* hash, int hash_size, unsigned char* peer_id, int peer_id_size) { +int libp2p_providerstore_add(struct ProviderStore* store, unsigned char* hash, int hash_size, unsigned char* peer_id, int peer_id_size) { struct ProviderEntry* entry = (struct ProviderEntry*)malloc(sizeof(struct ProviderEntry)); entry->hash = malloc(hash_size); memcpy(entry->hash, hash, hash_size); @@ -51,6 +51,7 @@ void libp2p_providerstore_add(struct ProviderStore* store, unsigned char* hash, memcpy(entry->peer_id, peer_id, peer_id_size); entry->peer_id_size = peer_id_size; libp2p_utils_vector_add(store->provider_entries, entry); + return 1; } int libp2p_providerstore_get(struct ProviderStore* store, unsigned char* hash, int hash_size, unsigned char** peer_id, int *peer_id_size) { diff --git a/routing/dht_protocol.c b/routing/dht_protocol.c index d2e423f..0609e07 100644 --- a/routing/dht_protocol.c +++ b/routing/dht_protocol.c @@ -4,6 +4,7 @@ #include "libp2p/net/stream.h" #include "libp2p/routing/dht_protocol.h" #include "libp2p/record/message.h" +#include "libp2p/utils/logger.h" /*** @@ -124,24 +125,27 @@ int libp2p_routing_dht_handle_add_provider(struct SessionContext* session, struc libp2p_logger_debug("dht_protocol", "In add_provider\n"); //TODO: verify peer signature + /* if (message->record != NULL && message->record->author != NULL && message->record->author_size > 0 - && message->key != NULL && message->key_size > 0) { - peer = libp2p_peer_new(); - peer->id_size = message->record->author_size; - peer->id = malloc(peer->id_size); - //TODO: Add addresses - memcpy(peer->id, message->record->author, message->record->author_size); + && message->key != NULL && message->key_size > 0) + */ + struct Libp2pLinkedList* current = message->provider_peer_head; + while(current != NULL) { + struct Libp2pPeer* peer = (struct Libp2pPeer*)current->item; if (!libp2p_peerstore_add_peer(peerstore, peer)) goto exit; - - *result_buffer_size = libp2p_message_protobuf_encode_size(message); - *result_buffer = (unsigned char*)malloc(*result_buffer_size); - if (*result_buffer == NULL) + if (!libp2p_providerstore_add(providerstore, message->key, message->key_size, peer->id, peer->id_size)) goto exit; - if (!libp2p_message_protobuf_encode(message, *result_buffer, *result_buffer_size, result_buffer_size)) - goto exit; - libp2p_logger_debug("dht_protocol", "add_provider protobuf'd the message. Returning results.\n"); } + + *result_buffer_size = libp2p_message_protobuf_encode_size(message); + *result_buffer = (unsigned char*)malloc(*result_buffer_size); + if (*result_buffer == NULL) + goto exit; + if (!libp2p_message_protobuf_encode(message, *result_buffer, *result_buffer_size, result_buffer_size)) + goto exit; + libp2p_logger_debug("dht_protocol", "add_provider protobuf'd the message. Returning results.\n"); + retVal = 1; exit: if (retVal != 1) {