/*
meshlink_internal.h -- Internal parts of the public API.
- Copyright (C) 2014, 2017 Guus Sliepen <guus@meshlink.io>
+ Copyright (C) 2014-2019 Guus Sliepen <guus@meshlink.io>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#ifdef MESHLINK_H
+#error You must not include both meshlink.h and meshlink_internal.h!
+#endif
+
#include "system.h"
#include "event.h"
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
+
struct CattaServer;
struct CattaSServiceBrowser;
struct CattaSimplePoll;
PROXY_HTTP,
} proxytype_t;
+struct meshlink_open_params {
+ char *confbase;
+ char *appname;
+ char *name;
+ dev_class_t devclass;
+
+ int netns;
+
+ const void *key;
+ size_t keylen;
+};
+
/// A handle for an instance of MeshLink.
struct meshlink_handle {
char *name;
void *priv;
char *appname;
- dev_class_t devclass;
+ int32_t devclass;
char *confbase;
+ FILE *conffile;
meshlink_receive_cb_t receive_cb;
meshlink_node_status_cb_t node_status_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;
pthread_t thread;
bool threadstarted;
struct node_t *self;
- struct splay_tree_t *config;
struct splay_tree_t *edges;
struct splay_tree_t *nodes;
struct list_t *connections;
struct list_t *outgoings;
+ struct list_t *submeshes;
meshlink_queue_t outpacketqueue;
hash_t *node_udp_cache;
struct connection_t *everyone;
+ struct ecdsa *private_key;
struct ecdsa *invitation_key;
int invitation_timeout;
struct CattaSimplePoll *catta_poll;
struct CattaSEntryGroup *catta_group;
char *catta_servicetype;
+
+ int netns;
+ void *config_key;
};
/// A handle for a MeshLink node.
void *priv;
};
+/// A handle for a node Sub-Mesh.
+struct meshlink_submesh {
+ const char *name;
+ void *priv;
+};
+
/// A channel.
struct meshlink_channel {
struct node_t *node;