On 3/6/20 11:20 AM, Fabian Grünbichler wrote:
> in order to make websocket proxying feasible as general tunnel, we need
> to be able to transfer more than a few MB/s
> 
> Signed-off-by: Fabian Grünbichler <f.gruenbich...@proxmox.com>
> ---
>  PVE/APIServer/AnyEvent.pm | 18 +++++++++---------
>  1 file changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/PVE/APIServer/AnyEvent.pm b/PVE/APIServer/AnyEvent.pm
> index 3ce948f..9f432e1 100644
> --- a/PVE/APIServer/AnyEvent.pm
> +++ b/PVE/APIServer/AnyEvent.pm
> @@ -479,19 +479,19 @@ sub websocket_proxy {
>  
>                   my $data = substr($hdl->{rbuf}, 0, $offset + 4 + 
> $payload_len, ''); # now consume data
>  
> -                 my @mask = (unpack('C', substr($data, $offset+0, 1)),
> -                     unpack('C', substr($data, $offset+1, 1)),
> -                     unpack('C', substr($data, $offset+2, 1)),
> -                     unpack('C', substr($data, $offset+3, 1)));
> -
> +                 my $mask = substr($data, $offset, 4);
>                   $offset += 4;
>  
>                   my $payload = substr($data, $offset, $payload_len);
>  
> -                 for (my $i = 0; $i < $payload_len; $i++) {
> -                     my $d = unpack('C', substr($payload, $i, 1));
> -                     my $n = $d ^ $mask[$i % 4];
> -                     substr($payload, $i, 1, pack('C', $n));
> +                 # NULL-mask might be used over TLS, skip to increase 
> performance
> +                 if ($mask ne pack('N', 0)) {
> +                     # repeat 4 byte mask to payload length + up to 4 byte
> +                     $mask = $mask x (int($payload_len / 4) + 1);
> +                     # truncate mask to payload length
> +                     substr($mask, $payload_len) = "";
> +                     # (un-)apply mask
> +                     $payload ^= $mask;
>                   }
>  
>                   $payload = decode_base64($payload) if !$binary;
> 

applied, thanks!


_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to