From 015964a341f3369e6ea59befe6b873fa17cbf629 Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Mon, 17 May 2021 15:07:34 +0200 Subject: [PATCH] AnyEvent/websocket_proxy: remove 'base64' handling novnc does not support this anymore since 2015, and neither does our xtermjs client. it is also not listed in IANAs list of websocket protocols [0]. so simply drop it and only send out binary frames and don't decode text frames 0: https://www.iana.org/assignments/websocket/websocket.xml#subprotocol-name Signed-off-by: Dominik Csapak --- src/PVE/APIServer/AnyEvent.pm | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/src/PVE/APIServer/AnyEvent.pm b/src/PVE/APIServer/AnyEvent.pm index f0e2e68..a7d31cc 100644 --- a/src/PVE/APIServer/AnyEvent.pm +++ b/src/PVE/APIServer/AnyEvent.pm @@ -496,15 +496,6 @@ sub websocket_proxy { my $max_payload_size = 128*1024; - my $binary; - if ($wsproto eq 'binary') { - $binary = 1; - } elsif ($wsproto eq 'base64') { - $binary = 0; - } else { - die "websocket_proxy: unsupported protocol '$wsproto'\n"; - } - if ($param->{port}) { $remhost = 'localhost'; $remport = $param->{port}; @@ -520,13 +511,9 @@ sub websocket_proxy { my $string; my $payload; - if ($binary) { - $string = $opcode ? $opcode : "\x82"; # binary frame - $payload = $$data; - } else { - $string = $opcode ? $opcode : "\x81"; # text frame - $payload = encode_base64($$data, ''); - } + + $string = $opcode ? $opcode : "\x82"; # binary frame + $payload = $$data; my $payload_len = length($payload); if ($payload_len <= 125) { @@ -635,8 +622,6 @@ sub websocket_proxy { $payload ^= $mask; } - $payload = decode_base64($payload) if !$binary; - if ($opcode == 1 || $opcode == 2) { $reqstate->{proxyhdl}->push_write($payload) if $reqstate->{proxyhdl}; } elsif ($opcode == 8) {