/* * Copyright @ 2015 Atlassian Pty Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* jshint -W117 */ module.exports = function() { Strophe.addConnectionPlugin('rayo', { RAYO_XMLNS: 'urn:xmpp:rayo:1', connection: null, init: function (conn) { this.connection = conn; if (this.connection.disco) { this.connection.disco.addFeature('urn:xmpp:rayo:client:1'); } this.connection.addHandler( this.onRayo.bind(this), this.RAYO_XMLNS, 'iq', 'set', null, null); }, onRayo: function (iq) { console.info("Rayo IQ", iq); }, dial: function (to, from, roomName, roomPass) { var self = this; var req = $iq( { type: 'set', to: this.connection.emuc.focusMucJid } ); req.c('dial', { xmlns: this.RAYO_XMLNS, to: to, from: from }); req.c('header', { name: 'JvbRoomName', value: roomName }).up(); if (roomPass !== null && roomPass.length) { req.c('header', { name: 'JvbRoomPassword', value: roomPass }).up(); } this.connection.sendIQ( req, function (result) { console.info('Dial result ', result); var resource = $(result).find('ref').attr('uri'); this.call_resource = resource.substr('xmpp:'.length); console.info( "Received call resource: " + this.call_resource); }, function (error) { console.info('Dial error ', error); } ); }, hang_up: function () { if (!this.call_resource) { console.warn("No call in progress"); return; } var self = this; var req = $iq( { type: 'set', to: this.call_resource } ); req.c('hangup', { xmlns: this.RAYO_XMLNS }); this.connection.sendIQ( req, function (result) { console.info('Hangup result ', result); self.call_resource = null; }, function (error) { console.info('Hangup error ', error); self.call_resource = null; } ); } } ); };