[Telepathy-commits] [telepathy-salut/master] Tubes: the "state" property is not writeable anymore. Use an "offered" boolean instead to distinguish tubes which should be in the Not_Offered state
Alban Crequy
alban.crequy at collabora.co.uk
Fri Feb 6 03:14:57 PST 2009
---
src/salut-tubes-channel.c | 36 ++++++++++--------------------------
src/tube-stream.c | 43 +++++++++++++++++++++++++++++++------------
src/tube-stream.h | 8 ++++----
3 files changed, 45 insertions(+), 42 deletions(-)
diff --git a/src/salut-tubes-channel.c b/src/salut-tubes-channel.c
index c1981d0..401e2e8 100644
--- a/src/salut-tubes-channel.c
+++ b/src/salut-tubes-channel.c
@@ -175,9 +175,8 @@ static gboolean extract_tube_information (SalutTubesChannel *self,
GibberXmppNode *tube_node, TpTubeType *type, TpHandle *initiator_handle,
const gchar **service, GHashTable **parameters, guint *tube_id);
static SalutTubeIface * create_new_tube (SalutTubesChannel *self,
- TpTubeType type, TpHandle initiator, SalutTubeChannelState initial_state,
- const gchar *service,
- GHashTable *parameters, guint tube_id, guint portnum,
+ TpTubeType type, TpHandle initiator, gboolean offered,
+ const gchar *service, GHashTable *parameters, guint tube_id, guint portnum,
GibberXmppStanza *iq_req);
static void
@@ -857,8 +856,7 @@ salut_tubes_channel_muc_message_received (SalutTubesChannel *self,
}
}
- tube = create_new_tube (self, type, initiator_handle,
- SALUT_TUBE_CHANNEL_STATE_LOCAL_PENDING, service, parameters,
+ tube = create_new_tube (self, type, initiator_handle, FALSE, service, parameters,
tube_id, 0, NULL);
/* the tube has reffed its initiator, no need to keep a ref */
@@ -949,9 +947,8 @@ salut_tubes_channel_message_received (SalutTubesChannel *self,
tube = g_hash_table_lookup (priv->tubes, GUINT_TO_POINTER (tube_id));
if (tube == NULL)
{
- tube = create_new_tube (self, tube_type, initiator_handle,
- SALUT_TUBE_CHANNEL_STATE_LOCAL_PENDING, service,
- parameters, tube_id, portnum, iq_req);
+ tube = create_new_tube (self, tube_type, initiator_handle, FALSE,
+ service, parameters, tube_id, portnum, iq_req);
}
}
@@ -1036,8 +1033,7 @@ salut_tubes_channel_tube_request (SalutTubesChannel *self,
DEBUG ("Request a tube channel with type='%s' and service='%s'",
channel_type, service);
- tube = create_new_tube (self, type, priv->self_handle,
- SALUT_TUBE_CHANNEL_STATE_NOT_OFFERED, service,
+ tube = create_new_tube (self, type, priv->self_handle, FALSE, service,
parameters, tube_id, 0, NULL);
return tube;
@@ -1221,7 +1217,7 @@ static SalutTubeIface *
create_new_tube (SalutTubesChannel *self,
TpTubeType type,
TpHandle initiator,
- SalutTubeChannelState initial_state,
+ gboolean offered,
const gchar *service,
GHashTable *parameters,
guint tube_id,
@@ -1246,7 +1242,7 @@ create_new_tube (SalutTubesChannel *self,
case TP_TUBE_TYPE_STREAM:
tube = SALUT_TUBE_IFACE (salut_tube_stream_new (priv->conn, self,
priv->xmpp_connection_manager, priv->handle, priv->handle_type,
- priv->self_handle, initiator, initial_state, service, parameters,
+ priv->self_handle, initiator, offered, service, parameters,
tube_id, portnum, iq_req));
break;
default:
@@ -1556,7 +1552,6 @@ salut_tubes_channel_offer_d_bus_tube (TpSvcChannelTypeTubes *iface,
guint tube_id;
SalutTubeIface *tube;
GHashTable *parameters_copied;
- SalutTubeChannelState initial_state;
g_assert (SALUT_IS_TUBES_CHANNEL (self));
@@ -1576,13 +1571,8 @@ salut_tubes_channel_offer_d_bus_tube (TpSvcChannelTypeTubes *iface,
tube_id = generate_tube_id ();
- if (priv->handle_type == TP_HANDLE_TYPE_ROOM)
- initial_state = SALUT_TUBE_CHANNEL_STATE_OPEN;
- else
- initial_state = SALUT_TUBE_CHANNEL_STATE_REMOTE_PENDING;
-
tube = create_new_tube (self, TP_TUBE_TYPE_DBUS, priv->self_handle,
- initial_state, service, parameters_copied,
+ TRUE, service, parameters_copied,
tube_id, 0, NULL);
tp_svc_channel_type_tubes_return_from_offer_d_bus_tube (context, tube_id);
@@ -2040,7 +2030,6 @@ salut_tubes_channel_offer_stream_tube (TpSvcChannelTypeTubes *iface,
guint tube_id;
SalutTubeIface *tube;
GError *error = NULL;
- SalutTubeChannelState initial_state;
priv = SALUT_TUBES_CHANNEL_GET_PRIVATE (self);
base = (TpBaseConnection *) priv->conn;
@@ -2066,13 +2055,8 @@ salut_tubes_channel_offer_stream_tube (TpSvcChannelTypeTubes *iface,
tube_id = generate_tube_id ();
- if (priv->handle_type == TP_HANDLE_TYPE_ROOM)
- initial_state = SALUT_TUBE_CHANNEL_STATE_OPEN;
- else
- initial_state = SALUT_TUBE_CHANNEL_STATE_REMOTE_PENDING;
-
tube = create_new_tube (self, TP_TUBE_TYPE_STREAM, priv->self_handle,
- initial_state, service, parameters, tube_id, 0, NULL);
+ TRUE, service, parameters, tube_id, 0, NULL);
g_object_set (tube,
"address-type", address_type,
diff --git a/src/tube-stream.c b/src/tube-stream.c
index e9ed66e..1c3ea6e 100644
--- a/src/tube-stream.c
+++ b/src/tube-stream.c
@@ -129,6 +129,7 @@ enum
PROP_SERVICE,
PROP_PARAMETERS,
PROP_STATE,
+ PROP_OFFERED,
PROP_ADDRESS_TYPE,
PROP_ADDRESS,
PROP_ACCESS_CONTROL,
@@ -184,6 +185,9 @@ struct _SalutTubeStreamPrivate
gchar *service;
GHashTable *parameters;
SalutTubeChannelState state;
+ /* whether the tube is already offered at construct-time (with the
+ * Channel.Type.Tubes interface) */
+ gboolean offered;
TpSocketAddressType address_type;
GValue *address;
@@ -1052,6 +1056,9 @@ salut_tube_stream_get_property (GObject *object,
case PROP_STATE:
g_value_set_uint (value, priv->state);
break;
+ case PROP_OFFERED:
+ g_value_set_boolean (value, priv->offered);
+ break;
case PROP_ADDRESS_TYPE:
g_value_set_uint (value, priv->address_type);
break;
@@ -1149,10 +1156,8 @@ salut_tube_stream_set_property (GObject *object,
g_hash_table_destroy (priv->parameters);
priv->parameters = g_value_dup_boxed (value);
break;
- case PROP_STATE:
- priv->state = g_value_get_uint (value);
- if (priv->state == SALUT_TUBE_CHANNEL_STATE_OPEN)
- g_signal_emit (G_OBJECT (self), signals[OPENED], 0);
+ case PROP_OFFERED:
+ priv->offered = g_value_get_boolean (value);
break;
case PROP_ADDRESS_TYPE:
g_assert (g_value_get_uint (value) == TP_SOCKET_ADDRESS_TYPE_UNIX ||
@@ -1303,20 +1308,26 @@ salut_tube_stream_constructor (GType type,
if (priv->handle_type == TP_HANDLE_TYPE_CONTACT)
{
/* Private tube */
- g_assert (priv->state == SALUT_TUBE_CHANNEL_STATE_NOT_OFFERED ||
- priv->state == SALUT_TUBE_CHANNEL_STATE_REMOTE_PENDING);
- if (priv->state == SALUT_TUBE_CHANNEL_STATE_REMOTE_PENDING)
- priv->offer_needed = TRUE;
+ if (priv->offered)
+ {
+ priv->state = SALUT_TUBE_CHANNEL_STATE_REMOTE_PENDING;
+ priv->offer_needed = TRUE;
+ }
+ else
+ {
+ priv->state = SALUT_TUBE_CHANNEL_STATE_NOT_OFFERED;
+ }
}
else
{
/* Muc tube */
- g_assert (priv->state == SALUT_TUBE_CHANNEL_STATE_OPEN);
+ priv->state = SALUT_TUBE_CHANNEL_STATE_OPEN;
+ g_signal_emit (obj, signals[OPENED], 0);
}
}
else
{
- g_assert (priv->state == SALUT_TUBE_CHANNEL_STATE_LOCAL_PENDING);
+ priv->state = SALUT_TUBE_CHANNEL_STATE_LOCAL_PENDING;
}
if (priv->handle_type == TP_HANDLE_TYPE_CONTACT)
@@ -1552,6 +1563,14 @@ salut_tube_stream_class_init (SalutTubeStreamClass *salut_tube_stream_class)
G_PARAM_STATIC_BLURB);
g_object_class_install_property (object_class, PROP_IQ_REQ, param_spec);
+ param_spec = g_param_spec_boolean (
+ "offered",
+ "Whether the application asked to offer the tube",
+ "Whether the application asked to offer the tube",
+ FALSE,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+ g_object_class_install_property (object_class, PROP_OFFERED, param_spec);
+
signals[OPENED] =
g_signal_new ("tube-opened",
G_OBJECT_CLASS_TYPE (salut_tube_stream_class),
@@ -1633,7 +1652,7 @@ salut_tube_stream_new (SalutConnection *conn,
TpHandleType handle_type,
TpHandle self_handle,
TpHandle initiator,
- SalutTubeChannelState initial_state,
+ gboolean offered,
const gchar *service,
GHashTable *parameters,
guint id,
@@ -1655,7 +1674,7 @@ salut_tube_stream_new (SalutConnection *conn,
"handle-type", handle_type,
"self-handle", self_handle,
"initiator", initiator,
- "state", initial_state,
+ "offered", offered,
"service", service,
"parameters", parameters,
"id", id,
diff --git a/src/tube-stream.h b/src/tube-stream.h
index 26cbfdb..23267dc 100644
--- a/src/tube-stream.h
+++ b/src/tube-stream.h
@@ -66,10 +66,10 @@ GType salut_tube_stream_get_type (void);
SalutTubeStream *salut_tube_stream_new (SalutConnection *conn,
SalutTubesChannel *tubes_channel,
SalutXmppConnectionManager *xmpp_connection_manager, TpHandle handle,
- TpHandleType handle_type, TpHandle self_handle,
- TpHandle initiator, SalutTubeChannelState initial_state,
- const gchar *service, GHashTable *parameters, guint id,
- guint portnum, GibberXmppStanza *iq_req);
+ TpHandleType handle_type, TpHandle self_handle, TpHandle initiator,
+ gboolean offered, const gchar *service,
+ GHashTable *parameters, guint id, guint portnum,
+ GibberXmppStanza *iq_req);
gboolean salut_tube_stream_check_params (TpSocketAddressType address_type,
const GValue *address, TpSocketAccessControl access_control,
--
1.5.6.5
More information about the telepathy-commits
mailing list