无法在 Mosquitto MQTT Broker 插件中访问 struct mosquitto 的元素

Cannot access elements of struct mosquitto at Mosquitto MQTT Broker plugin

我正在为 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;
     ...
}

在编译时我检索到错误:

error: dereferencing pointer to incomplete type 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 提供并包含在我的插件中)只有一个 "reference" 到 mosquitto 结构:

struct mosquitto;

因此,只要我不访问 mosquitto 结构的任何数据,它就会编译成功,但如果我尝试访问一些数据,比如 id,它就会崩溃。

让我们下载源代码,在您的插件实现中包含所需的头文件并使用此 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

all: $(NAME).so

$(NAME).so: $(NAME).o $(CC) $(CFLAGS) $(INC) -shared $^ -o $@ $(LIBS)

%.o : %.c $(CC) -c $(CFLAGS) $(DEBUG) $(INC) $< -o $@

clean: rm -f *.o *.so

请使用mosquitto_broker.h中提供的访问函数,例如

const char *mosquitto_client_id(const struct mosquitto *client);