Skip to content

Commit 2d4312d

Browse files
committed
Merge branch 'master' of github.com:Lawouach/WebSocket-for-Python
2 parents 06c747a + b1bb563 commit 2d4312d

1 file changed

Lines changed: 22 additions & 8 deletions

File tree

ws4py/client/tornadoclient.py

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,48 @@
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)
1827
host, port = parts.netloc, 80
1928
if ':' in host:
2029
host, port = parts.netloc.split(':')
30+
self.io.set_close_callback(self.__connection_refused)
2131
self.io.connect((host, int(port)), self.__send_handshake)
2232

33+
def __connection_refused(self, *args, **kwargs):
34+
self.server_terminated = True
35+
self.closed(1005, 'Connection refused')
36+
2337
def __send_handshake(self):
2438
self.io.set_close_callback(self.__connection_closed)
2539
self.io.write(escape.utf8(self.handshake_request),
2640
self.__handshake_sent)
27-
41+
2842
def __connection_closed(self, *args, **kwargs):
2943
self.server_terminated = True
3044
self.closed(1006, 'Connection closed during handshake')
31-
45+
3246
def __handshake_sent(self):
3347
self.io.read_until("\r\n\r\n", self.__handshake_completed)
3448

@@ -41,7 +55,7 @@ def __handshake_completed(self, data):
4155
except HandshakeError:
4256
self.close_connection()
4357
raise
44-
58+
4559
self.opened()
4660
self.io.set_close_callback(self.__stream_closed)
4761
self.io.read_bytes(self.reading_buffer_size, self.__fetch_more)
@@ -59,7 +73,7 @@ def __fetch_more(self, bytes):
5973

6074
def __gracefully_terminate(self):
6175
self.client_terminated = self.server_terminated = True
62-
76+
6377
try:
6478
if not self.stream.closing:
6579
self.closed(1006)
@@ -88,7 +102,7 @@ def data_provider():
88102
yield "#" * i
89103

90104
self.send(data_provider())
91-
105+
92106
for i in range(0, 200, 25):
93107
self.send("*" * i)
94108

@@ -99,9 +113,9 @@ def received_message(self, m):
99113

100114
def closed(self, code, reason=None):
101115
ioloop.IOLoop.instance().stop()
102-
116+
103117
ws = MyClient('http://localhost:9000/ws', protocols=['http-only', 'chat'])
104118
ws.connect()
105-
119+
106120
ioloop.IOLoop.instance().start()
107121

0 commit comments

Comments
 (0)