flesh out lokinet.h more

This commit is contained in:
Jeff Becker 2021-03-08 13:20:36 -05:00
parent 414c2d42e6
commit affd2e23f7
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05
1 changed files with 58 additions and 7 deletions

View File

@ -1,21 +1,72 @@
#ifndef LOKINET_H
#define LOKINET_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdbool.h>
#ifdef __cplusplus
extern "C"
{
#endif
struct lokinet_context;
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 *);
lokinet_context_free(struct lokinet_context*);
/// spawn all the threads needed for operation and start running
void
lokinet_context_start(struct lokinet_context*);
/// stop all operations on this lokinet context
void
lokinet_context_stop(struct lokinet_context*);
/// get default lokinet context
/// does not need to be freed by lokinet_context_free
struct lokinet_context*
lokinet_default();
/// the result of a lokinet stream mapping attempt
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 errno;
/// the local ip address we mapped the remote endpoint to
char* local_address;
/// the local port we mapped the remote endpoint to
int local_port;
};
/// connect out to a remote endpoint
/// remote is in the form of "name:port"
/// returns NULL if context was NULL or not started
/// returns a free()-able lokinet_stream_result * that contains the result
struct lokinet_stream_result*
lokinet_outbound_stream(const char* remote, 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*, uint16_t, struct sockaddr* const, void*);
/// set stream accepter filter
/// passes user parameter into stream filter as void *
void
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
void
lokinet_inbound_stream(uint16_t port, struct lokinet_context* context);
#ifdef __cplusplus
}