You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2015/12/02 06:49:09 UTC

svn commit: r1717571 - in /openmeetings/branches/3.1.x: openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ openmeetings-core/src/main/java/org/apache/openmeetin...

Author: solomax
Date: Wed Dec  2 05:49:09 2015
New Revision: 1717571

URL: http://svn.apache.org/viewvc?rev=1717571&view=rev
Log:
[OPENMEETINGS-1286] screen sharing is fixed

Added:
    openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/StartSharingEventBehavior.java
Removed:
    openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/servlet/outputhandler/ScreenController.java
Modified:
    openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ChatService.java
    openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
    openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java
    openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/UserService.java
    openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/WhiteBoardService.java
    openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
    openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/util/SessionVariablesUtil.java
    openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
    openmeetings/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
    openmeetings/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Client.java
    openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/base/hibernate/hibRtmpConnection.lzx
    openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/base/mainMethods.lzx
    openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/base/remote/rtmpConnection.lzx
    openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/interviewuserlist/interviewUserList.lzx
    openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/moderation/moderationPanel.lzx
    openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/participants/participants.lzx
    openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/restricted/restrictedUserList.lzx
    openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/whiteboard/fixedFileExplorerWhiteBoard.lzx
    openmeetings/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
    openmeetings/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
    openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
    openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java
    openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
    openmeetings/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/poll/TestClientListManager.java
    openmeetings/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java

Modified: openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ChatService.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ChatService.java?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ChatService.java (original)
+++ openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ChatService.java Wed Dec  2 05:49:09 2015
@@ -144,7 +144,7 @@ public class ChatService implements IPen
 			hsm.put("message", newMessage);
 			String publicSID = "" + messageMap.get(6);
 			if (!publicSID.equals(currentClient.getPublicSID())) {
-				hsm.put("client", sessionManager.getClientByPublicSID("" + messageMap.get(6), false, null));
+				hsm.put("client", sessionManager.getClientByPublicSID("" + messageMap.get(6), null));
 				//need to remove unconfirmed chat message if any
 				for (int i = myChatList.size() - 1; i > -1; --i) {
 					Client msgClient = (Client)myChatList.get(i).get("client");
@@ -180,9 +180,6 @@ public class ChatService implements IPen
 						if (rcl == null) {
 							continue;
 						}
-						if (rcl.isAvClient()) {
-							continue;
-						}
 						if (rcl.isScreenClient()) {
     						continue;
     					}
@@ -235,9 +232,6 @@ public class ChatService implements IPen
 						if (SessionVariablesUtil.isScreenClient(client)) {
 							// screen sharing clients do not receive events
 							continue;
-						} else if (SessionVariablesUtil.isAVClient(client)) {
-							// AVClients or potential AVClients do not receive events
-							continue;
 						}
 
 						if (SessionVariablesUtil.getPublicSID(client).equals(publicSID)

Modified: openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java (original)
+++ openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java Wed Dec  2 05:49:09 2015
@@ -204,10 +204,10 @@ public class MobileService {
 				Client c = sessionManager.getClientByStreamId(streamId, null);
 				if (c == null) {
 					c = sessionManager.addClientListItem(streamId, conn.getScope().getName(), conn.getRemotePort(),
-						conn.getRemoteAddress(), "", false, null);
+						conn.getRemoteAddress(), "", null);
 				}
 				
-				SessionVariablesUtil.initClient(conn.getClient(), false, c.getPublicSID());
+				SessionVariablesUtil.initClient(conn.getClient(), c.getPublicSID());
 				c.setUserId(u.getId());
 				c.setFirstname(u.getFirstname());
 				c.setLastname(u.getLastname());
@@ -235,7 +235,7 @@ public class MobileService {
 		for (IConnection conn : current.getScope().getClientConnections()) {
 			if (conn != null && conn instanceof IServiceCapableConnection) {
 				Client c = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
-				if ((c.isMobile() || c.isAvClient()) && !Strings.isEmpty(c.getAvsettings()) && !c.isScreenClient()) {
+				if (!Strings.isEmpty(c.getAvsettings()) && !c.isScreenClient()) {
 					Map<String, Object> map = new Hashtable<String, Object>();
 					add(map, "streamId", c.getStreamid());
 					add(map, "broadCastId", c.getBroadCastID());

Modified: openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java (original)
+++ openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/RecordingService.java Wed Dec  2 05:49:09 2015
@@ -138,9 +138,7 @@ public class RecordingService implements
 						Client rcl = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
 
 						// Send every user a notification that the recording did start
-						if (!rcl.isAvClient()) {
-							((IServiceCapableConnection) conn).invoke("startedRecording", new Object[] { client }, this);
-						}
+						((IServiceCapableConnection) conn).invoke("startedRecording", new Object[] { client }, this);
 
 						// If its the recording client we need another type of Meta Data
 						if (rcl.isScreenClient()) {
@@ -159,8 +157,7 @@ public class RecordingService implements
 
 								sessionManager.updateClientByStreamId(rcl.getStreamid(), rcl, false, null);
 							}
-						} else if ((rcl.isMobile() || rcl.isAvClient())
-								&& (rcl.getAvsettings().equals("av") || rcl.getAvsettings().equals("a") || rcl.getAvsettings().equals("v"))) {
+						} else if (rcl.getAvsettings().equals("av") || rcl.getAvsettings().equals("a") || rcl.getAvsettings().equals("v")) {
 							// if the user does publish av, a, v
 							// But we only record av or a, video only is not interesting
 							String broadcastId = "" + rcl.getBroadCastID();
@@ -329,8 +326,7 @@ public class RecordingService implements
 								// Update Meta Data
 								metaDataDao.updateEndDate(rcl.getRecordingMetaDataId(), new Date());
 							}
-						} else if ((rcl.isMobile() || rcl.isAvClient())
-								&& (rcl.getAvsettings().equals("av") || rcl.getAvsettings().equals("a") || rcl.getAvsettings().equals("v"))) {
+						} else if (rcl.getAvsettings().equals("av") || rcl.getAvsettings().equals("a") || rcl.getAvsettings().equals("v")) {
 
 							stopRecordingShow(conn, String.valueOf(rcl.getBroadCastID()).toString(), rcl.getRecordingMetaDataId());
 
@@ -418,8 +414,7 @@ public class RecordingService implements
 					metaDataDao.updateEndDate(rcl.getRecordingMetaDataId(), new Date());
 				}
 
-			} else if (rcl.isAvClient()
-					&& (rcl.getAvsettings().equals("a") || rcl.getAvsettings().equals("v") || rcl.getAvsettings().equals("av"))) {
+			} else if (rcl.getAvsettings().equals("a") || rcl.getAvsettings().equals("v") || rcl.getAvsettings().equals("av")) {
 
 				// FIXME: Is there really a need to stop it manually if the user
 				// just stops the stream?
@@ -459,8 +454,7 @@ public class RecordingService implements
 
 					sessionManager.updateClientByStreamId(rcl.getStreamid(), rcl, false, null);
 				}
-			} else if (rcl.isAvClient()
-					&& (rcl.getAvsettings().equals("av") || rcl.getAvsettings().equals("a") || rcl.getAvsettings().equals("v"))) {
+			} else if (rcl.getAvsettings().equals("av") || rcl.getAvsettings().equals("a") || rcl.getAvsettings().equals("v")) {
 				// if the user does publish av, a, v
 				// But we only record av or a, video only is not interesting
 

Modified: openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/UserService.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/UserService.java?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/UserService.java (original)
+++ openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/UserService.java Wed Dec  2 05:49:09 2015
@@ -297,7 +297,7 @@ public class UserService implements IUse
 			Long userId = sessiondataDao.checkSession(SID);
 			// users only
 			if (AuthLevelUtil.hasUserLevel(userDao.getRights(userId))) {
-				Client rcl = sessionManager.getClientByPublicSID(publicSID, false, null);
+				Client rcl = sessionManager.getClientByPublicSID(publicSID, null);
 
 				if (rcl == null) {
 					return true;

Modified: openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/WhiteBoardService.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/WhiteBoardService.java?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/WhiteBoardService.java (original)
+++ openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/WhiteBoardService.java Wed Dec  2 05:49:09 2015
@@ -160,7 +160,7 @@ public class WhiteBoardService implement
 			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
 
 				if (currentClient.getIsMod()) {
-					Client rcl = sessionManager.getClientByPublicSID(publicSID, false, null);
+					Client rcl = sessionManager.getClientByPublicSID(publicSID, null);
 
 					if (rcl != null) {
 						rcl.setCanDraw(canDraw);
@@ -193,7 +193,7 @@ public class WhiteBoardService implement
 
 			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
 				if (currentClient.getIsMod()) {
-					Client rcl = sessionManager.getClientByPublicSID(publicSID, false, null);
+					Client rcl = sessionManager.getClientByPublicSID(publicSID, null);
 
 					if (rcl != null) {
 						rcl.setCanShare(canShare);
@@ -226,7 +226,7 @@ public class WhiteBoardService implement
 
 			if (AuthLevelUtil.hasUserLevel(userDao.getRights(userId))) {
 				if (currentClient.getIsMod()) {
-					Client rcl = sessionManager.getClientByPublicSID(publicSID, false, null);
+					Client rcl = sessionManager.getClientByPublicSID(publicSID, null);
 
 					if (rcl != null) {
 						rcl.setCanRemote(canRemote);
@@ -260,7 +260,7 @@ public class WhiteBoardService implement
 
 			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
 				if (currentClient.getIsMod()) {
-					Client rcl = sessionManager.getClientByPublicSID(publicSID, false, null);
+					Client rcl = sessionManager.getClientByPublicSID(publicSID, null);
 
 					if (rcl != null) {
 						rcl.setCanGiveAudio(canGiveAudio);

Modified: openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java (original)
+++ openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java Wed Dec  2 05:49:09 2015
@@ -153,10 +153,7 @@ public class ScopeApplicationAdapter ext
 		IServiceCapableConnection service = (IServiceCapableConnection) conn;
 		String streamId = conn.getClient().getId();
 		
-		boolean isAVClient = params.length == 1 ? Boolean.valueOf("" + params[0]) : false;
-
-		log.debug("### Client connected to OpenMeetings, register Client StreamId: " + streamId + " scope "
-				+ conn.getScope().getName() + " isAVClient " + isAVClient);
+		log.debug("### Client connected to OpenMeetings, register Client StreamId: " + streamId + " scope " + conn.getScope().getName());
 
 		// Set StreamId in Client
 		service.invoke("setId", new Object[] { streamId }, this);
@@ -167,16 +164,16 @@ public class ScopeApplicationAdapter ext
 		//TODO add similar code for other connections
 		if (map.containsKey("screenClient")) {
 			String parentSid = (String)map.get("parentSid");
-			Client parentClient = sessionManager.getClientByPublicSID(parentSid, false, null);
+			Client parentClient = sessionManager.getClientByPublicSID(parentSid, null);
 			if (parentClient == null) {
 				rejectClient();
 			}
 		}
 		Client rcm = sessionManager.addClientListItem(conn.getClient().getId(),
 				conn.getScope().getName(), conn.getRemotePort(),
-				conn.getRemoteAddress(), swfURL, isAVClient, null);
+				conn.getRemoteAddress(), swfURL, null);
 		
-		SessionVariablesUtil.initClient(conn.getClient(), isAVClient, rcm.getPublicSID());
+		SessionVariablesUtil.initClient(conn.getClient(), rcm.getPublicSID());
 		//TODO add similar code for other connections, merge with above block
 		if (map.containsKey("screenClient")) {
 			//TODO add check for room rights
@@ -210,7 +207,7 @@ public class ScopeApplicationAdapter ext
 			IConnection current = Red5.getConnectionLocal();
 
 			Client control = sessionManager.getClientByStreamId(current.getClient().getId(), null);
-			Client client = sessionManager.getClientByPublicSID(control.getStreamPublishName(), false, null);
+			Client client = sessionManager.getClientByPublicSID(control.getStreamPublishName(), null);
 
 			Map<String, String> returnMap = new HashMap<String, String>();
 
@@ -297,7 +294,7 @@ public class ScopeApplicationAdapter ext
 			IConnection current = Red5.getConnectionLocal();
 
 			Client control = sessionManager.getClientByStreamId(current.getClient().getId(), null);
-			Client client = sessionManager.getClientByPublicSID(control.getStreamPublishName(), false, null);
+			Client client = sessionManager.getClientByPublicSID(control.getStreamPublishName(), null);
 
 			if (client != null) {
 				boolean startRecording = Boolean.valueOf("" + map.get("startRecording"));
@@ -431,7 +428,7 @@ public class ScopeApplicationAdapter ext
 			if (currentClient == null) {
 				return false;
 			}
-			SessionVariablesUtil.initClient(c, SessionVariablesUtil.isAVClient(c), newPublicSID);
+			SessionVariablesUtil.initClient(c, newPublicSID);
 			currentClient.setPublicSID(newPublicSID);
 			sessionManager.updateClientByStreamId(c.getId(), currentClient, false, null);
 			return true;
@@ -560,11 +557,6 @@ public class ScopeApplicationAdapter ext
 								recordingService.stopRecordingShowForClient(cons, currentClient);
 							}
 							
-							//If the user was a avclient, we do not broadcast a message about that to everybody
-							if (currentClient.isAvClient()) {
-								continue;
-							}
-							
 							boolean isScreen = rcl.isScreenClient();
 							if (isScreen && currentClient.getPublicSID().equals(rcl.getStreamPublishName())) {
 								//going to terminate screen sharing started by this client
@@ -573,9 +565,6 @@ public class ScopeApplicationAdapter ext
 							} else if (isScreen) {
 								// screen sharing clients do not receive events
 								continue;
-							} else if (rcl.isAvClient()) {
-								// AVClients or potential AVClients do not receive events
-								continue;
 							}
 							
 							// Send to all connected users
@@ -622,10 +611,6 @@ public class ScopeApplicationAdapter ext
 				currentClient.setScreenPublishStarted(true);
 				sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
 			}
-			//If its an audio/video client then send the session object with the full data to everybody
-			else if (currentClient.isAvClient()) {
-				clientObjectSendToSync = sessionManager.getClientByPublicSID(currentClient.getPublicSID(), false, null);
-			}
 			
 			log.debug("newStream SEND: " + currentClient);
 
@@ -651,10 +636,6 @@ public class ScopeApplicationAdapter ext
 						log.debug("RCL getIsRecording newStream SEND");
 						recordingService.addRecordingByStreamId(current, streamid, currentClient, rcl.getRecordingId());
 					}
-					if (rcl.isAvClient()) {
-						log.debug("RCL getIsAVClient newStream SEND");
-						return true;
-					}
 					if (rcl.isScreenClient()) {
 						log.debug("RCL getIsScreenClient newStream SEND");
 						return true;
@@ -792,7 +773,7 @@ public class ScopeApplicationAdapter ext
 		try {
 			log.debug("-----------  addModerator: " + publicSID);
 
-			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, null);
 
 			if (currentClient == null) {
 				return -1L;
@@ -834,7 +815,7 @@ public class ScopeApplicationAdapter ext
 		try {
 			log.debug("-----------  removeModerator: " + publicSID);
 
-			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, null);
 
 			if (currentClient == null) {
 				return -1L;
@@ -858,7 +839,7 @@ public class ScopeApplicationAdapter ext
 		try {
 			log.debug("-----------  setBroadCastingFlag: " + publicSID);
 
-			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, null);
 
 			if (currentClient == null) {
 				return -1L;
@@ -886,7 +867,7 @@ public class ScopeApplicationAdapter ext
 			IConnection current = Red5.getConnectionLocal();
 			// String streamid = current.getClient().getId();
 
-			final Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+			final Client currentClient = sessionManager.getClientByPublicSID(publicSID, null);
 
 			if (currentClient == null) {
 				return -1L;
@@ -923,7 +904,7 @@ public class ScopeApplicationAdapter ext
 		try {
 			log.debug("-----------  switchMicMuted: " + publicSID);
 
-			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, null);
 			if (currentClient == null) {
 				return -1L;
 			}
@@ -943,7 +924,7 @@ public class ScopeApplicationAdapter ext
 
 	public Boolean getMicMutedByPublicSID(String publicSID) {
 		try {
-			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, null);
 			if (currentClient == null) {
 				return true;
 			}
@@ -973,7 +954,7 @@ public class ScopeApplicationAdapter ext
 	public synchronized Long applyForModeration(String publicSID) {
 		try {
 
-			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, null);
 
 			List<Client> currentModList = sessionManager.getCurrentModeratorByRoom(currentClient.getRoomId());
 
@@ -1037,7 +1018,7 @@ public class ScopeApplicationAdapter ext
 			IClient c = current.getClient();
 			String streamid = c.getId();
 			log.debug("-----------  setUserAVSettings {} {} {}", new Object[] {streamid, publicSID, avsettings, newMessage});
-			Client parentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+			Client parentClient = sessionManager.getClientByPublicSID(publicSID, null);
 			Client currentClient = sessionManager.getClientByStreamId(streamid, null);
 			currentClient.setAvsettings(avsettings);
 			currentClient.setRoomId(roomId);
@@ -1050,7 +1031,7 @@ public class ScopeApplicationAdapter ext
 			currentClient.setFirstname(parentClient.getFirstname());
 			currentClient.setPicture_uri(parentClient.getPicture_uri());
 			sessionManager.updateAVClientByStreamId(streamid, currentClient, null);
-			SessionVariablesUtil.initClient(c, false, publicSID);
+			SessionVariablesUtil.initClient(c, publicSID);
 
 			HashMap<String, Object> hsm = new HashMap<String, Object>();
 			hsm.put("client", currentClient);
@@ -1129,8 +1110,7 @@ public class ScopeApplicationAdapter ext
 	 * @param colorObj - some color
 	 * @return RoomStatus object
 	 */
-	public synchronized RoomStatus setRoomValues(Long roomId, Boolean becomeModerator, Boolean isSuperModerator,
-			Long groupId, String colorObj) {
+	public synchronized RoomStatus setRoomValues(Long roomId, Boolean becomeModerator, Boolean isSuperModerator, String colorObj) {
 		try {
 			log.debug("-----------  setRoomValues");
 			IConnection current = Red5.getConnectionLocal();
@@ -1138,7 +1118,6 @@ public class ScopeApplicationAdapter ext
 			Client currentClient = sessionManager.getClientByStreamId(streamid, null);
 			currentClient.setRoomId(roomId);
 			currentClient.setRoomEnter(new Date());
-			currentClient.setGroupId(groupId);
 
 			currentClient.setUsercolor(colorObj);
 
@@ -1473,7 +1452,7 @@ public class ScopeApplicationAdapter ext
 				@Override
 				public boolean filter(IConnection conn) {
 					IClient client = conn.getClient();
-					return SessionVariablesUtil.isScreenClient(client) || SessionVariablesUtil.isAVClient(client);
+					return SessionVariablesUtil.isScreenClient(client);
 				}
 			}.start();
 		} catch (Exception err) {
@@ -1699,7 +1678,6 @@ public class ScopeApplicationAdapter ext
 			public boolean filter(IConnection conn) {
 				IClient client = conn.getClient();
 				return (!sendScreen && SessionVariablesUtil.isScreenClient(client))
-						|| SessionVariablesUtil.isAVClient(client)
 						|| (!sendSelf && client.getId().equals(current.getClient().getId()));
 			}
 		}.start();
@@ -1874,7 +1852,7 @@ public class ScopeApplicationAdapter ext
 			// log.debug("webAppKeyScope "+webAppKeyScope);
 
 			// Get Room Id to send it to the correct Scope
-			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, null);
 
 			if (currentClient == null) {
 				throw new Exception("Could not Find RoomClient on List publicSID: " + publicSID);
@@ -1897,9 +1875,6 @@ public class ScopeApplicationAdapter ext
 					if (SessionVariablesUtil.isScreenClient(client)) {
 						// screen sharing clients do not receive events
 						continue;
-					} else if (SessionVariablesUtil.isAVClient(client)) {
-						// AVClients or potential AVClients do not receive events
-						continue;
 					}
 					
 					if (SessionVariablesUtil.getPublicSID(client).equals(publicSID)) {
@@ -1975,9 +1950,6 @@ public class ScopeApplicationAdapter ext
 					if (SessionVariablesUtil.isScreenClient(client)) {
 						// screen sharing clients do not receive events
 						continue;
-					} else if (SessionVariablesUtil.isAVClient(client)) {
-						// AVClients or potential AVClients do not receive events
-						continue;
 					}
 
 					((IServiceCapableConnection) conn).invoke("interviewStatus", new Object[] { interviewStatus }, this);
@@ -2216,7 +2188,7 @@ public class ScopeApplicationAdapter ext
 		currentClient.setVHeight(90);
 		currentClient.setPicture_uri("phone.png");
 		sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
-		SessionVariablesUtil.initClient(c, false, publicSID);
+		SessionVariablesUtil.initClient(c, publicSID);
 
 		sendMessageToCurrentScope("addNewUser", currentClient, false);
 	}

Modified: openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/util/SessionVariablesUtil.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/util/SessionVariablesUtil.java?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/util/SessionVariablesUtil.java (original)
+++ openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/util/SessionVariablesUtil.java Wed Dec  2 05:49:09 2015
@@ -28,29 +28,15 @@ public class SessionVariablesUtil {
 	private static final Logger log = Red5LoggerFactory.getLogger(SessionVariablesUtil.class, webAppRootKey);
 
 	private enum SESSION_VARIABLES {
-		isAVClient, // if the client connection is a audio-video only connection
 		isScreenClient, // if the client connection is from a Java Web-Start application
 		PUBLIC_SID, // the public SID of the client
 		USER_ID, // the userId of the user that is using this connection (if there is any)
 	}
 
-	public static void initClient(IClient client, boolean isAVClient, String publicSID) {
-		client.setAttribute(SESSION_VARIABLES.isAVClient.toString(), isAVClient);
+	public static void initClient(IClient client, String publicSID) {
 		client.setAttribute(SESSION_VARIABLES.PUBLIC_SID.toString(), publicSID);
 	}
 
-	public static boolean isAVClient(IClient client) {
-		try {
-			if (client.getAttribute(SESSION_VARIABLES.isAVClient.toString()) == null) {
-				throw new Exception("Connection has no publicSID client: " + client);
-			}
-			return (Boolean) client.getAttribute(SESSION_VARIABLES.isAVClient.toString());
-		} catch (Exception err) {
-			log.error("[isAVClient]", err);
-		}
-		return false;
-	}
-
 	public static String getPublicSID(IClient client) {
 		try {
 			if (client.getAttribute(SESSION_VARIABLES.PUBLIC_SID.toString()) == null) {

Modified: openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java (original)
+++ openmeetings/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java Wed Dec  2 05:49:09 2015
@@ -34,7 +34,7 @@ import org.apache.openmeetings.db.dto.ba
 import org.apache.openmeetings.db.dto.server.ClientSessionInfo;
 import org.apache.openmeetings.db.entity.room.Client;
 import org.apache.openmeetings.db.entity.server.Server;
-import org.apache.openmeetings.util.OpenmeetingsVariables;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 import org.apache.openmeetings.util.crypt.ManageCryptStyle;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
@@ -49,9 +49,7 @@ import org.springframework.beans.factory
  * 
  */
 public class SessionManager implements ISessionManager {
-	
-	protected static final Logger log = Red5LoggerFactory.getLogger(
-			SessionManager.class, OpenmeetingsVariables.webAppRootKey);
+	protected static final Logger log = Red5LoggerFactory.getLogger(SessionManager.class, webAppRootKey);
 	
 	@Autowired
 	private ServerUtil serverUtil;
@@ -75,7 +73,7 @@ public class SessionManager implements I
 		
 		public synchronized Client addClientListItem(String streamId,
 				String scopeName, Integer remotePort, String remoteAddress,
-				String swfUrl, boolean isAVClient, Server server) {
+				String swfUrl, Server server) {
 			try {
 
 				// Store the Connection into a bean and add it to the HashMap
@@ -94,7 +92,6 @@ public class SessionManager implements I
 				rcm.setSwfurl(swfUrl);
 				rcm.setIsMod(new Boolean(false));
 				rcm.setCanDraw(new Boolean(false));
-				rcm.setAvClient(isAVClient);
 
 				if (cache.containsKey(null, streamId)) {
 					log.error("Tried to add an existing Client " + streamId);
@@ -131,27 +128,20 @@ public class SessionManager implements I
 			return null;
 		}
 
-		public Client getClientByPublicSID(String publicSID, boolean isAVClient, Server server) {
+		public Client getClientByPublicSID(String publicSID, Server server) {
 			try {
-				for (Client rcl : cache.getClientsByPublicSID(server, publicSID)) {
-					if (rcl.isAvClient() != isAVClient) {
-						continue;
-					}
-					return rcl;
-				}
+				List<Client> list = cache.getClientsByPublicSID(server, publicSID);
+				return list == null || list.isEmpty() ? null : list.get(0);
 			} catch (Exception err) {
 				log.error("[getClientByPublicSID]", err);
 			}
 			return null;
 		}
 		
-		public ClientSessionInfo getClientByPublicSIDAnyServer(String publicSID, boolean isAVClient) {
+		public ClientSessionInfo getClientByPublicSIDAnyServer(String publicSID) {
 			try {
 				for (Entry<Long,List<Client>> entry : cache.getClientsByPublicSID(publicSID).entrySet()) {
 					for (Client rcl : entry.getValue()) {
-						if (rcl.isAvClient() != isAVClient) {
-							continue;
-						}
 						return new ClientSessionInfo(rcl, entry.getKey());
 					}
 				}
@@ -169,10 +159,6 @@ public class SessionManager implements I
 						continue;
 					}
 					
-					if (rcl.isAvClient()) {
-						continue;
-					}
-					
 					return rcl;
 				}
 			} catch (Exception err) {
@@ -184,7 +170,7 @@ public class SessionManager implements I
 		public synchronized Boolean updateAVClientByStreamId(String streamId, Client rcm, Server server) {
 			try {
 				// get the corresponding user session object and update the settings
-				Client rclUsual = getClientByPublicSID(rcm.getPublicSID(), false, server);
+				Client rclUsual = getClientByPublicSID(rcm.getPublicSID(), server);
 				if (rclUsual != null) {
 					rclUsual.setBroadCastID(rcm.getBroadCastID());
 					rclUsual.setAvsettings(rcm.getAvsettings());
@@ -250,9 +236,6 @@ public class SessionManager implements I
 					if (rcl.isScreenClient()) {
 						continue;
 					}
-					if (rcl.isAvClient()) {
-						continue;
-					}
 
 					// Only parse really those users out that are really a full session object
 					// and no pseudo session object like the audio/video or screen
@@ -335,13 +318,11 @@ public class SessionManager implements I
 	};
 	
 	public Client addClientListItem(String streamId, String scopeName,
-			Integer remotePort, String remoteAddress, String swfUrl,
-			boolean isAVClient, Server server) {
+			Integer remotePort, String remoteAddress, String swfUrl, Server server) {
 		if (server == null) {
 			server = serverUtil.getCurrentServer();
 		}
-		return sessionManager.addClientListItem(streamId, scopeName,
-				remotePort, remoteAddress, swfUrl, isAVClient, server);
+		return sessionManager.addClientListItem(streamId, scopeName, remotePort, remoteAddress, swfUrl, server);
 	}
 
 	public Collection<Client> getClients() {
@@ -359,19 +340,15 @@ public class SessionManager implements I
 		return sessionManager.getClientByStreamId(streamId, server);
 	}
 
-	public Client getClientByPublicSID(String publicSID, boolean isAVClient,
-			Server server) {
+	public Client getClientByPublicSID(String publicSID, Server server) {
 		if (server == null) {
 			server = serverUtil.getCurrentServer();
 		}
-		return sessionManager.getClientByPublicSID(publicSID, isAVClient,
-				server);
+		return sessionManager.getClientByPublicSID(publicSID, server);
 	}
 
-	public ClientSessionInfo getClientByPublicSIDAnyServer(String publicSID,
-			boolean isAVClient) {
-		return sessionManager.getClientByPublicSIDAnyServer(publicSID,
-				isAVClient);
+	public ClientSessionInfo getClientByPublicSIDAnyServer(String publicSID) {
+		return sessionManager.getClientByPublicSIDAnyServer(publicSID);
 	}
 
 	public Client getClientByUserId(Long userId) {

Modified: openmeetings/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java (original)
+++ openmeetings/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java Wed Dec  2 05:49:09 2015
@@ -49,13 +49,12 @@ public interface ISessionManager {
 	 * @param remotePort
 	 * @param remoteAddress
 	 * @param swfUrl
-	 * @param isAVClient
 	 * @param server
 	 * @return
 	 */
 	public abstract Client addClientListItem(String streamId,
 			String scopeName, Integer remotePort, String remoteAddress,
-			String swfUrl, boolean isAVClient, Server server);
+			String swfUrl, Server server);
 
 	public abstract Collection<Client> getClients();
 	
@@ -78,17 +77,12 @@ public interface ISessionManager {
 
 	/**
 	 * get a client by its publicSID and the server, 
-	 * isAVClient is normally false, as you want the data connection.
-	 * If you set isAVClient to true, you would obtain the RTMP 
-	 * connection that is used for Audio/Video streaming
 	 * 
 	 * @param publicSID
-	 * @param isAVClient
 	 * @param server
 	 * @return
 	 */
-	public abstract Client getClientByPublicSID(String publicSID,
-			boolean isAVClient, Server server);
+	public abstract Client getClientByPublicSID(String publicSID, Server server);
 	
 	/**
 	 * same as {@link #getClientByPublicSID(String, boolean, Server)} but it ignores 
@@ -99,10 +93,9 @@ public interface ISessionManager {
 	 * you should use {@link #getClientByPublicSID(String, boolean, Server)}!
 	 * 
 	 * @param publicSID
-	 * @param isAVClient
 	 * @return
 	 */
-	public ClientSessionInfo getClientByPublicSIDAnyServer(String publicSID, boolean isAVClient);
+	public ClientSessionInfo getClientByPublicSIDAnyServer(String publicSID);
 
 	/**
 	 * 
@@ -123,14 +116,13 @@ public interface ISessionManager {
 	 * @param rcm
 	 * @return
 	 */
-	public abstract Boolean updateAVClientByStreamId(String streamId,
-			Client rcm, Server server);
+	public abstract Boolean updateAVClientByStreamId(String streamId, Client rcm, Server server);
 
 	/**
 	 * Update the session object
 	 * 
 	 * updateRoomCount is only <i>one</i> time true, in
-	 * ScopeApplicationAdapter#setRoomValues(Long, Boolean, Boolean, Long, String)
+	 * ScopeApplicationAdapter#setRoomValues(Long, Boolean, Boolean, String)
 	 * .
 	 * 
 	 * @param streamId

Modified: openmeetings/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Client.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Client.java?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Client.java (original)
+++ openmeetings/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Client.java Wed Dec  2 05:49:09 2015
@@ -186,12 +186,6 @@ public class Client implements IDataProv
 	private boolean screenClient;
 	
 	/**
-	 * @see Client#isAvClient()
-	 */
-	@Column(name = "is_avclient")
-	private boolean avClient;
-	
-	/**
 	 * @see Client#getUsercolor()
 	 */
 	@Column(name = "usercolor")
@@ -319,12 +313,6 @@ public class Client implements IDataProv
 	private Long recordingMetaDataId;
 	
 	/**
-	 * @see Client#getGroupId()
-	 */
-	@Column(name = "group_id")
-	private Long groupId;
-	
-	/**
 	 * @see Client#isStartRecording()
 	 */
 	@Column(name = "start_recording")
@@ -406,7 +394,7 @@ public class Client implements IDataProv
 	public Client() {}
     
 	public Client(String streamid, String publicSID, Long roomId,
-			Long userId, String firstname, String lastname, boolean avClient,
+			Long userId, String firstname, String lastname,
 			String username, String connectedSince, String scope) {
 		super();
 		this.streamid = streamid;
@@ -415,7 +403,6 @@ public class Client implements IDataProv
 		this.userId = userId;
 		this.firstname = firstname;
 		this.lastname = lastname;
-		this.avClient = avClient;
 		this.username = username;
 		this.connectedSince = CalendarPatterns.parseDateWithHour(connectedSince);
 		this.scope = scope;
@@ -786,14 +773,6 @@ public class Client implements IDataProv
 		this.screenPublishStarted = screenPublishStarted;
 	}
 
-	public Long getGroupId() {
-		return groupId;
-	}
-
-	public void setGroupId(Long groupId) {
-		this.groupId = groupId;
-	}
-
 	public boolean isStartRecording() {
 		return startRecording;
 	}
@@ -850,14 +829,6 @@ public class Client implements IDataProv
 		this.allowRecording = allowRecording;
 	}
 
-	public boolean isAvClient() {
-		return avClient;
-	}
-
-	public void setAvClient(boolean avClient) {
-		this.avClient = avClient;
-	}
-
 	public boolean isStreamPublishStarted() {
 		return streamPublishStarted;
 	}
@@ -893,7 +864,7 @@ public class Client implements IDataProv
 	@Override
 	public String toString() {
 		return "Client [streamid=" + streamid + ", publicSID=" + publicSID + ", isScreenClient=" + screenClient
-				+ ", avClient=" + avClient + ", isMobile = " + mobile + ", roomId=" + roomId + ", broadCastID=" + broadCastID + ", userId="
+				+ ", isMobile = " + mobile + ", roomId=" + roomId + ", broadCastID=" + broadCastID + ", userId="
 				+ userId + ", avsettings=" + avsettings + ", isRecording=" + isRecording + ", recordingId="
 				+ recordingId + ", recordingMetaDataId=" + recordingMetaDataId + ", screenPublishStarted="
 				+ screenPublishStarted + ", interviewPodId=" + interviewPodId + ", server=" + server + "]";

Modified: openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/base/hibernate/hibRtmpConnection.lzx
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/base/hibernate/hibRtmpConnection.lzx?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/base/hibernate/hibRtmpConnection.lzx (original)
+++ openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/base/hibernate/hibRtmpConnection.lzx Wed Dec  2 05:49:09 2015
@@ -85,10 +85,6 @@
      -->
      <attribute name="currentroomid" value="0" type="number" />
      
-     <!-- This is the current domain the user has logged-in -->
-     <attribute name="currentdomain" value="domain1" type="string" />
-     <attribute name="currentdomainObj" value="domain1" type="string" />
-     
      <!--- the current Invitation-Object -->
      <attribute name="currentInvitation" value="null" />
     
@@ -198,6 +194,7 @@
         client.newStream = this.newStream;
         //TODO FIXME method is absent :( client.stopStream = this.stopStream;
         client.receiveExclusiveAudioFlag = this.receiveExclusiveAudioFlag;
+        client.setNewModeratorByList = this.setNewModeratorByList;
     </handler>
     
     <handler name="ondisconnect">
@@ -565,6 +562,7 @@
     <netRemoteCallHib name="markSessionAsLogedIn" funcname="xmlcrm.markSessionAsLogedIn" >
         <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
         <handler name="ondata" args="value">
+        <![CDATA[
             //The onResult-Handler will be called be the rtmpconnection
                         
             if (value == null) {
@@ -577,10 +575,7 @@
              
             canvas.userId = hib.userobject.id;
             
-            if (value.groupUsers.length > 0){
-                hib.currentdomain = value.groupUsers[0].group.name;
-                hib.currentdomainObj = value.groupUsers[0].group;
-            } else if (!canvas.isRemoteUser()) {
+            if (value.groupUsers.length == 0 && !canvas.isRemoteUser()) {
                 new lz.errorPopup(canvas,{error:"Missing Group in User Object, set the Configuration value of the key 'default.rpc.userid' to a valid user Id that has at least one Organization assigned in the OpenMeetings Administrion Configuration Panel "});
             }
             
@@ -607,6 +602,7 @@
                 canvas.initroomid = Number(canvas.directRoomId);
                 parent.getRoomById.doCall();
             }
+        ]]>
         </handler>  
     </netRemoteCallHib> 
     
@@ -664,17 +660,6 @@
 		</handler>
 	</netRemoteCallHib>
     
-    <netRemoteCallHib name="setCurrentUserOrganization" funcname="xmlcrm.setCurrentUserOrganization">
-        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
-        <netparam><method name="getValue">return hib.currentdomainObj.id;</method></netparam>  
-        <handler name="ondata" args="value">
-            //Sessionmanagement.getInstance() 
-            //The onResult-Handler will be called be the rtmpconnection
-            if ($debug) Debug.write("setCurrentUserOrganization: ",value);
-        </handler>  
-    </netRemoteCallHib> 
-     
-    
 	<netRemoteCallHib name="loginWicket" funcname="xmlcrm.loginWicket" >
 		<netparam><method name="getValue">return canvas.sessionId;</method></netparam>
 		<netparam><method name="getValue">return canvas.wicketsid;</method></netparam>
@@ -708,20 +693,6 @@
 					return;
 				}
 				hib.userobject = value;
-				var found = false;
-				for (var i = 0; i < value.groupUsers.length; ++i) {
-					if (value.groupUsers[i].group.id == value.sessionData.groupId) {
-						found = true;
-						hib.currentdomain = value.groupUsers[i].group.name;
-						hib.currentdomainObj = value.groupUsers[i].group;
-						break;
-					}
-				}
-				if ($debug) Debug.write("hibRtmpConnection::loginWicket 1");
-				if (!found && value.groupUsers.length > 0) {
-					hib.currentdomain = value.groupUsers[0].group.name;
-					hib.currentdomainObj = value.groupUsers[0].group;
-				}
 				parent.getCurrentRoomClient.doCall();
 			} else {
 				new lz.labelerrorPopup(canvas, {errorlabelid: 1599});
@@ -1196,20 +1167,17 @@
             </handler>   
         </netRemoteCallHib>
         
-        <netRemoteCallHib name="setNewModeratorByList" funcname="setNewModeratorByList">
-            <handler name="ondata" args="value">
-                <![CDATA[
-                    if ($debug) Debug.write("setNewModeratorByList ",value);
-                    
-                    canvas.analyzeModerationList(value);
-                    
-                    //The onResult-Handler will be called be the rtmpconnection
-                    canvas.currentModeratorList = value;
-                    //Update Moderation Flag
-                    canvas.updateModerationFlag();
-                ]]>
-            </handler>   
-        </netRemoteCallHib> 
+		<method name="setNewModeratorByList" args="value">
+		<![CDATA[
+			if ($debug) Debug.write("setNewModeratorByList ",value);
+			canvas.analyzeModerationList(value);
+			
+			//The onResult-Handler will be called be the rtmpconnection
+			canvas.currentModeratorList = value;
+			//Update Moderation Flag
+			canvas.updateModerationFlag();
+		]]>
+		</method> 
         
         <netRemoteCallHib name="sendMessage" funcname="sendMessage">
             <netparam name="vars"><method name="getValue">return canvas.objMessage;</method></netparam>

Modified: openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/base/mainMethods.lzx
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/base/mainMethods.lzx?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/base/mainMethods.lzx (original)
+++ openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/base/mainMethods.lzx Wed Dec  2 05:49:09 2015
@@ -188,29 +188,6 @@
 	]]>
 	</method>
 
-	<method name="getScreenSharingUrl">
-	<![CDATA[
-		var groupId = (hib.currentdomainObj != null && hib.currentdomainObj.id != null)
-			? hib.currentdomainObj.id : 1;
-		if ($debug) Debug.write("mainMethods::getScreenSharingUrl ", hib.userobject, hib.currentdomainObj);
-		
-		var appBase = canvas.getUrl();
-		if ($debug) Debug.write("appBase=" + appBase);
-		var downloadurl = appBase + 'screen.upload?'
-			+'rtmphostlocal=' + canvas.getHttpHost()
-			+'&baseurl=' + escape(appBase)
-			+'&domain=' + hib.conferencedomain
-			+'&groupId=' + groupId
-			+'&sid=' + canvas.sessionId
-			+'&connectionType=' + canvas.thishib.getProtocol()
-			+'&port=' + canvas.thishib.getPort()
-			+'&publicSID=' + canvas.publicSID
-			+'&languageAsString=' + hib.userlang;
-		if ($debug) Debug.write("mainMethods::getScreenSharingUrl ", downloadurl); 
-		return downloadurl;
-	]]>
-	</method>
-	
     <method name="myinit">
         <![CDATA[
         canvas.mediaerrortimeout = 30000;
@@ -438,36 +415,47 @@
 	<!---
 		Actions connected to the shortcuts
 	 -->
-    <method name="doActionmenu" args="stringSub">
-        <![CDATA[
-            if($debug) Debug.write("doActionmenu: ",stringSub);
-            if (canvas._conferencemenu.visibility == 'visible'){
-            	 if (stringSub == "invitation") {
-            	 	ExternalInterface.call("openInvitation");
-			    } else if (stringSub=='editWhiteboardDefault') {
-                    new lz.editWhiteboardDefault(canvas.main_content._content.inner);
-                } else if (stringSub=='createPoll') {
-                    ExternalInterface.call("createPoll", canvas.publicSID);
-                } else if (stringSub=='pollResults') {
-                    ExternalInterface.call("pollResults", canvas.publicSID);
-                } else if (stringSub=='checkPollVoted') {
-                    ExternalInterface.call("vote");
-                } else if (stringSub=='importFile') {
-                    new lz.uploadWindowExplorer(canvas.main_content._content.inner, {x:60});
-                } else if (stringSub=='applyForMod') {
-                    if ($debug) Debug.info("Apply For Mod through doActionmenu");
-                    //new lz.applyForModeration(canvas.main_content._content.inner);
-                    canvas.thishib.applyForModeration.doCall();
-                } else if (stringSub=='editCamMicSettings') {
-                    canvas.commonVideoViewContent.changeDevice();
-                } else if (stringSub=='showSipDialer') {
-                    new lz.sipDialer(canvas.main_content._content.inner);
-                } else if (stringSub=='quit') {
+	<method name="doActionmenu" args="stringSub">
+	<![CDATA[
+		if($debug) Debug.write("doActionmenu: ",stringSub);
+		if (canvas._conferencemenu.visible) {
+			switch (stringSub) {
+				case "invitation":
+					ExternalInterface.call("openInvitation");
+					break;
+				case 'editWhiteboardDefault':
+					new lz.editWhiteboardDefault(canvas.main_content._content.inner);
+					break;
+				case 'createPoll':
+					ExternalInterface.call("createPoll", canvas.publicSID);
+					break;
+				case 'pollResults':
+					ExternalInterface.call("pollResults", canvas.publicSID);
+					break;
+				case 'checkPollVoted':
+					ExternalInterface.call("vote");
+					break;
+				case 'importFile':
+					new lz.uploadWindowExplorer(canvas.main_content._content.inner, {x: 60});
+					break;
+				case 'applyForMod':
+					if ($debug) Debug.info("Apply For Mod through doActionmenu");
+					//new lz.applyForModeration(canvas.main_content._content.inner);
+					canvas.thishib.applyForModeration.doCall();
+					break;
+				case 'editCamMicSettings':
+					canvas.commonVideoViewContent.changeDevice();
+					break;
+				case 'showSipDialer':
+					new lz.sipDialer(canvas.main_content._content.inner);
+					break;
+				case 'quit':
 					canvas.quit();
-            }
-          }
-        ]]>
-    </method> 
+					break;
+			}
+		}
+	]]>
+	</method> 
     
 	<method name="setRoomValues" args="roomObj">
 		if ($debug) Debug.warn("setRoomValues ",roomObj);

Modified: openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/base/remote/rtmpConnection.lzx
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/base/remote/rtmpConnection.lzx?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/base/remote/rtmpConnection.lzx (original)
+++ openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/base/remote/rtmpConnection.lzx Wed Dec  2 05:49:09 2015
@@ -52,7 +52,7 @@
             
             this._nc.proxyType = canvas.proxyType;
             
-            var ok = this._nc.connect(src == "null" ? null : src, false); //avClient = false
+            var ok = this._nc.connect(src == "null" ? null : src, false);
             if (this.debug) {
             	if($debug) Debug.write("*** debug ***");
             }

Modified: openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/interviewuserlist/interviewUserList.lzx
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/interviewuserlist/interviewUserList.lzx?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/interviewuserlist/interviewUserList.lzx (original)
+++ openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/interviewuserlist/interviewUserList.lzx Wed Dec  2 05:49:09 2015
@@ -102,16 +102,7 @@
                 
                 canvas.currentusercolor = canvas.getColorForUser();
                 
-                var groupId = 1;
-            
                 if ($debug) Debug.write(hib.userobject); 
-                if ($debug) Debug.write(hib.currentdomainObj); 
-                
-                if (hib.currentdomainObj != null) {
-                    groupId = hib.currentdomainObj.id
-                }
-                
-                this.parent.setRoomValues.groupId = groupId;
                 this.parent.setRoomValues.doCall();
             
             ]]>
@@ -124,7 +115,6 @@
         <netparam><method name="getValue">return hib.currentroomid;</method></netparam>
         <netparam><method name="getValue">return parent.applyDefaultModeration;</method></netparam>
         <netparam><method name="getValue">return canvas.becomeSuperModerator;</method></netparam>
-        <netparam><method name="getValue">return parent.groupId;</method></netparam>
         <netparam><method name="getValue">return canvas.currentusercolor;</method></netparam>
         <handler name="ondata" args="roomStatus">
             <![CDATA[

Modified: openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/moderation/moderationPanel.lzx
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/moderation/moderationPanel.lzx?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/moderation/moderationPanel.lzx (original)
+++ openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/moderation/moderationPanel.lzx Wed Dec  2 05:49:09 2015
@@ -47,7 +47,13 @@
 </class>
 
 <class name="moderationPanel" extends="view" layout="axis:x;spacing:2">
-    
+	<switch>
+		<when property="$as3">
+			<passthrough>
+				import flash.external.ExternalInterface;
+			</passthrough>
+		</when>
+	</switch>
     <attribute name="recordingsName" value="" type="string" />
     <attribute name="initial" value="true" type="boolean" />
     <attribute name="recordingUser" value="null" />
@@ -90,7 +96,8 @@
     </method>   
     
 	<method name="checkForApplyScreen" args="record">
-		lz.Browser.loadURL(canvas.getScreenSharingUrl(), '_blank');
+		//TODO check if host is required for rtmps
+		ExternalInterface.call("startSharing", canvas.publicSID, canvas.thishib.getProtocol(), canvas.thishib.getPort());
 	</method>  
     
     <labelText name="_roomName" fgcolor="0xFFFFFF" y="4" fontstyle="bold" fontsize="12" /> 

Modified: openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/participants/participants.lzx
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/participants/participants.lzx?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/participants/participants.lzx (original)
+++ openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/participants/participants.lzx Wed Dec  2 05:49:09 2015
@@ -111,16 +111,7 @@
                 
                 canvas.currentusercolor = canvas.getColorForUser();
                 
-                var groupId = 1;
-            
                 if ($debug) Debug.write(hib.userobject); 
-                if ($debug) Debug.write(hib.currentdomainObj); 
-                
-                if (hib.currentdomainObj != null) {
-                    groupId = hib.currentdomainObj.id
-                }
-                
-                this.parent.setRoomValues.groupId = groupId;
                 
                 if ($debug) Debug.write("setRoomValues CALL: ");
                 this.parent.setRoomValues.doCall();
@@ -138,7 +129,6 @@
         <netparam><method name="getValue">return hib.currentroomid;</method></netparam>
         <netparam><method name="getValue">return parent.applyDefaultModeration;</method></netparam>
         <netparam><method name="getValue">return canvas.becomeSuperModerator;</method></netparam>
-        <netparam><method name="getValue">return parent.groupId;</method></netparam>
         <netparam><method name="getValue">return canvas.currentusercolor;</method></netparam>
         <handler name="ondata" args="roomStatus">
             <![CDATA[

Modified: openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/restricted/restrictedUserList.lzx
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/restricted/restrictedUserList.lzx?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/restricted/restrictedUserList.lzx (original)
+++ openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/restricted/restrictedUserList.lzx Wed Dec  2 05:49:09 2015
@@ -116,16 +116,7 @@
                 
                 canvas.currentusercolor = canvas.getColorForUser();
                 
-                var groupId = 1;
-            
                 if ($debug) Debug.write(hib.userobject); 
-                if ($debug) Debug.write(hib.currentdomainObj); 
-                
-                if (hib.currentdomainObj != null) {
-                    groupId = hib.currentdomainObj.id
-                }
-                
-                this.parent.setRoomValues.groupId = groupId;
                 this.parent.setRoomValues.doCall();
             
             ]]>
@@ -138,7 +129,6 @@
         <netparam><method name="getValue">return hib.currentroomid;</method></netparam>
         <netparam><method name="getValue">return parent.applyDefaultModeration;</method></netparam>
         <netparam><method name="getValue">return canvas.becomeSuperModerator;</method></netparam>
-        <netparam><method name="getValue">return parent.groupId;</method></netparam>
         <netparam><method name="getValue">return canvas.currentusercolor;</method></netparam>
         <handler name="ondata" args="roomStatus">
             <![CDATA[

Modified: openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/whiteboard/fixedFileExplorerWhiteBoard.lzx
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/whiteboard/fixedFileExplorerWhiteBoard.lzx?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/whiteboard/fixedFileExplorerWhiteBoard.lzx (original)
+++ openmeetings/branches/3.1.x/openmeetings-flash/src/main/swf/modules/conference/whiteboard/fixedFileExplorerWhiteBoard.lzx Wed Dec  2 05:49:09 2015
@@ -136,15 +136,8 @@
     <event name="isloadingImage" />
     <event name="isloadedImage" />
     
+    <text fontsize="11" x="10" y="2" name="_sharingClientName" fontstyle="bold" />    
     
-    <text fontsize="11" x="10" y="2" 
-        name="_sharingClientName" fontstyle="bold" />    
-    
-    
-	<method name="checkForApplyScreen">
-		lz.Browser.loadURL(canvas.getScreenSharingUrl(), '_blank');
-	</method> 
-	
     <!-- 
         The Content Area    
      -->

Modified: openmeetings/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java (original)
+++ openmeetings/branches/3.1.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java Wed Dec  2 05:49:09 2015
@@ -31,6 +31,8 @@ import static org.apache.openmeetings.ut
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANDING_ZONE;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LDAP_ID;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FLASH_PORT;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FLASH_PROTOCOL;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FRONTEND_REGISTER_KEY;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_IGNORE_BAD_SSL;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_LOGIN_MIN_LENGTH_KEY;
@@ -411,6 +413,8 @@ public class ImportInitvalues {
 
 		cfgDao.add(CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY, "", null,
 				"Users entered the room via invitationHash or secureHash will be redirected to this URL on connection lost");
+		cfgDao.add(CONFIG_FLASH_PROTOCOL, "rtmp", null, "Protocol for flash connections, can be rtmp, rtmpt, rtmpe, rtmps");
+		cfgDao.add(CONFIG_FLASH_PORT, "1935", null, "Port for flash connections");
 		cfgDao.add(CONFIG_CALENDAR_FIRST_DAY, "0", null, "The day that each week begins. The value must be a number that represents the day of the week. Sunday=0, Monday=1, Tuesday=2, etc.");
 		
 		log.debug("Configurations ADDED");

Modified: openmeetings/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java (original)
+++ openmeetings/branches/3.1.x/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java Wed Dec  2 05:49:09 2015
@@ -463,7 +463,7 @@ public class UserManager implements IUse
 
 			// admins only
 			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(userId))) {
-				Client rcl = sessionManager.getClientByPublicSID(publicSID, false, null);
+				Client rcl = sessionManager.getClientByPublicSID(publicSID, null);
 
 				if (rcl == null) {
 					return true;

Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java (original)
+++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java Wed Dec  2 05:49:09 2015
@@ -94,7 +94,7 @@ public class ConnectionsPanel extends Ad
 								, c.getServer() == null ? 0 : c.getServer().getId());
 						target.add(container, details.setVisible(false));
 					}
-				}.setEnabled(!c.isScreenClient() && !c.isAvClient()));
+				}.setEnabled(!c.isScreenClient()));
 				item.add(new AjaxEventBehavior("click") {
 					private static final long serialVersionUID = 1L;
 

Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java (original)
+++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java Wed Dec  2 05:49:09 2015
@@ -29,7 +29,7 @@ import org.red5.server.api.IConnection;
 
 public class RoomBroadcaster {
 	public static Client getClient(String publicSid) {
-		ClientSessionInfo csi = getBean(SessionManager.class).getClientByPublicSIDAnyServer(publicSid, false);
+		ClientSessionInfo csi = getBean(SessionManager.class).getClientByPublicSIDAnyServer(publicSid);
 		return csi == null ? null : csi.getRcl();
 	}
 	

Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java (original)
+++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java Wed Dec  2 05:49:09 2015
@@ -69,12 +69,15 @@ import org.slf4j.Logger;
 public class RoomPanel extends BasePanel {
 	private static final long serialVersionUID = 1L;
 	private static final String WICKET_ROOM_ID = "wicketroomid";
-	private static final String PARAM_PUBLIC_SID = "publicSid";
+	public static final String PARAM_PUBLIC_SID = "publicSid";
+	public static final String PARAM_PROTOCOL = "protocol";
+	public static final String PARAM_PORT = "port";
 	private static final Logger log = Red5LoggerFactory.getLogger(RoomPanel.class, webAppRootKey);
 	private final InvitationDialog invite;
 	private final CreatePollDialog createPoll;
 	private final VoteDialog vote;
 	private final PollResultsDialog pollResults;
+	private final StartSharingEventBehavior startSharing;
 	private long roomId = 0;
 	
 	public RoomPanel(String id) {
@@ -160,6 +163,7 @@ public class RoomPanel extends BasePanel
 		add(createPoll = new CreatePollDialog("createPoll", roomId));
 		add(vote = new VoteDialog("vote", roomId));
 		add(pollResults = new PollResultsDialog("pollResults", roomId));
+		add(startSharing = new StartSharingEventBehavior(roomId));
 		if (roomId > 0) {
 			add(new AbstractDefaultAjaxBehavior() {
 				private static final long serialVersionUID = 1L;
@@ -230,6 +234,20 @@ public class RoomPanel extends BasePanel
 					response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forScript(getNamedFunction("vote", this, explicit(PARAM_PUBLIC_SID)), "vote")));
 				}
 			});
+			add(new AbstractDefaultAjaxBehavior() {
+				private static final long serialVersionUID = 1L;
+	
+				@Override
+				protected void respond(AjaxRequestTarget target) {
+					startSharing.respond(target);
+				}
+				
+				@Override
+				public void renderHead(Component component, IHeaderResponse response) {
+					super.renderHead(component, response);
+					response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forScript(getNamedFunction("startSharing", this, explicit(PARAM_PUBLIC_SID), explicit(PARAM_PROTOCOL), explicit(PARAM_PORT)), "startSharing")));
+				}
+			});
 		}
 	}
 

Added: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/StartSharingEventBehavior.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/StartSharingEventBehavior.java?rev=1717571&view=auto
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/StartSharingEventBehavior.java (added)
+++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/StartSharingEventBehavior.java Wed Dec  2 05:49:09 2015
@@ -0,0 +1,199 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.room;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FLASH_PORT;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FLASH_PROTOCOL;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_ALLOW_REMOTE;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_FPS;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_FPS_SHOW;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_QUALITY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getLanguage;
+import static org.apache.openmeetings.web.app.WebSession.getSid;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.room.RoomBroadcaster.getClient;
+import static org.apache.openmeetings.web.room.RoomPanel.PARAM_PORT;
+import static org.apache.openmeetings.web.room.RoomPanel.PARAM_PROTOCOL;
+import static org.apache.openmeetings.web.room.RoomPanel.PARAM_PUBLIC_SID;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Properties;
+
+import org.apache.commons.codec.binary.Hex;
+import org.apache.commons.io.IOUtils;
+import org.apache.openmeetings.core.session.SessionManager;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.web.util.AjaxDownload;
+import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.util.resource.StringResourceStream;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class StartSharingEventBehavior extends AbstractDefaultAjaxBehavior {
+	private static final long serialVersionUID = 1L;
+	private static final Logger log = Red5LoggerFactory.getLogger(StartSharingEventBehavior.class, webAppRootKey);
+	private final AjaxDownload download;
+	private final long roomId;
+	private enum Protocol {
+		rtmp
+		, rtmpe
+		, rtmps
+		, rtmpt
+	}
+
+	public StartSharingEventBehavior(long _roomId) {
+		this.roomId = _roomId;
+		download = new AjaxDownload(true) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected String getFileName() {
+				return "public_" + roomId + ".jnlp";
+			}
+		};
+	}
+	
+	@Override
+	protected void onBind() {
+		super.onBind();
+		getComponent().add(download);
+	}
+	
+	private String getParam(String name) {
+		return getComponent().getRequest().getRequestParameters().getParameterValue(name).toString();
+	}
+	
+	@Override
+	protected void respond(AjaxRequestTarget target) {
+		//TODO deny download in case other screen sharing is in progress
+		String app = "";
+		try (InputStream jnlp = getClass().getClassLoader().getResourceAsStream("APPLICATION.jnlp")) {
+			ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
+			app = IOUtils.toString(jnlp, "UTF-8");
+			String baseUrl = cfgDao.getBaseUrl();
+			URL url = new URL(baseUrl);
+			Room room = getBean(RoomDao.class).get(roomId);
+			Client rc = getClient(getParam(PARAM_PUBLIC_SID));
+			SessionManager sessionManager = getBean(SessionManager.class);
+			String path = url.getPath();
+			path = path.substring(1, path.indexOf('/', 2) + 1);
+			String port = getParam(PARAM_PORT);
+			if (Strings.isEmpty(port)) {
+				cfgDao.getConfValue(CONFIG_FLASH_PORT, String.class, "");
+			}
+			String _protocol = getParam(PARAM_PROTOCOL);
+			if (Strings.isEmpty(_protocol)) {
+				_protocol = cfgDao.getConfValue(CONFIG_FLASH_PROTOCOL, String.class, "");
+			}
+			Protocol protocol = Protocol.valueOf(_protocol);
+			app = addKeystore(app).replace("$codebase", baseUrl + "screenshare")
+					.replace("$applicationName", cfgDao.getAppName())
+					.replace("$protocol", protocol.name())
+					.replace("$port", port)
+					.replace("$host", url.getHost())
+					.replace("$app", path + roomId)
+					.replace("$userId", "" + getUserId())
+					.replace("$publicSid", getSid())
+					.replace("$labels", "<![CDATA[" + getLabels(730,  731,  732,  733,  734
+							,  735,  737,  738,  739,  740
+							,  741,  742,  844,  869,  870
+							,  871,  872,  878, 1089, 1090
+							, 1091, 1092, 1093, 1465, 1466
+							, 1467, 1468, 1469, 1470, 1471
+							, 1472, 1473, 1474, 1475, 1476
+							, 1477, 1589, 1598, 1078) + "]]>")
+					.replace("$defaultQuality", cfgDao.getConfValue(CONFIG_SCREENSHARING_QUALITY, String.class, ""))
+					.replace("$defaultFps", cfgDao.getConfValue(CONFIG_SCREENSHARING_FPS, String.class, ""))
+					.replace("$showFps", cfgDao.getConfValue(CONFIG_SCREENSHARING_FPS_SHOW, String.class, "true"))
+					.replace("$allowRemote", cfgDao.getConfValue(CONFIG_SCREENSHARING_ALLOW_REMOTE, String.class, "true"))
+					.replace("$allowRecording", "" + (room.isAllowRecording() && rc.isAllowRecording() && (0 == sessionManager.getRecordingCount(roomId))))
+					.replace("$allowPublishing", "" + (0 == sessionManager.getPublishingCount(roomId)))
+					;
+		} catch (Exception e) {
+			log.error("Unexpected error while creating jnlp file", e);
+		}
+		download.setResourceStream(new StringResourceStream(app, "application/x-java-jnlp-file"));
+		download.initiate(target);
+	}
+
+	private String getLabels(int ... ids) {
+		StringBuilder result = new StringBuilder();
+		boolean delim = false;
+		LabelDao labelDao = getBean(LabelDao.class);
+		for (int id : ids) {
+			if (delim) {
+				result.append(';');
+			}
+			result.append(labelDao.getString(id, getLanguage()));
+			delim = true;
+		}
+		return result.toString();
+	}
+	
+	private String addKeystore(String app) {
+		log.debug("RTMP Sharer Keystore :: start");
+		String keystore = "--dummy--", password = "--dummy--";
+		File conf = new File(OmFileHelper.getRootDir(), "conf");
+		File keyStore = new File(conf, "keystore.screen");
+		if (keyStore.exists()) {
+			try (FileInputStream fis = new FileInputStream(keyStore); FileInputStream ris = new FileInputStream(new File(conf, "red5.properties"))) {
+				Properties red5Props = new Properties();
+				red5Props.load(ris);
+				
+				byte keyBytes[] = new byte[(int)keyStore.length()];
+				fis.read(keyBytes);
+				
+				keystore = Hex.encodeHexString(keyBytes);
+				password = red5Props.getProperty("rtmps.screen.keystorepass");
+				
+				/*
+				KeyStore ksIn = KeyStore.getInstance(KeyStore.getDefaultType());
+				ksIn.load(new FileInputStream(keyStore), red5Props.getProperty("rtmps.keystorepass").toCharArray());
+				ByteArrayInputStream bin = new ByteArrayInputStream()
+				
+				byte fileContent[] = new byte[(int)file.length()];
+				sb = addArgument(sb, Object arg)
+				ctx.put("$KEYSTORE", users_id);
+				/*
+				KeyStore ksOut = KeyStore.getInstance(KeyStore.getDefaultType());
+				for (Certificate cert : ksIn.getCertificateChain("red5")) {
+					PublicKey pub = cert.getPublicKey();
+					TrustedCertificateEntry tce = new TrustedCertificateEntry(cert);
+					tce.
+				}
+				*/
+			} catch (Exception e) {
+			//no op
+			}
+		}
+		return app.replace("$keystore", keystore).replace("$password", password);
+	}
+}

Modified: openmeetings/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/poll/TestClientListManager.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/poll/TestClientListManager.java?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/poll/TestClientListManager.java (original)
+++ openmeetings/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/poll/TestClientListManager.java Wed Dec  2 05:49:09 2015
@@ -37,7 +37,7 @@ public class TestClientListManager exten
 		assertNotNull("RoomClientId created is null",
 				sessionManager.addClientListItem(rnd.nextLong() + "ABCDE"
 						+ rnd.nextLong(), "scopeName", 66666, "remoteAddress",
-						"swfUrl", false, null));
+						"swfUrl", null));
 	}
 
 }

Modified: openmeetings/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java?rev=1717571&r1=1717570&r2=1717571&view=diff
==============================================================================
--- openmeetings/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java (original)
+++ openmeetings/branches/3.1.x/openmeetings-web/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java Wed Dec  2 05:49:09 2015
@@ -66,9 +66,8 @@ public class TestHashMapSession extends
 			rcm.setUserport(0);
 			rcm.setUserip("remoteAddress");
 			rcm.setSwfurl("swfUrl");
-			rcm.setIsMod(new Boolean(false));
-			rcm.setCanDraw(new Boolean(false));
-			rcm.setAvClient(false);
+			rcm.setIsMod(false);
+			rcm.setCanDraw(false);
 
 			if (cache.containsKey(null, streamId)) {
 				log.error("Tried to add an existing Client " + streamId);