summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYouness Alaoui <youness.alaoui@collabora.co.uk>2012-02-13 15:12:36 -0500
committerYouness Alaoui <youness.alaoui@collabora.co.uk>2012-02-13 15:12:38 -0500
commit7b9965d180eb7cfffe503e66d3fb8856c7c163bb (patch)
tree53cb303f3671a26349d2900c6f02a7deb2a9f938
parentc03ac48b9a1c27d20ee7a393c0e16a77801be2df (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.c5
-rw-r--r--socket/socks5.c15
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;