[Telepathy-commits] [telepathy-salut/master] GibberUnixTransport: Implement gibber_unix_transport_connect.

Alban Crequy alban.crequy at collabora.co.uk
Tue Nov 4 06:57:46 PST 2008


---
 lib/gibber/gibber-unix-transport.c |   54 ++++++++++++++++++++++++++++++++++++
 lib/gibber/gibber-unix-transport.h |    3 ++
 2 files changed, 57 insertions(+), 0 deletions(-)

diff --git a/lib/gibber/gibber-unix-transport.c b/lib/gibber/gibber-unix-transport.c
index cc40d37..fe67f76 100644
--- a/lib/gibber/gibber-unix-transport.c
+++ b/lib/gibber/gibber-unix-transport.c
@@ -24,6 +24,9 @@
 #include <fcntl.h>
 #include <string.h>
 #include <errno.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/un.h>
 
 #include "gibber-unix-transport.h"
 #include "gibber-util.h"
@@ -110,3 +113,54 @@ gibber_unix_transport_new (void)
 {
   return g_object_new (GIBBER_TYPE_UNIX_TRANSPORT, NULL);
 }
+
+gboolean
+gibber_unix_transport_connect (GibberUnixTransport *transport,
+                               const gchar *path,
+                               GError **error)
+{
+  union {
+      struct sockaddr_un un;
+      struct sockaddr addr;
+  } addr;
+  int fd;
+
+  gibber_transport_set_state (GIBBER_TRANSPORT (transport),
+      GIBBER_TRANSPORT_CONNECTING);
+
+  memset (&addr, 0, sizeof (addr));
+
+  fd = socket (PF_UNIX, SOCK_STREAM, 0);
+  if (fd == -1)
+    {
+      DEBUG ("Error creating socket: %s", g_strerror (errno));
+      g_set_error (error, GIBBER_UNIX_TRANSPORT_ERROR,
+          GIBBER_UNIX_TRANSPORT_ERROR_CONNECT_FAILED,
+          "Error creating socket: %s", g_strerror (errno));
+      goto failed;
+    }
+
+  addr.un.sun_family = PF_UNIX;
+  strncpy (addr.un.sun_path, path, sizeof (addr.un.sun_path) - 1);
+  addr.un.sun_path[sizeof (addr.un.sun_path) - 1] = '\0';
+
+  if (connect (fd, &addr.addr, sizeof (addr.un)) == -1)
+    {
+      g_set_error (error, GIBBER_UNIX_TRANSPORT_ERROR,
+          GIBBER_UNIX_TRANSPORT_ERROR_CONNECT_FAILED,
+          "Error connecting socket: %s", g_strerror (errno));
+      DEBUG ("Error connecting socket: %s", g_strerror (errno));
+      goto failed;
+    }
+  DEBUG ("Connected to socket");
+
+  gibber_fd_transport_set_fd (GIBBER_FD_TRANSPORT (transport), fd);
+
+  return TRUE;
+
+failed:
+  gibber_transport_set_state (GIBBER_TRANSPORT (transport),
+      GIBBER_TRANSPORT_DISCONNECTED);
+  return FALSE;
+}
+
diff --git a/lib/gibber/gibber-unix-transport.h b/lib/gibber/gibber-unix-transport.h
index 9a9742a..e7ca190 100644
--- a/lib/gibber/gibber-unix-transport.h
+++ b/lib/gibber/gibber-unix-transport.h
@@ -70,6 +70,9 @@ GType gibber_unix_transport_get_type (void);
 
 GibberUnixTransport * gibber_unix_transport_new (void);
 
+gboolean gibber_unix_transport_connect (GibberUnixTransport *transport,
+    const gchar *path, GError **error);
+
 G_END_DECLS
 
 #endif /* #ifndef __GIBBER_UNIX_TRANSPORT_H__*/
-- 
1.5.6.5




More information about the Telepathy-commits mailing list