summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier CrĂȘte <olivier.crete@collabora.com>2014-01-07 20:28:50 -0500
committerOlivier CrĂȘte <olivier.crete@collabora.com>2014-01-31 01:48:57 -0500
commiteb231e64cc3e72d47ff5d0b5761389725778fab3 (patch)
treefa12dcd43cdbda81ed30e83326453b686ccfdc4a
parentfe5dc58b239ac5ab252cd95b9a0650a208e5df9c (diff)
downloadlibnice-eb231e64cc3e72d47ff5d0b5761389725778fab3.tar.gz
pseudotcp: Add methods to query the state of the send and recv buffers
-rw-r--r--agent/pseudotcp.c23
-rw-r--r--agent/pseudotcp.h28
-rw-r--r--docs/reference/libnice/libnice-sections.txt2
3 files changed, 53 insertions, 0 deletions
diff --git a/agent/pseudotcp.c b/agent/pseudotcp.c
index 2e8ecc4..39e45ac 100644
--- a/agent/pseudotcp.c
+++ b/agent/pseudotcp.c
@@ -1796,3 +1796,26 @@ resize_receive_buffer (PseudoTcpSocket *self, guint32 new_size)
priv->rcv_wnd = available_space;
}
+gint
+pseudo_tcp_socket_get_available_bytes (PseudoTcpSocket *self)
+{
+ PseudoTcpSocketPrivate *priv = self->priv;
+
+ if (priv->state != TCP_ESTABLISHED) {
+ return -1;
+ }
+
+ return pseudo_tcp_fifo_get_buffered (&priv->rbuf);
+}
+
+gboolean
+pseudo_tcp_socket_can_send (PseudoTcpSocket *self)
+{
+ PseudoTcpSocketPrivate *priv = self->priv;
+
+ if (priv->state != TCP_ESTABLISHED) {
+ return FALSE;
+ }
+
+ return (pseudo_tcp_fifo_get_write_remaining (&priv->sbuf) != 0);
+}
diff --git a/agent/pseudotcp.h b/agent/pseudotcp.h
index f8fa198..f5cd1a9 100644
--- a/agent/pseudotcp.h
+++ b/agent/pseudotcp.h
@@ -412,6 +412,34 @@ gboolean pseudo_tcp_socket_notify_packet(PseudoTcpSocket *self,
*/
void pseudo_tcp_set_debug_level (PseudoTcpDebugLevel level);
+
+/**
+ * pseudo_tcp_socket_get_available_bytes:
+ * @self: The #PseudoTcpSocket object.
+ *
+ * Gets the number of bytes of data in the buffer that can be read without
+ * receiving more packets from the network.
+ *
+ * Returns: The number of bytes or -1 if the connection is not established
+ *
+ * Since: 0.1.5
+ */
+
+gint pseudo_tcp_socket_get_available_bytes (PseudoTcpSocket *self);
+
+/**
+ * pseudo_tcp_socket_can_send:
+ * @self: The #PseudoTcpSocket object.
+ *
+ * Returns if there is space in the send buffer to send any data.
+ *
+ * Returns: %TRUE if data can be sent, %FALSE otherwise
+ *
+ * Since: 0.1.5
+ */
+
+gboolean pseudo_tcp_socket_can_send (PseudoTcpSocket *self);
+
G_END_DECLS
#endif /* _PSEUDOTCP_H */
diff --git a/docs/reference/libnice/libnice-sections.txt b/docs/reference/libnice/libnice-sections.txt
index b13a5ca..bc276ab 100644
--- a/docs/reference/libnice/libnice-sections.txt
+++ b/docs/reference/libnice/libnice-sections.txt
@@ -255,4 +255,6 @@ pseudo_tcp_socket_notify_clock
pseudo_tcp_socket_notify_mtu
pseudo_tcp_socket_notify_packet
pseudo_tcp_set_debug_level
+pseudo_tcp_socket_get_available_bytes
+pseudo_tcp_socket_can_send
</SECTION>