Skip to content

Commit

Permalink
umqtt.simple: Restore legacy ssl/ssl_params arguments.
Browse files Browse the repository at this point in the history
Commit 35d41db changed the API for using
SSL with umqtt, but only did a minor version increase.  This broke various
uses of this library, eg
https://github.com/aws-samples/aws-iot-core-getting-started-micropython

Reinstate the original API for specifying an SSL connection.  This library
now supports the following:
- default, ssl=None or ssl=False: no SSL
- ssl=True and optional ssl_params specified: use ssl.wrap_socket
- ssl=<SSLContext instance>: use provided SSL context to wrap socket

Signed-off-by: Damien George <damien@micropython.org>
  • Loading branch information
dpgeorge committed Nov 7, 2024
1 parent d6faaf8 commit 0bace17
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 2 deletions.
4 changes: 3 additions & 1 deletion micropython/umqtt.simple/manifest.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
metadata(description="Lightweight MQTT client for MicroPython.", version="1.5.0")
metadata(description="Lightweight MQTT client for MicroPython.", version="1.6.0")

# Originally written by Paul Sokolovsky.

require("ssl")

package("umqtt")
9 changes: 8 additions & 1 deletion micropython/umqtt.simple/umqtt/simple.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ def __init__(
password=None,
keepalive=0,
ssl=None,
ssl_params={},
):
if port == 0:
port = 8883 if ssl else 1883
Expand All @@ -25,6 +26,7 @@ def __init__(
self.server = server
self.port = port
self.ssl = ssl
self.ssl_params = ssl_params
self.pid = 0
self.cb = None
self.user = user
Expand Down Expand Up @@ -65,7 +67,12 @@ def connect(self, clean_session=True, timeout=None):
self.sock.settimeout(timeout)
addr = socket.getaddrinfo(self.server, self.port)[0][-1]
self.sock.connect(addr)
if self.ssl:
if self.ssl is True:
# Legacy support for ssl=True and ssl_params arguments.
import ssl

self.sock = ssl.wrap_socket(self.sock, **self.ssl_params)
elif self.ssl:
self.sock = self.ssl.wrap_socket(self.sock, server_hostname=self.server)
premsg = bytearray(b"\x10\0\0\0\0\0")
msg = bytearray(b"\x04MQTT\x04\x02\0\0")
Expand Down

0 comments on commit 0bace17

Please sign in to comment.