Merge branch 'master' of github.com:bigbluebutton/bigbluebutton

This commit is contained in:
Sebastian 2010-07-05 11:03:07 -04:00
commit 72be813349
32 changed files with 452 additions and 650 deletions

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View File

@ -1,2 +1,5 @@
.classpath
.project
.settings
bin
build

View File

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>bbb-common-messaging</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View File

@ -1,12 +0,0 @@
#Thu Feb 25 09:24:46 EST 2010
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.6

View File

@ -1,4 +1 @@
- common code between bbb-apps and bbb-web
test
see http://code.google.com/p/bigbluebutton/wiki/DevelopingBBB

View File

@ -1,42 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/main/java"/>
<classpathentry excluding="org/bigbluebutton/webconference/voice/asterisk/" kind="src" path="src/main/groovy"/>
<classpathentry kind="src" path="test/commandline/src"/>
<classpathentry excluding="src/" kind="src" path="test/commandline"/>
<classpathentry kind="src" path="src/main/scala"/>
<classpathentry kind="lib" path="lib/bbb-common-message-0.64.jar"/>
<classpathentry kind="lib" path="lib/geronimo-j2ee-management_1.0_spec-1.0.jar"/>
<classpathentry kind="lib" path="lib/servlet-api-2.5.jar"/>
<classpathentry exported="true" kind="con" path="GROOVY_SUPPORT"/>
<classpathentry kind="lib" path="lib/jcip-annotations-1.0.jar"/>
<classpathentry kind="lib" path="lib/jyaml-1.3.jar"/>
<classpathentry kind="lib" path="lib/spring-tx-2.5.6.jar"/>
<classpathentry kind="lib" path="lib/activemq-core-5.1.0.jar"/>
<classpathentry kind="lib" path="lib/geronimo-jms_1.1_spec-1.0.jar"/>
<classpathentry kind="lib" path="lib/groovy-all-1.6.4.jar"/>
<classpathentry kind="lib" path="lib/asterisk-java-1.0.0.M3.jar"/>
<classpathentry kind="lib" path="lib/mina-integration-spring-1.1.7.jar"/>
<classpathentry kind="lib" path="lib/red5-0.91.jar"/>
<classpathentry kind="lib" path="lib/aopalliance-1.0.jar"/>
<classpathentry kind="lib" path="lib/log4j-over-slf4j-1.5.10.jar"/>
<classpathentry kind="lib" path="lib/logback-classic-0.9.18.jar"/>
<classpathentry kind="lib" path="lib/logback-core-0.9.18.jar"/>
<classpathentry kind="lib" path="lib/mina-core-2.0.0-RC1.jar"/>
<classpathentry kind="lib" path="lib/slf4j-api-1.5.10.jar"/>
<classpathentry kind="lib" path="lib/spring-aop-3.0.0.jar"/>
<classpathentry kind="lib" path="lib/spring-beans-3.0.0.jar"/>
<classpathentry kind="lib" path="lib/spring-context-3.0.0.jar"/>
<classpathentry kind="lib" path="lib/spring-core-3.0.0.jar"/>
<classpathentry kind="lib" path="lib/spring-jms-3.0.0.jar"/>
<classpathentry kind="lib" path="lib/spring-web-3.0.0.jar"/>
<classpathentry kind="lib" path="lib/spring-integration-adapter-2.0.0.M2.jar"/>
<classpathentry kind="lib" path="lib/spring-integration-core-2.0.0.M2.jar"/>
<classpathentry kind="lib" path="lib/spring-integration-file-2.0.0.M2.jar"/>
<classpathentry kind="lib" path="lib/spring-integration-jms-2.0.0.M2.jar"/>
<classpathentry kind="lib" path="lib/spring-integration-stream-2.0.0.M2.jar"/>
<classpathentry kind="con" path="ch.epfl.lamp.sdt.launching.SCALA_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry combineaccessrules="false" kind="src" path="/bbb-common-message"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View File

@ -1,3 +1,6 @@
.classpath
.project
.settings
build
lib
.scala_dependencies

View File

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>w-bbb-apps</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>ch.epfl.lamp.sdt.core.scalabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>ch.epfl.lamp.sdt.core.scalanature</nature>
<nature>org.eclipse.jdt.groovy.core.groovyNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View File

@ -1,4 +0,0 @@
#Mon Nov 30 11:36:41 EST 2009
eclipse.preferences.version=1
groovy.compiler.output.path=bin-groovy
support.groovy=true

View File

@ -1,13 +0,0 @@
#Mon Nov 30 10:59:11 EST 2009
eclipse.preferences.version=1
org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,*.groovy
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.6

View File

@ -1,165 +0,0 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.

View File

@ -0,0 +1 @@
- see http://code.google.com/p/bigbluebutton/wiki/DevelopingBBB

View File

@ -43,3 +43,4 @@
</modules>
<buildCSSFiles/>
</actionScriptProperties>

View File

@ -1,2 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<flexProperties enableServiceManager="false" flexServerFeatures="0" flexServerType="0" toolCompile="true" useServerFlexSDK="false" version="1"/>

81
bigbluebutton-client/build.xml Executable file → Normal file
View File

@ -2,10 +2,12 @@
<!-- BigBlueButton Client build.xml for use by Hudson builds. -->
<project name="BigBlueButton Client" basedir="." default="clean-build-all" >
<property environment="env" />
<property name="BUILD_ENV" value="DEV" />
<property name="FLEX_HOME" value="${env.FLEX_HOME}" />
<property name="LOCALE_DIR" value="${FLEX_HOME}/frameworks/locale"/>
<property name="BASE_DIR" value="${basedir}" />
<property name="RESOURCES_DIR" value="${BASE_DIR}/resources" />
<property name="PROD_RESOURCES_DIR" value="${RESOURCES_DIR}/prod" />
<property name="SRC_DIR" value="${BASE_DIR}/src" />
<property name="OUTPUT_DIR" value="${BASE_DIR}/bin" />
@ -125,14 +127,20 @@
<build-module src="${SRC_DIR}" target="${PRESENT}" />
</target>
<target name="build-deskshare-standalone" depends="build-deskshare" description="Compile Deskshare Standalone Module">
<build-module src="${SRC_DIR}" target="${DESKSHARE_SA}" />
<target name="build-deskshare-standalone" depends="build-deskshare-no-linker" description="Compile Deskshare Standalone Module">
<echo message="Compiling deskshare standalone without optimization." />
<build-module-no-link src="${SRC_DIR}" target="${DESKSHARE_SA}" />
</target>
<target name="build-deskshare-no-linker" description="Compile Deskshare Module without the linker">
<echo message="Compiling deskshare without optimization." />
<build-module-no-link src="${SRC_DIR}" target="${DESKSHARE}" />
</target>
<target name="build-deskshare" description="Compile Deskshare Module">
<build-module src="${SRC_DIR}" target="${DESKSHARE}" />
<echo message="Copying deskshare applet for Deskshare Module" />
<copy file="${RESOURCES_DIR}/bbb-deskshare-applet-0.64.jar" todir="${OUTPUT_DIR}"/>
<copy file="${PROD_RESOURCES_DIR}/bbb-deskshare-applet-0.64.jar" todir="${OUTPUT_DIR}"/>
</target>
<target name="build-phone" description="Compile Phone Module">
@ -164,7 +172,7 @@
<!-- just a grouping of modules to compile -->
<target name="build-deskshare-phone-video-highlighter-dyn"
depends="build-deskshare-standalone, build-phone, build-video, build-highlighter, build-dyn"
depends="build-deskshare, build-phone, build-video, build-highlighter, build-dyn"
description="Compile deskshare, phone, video, highlighter, dynamic info modules">
</target>
@ -192,6 +200,30 @@
</sequential>
</macrodef>
<macrodef name="build-module-no-link">
<attribute name="target" description="Module to compile" />
<attribute name="flex" default="${FLEX_HOME}" description="Location of the Flex install." />
<attribute name="app" default="."/>
<attribute name="src" default="${SRC_DIR}" description="Path to the module to compile" />
<sequential>
<mxmlc file="@{src}/@{target}.mxml" output="${OUTPUT_DIR}/@{target}.swf" debug="false">
<load-config filename="@{flex}/frameworks/flex-config.xml" />
<source-path path-element="@{flex}/frameworks" />
<compiler.library-path dir="@{flex}/frameworks" append="true">
<include name="libs" />
<include name="../bundles/{locale}" />
</compiler.library-path>
<compiler.library-path dir="@{app}" append="true">
<include name="libs" />
<include name="libs/generated" />
</compiler.library-path>
<default-size width="500" height="600" />
</mxmlc>
</sequential>
</macrodef>
<macrodef name="build-module">
<attribute name="target" description="Module to compile" />
<attribute name="flex" default="${FLEX_HOME}" description="Location of the Flex install." />
@ -215,24 +247,36 @@
</mxmlc>
</sequential>
</macrodef>
<target name="compile-deskshare-standalone" depends="build-deskshare-standalone"
description="Compiling standalone desktop sharing">
<echo message="Deskshare standalone built without optimization." />
</target>
<target name="compile-bbb"
depends="build-main-chat-viewers-listeners-present, build-deskshare-phone-video-highlighter-dyn, copy-resource-files"
<target name="compile-bbb" depends="build-main-chat-viewers-listeners-present, build-deskshare-phone-video-highlighter-dyn, copy-resource-files"
description="Compiling the BBB without copying config.xml">
</target>
<target name="copy-resource-files">
<copy todir="${OUTPUT_DIR}/conf" >
<fileset dir="${BASE_DIR}/src/conf" />
</copy>
<copy todir="${OUTPUT_DIR}/swfobject/" >
<fileset dir="${BASE_DIR}/src/swfobject/" />
</copy>
<copy file="${RESOURCES_DIR}/BigBlueButton.html" todir="${OUTPUT_DIR}" overwrite="true"/>
<copy file="${RESOURCES_DIR}/DeskshareStandalone.html" todir="${OUTPUT_DIR}" overwrite="true"/>
<copy file="${RESOURCES_DIR}/bbb.gif" todir="${OUTPUT_DIR}" overwrite="true"/>
<copy file="${PROD_RESOURCES_DIR}/BigBlueButton.html" todir="${OUTPUT_DIR}" overwrite="true"/>
<copy file="${PROD_RESOURCES_DIR}/DeskshareStandalone.html" todir="${OUTPUT_DIR}" overwrite="true"/>
<copy file="${PROD_RESOURCES_DIR}/bbb.gif" todir="${OUTPUT_DIR}" overwrite="true"/>
<copy file="${PROD_RESOURCES_DIR}/locales.xml" todir="${OUTPUT_DIR}/conf" overwrite="true"/>
<copy file="${PROD_RESOURCES_DIR}/example-info-data.xml" todir="${OUTPUT_DIR}/conf" overwrite="true"/>
<if>
<equals arg1="${BUILD_ENV}" arg2="DEV"/>
<then>
<echo message="Copying config.xml for development environment"/>
<copy file="${BASE_DIR}/src/conf/config.xml" todir="${OUTPUT_DIR}/conf" overwrite="true"/>
</then>
<else>
<echo message="Need to copy config.xml.template for production environment"/>
<copy file="${RESOURCES_DIR}/config.xml.template" todir="${OUTPUT_DIR}/conf" overwrite="true"/>
</else>
</if>
</target>
<target name="check-config-xml">
@ -267,9 +311,12 @@
<mkdir dir="${OUTPUT_DIR}"/>
</target>
<target name="clean-build-bbb" depends="clean, generate-html-wrapper, compile-bbb" description="Build BBB client skipping compiling of locales"/>
<target name="clean-build-all" depends="clean, generate-html-wrapper, localization, compile-bbb" description="Build BBB client including locales"/>
<!-- NOTE: compile-deskshare-standalone MUST come first before compile-bbb as we need the deskshare-standalone
to be compiled withouth being optimized by using the linker -->
<target name="clean-build-bbb" depends="clean, generate-html-wrapper, compile-deskshare-standalone, compile-bbb"
description="Build BBB client skipping compiling of locales"/>
<target name="clean-build-all" depends="clean, generate-html-wrapper, localization, compile-deskshare-standalone, compile-bbb"
description="Build BBB client including locales"/>
<target name="cleanandmake" depends="clean-build-all" description="Build BBB client including locales"/>
</project>

View File

@ -1,26 +1,26 @@
<?xml version="1.0" ?>
<config>
<localeversion>0.7</localeversion>
<localeversion>0.7</localeversion>
<version>VERSION</version>
<help url="http://HOST/help.html"/>
<porttest host="HOST" application="video"/>
<modules>
<module name="ChatModule" url="ChatModule-VERSION.swf"
<module name="ChatModule" url="ChatModule.swf?v=VERSION"
uri="rtmp://HOST/bigbluebutton"
loadNextModule="ListenersModule"
onUserJoinedEvent="START"
onUserLogoutEvent="STOP"
/>
<module name="ViewersModule" url="ViewersModule-VERSION.swf"
<module name="ViewersModule" url="ViewersModule.swf?v=VERSION"
uri="rtmp://HOST/bigbluebutton"
host="http://HOST/bigbluebutton/conference-session/enter"
onAppInitEvent="LOAD" loadNextModule="ChatModule"
onAppStartEvent="START"
onUserLogoutEvent="STOP"
/>
<module name="ListenersModule" url="ListenersModule-VERSION.swf"
<module name="ListenersModule" url="ListenersModule.swf?v=VERSION"
uri="rtmp://HOST/bigbluebutton"
recordingHost="http://HOST"
loadNextModule="DeskShareModule"
@ -28,30 +28,30 @@
onUserLogoutEvent="STOP"
/>
<module name="DeskShareModule" url="DeskShareModule-VERSION.swf" uri="rtmp://HOST/deskShare" onUserJoinedEvent="START" onUserLogoutEvent="STOP" loadNextModule="PhoneModule" />
<module name="DeskShareModule" url="DeskShareModule.swf?v=VERSION" uri="rtmp://HOST/deskShare" onUserJoinedEvent="START" onUserLogoutEvent="STOP" loadNextModule="PhoneModule" />
<module name="PhoneModule" url="PhoneModule-VERSION.swf"
<module name="PhoneModule" url="PhoneModule.swf?v=VERSION"
uri="rtmp://HOST/sip"
onUserJoinedEvent="START"
onUserLogoutEvent="STOP"
loadNextModule="VideoconfModule"
/>
<module name="VideoconfModule" url="VideoconfModule-VERSION.swf"
<module name="VideoconfModule" url="VideoconfModule.swf?v=VERSION"
uri="rtmp://HOST/video"
onUserJoinedEvent="START"
onUserLogoutEvent="STOP"
loadNextModule="HighlighterModule"
/>
<module name="HighlighterModule" url="HighlighterModule-VERSION.swf"
<module name="HighlighterModule" url="HighlighterModule.swf?v=VERSION"
uri="rtmp://HOST/bigbluebutton"
onUserJoinedEvent="START"
onUserLogoutEvent="STOP"
loadNextModule="PresentModule"
/>
<module name="PresentModule" url="PresentModule-VERSION.swf"
<module name="PresentModule" url="PresentModule.swf?v=VERSION"
uri="rtmp://HOST/bigbluebutton"
host="http://HOST"
onUserJoinedEvent="START"
@ -59,7 +59,7 @@
/>
<!-- new module in development:
<module name="DynamicInfoModule" url="DynamicInfoModule-VERSION.swf"
<module name="DynamicInfoModule" url="DynamicInfoModule.swf?v=VERSION"
uri="rtmp://HOST/bigbluebutton"
host="http://HOST"
infoURL="http://HOST/client/conf/example-info-data.xml?user={userID}&role={role}&meetingID={meetingID}"

View File

@ -66,7 +66,7 @@ if ( hasProductInstall && !hasRequestedVersion ) {
// see. http://stackoverflow.com/questions/313966/mousewheel-not-working-when-published-movie-has-wmodetransparent
// ralam (mar 31, 2010)
AC_FL_RunContent(
"src", "BigBlueButton-VERSION",
"src", "BigBlueButton.swf?v=VERSION",
"width", "100%",
"height", "100%",
"align", "middle",
@ -182,12 +182,12 @@ function getLanguage(){
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
id="BigBlueButton" width="100%" height="100%"
codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
<param name="movie" value="BigBlueButton-VERSION.swf" />
<param name="movie" value="BigBlueButton.swf?v=VERSION" />
<param name="quality" value="high" />
<param name="bgcolor" value="#869ca7" />
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="true" />
<embed src="BigBlueButton-VERSION.swf" quality="high" bgcolor="#869ca7"
<embed src="BigBlueButton.swf?v=VERSION" quality="high" bgcolor="#869ca7"
width="100%" height="100%" name="BigBlueButton" align="middle"
play="true"
loop="false"

View File

@ -66,7 +66,7 @@ if ( hasProductInstall && !hasRequestedVersion ) {
// see. http://stackoverflow.com/questions/313966/mousewheel-not-working-when-published-movie-has-wmodetransparent
// ralam (mar 31, 2010)
AC_FL_RunContent(
"src", "DeskshareStandalone-VERSION",
"src", "DeskshareStandalone.swf?v=VERSION",
"width", "100%",
"height", "100%",
"align", "middle",
@ -182,12 +182,12 @@ function getLanguage(){
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
id="DeskshareStandalone" width="100%" height="100%"
codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
<param name="movie" value="DeskshareStandalone-VERSION.swf" />
<param name="movie" value="DeskshareStandalone.swf?v=VERSION" />
<param name="quality" value="high" />
<param name="bgcolor" value="#869ca7" />
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="true" />
<embed src="DeskshareStandalone-VERSION.swf" quality="high" bgcolor="#869ca7"
<embed src="DeskshareStandalone.swf?v=VERSION" quality="high" bgcolor="#869ca7"
width="100%" height="100%" name="DeskshareStandalone" align="middle"
play="true"
loop="false"

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -1,21 +0,0 @@
#!/bin/bash
#
# Setup the locale for BigBlueButton
#
NEW_LANG=$(cat ./src/org/bigbluebutton/util/i18n/ResourceUtil.as | tr -d '\r' | sed -n "/localeChain:Array/{s/.*\[[ ]*//g;s/[ ]*\];//g;s/\"//g;s/,//g;p}")
echo "Checking languages: $NEW_LANG"
CUR_DIR=$(pwd)
cd "${FLEX_HOME}/frameworks/locale"
for v in $NEW_LANG; do
if [ ! -d ${v} ]; then
echo "Creating locale for: ${v}"
$FLEX_HOME/bin/copylocale en_US ${v}
fi
done
cd $CUR_DIR

View File

@ -1 +1,2 @@
config.xml
join-mock.xml

View File

@ -1,72 +0,0 @@
<?xml version="1.0" ?>
<config>
<version>dev build</version>
<help url="http://192.168.0.120/help.html"/>
<porttest host="192.168.0.120" application="video"/>
<modules>
<module name="ChatModule" url="ChatModule.swf"
uri="rtmp://192.168.0.120/bigbluebutton"
loadNextModule="ListenersModule"
onUserJoinedEvent="START"
onUserLogoutEvent="STOP"
/>
<!--host="http://192.168.0.172/bigbluebutton/conference-session/enter"-->
<!--host="conf/join-mock.xml"-->
<module name="ViewersModule" url="ViewersModule.swf"
uri="rtmp://192.168.0.120/bigbluebutton"
host="conf/join-mock.xml"
onAppInitEvent="LOAD" loadNextModule="ChatModule"
onAppStartEvent="START"
onUserLogoutEvent="STOP"
/>
<module name="ListenersModule" url="ListenersModule.swf"
uri="rtmp://192.168.0.120/bigbluebutton"
recordingHost="http://192.168.0.120"
loadNextModule="DeskShareModule"
onUserJoinedEvent="START"
onUserLogoutEvent="STOP"
/>
<module name="DeskShareModule" url="DeskShareModule.swf" uri="rtmp://192.168.0.120/deskShare" onUserJoinedEvent="START" onUserLogoutEvent="STOP" loadNextModule="PhoneModule" />
<module name="PhoneModule" url="PhoneModule.swf"
uri="rtmp://192.168.0.120/sip"
onUserJoinedEvent="START"
onUserLogoutEvent="STOP"
loadNextModule="VideoconfModule"
/>
<module name="VideoconfModule" url="VideoconfModule.swf"
uri="rtmp://192.168.0.120/video"
onUserJoinedEvent="START"
onUserLogoutEvent="STOP"
loadNextModule="HighlighterModule"
/>
<module name="HighlighterModule" url="HighlighterModule.swf"
uri="rtmp://192.168.0.120/bigbluebutton"
onUserJoinedEvent="START"
onUserLogoutEvent="STOP"
loadNextModule="PresentModule"
/>
<module name="PresentModule" url="PresentModule.swf"
uri="rtmp://192.168.0.120/bigbluebutton"
host="http://192.168.0.120"
onUserJoinedEvent="START"
onUserLogoutEvent="STOP"
/>
<!-- new module in development:
<module name="DynamicInfoModule" url="DynamicInfoModule.swf"
uri="rtmp://192.168.0.120/bigbluebutton"
host="http://192.168.0.120"
infoURL="http://192.168.0.120/client/conf/example-info-data.xml?user={userID}&role={role}&meetingID={meetingID}"
onUserJoinedEvent="START"
onUserLogoutEvent="STOP"
/>
-->
</modules>
</config>

View File

@ -175,8 +175,8 @@
video.attachNetStream(ns);
ns.play(stream);
this.stream = stream;
this.title = UserManager.getInstance().getPresenter().name + " is sharing their desktop with you";
this.title = "Blah";
// this.title = UserManager.getInstance().getPresenter().name + " is sharing their desktop with you";
}
public function stopViewing():void {

View File

@ -149,7 +149,7 @@
this.x = this.parent.width - this.width;
} else {
// Move window so that it won't overlap with Participant's window.
this.x = DEFAULT_X_POSITION;
this.x = ((Capabilities.screenResolutionX / 20) * 3) + 10;
}
}
@ -433,7 +433,7 @@
private function clearPresentation(e:UploadEvent):void{
slideView.visible = false;
slideView.swfSlideLoader.source = null;
slideView.slideLoader.source = null;
slideView.selectedSlide = 0;
btnSlideNum.label = "";
displaySlideNavigationControls(false);

View File

@ -106,9 +106,9 @@
private var dispatcher:Dispatcher = new Dispatcher();
private function onCreationComplete():void{
swfSlideLoader.width = this.width;
swfSlideLoader.height = this.height;
private function onCreationComplete():void {
slideLoader.width = this.width;
slideLoader.height = this.height;
cursor = new Shape();
cursor.graphics.lineStyle(6, 0xFF0000, 0.6);
@ -123,135 +123,172 @@
this.setChildIndex(thumbnailView, this.numChildren - 1);
}
public function setSlides(slides:ArrayCollection):void{
public function setSlides(slides:ArrayCollection):void {
this.slides = slides;
thumbnailView.dataProvider = this.slides.toArray();
}
private function changeSlide():void{
private function changeSlide():void {
dispatchEvent(new PresenterCommands(PresenterCommands.GOTO_SLIDE, thumbnailView.selectedIndex));
thumbnailView.visible = false;
showOverlayCanvas(true);
dispatchEvent(new Event(THUMBNAILS_CLOSED));
}
private function changeIndex(e:ListEvent):void{
private function changeIndex(e:ListEvent):void {
dispatchEvent(e);
}
private function onMouseDown(e:MouseEvent):void{
/**
* Triggered when the presenter clicks on the slides with the intent of moving it.
*/
private function onMouseDown(e:MouseEvent):void {
canvasMouseXOnMouseDown = this.mouseX;
canvasMouseYOnMouseDown = this.mouseY;
loaderXOnMouseDown = swfSlideLoader.x;
loaderYOnMouseDown = swfSlideLoader.y;
loaderXOnMouseDown = slideLoader.x;
loaderYOnMouseDown = slideLoader.y;
addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
}
/**
* Triggered when the mouse had been clicked and dragged to move the slide.
*/
private function onMouseMove(e:MouseEvent):void {
// Compute the change in mouse position from where the mouse was clicked.
var deltaCanvasMouseX:Number = this.mouseX - canvasMouseXOnMouseDown;
var deltaCanvasMouseY:Number = this.mouseY - canvasMouseYOnMouseDown;
swfSlideLoader.x = loaderXOnMouseDown + deltaCanvasMouseX/2;
swfSlideLoader.y = loaderYOnMouseDown + deltaCanvasMouseY/2;
// Now we move the slide by the amount of mouse location change.
slideLoader.x = loaderXOnMouseDown + deltaCanvasMouseX;
slideLoader.y = loaderYOnMouseDown + deltaCanvasMouseY;
// Move the slide within the loader.
fitSlideToLoader();
notifyOtherParticipantsOfSlideMoving();
}
/**
* Send a message to other participants indicating the presenter has moved the slide.
*/
private function notifyOtherParticipantsOfSlideMoving():void {
var presentEvent:PresenterCommands = new PresenterCommands(PresenterCommands.MOVE);
presentEvent.xOffset = swfSlideLoader.x/swfSlideLoader.width;
presentEvent.yOffset = swfSlideLoader.y/swfSlideLoader.height;
presentEvent.slideToCanvasWidthRatio = swfSlideLoader.width/this.width;
presentEvent.slideToCanvasHeightRatio = swfSlideLoader.height/this.height;
presentEvent.xOffset = slideLoader.x/slideLoader.width;
presentEvent.yOffset = slideLoader.y/slideLoader.height;
presentEvent.slideToCanvasWidthRatio = slideLoader.width/this.width;
presentEvent.slideToCanvasHeightRatio = slideLoader.height/this.height;
dispatchEvent(presentEvent);
}
/**
* Triggered when the presenter releases the mouse button.
*/
private function onMouseUp(e:MouseEvent):void{
removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
}
/**
* Triggered when the presenter has dragged the cursor outside the presetation window.
*/
private function onMouseOut(e:MouseEvent):void{
removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
}
/**
* Handles the resizing of the presenter's window. This is for the presenter resizing
* his/her window.
*/
private function handleWindowResizeEvent(event:WindowResizedEvent):void {
this.width = event.width;
this.height = event.height;
resizeAndMoveLoaderInRelationToCanvas();
}
/**
* Resize and moves the slide loader within the canvas container.
*/
private function resizeAndMoveLoaderInRelationToCanvas():void {
swfSlideLoader.width = this.width * presentersLoaderCanvasWidthRatio;
swfSlideLoader.height = this.height * presentersLoaderCanvasHeightRatio;
slideLoader.width = this.width * presentersLoaderCanvasWidthRatio;
slideLoader.height = this.height * presentersLoaderCanvasHeightRatio;
swfSlideLoader.x = swfSlideLoader.width * presentersLoaderXOffsetFromCanvas;
swfSlideLoader.y = swfSlideLoader.width * presentersLoaderYOffsetFromCanvas;
slideLoader.x = slideLoader.width * presentersLoaderXOffsetFromCanvas;
slideLoader.y = slideLoader.height * presentersLoaderYOffsetFromCanvas;
fitSlideToLoader();
}
/**
* Fit the slide inside the loader.
*/
private function fitSlideToLoader():void {
if (noSlideContentLoaded()) return;
swfSlideLoader.content.x = swfSlideLoader.x;
swfSlideLoader.content.y = swfSlideLoader.y;
swfSlideLoader.content.width = swfSlideLoader.width;
swfSlideLoader.content.height = swfSlideLoader.height;
slideLoader.content.x = slideLoader.x;
slideLoader.content.y = slideLoader.y;
slideLoader.content.width = slideLoader.width;
slideLoader.content.height = slideLoader.height;
zoomCanvas(swfSlideLoader.width, swfSlideLoader.height);
zoomCanvas(slideLoader.width, slideLoader.height);
}
private function fitLoaderToCanvas():void{
if (noSlideContentLoaded()) return;
swfSlideLoader.width = this.width;
swfSlideLoader.height = this.height;
swfSlideLoader.x = this.x;
swfSlideLoader.y = this.y;
slideLoader.width = this.width;
slideLoader.height = this.height;
slideLoader.x = this.x;
slideLoader.y = this.y;
fitSlideToLoader();
}
/**
*
*/
private function resizeAndMoveLoaderBy(percent:Number):void {
// Save the old loader dimensions. We need these to calculate
// the new position of the loader;
var oldLoaderHeight:int = swfSlideLoader.height;
var oldLoaderWidth:int = swfSlideLoader.width;
var oldLoaderHeight:int = slideLoader.height;
var oldLoaderWidth:int = slideLoader.width;
swfSlideLoader.width = this.width * percent/100;
swfSlideLoader.height = this.height * percent/100;
slideLoader.width = this.width * percent/100;
slideLoader.height = this.height * percent/100;
swfSlideLoader.x = calculateNewLoaderX(oldLoaderWidth);
swfSlideLoader.y = calculateNewLoaderY(oldLoaderHeight);
slideLoader.x = calculateNewLoaderX(oldLoaderWidth);
slideLoader.y = calculateNewLoaderY(oldLoaderHeight);
fitSlideToLoader();
}
/**
* Determines the new y coordinate of the loader. This determines if the location has
* changed because the slide was resized or moved.
*/
private function calculateNewLoaderY(oldLoaderHeight:int):int {
var deltaPercentHeight:Number = (swfSlideLoader.height - oldLoaderHeight) /oldLoaderHeight;
var deltaPercentHeight:Number = (slideLoader.height - oldLoaderHeight) /oldLoaderHeight;
var newLoaderY:int = (swfSlideLoader.y/swfSlideLoader.height) * deltaPercentHeight;
var newLoaderY:int = (slideLoader.y/slideLoader.height) * deltaPercentHeight;
if (newLoaderY == 0) {
newLoaderY = swfSlideLoader.y - (deltaPercentHeight * 100);
newLoaderY = slideLoader.y - (deltaPercentHeight * 100);
} else {
newLoaderY = swfSlideLoader.y - newLoaderY;
newLoaderY = slideLoader.y - newLoaderY;
}
return newLoaderY;
}
/**
* Determines the new y coordinate of the loader. This determines if the location has
* changed because the slide was resized or moved.
*/
private function calculateNewLoaderX(oldLoaderWidth:int):int {
var deltaPercentWidth:Number = (swfSlideLoader.width - oldLoaderWidth) / oldLoaderWidth;
var newLoaderX:int = (swfSlideLoader.x/swfSlideLoader.width) * deltaPercentWidth;
var deltaPercentWidth:Number = (slideLoader.width - oldLoaderWidth) / oldLoaderWidth;
var newLoaderX:int = (slideLoader.x/slideLoader.width) * deltaPercentWidth;
if (newLoaderX == 0) {
newLoaderX = swfSlideLoader.x - (deltaPercentWidth * 100);
newLoaderX = slideLoader.x - (deltaPercentWidth * 100);
} else {
newLoaderX = swfSlideLoader.x - newLoaderX;
newLoaderX = slideLoader.x - newLoaderX;
}
return newLoaderX;
@ -278,6 +315,9 @@
notifyOthersOfZoomEvent();
}
/**
* Triggered when the presenter uses the mouse wheel to zoom in/out of the slide.
*/
private function onMouseWheelZoomEvent(e:MouseEvent):void {
if (presenterIsZoomingOut(e.delta)) {
zoomPercentage -= ZOOM_STEP;
@ -297,10 +337,10 @@
private function notifyOthersOfZoomEvent():void {
var presentEvent:PresenterCommands = new PresenterCommands(PresenterCommands.ZOOM);
presentEvent.xOffset = swfSlideLoader.x/swfSlideLoader.width;
presentEvent.yOffset = swfSlideLoader.y/swfSlideLoader.height;
presentEvent.slideToCanvasWidthRatio = swfSlideLoader.width/this.width;
presentEvent.slideToCanvasHeightRatio = swfSlideLoader.height/this.height;
presentEvent.xOffset = slideLoader.x/slideLoader.width;
presentEvent.yOffset = slideLoader.y/slideLoader.height;
presentEvent.slideToCanvasWidthRatio = slideLoader.width/this.width;
presentEvent.slideToCanvasHeightRatio = slideLoader.height/this.height;
dispatchEvent(presentEvent);
}
@ -309,43 +349,58 @@
return delta < 0;
}
/**
* Handles notification from presenter that the slide has moved.
*/
private function handleMoveEvent(e:MoveEvent):void{
savePresentersSettings(e.xOffset, e.yOffset, e.slideToCanvasWidthRatio, e.slideToCanvasHeightRatio);
if (!isPresenter) {
resizeAndMoveLoaderInRelationToCanvas();
}
moveCanvas(swfSlideLoader.x, swfSlideLoader.y);
moveCanvas(slideLoader.x, slideLoader.y);
}
/**
* Handle notification from presenter that the slide has been zoomed.
*/
private function handleZoomEvent(e:ZoomEvent):void {
savePresentersSettings(e.xOffset, e.yOffset, e.slideToCanvasWidthRatio, e.slideToCanvasHeightRatio);
if (!isPresenter) {
resizeAndMoveLoaderInRelationToCanvas();
}
zoomCanvas(swfSlideLoader.width, swfSlideLoader.height);
zoomCanvas(slideLoader.width, slideLoader.height);
}
/**
* Handle notification from loader that a slide has been loaded.
*/
private function handleSlideLoadedEvent(e:SlideEvent):void{
swfSlideLoader.source = e.slide;
slideLoader.source = e.slide;
}
/**
* Handle the event where this presenter becomes a viewer because another attendee became presenter.
*/
private function handleSwitchToViewerEvent(e:MadePresenterEvent):void{
participantIsNowPresenter(false);
removeEventListener(MouseEvent.MOUSE_WHEEL, onMouseWheelZoomEvent);
swfSlideLoader.removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
swfSlideLoader.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
swfSlideLoader.removeEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
slideLoader.removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
slideLoader.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
slideLoader.removeEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
removeEventListener(MouseEvent.MOUSE_MOVE, mouseCursorUpdateListener);
}
/**
* Makes the attendee the presenter.
*/
private function handleSwitchToPresenterEvent(e:MadePresenterEvent):void{
participantIsNowPresenter(true);
addEventListener(MouseEvent.MOUSE_WHEEL, onMouseWheelZoomEvent);
swfSlideLoader.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
swfSlideLoader.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
swfSlideLoader.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
slideLoader.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
slideLoader.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
slideLoader.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
addEventListener(MouseEvent.MOUSE_MOVE, mouseCursorUpdateListener);
}
@ -353,11 +408,17 @@
this.isPresenter = presenter;
}
/**
* Listen for mouse events to track the cursor.
*/
public function mouseCursorUpdateListener(e:MouseEvent):void{
if (noSlideContentLoaded()) return;
notifyOthersOfPresentersCursorPosition(this.mouseX, this.mouseY);
}
/**
* Broadcast to other participants the location fo the mouse cursor.
*/
private function notifyOthersOfPresentersCursorPosition(cursorXPosition:int, cursorYPosition:int):void {
var command:PresenterCommands = new PresenterCommands(PresenterCommands.SEND_CURSOR_UPDATE);
command.xPercent = cursorXPosition / this.width;
@ -365,6 +426,9 @@
dispatchEvent(command);
}
/**
* Handle notification from presenter about the location of the mouse cursor.
*/
private function handleUpdateCursorEvent(e:CursorEvent):void{
if (noSlideContentLoaded()) return;
@ -379,9 +443,12 @@
}
private function noSlideContentLoaded():Boolean {
return swfSlideLoader.content == null
return slideLoader.content == null
}
/**
* Keep track of the presenter's x,y coordinates and the size of his/her presentation window.
*/
private function savePresentersSettings(xOffset:Number, yOffset:Number, widthRatio:Number, heightRatio:Number):void {
presentersLoaderXOffsetFromCanvas = xOffset;
presentersLoaderYOffsetFromCanvas = yOffset;
@ -389,20 +456,16 @@
presentersLoaderCanvasHeightRatio = heightRatio;
}
/******************************************************
* Helper functions to determine offsets
******************************************************/
/*
* Fire an event when a single slide has been loaded.
*/
private function listenForSlideLoadedCompleteEvent():void {
swfSlideLoader.addEventListener(Event.COMPLETE, handleSlideLoadedCompleteEvent);
slideLoader.addEventListener(Event.COMPLETE, handleSlideLoadedCompleteEvent);
}
private function handleSlideLoadedCompleteEvent(event:Event):void {
var slideRealWidth:int = swfSlideLoader.content.width;
var slideRealHeight:int = swfSlideLoader.content.height;
var slideRealWidth:int = slideLoader.content.width;
var slideRealHeight:int = slideLoader.content.height;
fitLoaderToCanvas();
dispatchNewSlideDisplayedEvent(slideRealWidth, slideRealHeight);
}
@ -448,8 +511,8 @@
}
public function moveCanvas(x:int, y:int):void{
overlayChildrenHolder.x = swfSlideLoader.x * 2;
overlayChildrenHolder.y = swfSlideLoader.y * 2;
overlayChildrenHolder.x = slideLoader.x * 2;
overlayChildrenHolder.y = slideLoader.y * 2;
if (overlayCanvas != null) overlayCanvas.moveCanvas(overlayChildrenHolder.x, overlayChildrenHolder.y);
}
@ -457,7 +520,7 @@
public function zoomCanvas(width:int, height:int):void{
overlayChildrenHolder.width = width;
overlayChildrenHolder.height = height;
moveCanvas(swfSlideLoader.x, swfSlideLoader.y);
moveCanvas(slideLoader.x, slideLoader.y);
if (overlayCanvas != null) overlayCanvas.zoomCanvas(width, height);
}
@ -472,7 +535,7 @@
]]>
</mx:Script>
<mx:SWFLoader id="swfSlideLoader" width="100%" height="100%" creationComplete="listenForSlideLoadedCompleteEvent()"
<mx:SWFLoader id="slideLoader" width="100%" height="100%" creationComplete="listenForSlideLoadedCompleteEvent()"
scaleContent="false" maintainAspectRatio="true" showBusyCursor="true" completeEffect="Fade"/>
<mx:HorizontalList id="thumbnailView" itemRenderer="org.bigbluebutton.modules.present.views.Thumbnail" itemRollOver="changeIndex(event)"

View File

@ -31,6 +31,7 @@
# 2010-04-02 FFD Updated for 0.64
# 2010-06-21 SEB Cleaned up some code / Updated for 0.70
# 2010-06-25 SEB Added ability to change the security salt
# 2010-06-30 SEB Added some extra errorchecking
#set -x
@ -135,7 +136,8 @@ need_root() {
}
usage() {
echo "BigBlueButton Server Utility - Version 0.64"
echo "BigBlueButton Configuration Utility - Version 0.70"
echo "http://code.google.com/p/bigbluebutton/wiki/BBBConf"
echo
echo "$0 [options]"
echo
@ -158,11 +160,9 @@ usage() {
if [ "$(is_vm)" ]; then
echo "Development:"
echo " --setup-samba Setup samba share for development (VM only)"
echo " --setup-dev [bbb-web|bbb-client|bbb-apps] "
echo " --checkout Checkout BigBlueButton from github "
echo " --setup-dev [client|web|apps] Setup development environment "
echo " --reset-dev Reset environment back to using packages"
echo " --trunk Checkout trunk instead of last release"
echo " --svn-username [user] Your Google code username if you want to "
echo " commit from the checked out code"
fi
echo
}
@ -236,11 +236,6 @@ fi
# Parse the parameters
while [ $# -gt 0 ]; do
if [ "$1" = "-h" -o "$1" = "-help" -o "$1" = "?" -o "$1" = "--help" ]; then
usage
exit 1
fi
if [ "$1" = "-check" -o "$1" = "--check" -o "$1" = "-c" ]; then
CHECK=1
shift
@ -301,6 +296,13 @@ while [ $# -gt 0 ]; do
continue
fi
if [ "$1" = "--checkout" -o "$1" = "-checkout" ]; then
echo "# Request to checkout BigBlueButton"
CHECKOUT="1"
shift; shift
continue
fi
#
# all other parameters requires at least 1 argument
#
@ -320,26 +322,11 @@ while [ $# -gt 0 ]; do
continue
fi
if [ "$1" = "--setup-dev" -o "$1" = "-setup-dev" ]; then
SETUPDEV="${2}"
shift; shift
continue
fi
if [ "$1" = "--svn-username" -o "$1" = "-svn-username" ]; then
SVNUSERNAME="--username ${2}"
SVNPROTO="https"
shift; shift
continue
fi
if [ "$1" = "--trunk" -o "$1" = "-trunk" ]; then
# replace the value for for RELEASE because we don't want
# a particular release
RELEASE=""
shift
continue
fi
if [ "$1" = "--setup-dev" -o "$1" = "-setup-dev" ]; then
SETUPDEV="${2}"
shift; shift
continue
fi
if [ "$1" = "--conference" -o "$1" = "-conference" ]; then
CONFERENCE="${2}"
@ -378,7 +365,7 @@ fi
# Setup samba
#
if [ -n $SALT ]; then
if [ $SALT ]; then
need_root
# echo $SALT;
change_var_salt /var/lib/$TOMCAT/webapps/bigbluebutton/WEB-INF/classes/bigbluebutton.properties beans.dynamicConferenceService.securitySalt $SALT
@ -436,158 +423,219 @@ fi
# Setup the development environemnt.
#
if [ $SETUPDEV ]; then
if [ $CHECKOUT ]; then
check_root
# This is a step towards setting up a development environment on a non-BigBlueButton VM
which svn
which git
if [ $? != 0 ]; then
sudo apt-get install subversion ant -y --force-yes
echo "# Installing git and ant"
sudo apt-get install git ant -y --force-yes
fi
BBBSRCGIT="~/dev/source/bigbluebutton"
if [ -d $BBBSRCGIT ]; then
echo "# "
echo "**** ERROR: ${BBBSRCGIT} exists. ***"
echo "**** ERROR: You have already checked-out bigbluebutton. Please delete ${BBBSRCGIT} and try again. ***"
echo "# "
exit 1
fi
if [ ! -d ~/dev ]; then
echo "# Creating dev directory"
mkdir ~/dev
fi
if [ $SETUPDEV == "bbb-web" ]; then
if [ ! -d ~/dev/bbb-web ]; then
echo "# Changing to the dev directory"
cd ~/dev
if [ ! -d ~/dev/source ]; then
echo "# Creating source directory"
mkdir ~/dev/source
fi
echo "# Setting up ~/dev/bbb-web"
echo " svn checkout ${SVNPROTO}://bigbluebutton.googlecode.com/svn/trunk/bigbluebutton-web bbb-web ${RELEASE} ${SVNUSERNAME}"
echo "# Changing to the dev directory"
cd ~/dev/source
cd ~/dev
svn checkout ${SVNPROTO}://bigbluebutton.googlecode.com/svn/trunk/bigbluebutton-web bbb-web $RELEASE $SVNUSERNAME
echo "# "
echo "# Checking out READ-ONLY code from github."
echo "# "
echo "# "
git clone git://github.com/bigbluebutton/bigbluebutton.git
echo "# "
echo "# "
echo "# Checked out READ-ONLY code from github. "
echo "# "
echo " You can now run 'bbb-conf --setup-dev [client|web|apps]' to setup dev environment "
echo "# "
fi
IP=$(ifconfig | grep -v '127.0.0.1' | grep -m 1 'inet addr:' | cut -d: -f2 | awk '{ print $1}')
if [ $SETUPDEV ]; then
check_root
echo "# Copying the bigbluebutton.properites in /var/lib/${TOMCAT}/webapps/bigbluebutton/WEB-INF/classes/bigbluebutton.properties to ~/.grails/bigbluebutton-config.properties"
mkdir -p ~/.grails
cp /var/lib/${TOMCAT}/webapps/bigbluebutton/WEB-INF/classes/bigbluebutton.properties ~/.grails/bigbluebutton-config.properties
if [ ! -d ~/dev/source/bigbluebutton ]; then
echo "# "
echo "*** ERROR: You haven't checked-out BigBlueButton source yet. Please run 'bbb-conf --checkout' first. "
echo "# "
exit 1
fi
echo "# Copying the bbb_api_conf.jsp into /var/lib/${TOMCAT}/webapps/bigbluebutton/WEB-INF/classes/bigbluebutton.properties to ~/dev/bbb-web/web-app/demo"
cp /var/lib/${TOMCAT}/webapps/bigbluebutton/demo/bbb_api_conf.jsp ~/dev/bbb-web/web-app/demo
echo "# Enabling $USER to write to /var/bigbluebutton to upload slides"
sudo chmod -R ugo+rwx /var/bigbluebutton
if [ $SETUPDEV == "web" ]; then
BBBWEBHOME=~/dev/source/bigbluebutton/bigbluebutton-web
if [ ! -d $BBBWEBHOME ]; then
echo "# "
echo "*** ERROR: Cannot find ${BBBWEBHOME} "
echo "*** ERROR: You haven't checked-out BigBlueButton source yet. Please run 'bbb-conf --checkout' first. "
echo "# "
exit 1
fi
echo "# Enabling $USER to write to /var/log/bigbluebutton to write log files"
sudo chmod -R ugo+rwx /var/log/bigbluebutton
IP=$(ifconfig | grep -v '127.0.0.1' | grep -m 1 'inet addr:' | cut -d: -f2 | awk '{ print $1}')
echo "# Copying bbb-common-message-0.64.jar into ~/dev/bbb-web/lib"
if [ -f $RED5_DIRECTORY/webapps/bigbluebutton/WEB-INF/lib/bbb-common-message-0.64.jar ]; then
cp /usr/share/red5/webapps/bigbluebutton/WEB-INF/lib/bbb-common-message-0.64.jar ~/dev/bbb-web/lib
fi
echo "# Copying the bigbluebutton.properites in /var/lib/${TOMCAT}/webapps/bigbluebutton/WEB-INF/classes/bigbluebutton.properties to ~/.grails/bigbluebutton-config.properties"
mkdir -p ~/.grails
cp /var/lib/${TOMCAT}/webapps/bigbluebutton/WEB-INF/classes/bigbluebutton.properties ~/.grails/bigbluebutton-config.properties
echo "
echo "# Copying the bbb_api_conf.jsp into /var/lib/${TOMCAT}/webapps/bigbluebutton/WEB-INF/classes/bigbluebutton.properties to ${BBBWEBHOME}/web-app/demo"
cp /var/lib/${TOMCAT}/webapps/bigbluebutton/demo/bbb_api_conf.jsp ${BBBWEBHOME}/web-app/demo
echo "# Enabling $USER to write to /var/bigbluebutton to upload slides"
sudo chmod -R ugo+rwx /var/bigbluebutton
echo "# Enabling $USER to write to /var/log/bigbluebutton to write log files"
sudo chmod -R ugo+rwx /var/log/bigbluebutton
echo "# Copying bbb-common-message-0.64.jar into ${BBBWEBHOME}/lib"
if [ -f $RED5_DIRECTORY/webapps/bigbluebutton/WEB-INF/lib/bbb-common-message-0.64.jar ]; then
cp /usr/share/red5/webapps/bigbluebutton/WEB-INF/lib/bbb-common-message-0.64.jar ${BBBWEBHOME}/lib
fi
echo "
# Done. To run your local build of bbb-web:
sudo /etc/init.d/${TOMCAT} stop
cd ~/dev/bbb-web
ant
sudo /etc/init.d/${TOMCAT} stop
cd ${BBBWEBHOME}
ant
"
fi
fi
fi
if [ $SETUPDEV == "bbb-client" ]; then
if [ ! -d ~/dev/bbb-client ]; then
echo "# Setting up ~/dev/bbb-client"
echo " svn checkout ${SVNPROTO}://bigbluebutton.googlecode.com/svn/trunk/bigbluebutton-client bbb-client ${RELEASE} ${SVNUSERNAME}"
if [ $SETUPDEV == "client" ]; then
BBBCLIENTHOME=~/dev/source/bigbluebutton/bigbluebutton-client
if [ ! -d $BBBCLIENTHOME ]; then
echo "# "
echo "*** ERROR: Cannot find ${BBBCLIENTHOME} "
echo "*** ERROR: You haven't checked-out BigBlueButton source yet. Please run 'bbb-conf --checkout' first. "
echo "# "
exit 1
fi
cd ~/dev
svn checkout ${SVNPROTO}://bigbluebutton.googlecode.com/svn/trunk/bigbluebutton-client bbb-client $RELEASE $SVNUSERNAME
#
# Setup the directories so we can point /etc/nginx/sites-available/bigbluebutton to this
# local copy of the client
#
if [ ! -d $BBBCLIENTHOME/bin ]; then
mkdir -p $BBBCLIENTHOME/bin
fi
#
# Setup the directories so we can point /etc/nginx/sites-available/bigbluebutton to this
# local copy of the client
#
if [ ! -d ~/dev/bbb-client/bin ]; then
mkdir -p ~/dev/bbb-client/bin
if [ ! -d $BBBCLIENTHOME/conf ]; then
mkdir -p $BBBCLIENTHOME/bin/conf
fi
if [ ! -h $BBBCLIENTHOME/client ]; then
ln -s $BBBCLIENTHOME/bin $BBBCLIENTHOME/client
fi
echo "Modifying /etc/nginx/sites-available/bigbluebutton to point to your local copy of bbb-client"
sudo sed -i "s/\/var\/www\/bigbluebutton;/\/home\/firstuser\/dev\/source\/bigbluebutton\/bigbluebutton-client;/g" \
/etc/nginx/sites-available/bigbluebutton
sudo /etc/init.d/nginx restart
if [ -f /var/www/bigbluebutton/client/conf/config.xml ]; then
echo "# Copying /var/www/bigbluebutton/client/conf/config.xml to ${BBBCLIENTHOME}/src/conf/config.xml"
cp /var/www/bigbluebutton/client/conf/config.xml $BBBCLIENTHOME/src/conf/config.xml
else
echo "# Copying ${BBBCLIENTHOME}/resources/config.xml.template to ${BBBCLIENTHOME}/src/conf/config.xml.template"
cp $BBBCLIENTHOME/resources/config.xml.template $BBBCLIENTHOME/src/conf/config.xml.template
echo "# Generating ${BBBCLIENTHOME}/src/conf/config.xml"
cat $BBBCLIENTHOME/src/conf/config.xml.template | sed "s/VERSION/dev/" > $BBBCLIENTHOME/src/conf/config.xml
rm $BBBCLIENTHOME/src/conf/config.xml.template
fi
if [ ! -d ~/dev/bbb-client/bin/conf ]; then
mkdir -p ~/dev/bbb-client/bin/conf
fi
echo "# Copying ${BBBCLIENTHOME}/resources/dev/join-mock.xml to ${BBBCLIENTHOME}/src/conf/join-mock.xml"
cp $BBBCLIENTHOME/resources/dev/join-mock.xml $BBBCLIENTHOME/src/conf/config.xml
if [ ! -h ~/dev/bbb-client/client ]; then
ln -s ~/dev/bbb-client/bin ~/dev/bbb-client/client
fi
cd $BBBCLIENTHOME
echo "Modifying /etc/nginx/sites-available/bigbluebutton to point to your local copy of bbb-client"
sudo sed -i "s/\/var\/www\/bigbluebutton;/\/home\/firstuser\/dev\/bbb-client;/g" \
/etc/nginx/sites-available/bigbluebutton
sudo /etc/init.d/nginx restart
echo "# Copying /var/www/bigbluebutton/client/conf/config.xml to ~/dev/bbb-client/bin/conf/config.xml"
cp /var/www/bigbluebutton/client/conf/config.xml ~/dev/bbb-client/bin/conf/config.xml
cd bbb-client
echo "
echo "
# Done. To build your local build of bbb-client:
cd ~/dev/bbb-client
ant
cd ${BBBCLIENTHOME}
ant
# The nginx server now loads the BigBlueButton Flash client from
# /home/firstuser/dev/bbb-client.
# The nginx server now loads the BigBlueButton Flash client from
# ${BBBCLIENTHOME}.
"
fi
fi
fi
if [ $SETUPDEV == "bbb-apps" ]; then
if [ ! -d ~/dev/bbb-apps ]; then
if [ $SETUPDEV == "apps" ]; then
BBBAPPSHOME=~/dev/source/bigbluebutton/bigbluebutton-apps
if [ ! -d $BBBAPPSHOME ]; then
echo "# "
echo "*** ERROR: Cannot find ${BBBAPPSHOME} "
echo "*** ERROR: You haven't checked-out BigBlueButton source yet. Please run 'bbb-conf --checkout' first. "
echo "# "
exit 1
fi
echo "# Setting up ~/dev/bbb-apps:"
echo " svn checkout ${SVNPROTO}://bigbluebutton.googlecode.com/svn/trunk/bigbluebutton-apps bbb-apps ${RELEASE} ${SVNUSERNAME}"
cd ~/dev
svn checkout ${SVNPROTO}://bigbluebutton.googlecode.com/svn/trunk/bigbluebutton-apps bbb-apps $RELEASE $SVNUSERNAME
echo "# Checking if ~/dev/repo/bbb-common-message-0.64.jar is present"
if [ ! -f ~/dev/repo/bbb-common-message-0.64.jar ]; then
echo "# Copying bbb-common-message-0.64.jar into ~/dev/repo/"
if [ -f $RED5_DIRECTORY/webapps/bigbluebutton/WEB-INF/lib/bbb-common-message-0.64.jar ]; then
cp /usr/share/red5/webapps/bigbluebutton/WEB-INF/lib/bbb-common-message-0.64.jar ~/dev/repo/
echo "# Checking if ~/dev/repo/bbb-common-message-0.64.jar is present"
if [ ! -f ~/dev/repo/bbb-common-message-0.64.jar ]; then
echo "# Copying bbb-common-message-0.64.jar into ${BBBAPPSHOME}"
if [ -f $RED5_DIRECTORY/webapps/bigbluebutton/WEB-INF/lib/bbb-common-message-0.64.jar ]; then
if [ ! -d ~/dev/repo ]; then
mkdir -p ~/dev/repo
fi
cp /usr/share/red5/webapps/bigbluebutton/WEB-INF/lib/bbb-common-message-0.64.jar ~/dev/repo/
else
echo "# $RED5_DIRECTORY/webapps/bigbluebutton/WEB-INF/lib/bbb-common-message-0.64.jar does NOT exist!"
fi
fi
fi
#
# We're going to make it easier to deploy by giving write access to others to
# $RED5_DIRECTORY/webapps
#
sudo chmod o+w $RED5_DIRECTORY/webapps
#
# We're going to make it easier to deploy by giving write access to others to
# $RED5_DIRECTORY/webapps
#
sudo chmod o+w $RED5_DIRECTORY/webapps
#
# Let's remove the existing bbb-apps
#
if dpkg-query -s bbb-apps | grep "install ok installed" > /dev/null 2>&1; then
sudo apt-get purge --yes bbb-apps
fi
#
# Let's remove the existing bbb-apps
#
if dpkg-query -s bbb-apps | grep "install ok installed" > /dev/null 2>&1; then
sudo apt-get purge --yes bbb-apps
fi
if [ ! -f ~/.bbb-apps-build.properties ]; then
echo "#
if [ ! -f ~/.bbb-apps-build.properties ]; then
echo "#
# Override the default properties for bbb-apps
#
red5.home = $RED5_DIRECTORY
" > ~/.bbb-apps-build.properties
fi
fi
#
# Setup the directories so we can point /etc/nginx/sites-available/bigbluebutton to this
# local copy of the client
#
echo "
#
# Setup the directories so we can point /etc/nginx/sites-available/bigbluebutton to this
# local copy of the client
#
echo "
# Done. To run your local build of bbb-apps:
sudo /etc/init.d/red5 stop
cd ~/dev/bbb-apps
cd ${BBBAPPSHOME}
gradle war deploy
cd $RED5_DIRECTORY
sudo -u red5 ./red5.sh
cd $RED5_DIRECTORY
sudo -u red5 ./red5.sh
# To restore the packaged version of bbb-apps:
@ -596,27 +644,19 @@ red5.home = $RED5_DIRECTORY
sudo /etc/init.d/red5 start
"
fi
fi
fi
if [ $RESET_DEV ]; then
check_root
echo "Reseting /etc/nginx/sites-available/bigbluebutton to point to /var/www/bigbluebutton"
sudo sed -i "s/\/home\/firstuser\/dev\/bbb-client;/\/var\/www\/bigbluebutton;/g" \
sudo sed -i "s/\/home\/firstuser\/dev\/source\/bigbluebutton\/bigbluebutton-client;/\/var\/www\/bigbluebutton;/g" \
/etc/nginx/sites-available/bigbluebutton
sudo /etc/init.d/nginx restart
fi
getIPOfDomain() {
ipOfDomain=$(ifconfig | grep -v '127.0.0.1' | grep -m 1 'inet addr:' | cut -d: -f2 | awk '{ print $1}')
if [ $ipOfDomain != "out;" ]; then
echo $ipOfDomain
fi
}
check_state() {
echo
@ -702,6 +742,28 @@ $RED5_DIRECTORY/webapps/sip/WEB-INF/bigbluebutton-sip.properties"
fi
done
LOGG_FILES="$RED5_DIRECTORY/log/sip.log \
$RED5_DIRECTORY/log/video.log \
$RED5_DIRECTORY/log/bigbluebutton.log \
$RED5_DIRECTORY/log/deskshare.log"
for file in $LOGG_FILES ; do
if [ -a $file ]; then
if cat $file | tail -n1 | grep -q "Starting up context"; then
echo "BigBlueButton did not start up correctly"
fi
else
echo "File" $file "not found"
fi
done
# check if sip.log has warnings where the user is not registered
if cat /usr/share/red5/log/sip.log | tail -n1 | grep -q "Call request for default but not registered"; then
echo "The User is not registered in SIP. Audio might not be working correctly."
fi
#
# Check that tomcat6 started properly and has created log files
#
@ -721,15 +783,9 @@ $RED5_DIRECTORY/webapps/sip/WEB-INF/bigbluebutton-sip.properties"
NGINX_IP=$(cat /etc/nginx/sites-available/bigbluebutton | sed -n '/server_name/{s/.*name[ ]*//;s/;//;p}')
if [ "$HOST_IP" != "$NGINX_IP" ]; then
NGINX_DOMAIN_IP=$($getIPOfDomain $NGINX_IP)
if [ "$HOST_IP" != "$NGINX_DOMAIN_IP" ]; then
echo "Host IP does not match BigBlueButton: ${HOST_IP} != ${NGINX_IP}"
fi
fi
x=$(host demo.bigbluebutton.org | cut -d\ -f 4)
echo
exit 0
}
@ -1019,18 +1075,18 @@ if [ $CONFERENCE ]; then
#
# update /etc/asterisk/bbb_extensions.conf
sudo sed -i "s/^exten => _XXXX.,n,Konference(\${EXTEN},H)/# exten => _XXXX.,n,Konference(\${EXTEN},H)/g" \
sudo sed -i "s/^exten => _XXXX.,n,Konference(\${EXTEN},H)/; exten => _XXXX.,n,Konference(\${EXTEN},H)/g" \
/etc/asterisk/bbb_extensions.conf
sudo sed -i "s/#[ ]*exten => _XXXX.,n,MeetMe(\${EXTEN},cdMsT)/exten => _XXXX.,n,MeetMe(\${EXTEN},cdMsT)/g" \
sudo sed -i "s/;[ ]*exten => _XXXX.,n,MeetMe(\${EXTEN},cdMsT)/exten => _XXXX.,n,MeetMe(\${EXTEN},cdMsT)/g" \
/etc/asterisk/bbb_extensions.conf
#
# update /etc/asterisk/bbb_extensions.conf
sudo sed -i "s/# exten => _XXXX.,n,MeetMe(\${CONFERENCE_FOUND},cdMsT)/exten => _XXXX.,n,MeetMe(\${CONFERENCE_FOUND},cdMsT)/g" \
sudo sed -i "s/; exten => _XXXX.,n,MeetMe(\${CONFERENCE_FOUND},cdMsT)/exten => _XXXX.,n,MeetMe(\${CONFERENCE_FOUND},cdMsT)/g" \
/etc/asterisk/bbb_extensions.conf
sudo sed -i "s/^exten => _XXXX.,n,Konference(\${CONFERENCE_FOUND},H)/# exten => _XXXX.,n,Konference(\${CONFERENCE_FOUND},H)/g" \
sudo sed -i "s/^exten => _XXXX.,n,Konference(\${CONFERENCE_FOUND},H)/; exten => _XXXX.,n,Konference(\${CONFERENCE_FOUND},H)/g" \
/etc/asterisk/bbb_extensions.conf
fi
@ -1043,17 +1099,17 @@ if [ $CONFERENCE ]; then
#
# update /etc/asterisk/bbb_extensions.conf
sudo sed -i "s/#[ ]*exten => _XXXX.,n,Konference(\${EXTEN},H)/exten => _XXXX.,n,Konference(\${EXTEN},H)/g" \
sudo sed -i "s/;[ ]*exten => _XXXX.,n,Konference(\${EXTEN},H)/exten => _XXXX.,n,Konference(\${EXTEN},H)/g" \
/etc/asterisk/bbb_extensions.conf
sudo sed -i "s/^exten => _XXXX.,n,MeetMe(\${EXTEN},cdMsT)/# exten => _XXXX.,n,MeetMe(\${EXTEN},cdMsT)/g" \
sudo sed -i "s/^exten => _XXXX.,n,MeetMe(\${EXTEN},cdMsT)/; exten => _XXXX.,n,MeetMe(\${EXTEN},cdMsT)/g" \
/etc/asterisk/bbb_extensions.conf
sudo sed -i "s/^exten => _XXXX.,n,MeetMe(\${CONFERENCE_FOUND},cdMsT)/# exten => _XXXX.,n,MeetMe(\${CONFERENCE_FOUND},cdMsT)/g" \
sudo sed -i "s/^exten => _XXXX.,n,MeetMe(\${CONFERENCE_FOUND},cdMsT)/; exten => _XXXX.,n,MeetMe(\${CONFERENCE_FOUND},cdMsT)/g" \
/etc/asterisk/bbb_extensions.conf
sudo sed -i "s/# exten => _XXXX.,n,Konference(\${CONFERENCE_FOUND},H)/exten => _XXXX.,n,Konference(\${CONFERENCE_FOUND},H)/g" \
sudo sed -i "s/; exten => _XXXX.,n,Konference(\${CONFERENCE_FOUND},H)/exten => _XXXX.,n,Konference(\${CONFERENCE_FOUND},H)/g" \
/etc/asterisk/bbb_extensions.conf
fi

View File

@ -64,19 +64,19 @@ beans.presentationService.presentationDir=${presentationDir}
beans.dynamicConferenceService.serviceEnabled=true
beans.dynamicConferenceService.apiVersion=0.7-SNAPSHOT
beans.dynamicConferenceService.minutesElapsedBeforeMeetingExpiration=60
beans.dynamicConferenceService.securitySalt=639259d4-9dd8-4b25-bf01-95f9567eaf4b
beans.dynamicConferenceService.securitySalt=5e5ff0968546b8aaacce0462a99bca30
beans.dynamicConferenceService.defaultWelcomeMessage=${defaultWelcomeMessage}
beans.dynamicConferenceService.defaultDialAccessNumber=${defaultDialAccessNumber}
#----------------------------------------------------
# This URL is where the BBB client is accessible. When a user sucessfully
# enters a name and password, she is redirected here to load the client.
bigbluebutton.web.serverURL=http://192.168.0.120
bigbluebutton.web.serverURL=http://192.168.0.101
#----------------------------------------------------
# URL where the logged-out participant will be redirected after sign-out.
# Assign URL where the logged-out participant will be redirected after sign-out.
# If commented-out, it returns to bigbluebutton.web.serverURL
#bigbluebutton.web.logoutURL=http://www.bigbluebutton.org
# bigbluebutton.web.logoutURL=http://www.bigbluebutton.org
#------------------------------------------------------
# Setting to enable the old scheduling mechanism. This is temporary
@ -96,4 +96,4 @@ beans.presentationService.testPresentationName=appkonference
# Uploaded presentation file
beans.presentationService.testUploadedPresentation=appkonference.txt
# Test voiceBridge number
beans.dynamicConferenceService.testVoiceBridge=99999
beans.dynamicConferenceService.testVoiceBridge=99999

View File

@ -1,2 +1,2 @@
<p/>
<small>These demos use the <a href="http://code.google.com/p/bigbluebutton/wiki/API">BigBlueButton API</a>. The source code for these demos is available <a href="http://code.google.com/p/bigbluebutton/source/browse/#svn/trunk/bigbluebutton-web/web-app/demo">here</a>.</small>
<small>These demos use the <a href="http://code.google.com/p/bigbluebutton/wiki/API">BigBlueButton API</a>. The source code for these demos is available <a href="http://github.com/bigbluebutton/bigbluebutton/tree/master/bigbluebutton-web/web-app/demo/"> here</a>.</small>