X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Fmeshlink_internal.h;h=f895e02f6b50dffebc28e80232fd0f3ef8141eaa;hb=d65ff28f38ba779fbd6f970fb3c84b0ed98daa28;hp=f32e87e65b18a20959b26dcd1404fc4a46473437;hpb=ea20fcfcded669ce8fbbda3a1f93f354ed254603;p=meshlink diff --git a/src/meshlink_internal.h b/src/meshlink_internal.h index f32e87e6..f895e02f 100644 --- a/src/meshlink_internal.h +++ b/src/meshlink_internal.h @@ -42,8 +42,8 @@ static const char meshlink_invitation_label[] = "MeshLink invitation"; static const char meshlink_tcp_label[] = "MeshLink TCP"; static const char meshlink_udp_label[] = "MeshLink UDP"; -#define MESHLINK_CONFIG_VERSION 1 -#define MESHLINK_INVITATION_VERSION 1 +#define MESHLINK_CONFIG_VERSION 2 +#define MESHLINK_INVITATION_VERSION 2 struct CattaServer; struct CattaSServiceBrowser; @@ -54,6 +54,7 @@ typedef struct listen_socket_t { struct io_t tcp; struct io_t udp; sockaddr_t sa; + sockaddr_t broadcast_sa; bool bindto; } listen_socket_t; @@ -81,6 +82,7 @@ struct meshlink_open_params { typedef struct { int pinginterval; int pingtimeout; + int fast_retry_period; unsigned int min_connects; unsigned int max_connects; int edge_weight; @@ -93,13 +95,14 @@ struct meshlink_handle { void *priv; // private members - pthread_mutex_t mesh_mutex; + pthread_mutex_t mutex; event_loop_t loop; struct node_t *self; meshlink_log_cb_t log_cb; meshlink_log_level_t log_level; // The most important network-related members come first + int reachable; int listen_sockets; listen_socket_t listen_socket[MAXSOCKETS]; @@ -127,11 +130,13 @@ struct meshlink_handle { time_t connection_burst_time; time_t last_config_check; time_t last_hard_try; + time_t last_unreachable; timeout_t pingtimer; timeout_t periodictimer; struct connection_t *everyone; uint64_t prng_state[4]; + uint32_t session_id; int next_pit; int pits[10]; @@ -142,6 +147,7 @@ struct meshlink_handle { meshlink_channel_accept_cb_t channel_accept_cb; meshlink_node_duplicate_cb_t node_duplicate_cb; meshlink_connection_try_cb_t connection_try_cb; + meshlink_error_cb_t error_cb; // Mesh parameters char *appname; @@ -162,11 +168,11 @@ struct meshlink_handle { bool default_blacklist; bool discovery; // Whether Catta is enabled or not - + bool inviter_commits_first; // Configuration char *confbase; - FILE *conffile; + FILE *lockfile; void *config_key; // Thread management @@ -186,17 +192,6 @@ struct meshlink_handle { char *catta_servicetype; unsigned int catta_interfaces; - // State used for meshlink_join() - int sock; - char cookie[18], hash[18]; - bool success; - sptps_t sptps; - char *data; - size_t thedatalen; - size_t blen; - char line[4096]; - char buffer[4096]; - // Proxy configuration, currently not exposed. char *proxyhost; char *proxyport; @@ -256,6 +251,7 @@ extern meshlink_log_level_t global_log_level; extern meshlink_log_cb_t global_log_cb; extern void handle_duplicate_node(meshlink_handle_t *mesh, struct node_t *n); extern void handle_network_change(meshlink_handle_t *mesh, bool online); +extern void call_error_cb(meshlink_handle_t *mesh, meshlink_errno_t meshlink_errno); /// Per-instance PRNG static inline int prng(meshlink_handle_t *mesh, uint64_t max) {