[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