/*
meshlink.h -- MeshLink API
- Copyright (C) 2014-2019 Guus Sliepen <guus@meshlink.io>
+ Copyright (C) 2014-2021 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
typedef enum {
MESHLINK_STORAGE_ENABLED, ///< Store all updates.
MESHLINK_STORAGE_DISABLED, ///< Don't store any updates.
- MESHLINK_STORAGE_KEYS_ONLY, ///< Only store updates when a node's key has changed.
+ MESHLINK_STORAGE_KEYS_ONLY ///< Only store updates when a node's key has changed.
} meshlink_storage_policy_t;
/// Invitation flags
*/
dev_class_t meshlink_get_node_dev_class(struct meshlink_handle *mesh, struct meshlink_node *node) __attribute__((__warn_unused_result__));
+/// Get the node's tiny status.
+/** This function returns true if the given node is a tiny node.
+ * Note that the tiny status of a node will only be known if the node has been reachable at least once.
+ *
+ * \memberof meshlink_node
+ * @param mesh A handle which represents an instance of MeshLink.
+ * @param node A pointer to a struct meshlink_node describing the node.
+ *
+ * @return This function returns true if the node is a tiny node.
+ */
+bool meshlink_get_node_tiny(struct meshlink_handle *mesh, struct meshlink_node *node) __attribute__((__warn_unused_result__));
+
/// Get the node's blacklist status.
/** This function returns the given node is blacklisted.
*
/// Close a reliable stream channel.
/** This informs the remote node that the local node has finished sending all data on the channel.
* It also causes the local node to stop accepting incoming data from the remote node.
- * It will free the struct meshlink_channel and all associated resources.
* Afterwards, the channel handle is invalid and must not be used any more.
*
* It is allowed to call this function at any time on a valid handle, even inside callback functions.
*/
void meshlink_channel_close(struct meshlink_handle *mesh, struct meshlink_channel *channel);
+/// Abort a reliable stream channel.
+/** This aborts a channel.
+ * Data that was in the send and receive buffers is dropped, so potentially there is some data that
+ * was sent on this channel that will not be received by the peer.
+ * Afterwards, the channel handle is invalid and must not be used any more.
+ *
+ * It is allowed to call this function at any time on a valid handle, even inside callback functions.
+ * If called with a valid handle, this function always succeeds, otherwise the result is undefined.
+ *
+ * \memberof meshlink_channel
+ * @param mesh A handle which represents an instance of MeshLink.
+ * @param channel A handle for the channel.
+ */
+void meshlink_channel_abort(struct meshlink_handle *mesh, struct meshlink_channel *channel);
+
/// Transmit data on a channel
/** This queues data to send to the remote node.
*
*/
void meshlink_enable_discovery(struct meshlink_handle *mesh, bool enable);
+/// Inform MeshLink that the local network configuration might have changed
+/** This is intended to be used when there is no way for MeshLink to get notifications of local network changes.
+ * It forces MeshLink to scan all network interfaces for changes in up/down status and new/removed addresses,
+ * and will immediately check if all connections to other nodes are still alive.
+ *
+ * \memberof meshlink_handle
+ * @param mesh A handle which represents an instance of MeshLink.
+ */
+void meshlink_hint_network_change(struct meshlink_handle *mesh);
+
/// Performs key rotation for an encrypted storage
/** This rotates the (master) key for an encrypted storage and discards the old key
* if the call succeeded. This is an atomic call.