From a88075a0c925e830451c6825fefa6467e557a2ba Mon Sep 17 00:00:00 2001
From: Nigel Kukard <nkukard@lbsd.net>
Date: Fri, 17 Jan 2014 18:17:39 +0000
Subject: [PATCH] Properly upgrade protocol handler

We need to switch protocol handlers on protocol upgrade
---
 opentrafficshaper/plugins/webserver/webserver.pm | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/opentrafficshaper/plugins/webserver/webserver.pm b/opentrafficshaper/plugins/webserver/webserver.pm
index 0f399b9..c5f697e 100644
--- a/opentrafficshaper/plugins/webserver/webserver.pm
+++ b/opentrafficshaper/plugins/webserver/webserver.pm
@@ -614,17 +614,23 @@ sub _server_request_http
 
 	# Its a websocket upgrade request
 	} elsif ($protocol eq "HTTP=>WebSocket") {
+		# Make sure we have an upgrade path to WebSocket
+		my ($newHandler) = _parse_http_resource($request,"WebSocket");
+		if (!defined($newHandler)) {
+			return httpDisplayFault(HTTP_INTERNAL_SERVER_ERROR,"Internal server error","Cannot upgrade to websocket");
+		}
+
 		# Do the function call now
 		my ($res,$ret1,$ret2) = $function->($kernel,$globals,$client_session_id,$request,$conn->{'socket'});
-
 		# If we have a response defined, we rejected the upgrade
 		if (defined($res)) {
 			$response = httpDisplayFault($res,$ret1,$ret2);
 		} else {
 			# Return our upgrade response
 			$response = _server_request_http_wsupgrade($request,$module,$action);
-			# Upgrade the protocol
+			# Upgrade the protocol & handler
 			$connections->{$client_session_id}->{'protocol'} = 'WebSocket';
+			$connections->{$client_session_id}->{'resource'}->{'handler'} = $newHandler;
 		}
 	}
 
-- 
GitLab