Using config file for bootstrap of kademlia
This commit is contained in:
parent
8feb946087
commit
59af1c0b9e
10 changed files with 36 additions and 48 deletions
|
@ -9,6 +9,8 @@
|
|||
* Begin to connect to the swarm
|
||||
*/
|
||||
void *ipfs_bootstrap_swarm(void* param) {
|
||||
//TODO:
|
||||
/*
|
||||
struct IpfsNode* local_node = (struct IpfsNode*)param;
|
||||
// read the config file and get the bootstrap peers
|
||||
for(int i = 0; i < local_node->repo->config->peer_addresses.num_peers; i++) { // loop through the peers
|
||||
|
@ -27,6 +29,7 @@ void *ipfs_bootstrap_swarm(void* param) {
|
|||
} // we have a good peer ID
|
||||
|
||||
}
|
||||
*/
|
||||
return (void*)1;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,25 +1,20 @@
|
|||
#ifndef bootstrap_peer_h
|
||||
#define bootstrap_peer_h
|
||||
|
||||
#include "ipfs/thirdparty/ipfsaddr/ipfs_addr.h"
|
||||
|
||||
struct BootstrapPeers {
|
||||
int num_peers;
|
||||
struct IPFSAddr** peers;
|
||||
};
|
||||
#include "libp2p/utils/vector.h"
|
||||
|
||||
/***
|
||||
* get a list of peers to use to bootstrap the instance
|
||||
* @param bootstrap_peers an array of IPFSAddr structs, will be allocated by this function
|
||||
* @param bootstrap_peers A vector of MultiAddress structs will be allocated by this function
|
||||
* @returns true(1) on success, otherwise false(0)
|
||||
*/
|
||||
int repo_config_bootstrap_peers_retrieve(struct BootstrapPeers* bootstrap_peers);
|
||||
int repo_config_bootstrap_peers_retrieve(struct Libp2pVector** bootstrap_peers);
|
||||
|
||||
/***
|
||||
* frees up memory caused by call to repo_config_bootstrap_peers_retrieve
|
||||
* @param list the list to free
|
||||
* @returns true(1)
|
||||
*/
|
||||
int repo_config_bootstrap_peers_free(struct BootstrapPeers* list);
|
||||
int repo_config_bootstrap_peers_free(struct Libp2pVector* list);
|
||||
|
||||
#endif /* bootstrap_peer_h */
|
||||
|
|
|
@ -37,7 +37,7 @@ struct RepoConfig {
|
|||
struct Mounts mounts;
|
||||
struct Discovery discovery;
|
||||
struct Ipns ipns;
|
||||
struct BootstrapPeers peer_addresses;
|
||||
struct Libp2pVector* bootstrap_peers; // MultiAddresses
|
||||
//struct tour tour;
|
||||
struct Gateway* gateway;
|
||||
//struct supernode_routing supernode_client_config;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
CC = gcc
|
||||
CFLAGS = -O0 -I../../include -I../../../c-libp2p/include -I../../../c-multihash/include -I../../../c-protobuf -Wall -std=c99
|
||||
CFLAGS = -O0 -I../../include -I../../../c-libp2p/include -I../../../c-multiaddr/include -I../../../c-multihash/include -I../../../c-protobuf -Wall -std=c99
|
||||
|
||||
ifdef DEBUG
|
||||
CFLAGS += -g3
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "ipfs/thirdparty/ipfsaddr/ipfs_addr.h"
|
||||
#include "ipfs/repo/config/bootstrap_peers.h"
|
||||
#include "multiaddr/multiaddr.h"
|
||||
|
||||
int repo_config_bootstrap_peers_retrieve(struct BootstrapPeers* list) {
|
||||
int repo_config_bootstrap_peers_retrieve(struct Libp2pVector** list) {
|
||||
|
||||
char* default_bootstrap_addresses[] = {
|
||||
"/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ", // mars.i.ipfs.io
|
||||
|
@ -17,29 +17,16 @@ int repo_config_bootstrap_peers_retrieve(struct BootstrapPeers* list) {
|
|||
"/ip4/178.62.61.185/tcp/4001/ipfs/QmSoLMeWqB7YGVLJN3pNLQpmmEk35v6wYtsMGLzSr5QBU3", // mercury.i.ipfs.io
|
||||
"/ip4/104.236.151.122/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx", // jupiter.i.ipfs.io
|
||||
};
|
||||
*list = libp2p_utils_vector_new(9);
|
||||
|
||||
list->num_peers = 9;
|
||||
// allocate memory for list
|
||||
list->peers = malloc(sizeof(struct IPFSAddr*) * list->num_peers);
|
||||
if (list->peers == NULL)
|
||||
return 0;
|
||||
|
||||
for(int i = 0; i < list->num_peers; i++) {
|
||||
struct IPFSAddr* currAddr;
|
||||
if (ipfsaddr_new(&currAddr, default_bootstrap_addresses[i]) == 0)
|
||||
return 0;
|
||||
list->peers[i] = currAddr;
|
||||
for(int i = 0; i < 9; i++) {
|
||||
struct MultiAddress* currAddr = multiaddress_new_from_string(default_bootstrap_addresses[i]);
|
||||
libp2p_utils_vector_add(*list, currAddr);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int repo_config_bootstrap_peers_free(struct BootstrapPeers* list) {
|
||||
|
||||
for(int i = 0; i < list->num_peers; i++) {
|
||||
if (list->peers[i] != NULL) {
|
||||
ipfsaddr_free(list->peers[i]);
|
||||
}
|
||||
}
|
||||
free(list->peers);
|
||||
int repo_config_bootstrap_peers_free(struct Libp2pVector* list) {
|
||||
libp2p_utils_vector_free(list);
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -87,7 +87,7 @@ int ipfs_repo_config_init(struct RepoConfig* config, unsigned int num_bits_for_k
|
|||
return 0;
|
||||
|
||||
// bootstrap peers
|
||||
retVal = repo_config_bootstrap_peers_retrieve(&(config->peer_addresses));
|
||||
retVal = repo_config_bootstrap_peers_retrieve(&(config->bootstrap_peers));
|
||||
if (retVal == 0)
|
||||
return 0;
|
||||
|
||||
|
@ -142,8 +142,7 @@ int ipfs_repo_config_new(struct RepoConfig** config) {
|
|||
return 0;
|
||||
|
||||
// set initial values
|
||||
(*config)->peer_addresses.num_peers = 0;
|
||||
(*config)->peer_addresses.peers = NULL;
|
||||
(*config)->bootstrap_peers = NULL;
|
||||
|
||||
int retVal = 1;
|
||||
retVal = repo_config_identity_new(&((*config)->identity));
|
||||
|
@ -174,8 +173,8 @@ int ipfs_repo_config_free(struct RepoConfig* config) {
|
|||
if (config != NULL) {
|
||||
if (config->identity != NULL)
|
||||
repo_config_identity_free(config->identity);
|
||||
if (&(config->peer_addresses) != NULL)
|
||||
repo_config_bootstrap_peers_free(&(config->peer_addresses));
|
||||
if (&(config->bootstrap_peers) != NULL)
|
||||
repo_config_bootstrap_peers_free(config->bootstrap_peers);
|
||||
if (config->datastore != NULL)
|
||||
ipfs_repo_config_datastore_free(config->datastore);
|
||||
if (config->addresses != NULL)
|
||||
|
|
|
@ -443,6 +443,9 @@ int fs_repo_open_config(struct FSRepo* repo) {
|
|||
_get_json_string_value(data, tokens, num_tokens, curr_pos, "API", &repo->config->addresses->api);
|
||||
_get_json_string_value(data, tokens, num_tokens, curr_pos, "Gateway", &repo->config->addresses->gateway);
|
||||
|
||||
// bootstrap peers
|
||||
repo->config->bootstrap_peers = libp2p_utils_vector_new(1);
|
||||
// TODO: Implement bootstrap peers
|
||||
// free the memory used reading the json file
|
||||
free(data);
|
||||
free(priv_key_base64);
|
||||
|
|
|
@ -50,8 +50,6 @@ int ipfs_routing_kademlia_find_providers(struct s_ipfs_routing* routing, char* k
|
|||
*results = libp2p_utils_vector_new(1);
|
||||
struct Libp2pVector* vector = *results;
|
||||
// see if I can provide it
|
||||
// temporarily commented out for testing...
|
||||
/*
|
||||
unsigned char* peer_id = NULL;
|
||||
int peer_id_size = 0;
|
||||
if (libp2p_providerstore_get(routing->local_node->providerstore, (unsigned char*)key, key_size, &peer_id, &peer_id_size)) {
|
||||
|
@ -65,7 +63,6 @@ int ipfs_routing_kademlia_find_providers(struct s_ipfs_routing* routing, char* k
|
|||
current = current->next;
|
||||
}
|
||||
}
|
||||
*/
|
||||
//get a list of providers that are closest
|
||||
if (vector->total == 0) {
|
||||
// search requires null terminated key
|
||||
|
@ -152,7 +149,7 @@ struct s_ipfs_routing* ipfs_routing_new_kademlia(struct IpfsNode* local_node, st
|
|||
// connect to nodes and listen for connections
|
||||
struct MultiAddress* address = multiaddress_new_from_string(local_node->repo->config->addresses->api);
|
||||
if (multiaddress_is_ip(address)) {
|
||||
start_kademlia_multiaddress(address, kademlia_id, 10);
|
||||
start_kademlia_multiaddress(address, kademlia_id, 10, local_node->repo->config->bootstrap_peers);
|
||||
}
|
||||
local_node->routing = routing;
|
||||
return routing;
|
||||
|
|
|
@ -19,19 +19,20 @@ int test_repo_bootstrap_peers_init() {
|
|||
"/ip4/104.236.151.122/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx", // jupiter.i.ipfs.io
|
||||
};
|
||||
|
||||
struct BootstrapPeers list;
|
||||
struct Libp2pVector* list;
|
||||
int retVal = 1;
|
||||
repo_config_bootstrap_peers_retrieve(&list);
|
||||
if ( list.num_peers != 9) {
|
||||
if ( list->total != 9) {
|
||||
printf("Size does not equal 9 in test_repo_bootstrap_peers_init");
|
||||
retVal = 0;
|
||||
}
|
||||
for(int i = 0; i < list.num_peers; i++) {
|
||||
for(int i = 0; i < list->total; i++) {
|
||||
unsigned long strLen = strlen(default_bootstrap_addresses[i]);
|
||||
if (strncmp(list.peers[i]->entire_string, default_bootstrap_addresses[i], strLen) != 0)
|
||||
printf("The value of element %d is: %s\n", i, list.peers[i]->entire_string);
|
||||
struct MultiAddress* currAddr = libp2p_utils_vector_get(list, i);
|
||||
if (strncmp(currAddr->string, default_bootstrap_addresses[i], strLen) != 0)
|
||||
printf("The value of element %d is: %s\n", i, currAddr->string);
|
||||
}
|
||||
repo_config_bootstrap_peers_free(&list);
|
||||
repo_config_bootstrap_peers_free(list);
|
||||
return retVal;
|
||||
}
|
||||
|
||||
|
|
|
@ -87,7 +87,10 @@ int test_routing_supernode_get_remote_value() {
|
|||
this_peer.addr_head->item = multiaddress_new_from_string("/ip4/127.0.0.1/tcp/4001");
|
||||
libp2p_peerstore_add_peer(ipfs_node->peerstore, &this_peer);
|
||||
// set a different port for the dht/kademlia stuff
|
||||
ipfs_node->repo->config->addresses->api = "/ip4/127.0.0.1/tcp/5002";
|
||||
strcpy(ipfs_node->repo->config->addresses->api, "/ip4/127.0.0.1/udp/5002");
|
||||
// add bootstrap peer for kademlia
|
||||
struct MultiAddress* remote = multiaddress_new_from_string("/ip4/127.0.0.1/udp/5001");
|
||||
libp2p_utils_vector_add(ipfs_node->repo->config->bootstrap_peers, remote);
|
||||
ipfs_node->routing = ipfs_routing_new_kademlia(ipfs_node, &fs_repo->config->identity->private_key, stream);
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue