Add SSL connect to WS connection

pull/8/head
Nicolas Jouanin 2015-08-02 17:09:55 +02:00
rodzic 9d0ee85497
commit 103f7e8419
1 zmienionych plików z 8 dodań i 5 usunięć

Wyświetl plik

@ -211,7 +211,10 @@ class MQTTClient:
self.session.password = uri_attributes.password self.session.password = uri_attributes.password
self.session.remote_address = uri_attributes.hostname self.session.remote_address = uri_attributes.hostname
self.session.remote_port = uri_attributes.port self.session.remote_port = uri_attributes.port
if scheme == 'mqtts': if scheme in ('mqtt', 'mqtts') and not self.session.remote_port:
self.session.remote_port = 8883 if scheme == 'mqtts' else 1883
if scheme in ('mqtts', 'wss'):
if self.session.cafile is None or self.session.cafile == '': if self.session.cafile is None or self.session.cafile == '':
self.logger.warn("TLS connection can't be estabilshed, no certificate file (.cert) given") self.logger.warn("TLS connection can't be estabilshed, no certificate file (.cert) given")
raise ClientException("TLS connection can't be estabilshed, no certificate file (.cert) given") raise ClientException("TLS connection can't be estabilshed, no certificate file (.cert) given")
@ -220,19 +223,19 @@ class MQTTClient:
cafile=self.session.cafile, cafile=self.session.cafile,
capath=self.session.capath, capath=self.session.capath,
cadata=self.session.cadata) cadata=self.session.cadata)
if scheme in ('mqtt', 'mqtts') and not self.session.remote_port:
self.session.remote_port = 8883 if scheme == 'mqtts' else 1883
# Open connection
if scheme in ('mqtt', 'mqtts'): if scheme in ('mqtt', 'mqtts'):
conn_reader, conn_writer = \ conn_reader, conn_writer = \
yield from asyncio.open_connection(self.session.remote_address, self.session.remote_port, ssl=sc) yield from asyncio.open_connection(self.session.remote_address, self.session.remote_port, ssl=sc)
reader = StreamReaderAdapter(conn_reader) reader = StreamReaderAdapter(conn_reader)
writer = StreamWriterAdapter(conn_writer) writer = StreamWriterAdapter(conn_writer)
elif scheme == 'ws': elif scheme == ('ws', 'wss'):
websocket = yield from websockets.connect(self.session.broker_uri) websocket = yield from websockets.connect(self.session.broker_uri, ssl=sc)
reader = WebSocketsReader(websocket) reader = WebSocketsReader(websocket)
writer = WebSocketsWriter(websocket) writer = WebSocketsWriter(websocket)
# Handle MQTT protocol
self._handler = ClientProtocolHandler(reader, writer, loop=self._loop) self._handler = ClientProtocolHandler(reader, writer, loop=self._loop)
self._handler.attach_to_session(self.session) self._handler.attach_to_session(self.session)
yield from self._handler.start() yield from self._handler.start()