#include "event.h"
#include "hash.h"
-#include "logger.h"
#include "meshlink.h"
+#include "meshlink_queue.h"
#include "sockaddr.h"
#include "sptps.h"
#define MAXSOCKETS 8 /* Probably overkill... */
+struct AvahiServer;
+struct AvahiSServiceBrowser;
+struct AvahiSimplePoll;
+struct AvahiSEntryGroup;
+
typedef struct listen_socket_t {
struct io_t tcp;
struct io_t udp;
PROXY_EXEC,
} proxytype_t;
+typedef struct outpacketqueue {
+ meshlink_node_t *destination;
+ const void *data;
+ unsigned int len;
+} outpacketqueue_t;
+
/// A handle for an instance of MeshLink.
struct meshlink_handle {
- char *confbase;
char *name;
+ char *appname;
+ dev_class_t devclass;
+ void *priv;
+
+ char *confbase;
meshlink_receive_cb_t receive_cb;
meshlink_node_status_cb_t node_status_cb;
pthread_t thread;
bool threadstarted;
pthread_mutex_t outpacketqueue_mutex;
- pthread_mutex_t nodes_mutex;
+ pthread_mutex_t mesh_mutex;
event_loop_t loop;
listen_socket_t listen_socket[MAXSOCKETS];
int listen_sockets;
struct list_t *connections;
struct list_t *outgoings;
- struct list_t *outpacketqueue;
+ meshlink_queue_t outpacketqueue;
+
+ struct splay_tree_t *past_request_tree;
+ timeout_t past_request_timeout;
int contradicting_add_edge;
int contradicting_del_edge;
struct connection_t *everyone;
struct ecdsa *invitation_key;
- debug_t debug_level;
int pinginterval; /* seconds between pings */
int pingtimeout; /* seconds to wait for response */
int maxtimeout;
char line[4096];
char buffer[4096];
size_t blen;
+
+ pthread_t discovery_thread;
+ bool discovery_threadstarted;
+ struct AvahiServer *avahi_server;
+ struct AvahiSServiceBrowser *avahi_browser;
+ struct AvahiSimplePoll *avahi_poll;
+ struct AvahiSEntryGroup *avahi_group;
+ char* avahi_servicetype;
};
/// A handle for a MeshLink node.
} __attribute__ ((__packed__)) meshlink_packethdr_t;
extern void meshlink_send_from_queue(event_loop_t* el,meshlink_handle_t *mesh);
+extern meshlink_log_level_t global_log_level;
+extern meshlink_log_cb_t global_log_cb;
+
+/// Device class traits
+typedef struct {
+ unsigned int min_connects;
+ unsigned int max_connects;
+ int edge_weight;
+} dev_class_traits_t;
+extern dev_class_traits_t dev_class_traits[];
#endif // MESHLINK_INTERNAL_H