rt-thread-packages / paho-mqtt Goto Github PK
View Code? Open in Web Editor NEWEclipse Paho MQTT C/C++ client for Embedded platforms
License: Eclipse Public License 1.0
Eclipse Paho MQTT C/C++ client for Embedded platforms
License: Eclipse Public License 1.0
在跟服务器对接时,服务器的开发人员说应当定义两个client ,一个用于发布,一个用于订阅;
我看了下结构体MQTTClient 里面有用发布、订阅和遗言的主题。一个client就能满足发布订阅。请问有必要创建两个MQTTClient 一个用于发布,一个用于订阅?
paho_mqtt.h 文件中:
enum __attribute__ ((aligned (4))) QoS { QOS0, QOS1, QOS2 };
该语法在 IAR 上不支持编译报错,Keil 上支持,有什么合适的修改方式?
paho_mqtt_thread 里面的connect_callback连接成功回调怎么是在连接开始的时候,不应该是连接服务器成功之后吗,不知道我理解对不对
如题,无法收到通知或等待停止时,会遇到无法正常释放MQTTClient对象,如果这个对象是malloc创建的话,将无法合适地free这个对象。
在stop之后不能释放,因为MQTT线程还在使用该对象,当MQTT线程退出时,其它线程无法得知。目前只能使用线程钩子来实现这个通知。
正确的退出流程应该有一个通知回调,或在stop方法里等待线程退出。
原因是并发时会同时将数据放置在管道里,但是没有把包区分开来,下一次发数据的时候把所有的数据都发出去了,所以应该在管道处表明有多少条数据,每条数据的长度多少
1.当未订阅topic的情况下,尝试连接MQTT的服务器,在paho_mqtt_pipe.c ->line 832 : const char *topic = c->messageHandlers[i].topicFilter; 中 topic参数为空,后续会导致出错。
2.需要提供专门用于订阅topic的API,当前代码,没提供多次订阅的功能(比如:开始订阅了一个topic,连接上代理后,还想再订阅一个topic。这种操作就无法实现)
目前只支持URL作为MQTT服务器的地址,而不支持直接用IP地址
如果用URL的话,我看了源码,还要进行域名解析,解析成IP地址。能不能开发一个直接使用IP作为MQTT服务器地址的功能?
I use the paho_mqtt_publish function, and it fails at net_read() function in pahomqtt-v1.1.0\MQTTClient-RT\paho_mqtt_pipe.c.
I downgraded from 4.1.1->4.1.0, both fails, but 4.0.5 is working !?
MQTT_cycle
函数在接收到 PUBLISH 类型的 mqtt 报文时,会调用 MQTTDeserialize_publish
函数解析报文内容。该函数中包含问题的部分如下:
curdata += (rc = MQTTPacket_decodeBuf(curdata, &mylen));
enddata = curdata + mylen;
if (!readMQTTLenString(topicName, &curdata, enddata) || enddata - curdata < 0)
goto exit;
调用 MQTTPacket_decodeBuf
并正常返回时,rc
值将被置 1。后续调用 readMQTTLenString
发生错误返回 0 时,topicName
中的 lenstring
将不被初始化,为任意地址,此时 MQTTDeserialize_publish
函数会错误返回 1 表示函数执行成功,使程序继续执行后续逻辑。
后续处理逻辑中访问该 topicName
中的字符串指针将会访问非法地址,导致程序崩溃。
一个可复现的导致崩溃的例子是(以 ASCII 字符串形式表示接收到的报文内容)
0000000000000000000000000000000000000000000000000000000000000000000000000000
硬件使用w5500 , 软件使用paho -mqtt 最新软件包
数据接收长度小于 1000字节. 可以正常使用,
但是其他设备发布消息单包长度超过 1024 - 1030 以上后, 会进入default call back 回调函数中, 而且整个mqtt软件模块,接下来就会无限反复重启, 提示ping 超时,
其他网络应用正常使用, 可以正常 使用 finsh 功能ping 路由器, mqtt 服务器 , 开的tcp 也能正常使用,这个有办法解决吗? 或者提高接收缓冲区大小, 没找到在哪里设置
if (FD_ISSET(c->pub_pipe[0], &readset))
{
MQTTMessage *message;
MQTTString topic = MQTTString_initializer;
LOG_D("pub_sock FD_ISSET");
len = read(c->pub_pipe[0], c->readbuf, c->readbuf_size);
.......
同时往队列加入多个数包时,len将所有数据读取出来,却只处理了最前一条数据导致后面数据丢失
如:一个数据包长度为57,同时2包数据加入队列(环境:在MQTT任务处理其它任务时加入)
读取出来的len长度为114,这时只有一会发送一包数据到服务器
文件 : paho_mqtt_pipe.c, 939行
应该是 data[msg_len-1] = 0; //错误的写成了 data[msg_len] = 0; 导致内存操作问题
int paho_mqtt_publish(MQTTClient *client, enum QoS qos, const char *topic, const char *msg_str);
This API implement is dangerous. No initial value given for dup/id of MQTTMessage.
sometimes id default value is 0 which is relative to stack, when some code change.
It's take me several days to find where the bug is.
I am trying to test the sample file but it is referring to a client class. I cannot find it anywhere in the source. Do I need to create my own client class?
我使用 adminconfig 命令安装,但在输入命令后:pkgs --update 我得到错误:
$ pkgs --update
Traceback (most recent call last):
File "D:\RT-ThreadStudio\platform\env_released\env\tools\ConEmu\ConEmu\..\..\..\tools\scripts\env.py", line 126, in <module>
main()
File "D:\RT-ThreadStudio\platform\env_released\env\tools\ConEmu\ConEmu\..\..\..\tools\scripts\env.py", line 122, in main
args.func(args)
File "D:\RT-ThreadStudio\platform\env_released\env\tools\scripts\cmds\cmd_package\__init__.py", line 41, in run_env_cmd
package_update()
File "D:\RT-ThreadStudio\platform\env_released\env\tools\scripts\cmds\cmd_package\cmd_package_update.py", line 842, in package_update
if not install_packages(sys_value, force_update):
File "D:\RT-ThreadStudio\platform\env_released\env\tools\scripts\cmds\cmd_package\cmd_package_update.py", line 792, in install_packages
if install_package(env_root, pkgs_root, bsp_root, package, force_update):
File "D:\RT-ThreadStudio\platform\env_released\env\tools\scripts\cmds\cmd_package\cmd_package_update.py", line 267, in install_package
url_from_json = package.get_url(package_info['ver'])
KeyError: 'ver'
移除dfs_posix.h
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.