Skip to content

Commit b1bb563

Browse files
committed
Merge pull request Lawouach#33 from patrickod/master
Fix SSL support in TornadoWebSocketClient and add missing import
2 parents 1a7b38c + a5b0a4e commit b1bb563

1 file changed

Lines changed: 17 additions & 8 deletions

File tree

ws4py/client/tornadoclient.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,26 @@
11
# -*- coding: utf-8 -*-
22
import socket
33
from urlparse import urlsplit
4+
import ssl
45

56
from tornado import iostream, escape
67
from ws4py.client import WebSocketBaseClient
8+
from ws4py.exc import HandshakeError
79

810
__all__ = ['TornadoWebSocketClient']
911

1012
class TornadoWebSocketClient(WebSocketBaseClient):
1113
def __init__(self, url, protocols=None, extensions=None, io_loop=None):
1214
WebSocketBaseClient.__init__(self, url, protocols, extensions)
13-
self.io = iostream.IOStream(self.sock, io_loop)
15+
parts = urlsplit(self.url)
16+
if parts.scheme == "wss":
17+
self.sock = ssl.wrap_socket(self.sock,
18+
do_handshake_on_connect=False)
19+
self.io = iostream.SSLIOStream(self.sock, io_loop)
20+
else:
21+
self.io = iostream.IOStream(self.sock, io_loop)
1422
self.sender = self.io.write
23+
self.io_loop = io_loop
1524

1625
def connect(self):
1726
parts = urlsplit(self.url)
@@ -29,11 +38,11 @@ def __send_handshake(self):
2938
self.io.set_close_callback(self.__connection_closed)
3039
self.io.write(escape.utf8(self.handshake_request),
3140
self.__handshake_sent)
32-
41+
3342
def __connection_closed(self, *args, **kwargs):
3443
self.server_terminated = True
3544
self.closed(1006, 'Connection closed during handshake')
36-
45+
3746
def __handshake_sent(self):
3847
self.io.read_until("\r\n\r\n", self.__handshake_completed)
3948

@@ -46,7 +55,7 @@ def __handshake_completed(self, data):
4655
except HandshakeError:
4756
self.close_connection()
4857
raise
49-
58+
5059
self.opened()
5160
self.io.set_close_callback(self.__stream_closed)
5261
self.io.read_bytes(self.reading_buffer_size, self.__fetch_more)
@@ -64,7 +73,7 @@ def __fetch_more(self, bytes):
6473

6574
def __gracefully_terminate(self):
6675
self.client_terminated = self.server_terminated = True
67-
76+
6877
try:
6978
if not self.stream.closing:
7079
self.closed(1006)
@@ -93,7 +102,7 @@ def data_provider():
93102
yield "#" * i
94103

95104
self.send(data_provider())
96-
105+
97106
for i in range(0, 200, 25):
98107
self.send("*" * i)
99108

@@ -104,9 +113,9 @@ def received_message(self, m):
104113

105114
def closed(self, code, reason=None):
106115
ioloop.IOLoop.instance().stop()
107-
116+
108117
ws = MyClient('http://localhost:9000/ws', protocols=['http-only', 'chat'])
109118
ws.connect()
110-
119+
111120
ioloop.IOLoop.instance().start()
112121

0 commit comments

Comments
 (0)