Не удается получить доступ к элементам struct mosquitto в плагине Mosquitto MQTT Broker - PullRequest
0 голосов
/ 19 сентября 2018

Я реализую плагин для брокера mosquitto MQTT (версия 1.5) и пытаюсь получить доступ к некоторым элементам указателя на структуру клиента mosquitto внутри реализации моего плагина:

#include <mosquitto_plugin.h>
...
int mosquitto_auth_acl_check(void *userdata, int access, const struct mosquitto *client, const struct mosquitto_acl_msg *msg)
{
     const char *clientid = client->id;
     const char *username = client->username;
     ...
}

Во время компиляции я получаю ошибку:

ошибка: разыменование указателя на неполный тип const char * clientid = client-> id;

Может кто-нибудь дать мне несколько советовкак получить доступ к данным клиента?

Редактировать: struct mosquitto определяется внутри исходного кода mosquitto (mosquitto_internal.h):

struct mosquitto {
      ...
      char *id;
      char *username;
      ...
 }

Но mosquitto_internal.hэто только для внутреннего использования в mosquitto и не может быть доступно моему плагину (по крайней мере, я так думаю ...)

Внутри mosquitto_plugin.h (который предоставлен mosquitto и включен в мой плагин) естьпросто "ссылка" на структуру mosquitto:

struct mosquitto;

Таким образом, до тех пор, пока у меня нет доступа к каким-либо данным структуры mosquitto, она успешно компилируется, но если я пытаюсьПолучите некоторые данные, такие как идентификатор, который вылетает.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Пожалуйста, используйте функции доступа, предоставленные в mosquitto_broker.h, например,

const char *mosquitto_client_id(const struct mosquitto *client);
0 голосов
/ 20 сентября 2018

позвольте загрузить исходный код, включить необходимый заголовочный файл в ваш плагин и использовать этот Makefile

NAME = mosquitto_auth_plugin_http

MOSQUITTO = ./mosquitto-1.5.2

INC = -I.-I $ (MOSQUITTO) / -I $ (MOSQUITTO) / lib -I $ (MOSQUITTO) / src

CFLAGS = -Wall -Werror -fPIC

DEBUG = -DMQAP_DEBUG

LIBS = -lcurl

все: $ (NAME) .so

$ (NAME) .so: $ (NAME) .o $ (CC) $ (CFLAGS) $ (INC) - общий $ ^ -o $ @ $ (LIBS)

%. O:% .c $ (CC) -c $ (CFLAGS) $ (отладка) $ (INC) $ <-o $@ </p>

clean: rm -f * .o * .so

...