Browse Source

- Add a simple Ack widget

- Continue Jingle implementation
pull/16/head
Jaussoin Timothée 12 years ago
parent
commit
907e24e0f3
  1. 1
      app/views/main.tpl
  2. 1
      app/views/page.tpl
  3. 43
      app/widgets/Ack/Ack.php
  4. 7
      app/widgets/Ack/ack.tpl
  5. 1
      app/widgets/Login/Login.php
  6. 3
      app/widgets/Visio/visio.tpl
  7. 2
      app/widgets/Visio/webrtc.js
  8. 21
      app/widgets/VisioExt/VisioExt.php
  9. 4
      app/widgets/VisioExt/visioext.js
  10. 39
      lib/JingletoSDP.php
  11. 15
      lib/SDPtoJingle.php

1
app/views/main.tpl

@ -4,6 +4,7 @@
<?php $this->widget('Presence');?>
<?php $this->widget('Chat');?>
<?php $this->widget('VisioExt');?>
<?php $this->widget('Ack');?>
<div id="main">
<div id="left">

1
app/views/page.tpl

@ -8,7 +8,6 @@
<link rel="shortcut icon" href="<?php $this->link_file('img/favicon.ico');?>" />
<link rel="stylesheet" href="<?php echo BASE_URI; ?>app/assets/js/leaflet.css" />
<script src="<?php echo BASE_URI; ?>app/assets/js/leaflet.js"></script>
<script src="<?php echo BASE_URI; ?>app/assets/js/sjcl.js"></script>
<meta name="viewport" content="width=device-width, user-scalable=no";>
<?php

43
app/widgets/Ack/Ack.php

@ -0,0 +1,43 @@
<?php
/**
* @package Widgets
*
* @file Ack.php
* This file is part of MOVIM.
*
* @brief Send ack for each incoming requests.
*
* @author Timothée Jaussoin <edhelas@gmail.com>
*
* @version 1.0
*
* Copyright (C)2013 MOVIM project
*
* See COPYING for licensing information.
*/
class Ack extends WidgetBase {
function WidgetLoad()
{
$this->registerEvent('ack', 'onAckRequest');
$this->view->assign('ack',
$this->genCallAjax(
"ajaxAckRequest", 'to', 'id')
);
}
function onAckRequest($ack) {
$to = $ack[0];
$id = $ack[1];
RPC::call('ackRequest', $to, $id);
}
function ajaxAckRequest($to, $id) {
$ack = new \moxl\AckSend();
$ack->setTo($to)
->setId($id)
->request();
}
}

7
app/widgets/Ack/ack.tpl

@ -0,0 +1,7 @@
<script type="text/javascript">
function ackRequest(arg) {
var to = arg[0];
var id = arg[1];
{$ack}
}
</script>

1
app/widgets/Login/Login.php

@ -35,7 +35,6 @@ class Login extends WidgetBase {
'.$submit.'
loginButtonSet(\''.t('Connecting...').'\', true);
localStorage.username = document.querySelector(\'#login\').value;
Session.clear();
this.onclick=null;');
$sd = new modl\SessionxDAO();

3
app/widgets/Visio/visio.tpl

@ -2,9 +2,6 @@
<div id="log">
</div>
<audio autoplay="true" id="remote-audio">
</audio>
<video autoplay="true" id="remote-video">
</video>

2
app/widgets/Visio/webrtc.js

@ -16,6 +16,7 @@ var sdpConstraints = {'mandatory': {
function onIceCandidate(event) {
Visio.log('onIceCandidate');
console.log(event);
Visio.log(event);
}
@ -116,6 +117,7 @@ function onAccept(offer) {
offer = offer[0];
Visio.log(offer);
console.log(offer);
if(offer != null) {
var desc = new RTCSessionDescription();

21
app/widgets/VisioExt/VisioExt.php

@ -22,17 +22,20 @@ class VisioExt extends WidgetBase
{
function WidgetLoad() {
$this->addjs('visioext.js');
$this->registerEvent('jinglesessioninitiate', 'onSessionInitiate');
$this->registerEvent('jinglesessionterminate', 'onSessionTerminate');
$this->registerEvent('jinglesessionaccept', 'onSessionAccept');
$this->registerEvent('jinglesessioninitiate', 'onSessionInitiate');
$this->registerEvent('jinglesessionterminate', 'onSessionTerminate');
$this->registerEvent('jinglesessionaccept', 'onSessionAccept');
$this->registerEvent('jingletransportinfo', 'onTransportInfo');
}
function onSessionInitiate($jingle) {
$jts = new \JingletoSDP($jingle);
$sdp = $jts->generate();
RPC::call('Popup.open', (string)$jingle->attributes()->initiator);
RPC::call('Popup.call', 'onOffer', $sdp);
if($sdp) {
RPC::call('Popup.open', (string)$jingle->attributes()->initiator);
RPC::call('Popup.call', 'onOffer', $sdp);
}
}
function onSessionAccept($jingle) {
@ -42,8 +45,14 @@ class VisioExt extends WidgetBase
RPC::call('Popup.call', 'onAccept', $sdp);
}
function onTransportInfo($jingle) {
$jts = new \JingletoSDP($jingle);
$sdp = $jts->generate();
\movim_log($sdp);
}
function onSessionTerminate($jingle) {
//\movim_log($jingle);
}
function ajaxSendProposal($proposal) {

4
app/widgets/VisioExt/visioext.js

@ -51,12 +51,14 @@ var Popup = {
call: function(args) {
if( this.win && !this.win.closed ) {
console.log('Calling the Popup');
// The popup is open so call it
var func = args[0];
args.shift();
var params = args;
console.log('Calling the Popup');
console.log(args);
this.win[func](params);
} else {
// The popup is closed so open it

39
lib/JingletoSDP.php

@ -5,8 +5,10 @@ class JingletoSDP {
private $jingle;
private $jid;
private $iceufrag;
private $icepwd;
private $iceufrag = false;
private $icepwd = false;
private $valid = false;
function __construct($jingle) {
$this->jingle = $jingle;
@ -37,12 +39,13 @@ class JingletoSDP {
$c .=
'a=candidate:'.$candidate->attributes()->component.
' '.$candidate->attributes()->foundation.
' '.$candidate->attributes()->protocol.
' '.strtoupper($candidate->attributes()->protocol).
' '.$candidate->attributes()->priority.
' '.$candidate->attributes()->ip.
' '.$candidate->attributes()->port.
' typ '.$candidate->attributes()->type;
' typ '.$candidate->attributes()->type.
' generation '.$candidate->attributes()->generation;
if($port == false)
$port = $candidate->attributes()->port;
@ -56,6 +59,8 @@ class JingletoSDP {
}
$c .= "\n";
$this->valid = true;
}
$this->sdp .=
@ -66,9 +71,17 @@ class JingletoSDP {
"\n".
'c=IN IP4 '.$ip."\n".
$p.
'a=setup:actpass'."\n".
$c.
'a=rtcp-mux'."\n";
//'a=setup:actpass'."\n".
$c;
//'a=rtcp-mux'."\n";
}
if($this->iceufrag && $this->icepwd) {
$ice =
'a=ice-ufrag:'.$this->iceufrag."\n".
'a=ice-pwd:'.$this->icepwd."\n";
} else {
$ice = '';
}
$this->sdp =
@ -76,11 +89,13 @@ class JingletoSDP {
'o=Mozilla-SIPUA-29.0a1 2019 0 IN IP4 0.0.0.0'."\n".
's=SIP Call'."\n".
't=0 0'."\n".
'a=ice-ufrag:'.$this->iceufrag."\n".
'a=ice-pwd:'.$this->icepwd."\n".
$ice.
'a=fingerprint:sha-256 D4:E6:DC:30:3F:63:0A:55:8D:65:F6:7C:F7:81:47:F8:3D:45:74:EE:74:61:CB:9A:F5:4F:60:79:F2:2D:D2:20'."\n".
$this->sdp;
return $this->sdp;
if($this->valid)
return $this->sdp;
else
return false;
}
}

15
lib/SDPtoJingle.php

@ -47,6 +47,12 @@ class SDPtoJingle {
$transport->addAttribute('xmlns', "urn:xmpp:jingle:transports:ice-udp:1");
$transport->addAttribute('pwd', $this->icepwd);
$transport->addAttribute('ufrag', $this->iceufrag);
$fingerprint = $transport->addChild('fingerprint', $this->icefingerprint);
$fingerprint->addAttribute('xmlns', "urn:xmpp:jingle:apps:dtls:0");
$fingerprint->addAttribute('hash', $this->icefingerprinthash);
$fingerprint->addAttribute('setup', 'actpass');
$m = true;
break;
case 'a':
@ -98,7 +104,14 @@ class SDPtoJingle {
case 'ice-ufrag':
$this->iceufrag = $expl[1];
break;
case 'fingerprint':
array_shift($expl);
$finger = implode(':', $expl);
list($hash, $value) = explode(' ', $finger);
$this->icefingerprint = $value;
$this->icefingerprinthash = $hash;
break;
}
}
break;

Loading…
Cancel
Save