From c5688794f8fb1bf25d73c7ce0f3baa8a53fd1036 Mon Sep 17 00:00:00 2001
From: Paul Gregoire <mondain@gmail.com>
Date: Tue, 27 Sep 2022 12:48:12 -0700
Subject: [PATCH] Added ws manager remove conn call

---
 client/pom.xml                                |  2 +-
 .../main/java/org/red5/client/Red5Client.java |  2 +-
 common/pom.xml                                |  4 ++--
 .../main/java/org/red5/server/api/Red5.java   |  4 ++--
 io/pom.xml                                    |  2 +-
 pom.xml                                       |  2 +-
 server/pom.xml                                |  2 +-
 .../net/websocket/WebSocketConnection.java    | 23 +++++++++++--------
 service/pom.xml                               |  2 +-
 9 files changed, 23 insertions(+), 20 deletions(-)

diff --git a/client/pom.xml b/client/pom.xml
index 2594c404..3e8ecd25 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <groupId>org.red5</groupId>
         <artifactId>red5-parent</artifactId>
-        <version>1.3.4</version>
+        <version>1.3.5</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>red5-client</artifactId>
diff --git a/client/src/main/java/org/red5/client/Red5Client.java b/client/src/main/java/org/red5/client/Red5Client.java
index db56837d..ff0a082e 100644
--- a/client/src/main/java/org/red5/client/Red5Client.java
+++ b/client/src/main/java/org/red5/client/Red5Client.java
@@ -18,7 +18,7 @@ public final class Red5Client {
     /**
      * Current server version with revision
      */
-    public static final String VERSION = "Red5 Client 1.3.4";
+    public static final String VERSION = "Red5 Client 1.3.5";
 
     /**
      * Create a new Red5Client object using the connection local to the current thread A bit of magic that lets you access the red5 scope
diff --git a/common/pom.xml b/common/pom.xml
index 35d86861..038fe067 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <groupId>org.red5</groupId>
         <artifactId>red5-parent</artifactId>
-        <version>1.3.4</version>
+        <version>1.3.5</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>red5-server-common</artifactId>
@@ -124,7 +124,7 @@
         <dependency>
             <groupId>net.engio</groupId>
             <artifactId>mbassador</artifactId>
-            <version>1.3.4</version>
+            <version>1.3.5</version>
         </dependency> -->
         <dependency>
             <groupId>junit</groupId>
diff --git a/common/src/main/java/org/red5/server/api/Red5.java b/common/src/main/java/org/red5/server/api/Red5.java
index 50c0dfa9..997eca6e 100644
--- a/common/src/main/java/org/red5/server/api/Red5.java
+++ b/common/src/main/java/org/red5/server/api/Red5.java
@@ -55,12 +55,12 @@ public final class Red5 {
     /**
      * Server version with revision
      */
-    public static final String VERSION = "Red5 Server 1.3.4";
+    public static final String VERSION = "Red5 Server 1.3.5";
 
     /**
      * Server version for fmsVer requests
      */
-    public static final String FMS_VERSION = "RED5/1,3,4,0";
+    public static final String FMS_VERSION = "RED5/1,3,5,0";
 
     /**
      * Server capabilities
diff --git a/io/pom.xml b/io/pom.xml
index d5c75c13..9c198d7c 100644
--- a/io/pom.xml
+++ b/io/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <groupId>org.red5</groupId>
         <artifactId>red5-parent</artifactId>
-        <version>1.3.4</version>
+        <version>1.3.5</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>red5-io</artifactId>
diff --git a/pom.xml b/pom.xml
index ad7bf579..6256ddfe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
     <name>Red5</name>
     <description>The Red5 server</description>
     <groupId>org.red5</groupId>
-    <version>1.3.4</version>
+    <version>1.3.5</version>
     <url>https://github.com/Red5/red5-server</url>
     <inceptionYear>2005</inceptionYear>
     <organization>
diff --git a/server/pom.xml b/server/pom.xml
index 2c6a243a..e79650be 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <groupId>org.red5</groupId>
         <artifactId>red5-parent</artifactId>
-        <version>1.3.4</version>
+        <version>1.3.5</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>red5-server</artifactId>
diff --git a/server/src/main/java/org/red5/net/websocket/WebSocketConnection.java b/server/src/main/java/org/red5/net/websocket/WebSocketConnection.java
index d30e67ee..1d67cb51 100644
--- a/server/src/main/java/org/red5/net/websocket/WebSocketConnection.java
+++ b/server/src/main/java/org/red5/net/websocket/WebSocketConnection.java
@@ -322,16 +322,15 @@ public class WebSocketConnection extends AttributeStore implements Comparable<We
         if (connected.compareAndSet(true, false)) {
             log.debug("close: {}", wsSessionId);
             WsSession session = wsSession != null ? wsSession.get() : null;
-            if (session != null && session.isOpen()) {
-                // clean up internal ws session maps since close doesnt
-                //if (session.isOpen()) {
-                //    session.getPathParameters().clear();
-                //    session.getUserProperties().clear();
-                //}
-                // ensure the endpoint is closed
-                CloseReason reason = new CloseReason(CloseCodes.GOING_AWAY, "");
-                // close the socket, don't wait for the browser to respond or we could hang
-                session.onClose(reason);
+            WebSocketScopeManager manager = null;
+            if (session != null) {
+                manager = (WebSocketScopeManager) session.getUserProperties().get(WSConstants.WS_MANAGER);
+                if (session.isOpen()) {
+                    // ensure the endpoint is closed
+                    CloseReason reason = new CloseReason(CloseCodes.GOING_AWAY, "");
+                    // close the socket, don't wait for the browser to respond or we could hang
+                    session.onClose(reason);
+                }
             }
             // clean up our props
             attributes.clear();
@@ -346,6 +345,10 @@ public class WebSocketConnection extends AttributeStore implements Comparable<We
             if (headers != null) {
                 headers = null;
             }
+            // fire callback for manager
+            if (manager != null) {
+                manager.removeConnection(this);
+            }
             if (scope.get() != null) {
                 // disconnect from scope
                 scope.get().removeConnection(this);
diff --git a/service/pom.xml b/service/pom.xml
index 893321c4..b612c205 100644
--- a/service/pom.xml
+++ b/service/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <groupId>org.red5</groupId>
         <artifactId>red5-parent</artifactId>
-        <version>1.3.4</version>
+        <version>1.3.5</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>red5-service</artifactId>
-- 
GitLab