[Telepathy-commits] [telepathy-salut/master] Replace XmppConnection by a GArray of address in GibberBytestreamDirect
Alban Crequy
alban.crequy at collabora.co.uk
Tue Nov 25 03:59:20 PST 2008
---
lib/gibber/gibber-bytestream-direct.c | 50 ++++++++++++++-------------------
src/salut-direct-bytestream-manager.c | 2 +-
2 files changed, 22 insertions(+), 30 deletions(-)
diff --git a/lib/gibber/gibber-bytestream-direct.c b/lib/gibber/gibber-bytestream-direct.c
index 78c2aa2..8ac48b9 100644
--- a/lib/gibber/gibber-bytestream-direct.c
+++ b/lib/gibber/gibber-bytestream-direct.c
@@ -60,7 +60,7 @@ static guint signals[LAST_SIGNAL] = {0};
/* properties */
enum
{
- PROP_XMPP_CONNECTION = 1,
+ PROP_ADDRESSES = 1,
PROP_SELF_ID,
PROP_PEER_ID,
PROP_STREAM_ID,
@@ -76,7 +76,7 @@ enum
typedef struct _GibberBytestreamDirectPrivate GibberBytestreamDirectPrivate;
struct _GibberBytestreamDirectPrivate
{
- GibberXmppConnection *xmpp_connection;
+ GArray *addresses;
gchar *self_id;
gchar *peer_id;
gchar *stream_id;
@@ -139,6 +139,9 @@ gibber_bytestream_direct_finalize (GObject *object)
g_free (priv->self_id);
g_free (priv->peer_id);
+ if (priv->addresses != NULL)
+ g_array_free (priv->addresses, TRUE);
+
G_OBJECT_CLASS (gibber_bytestream_direct_parent_class)->finalize (object);
}
@@ -154,8 +157,8 @@ gibber_bytestream_direct_get_property (GObject *object,
switch (property_id)
{
- case PROP_XMPP_CONNECTION:
- g_value_set_object (value, priv->xmpp_connection);
+ case PROP_ADDRESSES:
+ g_value_set_pointer (value, priv->addresses);
break;
case PROP_SELF_ID:
g_value_set_string (value, priv->self_id);
@@ -195,12 +198,8 @@ gibber_bytestream_direct_set_property (GObject *object,
switch (property_id)
{
- case PROP_XMPP_CONNECTION:
- if (g_value_get_object (value) != NULL)
- {
- priv->xmpp_connection = g_value_get_object (value);
- g_object_ref (priv->xmpp_connection);
- }
+ case PROP_ADDRESSES:
+ priv->addresses = g_value_get_pointer (value);
break;
case PROP_SELF_ID:
g_free (priv->self_id);
@@ -277,18 +276,17 @@ gibber_bytestream_direct_class_init (
g_object_class_override_property (object_class, PROP_PROTOCOL,
"protocol");
- param_spec = g_param_spec_object (
- "xmpp-connection",
- "GibberXmppConnection object",
- "Gibber XMPP connection object used to find the IP address to connect "
- "in this bytestream if it's a private one",
- GIBBER_TYPE_XMPP_CONNECTION,
+ param_spec = g_param_spec_pointer (
+ "addresses",
+ "Array of addresses",
+ "GArray of struct sockaddr_storage used to find the IP address to "
+ "connect in this bytestream if it's a private one",
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_READWRITE |
G_PARAM_STATIC_NAME |
G_PARAM_STATIC_NICK |
G_PARAM_STATIC_BLURB);
- g_object_class_install_property (object_class, PROP_XMPP_CONNECTION,
+ g_object_class_install_property (object_class, PROP_ADDRESSES,
param_spec);
param_spec = g_param_spec_uint (
@@ -647,29 +645,23 @@ gibber_bytestream_direct_initiate (GibberBytestreamIface *bytestream)
struct sockaddr_storage storage;
struct sockaddr_in6 in6;
} addr;
- socklen_t len;
GibberBytestreamDirectPrivate *priv =
GIBBER_BYTESTREAM_DIRECT_GET_PRIVATE (self);
DEBUG ("Called.");
- /* FIXME, this is very specific to salut and won't work with a normal xmpp
- * client */
- g_assert (priv->xmpp_connection != NULL);
- g_assert (priv->xmpp_connection->transport != NULL);
- if (!gibber_transport_get_sockaddr (
- GIBBER_TRANSPORT (priv->xmpp_connection->transport),
- &addr.storage, &len))
+ if (priv->addresses->len < 1)
{
- /* I'm too lazy to create more specific errors for this as it should
- * never happen while using salut anyway.. */
GError e = { GIBBER_XMPP_ERROR, XMPP_ERROR_ITEM_NOT_FOUND,
- "Unsable get socket address for the control connection" };
- DEBUG ("Could not get socket address for the control connection" );
+ "Unsable get socket address for this contact" };
+ DEBUG ("Could not get socket address for this contact" );
gibber_bytestream_iface_close (GIBBER_BYTESTREAM_IFACE (self), &e);
return FALSE;
}
+ /* Use the first address for now */
+ addr.storage = g_array_index (priv->addresses, struct sockaddr_storage, 0);
+
addr.in6.sin6_port = g_htons ((guint16) priv->portnum);
ll_transport = gibber_ll_transport_new ();
diff --git a/src/salut-direct-bytestream-manager.c b/src/salut-direct-bytestream-manager.c
index f29851c..3192fa3 100644
--- a/src/salut-direct-bytestream-manager.c
+++ b/src/salut-direct-bytestream-manager.c
@@ -481,7 +481,7 @@ salut_direct_bytestream_manager_new_stream (SalutDirectBytestreamManager *self,
priv = SALUT_DIRECT_BYTESTREAM_MANAGER_GET_PRIVATE (self);
bytestream = g_object_new (GIBBER_TYPE_BYTESTREAM_DIRECT,
- "xmpp-connection", connection,
+ "addresses", salut_contact_get_addresses (contact),
"state", GIBBER_BYTESTREAM_STATE_LOCAL_PENDING,
"self-id", priv->connection->name,
"peer-id", contact->name,
--
1.5.6.5
More information about the Telepathy-commits
mailing list