int pinginterval;
int pingtimeout;
int fast_retry_period;
+ int maxtimeout;
unsigned int min_connects;
unsigned int max_connects;
int edge_weight;
// Infrequently used callbacks
meshlink_node_status_cb_t node_status_cb;
+ meshlink_node_status_cb_t meta_status_cb;
meshlink_node_pmtu_cb_t node_pmtu_cb;
+ meshlink_channel_listen_cb_t channel_listen_cb;
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;
+ meshlink_blacklisted_cb_t blacklisted_cb;
// Mesh parameters
char *appname;
dev_class_t devclass;
int invitation_timeout;
- int maxtimeout;
int udp_choice;
dev_class_traits_t dev_class_traits[DEV_CLASS_COUNT];
struct meshlink_channel {
struct node_t *node;
void *priv;
+ bool in_callback;
struct utcp_connection *c;
meshlink_aio_buffer_t *aio_send;
uint8_t source[16];
} __attribute__((__packed__)) meshlink_packethdr_t;
-extern void meshlink_send_from_queue(event_loop_t *loop, void *mesh);
-extern void update_node_status(meshlink_handle_t *mesh, struct node_t *n);
-extern void update_node_pmtu(meshlink_handle_t *mesh, struct node_t *n);
+void meshlink_send_from_queue(event_loop_t *loop, void *mesh);
+void update_node_status(meshlink_handle_t *mesh, struct node_t *n);
+void update_node_pmtu(meshlink_handle_t *mesh, struct node_t *n);
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);
+void handle_duplicate_node(meshlink_handle_t *mesh, struct node_t *n);
+void handle_network_change(meshlink_handle_t *mesh, bool online);
+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) {