[Telepathy-commits] [telepathy-salut/master] implement news states transitions
Guillaume Desmottes
guillaume.desmottes at collabora.co.uk
Fri Nov 21 03:46:46 PST 2008
---
src/salut-file-transfer-channel.c | 31 +++++++++++++++++++++++++------
1 files changed, 25 insertions(+), 6 deletions(-)
diff --git a/src/salut-file-transfer-channel.c b/src/salut-file-transfer-channel.c
index f16872c..a365552 100644
--- a/src/salut-file-transfer-channel.c
+++ b/src/salut-file-transfer-channel.c
@@ -123,6 +123,7 @@ struct _SalutFileTransferChannelPrivate {
glong last_transferred_bytes_emitted;
gchar *socket_path;
TpHandle initiator;
+ gboolean remote_accepted;
/* properties */
SalutFileTransferState state;
@@ -886,9 +887,22 @@ static void
remote_accepted_cb (GibberFileTransfer *ft,
SalutFileTransferChannel *self)
{
- salut_file_transfer_channel_set_state (SALUT_SVC_CHANNEL_TYPE_FILE_TRANSFER (self),
- SALUT_FILE_TRANSFER_STATE_OPEN,
- SALUT_FILE_TRANSFER_STATE_CHANGE_REASON_NONE);
+ self->priv->remote_accepted = TRUE;
+
+ if (self->priv->socket_path != NULL)
+ {
+ /* ProvideFile has already been called. Channel is Open */
+ salut_file_transfer_channel_set_state (SALUT_SVC_CHANNEL_TYPE_FILE_TRANSFER (self),
+ SALUT_FILE_TRANSFER_STATE_OPEN,
+ SALUT_FILE_TRANSFER_STATE_CHANGE_REASON_NONE);
+ }
+ else
+ {
+ /* Client has to call ProvideFile to open the channel */
+ salut_file_transfer_channel_set_state (SALUT_SVC_CHANNEL_TYPE_FILE_TRANSFER (self),
+ SALUT_FILE_TRANSFER_STATE_ACCEPTED,
+ SALUT_FILE_TRANSFER_STATE_CHANGE_REASON_NONE);
+ }
g_signal_connect (ft, "finished", G_CALLBACK (ft_finished_cb), self);
g_signal_connect (ft, "canceled", G_CALLBACK (ft_remote_canceled_cb), self);
@@ -1215,9 +1229,14 @@ salut_file_transfer_channel_provide_file (SalutSvcChannelTypeFileTransfer *iface
g_value_init (&out_address, G_TYPE_STRING);
g_value_set_string (&out_address, channel->priv->socket_path);
- salut_file_transfer_channel_set_state (iface,
- SALUT_FILE_TRANSFER_STATE_PENDING,
- SALUT_FILE_TRANSFER_STATE_CHANGE_REASON_REQUESTED);
+ if (self->priv->remote_accepted)
+ {
+ /* Remote already accepted the file. Channel is Open.
+ * If not channel stay Pending. */
+ salut_file_transfer_channel_set_state (iface,
+ SALUT_FILE_TRANSFER_STATE_OPEN,
+ SALUT_FILE_TRANSFER_STATE_CHANGE_REASON_REQUESTED);
+ }
salut_svc_channel_type_file_transfer_return_from_provide_file (context,
&out_address);
--
1.5.6.5
More information about the Telepathy-commits
mailing list