]> git.meshlink.io Git - meshlink/commitdiff
Add functions to get the amount of bytes in chanenl send and receive buffers.
authorGuus Sliepen <guus@meshlink.io>
Sun, 17 Mar 2019 21:01:43 +0000 (22:01 +0100)
committerGuus Sliepen <guus@meshlink.io>
Sat, 30 Mar 2019 22:48:32 +0000 (23:48 +0100)
meshlink_channel_get_sendq() and meshlink_channel_get_recvq() call the
underlying UTCP connection's utcp_get_sendq() and utcp_get_recvq().
These return the amount of bytes waiting in the send and receive buffers.
In particular, a non-zero value for sendq means that sent data has not been
ACKed by the peer yet.

src/meshlink++.h
src/meshlink.c
src/meshlink.h
src/utcp

index 37ca7e8b4d799281bcf0c86eeb0da1b60a3507af..ac72f3cc96f46a0438a24d567fa25688257a8ade 100644 (file)
@@ -691,6 +691,30 @@ public:
                return meshlink_channel_send(handle, channel, data, len);
        }
 
+       /// Get the amount of bytes in the send buffer.
+       /** This returns the amount of bytes in the send buffer.
+        *  These bytes have not been received by the peer yet.
+        *
+        *  @param channel      A handle for the channel.
+        *
+        *  @return             The amount of un-ACKed bytes in the send buffer.
+        */
+       size_t channel_get_sendq(channel *channel) {
+               return meshlink_channel_get_sendq(handle, channel);
+       }
+
+       /// Get the amount of bytes in the receive buffer.
+       /** This returns the amount of bytes in the receive buffer.
+        *  These bytes have not been processed by the application yet.
+        *
+        *  @param channel      A handle for the channel.
+        *
+        *  @return             The amount of bytes in the receive buffer.
+        */
+       size_t channel_get_recvq(channel *channel) {
+               return meshlink_channel_get_recvq(handle, channel);
+       }
+
        /// Enable or disable zeroconf discovery of local peers
        /** This controls whether zeroconf discovery using the Catta library will be
         *  enabled to search for peers on the local network. By default, it is enabled.
index 474cef0808a12ab9c6c05e7e030f96f21343726d..8ec207842c6732bee32b25914db502c1174863d5 100644 (file)
@@ -3159,6 +3159,24 @@ uint32_t meshlink_channel_get_flags(meshlink_handle_t *mesh, meshlink_channel_t
        return channel->c->flags;
 }
 
+size_t meshlink_channel_get_sendq(meshlink_handle_t *mesh, meshlink_channel_t *channel) {
+       if(!mesh || !channel) {
+               meshlink_errno = MESHLINK_EINVAL;
+               return -1;
+       }
+
+       return utcp_get_sendq(channel->c);
+}
+
+size_t meshlink_channel_get_recvq(meshlink_handle_t *mesh, meshlink_channel_t *channel) {
+       if(!mesh || !channel) {
+               meshlink_errno = MESHLINK_EINVAL;
+               return -1;
+       }
+
+       return utcp_get_recvq(channel->c);
+}
+
 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 9c800ab805115866d7bf33c6604b834d52e4b8d8..43d269cea76492134c08e4c8ffd9684a69502e52 100644 (file)
@@ -1021,6 +1021,28 @@ extern ssize_t meshlink_channel_send(meshlink_handle_t *mesh, meshlink_channel_t
  */
 extern uint32_t meshlink_channel_get_flags(meshlink_handle_t *mesh, meshlink_channel_t *channel);
 
+/// Get the amount of bytes in the send buffer.
+/** This returns the amount of bytes in the send buffer.
+ *  These bytes have not been received by the peer yet.
+ *
+ *  @param mesh         A handle which represents an instance of MeshLink.
+ *  @param channel      A handle for the channel.
+ *
+ *  @return             The amount of un-ACKed bytes in the send buffer.
+ */
+extern size_t meshlink_channel_get_sendq(meshlink_handle_t *mesh, meshlink_channel_t *channel);
+
+/// Get the amount of bytes in the receive buffer.
+/** This returns the amount of bytes in the receive buffer.
+ *  These bytes have not been processed by the application yet.
+ *
+ *  @param mesh         A handle which represents an instance of MeshLink.
+ *  @param channel      A handle for the channel.
+ *
+ *  @return             The amount of bytes in the receive buffer.
+ */
+extern size_t meshlink_channel_get_recvq(meshlink_handle_t *mesh, meshlink_channel_t *channel);
+
 /// 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 f1035e971bb894203bdfba6cafbaf0bb30f197eb..cb9223d3b895f1edb35bf7a6fd3aa9305de3f1db 160000 (submodule)
--- a/src/utcp
+++ b/src/utcp
@@ -1 +1 @@
-Subproject commit f1035e971bb894203bdfba6cafbaf0bb30f197eb
+Subproject commit cb9223d3b895f1edb35bf7a6fd3aa9305de3f1db