From e95ece18d33bd9eceed57cadfc26b416feef54de Mon Sep 17 00:00:00 2001
From: Nigel Kukard <nkukard@lbsd.net>
Date: Tue, 14 Jan 2014 20:22:34 +0000
Subject: [PATCH] Use same websocket state and don't mask replied

---
 opentrafficshaper/POE/Filter/HybridHTTP.pm | 29 ++++++++++++----------
 1 file changed, 16 insertions(+), 13 deletions(-)

diff --git a/opentrafficshaper/POE/Filter/HybridHTTP.pm b/opentrafficshaper/POE/Filter/HybridHTTP.pm
index cdd1259..4efb9b6 100644
--- a/opentrafficshaper/POE/Filter/HybridHTTP.pm
+++ b/opentrafficshaper/POE/Filter/HybridHTTP.pm
@@ -154,18 +154,22 @@ sub put
 			push(@results,$self->_build_raw_response($response));
 		}
 
-
 	# Handle WebSocket data
 	} elsif ($self->{'state'} == ST_WEBSOCKET_STREAM) {
 		# Compile our list of results
 		foreach my $response (@{$responses}) {
-			# If we don't have a websocket write state, create one
-			if (!$self->{'state_websocket_write'}) {
-				$self->{'state_websocket_write'} = new POE::Filter::HybridHTTP::WebSocketFrame();
+			# If we don't have a websocket state, create one
+			if (!$self->{'websocket_state'}) {
+				$self->{'websocket_state'} = new POE::Filter::HybridHTTP::WebSocketFrame();
 			}
-			$self->{'state_websocket_write'}->append($response);
-
-			push(@results,$self->{'state_websocket_write'}->to_bytes());
+			# Don't mask replies from server to client RFC6455 secion 5.1.
+			$self->{'websocket_state'}->masked(0);
+			# Consume the response with websockets...
+			$self->{'websocket_state'}->append($response);
+			# Spit out bytes...
+			my $payload = $self->{'websocket_state'}->to_bytes();
+
+			push(@results,$payload);
 		}
 	}
 
@@ -187,8 +191,7 @@ sub _reset
 	# Reset our filter state
 	$self->{'buffer'} = '';
 	$self->{'state'} = ST_HTTP_HEADERS;
-	$self->{'state_websocket_read'} = undef;
-	$self->{'state_websocket_write'} = undef;
+	$self->{'websocket_state'} = undef;
 	$self->{'last_request'} = $self->{'request'};
 	$self->{'request'} = undef; # We want the last request always
 	$self->{'content_len'} = 0;
@@ -400,16 +403,16 @@ sub _get_one_websocket_record
 
 
 	# If we don't have a websocket state, create one
-	if (!$self->{'state_websocket_read'}) {
-		$self->{'state_websocket_read'} = new POE::Filter::HybridHTTP::WebSocketFrame();
+	if (!$self->{'websocket_state'}) {
+		$self->{'websocket_state'} = new POE::Filter::HybridHTTP::WebSocketFrame();
 	}
-	$self->{'state_websocket_read'}->append($self->{'buffer'});
+	$self->{'websocket_state'}->append($self->{'buffer'});
 	# Blank our buffer
 	$self->{'buffer'} = '';
 
 	# Loop with records and push onto result set
 	my @results;
-	while (my $item = $self->{'state_websocket_read'}->next()) {
+	while (my $item = $self->{'websocket_state'}->next()) {
 		push(@results,$item);
 	}
 
-- 
GitLab