mirror of https://github.com/oxen-io/lokinet
split up liblokinet headers
parent
118bc9c2fb
commit
3d76e3d4bd
@ -0,0 +1,15 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "lokinet_context.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// get a free()-able null terminated string that holds our .loki address
|
||||||
|
/// returns NULL if we dont have one right now
|
||||||
|
char*
|
||||||
|
lokinet_address(struct lokinet_context*);
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
@ -0,0 +1,55 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct lokinet_context;
|
||||||
|
|
||||||
|
/// allocate a new lokinet context
|
||||||
|
struct lokinet_context*
|
||||||
|
lokinet_context_new();
|
||||||
|
|
||||||
|
/// free a context allocated by lokinet_context_new
|
||||||
|
void
|
||||||
|
lokinet_context_free(struct lokinet_context*);
|
||||||
|
|
||||||
|
/// spawn all the threads needed for operation and start running
|
||||||
|
/// return 0 on success
|
||||||
|
/// return non zero on fail
|
||||||
|
int
|
||||||
|
lokinet_context_start(struct lokinet_context*);
|
||||||
|
|
||||||
|
/// return 0 if we our endpoint has published on the network and is ready to send
|
||||||
|
/// return -1 if we don't have enough paths ready
|
||||||
|
/// retrun -2 if we look deadlocked
|
||||||
|
/// retrun -3 if context was null or not started yet
|
||||||
|
int
|
||||||
|
lokinet_status(struct lokinet_context*);
|
||||||
|
|
||||||
|
/// wait at most N milliseconds for lokinet to build paths and get ready
|
||||||
|
/// return 0 if we are ready
|
||||||
|
/// return nonzero if we are not ready
|
||||||
|
int
|
||||||
|
lokinet_wait_for_ready(int N, struct lokinet_context*);
|
||||||
|
|
||||||
|
/// stop all operations on this lokinet context
|
||||||
|
void
|
||||||
|
lokinet_context_stop(struct lokinet_context*);
|
||||||
|
|
||||||
|
/// load a bootstrap RC from memory
|
||||||
|
/// return 0 on success
|
||||||
|
/// return non zero on fail
|
||||||
|
int
|
||||||
|
lokinet_add_bootstrap_rc(const char*, size_t, struct lokinet_context*);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
@ -0,0 +1,27 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// change our network id globally across all contexts
|
||||||
|
void
|
||||||
|
lokinet_set_netid(const char*);
|
||||||
|
|
||||||
|
/// get our current netid
|
||||||
|
/// must be free()'d after use
|
||||||
|
const char*
|
||||||
|
lokinet_get_netid();
|
||||||
|
|
||||||
|
/// set log level
|
||||||
|
/// possible values: trace, debug, info, warn, error, none
|
||||||
|
/// return 0 on success
|
||||||
|
/// return non zero on fail
|
||||||
|
int
|
||||||
|
lokinet_log_level(const char*);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
@ -0,0 +1,61 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "lokinet_context.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// a single srv record
|
||||||
|
struct lokinet_srv_record
|
||||||
|
{
|
||||||
|
/// the srv priority of the record
|
||||||
|
uint16_t priority;
|
||||||
|
/// the weight of this record
|
||||||
|
uint16_t weight;
|
||||||
|
/// null terminated string of the hostname
|
||||||
|
char * target;
|
||||||
|
/// the port to use
|
||||||
|
int port;
|
||||||
|
};
|
||||||
|
|
||||||
|
/// private members of a srv lookup
|
||||||
|
struct lokinet_srv_lookup_private;
|
||||||
|
|
||||||
|
/// the result of an srv lookup
|
||||||
|
struct lokinet_srv_lookup_result
|
||||||
|
{
|
||||||
|
/// pointer to internal members
|
||||||
|
/// dont touch me
|
||||||
|
struct lokinet_srv_lookup_private * internal;
|
||||||
|
/// set to zero on success otherwise is the error code
|
||||||
|
///
|
||||||
|
int error;
|
||||||
|
};
|
||||||
|
|
||||||
|
/// do a srv lookup on host for service
|
||||||
|
/// caller MUST call lokinet_srv_lookup_done when they are done handling the result
|
||||||
|
void
|
||||||
|
lokinet_srv_lookup(char * host, char * service, struct lokinet_srv_lookup_result * result, struct lokinet_context * ctx);
|
||||||
|
|
||||||
|
|
||||||
|
/// a hook function to handle each srv record in a srv lookup result
|
||||||
|
/// passes in NULL when we are at the end of iteration
|
||||||
|
/// passes in void * user data
|
||||||
|
/// hook should NOT free the record
|
||||||
|
typedef void (*lokinet_srv_record_iterator)(struct lokinet_srv_record *, void *);
|
||||||
|
|
||||||
|
/// iterate over each srv record in a lookup result
|
||||||
|
/// user is passes into hook and called for each result and then with NULL as the result on the end of iteration
|
||||||
|
void
|
||||||
|
lokinet_for_each_srv_record(struct lokinet_srv_lookup_result * result, lokinet_srv_record_iterator iter, void * user);
|
||||||
|
|
||||||
|
|
||||||
|
/// free internal members of a srv lookup result after use of the result
|
||||||
|
void
|
||||||
|
lokinet_srv_lookup_done(struct lokinet_srv_lookup_result * result);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
@ -0,0 +1,62 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "lokinet_context.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// the result of a lokinet stream mapping attempt
|
||||||
|
#pragma pack(1)
|
||||||
|
struct lokinet_stream_result
|
||||||
|
{
|
||||||
|
/// set to zero on success otherwise the error that happened
|
||||||
|
/// use strerror(3) to get printable string of this error
|
||||||
|
int error;
|
||||||
|
|
||||||
|
/// the local ip address we mapped the remote endpoint to
|
||||||
|
/// null terminated
|
||||||
|
char local_address[256];
|
||||||
|
/// the local port we mapped the remote endpoint to
|
||||||
|
int local_port;
|
||||||
|
/// the id of the stream we created
|
||||||
|
int stream_id;
|
||||||
|
};
|
||||||
|
#pragma pack()
|
||||||
|
|
||||||
|
/// connect out to a remote endpoint
|
||||||
|
/// remoteAddr is in the form of "name:port"
|
||||||
|
/// localAddr is either NULL for any or in the form of "ip:port" to bind to an explicit address
|
||||||
|
void
|
||||||
|
lokinet_outbound_stream(
|
||||||
|
struct lokinet_stream_result* result,
|
||||||
|
const char* remoteAddr,
|
||||||
|
const char* localAddr,
|
||||||
|
struct lokinet_context* context);
|
||||||
|
|
||||||
|
/// stream accept filter determines if we should accept a stream or not
|
||||||
|
/// return 0 to accept
|
||||||
|
/// return -1 to explicitly reject
|
||||||
|
/// return -2 to silently drop
|
||||||
|
typedef int (*lokinet_stream_filter)(const char* remote, uint16_t port, void*);
|
||||||
|
|
||||||
|
/// set stream accepter filter
|
||||||
|
/// passes user parameter into stream filter as void *
|
||||||
|
/// returns stream id
|
||||||
|
int
|
||||||
|
lokinet_inbound_stream_filter(
|
||||||
|
lokinet_stream_filter acceptFilter, void* user, struct lokinet_context* context);
|
||||||
|
|
||||||
|
/// simple stream acceptor
|
||||||
|
/// simple variant of lokinet_inbound_stream_filter that maps port to localhost:port
|
||||||
|
int
|
||||||
|
lokinet_inbound_stream(uint16_t port, struct lokinet_context* context);
|
||||||
|
|
||||||
|
/// close a stream by id
|
||||||
|
void
|
||||||
|
lokinet_close_stream(int stream_id, struct lokinet_context* context);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
Loading…
Reference in New Issue