diff --git a/.github/workflows/mosq__build.yml b/.github/workflows/mosq__build.yml
index 27ff2581c1..4534408b61 100644
--- a/.github/workflows/mosq__build.yml
+++ b/.github/workflows/mosq__build.yml
@@ -73,3 +73,30 @@ jobs:
mv $dir build
python -m pytest --log-cli-level DEBUG --junit-xml=./results_esp32_${{ matrix.idf_ver }}_${dir#"ci/build_"}.xml --target=esp32
done
+
+ check_consistency:
+ name: Checks that API docs and versions are consistent
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Checks API Docs and versions
+ run: |
+ sudo apt-get update
+ sudo apt-get -y install doxygen
+ pip install esp-doxybook
+ cd components/mosquitto
+ cp api.md api_orig.md
+ ./generate_api_docs.sh
+ diff -wB api.md api_orig.md
+ # check version consistency
+ CONFIG_VERSION=$(grep -Po '(?<=#define VERSION ")[^"]*' port/priv_include/config.h)
+ CZ_VERSION=$(grep -Po '(?<=version: )[^"]*' .cz.yaml)
+ COMP_VERSION=$(grep -Po '(?<=version: ")[^"]*' idf_component.yml)
+ if [ "$CONFIG_VERSION" != "v$CZ_VERSION" ] || [ "$CONFIG_VERSION" != "v$COMP_VERSION" ]; then
+ echo "Version mismatch detected:"
+ echo "config.h: $CONFIG_VERSION"
+ echo ".cz.yaml: $CZ_VERSION"
+ echo "idf_component.yml: $COMP_VERSION"
+ exit 1
+ fi
+ echo "Versions are consistent: $CONFIG_VERSION"
diff --git a/components/mosquitto/.cz.yaml b/components/mosquitto/.cz.yaml
index 0b6507a505..b74ae209d7 100644
--- a/components/mosquitto/.cz.yaml
+++ b/components/mosquitto/.cz.yaml
@@ -3,6 +3,6 @@ commitizen:
bump_message: 'bump(mosq): $current_version -> $new_version'
pre_bump_hooks: python ../../ci/changelog.py mosquitto
tag_format: mosq-v$version
- version: 2.0.20
+ version: 2.0.20~1
version_files:
- idf_component.yml
diff --git a/components/mosquitto/CHANGELOG.md b/components/mosquitto/CHANGELOG.md
index 5c24047c45..954ccc8ee5 100644
--- a/components/mosquitto/CHANGELOG.md
+++ b/components/mosquitto/CHANGELOG.md
@@ -1,5 +1,12 @@
# Changelog
+## [2.0.20~1](https://github.com/espressif/esp-protocols/commits/mosq-v2.0.20_1)
+
+### Bug Fixes
+
+- Use sock_utils instead of func stubs ([3cd0ed37](https://github.com/espressif/esp-protocols/commit/3cd0ed37))
+- Update API docs adding on-message callback ([5dcc3330](https://github.com/espressif/esp-protocols/commit/5dcc3330))
+
## [2.0.20](https://github.com/espressif/esp-protocols/commits/mosq-v2.0.20)
### Features
diff --git a/components/mosquitto/CMakeLists.txt b/components/mosquitto/CMakeLists.txt
index 47e5d551d9..a7e337009e 100644
--- a/components/mosquitto/CMakeLists.txt
+++ b/components/mosquitto/CMakeLists.txt
@@ -74,16 +74,15 @@ idf_component_register(SRCS ${m_srcs}
port/callbacks.c
port/config.c
port/signals.c
- port/ifaddrs.c
port/broker.c
port/files.c
port/net__esp_tls.c
+ port/sysconf.c
PRIV_INCLUDE_DIRS port/priv_include port/priv_include/sys ${m_dir} ${m_src_dir}
${m_incl_dir} ${m_lib_dir} ${m_deps_dir}
INCLUDE_DIRS ${m_incl_dir} port/include
REQUIRES esp-tls
- PRIV_REQUIRES newlib
- )
+ PRIV_REQUIRES newlib sock_utils)
target_compile_definitions(${COMPONENT_LIB} PRIVATE "WITH_BROKER")
target_compile_options(${COMPONENT_LIB} PRIVATE "-Wno-format")
diff --git a/components/mosquitto/api.md b/components/mosquitto/api.md
index f010cbb241..aea93fdfea 100644
--- a/components/mosquitto/api.md
+++ b/components/mosquitto/api.md
@@ -15,6 +15,7 @@
| Type | Name |
| ---: | :--- |
| struct | [**mosq\_broker\_config**](#struct-mosq_broker_config)
_Mosquitto configuration structure._ |
+| typedef void(\* | [**mosq\_message\_cb\_t**](#typedef-mosq_message_cb_t)
|
## Functions
@@ -34,12 +35,20 @@ ESP port of mosquittto supports only the options in this configuration structure
Variables:
+- void(\* handle_message_cb
On message callback. If configured, user function is called whenever mosquitto processes a message.
+
- char \* host
Address on which the broker is listening for connections
- int port
Port number of the broker to listen to
- esp\_tls\_cfg\_server\_t \* tls_cfg
ESP-TLS configuration (if TLS transport used) Please refer to the ESP-TLS official documentation for more details on configuring the TLS options. You can open the respective docs with this idf.py command: `idf.py docs -sp api-reference/protocols/esp_tls.html`
+### typedef `mosq_message_cb_t`
+
+```c
+typedef void(* mosq_message_cb_t) (char *client, char *topic, char *data, int len, int qos, int retain);
+```
+
## Functions Documentation
diff --git a/components/mosquitto/idf_component.yml b/components/mosquitto/idf_component.yml
index d8aee0e68a..6dda14b8f1 100644
--- a/components/mosquitto/idf_component.yml
+++ b/components/mosquitto/idf_component.yml
@@ -1,5 +1,7 @@
-version: "2.0.20~0"
+version: "2.0.20~1"
url: https://github.com/espressif/esp-protocols/tree/master/components/mosquitto
description: The component provides a simple ESP32 port of mosquitto broker
dependencies:
idf: '>=5.1'
+ espressif/sock_utils:
+ version: '^0.2'
diff --git a/components/mosquitto/port/ifaddrs.c b/components/mosquitto/port/ifaddrs.c
deleted file mode 100644
index 1e746416bd..0000000000
--- a/components/mosquitto/port/ifaddrs.c
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2024 Roger Light
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * SPDX-FileContributor: 2024 Espressif Systems (Shanghai) CO LTD
- */
-#include "ifaddrs.h"
-
-// Dummy implementation of getifaddrs()
-// TODO: Implement this if we need to use bind_interface option of listener's config
-int getifaddrs(struct ifaddrs **ifap)
-{
- return -1;
-}
-
-void freeifaddrs(struct ifaddrs *ifa)
-{
-
-}
diff --git a/components/mosquitto/port/priv_include/config.h b/components/mosquitto/port/priv_include/config.h
index 8680e88f75..bf7cb619b9 100644
--- a/components/mosquitto/port/priv_include/config.h
+++ b/components/mosquitto/port/priv_include/config.h
@@ -5,20 +5,11 @@
*/
#pragma once
#include
+#include "net/if.h"
#undef isspace
#define isspace(__c) (__ctype_lookup((int)__c)&_S)
#include_next "config.h"
-#define VERSION "v2.0.18~0"
-#define _SC_OPEN_MAX_OVERRIDE 4
-
-// used to override syscall for obtaining max open fds
-static inline long sysconf(int arg)
-{
- if (arg == _SC_OPEN_MAX_OVERRIDE) {
- return 64;
- }
- return -1;
-}
+#define VERSION "v2.0.20~1"
diff --git a/components/mosquitto/port/priv_include/ifaddrs.h b/components/mosquitto/port/priv_include/ifaddrs.h
deleted file mode 100644
index 604628cbac..0000000000
--- a/components/mosquitto/port/priv_include/ifaddrs.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-#pragma once
-
-#define gai_strerror(x) "gai_strerror() not supported"
-
-struct ifaddrs {
- struct ifaddrs *ifa_next; /* Next item in list */
- char *ifa_name; /* Name of interface */
- struct sockaddr *ifa_addr; /* Address of interface */
-};
-
-int getifaddrs(struct ifaddrs **ifap);
-void freeifaddrs(struct ifaddrs *ifa);
diff --git a/components/mosquitto/port/priv_include/poll.h b/components/mosquitto/port/priv_include/poll.h
deleted file mode 100644
index 1ac76a5b4f..0000000000
--- a/components/mosquitto/port/priv_include/poll.h
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-#pragma once
-
-#include_next "sys/poll.h"
diff --git a/components/mosquitto/port/sysconf.c b/components/mosquitto/port/sysconf.c
new file mode 100644
index 0000000000..80a1d92318
--- /dev/null
+++ b/components/mosquitto/port/sysconf.c
@@ -0,0 +1,18 @@
+/*
+ * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+#include
+#include
+
+#define _SC_OPEN_MAX_OVERRIDE 4
+
+// used to override syscall for obtaining max open fds
+long sysconf(int arg)
+{
+ if (arg == _SC_OPEN_MAX_OVERRIDE) {
+ return 64;
+ }
+ return -1;
+}