我正在为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结构的任何数据,它就可以成功编译,但是如果我尝试访问某些数据(如id),它将崩溃。

最佳答案

请使用mosquitto_broker.h中提供的访问器功能,例如

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

关于c++ - 无法通过Mosquitto MQTT Broker插件访问struct mosquitto的元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52404126/

10-11 18:53