[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