diff options
author | Youness Alaoui <youness.alaoui@collabora.co.uk> | 2012-02-13 15:12:36 -0500 |
---|---|---|
committer | Youness Alaoui <youness.alaoui@collabora.co.uk> | 2012-02-13 15:12:38 -0500 |
commit | 7b9965d180eb7cfffe503e66d3fb8856c7c163bb (patch) | |
tree | 53cb303f3671a26349d2900c6f02a7deb2a9f938 | |
parent | c03ac48b9a1c27d20ee7a393c0e16a77801be2df (diff) |
Return real origin when using a proxy (fixes detecting TURN sockets)
If using a proxy, the 'from' of all packets were of the proxy server
instead of the turn server, causing the check for turn to fail.
Thanks to Madaro Livio.
-rw-r--r-- | socket/http.c | 5 | ||||
-rw-r--r-- | socket/socks5.c | 15 |
2 files changed, 13 insertions, 7 deletions
diff --git a/socket/http.c b/socket/http.c index 81e18fb..90b11b2 100644 --- a/socket/http.c +++ b/socket/http.c @@ -190,8 +190,11 @@ socket_recv (NiceSocket *sock, NiceAddress *from, guint len, gchar *buf) HttpPriv *priv = sock->priv; gint read = -1; + if (from) + *from = priv->addr; + if (priv->base_socket) - read = nice_socket_recv (priv->base_socket, from, len, buf); + read = nice_socket_recv (priv->base_socket, NULL, len, buf); if (read <= 0 || priv->state == HTTP_STATE_CONNECTED) { return read; diff --git a/socket/socks5.c b/socket/socks5.c index e325dd1..9e9b258 100644 --- a/socket/socks5.c +++ b/socket/socks5.c @@ -164,10 +164,13 @@ socket_recv (NiceSocket *sock, NiceAddress *from, guint len, gchar *buf) { Socks5Priv *priv = sock->priv; + if (from) + *from = priv->addr; + switch (priv->state) { case SOCKS_STATE_CONNECTED: if (priv->base_socket) - return nice_socket_recv (priv->base_socket, from, len, buf); + return nice_socket_recv (priv->base_socket, NULL, len, buf); break; case SOCKS_STATE_INIT: { @@ -177,7 +180,7 @@ socket_recv (NiceSocket *sock, NiceAddress *from, guint len, gchar *buf) nice_debug ("Socks5 state Init"); if (priv->base_socket) - ret = nice_socket_recv (priv->base_socket, from, sizeof(data), data); + ret = nice_socket_recv (priv->base_socket, NULL, sizeof(data), data); if (ret <= 0) { return ret; @@ -244,7 +247,7 @@ socket_recv (NiceSocket *sock, NiceAddress *from, guint len, gchar *buf) nice_debug ("Socks5 state auth"); if (priv->base_socket) - ret = nice_socket_recv (priv->base_socket, from, sizeof(data), data); + ret = nice_socket_recv (priv->base_socket, NULL, sizeof(data), data); if (ret <= 0) { return ret; @@ -266,7 +269,7 @@ socket_recv (NiceSocket *sock, NiceAddress *from, guint len, gchar *buf) nice_debug ("Socks5 state connect"); if (priv->base_socket) - ret = nice_socket_recv (priv->base_socket, from, 4, data); + ret = nice_socket_recv (priv->base_socket, NULL, 4, data); if (ret <= 0) { return ret; @@ -278,14 +281,14 @@ socket_recv (NiceSocket *sock, NiceAddress *from, guint len, gchar *buf) struct to_be_sent *tbs = NULL; switch (data[3]) { case 0x01: /* IPV4 bound address */ - ret = nice_socket_recv (priv->base_socket, from, 6, data); + ret = nice_socket_recv (priv->base_socket, NULL, 6, data); if (ret != 6) { /* Could not read server bound address */ goto error; } break; case 0x04: /* IPV6 bound address */ - ret = nice_socket_recv (priv->base_socket, from, 18, data); + ret = nice_socket_recv (priv->base_socket, NULL, 18, data); if (ret != 18) { /* Could not read server bound address */ goto error; |