Skip to content

Commit 7621c66

Browse files
committed
fixes error when receive multiple publish msg same time
1 parent f2c16b8 commit 7621c66

File tree

1 file changed

+9
-16
lines changed

1 file changed

+9
-16
lines changed

user/mqtt.c

+9-16
Original file line numberDiff line numberDiff line change
@@ -124,13 +124,13 @@ mqtt_tcpclient_recv(void *arg, char *pdata, unsigned short len)
124124
{
125125
uint8_t msg_type;
126126
uint8_t msg_qos;
127-
128127
uint16_t msg_id;
129128

130129
struct espconn *pCon = (struct espconn*)arg;
131130
MQTT_Client *client = (MQTT_Client *)pCon->reverse;
132131

133-
INFO("TCP: data received\r\n");
132+
READPACKET:
133+
INFO("TCP: data received %d bytes\r\n", len);
134134
if(len < MQTT_BUF_SIZE && len > 0){
135135
os_memcpy(client->mqtt_state.in_buffer, pdata, len);
136136

@@ -141,7 +141,7 @@ mqtt_tcpclient_recv(void *arg, char *pdata, unsigned short len)
141141
msg_type = mqtt_get_type(client->mqtt_state.in_buffer);
142142
msg_qos = mqtt_get_qos(client->mqtt_state.in_buffer);
143143
msg_id = mqtt_get_id(client->mqtt_state.in_buffer, client->mqtt_state.in_buffer_length);
144-
INFO("MQTT: type: %d, qos: %d, id: %04X\r\n", msg_type, msg_qos, msg_id);
144+
145145
switch(msg_type)
146146
{
147147
case MQTT_MSG_TYPE_CONNACK:
@@ -219,24 +219,17 @@ mqtt_tcpclient_recv(void *arg, char *pdata, unsigned short len)
219219
// statement due to the way protothreads resume.
220220
if(msg_type == MQTT_MSG_TYPE_PUBLISH)
221221
{
222-
uint16_t len;
223-
224-
// adjust message_length and message_length_read so that
225-
// they only account for the publish data and not the rest of the
226-
// message, this is done so that the offset passed with the
227-
// continuation event is the offset within the publish data and
228-
// not the offset within the message as a whole.
229222
len = client->mqtt_state.message_length_read;
230-
mqtt_get_publish_data(client->mqtt_state.in_buffer, &len);
231-
len = client->mqtt_state.message_length_read - len;
232-
client->mqtt_state.message_length -= len;
233-
client->mqtt_state.message_length_read -= len;
234223

235-
if(client->mqtt_state.message_length_read < client->mqtt_state.message_length)
224+
if(client->mqtt_state.message_length < client->mqtt_state.message_length_read)
236225
{
237226
//client->connState = MQTT_PUBLISH_RECV;
238227
//Not Implement yet
239-
INFO("We have more data, read: %d, total: %d\r\n", client->mqtt_state.message_length_read, client->mqtt_state.message_length);
228+
len -= client->mqtt_state.message_length;
229+
pdata += client->mqtt_state.message_length;
230+
231+
INFO("Get another published message\r\n");
232+
goto READPACKET;
240233
}
241234

242235
}

0 commit comments

Comments
 (0)