summaryrefslogtreecommitdiff
path: root/websocket/_handshake.py
diff options
context:
space:
mode:
Diffstat (limited to 'websocket/_handshake.py')
-rw-r--r--websocket/_handshake.py14
1 files changed, 9 insertions, 5 deletions
diff --git a/websocket/_handshake.py b/websocket/_handshake.py
index e9786e1..9a727dc 100644
--- a/websocket/_handshake.py
+++ b/websocket/_handshake.py
@@ -55,7 +55,8 @@ else:
# websocket supported version.
VERSION = 13
-SUPPORTED_REDIRECT_STATUSES = [HTTPStatus.MOVED_PERMANENTLY, HTTPStatus.FOUND, HTTPStatus.SEE_OTHER]
+SUPPORTED_REDIRECT_STATUSES = (HTTPStatus.MOVED_PERMANENTLY, HTTPStatus.FOUND, HTTPStatus.SEE_OTHER,)
+SUCCESS_STATUSES = SUPPORTED_REDIRECT_STATUSES + (HTTPStatus.SWITCHING_PROTOCOLS,)
CookieJar = SimpleCookieJar()
@@ -96,14 +97,12 @@ def _pack_hostname(hostname):
def _get_handshake_headers(resource, host, port, options):
headers = [
"GET %s HTTP/1.1" % resource,
- "Upgrade: websocket",
- "Connection: Upgrade"
+ "Upgrade: websocket"
]
if port == 80 or port == 443:
hostport = _pack_hostname(host)
else:
hostport = "%s:%d" % (_pack_hostname(host), port)
-
if "host" in options and options["host"] is not None:
headers.append("Host: %s" % options["host"])
else:
@@ -127,6 +126,11 @@ def _get_handshake_headers(resource, host, port, options):
if not 'header' in options or 'Sec-WebSocket-Version' not in options['header']:
headers.append("Sec-WebSocket-Version: %s" % VERSION)
+ if not 'connection' in options or options['connection'] is None:
+ headers.append('Connection: upgrade')
+ else:
+ headers.append(options['connection'])
+
subprotocols = options.get("subprotocols")
if subprotocols:
headers.append("Sec-WebSocket-Protocol: %s" % ",".join(subprotocols))
@@ -155,7 +159,7 @@ def _get_handshake_headers(resource, host, port, options):
return headers, key
-def _get_resp_headers(sock, success_statuses=(101, 301, 302, 303)):
+def _get_resp_headers(sock, success_statuses=SUCCESS_STATUSES):
status, resp_headers, status_message = read_headers(sock)
if status not in success_statuses:
raise WebSocketBadStatusException("Handshake status %d %s", status, status_message, resp_headers)