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