[telepathy-gabble/master] set the ip and port in NewConnection if access control is port
Guillaume Desmottes
guillaume.desmottes at collabora.co.uk
Thu May 21 04:28:58 PDT 2009
---
src/tube-stream.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 58 insertions(+), 0 deletions(-)
diff --git a/src/tube-stream.c b/src/tube-stream.c
index 02c78f7..41ebf24 100644
--- a/src/tube-stream.c
+++ b/src/tube-stream.c
@@ -677,6 +677,56 @@ set_credentials_access_control_param (GValue *access_control_param,
return TRUE;
}
+static gboolean
+set_port_access_control_param (GValue *access_control_param,
+ GibberTransport *transport)
+{
+ struct sockaddr_storage addr;
+ socklen_t addrlen = sizeof (struct sockaddr_storage);
+ char host[NI_MAXHOST];
+ char port_str[NI_MAXSERV];
+ int ret;
+ guint16 port;
+ unsigned long tmp;
+ gchar *endptr;
+
+ if (!gibber_transport_get_sockaddr (transport, &addr, &addrlen))
+ {
+ DEBUG ("Failed to get connection address");
+ return FALSE;
+ }
+
+ ret = getnameinfo ((struct sockaddr *) &addr, addrlen,
+ host, NI_MAXHOST, port_str, NI_MAXSERV,
+ NI_NUMERICHOST | NI_NUMERICSERV);
+ if (ret != 0)
+ {
+ DEBUG ("getnameinfo failed: %s", g_strerror (ret));
+ return FALSE;
+ }
+
+ tmp = strtoul (port_str, &endptr, 10);
+ if (!endptr || *endptr || tmp > G_MAXUINT32)
+ {
+ DEBUG ("invalid port: %s", port_str);
+ return FALSE;
+ }
+ port = (guint16) tmp;
+
+ g_value_init (access_control_param,
+ TP_STRUCT_TYPE_SOCKET_ADDRESS_IPV4);
+ g_value_take_boxed (access_control_param,
+ dbus_g_type_specialized_construct (
+ TP_STRUCT_TYPE_SOCKET_ADDRESS_IPV4));
+
+ dbus_g_type_struct_set (access_control_param,
+ 0, host,
+ 1, port,
+ G_MAXUINT);
+
+ return TRUE;
+}
+
static transport_connected_data *
transport_connected_data_new (GabbleTubeStream *self,
TpHandle contact)
@@ -710,6 +760,14 @@ fire_new_connection (GabbleTubeStream *self,
return;
}
}
+ else if (priv->access_control == TP_SOCKET_ACCESS_CONTROL_PORT)
+ {
+ if (!set_port_access_control_param (&access_control_param, transport))
+ {
+ gibber_transport_disconnect (transport);
+ return;
+ }
+ }
else
{
/* set a dummy value */
--
1.5.6.5
More information about the telepathy-commits
mailing list