From 6c136d986340211e45d46a7546ccd2fba9c1e304 Mon Sep 17 00:00:00 2001 From: Nigel Kukard <nkukard@lbsd.net> Date: Fri, 17 Jan 2014 18:18:50 +0000 Subject: [PATCH] Added support for inbound websocket requests --- .../plugins/webserver/webserver.pm | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/opentrafficshaper/plugins/webserver/webserver.pm b/opentrafficshaper/plugins/webserver/webserver.pm index 7db4a5e..629f3c4 100644 --- a/opentrafficshaper/plugins/webserver/webserver.pm +++ b/opentrafficshaper/plugins/webserver/webserver.pm @@ -275,7 +275,7 @@ sub server_request # Its a websocket } elsif ($conn->{'protocol'} eq "WebSocket") { - # XXX - this should call the callback + $response = _server_request_websocket($kernel,$client_session_id,$request); } # If there is a response send it @@ -653,6 +653,40 @@ END: } +# Handle the websocket request +sub _server_request_websocket +{ + my ($kernel,$client_session_id,$request) = @_; + + + my $conn = $connections->{$client_session_id}; + my $handler = $conn->{'resource'}->{'handler'}; + + # Function we need to call + my $function = $handler; + + # Check if we're a hash... override if we are + if (ref($handler) eq "HASH") { + $function = $handler->{'on_request'}; + } + # If its something else, blow up + if (ref($function) ne "CODE") { + return '{status: "error", message: "Internal server error"}'; + } + + # Do the function call now + my ($res,$content,$extra) = $function->($kernel,$globals,$client_session_id,$request,$conn->{'socket'}); + + $logger->log(LOG_INFO,"[WEBSERVER] %s Request [%s/%s]", + $conn->{'protocol'}, + $conn->{'resource'}->{'module'}, + $conn->{'resource'}->{'action'}, + ); + + return $content; +} + + # Function to parse a HTTP resource sub _parse_http_resource { -- GitLab