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 095f6e15..e8265d58 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 @@ -500,7 +500,7 @@ public class KurentoSessionManager extends SessionManager { } @Override - public KurentoMediaOptions generateMediaOptions(Request request) { + public KurentoMediaOptions generateMediaOptions(Request request) throws OpenViduException { String sdpOffer = RpcHandler.getStringParam(request, ProtocolElements.PUBLISHVIDEO_SDPOFFER_PARAM); boolean hasAudio = RpcHandler.getBooleanParam(request, ProtocolElements.PUBLISHVIDEO_HASAUDIO_PARAM); @@ -534,8 +534,17 @@ public class KurentoSessionManager extends SessionManager { try { JsonObject kurentoFilterJson = (JsonObject) RpcHandler.getParam(request, ProtocolElements.PUBLISHVIDEO_KURENTOFILTER_PARAM); - kurentoFilter = new KurentoFilter(kurentoFilterJson.get("type").getAsString(), - kurentoFilterJson.get("options").getAsJsonObject()); + if (kurentoFilterJson != null) { + try { + kurentoFilter = new KurentoFilter(kurentoFilterJson.get("type").getAsString(), + kurentoFilterJson.get("options").getAsJsonObject()); + } catch (Exception e) { + throw new OpenViduException(Code.FILTER_NOT_APPLIED_ERROR_CODE, + "'filter' parameter wrong:" + e.getMessage()); + } + } + } catch (OpenViduException e) { + throw e; } catch (RuntimeException noParameterFound) { } diff --git a/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java b/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java index e4916e6b..a50463db 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java +++ b/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java @@ -218,7 +218,12 @@ public class SessionRestController { String sessionId = (String) params.get("session"); String roleString = (String) params.get("role"); String metadata = (String) params.get("data"); - JsonObject kurentoOptions = new JsonParser().parse(params.get("kurentoOptions").toString()).getAsJsonObject(); + + JsonObject kurentoOptions = null; + + if (params.get("kurentoOptions") != null) { + kurentoOptions = new JsonParser().parse(params.get("kurentoOptions").toString()).getAsJsonObject(); + } ParticipantRole role; try { 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 dd02ba08..b5de9f51 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 @@ -33,6 +33,7 @@ import org.springframework.beans.factory.annotation.Autowired; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import com.google.gson.JsonSyntaxException; import io.openvidu.client.OpenViduException; import io.openvidu.client.OpenViduException.Code; @@ -375,8 +376,14 @@ public class RpcHandler extends DefaultJsonRpcHandler { String filterType = getStringParam(request, ProtocolElements.FILTER_TYPE_PARAM); if (participant.getToken().getKurentoTokenOptions().isFilterAllowed(filterType)) { - JsonObject filterOptions = new JsonParser().parse(getStringParam(request, ProtocolElements.FILTER_OPTIONS_PARAM)) - .getAsJsonObject(); + JsonObject filterOptions; + try { + filterOptions = new JsonParser().parse(getStringParam(request, ProtocolElements.FILTER_OPTIONS_PARAM)) + .getAsJsonObject(); + } catch (JsonSyntaxException e) { + throw new OpenViduException(Code.FILTER_NOT_APPLIED_ERROR_CODE, + "'options' parameter is not a JSON object: " + e.getMessage()); + } String streamId = getStringParam(request, ProtocolElements.FILTER_STREAMID_PARAM); sessionManager.applyFilter(sessionManager.getSession(rpcConnection.getSessionId()), streamId, filterType, filterOptions, null, request.getId(), "applyFilter");