Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法在MOSQUITO MQTT代理插件上访问结构MOSQUITO的元素_C++_Mqtt_Mosquitto - Fatal编程技术网

C++ 无法在MOSQUITO MQTT代理插件上访问结构MOSQUITO的元素

C++ 无法在MOSQUITO MQTT代理插件上访问结构MOSQUITO的元素,c++,mqtt,mosquitto,C++,Mqtt,Mosquitto,我正在为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

我正在为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;
     ...
}
但是mosquitto_internal.h只是用于mosquitto的内部使用,我的插件无法访问它(至少我这么认为…)

在mosquitto_plugin.h(由mosquitto提供并包含在我的插件中)中,只有一个对mosquitto结构的“引用”:

struct mosquitto;

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

让我们下载源代码,在插件实现中包含所需的头文件,并使用此生成文件

NAME=mosquitto\u auth\u插件\u http

MOSQUITO=/MOSQUITO-1.5.2

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

CFLAGS=-Wall-Werror-fPIC

DEBUG=-DMQAP_DEBUG

LIBS=-lcurl

全部:$(名称)。所以

$(名称).so:$(名称).o $(CC)$(CFLAGS)$(INC)-共享$^-o$@$(LIBS)

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

清洁: rm-f*.o*.so


请使用
mosquitto\u broker.h
中提供的访问器功能,例如

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

此时未定义类型
mosquitto
。请提供,以便我们提供适当的帮助。我相信您无法访问该结构的成员是故意的——API的设计者不希望您访问它们,因为如果您这样做,如果/当他们决定在将来的版本中更改该结构的内容时,您的代码将中断。(结构是在头文件中定义的,其文件名中带有字符串“internal”,这一事实强烈提示您不应该直接使用该文件的任何内容)请不要这样做,因为注意,该结构的内容被认为是代理的内部内容,而不是您要查看的内容。
const char *mosquitto_client_id(const struct mosquitto *client);