diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/viewers/model/services/NetConnectionDelegate.as b/bigbluebutton-client/src/org/bigbluebutton/modules/viewers/model/services/NetConnectionDelegate.as index 7f824eff63b3a4d2fad9ac792a48b9ca546658ca..56afd172738c4f6f5c20620f00be1269bab38da0 100644 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/viewers/model/services/NetConnectionDelegate.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/viewers/model/services/NetConnectionDelegate.as @@ -22,7 +22,8 @@ package org.bigbluebutton.modules.viewers.model.services import flash.events.*; import flash.net.NetConnection; import flash.net.Responder; - + import flash.utils.Timer; + import flash.events.TimerEvent; import org.bigbluebutton.modules.viewers.ViewersFacade; import org.bigbluebutton.modules.viewers.ViewersModuleConstants; @@ -52,6 +53,7 @@ package org.bigbluebutton.modules.viewers.model.services // then pass to other modules. private var _authToken:String = "AUTHORIZED"; private var _room:String; + private var tried_tunneling = false; public function NetConnectionDelegate(m:ViewersModule) : void { @@ -80,8 +82,9 @@ package org.bigbluebutton.modules.viewers.model.services * mode: LIVE/PLAYBACK - Live:when used to collaborate, Playback:when being used to playback a recorded conference. * room: Need the room number when playing back a recorded conference. When LIVE, the room is taken from the URI. */ - public function connect(username:String, role:String, conference:String, mode:String, room:String):void - { + public function connect(username:String, role:String, conference:String, mode:String, room:String, tunnel:Boolean=false):void + { + tried_tunneling = tunnel; _netConnection.client = this; _netConnection.addEventListener( NetStatusEvent.NET_STATUS, netStatus ); _netConnection.addEventListener( AsyncErrorEvent.ASYNC_ERROR, netASyncError ); @@ -90,6 +93,9 @@ package org.bigbluebutton.modules.viewers.model.services try { var uri:String = _module.uri; + if (tunnel) { + uri = uri.replace(/rtmp:/g, "rtmpt:"); + } LogUtil.debug(NAME + "::Connecting to " + uri + " [" + username + "," + role + "," + conference + "," + mode + "," + room + "]"); @@ -148,9 +154,16 @@ package org.bigbluebutton.modules.viewers.model.services break; - case CONNECT_FAILED : - LogUtil.debug(NAME + ":Connection to viewers application failed"); - _connectionSuccessListener(false, null, ViewersModuleConstants.CONNECT_FAILED); + case CONNECT_FAILED : + if (tried_tunneling) { + LogUtil.debug(NAME + ":Connection to viewers application failed...even when tunneling"); + _connectionSuccessListener(false, null, ViewersModuleConstants.CONNECT_FAILED); + } else { + LogUtil.debug(NAME + ":Connection to viewers application failed...try tunneling"); + var rtmptRetryTimer:Timer = new Timer(1000, 1); + rtmptRetryTimer.addEventListener("timer", rtmptRetryTimerHandler); + rtmptRetryTimer.start(); + } break; case CONNECT_CLOSED : @@ -180,6 +193,11 @@ package org.bigbluebutton.modules.viewers.model.services } } + private function rtmptRetryTimerHandler(event:TimerEvent):void { + LogUtil.debug(NAME + "rtmptRetryTimerHandler: " + event); + connect(_module.username, _module.role, _module.conference, _module.mode, _module.room, true); + } + private function sendFailReason(reason:String):void{ ViewersFacade.getInstance().sendNotification(ViewersModuleConstants.LOGIN_FAILED, reason); }