Incorporating Michael Carter's websocket patch that includes query strings in the location headers.

This commit is contained in:
Ryan Williams
2010-07-05 12:54:22 -07:00
parent 133253e6b3
commit 17a7a88ae6
2 changed files with 14 additions and 7 deletions

View File

@@ -55,7 +55,8 @@ Thanks To
* Benoit Chesneau, bug report on green.os and patch to fix it * Benoit Chesneau, bug report on green.os and patch to fix it
* Slant, better iterator implementation in tpool * Slant, better iterator implementation in tpool
* Ambroff, nice pygtk hub example * Ambroff, nice pygtk hub example
* Michael Carter, and Marcin Bachry, nice repro of a bug and good diagnosis leading to the fix * Michael Carter, websocket patch to improve location handling
* Marcin Bachry, nice repro of a bug and good diagnosis leading to the fix
* David Ziegler, reporting issue #53 * David Ziegler, reporting issue #53
* Favo Yang, twisted hub patch * Favo Yang, twisted hub patch
* Schmir, patch that fixes readline method with chunked encoding in wsgi.py * Schmir, patch that fixes readline method with chunked encoding in wsgi.py

View File

@@ -71,27 +71,33 @@ class WebSocketWSGI(object):
response = md5(key).digest() response = md5(key).digest()
# Start building the response # Start building the response
location = 'ws://%s%s%s' % (
environ.get('HTTP_HOST'),
environ.get('SCRIPT_NAME'),
environ.get('PATH_INFO')
)
qs = environ.get('QUERY_STRING')
if qs:
location += '?' + qs
if self.protocol_version == 75: if self.protocol_version == 75:
handshake_reply = ("HTTP/1.1 101 Web Socket Protocol Handshake\r\n" handshake_reply = ("HTTP/1.1 101 Web Socket Protocol Handshake\r\n"
"Upgrade: WebSocket\r\n" "Upgrade: WebSocket\r\n"
"Connection: Upgrade\r\n" "Connection: Upgrade\r\n"
"WebSocket-Origin: %s\r\n" "WebSocket-Origin: %s\r\n"
"WebSocket-Location: ws://%s%s\r\n\r\n" % ( "WebSocket-Location: %s\r\n\r\n" % (
environ.get('HTTP_ORIGIN'), environ.get('HTTP_ORIGIN'),
environ.get('HTTP_HOST'), location))
environ.get('PATH_INFO')))
elif self.protocol_version == 76: elif self.protocol_version == 76:
handshake_reply = ("HTTP/1.1 101 Web Socket Protocol Handshake\r\n" handshake_reply = ("HTTP/1.1 101 Web Socket Protocol Handshake\r\n"
"Upgrade: WebSocket\r\n" "Upgrade: WebSocket\r\n"
"Connection: Upgrade\r\n" "Connection: Upgrade\r\n"
"Sec-WebSocket-Origin: %s\r\n" "Sec-WebSocket-Origin: %s\r\n"
"Sec-WebSocket-Protocol: %s\r\n" "Sec-WebSocket-Protocol: %s\r\n"
"Sec-WebSocket-Location: ws://%s%s\r\n" "Sec-WebSocket-Location: %s\r\n"
"\r\n%s"% ( "\r\n%s"% (
environ.get('HTTP_ORIGIN'), environ.get('HTTP_ORIGIN'),
environ.get('HTTP_SEC_WEBSOCKET_PROTOCOL', 'default'), environ.get('HTTP_SEC_WEBSOCKET_PROTOCOL', 'default'),
environ.get('HTTP_HOST'), location,
environ.get('PATH_INFO'),
response)) response))
else: #pragma NO COVER else: #pragma NO COVER
raise ValueError("Unknown WebSocket protocol version.") raise ValueError("Unknown WebSocket protocol version.")