[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