@@ -72,7 +72,7 @@ def ws(self):
7272from cherrypy .process import plugins
7373from cherrypy .wsgiserver import HTTPConnection , HTTPRequest
7474
75- from ws4py import WS_KEY
75+ from ws4py import WS_KEY , WS_VERSION
7676from ws4py .exc import HandshakeError
7777from ws4py .websocket import WebSocket
7878
@@ -95,7 +95,7 @@ def _setup(self):
9595 hooks .attach ('on_end_request' , self .start_handler ,
9696 priority = 70 )
9797
98- def upgrade (self , protocols = None , extensions = None , version = 13 , handler_cls = WebSocket ):
98+ def upgrade (self , protocols = None , extensions = None , version = WS_VERSION , handler_cls = WebSocket ):
9999 """
100100 Performs the upgrade of the connection to the WebSocket
101101 protocol.
@@ -131,13 +131,16 @@ def upgrade(self, protocols=None, extensions=None, version=13, handler_cls=WebSo
131131 (key , actual_value ))
132132
133133 version = request .headers .get ('Sec-WebSocket-Version' )
134+ supported_versions = ', ' .join ([str (v ) for v in ws_version ])
135+ version_is_valid = False
134136 if version :
135- if version != str (ws_version ):
136- cherrypy .response .headers ['Sec-WebSocket-Version' ] = str (ws_version )
137- raise HandshakeError ('Unsupported WebSocket version: %s' % version )
138- else :
139- cherrypy .response .headers ['Sec-WebSocket-Version' ] = str (ws_version )
140- raise HandshakeError ('WebSocket version required' )
137+ try : version = int (version )
138+ except : pass
139+ else : version_is_valid = version in ws_version
140+
141+ if not version_is_valid :
142+ cherrypy .response .headers ['Sec-WebSocket-Version' ] = supported_versions
143+ raise HandshakeError ('Unhandled or missing WebSocket version' )
141144
142145 key = request .headers .get ('Sec-WebSocket-Key' )
143146 if key :
@@ -184,7 +187,7 @@ def upgrade(self, protocols=None, extensions=None, version=13, handler_cls=WebSo
184187 response .headers ['Content-Type' ] = 'text/plain'
185188 response .headers ['Upgrade' ] = 'websocket'
186189 response .headers ['Connection' ] = 'Upgrade'
187- response .headers ['Sec-WebSocket-Version' ] = str (ws_version )
190+ response .headers ['Sec-WebSocket-Version' ] = str (version )
188191 response .headers ['Sec-WebSocket-Accept' ] = base64 .b64encode (sha1 (key + WS_KEY ).digest ())
189192 if ws_protocols :
190193 response .headers ['Sec-WebSocket-Protocol' ] = ', ' .join (ws_protocols )
0 commit comments