//订阅主题的数据包 Num:主题序号 RequestedQoS:服务质量要求0,1或2
//返回90 0x 00 Num RequestedQoS 0x00-QoS0 0x01QoS1 0x02-QoS2 0x80-Failure失败
u16 GetData_SUBSCRIBE(unsigned char *buff, unsigned int Num, const char *Topic, unsigned char RequestedQoS)
{
unsigned int i, len = 0, lennum = 0;
buff[lennum++] = 0x82;
buff[lennum++] = 0x00;//最后计算长度
buff[lennum++] = Num >> 8;//消息标识符
buff[lennum++] = Num;
len = strlen(Topic);
buff[lennum++] = len >> 8;
buff[lennum++] = len;
for (i = 0; i
{
buff[lennum++] = Topic;
}
buff[lennum++] = RequestedQoS;
buff[1] = lennum - 2;
return lennum;
}
//取消订阅主题的数据包 Num:主题序号
//成功返回B0 02 00 00
u16 GetData_UNSUBSCRIBE(unsigned char *buff, unsigned int Num, const char *Topic)
{
unsigned int i, len = 0, lennum = 0;
buff[lennum++] = 0xA2;
buff[lennum++] = 0x00;//最后计算长度
buff[lennum++] = Num >> 8;//消息标识符
buff[lennum++] = Num;
len = strlen(Topic);
buff[lennum++] = len >> 8;
buff[lennum++] = len;
for (i = 0; i
{
buff[lennum++] = Topic;
}
buff[1] = lennum - 2;
return lennum;
}
//获取发布消息的数据包
//返回 QoS0 无响应
//QoS1 PUBACK 40 02 00 00
//QoS2 PUBREC 50 02 00 00 PUBREC报文是对QoS等级2的PUBLISH报文的响应(QoS2,第1步)
u16 GetData_PUBLISH(unsigned char *buff, unsigned char dup, unsigned char qos, unsigned char retain, const char *topic, unsigned int identifier,const char *msg)
{
unsigned int i, len = 0, lennum = 0;
buff[lennum++] = GetData_FixedHead(MQTT_TypePUBLISH, dup, qos, retain);
buff[lennum++] = 0x00;//最后计算长度
len = strlen(topic);
buff[lennum++] = len >> 8;
buff[lennum++] = len;
for (i = 0; i
{
buff[lennum++] = topic;
}
if (qos > 0)
{
buff[lennum++] = identifier >> 8;//只有当QoS等级是1或2时,报文标识符(Packet Identifier)字段才能出现在PUBLISH报文中。
buff[lennum++] = identifier;
}
len = strlen(msg);
for (i = 0; i
{
buff[lennum++] = msg;
}
buff[1] = lennum - 2;
return lennum;
}
u8 GetData_PUBACK(unsigned char *buff, unsigned int identifier)
{
buff[0] = 0x40;
buff[1] = 0x02;
buff[2] = identifier >> 8;;
buff[3] = 0x00;
return 4;
}
u8 GetData_PUBREC(unsigned char *buff, unsigned int identifier)
{
buff[0] = 0x50;
buff[1] = 0x02;
buff[2] = identifier >> 8;
buff[3] = identifier;
return 4;
}
//获取发布释放(QoS2,第2步)的数据包
//PUBREL报文是对PUBREC报文的响应
//返回70 02 00 00 PUBCOMP报文是对PUBREL报文的响应(QoS2,第3步)
u8 GetData_PUBREL(unsigned char *buff, unsigned int identifier)
{
buff[0] = 0x62;
buff[1] = 0x02;
buff[2] = identifier >> 8;
buff[3] = identifier;
return 4;
}
u8 GetData_PUBCOMP(unsigned char *buff, unsigned int identifier)
{
buff[0] = 0x70;
buff[1] = 0x02;
buff[2] = identifier >> 8;
buff[3] = identifier;
return 4;
}
//订阅主题的数据包 Num:主题序号 RequestedQoS:服务质量要求0,1或2
//返回90 0x 00 Num RequestedQoS 0x00-QoS0 0x01QoS1 0x02-QoS2 0x80-Failure失败
u16 GetData_SUBSCRIBE(unsigned char *buff, unsigned int Num, const char *Topic, unsigned char RequestedQoS)
{
unsigned int i, len = 0, lennum = 0;
buff[lennum++] = 0x82;
buff[lennum++] = 0x00;//最后计算长度
buff[lennum++] = Num >> 8;//消息标识符
buff[lennum++] = Num;
len = strlen(Topic);
buff[lennum++] = len >> 8;
buff[lennum++] = len;
for (i = 0; i
{
buff[lennum++] = Topic;
}
buff[lennum++] = RequestedQoS;
buff[1] = lennum - 2;
return lennum;
}
//取消订阅主题的数据包 Num:主题序号
//成功返回B0 02 00 00
u16 GetData_UNSUBSCRIBE(unsigned char *buff, unsigned int Num, const char *Topic)
{
unsigned int i, len = 0, lennum = 0;
buff[lennum++] = 0xA2;
buff[lennum++] = 0x00;//最后计算长度
buff[lennum++] = Num >> 8;//消息标识符
buff[lennum++] = Num;
len = strlen(Topic);
buff[lennum++] = len >> 8;
buff[lennum++] = len;
for (i = 0; i
{
buff[lennum++] = Topic;
}
buff[1] = lennum - 2;
return lennum;
}
//获取发布消息的数据包
//返回 QoS0 无响应
//QoS1 PUBACK 40 02 00 00
//QoS2 PUBREC 50 02 00 00 PUBREC报文是对QoS等级2的PUBLISH报文的响应(QoS2,第1步)
u16 GetData_PUBLISH(unsigned char *buff, unsigned char dup, unsigned char qos, unsigned char retain, const char *topic, unsigned int identifier,const char *msg)
{
unsigned int i, len = 0, lennum = 0;
buff[lennum++] = GetData_FixedHead(MQTT_TypePUBLISH, dup, qos, retain);
buff[lennum++] = 0x00;//最后计算长度
len = strlen(topic);
buff[lennum++] = len >> 8;
buff[lennum++] = len;
for (i = 0; i
{
buff[lennum++] = topic;
}
if (qos > 0)
{
buff[lennum++] = identifier >> 8;//只有当QoS等级是1或2时,报文标识符(Packet Identifier)字段才能出现在PUBLISH报文中。
buff[lennum++] = identifier;
}
len = strlen(msg);
for (i = 0; i
{
buff[lennum++] = msg;
}
buff[1] = lennum - 2;
return lennum;
}
u8 GetData_PUBACK(unsigned char *buff, unsigned int identifier)
{
buff[0] = 0x40;
buff[1] = 0x02;
buff[2] = identifier >> 8;;
buff[3] = 0x00;
return 4;
}
u8 GetData_PUBREC(unsigned char *buff, unsigned int identifier)
{
buff[0] = 0x50;
buff[1] = 0x02;
buff[2] = identifier >> 8;
buff[3] = identifier;
return 4;
}
//获取发布释放(QoS2,第2步)的数据包
//PUBREL报文是对PUBREC报文的响应
//返回70 02 00 00 PUBCOMP报文是对PUBREL报文的响应(QoS2,第3步)
u8 GetData_PUBREL(unsigned char *buff, unsigned int identifier)
{
buff[0] = 0x62;
buff[1] = 0x02;
buff[2] = identifier >> 8;
buff[3] = identifier;
return 4;
}
u8 GetData_PUBCOMP(unsigned char *buff, unsigned int identifier)
{
buff[0] = 0x70;
buff[1] = 0x02;
buff[2] = identifier >> 8;
buff[3] = identifier;
return 4;
}
举报