]> git.meshlink.io Git - meshlink/commitdiff
Add meshlink_set_node_channel_timeout().
authorGuus Sliepen <guus@meshlink.io>
Sun, 13 Oct 2019 12:05:07 +0000 (14:05 +0200)
committerGuus Sliepen <guus@meshlink.io>
Sun, 13 Oct 2019 12:05:07 +0000 (14:05 +0200)
This function allows setting the user timeout for UTCP connections.

src/meshlink++.h
src/meshlink.c
src/meshlink.h
src/meshlink.sym

index e39ef81cde7bc4fd34c7de747da5ec5d46fc2a5c..f5921363e0dffa550a5a38065bc8eaafc703829f 100644 (file)
@@ -708,6 +708,18 @@ public:
                meshlink_set_channel_rcvbuf(handle, channel, size);
        }
 
+       /// Set the connection timeout used for channels to the given node.
+       /** This sets the timeout after which unresponsive channels will be reported as closed.
+        *  The timeout is set for all current and future channels to the given node.
+        *
+        *  @param channel      A handle for the channel.
+        *  @param timeout      The timeout in seconds after which unresponsive channels will be reported as closed.
+        *                      The default is 60 seconds.
+        */
+       void set_node_channel_timeout(node *node, int timeout) {
+               meshlink_set_node_channel_timeout(handle, node, timeout);
+       }
+
        /// Open a reliable stream channel to another node.
        /** This function is called whenever a remote node wants to open a channel to the local node.
         *  The application then has to decide whether to accept or reject this channel.
index 7a01bd0ffae8f921f7e3b28457e26f6198b7b6b2..2db62ea1b01716d4563df1be696e83ba7ee4bfa0 100644 (file)
@@ -3446,6 +3446,25 @@ size_t meshlink_channel_get_recvq(meshlink_handle_t *mesh, meshlink_channel_t *c
        return utcp_get_recvq(channel->c);
 }
 
+void meshlink_set_node_channel_timeout(meshlink_handle_t *mesh, meshlink_node_t *node, int timeout) {
+       if(!mesh || !node) {
+               meshlink_errno = MESHLINK_EINVAL;
+               return;
+       }
+
+       node_t *n = (node_t *)node;
+
+       pthread_mutex_lock(&mesh->mesh_mutex);
+
+       if(!n->utcp) {
+               n->utcp = utcp_init(channel_accept, channel_pre_accept, channel_send, n);
+       }
+
+       utcp_set_user_timeout(n->utcp, timeout);
+
+       pthread_mutex_unlock(&mesh->mesh_mutex);
+}
+
 void update_node_status(meshlink_handle_t *mesh, node_t *n) {
        if(n->status.reachable && mesh->channel_accept_cb && !n->utcp) {
                n->utcp = utcp_init(channel_accept, channel_pre_accept, channel_send, n);
index 00aa19b26849413b664d3fc2c0331ab3730399ef..11395f043a02d6acd2e95cc39cdce68831ca30be 100644 (file)
@@ -1380,6 +1380,18 @@ extern size_t meshlink_channel_get_sendq(struct meshlink_handle *mesh, struct me
  */
 extern size_t meshlink_channel_get_recvq(struct meshlink_handle *mesh, struct meshlink_channel *channel);
 
+/// Set the connection timeout used for channels to the given node.
+/** This sets the timeout after which unresponsive channels will be reported as closed.
+ *  The timeout is set for all current and future channels to the given node.
+ *
+ *  \memberof meshlink_node
+ *  @param mesh         A handle which represents an instance of MeshLink.
+ *  @param channel      A handle for the channel.
+ *  @param timeout      The timeout in seconds after which unresponsive channels will be reported as closed.
+ *                      The default is 60 seconds.
+ */
+extern void meshlink_set_node_channel_timeout(struct meshlink_handle *mesh, struct meshlink_node *node, int timeout);
+
 /// Hint that a hostname may be found at an address
 /** This function indicates to meshlink that the given hostname is likely found
  *  at the given IP address and port.
index d94947c04271352e9eec365db944f83faa782062..cf38e94a74b0ab43546732b224b9f308cd0ef989 100644 (file)
@@ -66,6 +66,7 @@ meshlink_set_dev_class_timeouts
 meshlink_set_error_cb
 meshlink_set_invitation_timeout
 meshlink_set_log_cb
+meshlink_set_node_channel_timeout
 meshlink_set_node_duplicate_cb
 meshlink_set_node_pmtu_cb
 meshlink_set_node_status_cb