[Telepathy-commits] [telepathy-salut/master] Implement gibber_listener_listen_socket() in GibberListener and test it in check-gibber-listener

Alban Crequy alban.crequy at collabora.co.uk
Tue Nov 4 11:13:44 PST 2008


---
 lib/gibber/gibber-listener.c  |   25 +++++++++++++------------
 tests/check-gibber-listener.c |   33 +++++++++++++++++++++++++++++++++
 2 files changed, 46 insertions(+), 12 deletions(-)

diff --git a/lib/gibber/gibber-listener.c b/lib/gibber/gibber-listener.c
index 9c6420c..a8e0735 100644
--- a/lib/gibber/gibber-listener.c
+++ b/lib/gibber/gibber-listener.c
@@ -22,10 +22,12 @@
 #include <time.h>
 #include <sys/types.h>
 #include <sys/socket.h>
+#include <sys/un.h>
 #include <netdb.h>
 #include <netinet/in.h>
 #include <unistd.h>
 #include <errno.h>
+#include <stdio.h>
 
 #include <glib.h>
 
@@ -146,16 +148,6 @@ gibber_listener_new (void)
 }
 
 static gboolean
-unimplemented (GError **error)
-{
-  g_set_error (error, GIBBER_LISTENER_ERROR, GIBBER_LISTENER_ERROR_FAILED,
-    "Unimplemented");
-
-  return FALSE;
-}
-
-
-static gboolean
 listener_io_in_cb (GIOChannel *source,
                    GIOCondition condition,
                    gpointer user_data)
@@ -399,6 +391,15 @@ gboolean
 gibber_listener_listen_socket (GibberListener *listener,
   gchar *path, gboolean abstract, GError **error)
 {
-  return unimplemented (error);
-}
+  struct sockaddr_un addr;
+  int ret;
 
+  memset (&addr, 0, sizeof (addr));
+  addr.sun_family = PF_UNIX;
+  snprintf (addr.sun_path, sizeof (addr.sun_path) - 1, "%s", path);
+
+  ret = add_listener (listener, AF_UNIX, SOCK_STREAM, 0,
+      (struct sockaddr *) &addr, sizeof (addr), error);
+
+  return ret;
+}
diff --git a/tests/check-gibber-listener.c b/tests/check-gibber-listener.c
index 75c4eb3..240c225 100644
--- a/tests/check-gibber-listener.c
+++ b/tests/check-gibber-listener.c
@@ -20,6 +20,7 @@
  */
 
 
+#include <errno.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -27,8 +28,10 @@
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
+#include <unistd.h>
 
 #include <gibber/gibber-tcp-transport.h>
+#include <gibber/gibber-unix-transport.h>
 #include <gibber/gibber-listener.h>
 
 #include <check.h>
@@ -75,15 +78,45 @@ connect_to_port (int port, GMainLoop *loop)
 
 START_TEST (test_tcp_listen)
 {
+  GibberListener *listener_unix;
   GibberListener *listener;
   GibberListener *listener2;
+  GibberUnixTransport *unix_transport;
   int port;
+  int ret;
   GMainLoop *mainloop;
   GibberTransport *transport;
   GError *error = NULL;
+  gchar *path = "/tmp/check-gibber-listener-socket";
+
+  ret = unlink (path);
+  fail_if (ret == -1 && errno != ENOENT);
 
   mainloop = g_main_loop_new (NULL, FALSE);
 
+  /* unix socket tests */
+  listener_unix = gibber_listener_new ();
+  fail_if (listener_unix == NULL);
+
+  g_signal_connect (listener_unix, "new-connection",
+      G_CALLBACK (new_connection_cb), mainloop);
+
+  ret = gibber_listener_listen_socket (listener_unix, path, TRUE, &error);
+  fail_if (ret != TRUE);
+
+  unix_transport = gibber_unix_transport_new ();
+  ret = gibber_unix_transport_connect (unix_transport, path, &error);
+  fail_if (ret != TRUE);
+
+  if (!signalled)
+    g_main_loop_run (mainloop);
+
+  fail_if (!got_connection, "Failed to connect");
+
+  g_object_unref (listener_unix);
+  g_object_unref (unix_transport);
+
+  /* tcp socket tests */
   listener = gibber_listener_new ();
   fail_if (listener == NULL);
 
-- 
1.5.6.5




More information about the Telepathy-commits mailing list