diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java b/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java index 112cdbaf..61f618f2 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/SessionEventsHandler.java @@ -227,18 +227,25 @@ public class SessionEventsHandler { return; } - if (participant.isRecorderOrSttParticipant()) { + // Return if recorder participant + if (participant.isRecorderParticipant()) { this.rpcNotificationService.immediatelyCloseRpcSession(participant.getParticipantPrivateId()); return; } - JsonObject params = new JsonObject(); - params.addProperty(ProtocolElements.PARTICIPANTLEFT_NAME_PARAM, participant.getParticipantPublicId()); - params.addProperty(ProtocolElements.PARTICIPANTLEFT_REASON_PARAM, reason != null ? reason.name() : ""); + if (!participant.isSttParticipant()) { + + JsonObject params = new JsonObject(); + params.addProperty(ProtocolElements.PARTICIPANTLEFT_NAME_PARAM, participant.getParticipantPublicId()); + params.addProperty(ProtocolElements.PARTICIPANTLEFT_REASON_PARAM, reason != null ? reason.name() : ""); + + for (Participant p : remainingParticipants) { + rpcNotificationService.sendNotification(p.getParticipantPrivateId(), + ProtocolElements.PARTICIPANTLEFT_METHOD, params); + } + + CDR.recordParticipantLeft(participant, sessionId, reason); - for (Participant p : remainingParticipants) { - rpcNotificationService.sendNotification(p.getParticipantPrivateId(), - ProtocolElements.PARTICIPANTLEFT_METHOD, params); } if (transactionId != null) { @@ -254,7 +261,6 @@ public class SessionEventsHandler { this.rpcNotificationService.scheduleCloseRpcSession(participant.getParticipantPrivateId(), 10000); } - CDR.recordParticipantLeft(participant, sessionId, reason); } public void onPublishMedia(Participant participant, String streamId, Long createdAt, String sessionId, diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java b/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java index 04b1b359..6e916f8b 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java @@ -364,10 +364,13 @@ public abstract class SessionManager { return tokenObj; } - public Token newTokenForInsecureUser(Session session, String token, ConnectionProperties connectionProperties) - throws Exception { + public Token newTokenForInsecureUser(Session session, String token, ConnectionProperties connectionProperties, + String connectionId) throws Exception { Token tokenObj = new Token(token, session.getSessionId(), connectionProperties, this.coturnCredentialsService.createUser()); + if (connectionId != null) { + tokenObj.setConnectionId(connectionId); + } session.storeToken(tokenObj); return tokenObj; } @@ -444,7 +447,8 @@ public abstract class SessionManager { } } - public Participant newSttParticipant(Session session, String participantPrivateId, Token token, String clientMetadata) { + public Participant newSttParticipant(Session session, String participantPrivateId, Token token, + String clientMetadata) { String sessionId = session.getSessionId(); if (this.sessionidParticipantpublicidParticipant.get(sessionId) != null) { return newParticipantAux(sessionId, session.getUniqueSessionId(), null, participantPrivateId, diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java index dfe30521..30793d33 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSessionManager.java @@ -1161,7 +1161,7 @@ public class KurentoSessionManager extends SessionManager { String token = IdentifierPrefixes.TOKEN_ID + RandomStringUtils.randomAlphabetic(1).toUpperCase() + RandomStringUtils.randomAlphanumeric(15); - this.newTokenForInsecureUser(session, token, connectionProperties); + this.newTokenForInsecureUser(session, token, connectionProperties, null); final Token tokenObj = session.consumeToken(token); Participant ipcamParticipant = this.newIpcamParticipant(session, rtspConnectionId, tokenObj, location, diff --git a/openvidu-server/src/main/java/io/openvidu/server/rpc/RpcHandler.java b/openvidu-server/src/main/java/io/openvidu/server/rpc/RpcHandler.java index fb7fa324..f13d860f 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/rpc/RpcHandler.java +++ b/openvidu-server/src/main/java/io/openvidu/server/rpc/RpcHandler.java @@ -277,12 +277,6 @@ public class RpcHandler extends DefaultJsonRpcHandler { if (openviduConfig.isOpenViduSecret(secret)) { - if (recorder) { - generateRecorderParticipant = true; - } else if (stt) { - generateSttParticipant = true; - } - sessionManager.newInsecureParticipant(participantPrivateId); token = IdentifierPrefixes.TOKEN_ID + RandomStringUtils.randomAlphabetic(1).toUpperCase() @@ -290,8 +284,17 @@ public class RpcHandler extends DefaultJsonRpcHandler { ConnectionProperties connectionProperties = new ConnectionProperties.Builder().type(ConnectionType.WEBRTC) .role(OpenViduRole.SUBSCRIBER).build(); + String connectionId = null; + if (recorder) { + generateRecorderParticipant = true; + connectionId = ProtocolElements.RECORDER_PARTICIPANT_PUBLICID; + } else if (stt) { + generateSttParticipant = true; + connectionId = ProtocolElements.STT_PARTICIPANT_PUBLICID; + } + try { - sessionManager.newTokenForInsecureUser(session, token, connectionProperties); + sessionManager.newTokenForInsecureUser(session, token, connectionProperties, connectionId); } catch (Exception e) { throw new OpenViduException(Code.TOKEN_CANNOT_BE_CREATED_ERROR_CODE, "Unable to create token for session " + sessionId + ": " + e.getMessage()); @@ -890,9 +893,10 @@ public class RpcHandler extends DefaultJsonRpcHandler { // Sanity check: don't call RPC method unless the id checks out Participant participant = sessionManager.getParticipant(sessionId, participantPrivateId); if (participant != null) { - errorMsg = "Participant " + participant.getParticipantPublicId() + " is calling method '" + methodName - + "' in session " + sessionId; - log.info(errorMsg); + if (methodName != "videoData") { + log.info("Participant {} is calling method '{}' in session {}", + participant.getParticipantPublicId(), methodName, sessionId); + } return participant; } else { errorMsg = "Participant with private id " + participantPrivateId + " not found in session " + sessionId