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 2017/07/01 13:15:50 UTC
openmeetings git commit: [OPENMEETINGS-1646] mobile client able to
connect
Repository: openmeetings
Updated Branches:
refs/heads/master 85502430e -> 0d32d43df
[OPENMEETINGS-1646] mobile client able to connect
Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/0d32d43d
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/0d32d43d
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/0d32d43d
Branch: refs/heads/master
Commit: 0d32d43df98d52707d211e7afb2dd366fc6fd486
Parents: 8550243
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Sat Jul 1 20:15:39 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Sat Jul 1 20:15:39 2017 +0700
----------------------------------------------------------------------
.../openmeetings/core/remote/MobileService.java | 97 ++++++++++----------
.../core/remote/ScopeApplicationAdapter.java | 22 +++--
.../core/session/store/HashMapStore.java | 8 +-
.../openmeetings/service/user/UserManager.java | 14 ++-
.../openmeetings/web/app/Application.java | 19 +++-
.../webapp/WEB-INF/classes/logback-config.xml | 4 +-
6 files changed, 91 insertions(+), 73 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/0d32d43d/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
index fd67e32..668526b 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
@@ -22,7 +22,6 @@ import static org.apache.openmeetings.db.util.LocaleHelper.getCountryName;
import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_GROUP_ID;
import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FRONTEND_REGISTER_KEY;
import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_OAUTH_REGISTER_KEY;
-import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SOAP_REGISTER_KEY;
import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
import static org.apache.openmeetings.util.Version.getVersion;
@@ -112,7 +111,6 @@ public class MobileService {
public Map<String, Object> checkServer() {
Map<String, Object> result = new HashMap<>();
result.put("allowSelfRegister", "1".equals(cfgDao.getConfValue(CONFIG_FRONTEND_REGISTER_KEY, String.class, "0")));
- result.put("allowSoapRegister", "1".equals(cfgDao.getConfValue(CONFIG_SOAP_REGISTER_KEY, String.class, "0")));
result.put("allowOauthRegister", "1".equals(cfgDao.getConfValue(CONFIG_OAUTH_REGISTER_KEY, String.class, "0")));
return result;
}
@@ -213,52 +211,47 @@ public class MobileService {
return result;
}
+ public StreamClient create(User u, Sessiondata sd) {
+ StreamClient c = new StreamClient();
+ c.setMobile(true);
+ c.setOwnerSid(sd.getSessionId());
+ c.setUid(UUID.randomUUID().toString());
+ return create(c, u);
+ }
+
+ public StreamClient create(StreamClient c, User u) {
+ c.setUserId(u.getId());
+ c.setFirstname(u.getFirstname());
+ c.setLastname(u.getLastname());
+ if (c.getUserId() != null) {
+ c.setUsername(u.getLogin());
+ c.setFirstname(u.getFirstname());
+ c.setLastname(u.getLastname());
+ c.setEmail(u.getAddress() == null ? null : u.getAddress().getEmail());
+ }
+ c.setBroadCastId(UUID.randomUUID().toString());
+ return c;
+ }
+
private Map<String, Object> login(User u, Map<String, Object> result) {
if (u != null) {
IConnection conn = Red5.getConnectionLocal();
- StreamClient c = sessionManager.get(IClientUtil.getId(conn.getClient()));
- if (c == null) {
- // Failed to create client
- result.put("status", -1);
- } else {
- Sessiondata sd = sessionDao.check(c.getOwnerSid());
- sd.setUserId(u.getId());
- sd.setLanguageId(u.getLanguageId());
- sessionDao.update(sd);
- c.setUserId(u.getId());
- c.setFirstname(u.getFirstname());
- c.setLastname(u.getLastname());
- /*TODO check this
- rcm.setMobile(true);
- rcm.setUserId(sd.getUserId());
- if (rcm.getUserId() != null) {
- User u = userDao.get(rcm.getUserId());
- if (u == null) {
- _log.error("Attempt of unauthorized room enter: USER not found, client is rejected");
- return rejectClient();
- }
- rcm.setUsername(u.getLogin());
- rcm.setFirstname(u.getFirstname());
- rcm.setLastname(u.getLastname());
- rcm.setEmail(u.getAddress() == null ? null : u.getAddress().getEmail());
- }
- rcm.setSecurityCode(sd.getSessionId());
- rcm.setPublicSID(UUID.randomUUID().toString());
- */
- sessionManager.update(c);
- IClientUtil.init(conn.getClient(), c.getId(), false);
-
- add(result, "sid", sd.getSessionId());
- add(result, "uid", c.getUid());
- add(result, "status", 0);
- add(result, "userId", u.getId());
- add(result, "firstname", u.getFirstname());
- add(result, "lastname", u.getLastname());
- add(result, "login", u.getLogin());
- add(result, "email", u.getAddress() == null ? "" : u.getAddress().getEmail());
- add(result, "language", u.getLanguageId());
- add(result, "version", getVersion());
- }
+ Sessiondata sd = sessionDao.create(u.getId(), u.getLanguageId());
+ StreamClient c = create(u, sd);
+ c.setScope(conn.getScope().getName());
+ sessionManager.add(c, null);
+ IClientUtil.init(conn.getClient(), c.getId(), false);
+
+ add(result, "sid", sd.getSessionId());
+ add(result, "publicSid", c.getUid());
+ add(result, "status", 0);
+ add(result, "userId", u.getId());
+ add(result, "firstname", u.getFirstname());
+ add(result, "lastname", u.getLastname());
+ add(result, "login", u.getLogin());
+ add(result, "email", u.getAddress() == null ? "" : u.getAddress().getEmail());
+ add(result, "language", u.getLanguageId());
+ add(result, "version", getVersion());
}
return result;
}
@@ -273,12 +266,12 @@ public class MobileService {
if (!Strings.isEmpty(c.getAvsettings()) && !c.isSharing()) {
//TODO duplicates !!!!!!!!!!!!!!
Map<String, Object> map = new HashMap<>();
- add(map, "id", c.getId());
+ add(map, "streamId", c.getId());
add(map, "broadCastId", c.getBroadCastId());
add(map, "userId", c.getUserId());
add(map, "firstname", c.getFirstname());
add(map, "lastname", c.getLastname());
- add(map, "uid", c.getUid());
+ add(map, "publicSid", c.getUid());
add(map, "login", c.getUsername());
add(map, "email", c.getEmail());
add(map, "avsettings", c.getAvsettings());
@@ -351,7 +344,8 @@ public class MobileService {
IConnection current = Red5.getConnectionLocal();
StreamClient c = sessionManager.get(IClientUtil.getId(current.getClient()));
Map<String, Object> result = new HashMap<>();
- //FIXME TODO result.put("publicSid", c.getPublicSID());
+ result.put("publicSid", c.getUid());
+ result.put("broadCastId", c.getBroadCastId());
return result;
}
@@ -360,6 +354,7 @@ public class MobileService {
StreamClient c = sessionManager.get(IClientUtil.getId(current.getClient()));
c.setAvsettings(avMode);
if (!"n".equals(avMode)) {
+ c.setBroadCastId(UUID.randomUUID().toString());
c.setBroadcasting(true);
}
c.setWidth(Double.valueOf(width).intValue());
@@ -371,9 +366,13 @@ public class MobileService {
Map<String, Object> hsm = new HashMap<>();
hsm.put("client", c);
hsm.put("message", new String[]{"avsettings", "0", avMode});
+ Map<String, Object> result = new HashMap<>();
+ if (!"n".equals(avMode)) {
+ result.put("broadcastId", c.getBroadCastId());
+ }
scopeAdapter.sendMessageToCurrentScope("sendVarsToMessageWithClient", hsm, true, false);
- return new HashMap<>();
+ return result;
}
public void sendChatMessage(String msg) {
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/0d32d43d/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
index b7a5755..80975c1 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
@@ -53,7 +53,6 @@ import org.apache.openmeetings.db.dao.room.RoomDao;
import org.apache.openmeetings.db.dao.room.SipDao;
import org.apache.openmeetings.db.dao.server.ISessionManager;
import org.apache.openmeetings.db.dao.server.ServerDao;
-import org.apache.openmeetings.db.dao.server.SessiondataDao;
import org.apache.openmeetings.db.dao.user.UserDao;
import org.apache.openmeetings.db.entity.log.ConferenceLog;
import org.apache.openmeetings.db.entity.room.Room;
@@ -86,8 +85,11 @@ import com.github.openjson.JSONObject;
public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter implements IPendingServiceCallback {
private static final Logger _log = Red5LoggerFactory.getLogger(ScopeApplicationAdapter.class, webAppRootKey);
private static final String OWNER_SID_PARAM = "ownerSid";
+ private static final String PARENT_SID_PARAM = "parentSid"; //mobile
+ private static final String MOBILE_PARAM = "mobileClient";
private static final String WIDTH_PARAM = "width";
private static final String HEIGHT_PARAM = "height";
+ public static final String HIBERNATE_SCOPE = "hibernate";
public static final String FLASH_SECURE = "secure";
public static final String FLASH_NATIVE_SSL = "native";
public static final String FLASH_PORT = "rtmpPort";
@@ -103,8 +105,6 @@ public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter imp
@Autowired
private ConfigurationDao cfgDao;
@Autowired
- private SessiondataDao sessiondataDao;
- @Autowired
private ConferenceLogDao conferenceLogDao;
@Autowired
private UserDao userDao;
@@ -198,15 +198,25 @@ public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter imp
}
String ownerSid = (String)connParams.get(OWNER_SID_PARAM);
if (Strings.isEmpty(ownerSid)) {
+ ownerSid = (String)connParams.get(PARENT_SID_PARAM);
+ }
+ if (Strings.isEmpty(ownerSid)) {
_log.warn("No Owner SID is provided, client is rejected");
return rejectClient();
}
StreamClient rcm = new StreamClient();
rcm.setScope(conn.getScope().getName());
- if (rcm.getRoomId() == null && !"hibernate".equals(rcm.getScope())) {
+ boolean hibernate = HIBERNATE_SCOPE.equals(rcm.getScope());
+ if (hibernate) {
+ return true; //mobile initial connect
+ }
+ if (rcm.getRoomId() == null && !hibernate) {
_log.warn("Bad room specified, client is rejected");
return rejectClient();
}
+ if (Boolean.TRUE.equals(connParams.get(MOBILE_PARAM))) {
+ rcm.setMobile(true);
+ }
rcm.setUid(Strings.isEmpty(uid) ? UUID.randomUUID().toString() : uid);
rcm.setOwnerSid(ownerSid);
rcm.setUserport(conn.getRemotePort());
@@ -581,14 +591,14 @@ public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter imp
}
}
- private void sendSharingStoped(StreamClient rcl) {
+ private static void sendSharingStoped(StreamClient rcl) {
JSONObject obj = new JSONObject()
.put("ownerSid", rcl.getOwnerSid())
.put("uid", rcl.getUid());
WebSocketHelper.sendRoom(new TextRoomMessage(rcl.getRoomId(), rcl.getUserId(), RoomMessage.Type.sharingStoped, obj.toString()));
}
- private void sendStreamClosed(StreamClient rcl) {
+ private static void sendStreamClosed(StreamClient rcl) {
JSONObject obj = new JSONObject()
.put("uid", rcl.getUid())
.put("ownerSid", rcl.getOwnerSid())
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/0d32d43d/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java
index 0ab5c10..f62e3fd 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java
@@ -63,15 +63,11 @@ public class HashMapStore implements IClientPersistenceStore {
@Override
public StreamClient put(StreamClient rcl) {
- if (rcl.getId() != null) {
- log.error("Tried to add Client with not NULL ID {}", rcl.getId());
- return null;
- } else {
+ if (rcl.getId() == null) {
rcl.setId(nextId.getAndIncrement());
}
if (clientsById.containsKey(rcl.getId())) {
- log.error("Tried to add an existing Client {}", rcl.getId());
- return null;
+ log.debug("Updating Client {}", rcl.getId());
}
clientsById.put(rcl.getId(), rcl);
return rcl;
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/0d32d43d/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
----------------------------------------------------------------------
diff --git a/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java b/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
index d8e604d..8d2a829 100644
--- a/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
+++ b/openmeetings-service/src/main/java/org/apache/openmeetings/service/user/UserManager.java
@@ -445,16 +445,20 @@ public class UserManager implements IUserManager {
}
String scopeName = "hibernate";
- if (rcl.getRoomId() != null) {
- scopeName = rcl.getRoomId().toString();
+ if (rcl.getScope() != null) {
+ scopeName = rcl.getScope();
+ }
+ IScope scope = scopeApplicationAdapter.getRoomScope(scopeName);
+ if (scope == null) {
+ log.warn("### kickById ### The scope is NULL");
+ return false;
}
- IScope currentScope = scopeApplicationAdapter.getRoomScope(scopeName);
Map<Integer, String> messageObj = new HashMap<>();
messageObj.put(0, "kick");
- scopeApplicationAdapter.sendMessageById(messageObj, rcl.getId(), currentScope);
+ scopeApplicationAdapter.sendMessageById(messageObj, rcl.getId(), scope);
- scopeApplicationAdapter.roomLeaveByScope(rcl, currentScope);
+ scopeApplicationAdapter.roomLeaveByScope(rcl, scope);
return true;
} catch (Exception err) {
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/0d32d43d/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
index 3c861e1..d4b2148 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
@@ -44,11 +44,13 @@ import java.util.function.Predicate;
import org.apache.directory.api.util.Strings;
import org.apache.openmeetings.IApplication;
import org.apache.openmeetings.core.remote.MainService;
+import org.apache.openmeetings.core.remote.MobileService;
import org.apache.openmeetings.core.remote.ScopeApplicationAdapter;
import org.apache.openmeetings.core.util.WebSocketHelper;
import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
import org.apache.openmeetings.db.dao.label.LabelDao;
import org.apache.openmeetings.db.dao.log.ConferenceLogDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
import org.apache.openmeetings.db.dao.user.UserDao;
import org.apache.openmeetings.db.entity.basic.Client;
import org.apache.openmeetings.db.entity.basic.Client.Activity;
@@ -59,6 +61,7 @@ import org.apache.openmeetings.db.entity.room.Invitation;
import org.apache.openmeetings.db.entity.room.Room;
import org.apache.openmeetings.db.entity.room.Room.Right;
import org.apache.openmeetings.db.entity.room.StreamClient;
+import org.apache.openmeetings.db.entity.server.Sessiondata;
import org.apache.openmeetings.db.entity.user.User;
import org.apache.openmeetings.db.entity.user.User.Type;
import org.apache.openmeetings.util.InitializationContainer;
@@ -308,8 +311,12 @@ public class Application extends AuthenticatedWebApplication implements IApplica
Client client = getClientBySid(rcl.getOwnerSid());
if (client == null) {
if (rcl.isMobile()) {
+ Sessiondata sd = getBean(SessiondataDao.class).check(rcl.getOwnerSid());
+ UserDao udao = getBean(UserDao.class);
+ User u = udao.get(sd.getUserId());
+ rcl = getBean(MobileService.class).create(rcl, u);
//Mobile client enters the room
- client = new Client(rcl, getBean(UserDao.class));
+ client = new Client(rcl, udao);
addOnlineUser(client);
if (rcl.getRoomId() != null) {
client.setCam(0);
@@ -327,10 +334,12 @@ public class Application extends AuthenticatedWebApplication implements IApplica
//TODO mobile
return null;
}
- rcl.setUserId(client.getUser().getId());
- rcl.setUsername(client.getUser().getLogin());
- rcl.setFirstname(client.getUser().getFirstname());
- rcl.setLastname(client.getUser().getLastname());
+ User u = client.getUser();
+ rcl.setUserId(u.getId());
+ rcl.setUsername(u.getLogin());
+ rcl.setFirstname(u.getFirstname());
+ rcl.setLastname(u.getLastname());
+ rcl.setEmail(u.getAddress() == null ? null : u.getAddress().getEmail());
rcl.setSuperMod(client.hasRight(Right.superModerator));
rcl.setMod(client.hasRight(Right.moderator));
rcl.setCanVideo(client.hasRight(Right.video) && client.isCamEnabled() && client.hasActivity(Activity.broadcastV));
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/0d32d43d/openmeetings-web/src/main/webapp/WEB-INF/classes/logback-config.xml
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/logback-config.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/logback-config.xml
index 1009f39..2106686 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/logback-config.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/logback-config.xml
@@ -32,7 +32,7 @@
<ImmediateFlush>true</ImmediateFlush>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
- %5p %d{MM-dd HH:mm:ss.SSS } %c{15}:%L [%t] - %m%n
+ %5p %d{MM-dd HH:mm:ss.SSS } %c{15}:%L [%.15thread] - %m%n
</Pattern>
</layout>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
@@ -48,7 +48,7 @@
</appender>
<appender name="CONSOLE2" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
- <pattern>%5p %d{MM-dd HH:mm:ss.SSS } %r %L %c{15} [%t] - %m%n</pattern>
+ <pattern>%5p %d{MM-dd HH:mm:ss.SSS } %r %L %c{15} [%.15thread] - %m%n</pattern>
</layout>
</appender>
<logger name="com.mchange.v2" level="ERROR" />