From d740e364357e198313418d60e40b7f790af55a57 Mon Sep 17 00:00:00 2001 From: Richard Alam <ritzalam@gmail.com> Date: Wed, 25 Apr 2018 16:00:06 -0700 Subject: [PATCH] - add client connId to client logs so we can correlate client conn logs with red5 side conn logs --- .../app/screenshare/red5/Red5AppAdapter.java | 3 +- .../app/screenshare/red5/Red5AppService.java | 10 ++++- .../app/video/VideoApplication.java | 21 +++++++-- .../voiceconf/red5/Application.java | 7 ++- .../red5/BigBlueButtonApplication.java | 11 +++-- .../src/org/bigbluebutton/core/UsersUtil.as | 5 +++ .../core/managers/ConnectionManager.as | 43 ++++++++++++++++++- .../org/bigbluebutton/main/model/PortTest.as | 2 +- .../main/model/users/NetConnectionDelegate.as | 4 +- .../phone/managers/ConnectionManager.as | 6 ++- .../screenshare/services/red5/Connection.as | 12 ++++-- .../modules/videoconf/business/VideoProxy.as | 5 ++- .../src/org/bigbluebutton/util/ConnUtil.as | 16 +++++++ 13 files changed, 128 insertions(+), 17 deletions(-) diff --git a/bbb-screenshare/app/src/main/java/org/bigbluebutton/app/screenshare/red5/Red5AppAdapter.java b/bbb-screenshare/app/src/main/java/org/bigbluebutton/app/screenshare/red5/Red5AppAdapter.java index 47c47a5756..e24d862c57 100755 --- a/bbb-screenshare/app/src/main/java/org/bigbluebutton/app/screenshare/red5/Red5AppAdapter.java +++ b/bbb-screenshare/app/src/main/java/org/bigbluebutton/app/screenshare/red5/Red5AppAdapter.java @@ -107,7 +107,7 @@ public class Red5AppAdapter extends MultiThreadedApplicationAdapter { String connType = getConnectionType(Red5.getConnectionLocal().getType()); String connId = Red5.getConnectionLocal().getSessionId(); - + String clientConnId = (String) conn.getAttribute("CLIENT_CONN_ID"); String meetingId = conn.getScope().getName(); String userId = getUserId(); @@ -118,6 +118,7 @@ public class Red5AppAdapter extends MultiThreadedApplicationAdapter { logData.put("userId", userId); logData.put("connType", connType); logData.put("connId", connId); + logData.put("clientConnId", clientConnId); logData.put("event", "user_leaving_bbb_screenshare"); logData.put("description", "User leaving BBB Screenshare."); diff --git a/bbb-screenshare/app/src/main/java/org/bigbluebutton/app/screenshare/red5/Red5AppService.java b/bbb-screenshare/app/src/main/java/org/bigbluebutton/app/screenshare/red5/Red5AppService.java index 445078b1f5..a0c51de58a 100755 --- a/bbb-screenshare/app/src/main/java/org/bigbluebutton/app/screenshare/red5/Red5AppService.java +++ b/bbb-screenshare/app/src/main/java/org/bigbluebutton/app/screenshare/red5/Red5AppService.java @@ -27,6 +27,7 @@ public class Red5AppService { public void setUserId(Map<String, Object> msg) { String meetingId = Red5.getConnectionLocal().getScope().getName(); String userId = (String) msg.get("userId"); + String clientConnId = (String) msg.get("clientConnId"); String connType = getConnectionType(Red5.getConnectionLocal().getType()); String sessionId = Red5.getConnectionLocal().getSessionId(); @@ -39,13 +40,18 @@ public class Red5AppService { Set<IConnection> conns = Red5.getConnectionLocal().getScope().getClientConnections(); for (IConnection conn : conns) { String connUserId = (String) conn.getAttribute("USERID"); + String oldClientConnId = (String) conn.getAttribute("CLIENT_CONN_ID"); String connSessionId = conn.getSessionId(); - if (connUserId != null && connUserId.equals(userId) && !connSessionId.equals(sessionId)) { + if (oldClientConnId != null && connUserId != null && connUserId.equals(userId) && !connSessionId.equals(sessionId)) { conn.removeAttribute("USERID"); + conn.removeAttribute("CLIENT_CONN_ID"); + Map<String, Object> logData = new HashMap<String, Object>(); logData.put("meetingId", meetingId); logData.put("userId", userId); logData.put("oldConnId", connSessionId); + logData.put("oldClientConnId", oldClientConnId); + logData.put("newClientConnId", clientConnId); logData.put("newConnId", sessionId); logData.put("event", "removing_defunct_connection"); logData.put("description", "Removing defunct connection BBB Screenshare."); @@ -60,6 +66,7 @@ public class Red5AppService { Red5.getConnectionLocal().setAttribute("MEETING_ID", meetingId); Red5.getConnectionLocal().setAttribute("USERID", userId); + Red5.getConnectionLocal().setAttribute("CLIENT_CONN_ID", clientConnId); handler.userConnected(meetingId, userId); @@ -68,6 +75,7 @@ public class Red5AppService { logData.put("userId", userId); logData.put("connType", connType); logData.put("connId", sessionId); + logData.put("clientConnId", clientConnId); logData.put("event", "user_joining_bbb_screenshare"); logData.put("description", "User joining BBB Screenshare."); diff --git a/bbb-video/src/main/java/org/bigbluebutton/app/video/VideoApplication.java b/bbb-video/src/main/java/org/bigbluebutton/app/video/VideoApplication.java index 60c3050a0e..9afb11972c 100755 --- a/bbb-video/src/main/java/org/bigbluebutton/app/video/VideoApplication.java +++ b/bbb-video/src/main/java/org/bigbluebutton/app/video/VideoApplication.java @@ -121,7 +121,7 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { public boolean roomConnect(IConnection connection, Object[] params) { log.info("BBB Video roomConnect"); - if(params.length != 3) { + if(params.length != 4) { log.error("Invalid number of parameters. param length=" + params.length); return false; } @@ -129,7 +129,7 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { String meetingId = ((String) params[0]).toString(); String userId = ((String) params[1]).toString(); String authToken = ((String) params[2]).toString(); - + String clientConnId = ((String) params[3]).toString(); if (StringUtils.isEmpty(meetingId)) { log.error("Invalid meetingId parameter."); @@ -149,6 +149,7 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { Red5.getConnectionLocal().setAttribute("MEETING_ID", meetingId); Red5.getConnectionLocal().setAttribute("USERID", userId); Red5.getConnectionLocal().setAttribute("AUTH_TOKEN", authToken); + Red5.getConnectionLocal().setAttribute("CLIENT_CONN_ID", clientConnId); String connType = getConnectionType(Red5.getConnectionLocal().getType()); String sessionId = Red5.getConnectionLocal().getSessionId(); @@ -165,6 +166,7 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { logData.put("userId", userId); logData.put("connType", connType); logData.put("connId", sessionId); + logData.put("clientConnId", clientConnId); logData.put("clientId", clientId); logData.put("remoteAddress", remoteHost + ":" + remotePort); logData.put("event", "port_test_connection_bbb_video"); @@ -186,18 +188,21 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { Set<IConnection> conns = Red5.getConnectionLocal().getScope().getClientConnections(); for (IConnection conn : conns) { String connUserId = (String) conn.getAttribute("USERID"); + String oldClientConnId = (String) conn.getAttribute("CLIENT_CONN_ID"); String connSessionId = conn.getSessionId(); String clientId = conn.getClient().getId(); String remoteHost = conn.getRemoteAddress(); int remotePort = conn.getRemotePort(); - if (connUserId != null && connUserId.equals(userId) && !connSessionId.equals(sessionId)) { + if (oldClientConnId != null && connUserId != null && connUserId.equals(userId) && !connSessionId.equals(sessionId)) { conn.removeAttribute("USERID"); + conn.removeAttribute("CLIENT_CONN_ID"); Map<String, Object> logData = new HashMap<String, Object>(); logData.put("meetingId", meetingId); logData.put("userId", userId); logData.put("oldConnId", connSessionId); logData.put("newConnId", sessionId); logData.put("clientId", clientId); + logData.put("oldClientConnId", oldClientConnId); logData.put("remoteAddress", remoteHost + ":" + remotePort); logData.put("event", "removing_defunct_connection"); logData.put("description", "Removing defunct connection BBB Video."); @@ -218,6 +223,7 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { logData.put("userId", userId); logData.put("connType", connType); logData.put("connId", sessionId); + logData.put("clientConnId", clientConnId); logData.put("clientId", clientId); logData.put("remoteAddress", remoteHost + ":" + remotePort); logData.put("event", "user_joining_bbb_video"); @@ -253,6 +259,12 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { if ((meetingId == null) || ("".equals(meetingId))) meetingId = "unknown-meetingid"; return meetingId; } + + private String getClientConnId() { + String clientConnId = (String) Red5.getConnectionLocal().getAttribute("CLIENT_CONN_ID"); + if ((clientConnId == null) || ("".equals(clientConnId))) clientConnId = "unknown-clientConnId"; + return clientConnId; + } @Override public void appDisconnect(IConnection conn) { @@ -266,6 +278,7 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { String connType = getConnectionType(Red5.getConnectionLocal().getType()); String connId = Red5.getConnectionLocal().getSessionId(); + String clientConnId = getClientConnId(); UserConnectionMapper.UserConnection uconn = userConnections.userDisconnected(connId); if (uconn != null) { @@ -274,6 +287,7 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { logData.put("userId", getUserId()); logData.put("connType", connType); logData.put("connId", connId); + logData.put("clientConnId", clientConnId); logData.put("event", "removing_port_test_conn_bbb_video"); logData.put("description", "Removing port test connection BBB Video."); @@ -287,6 +301,7 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { logData.put("userId", getUserId()); logData.put("connType", connType); logData.put("connId", connId); + logData.put("clientConnId", clientConnId); logData.put("event", "user_leaving_bbb_video"); logData.put("description", "User leaving BBB Video."); diff --git a/bbb-voice/src/main/java/org/bigbluebutton/voiceconf/red5/Application.java b/bbb-voice/src/main/java/org/bigbluebutton/voiceconf/red5/Application.java index f7c16faf58..7521484f37 100755 --- a/bbb-voice/src/main/java/org/bigbluebutton/voiceconf/red5/Application.java +++ b/bbb-voice/src/main/java/org/bigbluebutton/voiceconf/red5/Application.java @@ -85,7 +85,7 @@ public class Application extends MultiThreadedApplicationAdapter { @Override public boolean appConnect(IConnection conn, Object[] params) { - if(params.length != 4) { + if(params.length != 5) { log.error("Invalid number of parameters. param length=" + params.length); return false; } @@ -94,6 +94,7 @@ public class Application extends MultiThreadedApplicationAdapter { String userId = ((String) params[1]).toString(); String username = ((String) params[2]).toString(); String authToken = ((String) params[3]).toString(); + String clientConnId = ((String) params[4]).toString(); if (StringUtils.isEmpty(meetingId)) { log.error("Invalid meetingId parameter."); @@ -122,6 +123,7 @@ public class Application extends MultiThreadedApplicationAdapter { Red5.getConnectionLocal().setAttribute("MEETING_ID", meetingId); Red5.getConnectionLocal().setAttribute("USERID", userId); Red5.getConnectionLocal().setAttribute("USERNAME", username); + Red5.getConnectionLocal().setAttribute("CLIENT_CONN_ID", clientConnId); log.info("{} [clientid={}] has connected to the voice conf app.", username + "[uid=" + userId + "]", clientId); log.info("[clientid={}] connected from {}.", clientId, remoteHost + ":" + remotePort); @@ -137,6 +139,7 @@ public class Application extends MultiThreadedApplicationAdapter { logData.put("meetingId", meetingId); logData.put("connType", connType); logData.put("connId", connId); + logData.put("clientConnId", clientConnId); logData.put("userId", userId); logData.put("username", userFullname); logData.put("event", "user_joining_bbb_voice"); @@ -175,11 +178,13 @@ public class Application extends MultiThreadedApplicationAdapter { String connType = getConnectionType(Red5.getConnectionLocal().getType()); String userFullname = username; String connId = Red5.getConnectionLocal().getSessionId(); + String clientConnId = conn.getAttribute("CLIENT_CONN_ID").toString(); Map<String, Object> logData = new HashMap<String, Object>(); logData.put("meetingId", getMeetingId()); logData.put("connType", connType); logData.put("connId", connId); + logData.put("clientConnId", clientConnId); logData.put("userId", userId); logData.put("username", userFullname); logData.put("event", "user_leaving_bbb_voice"); diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/BigBlueButtonApplication.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/BigBlueButtonApplication.java index bc65276935..f484d6fc96 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/BigBlueButtonApplication.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/BigBlueButtonApplication.java @@ -139,7 +139,7 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter { @Override public boolean roomConnect(IConnection connection, Object[] params) { - if(params.length != 10) { + if(params.length != 11) { log.error("Invalid number of parameters. param length=" + params.length); return false; } @@ -167,6 +167,7 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter { } String authToken = ((String) params[9]).toString(); + String clientConnId = ((String) params[10]).toString(); String userId = internalUserID; String sessionId = Red5.getConnectionLocal().getSessionId(); @@ -178,7 +179,8 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter { connection.setAttribute("INTERNAL_USER_ID", internalUserID); connection.setAttribute("USER_SESSION_ID", sessionId); connection.setAttribute("TIMESTAMP", System.currentTimeMillis()); - + connection.setAttribute("CLIENT_CONN_ID", clientConnId); + String meetingId = bbbSession.getRoom(); String userFullname = bbbSession.getUsername(); @@ -192,6 +194,7 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter { logData.put("meetingId", meetingId); logData.put("connType", connType); logData.put("connId", connId); + logData.put("clientConnId", clientConnId); logData.put("clientId", clientId); logData.put("remoteAddress", remoteHost + ":" + remotePort); logData.put("userId", userId); @@ -242,11 +245,13 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter { String connId = Red5.getConnectionLocal().getSessionId(); String clientId = Red5.getConnectionLocal().getClient().getId(); String sessionId = CONN + userId; - + String clientConnId = conn.getAttribute("CLIENT_CONN_ID").toString(); + Map<String, Object> logData = new HashMap<String, Object>(); logData.put("meetingId", meetingId); logData.put("connType", connType); logData.put("connId", connId); + logData.put("clientConnId", clientConnId); logData.put("clientId", clientId); logData.put("remoteAddress", remoteHost + ":" + remotePort); logData.put("sessionId", sessionId); diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as b/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as index 702c192a37..e1444beb7a 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as @@ -308,6 +308,11 @@ package org.bigbluebutton.core logData.user = UsersUtil.getUserData(); } logData.sessionToken = getUserSession(); + logData.connections = BBB.initConnectionManager().getConnectionIds(); + + var now:Date = new Date(); + logData.clientTimeUTC = now.getTime(); + logData.clientTZOffsetInMin = now.getTimezoneOffset(); return logData; } diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/managers/ConnectionManager.as b/bigbluebutton-client/src/org/bigbluebutton/core/managers/ConnectionManager.as index aede051109..4517eb6a32 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/core/managers/ConnectionManager.as +++ b/bigbluebutton-client/src/org/bigbluebutton/core/managers/ConnectionManager.as @@ -18,6 +18,7 @@ */ package org.bigbluebutton.core.managers { import flash.net.NetConnection; + import org.bigbluebutton.core.Options; import org.bigbluebutton.main.model.options.PortTestOptions; import org.bigbluebutton.main.model.users.IMessageListener; @@ -25,6 +26,11 @@ package org.bigbluebutton.core.managers { public class ConnectionManager { private var connDelegate:NetConnectionDelegate; + + private var _videoConnId:String = ""; + private var _voiceConnId:String = ""; + private var _screenshareConnId:String = ""; + private var _appsConnId:String = ""; private var _isTunnelling:Boolean = false; @@ -34,11 +40,46 @@ package org.bigbluebutton.core.managers { connDelegate = new NetConnectionDelegate(); } + public function getConnectionIds():Array { + return new Array(_appsConnId, _videoConnId, _screenshareConnId, _voiceConnId); + } + + public function set appsConnId(id:String):void { + _appsConnId = "app_" + id; + } + public function get appsConnId():String { + return _appsConnId; + } + + public function set videoConnId(id:String):void { + _videoConnId = "vid_" + id; + } + + public function get videoConnId():String { + return _videoConnId; + } + + public function set screenshareConnId(id:String):void { + _screenshareConnId = "scr_" + id; + } + + public function get screenshareConnId():String { + return _screenshareConnId; + } + + public function set voiceConnId(id:String):void { + _voiceConnId = "voi_" + id; + } + + public function get voiceConnId():String { + return _voiceConnId; + } + public function get connection():NetConnection { return connDelegate.connection; } - + public function connect():void { connDelegate.connect(); } diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/PortTest.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/PortTest.as index 394535646c..a75c08345e 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/PortTest.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/PortTest.as @@ -179,7 +179,7 @@ package org.bigbluebutton.main.model LOGGER.debug("Connecting PORT TEST = " + this.baseURI); // Create connection with the server. nc.connect( this.baseURI, "portTestMeetingId-" + curTime, - "portTestDummyUserId-" + curTime, "portTestDummyAuthToken"); + "portTestDummyUserId-" + curTime, "portTestDummyAuthToken", "portTest-" + curTime); status = "Connecting..."; } catch( e : ArgumentError ) { diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as index a5c2f1a6f1..8ce2bdf956 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as @@ -398,6 +398,8 @@ package org.bigbluebutton.main.model.users public function connect():void { var intMeetingId: String = LiveMeeting.inst().meeting.internalId; + var connId:String = ConnUtil.generateConnId(); + BBB.initConnectionManager().appsConnId = connId; try { var appURL:String = _applicationOptions.uri; @@ -454,7 +456,7 @@ package org.bigbluebutton.main.model.users intMeetingId, voiceConf, recorded, extUserId, intUserId, muteOnStart, - guest, authToken); + guest, authToken, BBB.initConnectionManager().appsConnId); } catch(e:ArgumentError) { // Invalid parameters. diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/ConnectionManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/ConnectionManager.as index 08ccd6620a..5dd8ac271b 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/ConnectionManager.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/ConnectionManager.as @@ -124,8 +124,12 @@ package org.bigbluebutton.modules.phone.managers { netConnection.addEventListener( NetStatusEvent.NET_STATUS , netStatus ); netConnection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); + var connId:String = ConnUtil.generateConnId(); + BBB.initConnectionManager().voiceConnId = connId; + var authToken: String = LiveMeeting.inst().me.authToken; - netConnection.connect(uri, meetingId, externUserId, username, authToken); + netConnection.connect(uri, meetingId, externUserId, username, authToken, + BBB.initConnectionManager().voiceConnId); } if (reconnecting && !amIListenOnly) { handleConnectionSuccess(); diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/red5/Connection.as b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/red5/Connection.as index 4612e26a07..476900de66 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/red5/Connection.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/red5/Connection.as @@ -19,22 +19,24 @@ package org.bigbluebutton.modules.screenshare.services.red5 { import com.asfusion.mate.events.Dispatcher; + import flash.events.NetStatusEvent; import flash.events.SecurityErrorEvent; import flash.net.NetConnection; import flash.net.ObjectEncoding; import flash.net.Responder; + import org.as3commons.logging.api.ILogger; import org.as3commons.logging.api.getClassLogger; import org.bigbluebutton.core.BBB; - import org.bigbluebutton.core.Options; + import org.bigbluebutton.core.Options; import org.bigbluebutton.core.UsersUtil; import org.bigbluebutton.core.managers.ReconnectionManager; import org.bigbluebutton.main.events.BBBEvent; import org.bigbluebutton.modules.screenshare.events.ViewStreamEvent; import org.bigbluebutton.modules.screenshare.model.ScreenshareModel; - import org.bigbluebutton.modules.screenshare.model.ScreenshareOptions; - import org.bigbluebutton.util.ConnUtil; + import org.bigbluebutton.modules.screenshare.model.ScreenshareOptions; + import org.bigbluebutton.util.ConnUtil; public class Connection { private static const LOGGER:ILogger = getClassLogger(Connection); @@ -84,6 +86,9 @@ package org.bigbluebutton.modules.screenshare.services.red5 { LOGGER.debug("SCREENSHARE CONNECT tunnel = FALSE " + "url=" + ssAppUrl); } + var connId:String = ConnUtil.generateConnId(); + BBB.initConnectionManager().screenshareConnId = connId; + netConnection.client = this; netConnection.addEventListener( NetStatusEvent.NET_STATUS , netStatusHandler); netConnection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); @@ -245,6 +250,7 @@ package org.bigbluebutton.modules.screenshare.services.red5 { var message:Object = new Object(); message["meetingId"] = UsersUtil.getInternalMeetingID(); message["userId"] = UsersUtil.getMyUserID(); + message["clientConnId"] = BBB.initConnectionManager().screenshareConnId; sendMessage("screenshare.setUserId", function(result:String):void { // On successful result LOGGER.debug(result); diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/business/VideoProxy.as b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/business/VideoProxy.as index 26a92a28ec..404aa54876 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/business/VideoProxy.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/business/VideoProxy.as @@ -108,12 +108,15 @@ package org.bigbluebutton.modules.videoconf.business LOGGER.debug("VIDEO CONNECT tunnel = FALSE " + "url=" + videoConnUrl); } + var connId:String = ConnUtil.generateConnId(); + BBB.initConnectionManager().videoConnId = connId; + videoConnUrl = videoConnUrl + "/" + UsersUtil.getInternalMeetingID(); var authToken: String = LiveMeeting.inst().me.authToken; nc.objectEncoding = flash.net.ObjectEncoding.AMF3; nc.connect(videoConnUrl, UsersUtil.getInternalMeetingID(), - UsersUtil.getMyUserID(), authToken); + UsersUtil.getMyUserID(), authToken, BBB.initConnectionManager().videoConnId); } private function onAsyncError(event:AsyncErrorEvent):void{ diff --git a/bigbluebutton-client/src/org/bigbluebutton/util/ConnUtil.as b/bigbluebutton-client/src/org/bigbluebutton/util/ConnUtil.as index c79aea4c97..65bd3ce17b 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/util/ConnUtil.as +++ b/bigbluebutton-client/src/org/bigbluebutton/util/ConnUtil.as @@ -14,5 +14,21 @@ package org.bigbluebutton.util var result:Array = pattern.exec(appURL); return result; } + + private static function generateRandomString(strlen:Number):String{ + var chars:String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + var num_chars:Number = chars.length - 1; + var randomChar:String = ""; + + for (var i:Number = 0; i < strlen; i++){ + randomChar += chars.charAt(Math.floor(Math.random() * num_chars)); + } + return randomChar; + } + + public static function generateConnId():String { + return generateRandomString(15); + } + } } \ No newline at end of file -- GitLab