diff --git a/components/extensions/remote-session-extension/org.wso2.carbon.device.mgt.extensions.remote.session/src/main/java/org/wso2/carbon/device/mgt/extensions/remote.session/dto/ClientSession.java b/components/extensions/remote-session-extension/org.wso2.carbon.device.mgt.extensions.remote.session/src/main/java/org/wso2/carbon/device/mgt/extensions/remote.session/dto/ClientSession.java
deleted file mode 100644
index 70253479b..000000000
--- a/components/extensions/remote-session-extension/org.wso2.carbon.device.mgt.extensions.remote.session/src/main/java/org/wso2/carbon/device/mgt/extensions/remote.session/dto/ClientSession.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
- *
- * WSO2 Inc. licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.wso2.carbon.device.mgt.extensions.remote.session.dto;
-
-import org.wso2.carbon.device.mgt.extensions.remote.session.dto.common.RemoteSession;
-
-import javax.websocket.Session;
-
-/**
- * {@link ClientSession} is the represent of client which will be connecting to the device
- */
-public class ClientSession extends RemoteSession {
-
-
- public ClientSession(Session session, String tenantDomain, String deviceType, String deviceId, String operationId) {
- super(session, tenantDomain, deviceType, deviceId, operationId);
- }
-
-
- @Override
- public boolean applyThrottlingPolicy() {
- return false;
- }
-}
diff --git a/components/extensions/remote-session-extension/org.wso2.carbon.device.mgt.extensions.remote.session/src/main/java/org/wso2/carbon/device/mgt/extensions/remote.session/dto/DeviceSession.java b/components/extensions/remote-session-extension/org.wso2.carbon.device.mgt.extensions.remote.session/src/main/java/org/wso2/carbon/device/mgt/extensions/remote.session/dto/DeviceSession.java
deleted file mode 100644
index 5e88dc0d9..000000000
--- a/components/extensions/remote-session-extension/org.wso2.carbon.device.mgt.extensions.remote.session/src/main/java/org/wso2/carbon/device/mgt/extensions/remote.session/dto/DeviceSession.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
- *
- * WSO2 Inc. licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.wso2.carbon.device.mgt.extensions.remote.session.dto;
-
-import org.wso2.carbon.device.mgt.extensions.remote.session.dto.common.RemoteSession;
-import org.wso2.carbon.device.mgt.extensions.remote.session.internal.RemoteSessionManagementDataHolder;
-
-import javax.websocket.Session;
-
-/**
- * {@link DeviceSession} is the represent of device which will be connecting based on client request
- */
-public class DeviceSession extends RemoteSession {
-
-
- public DeviceSession(Session session, String tenantDomain, String deviceType, String deviceId, String operationId) {
- super(session, tenantDomain, deviceType, deviceId, operationId);
- }
-
-
- @Override
- public boolean applyThrottlingPolicy() {
- if (RemoteSessionManagementDataHolder.getInstance().getMessagesPerSession() > 0) {
- long minDurationMessagesPerSecond = 1000 / RemoteSessionManagementDataHolder.getInstance()
- .getMessagesPerSession();
- if ((System.currentTimeMillis() - getLastMessageTimeStamp()) < minDurationMessagesPerSecond) {
- return true;
- }
- }
- return false;
- }
-}
diff --git a/components/extensions/remote-session-extension/org.wso2.carbon.device.mgt.extensions.remote.session/src/main/java/org/wso2/carbon/device/mgt/extensions/remote.session/dto/common/RemoteSession.java b/components/extensions/remote-session-extension/org.wso2.carbon.device.mgt.extensions.remote.session/src/main/java/org/wso2/carbon/device/mgt/extensions/remote.session/dto/RemoteSession.java
similarity index 82%
rename from components/extensions/remote-session-extension/org.wso2.carbon.device.mgt.extensions.remote.session/src/main/java/org/wso2/carbon/device/mgt/extensions/remote.session/dto/common/RemoteSession.java
rename to components/extensions/remote-session-extension/org.wso2.carbon.device.mgt.extensions.remote.session/src/main/java/org/wso2/carbon/device/mgt/extensions/remote.session/dto/RemoteSession.java
index cffea29e0..5402f131f 100644
--- a/components/extensions/remote-session-extension/org.wso2.carbon.device.mgt.extensions.remote.session/src/main/java/org/wso2/carbon/device/mgt/extensions/remote.session/dto/common/RemoteSession.java
+++ b/components/extensions/remote-session-extension/org.wso2.carbon.device.mgt.extensions.remote.session/src/main/java/org/wso2/carbon/device/mgt/extensions/remote.session/dto/RemoteSession.java
@@ -19,8 +19,6 @@ package org.wso2.carbon.device.mgt.extensions.remote.session.dto.common;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.json.JSONObject;
-import org.wso2.carbon.device.mgt.extensions.remote.session.constants.RemoteSessionConstants;
import org.wso2.carbon.device.mgt.extensions.remote.session.exception.RemoteSessionInvalidException;
import org.wso2.carbon.device.mgt.extensions.remote.session.exception.RemoteSessionManagementException;
@@ -31,10 +29,9 @@ import java.nio.ByteBuffer;
/**
* {@link RemoteSession} will represent remote websocket session
- * This class implements the behaviours of sending message to the session in multithreaded environment.
- *
+ * This class implements the behaviours of sending message to the session in multithreaded environment.
*/
-public abstract class RemoteSession {
+public class RemoteSession {
private static final Log log = LogFactory.getLog(RemoteSession.class);
private String tenantDomain, operationId, deviceType, deviceId;
@@ -44,23 +41,21 @@ public abstract class RemoteSession {
private Session mySession;
private final Object writeLockObject = new Object();
- protected RemoteSession(Session session, String tenantDomain, String deviceType, String deviceId, String
- operationId) {
+ protected RemoteSession(Session session, String tenantDomain, String deviceType, String deviceId) {
this.mySession = session;
this.deviceType = deviceType;
this.deviceId = deviceId;
this.tenantDomain = tenantDomain;
- this.operationId = operationId;
}
- public void sendMessage(Object message) throws RemoteSessionInvalidException, RemoteSessionManagementException {
+ private void sendMessage(Object message) throws RemoteSessionInvalidException, RemoteSessionManagementException {
if (message != null) {
boolean isMessageCountExceed = false;
if (mySession != null && mySession.isOpen()) {
synchronized (writeLockObject) {
try {
- isMessageCountExceed = applyThrottlingPolicy();
+ isMessageCountExceed = applyRateLimit();
if (!isMessageCountExceed) {
if (message instanceof String) {
mySession.getBasicRemote().sendText(message.toString());
@@ -68,6 +63,8 @@ public abstract class RemoteSession {
mySession.getBasicRemote().sendBinary(ByteBuffer.wrap((byte[]) message));
}
this.lastMessageTimeStamp = System.currentTimeMillis();
+ } else {
+ log.warn("Message count per second is exceeded for device id :" + deviceId);
}
} catch (IOException e) {
log.warn("Send data to session failed due to ", e);
@@ -77,23 +74,25 @@ public abstract class RemoteSession {
throw new RemoteSessionInvalidException("Peer Session already closed ", new CloseReason
(CloseReason.CloseCodes.CANNOT_ACCEPT, "Peer Session already closed "));
}
-
- if (isMessageCountExceed) {
- JSONObject response = new JSONObject();
- response.put("code", RemoteSessionConstants.THROTTLE_OUT);
- sendMessageToPeer(message.toString());
- }
} else {
throw new RemoteSessionManagementException("Message is empty");
}
}
- public void sendMessageToPeer(Object message) throws RemoteSessionInvalidException, RemoteSessionManagementException {
+ public void sendMessageToPeer(Object message) throws RemoteSessionInvalidException,
+ RemoteSessionManagementException {
peerSession.sendMessage(message);
}
- public abstract boolean applyThrottlingPolicy();
+ /**
+ * Use for limit the messages for given time
+ *
+ * @return message rate applied
+ */
+ public boolean applyRateLimit(){
+ return false;
+ }
public Session getMySession() {
diff --git a/components/extensions/remote-session-extension/org.wso2.carbon.device.mgt.extensions.remote.session/src/main/java/org/wso2/carbon/device/mgt/extensions/remote.session/exception/RemoteSessionInvalidException.java b/components/extensions/remote-session-extension/org.wso2.carbon.device.mgt.extensions.remote.session/src/main/java/org/wso2/carbon/device/mgt/extensions/remote.session/exception/RemoteSessionInvalidException.java
deleted file mode 100644
index 139cc7434..000000000
--- a/components/extensions/remote-session-extension/org.wso2.carbon.device.mgt.extensions.remote.session/src/main/java/org/wso2/carbon/device/mgt/extensions/remote.session/exception/RemoteSessionInvalidException.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
- *
- * WSO2 Inc. licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.wso2.carbon.device.mgt.extensions.remote.session.exception;
-
-
-import javax.websocket.CloseReason;
-
-/**
- * This Exception will be thrown, when there any interference with Remote RemoteSession.
- */
-public class RemoteSessionInvalidException extends Exception {
-
- CloseReason closeReason;
-
- public RemoteSessionInvalidException(String msg, CloseReason closeReason, Exception nestedEx) {
- super(msg, nestedEx);
- this.closeReason = closeReason;
- }
-
- public RemoteSessionInvalidException(String message, CloseReason closeReason, Throwable cause) {
- super(message, cause);
- this.closeReason = closeReason;
- }
-
- public RemoteSessionInvalidException(String msg, CloseReason closeReason) {
- super(msg);
- this.closeReason = closeReason;
- }
-
- public CloseReason getCloseReason() {
- return closeReason;
- }
-
- public void setCloseReason(CloseReason closeReason) {
- this.closeReason = closeReason;
- }
-}
diff --git a/pom.xml b/pom.xml
index eb67c1f3a..5d5eb3407 100644
--- a/pom.xml
+++ b/pom.xml
@@ -460,6 +460,11 @@
${carbon.devicemgt.plugins.version}
war
+
+ org.wso2.carbon.devicemgt-plugins
+ org.wso2.carbon.device.mgt.extensions.remote.session
+ ${carbon.devicemgt.plugins.version}
+
@@ -1141,7 +1146,7 @@
1.1.1
- 3.0.75
+ 3.0.93-SNAPSHOT
[3.0.0, 4.0.0)