Fixed packet reading issue in PubSubClient.readPacket

This commit is contained in:
Nicholas O'Leary 2010-02-27 21:37:58 +00:00
parent 265016844b
commit f8a977ddd0

View File

@ -13,7 +13,6 @@
#define MQTTPUBLISH 3<<4 #define MQTTPUBLISH 3<<4
#define MQTTSUBSCRIBE 8<<4 #define MQTTSUBSCRIBE 8<<4
PubSubClient::PubSubClient(uint8_t *ip, uint16_t port, void (*callback)(char*,uint8_t*,int)) : _client(ip,port) { PubSubClient::PubSubClient(uint8_t *ip, uint16_t port, void (*callback)(char*,uint8_t*,int)) : _client(ip,port) {
this->callback = callback; this->callback = callback;
} }
@ -37,7 +36,7 @@ int PubSubClient::connect(char *id, char* willTopic, uint8_t willQos, uint8_t wi
buffer[length++] = 0x02; buffer[length++] = 0x02;
} }
buffer[length++] = 0; buffer[length++] = 0;
buffer[length++] = (KEEPALIVE/500); buffer[length++] = (KEEPALIVE/1000);
length = writeString(id,buffer,length); length = writeString(id,buffer,length);
if (willTopic) { if (willTopic) {
length = writeString(willTopic,buffer,length); length = writeString(willTopic,buffer,length);
@ -46,6 +45,7 @@ int PubSubClient::connect(char *id, char* willTopic, uint8_t willQos, uint8_t wi
write(MQTTCONNECT,buffer,length); write(MQTTCONNECT,buffer,length);
while (!_client.available()) {} while (!_client.available()) {}
uint8_t len = readPacket(); uint8_t len = readPacket();
if (len == 4 && buffer[3] == 0) { if (len == 4 && buffer[3] == 0) {
lastActivity = millis(); lastActivity = millis();
return 1; return 1;
@ -59,12 +59,13 @@ int PubSubClient::connect(char *id, char* willTopic, uint8_t willQos, uint8_t wi
uint8_t PubSubClient::readPacket() { uint8_t PubSubClient::readPacket() {
uint8_t len = 0; uint8_t len = 0;
while (!_client.available()) {}
buffer[len++] = _client.read(); buffer[len++] = _client.read();
uint8_t multiplier = 1; uint8_t multiplier = 1;
uint8_t length = 0; uint8_t length = 0;
uint8_t digit = 0; uint8_t digit = 0;
do { do {
while (!_client.available()) {}
digit = _client.read(); digit = _client.read();
buffer[len++] = digit; buffer[len++] = digit;
length += (digit & 127) * multiplier; length += (digit & 127) * multiplier;
@ -74,12 +75,15 @@ uint8_t PubSubClient::readPacket() {
for (int i = 0;i<length;i++) for (int i = 0;i<length;i++)
{ {
if (len < MAX_PACKET_SIZE) { if (len < MAX_PACKET_SIZE) {
while (!_client.available()) {}
buffer[len++] = _client.read(); buffer[len++] = _client.read();
} else { } else {
while (!_client.available()) {}
_client.read(); _client.read();
len = 0; // This will cause the packet to be ignored. len = 0; // This will cause the packet to be ignored.
} }
} }
return len; return len;
} }