[telepathy-salut/master] add gibber_transport_get_sockaddr

Guillaume Desmottes guillaume.desmottes at collabora.co.uk
Thu Apr 2 06:25:20 PDT 2009


---
 lib/gibber/gibber-fd-transport.c |   23 +++++++++++++++++++++++
 lib/gibber/gibber-transport.c    |   12 ++++++++++++
 lib/gibber/gibber-transport.h    |    6 ++++++
 3 files changed, 41 insertions(+), 0 deletions(-)

diff --git a/lib/gibber/gibber-fd-transport.c b/lib/gibber/gibber-fd-transport.c
index a960424..faf0c10 100644
--- a/lib/gibber/gibber-fd-transport.c
+++ b/lib/gibber/gibber-fd-transport.c
@@ -42,6 +42,10 @@ static void gibber_fd_transport_disconnect (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 (
@@ -119,6 +123,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;
 
@@ -471,6 +476,24 @@ gibber_fd_transport_get_peeraddr (GibberTransport *transport,
 }
 
 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
 gibber_fd_transport_buffer_is_empty (GibberTransport *transport)
 {
   GibberFdTransport *self = GIBBER_FD_TRANSPORT (transport);
diff --git a/lib/gibber/gibber-transport.c b/lib/gibber/gibber-transport.c
index bb78dc8..82ad73b 100644
--- a/lib/gibber/gibber-transport.c
+++ b/lib/gibber/gibber-transport.c
@@ -258,6 +258,18 @@ gibber_transport_get_peeraddr (GibberTransport *transport,
 }
 
 gboolean
+gibber_transport_get_sockaddr (GibberTransport *transport,
+   struct sockaddr_storage *addr, socklen_t *len)
+{
+  GibberTransportClass *cls = GIBBER_TRANSPORT_GET_CLASS (transport);
+
+  if (cls->get_sockaddr != NULL)
+    return cls->get_sockaddr (transport, addr, len);
+
+  return FALSE;
+}
+
+gboolean
 gibber_transport_buffer_is_empty (GibberTransport *transport)
 {
   GibberTransportClass *cls = GIBBER_TRANSPORT_GET_CLASS (transport);
diff --git a/lib/gibber/gibber-transport.h b/lib/gibber/gibber-transport.h
index aec1264..cf9b435 100644
--- a/lib/gibber/gibber-transport.h
+++ b/lib/gibber/gibber-transport.h
@@ -54,6 +54,8 @@ struct _GibberTransportClass {
     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);
     void (*block_receiving) (GibberTransport *transport, gboolean block);
 };
@@ -113,6 +115,10 @@ void gibber_transport_set_handler (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