More go compat fixes

yamux
John Jones 2017-11-28 22:44:45 -05:00
parent f3db50c3ba
commit 48b9647a3c
6 changed files with 29 additions and 24 deletions

View File

@ -312,15 +312,6 @@ int ipfs_core_http_process_swarm_connect(struct IpfsNode* local_node, struct Htt
multiaddress_free(ma);
return 0;
}
// ok, we're good. Start a thread to listen to them, and send stuff back to the user
// JMJ Debug - just put a loop here for testing
while(1) {
int retVal = ipfs_null_listen_and_handle(new_peer->sessionContext->default_stream, local_node->protocol_handlers);
if (retVal < 0)
break;
else
sleep(1);
}
*resp = ipfs_core_http_response_new();
struct HttpResponse* response = *resp;
if (response == NULL) {

View File

@ -94,13 +94,14 @@ int ipfs_node_online_new(const char* repo_path, struct IpfsNode** node) {
local_node->repo = fs_repo;
local_node->identity = fs_repo->config->identity;
local_node->peerstore = libp2p_peerstore_new(local_node->identity->peer);
local_node->dialer = libp2p_conn_dialer_new(local_node->identity->peer, local_node->peerstore, &local_node->identity->private_key);
local_node->providerstore = libp2p_providerstore_new(fs_repo->config->datastore, local_node->identity->peer);
local_node->blockstore = ipfs_blockstore_new(fs_repo);
local_node->protocol_handlers = ipfs_node_online_build_protocol_handlers(local_node);
local_node->mode = MODE_OFFLINE;
local_node->routing = ipfs_routing_new_online(local_node, &fs_repo->config->identity->private_key);
local_node->exchange = ipfs_bitswap_new(local_node);
local_node->swarm = libp2p_swarm_new(local_node->protocol_handlers, local_node->repo->config->datastore, local_node->repo->config->filestore);
local_node->dialer = libp2p_conn_dialer_new(local_node->identity->peer, local_node->peerstore, &local_node->identity->private_key, local_node->swarm);
// fire up the API
api_start(local_node, 10, 5);
@ -140,13 +141,14 @@ int ipfs_node_offline_new(const char* repo_path, struct IpfsNode** node) {
local_node->repo = fs_repo;
local_node->identity = fs_repo->config->identity;
local_node->peerstore = libp2p_peerstore_new(local_node->identity->peer);
local_node->dialer = libp2p_conn_dialer_new(local_node->identity->peer, local_node->peerstore, &local_node->identity->private_key);
local_node->providerstore = libp2p_providerstore_new(fs_repo->config->datastore, local_node->identity->peer);
local_node->blockstore = ipfs_blockstore_new(fs_repo);
local_node->protocol_handlers = ipfs_node_online_build_protocol_handlers(local_node);
local_node->mode = MODE_OFFLINE;
local_node->routing = ipfs_routing_new_offline(local_node, &fs_repo->config->identity->private_key);
local_node->exchange = ipfs_bitswap_new(local_node);
local_node->swarm = libp2p_swarm_new(local_node->protocol_handlers, local_node->repo->config->datastore, local_node->repo->config->filestore);
local_node->dialer = libp2p_conn_dialer_new(local_node->identity->peer, local_node->peerstore, &local_node->identity->private_key, local_node->swarm);
if (api_running(local_node))
local_node->mode = MODE_API_AVAILABLE;

View File

@ -18,6 +18,7 @@
#include "libp2p/routing/dht_protocol.h"
#include "libp2p/secio/secio.h"
#include "libp2p/utils/logger.h"
#include "libp2p/swarm/swarm.h"
#include "ipfs/core/daemon.h"
#include "ipfs/core/ipfs_node.h"
#include "ipfs/exchange/bitswap/network.h"
@ -26,6 +27,7 @@
#include "ipfs/merkledag/node.h"
#include "ipfs/routing/routing.h"
#include "ipfs/util/thread_pool.h"
#include "libp2p/swarm/swarm.h"
#define BUF_SIZE 4096
@ -153,9 +155,8 @@ void* ipfs_null_listen (void *ptr)
{
null_shutting_down = 0;
int socketfd, s, count = 0;
threadpool thpool = thpool_init(25);
//threadpool thpool = thpool_init(25);
struct IpfsNodeListenParams *listen_param;
struct null_connection_params *connection_param;
listen_param = (struct IpfsNodeListenParams*) ptr;
@ -186,6 +187,10 @@ void* ipfs_null_listen (void *ptr)
continue;
}
// add the new connection to the swarm
libp2p_swarm_add_connection(listen_param->local_node->swarm, s, listen_param->ipv4, listen_param->port);
/*
count++;
connection_param = malloc (sizeof (struct null_connection_params));
if (connection_param) {
@ -207,18 +212,20 @@ void* ipfs_null_listen (void *ptr)
// Create pthread for ipfs_null_connection.
thpool_add_work(thpool, ipfs_null_connection, connection_param);
}
} else {
// timeout... do maintenance
struct PeerEntry* entry = current_peer_entry->item;
ipfs_null_do_maintenance(listen_param->local_node, entry->peer);
if (current_peer_entry != NULL)
current_peer_entry = current_peer_entry->next;
if (current_peer_entry == NULL)
current_peer_entry = listen_param->local_node->peerstore->head_entry;
}
*/
} else {
// timeout... do maintenance
struct PeerEntry* entry = current_peer_entry->item;
// JMJ Debugging
//ipfs_null_do_maintenance(listen_param->local_node, entry->peer);
if (current_peer_entry != NULL)
current_peer_entry = current_peer_entry->next;
if (current_peer_entry == NULL)
current_peer_entry = listen_param->local_node->peerstore->head_entry;
}
}
thpool_destroy(thpool);
//thpool_destroy(thpool);
close(socketfd);

View File

@ -3,6 +3,7 @@
#include <pthread.h>
#include "libp2p/peer/peerstore.h"
#include "libp2p/peer/providerstore.h"
#include "libp2p/swarm/swarm.h"
#include "ipfs/blocks/blockstore.h"
#include "ipfs/exchange/exchange.h"
#include "ipfs/repo/config/identity.h"
@ -39,6 +40,7 @@ struct IpfsNode {
struct Libp2pVector* protocol_handlers;
struct ApiContext* api_context;
struct Dialer* dialer;
struct SwarmContext* swarm;
//struct Pinner pinning; // an interface
//struct Mount** mounts;
// TODO: Add more here

View File

@ -19,6 +19,9 @@ int test_compat_go_join_swarm() {
libp2p_logger_add_class("yamux");
libp2p_logger_add_class("identify");
libp2p_logger_add_class("null");
libp2p_logger_add_class("multistream");
libp2p_logger_add_class("swarm");
libp2p_logger_add_class("secio");
// Here is the connection information for the GO version:
char* remote_string = "/ip4/10.211.55.2/tcp/4001/ipfs/QmacSE6bCZiAu7nrYkhPATaSoL2q9BszkKzbX6fCiXuBGA";

View File

@ -55,7 +55,7 @@ int test_ping() {
remote_peer->addr_head->item = multiaddress_new_from_string("/ip4/192.168.43.234/tcp/4001/");
// connect using a dialer
dialer = libp2p_conn_dialer_new(fs_repo->config->identity->peer, NULL, NULL);
dialer = libp2p_conn_dialer_new(fs_repo->config->identity->peer, NULL, NULL, NULL);
conn = libp2p_conn_dialer_get_connection(dialer, remote_peer->addr_head->item);
//TODO: Dialer should know the protocol