|
|
@@ -241,137 +241,16 @@ typedef struct umqtt_pkgs_connect MQTTPacket_connectData;
|
|
|
|
|
|
#define MQTTStrlen(c) ((c == NULL) ? 0 : strlen(c))
|
|
|
|
|
|
-static void umqtt_writeChar(unsigned char** pptr, char c)
|
|
|
-{
|
|
|
- **pptr = c;
|
|
|
- (*pptr)++;
|
|
|
-}
|
|
|
-
|
|
|
-static char umqtt_readChar(unsigned char** pptr)
|
|
|
-{
|
|
|
- char c = **pptr;
|
|
|
- (*pptr)++;
|
|
|
- return c;
|
|
|
-}
|
|
|
-
|
|
|
-static void umqtt_writeInt(unsigned char** pptr, int anInt)
|
|
|
-{
|
|
|
- **pptr = (unsigned char)(anInt / 256);
|
|
|
- (*pptr)++;
|
|
|
- **pptr = (unsigned char)(anInt % 256);
|
|
|
- (*pptr)++;
|
|
|
-}
|
|
|
-
|
|
|
-static int umqtt_readInt(unsigned char** pptr)
|
|
|
-{
|
|
|
- unsigned char* ptr = *pptr;
|
|
|
- int len = 256*(*ptr) + (*(ptr+1));
|
|
|
- *pptr += 2;
|
|
|
- return len;
|
|
|
-}
|
|
|
-
|
|
|
-static void umqtt_writeCString(unsigned char** pptr, const char* string)
|
|
|
-{
|
|
|
- int len = 0;
|
|
|
- if (string)
|
|
|
- {
|
|
|
- len = strlen(string);
|
|
|
- umqtt_writeInt(pptr, len);
|
|
|
- memcpy(*pptr, string, len);
|
|
|
- *pptr += len;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void umqtt_writeMQTTString(unsigned char** pptr, const char* string)
|
|
|
-{
|
|
|
- int len = 0;
|
|
|
- if (string)
|
|
|
- {
|
|
|
- len = strlen(string);
|
|
|
- umqtt_writeInt(pptr, len);
|
|
|
- memcpy(*pptr, string, len);
|
|
|
- *pptr += len;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- umqtt_writeInt(pptr, 0);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static int umqtt_readlenstring(int *str_len, char **p_string, unsigned char **pptr, unsigned char *enddata)
|
|
|
-{
|
|
|
- int rc = 0;
|
|
|
-
|
|
|
- if (enddata - (*pptr) > 1)
|
|
|
- {
|
|
|
- *str_len = umqtt_readInt(pptr);
|
|
|
- if (&(*pptr)[*str_len] <= enddata)
|
|
|
- {
|
|
|
- *p_string = (char *)*pptr;
|
|
|
- *pptr += *str_len;
|
|
|
- rc = 1;
|
|
|
- }
|
|
|
- }
|
|
|
- return rc;
|
|
|
-}
|
|
|
-
|
|
|
-static int umqtt_pkgs_encode(unsigned char* buf, int length)
|
|
|
-{
|
|
|
- int rc = 0;
|
|
|
- do {
|
|
|
- char d = length % 128;
|
|
|
- length /= 128;
|
|
|
- /* if there are more digits to encode, set the top bit of this digit */
|
|
|
- if (length > 0)
|
|
|
- d |= 0x80;
|
|
|
- buf[rc++] = d;
|
|
|
- } while (length > 0);
|
|
|
- return rc;
|
|
|
-}
|
|
|
-
|
|
|
-static int umqtt_pkgs_decode(int (*getcharfn)(unsigned char*, int), int* value)
|
|
|
-{
|
|
|
- unsigned char c;
|
|
|
- int multiplier = 1;
|
|
|
- int len = 0;
|
|
|
-#define MAX_NO_OF_REMAINING_LENGTH_BYTES 4
|
|
|
-
|
|
|
- *value = 0;
|
|
|
- do
|
|
|
- {
|
|
|
- int rc = UMQTT_READ_ERROR;
|
|
|
-
|
|
|
- if (++len > MAX_NO_OF_REMAINING_LENGTH_BYTES)
|
|
|
- {
|
|
|
- rc = UMQTT_READ_ERROR; /* bad data */
|
|
|
- goto exit;
|
|
|
- }
|
|
|
- rc = (*getcharfn)(&c, 1);
|
|
|
- if (rc != 1)
|
|
|
- goto exit;
|
|
|
- *value += (c & 127) * multiplier;
|
|
|
- multiplier *= 128;
|
|
|
- } while ((c & 128) != 0);
|
|
|
-exit:
|
|
|
- return len;
|
|
|
-}
|
|
|
-
|
|
|
-static int umqtt_pkgs_len(int rem_len)
|
|
|
-{
|
|
|
- rem_len += 1; /* header byte */
|
|
|
-
|
|
|
- /* now remaining_length field */
|
|
|
- if (rem_len < 128)
|
|
|
- rem_len += 1;
|
|
|
- else if (rem_len < 16384)
|
|
|
- rem_len += 2;
|
|
|
- else if (rem_len < 2097151)
|
|
|
- rem_len += 3;
|
|
|
- else
|
|
|
- rem_len += 4;
|
|
|
-
|
|
|
- return rem_len;
|
|
|
-}
|
|
|
+void umqtt_writeChar(unsigned char** pptr, char c);
|
|
|
+char umqtt_readChar(unsigned char** pptr);
|
|
|
+void umqtt_writeInt(unsigned char** pptr, int anInt);
|
|
|
+int umqtt_readInt(unsigned char** pptr);
|
|
|
+void umqtt_writeCString(unsigned char** pptr, const char* string);
|
|
|
+void umqtt_writeMQTTString(unsigned char** pptr, const char* string);
|
|
|
+int umqtt_readlenstring(int *str_len, char **p_string, unsigned char **pptr, unsigned char *enddata);
|
|
|
+int umqtt_pkgs_encode(unsigned char* buf, int length);
|
|
|
+int umqtt_pkgs_decode(int (*getcharfn)(unsigned char*, int), int* value);
|
|
|
+int umqtt_pkgs_len(int rem_len);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
}
|