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);");

Reply via email to