Since there are no changes in two months. Simply ping for merging, sorry for bothering you again.
Daniel P. Berrangé <berra...@redhat.com> 於 2019年12月2日 週一 下午11:53寫道: > On Sat, Nov 23, 2019 at 11:43:06AM +0800, Yu-Chen Lin wrote: > > noVNC doesn't use 'binary' protocol by default after > > commit c912230309806aacbae4295faf7ad6406da97617. > > > > It will cause qemu return 400 when handshaking. > > > > To overcome this problem and remain compatibility of > > older noVNC client. > > > > We treat 'binary' and no sub-protocol as the same > > so that we can support different version of noVNC > > client. > > > > Tested on noVNC before c912230 and after c912230. > > > > Buglink: https://bugs.launchpad.net/qemu/+bug/1849644 > > > > Signed-off-by: Yu-Chen Lin <npes87...@gmail.com> > > --- > > io/channel-websock.c | 35 +++++++++++++++++++++++------------ > > 1 file changed, 23 insertions(+), 12 deletions(-) > > Thank you, I have queued this for 5.0. > > Signed-off-by: Daniel P. Berrangé <berra...@redhat.com> > > Also CC'ing stable for the first 4.2 bug fix release. > > > > > diff --git a/io/channel-websock.c b/io/channel-websock.c > > index fc36d44eba..918e09ea3f 100644 > > --- a/io/channel-websock.c > > +++ b/io/channel-websock.c > > @@ -49,13 +49,20 @@ > > "Server: QEMU VNC\r\n" \ > > "Date: %s\r\n" > > > > +#define QIO_CHANNEL_WEBSOCK_HANDSHAKE_WITH_PROTO_RES_OK \ > > + "HTTP/1.1 101 Switching Protocols\r\n" \ > > + QIO_CHANNEL_WEBSOCK_HANDSHAKE_RES_COMMON \ > > + "Upgrade: websocket\r\n" \ > > + "Connection: Upgrade\r\n" \ > > + "Sec-WebSocket-Accept: %s\r\n" \ > > + "Sec-WebSocket-Protocol: binary\r\n" \ > > + "\r\n" > > #define QIO_CHANNEL_WEBSOCK_HANDSHAKE_RES_OK \ > > "HTTP/1.1 101 Switching Protocols\r\n" \ > > QIO_CHANNEL_WEBSOCK_HANDSHAKE_RES_COMMON \ > > "Upgrade: websocket\r\n" \ > > "Connection: Upgrade\r\n" \ > > "Sec-WebSocket-Accept: %s\r\n" \ > > - "Sec-WebSocket-Protocol: binary\r\n" \ > > "\r\n" > > #define QIO_CHANNEL_WEBSOCK_HANDSHAKE_RES_NOT_FOUND \ > > "HTTP/1.1 404 Not Found\r\n" \ > > @@ -336,6 +343,7 @@ > qio_channel_websock_find_header(QIOChannelWebsockHTTPHeader *hdrs, > > > > static void qio_channel_websock_handshake_send_res_ok(QIOChannelWebsock > *ioc, > > const char *key, > > + const bool > use_protocols, > > Error **errp) > > { > > char combined_key[QIO_CHANNEL_WEBSOCK_CLIENT_KEY_LEN + > > @@ -361,8 +369,13 @@ static void > qio_channel_websock_handshake_send_res_ok(QIOChannelWebsock *ioc, > > } > > > > date = qio_channel_websock_date_str(); > > - qio_channel_websock_handshake_send_res( > > - ioc, QIO_CHANNEL_WEBSOCK_HANDSHAKE_RES_OK, date, accept); > > + if (use_protocols) { > > + qio_channel_websock_handshake_send_res( > > + ioc, QIO_CHANNEL_WEBSOCK_HANDSHAKE_WITH_PROTO_RES_OK, > date, accept); > > + } else { > > + qio_channel_websock_handshake_send_res( > > + ioc, QIO_CHANNEL_WEBSOCK_HANDSHAKE_RES_OK, date, > accept); > > + } > > > > g_free(date); > > g_free(accept); > > @@ -387,10 +400,6 @@ static void > qio_channel_websock_handshake_process(QIOChannelWebsock *ioc, > > > > protocols = qio_channel_websock_find_header( > > hdrs, nhdrs, QIO_CHANNEL_WEBSOCK_HEADER_PROTOCOL); > > - if (!protocols) { > > - error_setg(errp, "Missing websocket protocol header data"); > > - goto bad_request; > > - } > > > > version = qio_channel_websock_find_header( > > hdrs, nhdrs, QIO_CHANNEL_WEBSOCK_HEADER_VERSION); > > @@ -430,10 +439,12 @@ static void > qio_channel_websock_handshake_process(QIOChannelWebsock *ioc, > > trace_qio_channel_websock_http_request(ioc, protocols, version, > > host, connection, upgrade, > key); > > > > - if (!g_strrstr(protocols, QIO_CHANNEL_WEBSOCK_PROTOCOL_BINARY)) { > > - error_setg(errp, "No '%s' protocol is supported by client '%s'", > > - QIO_CHANNEL_WEBSOCK_PROTOCOL_BINARY, protocols); > > - goto bad_request; > > + if (protocols) { > > + if (!g_strrstr(protocols, > QIO_CHANNEL_WEBSOCK_PROTOCOL_BINARY)) { > > + error_setg(errp, "No '%s' protocol is supported by > client '%s'", > > + QIO_CHANNEL_WEBSOCK_PROTOCOL_BINARY, > protocols); > > + goto bad_request; > > + } > > } > > > > if (!g_str_equal(version, QIO_CHANNEL_WEBSOCK_SUPPORTED_VERSION)) { > > @@ -467,7 +478,7 @@ static void > qio_channel_websock_handshake_process(QIOChannelWebsock *ioc, > > goto bad_request; > > } > > > > - qio_channel_websock_handshake_send_res_ok(ioc, key, errp); > > + qio_channel_websock_handshake_send_res_ok(ioc, key, !!protocols, > errp); > > return; > > > > bad_request: > > -- > > 2.17.1 > > > > Regards, > Daniel > -- > |: https://berrange.com -o- > https://www.flickr.com/photos/dberrange :| > |: https://libvirt.org -o- > https://fstop138.berrange.com :| > |: https://entangle-photo.org -o- > https://www.instagram.com/dberrange :| > >