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 2020/05/20 14:25:47 UTC
[openmeetings] branch master updated: [OPENMEETINGS-2368]
improvements for ICE parameters (#92)
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 <ma...@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);");