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