diff --git a/Makefile.am b/Makefile.am
index 75cc95c30a..282f63642b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -224,7 +224,7 @@ library_include_HEADERS = \
src/include/switch_types.h \
src/include/switch_utils.h \
src/include/switch_rtp.h \
- src/include/switch_vidderbuffer.h \
+ src/include/switch_jitterbuffer.h \
src/include/switch_rtcp_frame.h \
src/include/switch_stun.h \
src/include/switch_nat.h \
@@ -234,7 +234,6 @@ library_include_HEADERS = \
src/include/switch_cpp.h \
src/include/switch_curl.h \
src/include/switch_json.h \
- src/include/switch_stfu.h \
src/include/switch_utf8.h \
src/include/switch_vpx.h \
libs/libteletone/src/libteletone_detect.h \
@@ -290,7 +289,7 @@ libfreeswitch_la_SOURCES = \
src/switch_resample.c \
src/switch_regex.c \
src/switch_rtp.c \
- src/switch_vidderbuffer.c \
+ src/switch_jitterbuffer.c \
src/switch_ivr_bridge.c \
src/switch_ivr_originate.c \
src/switch_ivr_async.c \
@@ -315,7 +314,6 @@ libfreeswitch_la_SOURCES = \
src/switch_json.c \
src/switch_curl.c \
src/switch_hashtable.c\
- src/switch_stfu.c \
src/switch_utf8.c \
libs/libtpl-1.5/src/tpl.c \
libs/libteletone/src/libteletone_detect.c \
diff --git a/conf/testing/autoload_configs/opus.conf.xml b/conf/testing/autoload_configs/opus.conf.xml
index 2ac3f66f86..022cc15912 100644
--- a/conf/testing/autoload_configs/opus.conf.xml
+++ b/conf/testing/autoload_configs/opus.conf.xml
@@ -1,7 +1,14 @@
+
+
+
+
+
+
+
+
+
diff --git a/conf/vanilla/autoload_configs/modules.conf.xml b/conf/vanilla/autoload_configs/modules.conf.xml
index d78669b66d..78c9a42e8f 100644
--- a/conf/vanilla/autoload_configs/modules.conf.xml
+++ b/conf/vanilla/autoload_configs/modules.conf.xml
@@ -91,7 +91,7 @@
-
+
diff --git a/conf/vanilla/autoload_configs/opus.conf.xml b/conf/vanilla/autoload_configs/opus.conf.xml
index 2ac3f66f86..98a6b7fd1d 100644
--- a/conf/vanilla/autoload_configs/opus.conf.xml
+++ b/conf/vanilla/autoload_configs/opus.conf.xml
@@ -1,8 +1,15 @@
+
-
+
+
+
+
+
+
+
+
+
diff --git a/configure.ac b/configure.ac
index f2b1357562..170da8f7a5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -559,13 +559,12 @@ AC_SUBST(SYS_XMLRPC_CFLAGS)
AC_SUBST(SYS_XMLRPC_LDFLAGS)
AM_CONDITIONAL([SYSTEM_XMLRPCC],[test "${enable_xmlrpcc}" = "yes"])
-PKG_CHECK_MODULES([LUA],[lua5.2],[have_lua=yes],[have_lua=no])
-if test "${have_lua}" = "no" ; then
- PKG_CHECK_MODULES([LUA],[lua5.1],[have_lua=yes],[have_lua=no])
-fi
-if test "${have_lua}" = "no" ; then
- PKG_CHECK_MODULES([LUA],[lua],[have_lua=yes],[have_lua=no])
-fi
+for luaversion in lua5.2 lua-5.2 lua5.1 lua-5.1 lua; do
+ PKG_CHECK_MODULES([LUA],[${luaversion}],[have_lua=yes],[have_lua=no])
+ if test ${have_lua} = yes; then
+ break
+ fi
+done
if test x"${LUA_LIBS}" = x"" ; then
LUA_LIBS="-llua"
fi
diff --git a/debian/bootstrap.sh b/debian/bootstrap.sh
index df94f3dffa..e514ab1a94 100755
--- a/debian/bootstrap.sh
+++ b/debian/bootstrap.sh
@@ -362,7 +362,8 @@ Description: Cross-Platform Scalable Multi-Protocol Soft Switch
Package: libfreeswitch1
Architecture: any
-Depends: \${shlibs:Depends}, \${misc:Depends}
+Depends: \${shlibs:Depends}, \${misc:Depends},
+ libyuv, libvpx (>= 1.4.0) | libvpx2
Recommends:
Suggests: libfreeswitch1-dbg
Description: Cross-Platform Scalable Multi-Protocol Soft Switch
@@ -370,7 +371,7 @@ Description: Cross-Platform Scalable Multi-Protocol Soft Switch
.
This package contains the FreeSWITCH core library.
-Package: python-esl
+Package: python-esl
Section: python
Architecture: any
Depends: \${shlibs:Depends}, \${misc:Depends}, \${python:Depends}
diff --git a/debian/control-modules b/debian/control-modules
index caf64760ce..c009c96ee0 100644
--- a/debian/control-modules
+++ b/debian/control-modules
@@ -113,6 +113,12 @@ Module: applications/mod_hash
Description: Hash
This module provides a hash API, a key-value in-memory datastore.
+Module: applications/mod_hiredis
+Description: Redis client support
+ This module provides a mechanism to use Redis as a datastore.
+Build-Depends: libhiredis-dev
+Depends: libhiredis0.10
+
Module: applications/mod_httapi
Description: HT-TAPI Hypertext Telephony API
This module provides an API for controlling the switch by responding
diff --git a/debian/copyright b/debian/copyright
index b94e3fe90c..b3e6c6692b 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -488,27 +488,27 @@ License: BSD-2-clause
* are met:
*
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
- * This work was supported in part by funding from the Defense Advanced
- * Research Projects Agency and the National Science Foundation of the
+ * This work was supported in part by funding from the Defense Advanced
+ * Research Projects Agency and the National Science Foundation of the
* United States of America, and the CMU Sphinx Speech Consortium.
*
- * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND
- * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND
+ * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
* NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* ====================================================================
@@ -1515,24 +1515,24 @@ License: BSD-3-clause
Files: libs/libsndfile/src/GSM610/*
Copyright: 1992, 1993, 1994 by Jutta Degener and Carsten Bormann
License:
- Their work was released under the following license which is
+ Their work was released under the following license which is
assumed to be compatible with The GNU Lesser General Public License.
-
+ .
----------------------------------------------------------------------------
-
+ .
Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann,
Technische Universitaet Berlin
-
+ .
Any use of this software is permitted provided that this notice is not
removed and that neither the authors nor the Technische Universitaet Berlin
are deemed to have made any representations as to the suitability of this
software for any purpose nor are held responsible for any defects of
this software. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
-
+ .
As a matter of courtesy, the authors request to be informed about uses
this software has found, about bugs in this software, and about any
improvements that may be of general interest.
-
+ .
Berlin, 28.11.1994
Jutta Degener (jutta@cs.tu-berlin.de)
Carsten Bormann (cabo@cs.tu-berlin.de)
@@ -1863,7 +1863,7 @@ Copyright: 2004 Polycom, Inc
2006 Michael Jerris
2001-2009 Steve Underwood
2001-2006 Steve Underwood
-Comment: Disclaimer: non-comercial use,gital Equipment Corporation, Maynard, Massachusetts.
+Comment: Disclaimer: non-comercial use,gital Equipment Corporation, Maynard, Massachusetts.
License: patent-mess
Files: libs/libg722_1/autogen.sh
@@ -1878,24 +1878,24 @@ License: LGPL-2.1
License: OpenLDAP
/* Portions Copyright 1998-2002 The OpenLDAP Foundation
* All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the OpenLDAP
* Public License. A copy of this license is available at
* http://www.OpenLDAP.org/license.html or in file LICENSE in the
* top-level directory of the distribution.
- *
+ *
* OpenLDAP is a registered trademark of the OpenLDAP Foundation.
- *
+ *
* Individual files and/or contributed packages may be copyright by
* other parties and subject to additional restrictions.
- *
+ *
* This work is derived from the University of Michigan LDAP v3.3
* distribution. Information concerning this software is available
* at: http://www.umich.edu/~dirsvcs/ldap/
- *
+ *
* This work also contains materials derived from public sources.
- *
+ *
* Additional information about OpenLDAP can be obtained at:
* http://www.openldap.org/
*/
diff --git a/debian/freeswitch-mod-python.install.tmpl b/debian/freeswitch-mod-python.install.tmpl
new file mode 100644
index 0000000000..7f855822a1
--- /dev/null
+++ b/debian/freeswitch-mod-python.install.tmpl
@@ -0,0 +1 @@
+/usr/lib/python*/*-packages/freeswitch.py
diff --git a/debian/freeswitch-systemd.freeswitch.conf b/debian/freeswitch-systemd.freeswitch.conf
deleted file mode 100644
index 77dfd6908c..0000000000
--- a/debian/freeswitch-systemd.freeswitch.conf
+++ /dev/null
@@ -1 +0,0 @@
-d /run/freeswitch 0755 freeswitch freeswitch -
diff --git a/debian/freeswitch-systemd.freeswitch.service b/debian/freeswitch-systemd.freeswitch.service
index c7cf65e4d7..5a46d8731c 100644
--- a/debian/freeswitch-systemd.freeswitch.service
+++ b/debian/freeswitch-systemd.freeswitch.service
@@ -8,14 +8,12 @@ After=syslog.target network.target local-fs.target
; service
Type=forking
PIDFile=/run/freeswitch/freeswitch.pid
-PermissionsStartOnly=true
-ExecStartPre=/bin/mkdir -p /run/freeswitch
-ExecStartPre=/bin/chown freeswitch:freeswitch /run/freeswitch
ExecStart=/usr/bin/freeswitch -ncwait -nonat
TimeoutSec=45s
Restart=always
; exec
-WorkingDirectory=/var/log/freeswitch
+RuntimeDirectory=freeswitch
+RuntimeDirectoryMode=0755
User=freeswitch
Group=freeswitch
LimitCORE=infinity
diff --git a/debian/freeswitch-systemd.install b/debian/freeswitch-systemd.install
index 7a72d039e7..d647282ecd 100644
--- a/debian/freeswitch-systemd.install
+++ b/debian/freeswitch-systemd.install
@@ -1,3 +1 @@
/lib/systemd/system/freeswitch.service
-/usr/lib/tmpfiles.d/freeswitch.conf
-
diff --git a/debian/freeswitch.postinst b/debian/freeswitch.postinst
index 934101febc..b19277fe8b 100644
--- a/debian/freeswitch.postinst
+++ b/debian/freeswitch.postinst
@@ -30,9 +30,9 @@ case "$1" in
chown freeswitch $x
done
if [ ! -d "/etc/freeswitch" ]; then
- mkdir -p /etc/freeswitch/tls/
- cp -a /usr/share/freeswitch/conf/vanilla/* /etc/freeswitch/
-
+ mkdir -p /etc/freeswitch/tls/
+ chown freeswitch:freeswitch /etc/freeswitch/tls
+ cp -a /usr/share/freeswitch/conf/vanilla/* /etc/freeswitch/
fi
;;
abort-upgrade|abort-remove|abort-deconfigure)
diff --git a/debian/rules b/debian/rules
index 46f1f9a221..b2e43d68d0 100755
--- a/debian/rules
+++ b/debian/rules
@@ -100,10 +100,6 @@ override_dh_auto_install:
dh_auto_install -- -C libs/esl pymod-install
mkdir -p debian/tmp/lib/systemd/system
install -m0644 debian/freeswitch-systemd.freeswitch.service debian/tmp/lib/systemd/system/freeswitch.service
-
- mkdir -p debian/tmp/usr/lib/tmpfiles.d
- install -m0644 debian/freeswitch-systemd.freeswitch.conf debian/tmp/usr/lib/tmpfiles.d/freeswitch.conf
-
rm -f debian/tmp/usr/share/freeswitch/grammar/model/communicator/COPYING
override_dh_installinit:
diff --git a/debian/util.sh b/debian/util.sh
index 0200409300..be2a7bb004 100755
--- a/debian/util.sh
+++ b/debian/util.sh
@@ -468,7 +468,7 @@ commands:
-j Build debs in parallel
-k Don't override pbuilder image configurations
-K [/path/to/keyring.asc]
- Use custom keyring file for sources.list in build environment
+ Use custom keyring file for sources.list in build environment
in the format of: apt-key exportall > /path/to/file.asc
-l
-m [ quicktest | non-dfsg ]
@@ -497,7 +497,7 @@ commands:
-d Enable cowbuilder debug hook
-k Don't override pbuilder image configurations
-K [/path/to/keyring.asc]
- Use custom keyring file for sources.list in build environment
+ Use custom keyring file for sources.list in build environment
in the format of: apt-key exportall > /path/to/file.asc
-t Use system /etc/apt/sources.list in build environment
-T [/path/to/sources.list]
diff --git a/docs/Doxygen.conf b/docs/Doxygen.conf
index 41920106dc..08b3a978ff 100644
--- a/docs/Doxygen.conf
+++ b/docs/Doxygen.conf
@@ -1279,9 +1279,6 @@ PREDEFINED =SWITCH_DECLARE(type)=type \
SPAN_DECLARE(type)=type \
SPAN_DECLARE_NONSTD(type)=type \
SPAN_DECLARE_DATA= \
- STFU_DECLARE(type)=type \
- STFU_DECLARE_NONSTD(type)=type \
- STFU_DECLARE_DATA= \
FT_DECLARE(type)=type \
FT_DECLARE_NONSTD(type)=type \
FT_DECLARE_INLINE(type)=type \
diff --git a/html5/verto/demo/js/verto-min.js b/html5/verto/demo/js/verto-min.js
index 4ad744cd44..2ea234eb45 100644
--- a/html5/verto/demo/js/verto-min.js
+++ b/html5/verto/demo/js/verto-min.js
@@ -1,5 +1,5 @@
-var iceTimerSent=0;var iceTimerCompleted=0;var iceTimer;(function($){function findLine(sdpLines,prefix,substr){return findLineInRange(sdpLines,0,-1,prefix,substr);}
+(function($){function findLine(sdpLines,prefix,substr){return findLineInRange(sdpLines,0,-1,prefix,substr);}
function findLineInRange(sdpLines,startLine,endLine,prefix,substr){var realEndLine=(endLine!=-1)?endLine:sdpLines.length;for(var i=startLine;iw&&$.FSRTC.validRes[i][1]>h){w=$.FSRTC.validRes[i][0];h=$.FSRTC.validRes[i][1];}}
return[w,h];}
-var resList=[[320,180],[320,240],[640,360],[640,480],[1280,720],[1920,1080]];var resI=0;var ttl=0;var checkRes=function(cam,func){if(resI>=resList.length){if(func)return func();return;}
+var resList=[[320,180],[320,240],[640,360],[640,480],[1280,720],[1920,1080]];var resI=0;var ttl=0;var checkRes=function(cam,func){if(resI>=resList.length){var res={'validRes':$.FSRTC.validRes,'bestResSupported':$.FSRTC.bestResSupported()};localStorage.setItem("res_"+cam,$.toJSON(res));if(func)return func(res);return;}
var video={mandatory:{},optional:[]}
if(cam){video.optional=[{sourceId:cam}];}
w=resList[resI][0];h=resList[resI][1];resI++;video.mandatory={"minWidth":w,"minHeight":h,"maxWidth":w,"maxHeight":h};if(window.moz){video=video.mandatory;if(!video.width)video.width=video.minWidth;if(!video.height)video.height=video.minHeight;if(!video.frameRate)video.frameRate=video.minFrameRate;}
getUserMedia({constraints:{audio:ttl++==0,video:video},onsuccess:function(e){e.stop();console.info(w+"x"+h+" supported.");$.FSRTC.validRes.push([w,h]);checkRes(cam,func);},onerror:function(e){console.error(w+"x"+h+" not supported.");checkRes(cam,func);}});}
-$.FSRTC.getValidRes=function(cam,func){var used=[];$.FSRTC.validRes=[];resI=0;checkRes(cam,func);}
-$.FSRTC.checkPerms=function(){getUserMedia({constraints:{audio:true,video:true,},onsuccess:function(e){e.stop();console.info("media perm init complete");},onerror:function(e){console.error("media perm init error");}});}})(jQuery);(function($){$.JsonRpcClient=function(options){var self=this;this.options=$.extend({ajaxUrl:null,socketUrl:null,onmessage:null,login:null,passwd:null,sessid:null,loginParams:null,userVariables:null,getSocket:function(onmessage_cb){return self._getSocket(onmessage_cb);}},options);self.ws_cnt=0;this.wsOnMessage=function(event){self._wsOnMessage(event);};};$.JsonRpcClient.prototype._ws_socket=null;$.JsonRpcClient.prototype._ws_callbacks={};$.JsonRpcClient.prototype._current_id=1;$.JsonRpcClient.prototype.call=function(method,params,success_cb,error_cb){if(!params){params={};}
+$.FSRTC.getValidRes=function(cam,func){var used=[];var cached=localStorage.getItem("res_"+cam);if(cached){var cache=$.parseJSON(cached);if(cache){$.FSRTC.validRes=cache.validRes;console.log("CACHED RES FOR CAM "+cam,cache);}else{console.error("INVALID CACHE");}
+return func?func(cache):null;}
+$.FSRTC.validRes=[];resI=0;checkRes(cam,func);}
+$.FSRTC.checkPerms=function(runtime,check_audio,check_video){getUserMedia({constraints:{audio:check_audio,video:check_video,},onsuccess:function(e){e.stop();console.info("media perm init complete");if(runtime){setTimeout(runtime,100,true)}},onerror:function(e){if(check_video&&check_audio){console.error("error, retesting with audio params only");return $.FSRTC.checkPerms(runtime,check_audio,false);}
+console.error("media perm init error");if(runtime){runtime(false)}}});}})(jQuery);(function($){$.JsonRpcClient=function(options){var self=this;this.options=$.extend({ajaxUrl:null,socketUrl:null,onmessage:null,login:null,passwd:null,sessid:null,loginParams:null,userVariables:null,getSocket:function(onmessage_cb){return self._getSocket(onmessage_cb);}},options);self.ws_cnt=0;this.wsOnMessage=function(event){self._wsOnMessage(event);};};$.JsonRpcClient.prototype._ws_socket=null;$.JsonRpcClient.prototype._ws_callbacks={};$.JsonRpcClient.prototype._current_id=1;$.JsonRpcClient.prototype.call=function(method,params,success_cb,error_cb){if(!params){params={};}
if(this.options.sessid){params.sessid=this.options.sessid;}
var request={jsonrpc:'2.0',method:method,params:params,id:this._current_id++};if(!success_cb){success_cb=function(e){console.log("Success: ",e);};}
if(!error_cb){error_cb=function(e){console.log("Error: ",e);};}
@@ -118,10 +125,14 @@ for(i=0;i-1){dt.fnClearTable();dt.fnAddData(obj.asArray());}else{dt.fnAddData(args.data);}
dt.fnAdjustColumnSizing();break;case"modify":if(!args.data){return;}
dt.fnUpdate(args.data,index);dt.fnAdjustColumnSizing();break;case"del":dt.fnDeleteRow(index);dt.fnAdjustColumnSizing();break;case"clear":dt.fnClearTable();break;case"reorder":dt.fnClearTable();dt.fnAddData(obj.asArray());break;case"hide":jq.hide();break;case"show":jq.show();break;}}catch(err){console.error("ERROR: "+err);iserr++;}
-if(iserr){obj.errs++;if(obj.errs<3){obj.bootstrap(obj.user_obj);}}else{obj.errs=0;}};la.onChange(la,{action:"init"});};var CONFMAN_SERNO=1;$.verto.modfuncs={};$.verto.confMan=function(verto,params){var confMan=this;confMan.params=$.extend({tableID:null,statusID:null,mainModID:null,dialog:null,hasVid:false,laData:null,onBroadcast:null,onLaChange:null,onLaRow:null},params);confMan.verto=verto;confMan.serno=CONFMAN_SERNO++;confMan.canvasCount=confMan.params.laData.canvasCount;function genMainMod(jq){var play_id="play_"+confMan.serno;var stop_id="stop_"+confMan.serno;var recording_id="recording_"+confMan.serno;var snapshot_id="snapshot_"+confMan.serno;var rec_stop_id="recording_stop"+confMan.serno;var div_id="confman_"+confMan.serno;var html="
"+""+""+""+""+
+if(iserr){obj.errs++;if(obj.errs<3){obj.bootstrap(obj.user_obj);}}else{obj.errs=0;}};la.onChange(la,{action:"init"});};var CONFMAN_SERNO=1;$.verto.conf=function(verto,params){var conf=this;conf.params=$.extend({dialog:null,hasVid:false,laData:null,onBroadcast:null,onLaChange:null,onLaRow:null},params);conf.verto=verto;conf.serno=CONFMAN_SERNO++;createMainModeratorMethods();verto.subscribe(conf.params.laData.modChannel,{handler:function(v,e){if(conf.params.onBroadcast){conf.params.onBroadcast(verto,conf,e.data);}}});verto.subscribe(conf.params.laData.chatChannel,{handler:function(v,e){if(typeof(conf.params.chatCallback)==="function"){conf.params.chatCallback(v,e);}}});};$.verto.conf.prototype.modCommand=function(cmd,id,value){var conf=this;conf.verto.rpcClient.call("verto.broadcast",{"eventChannel":conf.params.laData.modChannel,"data":{"application":"conf-control","command":cmd,"id":id,"value":value}});};$.verto.conf.prototype.destroy=function(){var conf=this;conf.destroyed=true;conf.params.onBroadcast(conf.verto,conf,'destroy');if(conf.params.laData.modChannel){conf.verto.unsubscribe(conf.params.laData.modChannel);}
+if(conf.params.laData.chatChannel){conf.verto.unsubscribe(conf.params.laData.chatChannel);}};function createMainModeratorMethods(){$.verto.conf.prototype.listVideoLayouts=function(){this.modCommand("list-videoLayouts",null,null);};$.verto.conf.prototype.play=function(file){this.modCommand("play",null,file);};$.verto.conf.prototype.stop=function(){this.modCommand("stop",null,"all");};$.verto.conf.prototype.record=function(file){this.modCommand("recording",null,["start",file]);};$.verto.conf.prototype.stopRecord=function(){this.modCommand("recording",null,["stop","all"]);};$.verto.conf.prototype.snapshot=function(file){if(!this.params.hasVid){throw'Conference has no video';}
+this.modCommand("vid-write-png",null,file);};$.verto.conf.prototype.setVideoLayout=function(layout){if(!this.params.hasVid){throw'Conference has no video';}
+this.modCommand("vid-layout",null,layout);};$.verto.conf.prototype.kick=function(memberID){this.modCommand("kick",parseInt(memberID));};$.verto.conf.prototype.muteMic=function(memberID){this.modCommand("tmute",parseInt(memberID));};$.verto.conf.prototype.muteVideo=function(memberID){if(!this.params.hasVid){throw'Conference has no video';}
+this.modCommand("tvmute",parseInt(memberID));};$.verto.conf.prototype.presenter=function(memberID){if(!this.params.hasVid){throw'Conference has no video';}
+this.modCommand("vid-res-id",parseInt(memberID),"presenter");};$.verto.conf.prototype.videoFloor=function(memberID){if(!this.params.hasVid){throw'Conference has no video';}
+this.modCommand("vid-floor",parseInt(memberID),"force");};$.verto.conf.prototype.banner=function(memberID,text){if(!this.params.hasVid){throw'Conference has no video';}
+this.modCommand("vid-banner",parseInt(memberID),escape(text));};$.verto.conf.prototype.volumeDown=function(memberID){if(!this.params.hasVid){throw'Conference has no video';}
+this.modCommand("volume_in",parseInt(memberID),"down");};$.verto.conf.prototype.volumeUp=function(memberID){if(!this.params.hasVid){throw'Conference has no video';}
+this.modCommand("volume_in",parseInt(memberID),"up");};$.verto.conf.prototype.transfer=function(memberID,exten){if(!this.params.hasVid){throw'Conference has no video';}
+this.modCommand("transfer",parseInt(memberID),exten);};$.verto.conf.prototype.sendChat=function(message,type){var conf=this;conf.verto.rpcClient.call("verto.broadcast",{"eventChannel":conf.params.laData.chatChannel,"data":{"action":"send","message":message,"type":type}});};}
+$.verto.modfuncs={};$.verto.confMan=function(verto,params){var confMan=this;confMan.params=$.extend({tableID:null,statusID:null,mainModID:null,dialog:null,hasVid:false,laData:null,onBroadcast:null,onLaChange:null,onLaRow:null},params);confMan.verto=verto;confMan.serno=CONFMAN_SERNO++;confMan.canvasCount=confMan.params.laData.canvasCount;function genMainMod(jq){var play_id="play_"+confMan.serno;var stop_id="stop_"+confMan.serno;var recording_id="recording_"+confMan.serno;var snapshot_id="snapshot_"+confMan.serno;var rec_stop_id="recording_stop"+confMan.serno;var div_id="confman_"+confMan.serno;var html="