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