summaryrefslogtreecommitdiff
path: root/lib/gibber/gibber-bytestream-direct.c
diff options
context:
space:
mode:
authorAlban Crequy <alban.crequy@collabora.co.uk>2008-11-07 16:33:11 +0000
committerAlban Crequy <alban.crequy@collabora.co.uk>2008-11-07 16:33:11 +0000
commit3b0f69598994737c574527cdc283bdbb457becf4 (patch)
tree0f870c2677ede0256341f07245dc47ec7e3d8ef9 /lib/gibber/gibber-bytestream-direct.c
parent0005b70c642de7ff1ede8b6ff19e0ceaa4b3ed1d (diff)
downloadtelepathy-salut-3b0f69598994737c574527cdc283bdbb457becf4.tar.gz
SalutTubeStream: use GibberListener instead of SalutDirectBytestreamManager on the initiator side to receive connections from the remote CM
- GibberBytestreamDirect: accept a transport instead of a fd.
Diffstat (limited to 'lib/gibber/gibber-bytestream-direct.c')
-rw-r--r--lib/gibber/gibber-bytestream-direct.c47
1 files changed, 13 insertions, 34 deletions
diff --git a/lib/gibber/gibber-bytestream-direct.c b/lib/gibber/gibber-bytestream-direct.c
index e3e1e171..3bff0e18 100644
--- a/lib/gibber/gibber-bytestream-direct.c
+++ b/lib/gibber/gibber-bytestream-direct.c
@@ -129,6 +129,12 @@ gibber_bytestream_direct_dispose (GObject *object)
gibber_bytestream_iface_close (GIBBER_BYTESTREAM_IFACE (self), NULL);
}
+ if (priv->transport != NULL)
+ {
+ g_object_unref (priv->transport);
+ priv->transport = NULL;
+ }
+
G_OBJECT_CLASS (gibber_bytestream_direct_parent_class)->dispose (object);
}
@@ -462,7 +468,7 @@ set_transport (GibberBytestreamDirect *self,
g_assert (priv->transport == NULL);
- priv->transport = transport;
+ priv->transport = g_object_ref (transport);
gibber_transport_set_handler (transport, transport_handler, self);
g_signal_connect (transport, "connected",
@@ -475,19 +481,11 @@ set_transport (GibberBytestreamDirect *self,
gboolean
gibber_bytestream_direct_accept_socket (GibberBytestreamIface *bytestream,
- int listen_fd)
+ GibberTransport *transport)
{
GibberBytestreamDirect *self = GIBBER_BYTESTREAM_DIRECT (bytestream);
- GibberBytestreamDirectPrivate *priv;
- GibberLLTransport *ll_transport;
- struct sockaddr_storage addr;
- int fd, ret;
- char host[NI_MAXHOST];
- char port[NI_MAXSERV];
- socklen_t addrlen = sizeof (struct sockaddr_storage);
-
-
- priv = GIBBER_BYTESTREAM_DIRECT_GET_PRIVATE (self);
+ GibberBytestreamDirectPrivate *priv =
+ GIBBER_BYTESTREAM_DIRECT_GET_PRIVATE (self);
if (priv->state != GIBBER_BYTESTREAM_STATE_LOCAL_PENDING)
{
@@ -496,28 +494,9 @@ gibber_bytestream_direct_accept_socket (GibberBytestreamIface *bytestream,
return FALSE;
}
- fd = accept (listen_fd, (struct sockaddr *) &addr, &addrlen);
- gibber_normalize_address (&addr);
-
- ret = getnameinfo ((struct sockaddr *) &addr, addrlen,
- host, NI_MAXHOST, port, NI_MAXSERV,
- NI_NUMERICHOST | NI_NUMERICSERV);
-
- if (priv->check_addr_func != NULL && !priv->check_addr_func (self,
- (struct sockaddr *) &addr, addrlen, priv->check_addr_func_data))
- {
- DEBUG ("connection from %s refused by the bytestream user", host);
- return FALSE;
- }
-
- if (ret == 0)
- DEBUG("New connection from %s port %s", host, port);
- else
- DEBUG("New connection..");
-
- ll_transport = gibber_ll_transport_new ();
- set_transport (self, GIBBER_TRANSPORT (ll_transport));
- gibber_ll_transport_open_fd (ll_transport, fd);
+ set_transport (self, transport);
+ gibber_transport_set_state (transport, GIBBER_TRANSPORT_CONNECTING);
+ gibber_transport_set_state (transport, GIBBER_TRANSPORT_CONNECTED);
return TRUE;
}