]> git.meshlink.io Git - meshlink/blobdiff - src/meshlink.c
Add meshlink_channel_open_ex().
[meshlink] / src / meshlink.c
index 0f1e2738762e6a93ed898d2951b363ac721029b3..2184c33b720d2c9531831330c2f71de15396a1df 100644 (file)
@@ -2226,7 +2226,7 @@ void meshlink_set_channel_accept_cb(meshlink_handle_t *mesh, meshlink_channel_ac
        pthread_mutex_unlock(&mesh->mesh_mutex);
 }
 
-meshlink_channel_t *meshlink_channel_open(meshlink_handle_t *mesh, meshlink_node_t *node, uint16_t port, meshlink_channel_receive_cb_t cb, const void *data, size_t len) {
+meshlink_channel_t *meshlink_channel_open_ex(meshlink_handle_t *mesh, meshlink_node_t *node, uint16_t port, meshlink_channel_receive_cb_t cb, const void *data, size_t len, uint32_t flags) {
        if(!mesh || !node) {
                meshlink_errno = MESHLINK_EINVAL;
                return NULL;
@@ -2244,7 +2244,7 @@ meshlink_channel_t *meshlink_channel_open(meshlink_handle_t *mesh, meshlink_node
        meshlink_channel_t *channel = xzalloc(sizeof *channel);
        channel->node = n;
        channel->receive_cb = cb;
-       channel->c = utcp_connect(n->utcp, port, channel_recv, channel);
+       channel->c = utcp_connect_ex(n->utcp, port, channel_recv, channel, flags);
        if(!channel->c) {
                meshlink_errno = errno == ENOMEM ? MESHLINK_ENOMEM : MESHLINK_EINTERNAL;
                free(channel);
@@ -2253,6 +2253,10 @@ meshlink_channel_t *meshlink_channel_open(meshlink_handle_t *mesh, meshlink_node
        return channel;
 }
 
+meshlink_channel_t *meshlink_channel_open(meshlink_handle_t *mesh, meshlink_node_t *node, uint16_t port, meshlink_channel_receive_cb_t cb, const void *data, size_t len) {
+       return meshlink_channel_open_ex(mesh, node, port, cb, data, len, MESHLINK_CHANNEL_TCP);
+}
+
 void meshlink_channel_shutdown(meshlink_handle_t *mesh, meshlink_channel_t *channel, int direction) {
        if(!mesh || !channel) {
                meshlink_errno = MESHLINK_EINVAL;
@@ -2300,6 +2304,15 @@ ssize_t meshlink_channel_send(meshlink_handle_t *mesh, meshlink_channel_t *chann
        return retval;
 }
 
+uint32_t meshlink_channel_get_flags(meshlink_handle_t *mesh, meshlink_channel_t *channel) {
+       if(!mesh || !channel) {
+               meshlink_errno = MESHLINK_EINVAL;
+               return -1;
+       }
+
+       return channel->c->flags;
+}
+
 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);