diff --git a/MQTTSNPacket/src/MQTTSNPacket.c b/MQTTSNPacket/src/MQTTSNPacket.c index 03928b1..a788b78 100644 --- a/MQTTSNPacket/src/MQTTSNPacket.c +++ b/MQTTSNPacket/src/MQTTSNPacket.c @@ -274,4 +274,20 @@ exit: return rc; } +int MQTTSNPacket_read_nb(unsigned char* buf, int buflen) +{ + int rc = MQTTSNPACKET_READ_ERROR; + int len = buflen; /* the length of the whole packet including length field */ + int lenlen = 0; + int datalen = 0; + + /* 2. read the length. This is variable in itself */ + lenlen = MQTTSNPacket_decode(buf, len, &datalen); + if (datalen != len) + goto exit; /* there was an error */ + + rc = buf[lenlen]; /* return the packet type */ +exit: + return rc; +} diff --git a/MQTTSNPacket/src/MQTTSNPacket.h b/MQTTSNPacket/src/MQTTSNPacket.h index ebde5b3..3d9b296 100644 --- a/MQTTSNPacket/src/MQTTSNPacket.h +++ b/MQTTSNPacket/src/MQTTSNPacket.h @@ -143,6 +143,8 @@ void writeCString(unsigned char** pptr, char* string); void writeMQTTSNString(unsigned char** pptr, MQTTSNString mqttstring); int MQTTSNPacket_read(unsigned char* buf, int buflen, int (*getfn)(unsigned char*, int)); +int MQTTSNPacket_read_nb(unsigned char* buf, int buflen); + #ifdef __cplusplus /* If this is a C++ compiler, use C linkage */ }