[telepathy-gabble/master] sync gibber from Salut

Guillaume Desmottes guillaume.desmottes at collabora.co.uk
Thu Apr 30 03:03:34 PDT 2009


---
 lib/gibber/gibber-fd-transport.c |   29 ++++++++++++++++++++++++++---
 lib/gibber/gibber-transport.c    |   12 ++++++++++++
 lib/gibber/gibber-transport.h    |    8 +++++++-
 3 files changed, 45 insertions(+), 4 deletions(-)

diff --git a/lib/gibber/gibber-fd-transport.c b/lib/gibber/gibber-fd-transport.c
index fdf80b2..faf0c10 100644
--- a/lib/gibber/gibber-fd-transport.c
+++ b/lib/gibber/gibber-fd-transport.c
@@ -39,9 +39,13 @@ static gboolean gibber_fd_transport_send (GibberTransport *transport,
 
 static void gibber_fd_transport_disconnect (GibberTransport *transport);
 
-static gboolean gibber_fd_transport_get_sockaddr (GibberTransport *transport,
+static gboolean gibber_fd_transport_get_peeraddr (GibberTransport *transport,
     struct sockaddr_storage *addr, socklen_t *len);
 
+static gboolean gibber_fd_transport_get_sockaddr (GibberTransport *transport,
+    struct sockaddr_storage *addr,
+    socklen_t *len);
+
 static void _do_disconnect (GibberFdTransport *self);
 
 static gboolean gibber_fd_transport_buffer_is_empty (
@@ -118,6 +122,7 @@ gibber_fd_transport_class_init (
 
   transport_class->send = gibber_fd_transport_send;
   transport_class->disconnect = gibber_fd_transport_disconnect;
+  transport_class->get_peeraddr = gibber_fd_transport_get_peeraddr;
   transport_class->get_sockaddr = gibber_fd_transport_get_sockaddr;
   transport_class->buffer_is_empty = gibber_fd_transport_buffer_is_empty;
   transport_class->block_receiving = gibber_fd_transport_block_receiving;
@@ -454,7 +459,7 @@ gibber_fd_transport_disconnect (GibberTransport *transport)
 }
 
 static gboolean
-gibber_fd_transport_get_sockaddr (GibberTransport *transport,
+gibber_fd_transport_get_peeraddr (GibberTransport *transport,
     struct sockaddr_storage *addr, socklen_t *len)
 {
   GibberFdTransport *self = GIBBER_FD_TRANSPORT (transport);
@@ -467,7 +472,25 @@ gibber_fd_transport_get_sockaddr (GibberTransport *transport,
 
    *len = sizeof (struct sockaddr_storage);
 
-   return (getpeername (self->fd, (struct sockaddr *)addr, len) == 0);
+   return (getpeername (self->fd, (struct sockaddr *) addr, len) == 0);
+}
+
+static gboolean
+gibber_fd_transport_get_sockaddr (GibberTransport *transport,
+    struct sockaddr_storage *addr,
+    socklen_t *len)
+{
+  GibberFdTransport *self = GIBBER_FD_TRANSPORT (transport);
+
+  if (self->fd == -1)
+    {
+      DEBUG ("Someone requested the sockaddr while we're not connected");
+      return FALSE;
+    }
+
+   *len = sizeof (struct sockaddr_storage);
+
+   return (getsockname (self->fd, (struct sockaddr *) addr, len) == 0);
 }
 
 static gboolean
diff --git a/lib/gibber/gibber-transport.c b/lib/gibber/gibber-transport.c
index 248e629..82ad73b 100644
--- a/lib/gibber/gibber-transport.c
+++ b/lib/gibber/gibber-transport.c
@@ -246,6 +246,18 @@ gibber_transport_set_handler (GibberTransport *transport,
 }
 
 gboolean
+gibber_transport_get_peeraddr (GibberTransport *transport,
+   struct sockaddr_storage *addr, socklen_t *len)
+{
+  GibberTransportClass *cls = GIBBER_TRANSPORT_GET_CLASS (transport);
+
+  if (cls->get_peeraddr != NULL)
+    return cls->get_peeraddr (transport, addr, len);
+
+  return FALSE;
+}
+
+gboolean
 gibber_transport_get_sockaddr (GibberTransport *transport,
    struct sockaddr_storage *addr, socklen_t *len)
 {
diff --git a/lib/gibber/gibber-transport.h b/lib/gibber/gibber-transport.h
index 2455a37..cf9b435 100644
--- a/lib/gibber/gibber-transport.h
+++ b/lib/gibber/gibber-transport.h
@@ -52,6 +52,8 @@ struct _GibberTransportClass {
     gboolean (*send) (GibberTransport *transport,
                           const guint8 *data, gsize length, GError **error);
     void (*disconnect) (GibberTransport *transport);
+    gboolean (*get_peeraddr) (GibberTransport *transport,
+        struct sockaddr_storage *addr, socklen_t *len);
     gboolean (*get_sockaddr) (GibberTransport *transport,
         struct sockaddr_storage *addr, socklen_t *len);
     gboolean (*buffer_is_empty) (GibberTransport *transport);
@@ -110,9 +112,13 @@ void gibber_transport_disconnect (GibberTransport *transport);
 void gibber_transport_set_handler (GibberTransport *transport,
     GibberHandlerFunc func, gpointer user_data);
 
-gboolean gibber_transport_get_sockaddr (GibberTransport *transport,
+gboolean gibber_transport_get_peeraddr (GibberTransport *transport,
     struct sockaddr_storage *addr, socklen_t *len);
 
+gboolean gibber_transport_get_sockaddr (GibberTransport *transport,
+    struct sockaddr_storage *addr,
+    socklen_t *len);
+
 gboolean gibber_transport_buffer_is_empty (GibberTransport *transport);
 
 void gibber_transport_emit_buffer_empty (GibberTransport *transport);
-- 
1.5.6.5



More information about the telepathy-commits mailing list