Skip to content
View in the app

A better way to browse. Learn more.

Kaspersky Support Forum

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Формат MqttPacket в IPC-интерфейсе kl.MosquittoBroker

Добрый день.

Работаю с KasperskyOS Community Edition 1.4, пытаюсь использовать IPC-интерфейс kl.MosquittoBroker для взаимодействия внутреннего процесса с брокером вместо TCP loopback + libmosquitto.

Документации по использованию mosquitto-брокера как сущности внутри KasperskyOS-решения не нашёл — ни в официальной документации KCE 1.4, ни в примерах SDK. Запустить брокер удалось самостоятельно, через анализ файлов в sysroot: kl/Mosquitto.edl, kl/MosquittoBroker.idl.h, kl/MosquittoCtrl.idl.h, lib/cmake/mosquitto/entityTargets.cmake, mosquittoConfig.cmake, а также бинаря bin/mosquitto.

Что удалось:

  • запустить брокер внутри решения
  • подключить внешние MQTT-клиенты по TCP 1883 + libmosquitto — всё работает корректно
  • вызвать MqttConnect через IPC — возвращает clientId и EOk

Проблема: MqttSend возвращает EPacketInvalid (-3) при любых данных в packet.

Что пробовал передавать в MqttPacket:

  1. Сырой MQTT PUBLISH-пакет (тот же, что брокер корректно принимает по TCP, "подсмотрел" данный пакет через логирование при TCP-взаимодействии)
  2. Просто payload без заголовков
  3. Сформированные MQTT-пакеты при помощи библиотеки Eclipse Paho MQTT C/C++ client for Embedded platforms

Нигде в документации KCE 1.4 не нашёл описания ожидаемого формата буфера MqttPacket. Подскажите, пожалуйста:

  • что именно ожидает брокер в буфере packet при вызове MqttSend?
  • есть ли вспомогательный API или пример использования IPC-интерфейса kl.MosquittoBroker?

Featured Replies

Поторопился с комментарием. Обновлю если у меня пример появится рабочий.

Edited by Yura Beznos

День добрый.

Судя по заголовкам библиотеки libmosquitto включенной в SDK, она уже позволяет использовать IPC:

Цитата

$ cat ./sysroot-aarch64-kos/include/mosquitto.h |grep KOS -A 4

#ifdef __KOS__
libmosq_EXPORT int mosquitto_reload_config(const char *config_file);
libmosq_EXPORT struct mosquitto *mosquitto_new_kos(const char *id, bool clean_session, unsigned int max_queued_bytes, void *userdata, bool log_enabled);
#endif

$ cat ./sysroot-aarch64-kos/include/mosquittopp.h |grep KOS -A 4

#ifdef __KOS__
        mosquittopp(const char *id=NULL, bool clean_session=true, unsigned int max_queued_bytes=0, bool kos_ipc=true);
#else
        mosquittopp(const char *id=NULL, bool clean_session=true, unsigned int max_queued_bytes=0);
#endif

p.s. у меня сходу не получилось, но у меня сам Mosquitto как сервис не стартует нормально.

Может более знающие товарищи дадут пояснения.

Edited by Yura Beznos

Потыкался некоторое время. Результаты аналогичные. Гипотеза, что Mosquitto (entity/библиотека) собраны без поддержки локальной работы по IPC. 

В остальном всё работает без проблем.

В MqttSend packet очевидно это packet в терминах Mosquitto (https://github.com/eclipse-mosquitto/mosquitto/blob/master/lib/packet_mosq.h) соответственно закодированный в sequence для IPC.

Подождём ещё опытный товарищей, может прояснят конкретнее.

 

А вы над каким проектом работаете, если не секрет?

Здравствуйте!

По вашему изначальному сообщению был создан запрос в техническую поддержку: INC000018435953
Пожалуйста, ожидайте ответа.

Добрый день!

К сожалению, в KasperskyOS Community Edition SDK 1.4 не поддержано общение по IPC с брокером. Мы рассмотрим добавление данной функциональности в следующих релизах.

Наличие подобных файлов  kl/Mosquitto* является ошибкой, так как соответствующая функциональность не реализована. Мы обязательно возьмем баг в работу.

Можно попробовать самостоятельно реализовать общение по IPC с брокером, но для этого потребуется скачать официальный исходный код библиотеки и добавить функциональность IPC транспорта.

Спасибо за обращение и найденный баг!

Please sign in to comment

You will be able to leave a comment after signing in

Sign In Now

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.