]> git.meshlink.io Git - meshlink-tiny/blob - test/full.h
Add a metering test.
[meshlink-tiny] / test / full.h
1 #ifndef FULL_H
2 #define FULL_H
3
4 #include "meshlink-tiny.h"
5
6 typedef struct meshlink_channel meshlink_channel_t;
7 typedef struct meshlink_submesh meshlink_submesh_t;
8
9 struct meshlink_channel {
10         struct meshlink_node *const node; ///< Pointer to the peer of this channel.
11         void *priv;                       ///< Private pointer which may be set freely by the application, and is never used or modified by MeshLink.
12 };
13
14 struct meshlink_submesh {
15         const char *const name; ///< Textual name of this Sub-Mesh. It is stored in a nul-terminated C string, which is allocated by MeshLink.
16         void *priv;             ///< Private pointer which may be set freely by the application, and is never used or modified by MeshLink.
17 };
18
19 /// The status of a node.
20 struct devtool_node_status {
21         uint32_t status;
22         struct sockaddr_storage address;
23         uint16_t mtu;
24         uint16_t minmtu;
25         uint16_t maxmtu;
26         int mtuprobes;
27
28         enum {
29                 DEVTOOL_UDP_FAILED = -2,     /// UDP tried but failed
30                 DEVTOOL_UDP_IMPOSSIBLE = -1, /// UDP not possible (node unreachable)
31                 DEVTOOL_UDP_UNKNOWN = 0,     /// UDP status not known (never tried to communicate with the node)
32                 DEVTOOL_UDP_TRYING,          /// UDP detection in progress
33                 DEVTOOL_UDP_WORKING,         /// UDP communication established
34         } udp_status;
35
36         uint64_t in_data;                    /// Bytes received from channels
37         uint64_t out_data;                   /// Bytes sent via channels
38         uint64_t in_forward;                 /// Bytes received for channels that need to be forwarded to other nodes
39         uint64_t out_forward;                /// Bytes forwarded from channel from other nodes
40         uint64_t in_meta;                    /// Bytes received from meta-connections, heartbeat packets etc.
41         uint64_t out_meta;                   /// Bytes sent on meta-connections, heartbeat packets etc.
42 };
43
44 typedef void (*meshlink_node_pmtu_cb_t)(struct meshlink_handle *mesh, struct meshlink_node *node, uint16_t pmtu);
45 typedef void (*meshlink_blacklisted_cb_t)(struct meshlink_handle *mesh, struct meshlink_node *node);
46 typedef bool (*meshlink_channel_listen_cb_t)(struct meshlink_handle *mesh, struct meshlink_node *node, uint16_t port);
47 typedef bool (*meshlink_channel_accept_cb_t)(struct meshlink_handle *mesh, struct meshlink_channel *channel, uint16_t port, const void *data, size_t len);
48 typedef void (*meshlink_channel_receive_cb_t)(struct meshlink_handle *mesh, struct meshlink_channel *channel, const void *data, size_t len);
49 typedef void (*meshlink_channel_poll_cb_t)(struct meshlink_handle *mesh, struct meshlink_channel *channel, size_t len);
50 typedef void (*meshlink_aio_cb_t)(struct meshlink_handle *mesh, struct meshlink_channel *channel, const void *data, size_t len, void *priv);
51 typedef void (*meshlink_aio_fd_cb_t)(struct meshlink_handle *mesh, struct meshlink_channel *channel, int fd, size_t len, void *priv);
52
53 extern meshlink_errno_t *full_meshlink_errno;
54 extern const char *(*full_meshlink_strerror)(meshlink_errno_t err) __attribute__((__warn_unused_result__));
55 extern meshlink_open_params_t *(*full_meshlink_open_params_init)(const char *confbase, const char *name, const char *appname, dev_class_t devclass) __attribute__((__warn_unused_result__));
56 extern void (*full_meshlink_open_params_free)(meshlink_open_params_t *params);
57 extern bool (*full_meshlink_open_params_set_netns)(meshlink_open_params_t *params, int netns) __attribute__((__warn_unused_result__));
58 extern bool (*full_meshlink_open_params_set_storage_key)(meshlink_open_params_t *params, const void *key, size_t keylen) __attribute__((__warn_unused_result__));
59 extern bool (*full_meshlink_open_params_set_storage_policy)(meshlink_open_params_t *params, meshlink_storage_policy_t policy) __attribute__((__warn_unused_result__));
60 extern bool (*full_meshlink_open_params_set_lock_filename)(meshlink_open_params_t *params, const char *filename) __attribute__((__warn_unused_result__));
61 extern struct meshlink_handle *(*full_meshlink_open_ex)(const meshlink_open_params_t *params) __attribute__((__warn_unused_result__));
62 extern struct meshlink_handle *(*full_meshlink_open)(const char *confbase, const char *name, const char *appname, dev_class_t devclass) __attribute__((__warn_unused_result__));
63 extern struct meshlink_handle *(*full_meshlink_open_encrypted)(const char *confbase, const char *name, const char *appname, dev_class_t devclass, const void *key, size_t keylen) __attribute__((__warn_unused_result__));
64 extern struct meshlink_handle *(*full_meshlink_open_ephemeral)(const char *name, const char *appname, dev_class_t devclass) __attribute__((__warn_unused_result__));
65 extern struct meshlink_submesh *(*full_meshlink_submesh_open)(struct meshlink_handle *mesh, const char *submesh) __attribute__((__warn_unused_result__));
66 extern bool (*full_meshlink_start)(struct meshlink_handle *mesh) __attribute__((__warn_unused_result__));
67 extern void (*full_meshlink_stop)(struct meshlink_handle *mesh);
68 extern void (*full_meshlink_close)(struct meshlink_handle *mesh);
69 extern bool (*full_meshlink_destroy)(const char *confbase) __attribute__((__warn_unused_result__));
70 extern bool (*full_meshlink_destroy_ex)(const meshlink_open_params_t *params) __attribute__((__warn_unused_result__));
71 extern void (*full_meshlink_set_receive_cb)(struct meshlink_handle *mesh, meshlink_receive_cb_t cb);
72 extern void (*full_meshlink_set_connection_try_cb)(struct meshlink_handle *mesh, meshlink_connection_try_cb_t cb);
73 extern void (*full_meshlink_set_node_status_cb)(struct meshlink_handle *mesh, meshlink_node_status_cb_t cb);
74 extern void (*full_meshlink_set_node_pmtu_cb)(struct meshlink_handle *mesh, meshlink_node_pmtu_cb_t cb);
75 extern void (*full_meshlink_set_node_duplicate_cb)(struct meshlink_handle *mesh, meshlink_node_duplicate_cb_t cb);
76 extern void (*full_meshlink_set_log_cb)(struct meshlink_handle *mesh, meshlink_log_level_t level, meshlink_log_cb_t cb);
77 extern void (*full_meshlink_set_error_cb)(struct meshlink_handle *mesh, meshlink_error_cb_t cb);
78 extern void (*full_meshlink_set_blacklisted_cb)(struct meshlink_handle *mesh, meshlink_blacklisted_cb_t cb);
79 extern bool (*full_meshlink_send)(struct meshlink_handle *mesh, struct meshlink_node *destination, const void *data, size_t len) __attribute__((__warn_unused_result__));
80 extern ssize_t (*full_meshlink_get_pmtu)(struct meshlink_handle *mesh, struct meshlink_node *destination) __attribute__((__warn_unused_result__));
81 extern struct meshlink_node *(*full_meshlink_get_self)(struct meshlink_handle *mesh) __attribute__((__warn_unused_result__));
82 extern struct meshlink_node *(*full_meshlink_get_node)(struct meshlink_handle *mesh, const char *name) __attribute__((__warn_unused_result__));
83 extern struct meshlink_submesh *(*full_meshlink_get_submesh)(struct meshlink_handle *mesh, const char *name) __attribute__((__warn_unused_result__));
84 extern char *(*full_meshlink_get_fingerprint)(struct meshlink_handle *mesh, struct meshlink_node *node) __attribute__((__warn_unused_result__));
85 extern struct meshlink_node **(*full_meshlink_get_all_nodes)(struct meshlink_handle *mesh, struct meshlink_node **nodes, size_t *nmemb) __attribute__((__warn_unused_result__));
86 extern bool (*full_meshlink_sign)(struct meshlink_handle *mesh, const void *data, size_t len, void *signature, size_t *siglen) __attribute__((__warn_unused_result__));
87 extern struct meshlink_node **(*full_meshlink_get_all_nodes_by_dev_class)(struct meshlink_handle *mesh, dev_class_t devclass, struct meshlink_node **nodes, size_t *nmemb) __attribute__((__warn_unused_result__));
88 extern struct meshlink_node **(*full_meshlink_get_all_nodes_by_submesh)(struct meshlink_handle *mesh, struct meshlink_submesh *submesh, struct meshlink_node **nodes, size_t *nmemb) __attribute__((__warn_unused_result__));
89 extern struct meshlink_node **(*full_meshlink_get_all_nodes_by_last_reachable)(struct meshlink_handle *mesh, time_t start, time_t end, struct meshlink_node **nodes, size_t *nmemb) __attribute__((__warn_unused_result__));
90 extern struct meshlink_node **(*full_meshlink_get_all_nodes_by_blacklisted)(struct meshlink_handle *mesh, bool blacklisted, struct meshlink_node **nodes, size_t *nmemb) __attribute__((__warn_unused_result__));
91 extern dev_class_t (*full_meshlink_get_node_dev_class)(struct meshlink_handle *mesh, struct meshlink_node *node) __attribute__((__warn_unused_result__));
92 extern bool (*full_meshlink_get_node_blacklisted)(struct meshlink_handle *mesh, struct meshlink_node *node) __attribute__((__warn_unused_result__));
93 extern struct meshlink_submesh *(*full_meshlink_get_node_submesh)(struct meshlink_handle *mesh, struct meshlink_node *node) __attribute__((__warn_unused_result__));
94 extern bool (*full_meshlink_get_node_reachability)(struct meshlink_handle *mesh, struct meshlink_node *node, time_t *last_reachable, time_t *last_unreachable);
95 extern bool (*full_meshlink_verify)(struct meshlink_handle *mesh, struct meshlink_node *source, const void *data, size_t len, const void *signature, size_t siglen) __attribute__((__warn_unused_result__));
96 extern bool (*full_meshlink_set_canonical_address)(struct meshlink_handle *mesh, struct meshlink_node *node, const char *address, const char *port) __attribute__((__warn_unused_result__));
97 extern bool (*full_meshlink_clear_canonical_address)(struct meshlink_handle *mesh, struct meshlink_node *node) __attribute__((__warn_unused_result__));
98 extern bool (*full_meshlink_add_invitation_address)(struct meshlink_handle *mesh, const char *address, const char *port) __attribute__((__warn_unused_result__));
99 extern void (*full_meshlink_clear_invitation_addresses)(struct meshlink_handle *mesh);
100 extern char *(*full_meshlink_get_external_address)(struct meshlink_handle *mesh) __attribute__((__warn_unused_result__));
101 extern char *(*full_meshlink_get_external_address_for_family)(struct meshlink_handle *mesh, int address_family) __attribute__((__warn_unused_result__));
102 extern char *(*full_meshlink_get_local_address_for_family)(struct meshlink_handle *mesh, int address_family) __attribute__((__warn_unused_result__));
103 extern bool (*full_meshlink_add_external_address)(struct meshlink_handle *mesh) __attribute__((__warn_unused_result__));
104 extern int (*full_meshlink_get_port)(struct meshlink_handle *mesh) __attribute__((__warn_unused_result__));
105 extern bool (*full_meshlink_set_port)(struct meshlink_handle *mesh, int port) __attribute__((__warn_unused_result__));
106 extern void (*full_meshlink_set_invitation_timeout)(struct meshlink_handle *mesh, int timeout);
107 extern char *(*full_meshlink_invite_ex)(struct meshlink_handle *mesh, struct meshlink_submesh *submesh, const char *name, uint32_t flags) __attribute__((__warn_unused_result__));
108 extern char *(*full_meshlink_invite)(struct meshlink_handle *mesh, struct meshlink_submesh *submesh, const char *name) __attribute__((__warn_unused_result__));
109 extern bool (*full_meshlink_join)(struct meshlink_handle *mesh, const char *invitation) __attribute__((__warn_unused_result__));
110 extern char *(*full_meshlink_export)(struct meshlink_handle *mesh) __attribute__((__warn_unused_result__));
111 extern bool (*full_meshlink_import)(struct meshlink_handle *mesh, const char *data) __attribute__((__warn_unused_result__));
112 extern bool (*full_meshlink_forget_node)(struct meshlink_handle *mesh, struct meshlink_node *node);
113 extern bool (*full_meshlink_blacklist)(struct meshlink_handle *mesh, struct meshlink_node *node) __attribute__((__warn_unused_result__));
114 extern bool (*full_meshlink_blacklist_by_name)(struct meshlink_handle *mesh, const char *name) __attribute__((__warn_unused_result__));
115 extern bool (*full_meshlink_whitelist)(struct meshlink_handle *mesh, struct meshlink_node *node) __attribute__((__warn_unused_result__));
116 extern bool (*full_meshlink_whitelist_by_name)(struct meshlink_handle *mesh, const char *name) __attribute__((__warn_unused_result__));
117 extern void (*full_meshlink_set_default_blacklist)(struct meshlink_handle *mesh, bool blacklist);
118 extern void (*full_meshlink_set_channel_listen_cb)(struct meshlink_handle *mesh, meshlink_channel_listen_cb_t cb);
119 extern void (*full_meshlink_set_channel_accept_cb)(struct meshlink_handle *mesh, meshlink_channel_accept_cb_t cb);
120 extern void (*full_meshlink_set_channel_receive_cb)(struct meshlink_handle *mesh, struct meshlink_channel *channel, meshlink_channel_receive_cb_t cb);
121 extern void (*full_meshlink_set_channel_poll_cb)(struct meshlink_handle *mesh, struct meshlink_channel *channel, meshlink_channel_poll_cb_t cb);
122 extern void (*full_meshlink_set_channel_sndbuf)(struct meshlink_handle *mesh, struct meshlink_channel *channel, size_t size);
123 extern void (*full_meshlink_set_channel_rcvbuf)(struct meshlink_handle *mesh, struct meshlink_channel *channel, size_t size);
124 extern void (*full_meshlink_set_channel_sndbuf_storage)(struct meshlink_handle *mesh, struct meshlink_channel *channel, void *buf, size_t size);
125 extern void (*full_meshlink_set_channel_rcvbuf_storage)(struct meshlink_handle *mesh, struct meshlink_channel *channel, void *buf, size_t size);
126 extern void (*full_meshlink_set_channel_flags)(struct meshlink_handle *mesh, struct meshlink_channel *channel, uint32_t flags);
127 extern struct meshlink_channel *(*full_meshlink_channel_open_ex)(struct meshlink_handle *mesh, struct meshlink_node *node, uint16_t port, meshlink_channel_receive_cb_t cb, const void *data, size_t len, uint32_t flags) __attribute__((__warn_unused_result__));
128 extern struct meshlink_channel *(*full_meshlink_channel_open)(struct meshlink_handle *mesh, struct meshlink_node *node, uint16_t port, meshlink_channel_receive_cb_t cb, const void *data, size_t len) __attribute__((__warn_unused_result__));
129 extern void (*full_meshlink_channel_shutdown)(struct meshlink_handle *mesh, struct meshlink_channel *channel, int direction);
130 extern void (*full_meshlink_channel_close)(struct meshlink_handle *mesh, struct meshlink_channel *channel);
131 extern void (*full_meshlink_channel_abort)(struct meshlink_handle *mesh, struct meshlink_channel *channel);
132 extern ssize_t (*full_meshlink_channel_send)(struct meshlink_handle *mesh, struct meshlink_channel *channel, const void *data, size_t len) __attribute__((__warn_unused_result__));
133 extern bool (*full_meshlink_channel_aio_send)(struct meshlink_handle *mesh, struct meshlink_channel *channel, const void *data, size_t len, meshlink_aio_cb_t cb, void *priv) __attribute__((__warn_unused_result__));
134 extern bool (*full_meshlink_channel_aio_fd_send)(struct meshlink_handle *mesh, struct meshlink_channel *channel, int fd, size_t len, meshlink_aio_fd_cb_t cb, void *priv) __attribute__((__warn_unused_result__));
135 extern bool (*full_meshlink_channel_aio_receive)(struct meshlink_handle *mesh, struct meshlink_channel *channel, const void *data, size_t len, meshlink_aio_cb_t cb, void *priv) __attribute__((__warn_unused_result__));
136 extern bool (*full_meshlink_channel_aio_fd_receive)(struct meshlink_handle *mesh, struct meshlink_channel *channel, int fd, size_t len, meshlink_aio_fd_cb_t cb, void *priv) __attribute__((__warn_unused_result__));
137 extern uint32_t (*full_meshlink_channel_get_flags)(struct meshlink_handle *mesh, struct meshlink_channel *channel) __attribute__((__warn_unused_result__));
138 extern size_t (*full_meshlink_channel_get_sendq)(struct meshlink_handle *mesh, struct meshlink_channel *channel) __attribute__((__warn_unused_result__));
139 extern size_t (*full_meshlink_channel_get_recvq)(struct meshlink_handle *mesh, struct meshlink_channel *channel) __attribute__((__warn_unused_result__));
140 extern size_t (*full_meshlink_channel_get_mss)(struct meshlink_handle *mesh, struct meshlink_channel *channel) __attribute__((__warn_unused_result__));
141 extern void (*full_meshlink_set_node_channel_timeout)(struct meshlink_handle *mesh, struct meshlink_node *node, int timeout);
142 extern void (*full_meshlink_hint_address)(struct meshlink_handle *mesh, struct meshlink_node *node, const struct sockaddr *addr);
143 extern void (*full_meshlink_enable_discovery)(struct meshlink_handle *mesh, bool enable);
144 extern void (*full_meshlink_hint_network_change)(struct meshlink_handle *mesh);
145 extern bool (*full_meshlink_encrypted_key_rotate)(struct meshlink_handle *mesh, const void *key, size_t keylen) __attribute__((__warn_unused_result__));
146 extern void (*full_meshlink_set_dev_class_timeouts)(struct meshlink_handle *mesh, dev_class_t devclass, int pinginterval, int pingtimeout);
147 extern void (*full_meshlink_set_dev_class_fast_retry_period)(struct meshlink_handle *mesh, dev_class_t devclass, int fast_retry_period);
148 extern void (*full_meshlink_set_dev_class_maxtimeout)(struct meshlink_handle *mesh, dev_class_t devclass, int maxtimeout);
149 extern void (*full_meshlink_reset_timers)(struct meshlink_handle *mesh);
150 extern void (*full_meshlink_set_inviter_commits_first)(struct meshlink_handle *mesh, bool inviter_commits_first);
151 extern void (*full_meshlink_set_external_address_discovery_url)(struct meshlink_handle *mesh, const char *url);
152 extern void (*full_meshlink_set_scheduling_granularity)(struct meshlink_handle *mesh, long granularity);
153 extern void (*full_meshlink_set_storage_policy)(struct meshlink_handle *mesh, meshlink_storage_policy_t policy);
154
155 typedef void (*full_devtool_set_inviter_commits_first_t)(bool inviter_commited_first);
156 extern full_devtool_set_inviter_commits_first_t *full_devtool_set_inviter_commits_first;
157 extern void (*full_devtool_reset_node_counters)(struct meshlink_handle *mesh, meshlink_node_t *node, struct devtool_node_status *);
158
159 void init_full(void);
160 #endif