c-ipfs/include/ipfs/routing/routing.h

89 lines
3.2 KiB
C
Raw Normal View History

#pragma once
#include "libp2p/crypto/rsa.h"
#include "libp2p/record/message.h"
2017-02-27 17:27:40 +00:00
#include "ipfs/core/ipfs_node.h"
// offlineRouting implements the IpfsRouting interface,
// but only provides the capability to Put and Get signed dht
// records to and from the local datastore.
struct s_ipfs_routing {
2017-02-27 17:27:40 +00:00
struct IpfsNode* local_node;
size_t ds_len;
struct RsaPrivateKey* sk;
struct Stream* stream;
/**
* Put a value in the datastore
* @param 1 the struct that contains connection information
* @param 2 the key
* @param 3 the size of the key
* @param 4 the value
* @param 5 the size of the value
* @returns 0 on success, otherwise -1
*/
int (*PutValue) (struct s_ipfs_routing*, char*, size_t, void*, size_t);
/**
* Get a value from the datastore
* @param 1 the struct that contains the connection information
* @param 2 the key to look for
* @param 3 the size of the key
* @param 4 a place to store the value
* @param 5 the size of the value
*/
int (*GetValue) (struct s_ipfs_routing*, char*, size_t, void**, size_t*);
/**
* Find a provider
* @param 1 the context
* @param 2 the information that is being looked for
* @param 3 the size of param 2
* @param 4 the information found
* @param 5 the size of the information found
*/
2017-03-19 19:40:16 +00:00
int (*FindProviders) (struct s_ipfs_routing*, char*, size_t, struct Libp2pVector** multiaddresses);
/**
* Find a peer
* @param 1 the context
* @param 2 the peer to look for
* @param 3 the size of the peer char array
* @param 4 the results
* @param 5 the size of the results
*/
int (*FindPeer) (struct s_ipfs_routing*, char*, size_t, void*, size_t*);
/**
* Announce to the network that this host can provide this key
* @param 1 the context
* @param 2 the key
* @param 3 the key size
* @returns true(1) on success, otherwise false(0)
*/
int (*Provide) (struct s_ipfs_routing*, char*, size_t);
/**
* Ping
* @param routing the context
* @param message the message
* @returns true(1) on success, otherwise false(0)
*/
int (*Ping) (struct s_ipfs_routing*, struct Libp2pMessage*);
/**
* Get everything going
* @param routing the context
* @returns true(1) on success, otherwise false(0)
*/
int (*Bootstrap) (struct s_ipfs_routing*);
};
typedef struct s_ipfs_routing ipfs_routing;
// offline routing routines.
2017-02-27 17:27:40 +00:00
ipfs_routing* ipfs_routing_new_offline (struct IpfsNode* local_node, struct RsaPrivateKey *private_key);
2017-03-09 23:03:21 +00:00
// online using secio, should probably be deprecated
2017-02-27 17:27:40 +00:00
ipfs_routing* ipfs_routing_new_online (struct IpfsNode* local_node, struct RsaPrivateKey* private_key, struct Stream* stream);
2017-03-09 23:03:21 +00:00
// online using DHT/kademlia, the recommended router
ipfs_routing* ipfs_routing_new_kademlia(struct IpfsNode* local_node, struct RsaPrivateKey* private_key, struct Stream* stream);
// generic routines
int ipfs_routing_generic_put_value (ipfs_routing* offlineRouting, char *key, size_t key_size, void *val, size_t vlen);
int ipfs_routing_generic_get_value (ipfs_routing* offlineRouting, char *key, size_t key_size, void **val, size_t *vlen);
// supernode
2017-03-19 13:05:25 +00:00
int ipfs_routing_supernode_parse_provider(const unsigned char* in, size_t in_size, struct Libp2pLinkedList** multiaddresses);