diff --git a/opentrafficshaper/plugins/webserver/webserver.pm b/opentrafficshaper/plugins/webserver/webserver.pm
index 7db4a5ee7143161422539957a489ae083b47e8e8..629f3c42195ca73530d93c5cb54ea7cff75a3f05 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
 {