This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch 4.15
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.15 by this push:
     new cdc3b08  novnc: Accept new novnc client and disconnect old session 
(#4531)
cdc3b08 is described below

commit cdc3b08759ab7268fc126840037f4dd86f188db7
Author: Wei Zhou <[email protected]>
AuthorDate: Sat Mar 6 10:13:21 2021 +0100

    novnc: Accept new novnc client and disconnect old session (#4531)
    
    * novnc: Reject new novnc client if novnc viewer object is still alive
    
    * #4531 novnc: Accept new novnc client and disconnect old session
---
 .../main/java/com/cloud/consoleproxy/ConsoleProxy.java | 18 +++++++++++++++---
 .../cloud/consoleproxy/ConsoleProxyNoVNCHandler.java   | 10 ++++++++--
 .../cloud/consoleproxy/ConsoleProxyNoVncClient.java    |  4 ++++
 3 files changed, 27 insertions(+), 5 deletions(-)

diff --git 
a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxy.java
 
b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxy.java
index 7a70a38..577d6ed 100644
--- 
a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxy.java
+++ 
b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxy.java
@@ -551,11 +551,23 @@ public class ConsoleProxy {
                         
!param.getClientHostPassword().equals(viewer.getClientHostPassword()))
                     throw new AuthenticationException("Cannot use the existing 
viewer " + viewer + ": bad sid");
 
-                if (!viewer.isFrontEndAlive()) {
+                try {
                     authenticationExternally(param);
-                    viewer.initClient(param);
-                    reportLoadChange = true;
+                } catch (Exception e) {
+                    s_logger.error("Authencation failed for param: " + param);
+                    return null;
+                }
+                s_logger.info("Initializing new novnc client and disconnecting 
existing session");
+                try {
+                    
((ConsoleProxyNoVncClient)viewer).getSession().disconnect();
+                } catch (IOException e) {
+                    s_logger.error("Exception while disconnect session of 
novnc viewer object: " + viewer, e);
                 }
+                removeViewer(viewer);
+                viewer = new ConsoleProxyNoVncClient(session);
+                viewer.initClient(param);
+                connectionMap.put(clientKey, viewer);
+                reportLoadChange = true;
             }
 
             if (reportLoadChange) {
diff --git 
a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVNCHandler.java
 
b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVNCHandler.java
index 349d984..b3359b5 100644
--- 
a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVNCHandler.java
+++ 
b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVNCHandler.java
@@ -38,7 +38,7 @@ import 
org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
 @WebSocket
 public class ConsoleProxyNoVNCHandler extends WebSocketHandler {
 
-    private ConsoleProxyNoVncClient viewer;
+    private ConsoleProxyNoVncClient viewer = null;
     private static final Logger s_logger = 
Logger.getLogger(ConsoleProxyNoVNCHandler.class);
 
     public ConsoleProxyNoVNCHandler() {
@@ -130,12 +130,18 @@ public class ConsoleProxyNoVNCHandler extends 
WebSocketHandler {
         } catch (Exception e) {
             s_logger.warn("Failed to create viewer due to " + e.getMessage(), 
e);
             return;
+        } finally {
+            if (viewer == null) {
+                session.disconnect();
+            }
         }
     }
 
     @OnWebSocketClose
     public void onClose(Session session, int statusCode, String reason) throws 
IOException, InterruptedException {
-        ConsoleProxy.removeViewer(viewer);
+        if (viewer != null) {
+            ConsoleProxy.removeViewer(viewer);
+        }
     }
 
     @OnWebSocketFrame
diff --git 
a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVncClient.java
 
b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVncClient.java
index 97963f8..353c32d 100644
--- 
a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVncClient.java
+++ 
b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVncClient.java
@@ -235,4 +235,8 @@ public class ConsoleProxyNoVncClient implements 
ConsoleProxyClient {
         return "";
     }
 
+    public Session getSession() {
+        return session;
+    }
+
 }

Reply via email to