~ubuntu-branches/ubuntu/precise/telepathy-glib/precise-201111172307

« back to all changes in this revision

Viewing changes to examples/future/call-cm/call-stream.c

  • Committer: Ken VanDine
  • Date: 2011-11-17 20:53:21 UTC
  • mfrom: (1.6.34 upstream)
  • Revision ID: ken.vandine@canonical.com-20111117205321-l704j7kr1zgw5v9h
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
45
45
  PROP_LOCALLY_REQUESTED,
46
46
  PROP_LOCAL_SENDING_STATE,
47
47
  PROP_REMOTE_MEMBERS,
 
48
  PROP_REMOTE_MEMBER_IDENTIFIERS,
48
49
  N_PROPS
49
50
};
50
51
 
168
169
        }
169
170
      break;
170
171
 
 
172
    case PROP_REMOTE_MEMBER_IDENTIFIERS:
 
173
        {
 
174
          GHashTable *identifiers = g_hash_table_new (NULL, NULL);
 
175
          TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (
 
176
              self->priv->conn, TP_HANDLE_TYPE_CONTACT);
 
177
 
 
178
          g_hash_table_insert (identifiers, GUINT_TO_POINTER (self->priv->handle),
 
179
              (gpointer) tp_handle_inspect (contact_repo, self->priv->handle));
 
180
 
 
181
          g_value_take_boxed (value, identifiers);
 
182
        }
 
183
      break;
 
184
 
171
185
    case PROP_LOCAL_SENDING_STATE:
172
186
      g_value_set_uint (value, self->priv->local_sending_state);
173
187
      break;
257
271
example_call_stream_class_init (ExampleCallStreamClass *klass)
258
272
{
259
273
  static TpDBusPropertiesMixinPropImpl stream_props[] = {
 
274
      { "RemoteMemberIdentifiers", "remote-member-identifiers", NULL },
260
275
      { "LocalSendingState", "local-sending-state", NULL },
261
276
      { "RemoteMembers", "remote-members", NULL },
262
277
      { "Interfaces", "interfaces", NULL },
306
321
  g_object_class_install_property (object_class, PROP_SIMULATION_DELAY,
307
322
      param_spec);
308
323
 
 
324
  param_spec = g_param_spec_boxed ("remote-member-identifiers", "RemoteMemberIdentifiers",
 
325
      "Map from contact handles to their identifiers",
 
326
      TP_HASH_TYPE_HANDLE_IDENTIFIER_MAP,
 
327
      G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
 
328
  g_object_class_install_property (object_class, PROP_REMOTE_MEMBER_IDENTIFIERS,
 
329
      param_spec);
 
330
 
309
331
  param_spec = g_param_spec_boolean ("locally-requested", "Locally requested?",
310
332
      "True if this channel was requested by the local user",
311
333
      FALSE,
391
413
void
392
414
example_call_stream_simulate_contact_agreed_to_send (ExampleCallStream *self)
393
415
{
394
 
  GHashTable *updated_members;
 
416
  GHashTable *updated_members, *identifiers;
395
417
  GArray *removed_members;
396
418
  GValueArray *reason;
 
419
  TpHandleRepoIface *contact_handles;
397
420
 
398
421
  if (self->priv->removed ||
399
422
      self->priv->remote_sending_state != FUTURE_SENDING_STATE_PENDING_SEND)
400
423
    return;
401
424
 
 
425
  contact_handles = tp_base_connection_get_handles (
 
426
      self->priv->conn, TP_HANDLE_TYPE_CONTACT);
 
427
 
402
428
  g_message ("%s: SIGNALLING: received: OK, I'll send you media",
403
429
      self->priv->object_path);
404
430
 
406
432
 
407
433
  updated_members = g_hash_table_new (NULL, NULL);
408
434
  removed_members = g_array_sized_new (FALSE, FALSE, sizeof (guint), 0);
 
435
  identifiers = g_hash_table_new (NULL, NULL);
409
436
  g_hash_table_insert (updated_members, GUINT_TO_POINTER (self->priv->handle),
410
437
      GUINT_TO_POINTER (FUTURE_SENDING_STATE_SENDING));
 
438
  g_hash_table_insert (identifiers, GUINT_TO_POINTER (self->priv->handle),
 
439
      (gpointer) tp_handle_inspect (contact_handles, self->priv->handle));
411
440
  reason = tp_value_array_build (4,
412
441
      G_TYPE_UINT, 0,
413
442
      G_TYPE_UINT, FUTURE_CALL_STATE_CHANGE_REASON_UNKNOWN,
415
444
      G_TYPE_STRING, "",
416
445
      G_TYPE_INVALID);
417
446
  future_svc_call_stream_emit_remote_members_changed (self, updated_members,
418
 
      removed_members, reason);
 
447
      identifiers, removed_members, reason);
419
448
  g_hash_table_unref (updated_members);
 
449
  g_hash_table_unref (identifiers);
420
450
  g_array_free (removed_members, TRUE);
421
451
  g_value_array_free (reason);
422
452
}
433
463
    gboolean want_to_send, gboolean want_to_receive)
434
464
{
435
465
  GHashTable *updated_members = g_hash_table_new (NULL, NULL);
 
466
  GHashTable *updated_member_identifiers = g_hash_table_new (NULL, NULL);
436
467
  GValueArray *reason = tp_value_array_build (4,
437
468
      G_TYPE_UINT, 0,
438
469
      G_TYPE_UINT, FUTURE_CALL_STATE_CHANGE_REASON_UNKNOWN,
439
470
      G_TYPE_STRING, "",
440
471
      G_TYPE_STRING, "",
441
472
      G_TYPE_INVALID);
 
473
  TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (
 
474
      self->priv->conn, TP_HANDLE_TYPE_CONTACT);
442
475
 
443
476
  if (want_to_send)
444
477
    {
495
528
          g_hash_table_insert (updated_members,
496
529
              GUINT_TO_POINTER (self->priv->handle),
497
530
              GUINT_TO_POINTER (FUTURE_SENDING_STATE_PENDING_SEND));
 
531
          g_hash_table_insert (updated_member_identifiers,
 
532
              GUINT_TO_POINTER (self->priv->handle),
 
533
              (gpointer) tp_handle_inspect (contact_repo, self->priv->handle));
498
534
        }
499
535
    }
500
536
  else
510
546
          g_hash_table_insert (updated_members,
511
547
              GUINT_TO_POINTER (self->priv->handle),
512
548
              GUINT_TO_POINTER (FUTURE_SENDING_STATE_NONE));
 
549
          g_hash_table_insert (updated_member_identifiers,
 
550
              GUINT_TO_POINTER (self->priv->handle),
 
551
              (gpointer) tp_handle_inspect (contact_repo, self->priv->handle));
513
552
        }
514
553
    }
515
554
 
519
558
          sizeof (guint), 0);
520
559
 
521
560
      future_svc_call_stream_emit_remote_members_changed (self,
522
 
          updated_members, removed_members, reason);
 
561
          updated_members, updated_member_identifiers,
 
562
          removed_members, reason);
523
563
 
524
564
      g_array_free (removed_members, TRUE);
525
565
    }
526
566
 
527
567
  g_hash_table_unref (updated_members);
 
568
  g_hash_table_unref (updated_member_identifiers);
528
569
  g_value_array_free (reason);
529
570
}
530
571
 
536
577
    gboolean remote_send)
537
578
{
538
579
  GHashTable *updated_members = g_hash_table_new (NULL, NULL);
 
580
  GHashTable *updated_member_identifiers = g_hash_table_new (NULL, NULL);
539
581
  GValueArray *reason = tp_value_array_build (4,
540
582
      G_TYPE_UINT, 0,
541
583
      G_TYPE_UINT, FUTURE_CALL_STATE_CHANGE_REASON_UNKNOWN,
542
584
      G_TYPE_STRING, "",
543
585
      G_TYPE_STRING, "",
544
586
      G_TYPE_INVALID);
 
587
  TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (
 
588
      self->priv->conn, TP_HANDLE_TYPE_CONTACT);
545
589
  /* In some protocols, streams cannot be neither sending nor receiving, so
546
590
   * if a stream is set to TP_MEDIA_STREAM_DIRECTION_NONE, this is equivalent
547
591
   * to removing it. (This is true in XMPP, for instance.)
608
652
          g_hash_table_insert (updated_members,
609
653
              GUINT_TO_POINTER (self->priv->handle),
610
654
              GUINT_TO_POINTER (FUTURE_SENDING_STATE_SENDING));
 
655
          g_hash_table_insert (updated_member_identifiers,
 
656
              GUINT_TO_POINTER (self->priv->handle),
 
657
              (gpointer) tp_handle_inspect (contact_repo, self->priv->handle));
611
658
        }
612
659
    }
613
660
  else
622
669
          g_hash_table_insert (updated_members,
623
670
              GUINT_TO_POINTER (self->priv->handle),
624
671
              GUINT_TO_POINTER (FUTURE_SENDING_STATE_NONE));
 
672
          g_hash_table_insert (updated_member_identifiers,
 
673
              GUINT_TO_POINTER (self->priv->handle),
 
674
              (gpointer) tp_handle_inspect (contact_repo, self->priv->handle));
625
675
        }
626
676
      else if (self->priv->remote_sending_state ==
627
677
          FUTURE_SENDING_STATE_SENDING)
633
683
          g_hash_table_insert (updated_members,
634
684
              GUINT_TO_POINTER (self->priv->handle),
635
685
              GUINT_TO_POINTER (FUTURE_SENDING_STATE_NONE));
 
686
          g_hash_table_insert (updated_member_identifiers,
 
687
              GUINT_TO_POINTER (self->priv->handle),
 
688
              (gpointer) tp_handle_inspect (contact_repo, self->priv->handle));
636
689
        }
637
690
    }
638
691
 
642
695
          sizeof (guint), 0);
643
696
 
644
697
      future_svc_call_stream_emit_remote_members_changed (self,
645
 
          updated_members, removed_members, reason);
 
698
          updated_members, updated_member_identifiers,
 
699
          removed_members, reason);
646
700
 
647
701
      g_array_free (removed_members, TRUE);
648
702
    }
649
703
 
650
704
  g_hash_table_unref (updated_members);
 
705
  g_hash_table_unref (updated_member_identifiers);
651
706
  g_value_array_free (reason);
652
707
}
653
708