From 2ae55432fdf98c5246992c7ff8845a323b948afd Mon Sep 17 00:00:00 2001
From: Anton Georgiev <anto.georgiev@gmail.com>
Date: Fri, 29 Jul 2016 16:16:55 +0000
Subject: [PATCH] deskshare transition to webrtc screenshare changes

---
 .../org/bigbluebutton/core/LiveMeeting.scala    | 12 ++++++++----
 .../voice/freeswitch/ESLEventListener.java      | 16 +++++++++++-----
 .../freeswitch/VoiceConferenceService.scala     |  5 +++--
 .../resources/prod/lib/verto_extension.js       |  3 +++
 .../screenshare/managers/ScreenshareManager.as  |  4 ++--
 .../services/red5/WebRTCConnection.as           |  4 ++--
 .../components/WebRTCDesktopPublishWindow.mxml  |  3 +++
 .../modules/users/services/MessageReceiver.as   |  6 ++++--
 .../videobroadcast/set-perm-video-broadcast.sh  | 17 +++++++++++++++++
 9 files changed, 53 insertions(+), 17 deletions(-)
 create mode 100644 video-broadcast/src/main/java/org/bigbluebutton/app/videobroadcast/set-perm-video-broadcast.sh

diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/LiveMeeting.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/LiveMeeting.scala
index 7a7cb6b4cb..8d5e313e3f 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/LiveMeeting.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/LiveMeeting.scala
@@ -183,7 +183,8 @@ class LiveMeeting(val mProps: MeetingProperties,
   }
 
   def handleDeskShareStoppedRequest(msg: DeskShareStoppedRequest): Unit = {
-    log.info("handleDeskShareStoppedRequest: dsStarted=" + meetingModel.getDeskShareStarted())
+    log.info("handleDeskShareStoppedRequest: dsStarted=" + meetingModel.getDeskShareStarted() +
+      " URL:" + meetingModel.getRTMPBroadcastingUrl())
 
     // Tell FreeSwitch to stop broadcasting to RTMP
     outGW.send(new DeskShareStopRTMPBroadcast(msg.conferenceName, meetingModel.getRTMPBroadcastingUrl()))
@@ -192,7 +193,8 @@ class LiveMeeting(val mProps: MeetingProperties,
   }
 
   def handleDeskShareRTMPBroadcastStartedRequest(msg: DeskShareRTMPBroadcastStartedRequest): Unit = {
-    log.info("handleDeskShareRTMPBroadcastStartedRequest: isBroadcastingRTMP=" + meetingModel.isBroadcastingRTMP())
+    log.info("handleDeskShareRTMPBroadcastStartedRequest: isBroadcastingRTMP=" + meetingModel.isBroadcastingRTMP() +
+      " URL:" + meetingModel.getRTMPBroadcastingUrl())
 
     // only valid if not broadcasting yet
     if (!meetingModel.isBroadcastingRTMP()) {
@@ -210,7 +212,8 @@ class LiveMeeting(val mProps: MeetingProperties,
   }
 
   def handleDeskShareRTMPBroadcastStoppedRequest(msg: DeskShareRTMPBroadcastStoppedRequest): Unit = {
-    log.info("handleDeskShareRTMPBroadcastStoppedRequest: isBroadcastingRTMP=" + meetingModel.isBroadcastingRTMP())
+    log.info("handleDeskShareRTMPBroadcastStoppedRequest: isBroadcastingRTMP=" + meetingModel
+      .isBroadcastingRTMP() + " URL:" + meetingModel.getRTMPBroadcastingUrl())
 
     // only valid if currently broadcasting
     if (meetingModel.isBroadcastingRTMP()) {
@@ -227,7 +230,8 @@ class LiveMeeting(val mProps: MeetingProperties,
 
   def handleDeskShareGetDeskShareInfoRequest(msg: DeskShareGetDeskShareInfoRequest): Unit = {
 
-    log.info("handleDeskShareGetDeskShareInfoRequest: " + msg.conferenceName + "isBroadcasting=" + meetingModel.isBroadcastingRTMP())
+    log.info("handleDeskShareGetDeskShareInfoRequest: " + msg.conferenceName + "isBroadcasting="
+      + meetingModel.isBroadcastingRTMP() + " URL:" + meetingModel.getRTMPBroadcastingUrl())
     if (meetingModel.isBroadcastingRTMP()) {
       // if the meeting has an ongoing WebRTC Deskshare session, send a notification
       outGW.send(new DeskShareNotifyASingleViewer(mProps.meetingID, msg.requesterID, meetingModel.getRTMPBroadcastingUrl(),
diff --git a/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/ESLEventListener.java b/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/ESLEventListener.java
index cea28a7494..a8c45063fd 100755
--- a/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/ESLEventListener.java
+++ b/akka-bbb-fsesl/src/main/java/org/bigbluebutton/freeswitch/voice/freeswitch/ESLEventListener.java
@@ -66,9 +66,6 @@ public class ESLEventListener implements IEslEventListener {
 
         String voiceUserId = callerIdName;
 
-        System.out.println("User joined voice conference, user=[" + callerIdName + "], conf=[" +
-                confName + "] callerId=[" + callerId + "]");
-
         Matcher gapMatcher = GLOBAL_AUDION_PATTERN.matcher(callerIdName);
         if (gapMatcher.matches()) {
             System.out.println("Ignoring GLOBAL AUDIO USER [" + callerIdName + "]");
@@ -78,6 +75,8 @@ public class ESLEventListener implements IEslEventListener {
         // (WebRTC) Deskstop sharing conferences' name is of the form ddddd-DESKSHARE
         // Voice conferences' name is of the form ddddd
         if (confName.endsWith(DESKSHARE_CONFERENCE_NAME_SUFFIX)) {
+            System.out.println("User joined deskshare conference, user=[" + callerIdName + "], " +
+                    "conf=[" + confName + "] callerId=[" + callerId + "]");
             DeskShareStartedEvent dsStart = new DeskShareStartedEvent(confName, callerId, callerIdName);
             conferenceEventListener.handleConferenceEvent(dsStart);
         } else {
@@ -87,6 +86,9 @@ public class ESLEventListener implements IEslEventListener {
                 callerIdName = matcher.group(2).trim();
             }
 
+            System.out.println("User joined voice conference, user=[" + callerIdName + "], conf=[" +
+                    confName + "] callerId=[" + callerId + "]");
+
             VoiceUserJoinedEvent pj = new VoiceUserJoinedEvent(voiceUserId, memberId.toString(), confName, callerId, callerIdName, muted, speaking, "");
             conferenceEventListener.handleConferenceEvent(pj);
         }
@@ -95,16 +97,19 @@ public class ESLEventListener implements IEslEventListener {
     @Override
     public void conferenceEventLeave(String uniqueId, String confName, int confSize, EslEvent event) {      
         Integer memberId = this.getMemberIdFromEvent(event);
-        System.out.println("User left voice conference, user=[" + memberId.toString() + "], conf=[" + confName + "]");
         String callerId = this.getCallerIdFromEvent(event);
         String callerIdName = this.getCallerIdNameFromEvent(event);
 
         // (WebRTC) Deskstop sharing conferences' name is of the form ddddd-DESKSHARE
         // Voice conferences' name is of the form ddddd
         if (confName.endsWith(DESKSHARE_CONFERENCE_NAME_SUFFIX)) {
+            System.out.println("User left deskshare conference, user=[" + memberId.toString() +
+                    "], " + "conf=[" + confName + "]");
             DeskShareEndedEvent dsEnd = new DeskShareEndedEvent(confName, callerId, callerIdName);
             conferenceEventListener.handleConferenceEvent(dsEnd);
         } else {
+            System.out.println("User left voice conference, user=[" + memberId.toString() + "], " +
+                    "conf=[" + confName + "]");
             VoiceUserLeftEvent pl = new VoiceUserLeftEvent(memberId.toString(), confName);
             conferenceEventListener.handleConferenceEvent(pl);
         }
@@ -224,7 +229,8 @@ public class ESLEventListener implements IEslEventListener {
     
     @Override
     public void eventReceived(EslEvent event) {
-        System.out.println("ESL Event Listener received event=[" + event.getEventName() + "]");
+        System.out.println("ESL Event Listener received event=[" + event.getEventName() + "]" +
+                event.getEventHeaders().toString());
 //        if (event.getEventName().equals(FreeswitchHeartbeatMonitor.EVENT_HEARTBEAT)) {
 ////           setChanged();
 //           notifyObservers(event);
diff --git a/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/freeswitch/VoiceConferenceService.scala b/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/freeswitch/VoiceConferenceService.scala
index e4e5195c53..fc0375dc84 100755
--- a/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/freeswitch/VoiceConferenceService.scala
+++ b/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/freeswitch/VoiceConferenceService.scala
@@ -23,13 +23,14 @@ class VoiceConferenceService(sender: RedisPublisher) extends IVoiceConferenceSer
 
   def userJoinedVoiceConf(voiceConfId: String, voiceUserId: String, userId: String, callerIdName: String,
     callerIdNum: String, muted: java.lang.Boolean, talking: java.lang.Boolean, avatarURL: String) {
-    //    println("******** FreeswitchConferenceService received voiceUserJoined vui=[" + userId + "] wui=[" + webUserId + "]")
+    println("******** FreeswitchConferenceService received voiceUserJoined vui=[" +
+      userId + "] wui=[" + voiceUserId + "]")
     val msg = new UserJoinedVoiceConfMessage(voiceConfId, voiceUserId, userId, callerIdName, callerIdNum, muted, talking, avatarURL)
     sender.publish(FROM_VOICE_CONF_SYSTEM_CHAN, msg.toJson())
   }
 
   def userLeftVoiceConf(voiceConfId: String, voiceUserId: String) {
-    //    println("******** FreeswitchConferenceService received voiceUserLeft vui=[" + userId + "] conference=[" + conference + "]")
+    println("******** FreeswitchConferenceService received voiceUserLeft vui=[" + voiceUserId + "] conference=[" + voiceConfId + "]")
     val msg = new UserLeftVoiceConfMessage(voiceConfId, voiceUserId)
     sender.publish(FROM_VOICE_CONF_SYSTEM_CHAN, msg.toJson())
   }
diff --git a/bigbluebutton-client/resources/prod/lib/verto_extension.js b/bigbluebutton-client/resources/prod/lib/verto_extension.js
index 06c7b84894..dd29873862 100755
--- a/bigbluebutton-client/resources/prod/lib/verto_extension.js
+++ b/bigbluebutton-client/resources/prod/lib/verto_extension.js
@@ -8,6 +8,7 @@ Verto = function (
   onFail = null,
   chromeExtension = null) {
 
+  voiceBridge += "-DESKSHARE";
   this.cur_call = null;
   this.share_call = null;
   this.vertoHandle;
@@ -508,3 +509,5 @@ window.vertoExtensionGetChromeExtensionStatus = function (extensionid, callback)
   callback = Verto.normalizeCallback(callback);
   getChromeExtensionStatus(extensionid, callback);
 };
+
+
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/ScreenshareManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/ScreenshareManager.as
index 43a5092c4a..caf4c387a4 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/ScreenshareManager.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/ScreenshareManager.as
@@ -25,10 +25,10 @@ package org.bigbluebutton.modules.screenshare.managers
 	import org.bigbluebutton.core.UsersUtil;
 	import org.bigbluebutton.main.events.MadePresenterEvent;
 	import org.bigbluebutton.modules.screenshare.events.IsSharingScreenEvent;
-	import org.bigbluebutton.modules.screenshare.events.ShareStartRequestResponseEvent;
+	import org.bigbluebutton.modules.screenshare.events.ShareStartRequestResponseEvent;
 	import org.bigbluebutton.modules.screenshare.events.StartShareRequestFailedEvent;
 	import org.bigbluebutton.modules.screenshare.events.StartShareRequestSuccessEvent;
-	import org.bigbluebutton.modules.deskshare.events.UseJavaModeCommand;
+	import org.bigbluebutton.modules.screenshare.events.UseJavaModeCommand;
 	import org.bigbluebutton.modules.screenshare.events.StreamStartedEvent;
 	import org.bigbluebutton.modules.screenshare.events.ViewStreamEvent;
 	import org.bigbluebutton.modules.screenshare.model.ScreenshareModel;
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/red5/WebRTCConnection.as b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/red5/WebRTCConnection.as
index a1cb51dc8d..a6965b457b 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/red5/WebRTCConnection.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/red5/WebRTCConnection.as
@@ -73,7 +73,7 @@ package org.bigbluebutton.modules.screenshare.services.red5
 						event.videoHeight = height;
 						dispatcher.dispatchEvent(event); //TODO why?
 					} else {
-						LOGGER.debug("No deskshare stream being published");
+						LOGGER.debug("No screenshare stream being published");
 						var connEvent:WebRTCConnectionEvent = new WebRTCConnectionEvent();
 						connEvent.status = WebRTCConnectionEvent.NO_DESKSHARE_STREAM;
 						dispatcher.dispatchEvent(connEvent); //TODO why?
@@ -286,7 +286,7 @@ package org.bigbluebutton.modules.screenshare.services.red5
 			event.status = WebRTCConnectionEvent.CHECK_FOR_DESKSHARE_STREAM;
 			dispatcher.dispatchEvent(event); // TODO anton send to akka-bbb-apps
 
-			nc.call("deskshare.checkIfStreamIsPublishing", responder, room);
+			nc.call("screenshare.checkIfStreamIsPublishing", responder, room);
 		}
 
 		public function disconnect():void{
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/view/components/WebRTCDesktopPublishWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/view/components/WebRTCDesktopPublishWindow.mxml
index c830398981..ba94f6f421 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/view/components/WebRTCDesktopPublishWindow.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/view/components/WebRTCDesktopPublishWindow.mxml
@@ -178,6 +178,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 				stream = rtmp.substring(rtmp.lastIndexOf('/')+1, rtmp.length);
 				LOGGER.debug("DesktopPublishWindow::startVideo meetingurl=[{0}] and stream=[{1}]",[meetingUrl, stream]);
 
+				JSLog.warn("DesktopPublishWindow::startVideo meetingurl= ",meetingUrl);
+				JSLog.warn("DesktopPublishWindow::startVideo stream=", stream);
+
 				connection = new NetConnection();
 				connection.proxyType = "best";
 				connection.objectEncoding = ObjectEncoding.AMF0;
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as b/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as
index 2892eeb7f0..04a0eb0151 100644
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as
@@ -53,8 +53,8 @@ package org.bigbluebutton.modules.users.services
   import org.bigbluebutton.modules.present.events.RemovePresentationEvent;
   import org.bigbluebutton.modules.present.events.UploadEvent;
   import org.bigbluebutton.modules.users.events.MeetingMutedEvent;
-  import org.bigbluebutton.modules.deskshare.events.ViewStreamEvent;
-  import org.bigbluebutton.modules.deskshare.events.WebRTCViewStreamEvent;
+  import org.bigbluebutton.modules.screenshare.events.ViewStreamEvent;
+  import org.bigbluebutton.modules.screenshare.events.WebRTCViewStreamEvent;
   import org.bigbluebutton.main.api.JSLog;
   import org.bigbluebutton.modules.users.events.MeetingMutedEvent;
 
@@ -175,6 +175,8 @@ package org.bigbluebutton.modules.users.services
 
     private function handleDeskShareRTMPBroadcastNotification(msg:Object):void {
       LOGGER.debug("*** handleDeskShareRTMPBroadcastNotification **** \n", [msg]);
+      JSLog.warn("*** handleDeskShareRTMPBroadcastNotification **** url=", msg.rtmpUrl);
+      JSLog.warn("*** handleDeskShareRTMPBroadcastNotification **** broadcasting=", msg.broadcasting);
 
       var event:WebRTCViewStreamEvent;
       if (msg.broadcasting) {
diff --git a/video-broadcast/src/main/java/org/bigbluebutton/app/videobroadcast/set-perm-video-broadcast.sh b/video-broadcast/src/main/java/org/bigbluebutton/app/videobroadcast/set-perm-video-broadcast.sh
new file mode 100644
index 0000000000..a540f868ae
--- /dev/null
+++ b/video-broadcast/src/main/java/org/bigbluebutton/app/videobroadcast/set-perm-video-broadcast.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+
+cd /var/lib/red5/webapps
+echo 'Starting with:'
+ls -dl video-broadcast
+sudo chown root:root video-broadcast
+sudo chmod -R 777 video-broadcast
+
+cd video-broadcast
+
+ls -al
+sudo chown root:root META-INF
+sudo chown red5:red5 streams
+sudo chown root:root WEB-INF
+
+echo 'After the procedure:'
+ls -al
-- 
GitLab