[Telepathy-commits] [telepathy-salut/master] SalutStreamTube: Use Gibber{Unix, Tcp}Transport instead of reimplementing it

Alban Crequy alban.crequy at collabora.co.uk
Tue Nov 25 03:59:39 PST 2008


---
 src/tube-stream.c |   94 ++++++++++------------------------------------------
 1 files changed, 18 insertions(+), 76 deletions(-)

diff --git a/src/tube-stream.c b/src/tube-stream.c
index 5989d58..167d34a 100644
--- a/src/tube-stream.c
+++ b/src/tube-stream.c
@@ -33,15 +33,17 @@
 #include <glib.h>
 #include <glib/gstdio.h>
 
-#include <gibber/gibber-xmpp-stanza.h>
-#include <gibber/gibber-namespaces.h>
+#include <gibber/gibber-bytestream-direct.h>
 #include <gibber/gibber-bytestream-iface.h>
 #include <gibber/gibber-bytestream-oob.h>
-#include <gibber/gibber-bytestream-direct.h>
-#include <gibber/gibber-transport.h>
 #include <gibber/gibber-fd-transport.h>
 #include <gibber/gibber-iq-helper.h>
 #include <gibber/gibber-listener.h>
+#include <gibber/gibber-namespaces.h>
+#include <gibber/gibber-tcp-transport.h>
+#include <gibber/gibber-transport.h>
+#include <gibber/gibber-unix-transport.h>
+#include <gibber/gibber-xmpp-stanza.h>
 
 #define DEBUG_FLAG DEBUG_TUBES
 
@@ -613,109 +615,49 @@ new_connection_to_socket (SalutTubeStream *self,
                           GibberBytestreamIface *bytestream)
 {
   SalutTubeStreamPrivate *priv = SALUT_TUBE_STREAM_GET_PRIVATE (self);
-  GibberFdTransport *transport;
-  int fd;
-  SockAddr addr;
-  socklen_t len;
+  GibberTransport *transport;
 
   DEBUG ("Called.");
 
   g_assert (priv->initiator == priv->self_handle);
 
-  memset (&addr, 0, sizeof (addr));
-
   if (priv->address_type == TP_SOCKET_ADDRESS_TYPE_UNIX)
     {
       GArray *array;
       array = g_value_get_boxed (priv->address);
-
-      fd = socket (PF_UNIX, SOCK_STREAM, 0);
-      if (fd == -1)
-        {
-          DEBUG ("Error creating socket: %s", g_strerror (errno));
-          return FALSE;
-        }
-
-      addr.un.sun_family = PF_UNIX;
-      g_strlcpy (addr.un.sun_path, array->data, sizeof (addr.un.sun_path));
-      len = sizeof (addr.un);
-
       DEBUG ("Will try to connect to socket: %s", (const gchar *) array->data);
+
+      transport = GIBBER_TRANSPORT (gibber_unix_transport_new ());
+      gibber_unix_transport_connect (GIBBER_UNIX_TRANSPORT (transport),
+          array->data, NULL);
     }
   else if (priv->address_type == TP_SOCKET_ADDRESS_TYPE_IPV4 ||
       priv->address_type == TP_SOCKET_ADDRESS_TYPE_IPV6)
     {
       gchar *ip;
+      gchar *port_str;
       guint port;
-      struct addrinfo req, *result = NULL;
-      int ret;
-
-      if (priv->address_type == TP_SOCKET_ADDRESS_TYPE_IPV4)
-        fd = socket (PF_INET, SOCK_STREAM, 0);
-      else
-        fd = socket (PF_INET6, SOCK_STREAM, 0);
-
-      if (fd == -1)
-        {
-          DEBUG ("Error creating socket: %s", g_strerror (errno));
-          return FALSE;
-        }
 
       dbus_g_type_struct_get (priv->address,
           0, &ip,
           1, &port,
           G_MAXUINT);
+      port_str = g_strdup_printf ("%d", port);
 
-      memset (&req, 0, sizeof (req));
-      req.ai_flags = AI_NUMERICHOST;
-      req.ai_socktype = SOCK_STREAM;
-      req.ai_protocol = IPPROTO_TCP;
-
-      if (priv->address_type == TP_SOCKET_ADDRESS_TYPE_IPV4)
-        req.ai_family = AF_INET;
-      else
-        req.ai_family = AF_INET6;
-
-      ret = getaddrinfo (ip, NULL, &req, &result);
-      if (ret != 0)
-        {
-          DEBUG ("getaddrinfo failed: %s",  gai_strerror (ret));
-          g_free (ip);
-          return FALSE;
-        }
-
-      DEBUG ("Will try to connect to %s:%u", ip, port);
+      transport = GIBBER_TRANSPORT (gibber_tcp_transport_new ());
+      gibber_tcp_transport_connect (GIBBER_TCP_TRANSPORT (transport), ip,
+          port_str);
 
-      if (priv->address_type == TP_SOCKET_ADDRESS_TYPE_IPV4)
-        {
-          memcpy (&addr, result->ai_addr, sizeof (addr.ipv4));
-          addr.ipv4.sin_port = ntohs (port);
-          len = sizeof (addr.ipv4);
-        }
-      else
-        {
-          memcpy (&addr, result->ai_addr, sizeof (addr.ipv6));
-          addr.ipv6.sin6_port = ntohs (port);
-          len = sizeof (addr.ipv6);
-        }
+      /* TODO: use priv->address_type == TP_SOCKET_ADDRESS_TYPE_IPV4 */
 
       g_free (ip);
-      freeaddrinfo (result);
+      g_free (port_str);
     }
   else
     {
       g_assert_not_reached ();
     }
 
-  if (connect (fd, (struct sockaddr *) &addr, len) == -1)
-    {
-      DEBUG ("Error connecting socket: %s", g_strerror (errno));
-      return FALSE;
-    }
-  DEBUG ("Connected to socket");
-
-  transport = g_object_new (GIBBER_TYPE_FD_TRANSPORT, NULL);
-  gibber_fd_transport_set_fd (transport, fd);
 
   g_hash_table_insert (priv->bytestream_to_transport, g_object_ref (bytestream),
       g_object_ref (transport));
-- 
1.5.6.5




More information about the Telepathy-commits mailing list