summaryrefslogtreecommitdiff
path: root/socket/tcp-turn.c
diff options
context:
space:
mode:
Diffstat (limited to 'socket/tcp-turn.c')
-rw-r--r--socket/tcp-turn.c34
1 files changed, 31 insertions, 3 deletions
diff --git a/socket/tcp-turn.c b/socket/tcp-turn.c
index 9c7cb99..82883d3 100644
--- a/socket/tcp-turn.c
+++ b/socket/tcp-turn.c
@@ -71,6 +71,8 @@ static gint socket_recv_messages (NiceSocket *sock,
NiceInputMessage *recv_messages, guint n_recv_messages);
static gint socket_send_messages (NiceSocket *sock, const NiceAddress *to,
const NiceOutputMessage *messages, guint n_messages);
+static gint socket_send_messages_reliable (NiceSocket *sock,
+ const NiceAddress *to, const NiceOutputMessage *messages, guint n_messages);
static gboolean socket_is_reliable (NiceSocket *sock);
NiceSocket *
@@ -88,6 +90,7 @@ nice_tcp_turn_socket_new (NiceSocket *base_socket,
sock->fileno = priv->base_socket->fileno;
sock->addr = priv->base_socket->addr;
sock->send_messages = socket_send_messages;
+ sock->send_messages_reliable = socket_send_messages_reliable;
sock->recv_messages = socket_recv_messages;
sock->is_reliable = socket_is_reliable;
sock->close = socket_close;
@@ -225,7 +228,7 @@ socket_recv_messages (NiceSocket *nicesock,
static gssize
socket_send_message (NiceSocket *sock, const NiceAddress *to,
- const NiceOutputMessage *message)
+ const NiceOutputMessage *message, gboolean reliable)
{
TurnTcpPriv *priv = sock->priv;
guint8 padbuf[3] = {0, 0, 0};
@@ -276,7 +279,11 @@ socket_send_message (NiceSocket *sock, const NiceAddress *to,
}
- ret = nice_socket_send_messages (priv->base_socket, to, &local_message, 1);
+ if (reliable)
+ ret = nice_socket_send_messages_reliable (priv->base_socket, to,
+ &local_message, 1);
+ else
+ ret = nice_socket_send_messages (priv->base_socket, to, &local_message, 1);
if (ret == 1)
ret = output_message_get_size (&local_message);
@@ -296,7 +303,7 @@ socket_send_messages (NiceSocket *sock, const NiceAddress *to,
const NiceOutputMessage *message = &messages[i];
gssize len;
- len = socket_send_message (sock, to, message);
+ len = socket_send_message (sock, to, message, FALSE);
if (len < 0) {
/* Error. */
@@ -312,6 +319,27 @@ socket_send_messages (NiceSocket *sock, const NiceAddress *to,
return i;
}
+static gint
+socket_send_messages_reliable (NiceSocket *sock, const NiceAddress *to,
+ const NiceOutputMessage *messages, guint n_messages)
+{
+ guint i;
+
+ for (i = 0; i < n_messages; i++) {
+ const NiceOutputMessage *message = &messages[i];
+ gssize len;
+
+ len = socket_send_message (sock, to, message, TRUE);
+
+ if (len < 0) {
+ /* Error. */
+ return len;
+ }
+ }
+
+ return i;
+}
+
static gboolean
socket_is_reliable (NiceSocket *sock)