Merge pull request #169 from embhorn/zd10725_a

Fix for publish with short topic name and example
pull/170/head
Daniel Pouzzner 2020-08-20 18:23:16 -05:00 committed by GitHub
commit 046dc725db
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 68 additions and 11 deletions

View File

@ -38,7 +38,7 @@ static int mStopRead = 0;
/* Maximum size for network read/write callbacks. */
#define MAX_BUFFER_SIZE 1024
#define TEST_MESSAGE "test"
#define SHORT_TOPIC_NAME "s1"
static int sn_message_cb(MqttClient *client, MqttMessage *msg,
byte msg_new, byte msg_done)
@ -247,6 +247,53 @@ int sn_test(MQTTCtx *mqttCtx)
}
}
{
/* Short Topic Name Subscribe */
SN_Subscribe subscribe;
SN_Publish publish;
XMEMSET(&subscribe, 0, sizeof(SN_Subscribe));
subscribe.duplicate = 0;
subscribe.qos = MQTT_QOS_0;
subscribe.topic_type = SN_TOPIC_ID_TYPE_SHORT;
subscribe.topicNameId = SHORT_TOPIC_NAME;
subscribe.packet_id = mqtt_get_packetid();
PRINTF("MQTT-SN Subscribe: topic name = %s", subscribe.topicNameId);
rc = SN_Client_Subscribe(&mqttCtx->client, &subscribe);
PRINTF("....MQTT-SN Subscribe Ack: topic id = %d, rc = %d",
subscribe.subAck.topicId, subscribe.subAck.return_code);
/* Short Topic Name Publish */
XMEMSET(&publish, 0, sizeof(SN_Publish));
publish.retain = 0;
publish.qos = mqttCtx->qos;
publish.duplicate = 0;
publish.topic_type = SN_TOPIC_ID_TYPE_SHORT;
publish.topic_name = SHORT_TOPIC_NAME;
if (publish.qos > MQTT_QOS_0) {
publish.packet_id = mqtt_get_packetid();
}
else {
publish.packet_id = 0x00;
}
publish.buffer = (byte*)TEST_MESSAGE;
publish.total_len = (word16)XSTRLEN(TEST_MESSAGE);
rc = SN_Client_Publish(&mqttCtx->client, &publish);
PRINTF("MQTT-SN Publish: topic id = %d, rc = %d\r\nPayload = %s",
(word16)*publish.topic_name,
publish.return_code,
publish.buffer);
if (rc != MQTT_CODE_SUCCESS) {
goto disconn;
}
}
/* Read Loop */
PRINTF("MQTT Waiting for message...");
@ -279,7 +326,12 @@ int sn_test(MQTTCtx *mqttCtx)
mqttCtx->publishSN.duplicate = 0;
mqttCtx->publishSN.topic_type = SN_TOPIC_ID_TYPE_NORMAL;
mqttCtx->publishSN.topic_name = (char*)&topicID;
mqttCtx->publishSN.packet_id = mqtt_get_packetid();
if (mqttCtx->publishSN.qos > MQTT_QOS_0) {
mqttCtx->publishSN.packet_id = mqtt_get_packetid();
}
else {
mqttCtx->publishSN.packet_id = 0x00;
}
mqttCtx->publishSN.buffer = mqttCtx->rx_buf;
mqttCtx->publishSN.total_len = (word16)rc;
rc = SN_Client_Publish(&mqttCtx->client,

View File

@ -2417,9 +2417,6 @@ wait_again:
goto wait_again;
}
#ifdef WOLFMQTT_V5
case MQTT_MSG_AUTH:
#endif
case MQTT_MSG_WRITE:
default:
{
@ -2735,9 +2732,6 @@ int SN_Client_Publish(MqttClient *client, SN_Publish *publish)
break;
}
#ifdef WOLFMQTT_V5
case MQTT_MSG_AUTH:
#endif
case MQTT_MSG_READ:
case MQTT_MSG_READ_PAYLOAD:
#ifdef WOLFMQTT_DEBUG_CLIENT
@ -2822,6 +2816,7 @@ int SN_Client_Register(MqttClient *client, SN_Register *regist)
int SN_Client_Ping(MqttClient *client, SN_PingReq *ping)
{
int rc, len;
SN_PingReq loc_ping;
/* Validate required arguments */
if (client == NULL) {
@ -2829,8 +2824,8 @@ int SN_Client_Ping(MqttClient *client, SN_PingReq *ping)
}
if (ping == NULL) {
/* use client global */
ping = &client->msgSN.pingReq;
XMEMSET(&loc_ping, 0, sizeof(SN_PingReq));
ping = &loc_ping;
}
if (ping->stat == MQTT_MSG_BEGIN) {

View File

@ -2712,7 +2712,17 @@ int SN_Encode_Publish(byte *tx_buf, int tx_buf_len, SN_Publish *publish)
*tx_payload++ = flags;
tx_payload += MqttEncode_Num(tx_payload, (word16)*publish->topic_name);
/* Encode topic */
if (publish->topic_type == SN_TOPIC_ID_TYPE_SHORT) {
/* Short topic name is 2 chars */
XMEMCPY(tx_payload, publish->topic_name, 2);
tx_payload += 2;
}
else {
/* Topic ID */
tx_payload += MqttEncode_Num(tx_payload, (word16)*publish->topic_name);
}
tx_payload += MqttEncode_Num(tx_payload, publish->packet_id);
/* Encode payload */