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