You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

195 lines
5.1 KiB

  1. <?php
  2. /**
  3. * @package Widgets
  4. *
  5. * @file ChatExt.php
  6. * This file is part of MOVIM.
  7. *
  8. * @brief A jabber chat widget.
  9. *
  10. * @author Guillaume Pasquet <etenil@etenilsrealm.nl>
  11. *
  12. * @version 1.0
  13. * @date 20 October 2010
  14. *
  15. * Copyright (C)2010 MOVIM project
  16. *
  17. * See COPYING for licensing information.
  18. */
  19. use Moxl\Xec\Action\Jingle\SessionInitiate;
  20. use Moxl\Xec\Action\Jingle\SessionTerminate;
  21. class VisioExt extends WidgetBase
  22. {
  23. function load() {
  24. $this->addjs('visioext.js');
  25. $this->registerEvent('jinglesessioninitiate', 'onSessionInitiate');
  26. /*$this->registerEvent('jinglesessionterminate', 'onSessionTerminate');
  27. $this->registerEvent('jinglesessionaccept', 'onSessionAccept');
  28. $this->registerEvent('jingletransportinfo', 'onTransportInfo');
  29. $this->registerEvent('jinglecreationsuccess', 'onCreationSuccess');*/
  30. }
  31. function onSessionInitiate($jingle) {
  32. $jts = new \JingletoSDP($jingle);
  33. $sdp = $jts->generate();
  34. $cd = new \Modl\ContactDAO();
  35. $contact = $cd->get(cleanJid((string)$jingle->attributes()->initiator));
  36. if(!isset($contact))
  37. $contact = new Modl\Contact;
  38. if($sdp) {
  39. RPC::call(
  40. 'movim_desktop_notification',
  41. $contact->getTrueName(),
  42. $this->__('visio.calling'),
  43. $contact->getPhoto('m'));
  44. RPC::call('remoteSetJid', (string)$jingle->attributes()->initiator);
  45. RPC::call('remoteCall', 'onOffer', $sdp);
  46. RPC::commit();
  47. }
  48. }
  49. /*
  50. function onSessionAccept($jingle) {
  51. $jts = new \JingletoSDP($jingle);
  52. $sdp = $jts->generate();
  53. $sid = $jts->getSessionId();
  54. RPC::call('Popup.call', 'onAccept', $sdp);
  55. $s = Session::start('movim');
  56. $s->set('jingleSid', $sid);
  57. }
  58. function onTransportInfo($jingle) {
  59. $jts = new \JingletoSDP($jingle);
  60. RPC::call('Popup.call', 'onCandidate', $jts->generate(), $jts->media);
  61. }
  62. function onSessionTerminate($jingle) {
  63. $message = '';
  64. switch($jingle->reason->children()->getName()) {
  65. case 'success':
  66. $message = $this->__('visio.hung_up');
  67. break;
  68. case 'busy':
  69. $message = $this->__('visio.busy');
  70. break;
  71. case 'decline':
  72. $message = $this->__('visio.declined');
  73. break;
  74. case 'unsupported-transports':
  75. break;
  76. case 'failed-transport':
  77. break;
  78. case 'unsupported-applications':
  79. break;
  80. case 'failed-application':
  81. $message = $this->__('visio.remote_incompatible');
  82. break;
  83. case 'incompatible-parameters':
  84. break;
  85. default:
  86. $message = $this->__('visio.unknown_error');
  87. break;
  88. }
  89. RPC::call('Popup.call', 'terminate');
  90. RPC::call('Popup.call', 'movim_fill', 'status', $message);
  91. }
  92. function ajaxSendProposal($proposal) {
  93. $p = json_decode($proposal);
  94. $sd = Sessionx::start();
  95. $stj = new SDPtoJingle(
  96. $p->sdp,
  97. $this->user->getLogin().'/'.$sd->refsource,
  98. $p->jid.'/'.$p->resource,
  99. 'session-initiate');
  100. $r = new SessionInitiate;
  101. $r->setTo($p->jid.'/'.$p->resource)
  102. ->setOffer($stj->generate())
  103. ->request();
  104. $sid = $stj->getSessionId();
  105. $s = Session::start('movim');
  106. $s->set('jingleSid', $sid);
  107. }
  108. function ajaxSendAcceptance($proposal) {
  109. $p = json_decode($proposal);
  110. $sd = Sessionx::start();
  111. $stj = new SDPtoJingle(
  112. $p->sdp,
  113. $this->user->getLogin().'/'.$sd->resource,
  114. $p->jid.'/'.$p->resource,
  115. 'session-accept');
  116. $r = new SessionInitiate;
  117. $r->setTo($p->jid.'/'.$p->resource)
  118. ->setOffer($stj->generate())
  119. ->request();
  120. }
  121. function ajaxSendSessionTerminate($jid, $resource, $reason = null) {
  122. $s = Session::start('movim');
  123. $jingleSid = $s->get("jingleSid");
  124. $r = new SessionTerminate;
  125. $r->setTo($jid.'/'.$resource);
  126. $r->setJingleSid($jingleSid);
  127. if(isset($reason))
  128. $r->setReason($reason);
  129. $r->request();
  130. }
  131. function ajaxSendCandidate($candidate) {
  132. $p = json_decode($candidate);
  133. $sd = Sessionx::start();
  134. $sdp =
  135. 'm='.$p->mid."\n".
  136. $p->sdp;
  137. $stj = new SDPtoJingle(
  138. $sdp,
  139. $this->user->getLogin().'/'.$sd->resource,
  140. $p->jid.'/'.$p->resource,
  141. 'transport-info');
  142. $r = new SessionInitiate;
  143. $r->setTo($p->jid.'/'.$p->resource)
  144. ->setOffer($stj->generate())
  145. ->request();
  146. }*/
  147. function build() {
  148. }
  149. }