Commit Graph

234 Commits

Author SHA1 Message Date
David Cermak
f44dcb1c26 Config: Add a new option to disable publishing when disconnected
Related https://github.com/espressif/esp-mqtt/pull/177
2020-12-09 10:14:54 +01:00
Umer Ilyas
dc7fd5c0b1 Publish: Add new API to enqueue qos>0 messages
Closes https://github.com/espressif/esp-mqtt/issues/155
2020-12-09 10:14:54 +01:00
Axel Lin
b7158a4aea mqtt: Remove unused mqtt_header_state_t
mqtt_header_state_t was added by commit 0450bd0093 ("MQTT Client:  Added support for receiving empty payload"),
but it's no longer used since commit fd564b1f17 ("client receive: refactor receive to read only one message to fragment only payload for longer messages").
Thus remove the unused mqtt_header_state_t.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2020-11-23 16:24:33 +08:00
David Cermak
8562437c8a mqtt_config: Add config value to disable keepalive mechanism
Added a separate config value to allow disable the keepalive mechanism (and keep the existing API the same)
Internally though, the keepalive value (in connect_info) is in line with 3.1.2.10 Keep Alive from mqtt spec:
* keepalive=0: Keep alive mechanism disabled (server not to disconnect the client on its inactivity)
* period in seconds to send a Control packet if inactive

Closes https://github.com/espressif/esp-mqtt/issues/179
2020-11-18 14:41:44 +01:00
David Čermák
e8be6c3aa7 Merge branch 'feature/add_get_outbox_size' into 'master'
Add esp_mqtt_client_get_outbox_size API

See merge request espressif/esp-mqtt!82
2020-11-18 16:45:27 +08:00
David Čermák
65d8a813ea Merge branch 'bugfix/missing_unlock_and_cleanup' into 'master'
Minor fixes and cleanup

See merge request espressif/esp-mqtt!81
2020-11-18 16:44:41 +08:00
Axel Lin
0a1d9d0300 mqtt: Add esp_mqtt_client_get_outbox_size API
Allow application to get current outbox_size.
Application may try to send many publish request for a long period and then
system can hit OOM when publish QoS>1 with a busy borker.
Reduce OUTBOX_EXPIRED_TIMEOUT_MS does not help too much because the publish
freauency depends on the data received in different environment.
i.e. In some environment, sometimes it's easy to hit OOM before reaching OUTBOX_EXPIRED_TIMEOUT_MS.

To avoid such issue, add esp_mqtt_client_get_outbox_size API, so the application
can stop publishing to avoid OOM when outbox takes too much memory.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2020-11-11 17:13:32 +08:00
Axel Lin
845c2a3a1e mqtt: Fix missing MQTT_API_UNLOCK in esp_mqtt_client_stop error path
Fixes: 5e17dcaeb2 ("MQTT: Fix esp_mqtt_client_stop deadlock")
Signed-off-by: Axel Lin <axel.lin@ingics.com>
2020-11-09 16:06:58 +08:00
David Cermak
23c8e1ecf5 error reporting: extended error event to use errno captured in transports
Also renamed error type MQTT_ERROR_TYPE_ESP_TLS to
MQTT_ERROR_TYPE_TCP_TRANSPORT, as the former was confusing and might
have implied the error occurred in TLS layer.

Applicable IDF version >= v4.3

Closes https://github.com/espressif/esp-idf/issues/5906
2020-11-04 08:01:06 +01:00
David Čermák
d6613e995b Merge branch 'bugfix/size_t_for_all_lengths' into 'master'
Use size_t for all lengths

See merge request espressif/esp-mqtt!79
2020-10-12 18:16:29 +08:00
Angus Gratton
b9db8d9020 Use size_t for all lengths
Previously, uint32_t and size_t were used interchangeably. These types are
interchangeable on Xtensa gcc (uint32_t == size_t == unsigned int), but not on most
other 32-bit gcc architectures (where uint32_t == unsigned long, size_t ==
unsigned int).
2020-10-09 16:33:12 +11:00
Dmitriy Shilin
a03228ac46 Allow to configure network timeout
Merges https://github.com/espressif/esp-mqtt/pull/166
2020-09-02 08:36:01 +02:00
Aditya Patwardhan
7d8e59de00 mqtt: Add support for Digital Signature (through ESP-TLS)
Digital Signature enables hardware accelerated RSA signature
for TLS handshake.The RSA private key(client key) is also stored in
encrypted format and ecryption key is stored in hardware(efuse) which adds
additional level of security for mutual authentication.
* Digital Signature is only supported for ESP32-S2.

Applicable IDF version >= v4.3
2020-08-18 11:55:43 +05:30
David Čermák
ae408d9a69 Merge branch 'feature/outbox_limit' into 'master'
MQTT: Cleanup expired messages when offline

See merge request espressif/esp-mqtt!76
2020-08-18 14:08:57 +08:00
David Čermák
a8ef2a434b Merge branch 'bugfix/read_error_event' into 'master'
MQTT: add dispatch error event for read errors

See merge request espressif/esp-mqtt!75
2020-08-18 14:07:50 +08:00
David Čermák
867773e423 Merge branch 'fix/secure_element_feature' into 'master'
esp-mqtt: i) fix version check for secure_element

See merge request espressif/esp-mqtt!70
2020-08-18 14:04:39 +08:00
Marius Vikhammer
bdadd77c6e mqtt: deleted expired messages even when offline
As long as the client was disconnect no cleanup were performed,
consuming memory for every message published. Even if they were already
expired and would be discarded when reconnected.

Also moves delete of expired msgs before retransmit is done.
This avoids situtations where a message could be sent even if it was
expired.

Closes https://github.com/espressif/esp-idf/issues/5668
2020-08-10 16:42:32 +08:00
Marius Vikhammer
f7325bfa10 mqtt: esp_mqtt_client_publish now returns msd id for QoS>0 when offline 2020-08-10 14:47:05 +08:00
Marius Vikhammer
d4aaec08ff MQTT: add dispatch error event for read errors
Closes https://github.com/espressif/esp-idf/issues/5704
2020-08-07 17:54:40 +08:00
Marius Vikhammer
5e17dcaeb2 MQTT: Fix esp_mqtt_client_stop deadlock
esp_mqtt_client_stop would lead to a deadlock (with itself) when called
from the event handler.

Updated comments to reflect that some functions should not be called from
the event handler.

Closes https://github.com/espressif/esp-mqtt/issues/163
2020-08-04 19:26:37 +08:00
Aditya Patwardhan
db4bce01ab mqtt: i)fix version check for secure_element
ii) fix secure_element error return

The feature allows use of secure element for TLS connections, which makes use of hardware security for storage of client private keys(only keys with ECC algorithm)

Applicable IDF versions: >= 4.2
2020-08-03 09:45:27 +05:30
Marius Vikhammer
8a412c147d Add check for consistency between config settings
Warn user if the MQTT config seems misconfigured, e.g.
user specifies a SSL certificate, but SSL not activated
2020-07-08 12:54:00 +08:00
Marius Vikhammer
40b06deb10 Allow the query part of the uri to be a part of the path
Closes IDFGH-3565
Closes https://github.com/espressif/esp-mqtt/issues/161
2020-06-29 10:33:42 +08:00
Aditya Patwardhan
a7ff9afa3f esp-mqtt: add support for tls with secure element (ATECC608A)
Closes https://github.com/espressif/esp-mqtt/issues/156
2020-06-25 10:36:58 +05:30
Marius Vikhammer
5e8950e681 SSL: add config option for skipping common name check
Closes IDFGH-3408
Closes https://github.com/espressif/esp-mqtt/issues/158
2020-06-09 14:23:40 +08:00
Piyush Shah
fb41520206 mqtt_print: Change the message printed after MQTT connection failure
Since the original message was confusing.
2020-04-24 23:05:47 +05:30
David Čermák
0c3d306589 Merge branch 'bugfix/print_messages' into 'master'
Some changes to debug prints

See merge request espressif/esp-mqtt!63
2020-04-08 01:33:01 +08:00
Piyush Shah
b02746492a esp_mqtt: Change an error print to use ESP_LOGE instead of ESP_LOGI
And another one changed from LOGI to LOGD
2020-04-06 12:13:18 +05:30
Piyush Shah
dc1a635a97 esp_mqtt_abort_connection: Fixed an issue which could result in a race condition and subsequent crash 2020-03-30 19:59:27 +05:30
David Cermak
f243225521 config: option to configure output buffer size
Both input and output buffers had the same size, but it is desirable in embedded environment to use asymetric buffers. Added configuration option to defined output buffer size, if not defined output buffer defaults to the same size as the input buffer.

Closes https://github.com/espressif/esp-mqtt/issues/152
2020-03-10 15:26:49 +01:00
David Cermak
62d1509961 Resend queued: Set duplicate flag for both qos1 and qos2
Closes https://github.com/espressif/esp-mqtt/issues/151
2020-02-20 16:00:15 +01:00
David Cermak
e2aa29d2ea Client: Fix C++ build failing on incorrect event enum conversion
Closes https://github.com/espressif/esp-idf/issues/4787
2020-02-20 14:44:38 +01:00
David Cermak
3e4f91ae50 Client: unlock if unsubscribe message fails to be created
In a similar way as for the subscribe message
2020-02-10 08:01:10 +01:00
Umer Ilyas
7983357489 Client: unlock if subscribe message fails to be created
Closes https://github.com/espressif/esp-mqtt/issues/150
2020-02-10 08:00:45 +01:00
David Cermak
38eab46f14 Fix compilation issue with IDF version 4.0 and lower
Closes https://github.com/espressif/esp-mqtt/issues/149
2020-01-31 21:42:45 +01:00
David Cermak
2994c3f273 receive longer (websocket) data with standard tcp_transport reads
closes IDF-1084
2020-01-30 08:32:24 +01:00
David Cermak
420441b677 set separate ssl connection properties before transport connect 2020-01-30 08:31:59 +01:00
David Cermak
bbcf078a2b fix possible double free of client config if init fails 2020-01-29 08:25:05 +01:00
David Cermak
ed90a64551 client: queued oversized messaged even if not connected 2020-01-29 08:25:05 +01:00
David Cermak
3a47e3abae client locking: used recursive mutex instead to avoid getting the code too complex 2020-01-27 12:26:10 +01:00
David Cermak
9eca3f6db9 mqtt_client: set_config to update ssl-transport configuration
closes https://github.com/espressif/esp-mqtt/issues/146
closes IDFGH-2534
2020-01-25 22:24:00 +01:00
David Cermak
6e08f6a04f mqtt_outbox: fix to store timestamps in long-long format
closes https://github.com/espressif/esp-mqtt/issues/144
closes IDFGH-2491
2020-01-25 21:57:02 +01:00
Marius Vikhammer
7ac0a42831 MQTT: Add runtime selection of mqtt protocol version
Add config option for selecting protocol version at runtime.

This also fixed MQTT protocol version 3.1 which wasnt working with the original implementation

Closes https://github.com/espressif/esp-idf/issues/4448
Closes IDFGH-2311
Closes IDF-1320
2020-01-09 14:49:33 +08:00
David Cermak
2684ed413d add support for password protected client-key 2020-01-08 09:05:18 +01:00
David Cermak
97f91eda5c wait for the entire connack message with the configured timeout
Configured network timeout was used to receive separate characters
in the message. This change waits for the configured timeout if reading
the mqtt packet was left in progress (mqtt_message_receive() returns 0)

Closes FCS-254
2019-12-23 07:54:59 +01:00
Marius Vikhammer
17e2f68e43 Fixed bug where the event loop wouldn't get cleaned up during destroy.
The event loop would never get deleted due to the event loop handle being
cleared to 0 before checking if it exists.

Closes https://github.com/espressif/esp-idf/issues/4433
Closes IDFGH-2293
2019-12-04 11:12:17 +08:00
Marius Vikhammer
9ca997d2d4 Fix potential memory leak if failing to create mutex
Closes https://github.com/espressif/esp-idf/issues/4384
Closes IDFGH-2235
2019-11-22 20:28:45 +01:00
Marius Vikhammer
9655845fdc Fixed crash due to publishing before successful transport connect.
Initialization of the outgoing message buffer is now done during mqtt_init,
which means messages can be queued before the first connection is made.

The client now checks for fail_message after creating a message, and cancels
the current operation if this happens. Updated error handling in client_publish
to be more inline with API documentation.

Closes https://github.com/espressif/esp-idf/issues/4349
Closes https://github.com/espressif/esp-mqtt/issues/140
2019-11-22 20:28:45 +01:00
Marius Vikhammer
e1ab64f0d8 Add support for ALPN
Closes IDF-1162

Closes https://github.com/espressif/esp-mqtt/issues/137
2019-11-20 17:30:58 +08:00
Marius Vikhammer
3da472fd37 Add reconnect time as a configurable parameter.
Closes IDF-1126
2019-11-18 14:43:44 +08:00