This is an automated email from the ASF dual-hosted git repository. solomax pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/openmeetings.git
The following commit(s) were added to refs/heads/master by this push: new bbef5ff [OPENMEETINGS-2368] improvements for ICE parameters (#92) bbef5ff is described below commit bbef5ff9160a094ef0e8a34c80fec9f099cd8e17 Author: Konstantin Kuzov <master.nosfer...@gmail.com> AuthorDate: Wed May 20 17:25:40 2020 +0300 [OPENMEETINGS-2368] improvements for ICE parameters (#92) * unique user id for TURN REST * fix getTurnServers in TestStreamProcessor * ability to provide multiple STUN/TURN urls with custom flavours * cosmetic changes for KurentoHandler * check that client is not null * more cosmetics --- .../org/apache/openmeetings/core/remote/KRoom.java | 4 ++-- .../apache/openmeetings/core/remote/KStream.java | 2 +- .../openmeetings/core/remote/KurentoHandler.java | 26 ++++++++++++++++------ .../openmeetings/core/remote/StreamProcessor.java | 2 +- .../core/remote/TestStreamProcessor.java | 4 ++-- .../apache/openmeetings/web/room/RoomPanel.java | 2 +- 6 files changed, 26 insertions(+), 14 deletions(-) diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java index f248a61..a9dad1e 100644 --- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java +++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java @@ -239,7 +239,7 @@ public class KRoom { .put("stream", sd.toJson() .put("shareType", msg.getString("shareType")) .put("fps", msg.getString("fps"))) - .put(PARAM_ICE, h.getTurnServers())); + .put(PARAM_ICE, h.getTurnServers(c))); } else if (osd.isPresent() && !osd.get().hasActivity(a)) { sd = osd.get(); sd.addActivity(a); @@ -248,7 +248,7 @@ public class KRoom { WebSocketHelper.sendRoom(new TextRoomMessage(c.getRoomId(), c, RoomMessage.Type.RIGHT_UPDATED, c.getUid())); WebSocketHelper.sendRoomOthers(roomId, c.getUid(), newKurentoMsg() .put("id", "newStream") - .put(PARAM_ICE, processor.getHandler().getTurnServers()) + .put(PARAM_ICE, processor.getHandler().getTurnServers(c)) .put("stream", sd.toJson())); } } diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java index a7b2fab..17fd834 100644 --- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java +++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java @@ -153,7 +153,7 @@ public class KStream extends AbstractStream { if (hasAudio || hasVideo || hasScreen) { WebSocketHelper.sendRoomOthers(room.getRoomId(), c.getUid(), newKurentoMsg() .put("id", "newStream") - .put(PARAM_ICE, processor.getHandler().getTurnServers()) + .put(PARAM_ICE, processor.getHandler().getTurnServers(c)) .put("stream", sd.toJson())); } return this; diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java index c2c3e94..22000b8 100644 --- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java +++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java @@ -323,11 +323,11 @@ public class KurentoHandler { return r; } - public JSONArray getTurnServers() { - return getTurnServers(false); + public JSONArray getTurnServers(Client c) { + return getTurnServers(c, false); } - JSONArray getTurnServers(final boolean test) { + JSONArray getTurnServers(Client c, final boolean test) { JSONArray arr = new JSONArray(); if (!Strings.isEmpty(turnUrl)) { try { @@ -337,7 +337,10 @@ public class KurentoHandler { mac.init(new SecretKeySpec(turnSecret.getBytes(), HMAC_SHA1_ALGORITHM)); StringBuilder user = new StringBuilder() .append((test ? 60 : turnTtl * 60) + System.currentTimeMillis() / 1000L); - if (!Strings.isEmpty(turnUser)) { + final String uid = c == null ? null : c.getUid(); + if (!Strings.isEmpty(uid)) { + user.append(':').append(uid); + } else if (!Strings.isEmpty(turnUser)) { user.append(':').append(turnUser); } turn.put("username", user) @@ -346,9 +349,18 @@ public class KurentoHandler { turn.put("username", turnUser) .put("credential", turnSecret); } - final String fturnUrl = "turn:" + turnUrl; - turn.put("url", fturnUrl); // old-school - turn.put("urls", fturnUrl); + + JSONArray urls = new JSONArray(); + final String[] turnUrls = turnUrl.split(","); + for (String url : turnUrls) { + if (url.startsWith("stun:") || url.startsWith("stuns:") || url.startsWith("turn:") || url.startsWith("turns:")) { + urls.put(url); + } else { + urls.put("turn:" + url); + } + } + turn.put("urls", urls); + arr.put(turn); } catch (NoSuchAlgorithmException|InvalidKeyException e) { log.error("Unexpected error while creating turn", e); diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java index f8a1138..62b9264 100644 --- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java +++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java @@ -266,7 +266,7 @@ public class StreamProcessor implements IStreamProcessor { .put("id", "broadcast") .put("stream", sd.toJson()) .put("cleanup", new JSONArray(closed)) - .put(PARAM_ICE, kHandler.getTurnServers(false))); + .put(PARAM_ICE, kHandler.getTurnServers(c, false))); } } } diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/TestStreamProcessor.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/TestStreamProcessor.java index f3a3dad..74904ad 100644 --- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/TestStreamProcessor.java +++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/TestStreamProcessor.java @@ -53,7 +53,7 @@ public class TestStreamProcessor implements IStreamProcessor { case "wannaRecord": WebSocketHelper.sendClient(c, newTestKurentoMsg() .put("id", "canRecord") - .put(PARAM_ICE, kHandler.getTurnServers(true)) + .put(PARAM_ICE, kHandler.getTurnServers(null, true)) ); break; case "record": @@ -74,7 +74,7 @@ public class TestStreamProcessor implements IStreamProcessor { case "wannaPlay": WebSocketHelper.sendClient(c, newTestKurentoMsg() .put("id", "canPlay") - .put(PARAM_ICE, kHandler.getTurnServers(true)) + .put(PARAM_ICE, kHandler.getTurnServers(null, true)) ); break; case "play": diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java index 7e631fa..c1a44d3 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java @@ -184,7 +184,7 @@ public class RoomPanel extends BasePanel { } } if (streams.length() > 0) { - sb.append("VideoManager.play(").append(streams).append(", ").append(kHandler.getTurnServers()).append(");"); + sb.append("VideoManager.play(").append(streams).append(", ").append(kHandler.getTurnServers(getClient())).append(");"); } if (interview && streamProcessor.recordingAllowed(getClient())) { sb.append("WbArea.setRecEnabled(true);");