X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Fmeshlink%2B%2B.h;h=b88746e39a548ba356c88a470a93849674c21168;hb=9457a9cdb66473ad36923845b0f5fb359eec2ef0;hp=5550a9e302339c02a2ce5a66862072384d86ee62;hpb=b1cae6a2011f704dc4d3b02972def561d5c6bcb9;p=meshlink diff --git a/src/meshlink++.h b/src/meshlink++.h index 5550a9e3..b88746e3 100644 --- a/src/meshlink++.h +++ b/src/meshlink++.h @@ -57,6 +57,14 @@ typedef void (*connection_try_cb_t)(mesh *mesh, node *node); */ typedef void (*node_status_cb_t)(mesh *mesh, node *node, bool reachable); +/// A callback reporting node path MTU changes. +/** @param mesh A handle which represents an instance of MeshLink. + * @param node A pointer to a meshlink_node_t describing the node whose status changed. + * This pointer is valid until meshlink_close() is called. + * @param pmtu The current path MTU to the node, or 0 if UDP communication is not (yet) possible. + */ +typedef void (*node_pmtu_cb_t)(mesh *mesh, node *node, uint16_t pmtu); + /// A callback reporting duplicate node detection. /** @param mesh A handle which represents an instance of MeshLink. * @param node A pointer to a meshlink_node_t describing the node which is duplicate. @@ -231,6 +239,13 @@ public: (void)reachable; } + /// This functions is called whenever another node's path MTU changes. + virtual void node_pmtu(node *peer, uint16_t pmtu) { + /* do nothing */ + (void)peer; + (void)pmtu; + } + /// This functions is called whenever a duplicate node is detected. virtual void node_duplicate(node *peer) { /* do nothing */ @@ -321,6 +336,7 @@ public: bool start() { meshlink_set_receive_cb(handle, &receive_trampoline); meshlink_set_node_status_cb(handle, &node_status_trampoline); + meshlink_set_node_pmtu_cb(handle, &node_pmtu_trampoline); meshlink_set_node_duplicate_cb(handle, &node_duplicate_trampoline); meshlink_set_log_cb(handle, MESHLINK_DEBUG, &log_trampoline); meshlink_set_channel_accept_cb(handle, &channel_accept_trampoline); @@ -780,6 +796,7 @@ public: * until the callback routine is called. * @param len The length of the data, or 0 if there is no data to send. * @param cb A pointer to the function which will be called when MeshLink has finished using the buffer. + * @param priv A private pointer which was set by the application when submitting the buffer. * * @return True if the buffer was enqueued, false otherwise. */ @@ -796,6 +813,7 @@ public: * @param fd A file descriptor from which data will be read. * @param len The length of the data, or 0 if there is no data to send. * @param cb A pointer to the function which will be called when MeshLink has finished using the filedescriptor. + * @param priv A private pointer which was set by the application when submitting the buffer. * * @return True if the buffer was enqueued, false otherwise. */ @@ -814,6 +832,7 @@ public: * until the callback routine is called. * @param len The length of the data. * @param cb A pointer to the function which will be called when MeshLink has finished using the buffer. + * @param priv A private pointer which was set by the application when submitting the buffer. * * @return True if the buffer was enqueued, false otherwise. */ @@ -830,6 +849,7 @@ public: * @param fd A file descriptor to which data will be written. * @param len The length of the data. * @param cb A pointer to the function which will be called when MeshLink has finished using the filedescriptor. + * @param priv A private pointer which was set by the application when submitting the buffer. * * @return True if the buffer was enqueued, false otherwise. */ @@ -905,6 +925,15 @@ private: that->node_status(static_cast(peer), reachable); } + static void node_pmtu_trampoline(meshlink_handle_t *handle, meshlink_node_t *peer, uint16_t pmtu) { + if(!(handle->priv)) { + return; + } + + meshlink::mesh *that = static_cast(handle->priv); + that->node_pmtu(static_cast(peer), pmtu); + } + static void node_duplicate_trampoline(meshlink_handle_t *handle, meshlink_node_t *peer) { if(!(handle->priv)) { return;