move api globals to struct

This commit is contained in:
jmjatlanta 2017-09-25 08:55:42 -05:00
parent b4e3817d62
commit 5404fce6ec
17 changed files with 142 additions and 153 deletions

View file

@ -20,10 +20,10 @@
#include "ipfs/importer/exporter.h" #include "ipfs/importer/exporter.h"
#include "ipfs/core/http_request.h" #include "ipfs/core/http_request.h"
pthread_mutex_t conns_lock; //pthread_mutex_t conns_lock;
int conns_count; //int conns_count;
struct s_list api_list; //struct ApiContext api_list;
/** /**
* Write two strings on one write. * Write two strings on one write.
@ -401,8 +401,8 @@ void *api_connection_thread (void *ptr)
buf[MAX_READ] = '\0'; buf[MAX_READ] = '\0';
s = api_list.conns[params->index]->socket; s = params->this_node->api_context->conns[params->index]->socket;
timeout = api_list.timeout; timeout = params->this_node->api_context->timeout;
if (socket_read_select4(s, timeout) <= 0) { if (socket_read_select4(s, timeout) <= 0) {
libp2p_logger_error("api", "Client connection timeout.\n"); libp2p_logger_error("api", "Client connection timeout.\n");
@ -592,15 +592,15 @@ void *api_connection_thread (void *ptr)
quit: quit:
if (req.buf) if (req.buf)
free(req.buf); free(req.buf);
if (inet_ntop(AF_INET, &(api_list.conns[params->index]->ipv4), client, INET_ADDRSTRLEN) == NULL) if (inet_ntop(AF_INET, &( params->this_node->api_context->conns[params->index]->ipv4), client, INET_ADDRSTRLEN) == NULL)
strcpy(client, "UNKNOW"); strcpy(client, "UNKNOW");
libp2p_logger_error("api", "Closing client connection %s:%d (%d).\n", client, api_list.conns[params->index]->port, params->index+1); libp2p_logger_error("api", "Closing client connection %s:%d (%d).\n", client, params->this_node->api_context->conns[params->index]->port, params->index+1);
pthread_mutex_lock(&conns_lock); pthread_mutex_lock(&params->this_node->api_context->conns_lock);
close(s); close(s);
free (api_list.conns[params->index]); free ( params->this_node->api_context->conns[params->index]);
api_list.conns[params->index] = NULL; params->this_node->api_context->conns[params->index] = NULL;
conns_count--; params->this_node->api_context->conns_count--;
pthread_mutex_unlock(&conns_lock); pthread_mutex_unlock(&params->this_node->api_context->conns_lock);
free(params); free(params);
return NULL; return NULL;
} }
@ -608,27 +608,27 @@ quit:
/** /**
* Close all connections stopping respectives pthreads and free allocated memory. * Close all connections stopping respectives pthreads and free allocated memory.
*/ */
void api_connections_cleanup (void) void api_connections_cleanup (struct IpfsNode* local_node)
{ {
int i; int i;
pthread_mutex_lock(&conns_lock); pthread_mutex_lock(&local_node->api_context->conns_lock);
if (conns_count > 0 && api_list.conns) { if (local_node->api_context->conns_count > 0 && local_node->api_context->conns) {
for (i = 0 ; i < api_list.max_conns ; i++) { for (i = 0 ; i < local_node->api_context->max_conns ; i++) {
if (api_list.conns[i]->pthread) { if (local_node->api_context->conns[i]->pthread) {
pthread_cancel (api_list.conns[i]->pthread); pthread_cancel (local_node->api_context->conns[i]->pthread);
close (api_list.conns[i]->socket); close (local_node->api_context->conns[i]->socket);
free (api_list.conns[i]); free (local_node->api_context->conns[i]);
api_list.conns[i] = NULL; local_node->api_context->conns[i] = NULL;
} }
} }
conns_count = 0; local_node->api_context->conns_count = 0;
} }
if (api_list.conns) { if (local_node->api_context->conns) {
free (api_list.conns); free (local_node->api_context->conns);
api_list.conns = NULL; local_node->api_context->conns = NULL;
} }
pthread_mutex_unlock(&conns_lock); pthread_mutex_unlock(&local_node->api_context->conns_lock);
} }
/** /**
@ -645,56 +645,56 @@ void *api_listen_thread (void *ptr)
char client[INET_ADDRSTRLEN]; char client[INET_ADDRSTRLEN];
struct IpfsNode* local_node = (struct IpfsNode*)ptr; struct IpfsNode* local_node = (struct IpfsNode*)ptr;
conns_count = 0; local_node->api_context->conns_count = 0;
for (;;) { for (;;) {
s = socket_accept4(api_list.socket, &ipv4, &port); s = socket_accept4(local_node->api_context->socket, &ipv4, &port);
if (s <= 0) { if (s <= 0) {
break; break;
} }
if (conns_count >= api_list.max_conns) { // limit reached. if (local_node->api_context->conns_count >= local_node->api_context->max_conns) { // limit reached.
libp2p_logger_error("api", "Limit of connections reached (%d).\n", api_list.max_conns); libp2p_logger_error("api", "Limit of connections reached (%d).\n", local_node->api_context->max_conns);
close (s); close (s);
continue; continue;
} }
pthread_mutex_lock(&conns_lock); pthread_mutex_lock(&local_node->api_context->conns_lock);
for (i = 0 ; i < api_list.max_conns && api_list.conns[i] ; i++); for (i = 0 ; i < local_node->api_context->max_conns && local_node->api_context->conns[i] ; i++);
api_list.conns[i] = malloc (sizeof (struct s_conns)); local_node->api_context->conns[i] = malloc (sizeof (struct s_conns));
if (!api_list.conns[i]) { if (!local_node->api_context->conns[i]) {
libp2p_logger_error("api", "Fail to allocate memory to accept connection.\n"); libp2p_logger_error("api", "Fail to allocate memory to accept connection.\n");
pthread_mutex_unlock(&conns_lock); pthread_mutex_unlock(&local_node->api_context->conns_lock);
close (s); close (s);
continue; continue;
} }
if (inet_ntop(AF_INET, &ipv4, client, INET_ADDRSTRLEN) == NULL) if (inet_ntop(AF_INET, &ipv4, client, INET_ADDRSTRLEN) == NULL)
strcpy(client, "UNKNOW"); strcpy(client, "UNKNOW");
api_list.conns[i]->socket = s; local_node->api_context->conns[i]->socket = s;
api_list.conns[i]->ipv4 = ipv4; local_node->api_context->conns[i]->ipv4 = ipv4;
api_list.conns[i]->port = port; local_node->api_context->conns[i]->port = port;
// create a struct, which the thread is responsible to destroy // create a struct, which the thread is responsible to destroy
struct ApiConnectionParam* connection_param = (struct ApiConnectionParam*) malloc(sizeof(struct ApiConnectionParam)); struct ApiConnectionParam* connection_param = (struct ApiConnectionParam*) malloc(sizeof(struct ApiConnectionParam));
if (connection_param == NULL) { if (connection_param == NULL) {
libp2p_logger_error("api", "api_listen_thread: Unable to allocate memory.\n"); libp2p_logger_error("api", "api_listen_thread: Unable to allocate memory.\n");
pthread_mutex_unlock(&conns_lock); pthread_mutex_unlock(&local_node->api_context->conns_lock);
close (s); close (s);
continue; continue;
} }
connection_param->index = i; connection_param->index = i;
connection_param->this_node = local_node; connection_param->this_node = local_node;
if (pthread_create(&(api_list.conns[i]->pthread), NULL, api_connection_thread, (void*)connection_param)) { if (pthread_create(&(local_node->api_context->conns[i]->pthread), NULL, api_connection_thread, (void*)connection_param)) {
libp2p_logger_error("api", "Create pthread fail.\n"); libp2p_logger_error("api", "Create pthread fail.\n");
free (api_list.conns[i]); free (local_node->api_context->conns[i]);
api_list.conns[i] = NULL; local_node->api_context->conns[i] = NULL;
conns_count--; local_node->api_context->conns_count--;
close(s); close(s);
} else { } else {
conns_count++; local_node->api_context->conns_count++;
} }
libp2p_logger_error("api", "Accept connection %s:%d (%d/%d), pthread %d.\n", client, port, conns_count, api_list.max_conns, i+1); libp2p_logger_error("api", "API for %s: Accept connection %s:%d (%d/%d), pthread %d.\n", client, port, local_node->api_context->conns_count, local_node->api_context->max_conns, i+1);
pthread_mutex_unlock(&conns_lock); pthread_mutex_unlock(&local_node->api_context->conns_lock);
} }
api_connections_cleanup (); api_connections_cleanup (local_node);
return NULL; return NULL;
} }
@ -705,7 +705,7 @@ void *api_listen_thread (void *ptr)
* @param timeout time out of client connection. * @param timeout time out of client connection.
* @returns 0 when failure or 1 if success. * @returns 0 when failure or 1 if success.
*/ */
int api_start (pthread_t *scope_pth, struct IpfsNode* local_node, int max_conns, int timeout) int api_start (struct IpfsNode* local_node, int max_conns, int timeout)
{ {
int s; int s;
size_t alloc_size = sizeof(void*) * max_conns; size_t alloc_size = sizeof(void*) * max_conns;
@ -716,35 +716,38 @@ int api_start (pthread_t *scope_pth, struct IpfsNode* local_node, int max_conns,
multiaddress_get_ip_address(my_address, &ip); multiaddress_get_ip_address(my_address, &ip);
int port = multiaddress_get_ip_port(my_address); int port = multiaddress_get_ip_port(my_address);
api_list.ipv4 = hostname_to_ip(ip); // api is listening only on loopback. local_node->api_context->ipv4 = hostname_to_ip(ip); // api is listening only on loopback.
api_list.port = port; local_node->api_context->port = port;
if ((s = socket_listen(socket_tcp4(), &(api_list.ipv4), &(api_list.port))) <= 0) { if ((s = socket_listen(socket_tcp4(), &(local_node->api_context->ipv4), &(local_node->api_context->port))) <= 0) {
libp2p_logger_error("api", "Failed to init API. port: %d\n", port); libp2p_logger_error("api", "Failed to init API. port: %d\n", port);
return 0; return 0;
} }
api_list.socket = s; local_node->api_context->socket = s;
api_list.max_conns = max_conns; local_node->api_context->max_conns = max_conns;
api_list.timeout = timeout; local_node->api_context->timeout = timeout;
api_list.conns = malloc (alloc_size); local_node->api_context->conns = malloc (alloc_size);
if (!api_list.conns) { if (!local_node->api_context->conns) {
close (s); close (s);
libp2p_logger_error("api", "Error allocating memory.\n"); libp2p_logger_error("api", "Error allocating memory.\n");
return 0; return 0;
} }
memset(api_list.conns, 0, alloc_size); memset(local_node->api_context->conns, 0, alloc_size);
if (pthread_create(scope_pth, NULL, api_listen_thread, (void*)local_node)) { local_node->api_context = (struct ApiContext*) malloc(sizeof(struct ApiContext));
if (pthread_create(&local_node->api_context->api_thread, NULL, api_listen_thread, (void*)local_node)) {
close (s); close (s);
free (api_list.conns); free (local_node->api_context->conns);
api_list.conns = NULL; local_node->api_context->conns = NULL;
*scope_pth = 0; local_node->api_context->api_thread = 0;
libp2p_logger_error("api", "Error creating thread for API.\n"); libp2p_logger_error("api", "Error creating thread for API.\n");
return 0; return 0;
} }
libp2p_logger_debug("api", "Started API on localhost port %d.\n", port);
return 1; return 1;
} }
@ -752,14 +755,14 @@ int api_start (pthread_t *scope_pth, struct IpfsNode* local_node, int max_conns,
* Stop API. * Stop API.
* @returns 0 when failure or 1 if success. * @returns 0 when failure or 1 if success.
*/ */
int api_stop (pthread_t *scope_pth) int api_stop (struct IpfsNode *local_node)
{ {
if (*scope_pth == 0) return 0; if (local_node->api_context->api_thread == 0) return 0;
pthread_cancel(*scope_pth); pthread_cancel(local_node->api_context->api_thread);
api_connections_cleanup (); api_connections_cleanup (local_node);
*scope_pth = 0; local_node->api_context->api_thread = 0;
return 1; return 1;
} }

View file

@ -15,14 +15,14 @@
int ipfs_daemon_start(char* repo_path) { int ipfs_daemon_start(char* repo_path) {
int count_pths = 0, retVal = 0; int count_pths = 0, retVal = 0;
pthread_t work_pths[MAX], api_pth = 0; pthread_t work_pths[MAX];
struct IpfsNodeListenParams listen_param; struct IpfsNodeListenParams listen_param;
struct MultiAddress* ma = NULL; struct MultiAddress* ma = NULL;
libp2p_logger_info("daemon", "Initializing daemon for %s...\n", repo_path); libp2p_logger_info("daemon", "Initializing daemon for %s...\n", repo_path);
struct IpfsNode* local_node = NULL; struct IpfsNode* local_node = NULL;
if (!ipfs_node_online_new(&api_pth, repo_path, &local_node)) if (!ipfs_node_online_new(repo_path, &local_node))
goto exit; goto exit;
// Set null router param // Set null router param
@ -56,7 +56,7 @@ int ipfs_daemon_start(char* repo_path) {
if (ma != NULL) if (ma != NULL)
multiaddress_free(ma); multiaddress_free(ma);
if (local_node != NULL) { if (local_node != NULL) {
ipfs_node_free(&api_pth, local_node); ipfs_node_free(local_node);
} }
return retVal; return retVal;

View file

@ -60,7 +60,7 @@ int ipfs_node_online_protocol_handlers_free(struct Libp2pVector* handlers) {
* @param node the completed IpfsNode struct * @param node the completed IpfsNode struct
* @returns true(1) on success * @returns true(1) on success
*/ */
int ipfs_node_online_new(pthread_t *pth_scope, const char* repo_path, struct IpfsNode** node) { int ipfs_node_online_new(const char* repo_path, struct IpfsNode** node) {
struct FSRepo* fs_repo = NULL; struct FSRepo* fs_repo = NULL;
*node = ipfs_node_new(); *node = ipfs_node_new();
@ -71,13 +71,13 @@ int ipfs_node_online_new(pthread_t *pth_scope, const char* repo_path, struct Ipf
// build the struct // build the struct
if (!ipfs_repo_fsrepo_new(repo_path, NULL, &fs_repo)) { if (!ipfs_repo_fsrepo_new(repo_path, NULL, &fs_repo)) {
ipfs_node_free(pth_scope, local_node); ipfs_node_free(local_node);
*node = NULL; *node = NULL;
return 0; return 0;
} }
// open the repo // open the repo
if (!ipfs_repo_fsrepo_open(fs_repo)) { if (!ipfs_repo_fsrepo_open(fs_repo)) {
ipfs_node_free(pth_scope, local_node); ipfs_node_free(local_node);
*node = NULL; *node = NULL;
return 0; return 0;
} }
@ -94,7 +94,7 @@ int ipfs_node_online_new(pthread_t *pth_scope, const char* repo_path, struct Ipf
local_node->exchange = ipfs_bitswap_new(local_node); local_node->exchange = ipfs_bitswap_new(local_node);
// fire up the API // fire up the API
api_start(pth_scope, local_node, 10, 5); api_start(local_node, 10, 5);
return 1; return 1;
} }
@ -116,13 +116,13 @@ int ipfs_node_offline_new(const char* repo_path, struct IpfsNode** node) {
// build the struct // build the struct
if (!ipfs_repo_fsrepo_new(repo_path, NULL, &fs_repo)) { if (!ipfs_repo_fsrepo_new(repo_path, NULL, &fs_repo)) {
ipfs_node_free(NULL, local_node); ipfs_node_free(local_node);
*node = NULL; *node = NULL;
return 0; return 0;
} }
// open the repo // open the repo
if (!ipfs_repo_fsrepo_open(fs_repo)) { if (!ipfs_repo_fsrepo_open(fs_repo)) {
ipfs_node_free(NULL, local_node); ipfs_node_free(local_node);
*node = NULL; *node = NULL;
return 0; return 0;
} }
@ -149,10 +149,10 @@ int ipfs_node_offline_new(const char* repo_path, struct IpfsNode** node) {
* @param node the node to free * @param node the node to free
* @returns true(1) * @returns true(1)
*/ */
int ipfs_node_free(pthread_t *pth_scope, struct IpfsNode* node) { int ipfs_node_free(struct IpfsNode* node) {
if (node != NULL) { if (node != NULL) {
if (pth_scope != NULL) if (node->api_context->api_thread != NULL)
api_stop(pth_scope); api_stop(node);
if (node->exchange != NULL) { if (node->exchange != NULL) {
node->exchange->Close(node->exchange); node->exchange->Close(node->exchange);
} }

View file

@ -191,7 +191,6 @@ int ipfs_exporter_to_console(const unsigned char* hash, struct IpfsNode *local_n
*/ */
int ipfs_exporter_object_get(int argc, char** argv) { int ipfs_exporter_object_get(int argc, char** argv) {
char* repo_path = NULL; char* repo_path = NULL;
pthread_t api_pth = 0;
if (!ipfs_repo_get_directory(argc, argv, &repo_path)) { if (!ipfs_repo_get_directory(argc, argv, &repo_path)) {
fprintf(stderr, "Unable to open repository: %s\n", repo_path); fprintf(stderr, "Unable to open repository: %s\n", repo_path);
@ -199,13 +198,13 @@ int ipfs_exporter_object_get(int argc, char** argv) {
} }
struct IpfsNode* local_node = NULL; struct IpfsNode* local_node = NULL;
if (!ipfs_node_online_new(&api_pth, repo_path, &local_node)) if (!ipfs_node_online_new(repo_path, &local_node))
return 0; return 0;
// find hash // find hash
int retVal = ipfs_exporter_to_console((unsigned char*)argv[3], local_node); int retVal = ipfs_exporter_to_console((unsigned char*)argv[3], local_node);
ipfs_node_free(&api_pth, local_node); ipfs_node_free(local_node);
return retVal; return retVal;
} }

View file

@ -379,7 +379,6 @@ int ipfs_import_files(int argc, char** argv) {
char* path = NULL; char* path = NULL;
char* filename = NULL; char* filename = NULL;
struct HashtableNode* directory_entry = NULL; struct HashtableNode* directory_entry = NULL;
pthread_t api_pth = 0;
int recursive = ipfs_import_is_recursive(argc, argv); int recursive = ipfs_import_is_recursive(argc, argv);
@ -391,7 +390,7 @@ int ipfs_import_files(int argc, char** argv) {
fprintf(stderr, "Repo does not exist: %s\n", repo_path); fprintf(stderr, "Repo does not exist: %s\n", repo_path);
goto exit; goto exit;
} }
ipfs_node_online_new(&api_pth, repo_path, &local_node); ipfs_node_online_new(repo_path, &local_node);
// import the file(s) // import the file(s)
@ -421,7 +420,7 @@ int ipfs_import_files(int argc, char** argv) {
retVal = 1; retVal = 1;
exit: exit:
if (local_node != NULL) if (local_node != NULL)
ipfs_node_free(&api_pth, local_node); ipfs_node_free(local_node);
// free file list // free file list
current = first; current = first;
while (current != NULL) { while (current != NULL) {

View file

@ -11,7 +11,7 @@
#define MAX_READ (32*1024) // 32k #define MAX_READ (32*1024) // 32k
struct s_list { struct ApiContext {
int socket; int socket;
uint32_t ipv4; uint32_t ipv4;
uint16_t port; uint16_t port;
@ -23,6 +23,9 @@ struct s_list {
uint16_t port; uint16_t port;
pthread_t pthread; pthread_t pthread;
} **conns; } **conns;
pthread_mutex_t conns_lock;
int conns_count;
pthread_t api_thread;
}; };
struct s_request { struct s_request {
@ -84,7 +87,7 @@ struct s_request {
#define strstart(a,b) (memcmp(a,b,strlen(b))==0) #define strstart(a,b) (memcmp(a,b,strlen(b))==0)
void *api_connection_thread (void *ptr); void *api_connection_thread (void *ptr);
void api_connections_cleanup (void); void api_connections_cleanup (struct IpfsNode* node);
void *api_listen_thread (void *ptr); void *api_listen_thread (void *ptr);
int api_start (pthread_t *scope_pth, struct IpfsNode* local_node, int max_conns, int timeout); int api_start (struct IpfsNode* local_node, int max_conns, int timeout);
int api_stop (pthread_t *scope_pth); int api_stop (struct IpfsNode* local_node);

View file

@ -37,6 +37,7 @@ struct IpfsNode {
struct Blockstore* blockstore; struct Blockstore* blockstore;
struct Exchange* exchange; struct Exchange* exchange;
struct Libp2pVector* protocol_handlers; struct Libp2pVector* protocol_handlers;
struct ApiContext* api_context;
//struct Pinner pinning; // an interface //struct Pinner pinning; // an interface
//struct Mount** mounts; //struct Mount** mounts;
// TODO: Add more here // TODO: Add more here
@ -48,7 +49,7 @@ struct IpfsNode {
* @param node the completed IpfsNode struct * @param node the completed IpfsNode struct
* @returns true(1) on success * @returns true(1) on success
*/ */
int ipfs_node_online_new(pthread_t *pth_scope, const char* repo_path, struct IpfsNode** node); int ipfs_node_online_new(const char* repo_path, struct IpfsNode** node);
/*** /***
* build an offline IpfsNode * build an offline IpfsNode
@ -63,4 +64,4 @@ int ipfs_node_offline_new(const char* repo_path, struct IpfsNode** node);
* @param node the node to free * @param node the node to free
* @returns true(1) * @returns true(1)
*/ */
int ipfs_node_free(pthread_t *pth_scope, struct IpfsNode* node); int ipfs_node_free(struct IpfsNode* node);

View file

@ -83,7 +83,7 @@ int ipfs_name(struct CliArguments* args) {
exit: exit:
// shut everything down // shut everything down
ipfs_node_free(NULL, client_node); ipfs_node_free(client_node);
return retVal; return retVal;
} }

View file

@ -19,7 +19,7 @@
"/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/tcp/4001",
"/ip6/::/tcp/4001" "/ip6/::/tcp/4001"
], ],
"API": "/ip4/127.0.0.1/tcp/5002", "API": "/ip4/127.0.0.1/tcp/5001",
"Gateway": "(null)" "Gateway": "(null)"
}, },
"Mounts": { "Mounts": {

View file

@ -98,12 +98,11 @@ int test_core_api_object_cat() {
struct HashtableNode* node; struct HashtableNode* node;
size_t bytes_written; size_t bytes_written;
struct IpfsNode *local_node = NULL; struct IpfsNode *local_node = NULL;
pthread_t api_pth = 0;
ipfs_node_offline_new(ipfs_path1, &local_node); ipfs_node_offline_new(ipfs_path1, &local_node);
ipfs_import_file(NULL, filename, &node, local_node, &bytes_written, 0); ipfs_import_file(NULL, filename, &node, local_node, &bytes_written, 0);
memset(hash, 0, 256); memset(hash, 0, 256);
ipfs_cid_hash_to_base58(node->hash, node->hash_size, (unsigned char*)hash, 256); ipfs_cid_hash_to_base58(node->hash, node->hash_size, (unsigned char*)hash, 256);
ipfs_node_free(&api_pth, local_node); ipfs_node_free(local_node);
ipfs_hashtable_node_free(node); ipfs_hashtable_node_free(node);
libp2p_logger_debug("test_api", "*** Firing up daemons ***\n"); libp2p_logger_debug("test_api", "*** Firing up daemons ***\n");
@ -146,6 +145,8 @@ int test_core_api_name_resolve() {
char* resolve_args[] = {"ipfs", "--config", ipfs_path2, "name", "resolve", peer_id1 }; char* resolve_args[] = {"ipfs", "--config", ipfs_path2, "name", "resolve", peer_id1 };
struct CliArguments* args = NULL; struct CliArguments* args = NULL;
libp2p_logger_add_class("api");
// build 2 repos... repo 1 // build 2 repos... repo 1
if (!drop_build_open_repo(ipfs_path1, &fs_repo, config_file1)) { if (!drop_build_open_repo(ipfs_path1, &fs_repo, config_file1)) {
ipfs_repo_fsrepo_free(fs_repo); ipfs_repo_fsrepo_free(fs_repo);
@ -170,20 +171,19 @@ int test_core_api_name_resolve() {
struct HashtableNode* node; struct HashtableNode* node;
size_t bytes_written; size_t bytes_written;
struct IpfsNode *local_node = NULL; struct IpfsNode *local_node = NULL;
pthread_t api_pth = 0;
ipfs_node_offline_new(ipfs_path1, &local_node); ipfs_node_offline_new(ipfs_path1, &local_node);
ipfs_import_file(NULL, filename, &node, local_node, &bytes_written, 0); ipfs_import_file(NULL, filename, &node, local_node, &bytes_written, 0);
memset(hash, 0, 256); memset(hash, 0, 256);
ipfs_cid_hash_to_base58(node->hash, node->hash_size, (unsigned char*)hash, 256); ipfs_cid_hash_to_base58(node->hash, node->hash_size, (unsigned char*)hash, 256);
ipfs_node_free(&api_pth, local_node); ipfs_node_free(local_node);
ipfs_hashtable_node_free(node); ipfs_hashtable_node_free(node);
libp2p_logger_debug("test_api", "*** Firing up daemons ***\n"); libp2p_logger_debug("test_api", "*** Firing up daemons ***\n");
pthread_create(&daemon_thread1, NULL, test_daemon_start, (void*)ipfs_path1); pthread_create(&daemon_thread1, NULL, test_daemon_start, (void*)ipfs_path1);
thread_started1 = 1; thread_started1 = 1;
sleep(3);
pthread_create(&daemon_thread2, NULL, test_daemon_start, (void*)ipfs_path2); pthread_create(&daemon_thread2, NULL, test_daemon_start, (void*)ipfs_path2);
thread_started2 = 1; thread_started2 = 1;
sleep(3); sleep(3);
// publish name on server 1 // publish name on server 1

View file

@ -10,12 +10,11 @@ int test_node_peerstore() {
char* peer_id = NULL; char* peer_id = NULL;
struct IpfsNode *local_node = NULL; struct IpfsNode *local_node = NULL;
struct Libp2pPeer* peer = NULL; struct Libp2pPeer* peer = NULL;
pthread_t api_pth = 0;
if (!drop_and_build_repository(repo_path, 4001, NULL, &peer_id)) if (!drop_and_build_repository(repo_path, 4001, NULL, &peer_id))
goto exit; goto exit;
if (!ipfs_node_online_new(&api_pth, repo_path, &local_node)) if (!ipfs_node_online_new(repo_path, &local_node))
goto exit; goto exit;
// add a peer to the peerstore // add a peer to the peerstore
@ -49,7 +48,7 @@ int test_node_peerstore() {
if (peer != NULL) if (peer != NULL)
libp2p_peer_free(peer); libp2p_peer_free(peer);
if (local_node != NULL) if (local_node != NULL)
ipfs_node_free(&api_pth, local_node); ipfs_node_free(local_node);
return retVal; return retVal;
} }

View file

@ -32,11 +32,10 @@ int test_null_add_provider() {
// add a file, to prime the connection to peer 1 // add a file, to prime the connection to peer 1
//TODO: Find a better way to do this... //TODO: Find a better way to do this...
size_t bytes_written = 0; size_t bytes_written = 0;
pthread_t api_pth = 0; ipfs_node_online_new(ipfs_path, &local_node2);
ipfs_node_online_new(&api_pth, ipfs_path, &local_node2);
struct HashtableNode* node = NULL; struct HashtableNode* node = NULL;
ipfs_import_file(NULL, "/home/parallels/ipfstest/hello_world.txt", &node, local_node2, &bytes_written, 0); ipfs_import_file(NULL, "/home/parallels/ipfstest/hello_world.txt", &node, local_node2, &bytes_written, 0);
ipfs_node_free(&api_pth, local_node2); ipfs_node_free(local_node2);
// start the daemon in a separate thread // start the daemon in a separate thread
if (pthread_create(&thread2, NULL, test_daemon_start, (void*)ipfs_path) < 0) if (pthread_create(&thread2, NULL, test_daemon_start, (void*)ipfs_path) < 0)
goto exit; goto exit;
@ -50,7 +49,7 @@ int test_null_add_provider() {
retVal = 1; retVal = 1;
exit: exit:
if (local_node2 != NULL) if (local_node2 != NULL)
ipfs_node_free(&api_pth, local_node2); ipfs_node_free(local_node2);
if (ma_peer1 != NULL) if (ma_peer1 != NULL)
multiaddress_free(ma_peer1); multiaddress_free(ma_peer1);
ipfs_daemon_stop(); ipfs_daemon_stop();

View file

@ -125,12 +125,11 @@ int test_bitswap_retrieve_file()
size_t bytes_written = 0; size_t bytes_written = 0;
struct Block* block = NULL; struct Block* block = NULL;
struct Cid* cid = NULL; struct Cid* cid = NULL;
pthread_t api_pth = 0;
// build and open the new IPFS repository with no bootstrap peers // build and open the new IPFS repository with no bootstrap peers
os_utils_setenv("IPFS_PATH", ipfs_path, 1); os_utils_setenv("IPFS_PATH", ipfs_path, 1);
drop_and_build_repository(ipfs_path, 4001, NULL, NULL); drop_and_build_repository(ipfs_path, 4001, NULL, NULL);
ipfs_node_online_new(&api_pth, ipfs_path, &localNode); ipfs_node_online_new(ipfs_path, &localNode);
// add a file // add a file
localNode->routing->Bootstrap(localNode->routing); localNode->routing->Bootstrap(localNode->routing);
@ -155,7 +154,7 @@ int test_bitswap_retrieve_file()
ipfs_cid_free(cid); ipfs_cid_free(cid);
if (node != NULL) if (node != NULL)
ipfs_hashtable_node_free(node); ipfs_hashtable_node_free(node);
ipfs_node_free(&api_pth, localNode); ipfs_node_free(localNode);
return retVal; return retVal;
} }
@ -188,7 +187,6 @@ int test_bitswap_retrieve_file_remote() {
struct HashtableNode* node = NULL; struct HashtableNode* node = NULL;
struct Block* result = NULL; struct Block* result = NULL;
struct Cid* cid = NULL; struct Cid* cid = NULL;
pthread_t api_pth1 = 0, api_pth2 = 0;
// create peer 1 // create peer 1
libp2p_logger_debug("test_bitswap", "Firing up daemon 1.\n"); libp2p_logger_debug("test_bitswap", "Firing up daemon 1.\n");
@ -198,7 +196,7 @@ int test_bitswap_retrieve_file_remote() {
ma_peer1 = multiaddress_new_from_string(multiaddress_string); ma_peer1 = multiaddress_new_from_string(multiaddress_string);
// add a file // add a file
size_t bytes_written = 0; size_t bytes_written = 0;
ipfs_node_online_new(&api_pth1, ipfs_path, &ipfs_node1); ipfs_node_online_new(ipfs_path, &ipfs_node1);
ipfs_import_file(NULL, "/home/parallels/ipfstest/hello_world.txt", &node, ipfs_node1, &bytes_written, 0); ipfs_import_file(NULL, "/home/parallels/ipfstest/hello_world.txt", &node, ipfs_node1, &bytes_written, 0);
// start the daemon in a separate thread // start the daemon in a separate thread
if (pthread_create(&thread1, NULL, test_daemon_start, (void*)ipfs_path) < 0) { if (pthread_create(&thread1, NULL, test_daemon_start, (void*)ipfs_path) < 0) {
@ -217,7 +215,7 @@ int test_bitswap_retrieve_file_remote() {
libp2p_utils_vector_add(ma_vector2, ma_peer1); libp2p_utils_vector_add(ma_vector2, ma_peer1);
drop_and_build_repository(ipfs_path, 4002, ma_vector2, &peer_id_2); drop_and_build_repository(ipfs_path, 4002, ma_vector2, &peer_id_2);
multiaddress_free(ma_peer1); multiaddress_free(ma_peer1);
ipfs_node_online_new(&api_pth2, ipfs_path, &ipfs_node2); ipfs_node_online_new(ipfs_path, &ipfs_node2);
ipfs_node2->routing->Bootstrap(ipfs_node2->routing); ipfs_node2->routing->Bootstrap(ipfs_node2->routing);
@ -301,7 +299,6 @@ int test_bitswap_retrieve_file_known_remote() {
struct Libp2pVector* ma_vector2 = NULL; struct Libp2pVector* ma_vector2 = NULL;
struct Block* result = NULL; struct Block* result = NULL;
struct Cid* cid = NULL; struct Cid* cid = NULL;
pthread_t api_pth = 0;
// create peer 1 // create peer 1
char multiaddress_string[255]; char multiaddress_string[255];
@ -315,7 +312,7 @@ int test_bitswap_retrieve_file_known_remote() {
libp2p_utils_vector_add(ma_vector2, ma_peer1); libp2p_utils_vector_add(ma_vector2, ma_peer1);
drop_and_build_repository(ipfs_path, 4002, ma_vector2, &peer_id_2); drop_and_build_repository(ipfs_path, 4002, ma_vector2, &peer_id_2);
multiaddress_free(ma_peer1); multiaddress_free(ma_peer1);
ipfs_node_online_new(&api_pth, ipfs_path, &ipfs_node2); ipfs_node_online_new(ipfs_path, &ipfs_node2);
if (!ipfs_cid_decode_hash_from_base58((unsigned char*)hello_world_hash, strlen(hello_world_hash), &cid)) if (!ipfs_cid_decode_hash_from_base58((unsigned char*)hello_world_hash, strlen(hello_world_hash), &cid))
goto exit; goto exit;
@ -357,7 +354,7 @@ int test_bitswap_retrieve_file_known_remote() {
// ipfs_block_free(result); // ipfs_block_free(result);
if (cid != NULL) if (cid != NULL)
ipfs_cid_free(cid); ipfs_cid_free(cid);
ipfs_node_free(&api_pth, ipfs_node2); ipfs_node_free(ipfs_node2);
return retVal; return retVal;
} }
@ -393,7 +390,6 @@ int test_bitswap_retrieve_file_third_party() {
struct HashtableNode* node = NULL; struct HashtableNode* node = NULL;
struct Block* result = NULL; struct Block* result = NULL;
struct Cid* cid = NULL; struct Cid* cid = NULL;
pthread_t api_pth1 = 0, api_pth2 = 0;
// create peer 1 // create peer 1
libp2p_logger_debug("test_bitswap", "Firing up daemon 1.\n"); libp2p_logger_debug("test_bitswap", "Firing up daemon 1.\n");
@ -422,11 +418,11 @@ int test_bitswap_retrieve_file_third_party() {
// add a file, to prime the connection to peer 1 // add a file, to prime the connection to peer 1
//TODO: Find a better way to do this... //TODO: Find a better way to do this...
size_t bytes_written = 0; size_t bytes_written = 0;
if (!ipfs_node_online_new(&api_pth1, ipfs_path, &ipfs_node2)) if (!ipfs_node_online_new(ipfs_path, &ipfs_node2))
goto exit; goto exit;
ipfs_node2->routing->Bootstrap(ipfs_node2->routing); ipfs_node2->routing->Bootstrap(ipfs_node2->routing);
ipfs_import_file(NULL, "/home/parallels/ipfstest/hello_world.txt", &node, ipfs_node2, &bytes_written, 0); ipfs_import_file(NULL, "/home/parallels/ipfstest/hello_world.txt", &node, ipfs_node2, &bytes_written, 0);
ipfs_node_free(&api_pth1, ipfs_node2); ipfs_node_free(ipfs_node2);
// start the daemon in a separate thread // start the daemon in a separate thread
if (pthread_create(&thread2, NULL, test_daemon_start, (void*)ipfs_path) < 0) { if (pthread_create(&thread2, NULL, test_daemon_start, (void*)ipfs_path) < 0) {
libp2p_logger_error("test_bitswap", "Unable to start thread 2\n"); libp2p_logger_error("test_bitswap", "Unable to start thread 2\n");
@ -444,7 +440,7 @@ int test_bitswap_retrieve_file_third_party() {
libp2p_utils_vector_add(ma_vector3, ma_peer1); libp2p_utils_vector_add(ma_vector3, ma_peer1);
drop_and_build_repository(ipfs_path, 4003, ma_vector3, &peer_id_3); drop_and_build_repository(ipfs_path, 4003, ma_vector3, &peer_id_3);
multiaddress_free(ma_peer1); multiaddress_free(ma_peer1);
ipfs_node_online_new(&api_pth2, ipfs_path, &ipfs_node3); ipfs_node_online_new(ipfs_path, &ipfs_node3);
ipfs_node3->routing->Bootstrap(ipfs_node3->routing); ipfs_node3->routing->Bootstrap(ipfs_node3->routing);
@ -473,7 +469,7 @@ int test_bitswap_retrieve_file_third_party() {
if (thread2_started) if (thread2_started)
pthread_join(thread2, NULL); pthread_join(thread2, NULL);
if (ipfs_node3 != NULL) if (ipfs_node3 != NULL)
ipfs_node_free(&api_pth2, ipfs_node3); ipfs_node_free(ipfs_node3);
if (peer_id_1 != NULL) if (peer_id_1 != NULL)
free(peer_id_1); free(peer_id_1);
if (peer_id_2 != NULL) if (peer_id_2 != NULL)

View file

@ -119,10 +119,9 @@ int test_journal_server_1() {
struct HashtableNode* node; struct HashtableNode* node;
size_t bytes_written; size_t bytes_written;
struct IpfsNode *local_node = NULL; struct IpfsNode *local_node = NULL;
pthread_t api_pth = 0;
ipfs_node_offline_new(ipfs_path, &local_node); ipfs_node_offline_new(ipfs_path, &local_node);
ipfs_import_file(NULL, filename, &node, local_node, &bytes_written, 0); ipfs_import_file(NULL, filename, &node, local_node, &bytes_written, 0);
ipfs_node_free(&api_pth, local_node); ipfs_node_free(local_node);
ipfs_hashtable_node_free(node); ipfs_hashtable_node_free(node);
libp2p_logger_debug("test_journal", "*** Firing up daemon for server 1 ***\n"); libp2p_logger_debug("test_journal", "*** Firing up daemon for server 1 ***\n");

View file

@ -27,7 +27,7 @@ int test_namesys_publisher_publish() {
retVal = 1; retVal = 1;
exit: exit:
ipfs_node_free(NULL, local_node); ipfs_node_free(local_node);
return retVal; return retVal;
} }
@ -72,7 +72,7 @@ int test_namesys_resolver_resolve() {
retVal = 1; retVal = 1;
exit: exit:
ipfs_node_free(NULL, local_node); ipfs_node_free(local_node);
if (result != NULL) if (result != NULL)
free(result); free(result);
return retVal; return retVal;

View file

@ -30,7 +30,6 @@ int test_import_large_file() {
size_t bytes_read2 = 1; size_t bytes_read2 = 1;
unsigned char buf1[100]; unsigned char buf1[100];
unsigned char buf2[100]; unsigned char buf2[100];
pthread_t api_pth = 0;
// create the necessary file // create the necessary file
create_bytes(file_bytes, bytes_size); create_bytes(file_bytes, bytes_size);
@ -42,7 +41,7 @@ int test_import_large_file() {
goto exit; goto exit;
} }
if (!ipfs_node_online_new(&api_pth, repo_dir, &local_node)) { if (!ipfs_node_online_new(repo_dir, &local_node)) {
fprintf(stderr, "Unable to create new IpfsNode\n"); fprintf(stderr, "Unable to create new IpfsNode\n");
goto exit; goto exit;
} }
@ -130,7 +129,7 @@ int test_import_large_file() {
exit: exit:
if (local_node != NULL) if (local_node != NULL)
ipfs_node_free(&api_pth, local_node); ipfs_node_free(local_node);
if (write_node != NULL) if (write_node != NULL)
ipfs_hashtable_node_free(write_node); ipfs_hashtable_node_free(write_node);
if (read_node != NULL) if (read_node != NULL)
@ -148,7 +147,6 @@ int test_import_small_file() {
const char* fileName = "/tmp/test_import_small.tmp"; const char* fileName = "/tmp/test_import_small.tmp";
const char* repo_path = "/tmp/.ipfs"; const char* repo_path = "/tmp/.ipfs";
struct IpfsNode *local_node = NULL; struct IpfsNode *local_node = NULL;
pthread_t api_pth = 0;
// create the necessary file // create the necessary file
create_bytes(file_bytes, bytes_size); create_bytes(file_bytes, bytes_size);
@ -163,7 +161,7 @@ int test_import_small_file() {
struct HashtableNode* write_node; struct HashtableNode* write_node;
size_t bytes_written; size_t bytes_written;
if (ipfs_import_file("/tmp", fileName, &write_node, local_node, &bytes_written, 1) == 0) { if (ipfs_import_file("/tmp", fileName, &write_node, local_node, &bytes_written, 1) == 0) {
ipfs_node_free(&api_pth, local_node); ipfs_node_free(local_node);
return 0; return 0;
} }
@ -174,7 +172,7 @@ int test_import_small_file() {
for(int i = 0; i < 10; i++) { for(int i = 0; i < 10; i++) {
if (write_node->hash[i] != cid_test[i]) { if (write_node->hash[i] != cid_test[i]) {
printf("Hashes do not match at position %d, should be %02x but is %02x\n", i, cid_test[i], write_node->hash[i]); printf("Hashes do not match at position %d, should be %02x but is %02x\n", i, cid_test[i], write_node->hash[i]);
ipfs_node_free(&api_pth, local_node); ipfs_node_free(local_node);
ipfs_hashtable_node_free(write_node); ipfs_hashtable_node_free(write_node);
return 0; return 0;
} }
@ -183,7 +181,7 @@ int test_import_small_file() {
// make sure all went okay // make sure all went okay
struct HashtableNode* read_node; struct HashtableNode* read_node;
if (ipfs_merkledag_get(write_node->hash, write_node->hash_size, &read_node, local_node->repo) == 0) { if (ipfs_merkledag_get(write_node->hash, write_node->hash_size, &read_node, local_node->repo) == 0) {
ipfs_node_free(&api_pth, local_node); ipfs_node_free(local_node);
ipfs_hashtable_node_free(write_node); ipfs_hashtable_node_free(write_node);
return 0; return 0;
} }
@ -191,7 +189,7 @@ int test_import_small_file() {
// compare data // compare data
if (write_node->data_size != bytes_size + 8 || write_node->data_size != read_node->data_size) { if (write_node->data_size != bytes_size + 8 || write_node->data_size != read_node->data_size) {
printf("Data size of nodes are not equal or are incorrect. Should be %lu but are %lu\n", write_node->data_size, read_node->data_size); printf("Data size of nodes are not equal or are incorrect. Should be %lu but are %lu\n", write_node->data_size, read_node->data_size);
ipfs_node_free(&api_pth, local_node); ipfs_node_free(local_node);
ipfs_hashtable_node_free(write_node); ipfs_hashtable_node_free(write_node);
ipfs_hashtable_node_free(read_node); ipfs_hashtable_node_free(read_node);
return 0; return 0;
@ -200,7 +198,7 @@ int test_import_small_file() {
for(int i = 0; i < bytes_size; i++) { for(int i = 0; i < bytes_size; i++) {
if (write_node->data[i] != read_node->data[i]) { if (write_node->data[i] != read_node->data[i]) {
printf("Data within node is different at position %d\n", i); printf("Data within node is different at position %d\n", i);
ipfs_node_free(&api_pth, local_node); ipfs_node_free(local_node);
ipfs_hashtable_node_free(write_node); ipfs_hashtable_node_free(write_node);
ipfs_hashtable_node_free(read_node); ipfs_hashtable_node_free(read_node);
return 0; return 0;
@ -220,7 +218,7 @@ int test_import_small_file() {
fprintf(stderr, "Unable to find any records in the database.\n"); fprintf(stderr, "Unable to find any records in the database.\n");
} }
ipfs_node_free(&api_pth, local_node); ipfs_node_free(local_node);
ipfs_hashtable_node_free(write_node); ipfs_hashtable_node_free(write_node);
ipfs_hashtable_node_free(read_node); ipfs_hashtable_node_free(read_node);

View file

@ -101,7 +101,6 @@ int test_routing_find_peer() {
struct Libp2pVector *ma_vector = NULL; struct Libp2pVector *ma_vector = NULL;
struct Libp2pPeer* result = NULL; struct Libp2pPeer* result = NULL;
struct HashtableNode *node = NULL; struct HashtableNode *node = NULL;
pthread_t api_pth = 0;
//libp2p_logger_add_class("online"); //libp2p_logger_add_class("online");
//libp2p_logger_add_class("null"); //libp2p_logger_add_class("null");
@ -131,10 +130,10 @@ int test_routing_find_peer() {
// add a file, to prime the connection to peer 1 // add a file, to prime the connection to peer 1
//TODO: Find a better way to do this... //TODO: Find a better way to do this...
size_t bytes_written = 0; size_t bytes_written = 0;
ipfs_node_online_new(&api_pth, ipfs_path, &local_node2); ipfs_node_online_new(ipfs_path, &local_node2);
local_node2->routing->Bootstrap(local_node2->routing); local_node2->routing->Bootstrap(local_node2->routing);
ipfs_import_file(NULL, "/home/parallels/ipfstest/hello_world.txt", &node, local_node2, &bytes_written, 0); ipfs_import_file(NULL, "/home/parallels/ipfstest/hello_world.txt", &node, local_node2, &bytes_written, 0);
ipfs_node_free(&api_pth, local_node2); ipfs_node_free(local_node2);
// start the daemon in a separate thread // start the daemon in a separate thread
if (pthread_create(&thread2, NULL, test_daemon_start, (void*)ipfs_path) < 0) if (pthread_create(&thread2, NULL, test_daemon_start, (void*)ipfs_path) < 0)
goto exit; goto exit;
@ -225,7 +224,6 @@ int test_routing_find_providers() {
struct FSRepo* fs_repo = NULL; struct FSRepo* fs_repo = NULL;
struct HashtableNode* node = NULL; struct HashtableNode* node = NULL;
struct Libp2pVector* result = NULL; struct Libp2pVector* result = NULL;
pthread_t api_pth = 0;
// create peer 1 // create peer 1
drop_and_build_repository(ipfs_path, 4001, NULL, &peer_id_1); drop_and_build_repository(ipfs_path, 4001, NULL, &peer_id_1);
@ -250,9 +248,9 @@ int test_routing_find_providers() {
// add a file, to prime the connection to peer 1 // add a file, to prime the connection to peer 1
//TODO: Find a better way to do this... //TODO: Find a better way to do this...
size_t bytes_written = 0; size_t bytes_written = 0;
ipfs_node_online_new(&api_pth, ipfs_path, &local_node2); ipfs_node_online_new(ipfs_path, &local_node2);
ipfs_import_file(NULL, "/home/parallels/ipfstest/hello_world.txt", &node, local_node2, &bytes_written, 0); ipfs_import_file(NULL, "/home/parallels/ipfstest/hello_world.txt", &node, local_node2, &bytes_written, 0);
ipfs_node_free(&api_pth, local_node2); ipfs_node_free(local_node2);
// start the daemon in a separate thread // start the daemon in a separate thread
if (pthread_create(&thread2, NULL, test_daemon_start, (void*)ipfs_path) < 0) { if (pthread_create(&thread2, NULL, test_daemon_start, (void*)ipfs_path) < 0) {
fprintf(stderr, "Unable to start thread 2\n"); fprintf(stderr, "Unable to start thread 2\n");
@ -378,7 +376,6 @@ int test_routing_provide() {
struct MultiAddress* ma_peer1 = NULL; struct MultiAddress* ma_peer1 = NULL;
struct Libp2pVector* ma_vector2 = NULL; struct Libp2pVector* ma_vector2 = NULL;
struct HashtableNode* node = NULL; struct HashtableNode* node = NULL;
pthread_t api_pth = 0;
libp2p_logger_add_class("daemon"); libp2p_logger_add_class("daemon");
libp2p_logger_add_class("null"); libp2p_logger_add_class("null");
@ -406,9 +403,9 @@ int test_routing_provide() {
// add a file, to prime the connection to peer 1 // add a file, to prime the connection to peer 1
//TODO: Find a better way to do this... //TODO: Find a better way to do this...
size_t bytes_written = 0; size_t bytes_written = 0;
ipfs_node_online_new(&api_pth, ipfs_path, &local_node2); ipfs_node_online_new(ipfs_path, &local_node2);
ipfs_import_file(NULL, "/home/parallels/ipfstest/hello_world.txt", &node, local_node2, &bytes_written, 0); ipfs_import_file(NULL, "/home/parallels/ipfstest/hello_world.txt", &node, local_node2, &bytes_written, 0);
ipfs_node_free(&api_pth, local_node2); ipfs_node_free(local_node2);
// start the daemon in a separate thread // start the daemon in a separate thread
if (pthread_create(&thread2, NULL, test_daemon_start, (void*)ipfs_path) < 0) { if (pthread_create(&thread2, NULL, test_daemon_start, (void*)ipfs_path) < 0) {
fprintf(stderr, "Unable to start thread 2\n"); fprintf(stderr, "Unable to start thread 2\n");
@ -469,8 +466,6 @@ int test_routing_retrieve_file_third_party() {
struct MultiAddress* ma_peer1 = NULL; struct MultiAddress* ma_peer1 = NULL;
struct Libp2pVector* ma_vector2 = NULL, *ma_vector3 = NULL; struct Libp2pVector* ma_vector2 = NULL, *ma_vector3 = NULL;
struct HashtableNode* node = NULL, *result_node = NULL; struct HashtableNode* node = NULL, *result_node = NULL;
pthread_t api_pth1 = 0;
pthread_t api_pth2 = 0;
// create peer 1 // create peer 1
drop_and_build_repository(ipfs_path, 4001, NULL, &peer_id_1); drop_and_build_repository(ipfs_path, 4001, NULL, &peer_id_1);
@ -500,11 +495,11 @@ int test_routing_retrieve_file_third_party() {
// add a file, to prime the connection to peer 1 // add a file, to prime the connection to peer 1
//TODO: Find a better way to do this... //TODO: Find a better way to do this...
size_t bytes_written = 0; size_t bytes_written = 0;
if (!ipfs_node_online_new(&api_pth1, ipfs_path, &ipfs_node2)) if (!ipfs_node_online_new(ipfs_path, &ipfs_node2))
goto exit; goto exit;
ipfs_node2->routing->Bootstrap(ipfs_node2->routing); ipfs_node2->routing->Bootstrap(ipfs_node2->routing);
ipfs_import_file(NULL, "/home/parallels/ipfstest/hello_world.txt", &node, ipfs_node2, &bytes_written, 0); ipfs_import_file(NULL, "/home/parallels/ipfstest/hello_world.txt", &node, ipfs_node2, &bytes_written, 0);
ipfs_node_free(&api_pth1, ipfs_node2); ipfs_node_free(ipfs_node2);
// start the daemon in a separate thread // start the daemon in a separate thread
libp2p_logger_debug("test_routing", "Firing up daemon 2.\n"); libp2p_logger_debug("test_routing", "Firing up daemon 2.\n");
if (pthread_create(&thread2, NULL, test_daemon_start, (void*)ipfs_path) < 0) { if (pthread_create(&thread2, NULL, test_daemon_start, (void*)ipfs_path) < 0) {
@ -525,7 +520,7 @@ int test_routing_retrieve_file_third_party() {
libp2p_utils_vector_add(ma_vector3, ma_peer1); libp2p_utils_vector_add(ma_vector3, ma_peer1);
drop_and_build_repository(ipfs_path, 4003, ma_vector3, &peer_id_3); drop_and_build_repository(ipfs_path, 4003, ma_vector3, &peer_id_3);
multiaddress_free(ma_peer1); multiaddress_free(ma_peer1);
ipfs_node_online_new(&api_pth2, ipfs_path, &ipfs_node3); ipfs_node_online_new(ipfs_path, &ipfs_node3);
ipfs_node3->routing->Bootstrap(ipfs_node3->routing); ipfs_node3->routing->Bootstrap(ipfs_node3->routing);
@ -552,7 +547,7 @@ int test_routing_retrieve_file_third_party() {
if (thread2_started) if (thread2_started)
pthread_join(thread2, NULL); pthread_join(thread2, NULL);
if (ipfs_node3 != NULL) if (ipfs_node3 != NULL)
ipfs_node_free(&api_pth2, ipfs_node3); ipfs_node_free(ipfs_node3);
if (peer_id_1 != NULL) if (peer_id_1 != NULL)
free(peer_id_1); free(peer_id_1);
if (peer_id_2 != NULL) if (peer_id_2 != NULL)
@ -634,12 +629,11 @@ int test_routing_retrieve_large_file() {
// add a file, to prime the connection to peer 1 // add a file, to prime the connection to peer 1
//TODO: Find a better way to do this... //TODO: Find a better way to do this...
size_t bytes_written = 0; size_t bytes_written = 0;
pthread_t api_pth1 = 0; if (!ipfs_node_online_new(ipfs_path, &ipfs_node2))
if (!ipfs_node_online_new(&api_pth1, ipfs_path, &ipfs_node2))
goto exit; goto exit;
ipfs_node2->routing->Bootstrap(ipfs_node2->routing); ipfs_node2->routing->Bootstrap(ipfs_node2->routing);
ipfs_import_file(NULL, "/home/parallels/ipfstest/test_import_large.tmp", &node, ipfs_node2, &bytes_written, 0); ipfs_import_file(NULL, "/home/parallels/ipfstest/test_import_large.tmp", &node, ipfs_node2, &bytes_written, 0);
ipfs_node_free(&api_pth1, ipfs_node2); ipfs_node_free(ipfs_node2);
// start the daemon in a separate thread // start the daemon in a separate thread
libp2p_logger_debug("test_routing", "Firing up daemon 2.\n"); libp2p_logger_debug("test_routing", "Firing up daemon 2.\n");
if (pthread_create(&thread2, NULL, test_daemon_start, (void*)ipfs_path) < 0) { if (pthread_create(&thread2, NULL, test_daemon_start, (void*)ipfs_path) < 0) {
@ -661,8 +655,7 @@ int test_routing_retrieve_large_file() {
libp2p_utils_vector_add(ma_vector3, ma_peer1); libp2p_utils_vector_add(ma_vector3, ma_peer1);
drop_and_build_repository(ipfs_path, 4003, ma_vector3, &peer_id_3); drop_and_build_repository(ipfs_path, 4003, ma_vector3, &peer_id_3);
multiaddress_free(ma_peer1); multiaddress_free(ma_peer1);
pthread_t api_pth2 = 0; ipfs_node_online_new(ipfs_path, &ipfs_node3);
ipfs_node_online_new(&api_pth2, ipfs_path, &ipfs_node3);
ipfs_node3->routing->Bootstrap(ipfs_node3->routing); ipfs_node3->routing->Bootstrap(ipfs_node3->routing);
@ -687,7 +680,7 @@ int test_routing_retrieve_large_file() {
if (thread2_started) if (thread2_started)
pthread_join(thread2, NULL); pthread_join(thread2, NULL);
if (ipfs_node3 != NULL) if (ipfs_node3 != NULL)
ipfs_node_free(&api_pth2, ipfs_node3); ipfs_node_free(ipfs_node3);
if (peer_id_1 != NULL) if (peer_id_1 != NULL)
free(peer_id_1); free(peer_id_1);
if (peer_id_2 != NULL) if (peer_id_2 != NULL)