version 1.1.1.1, 2011/11/07 08:47:16
|
version 1.1.1.1.2.1, 2011/11/07 13:34:06
|
Line 38 mqtt_SetErr(int eno, char *estr, ...)
|
Line 38 mqtt_SetErr(int eno, char *estr, ...)
|
|
|
// ---------------------------------------------------------- |
// ---------------------------------------------------------- |
|
|
|
/* |
|
* mqtt_encodeLen() Encode number to MQTT length field |
|
* @num = number for encode |
|
* return: -1 error or >-1 length |
|
*/ |
|
inline u_int |
|
mqtt_encodeLen(u_int num) |
|
{ |
|
register u_int dig, i; |
|
u_int ret = 0; |
|
|
|
if (num > 268435455) |
|
return (u_int) -1; |
|
|
|
for (i = 0; i < sizeof ret && num > 0; i++) { |
|
dig = num % 0x80; |
|
num /= 0x80; |
|
if (num > 0) |
|
dig |= 0x80; |
|
|
|
*((u_char*) &ret + i) = (u_char) dig; |
|
} |
|
|
|
return ret; |
|
} |
|
|
|
/* |
|
* mqtt_decodeLen() Decode length from MQTT packet |
|
* @len = length |
|
* return: -1 error, >-1 length of message |
|
*/ |
|
inline u_int |
|
mqtt_decodeLen(u_int len) |
|
{ |
|
register u_int i, dig, mul; |
|
u_int ret = 0; |
|
u_char *p = (u_char*) &len; |
|
|
|
if (len > 0xffffff7f) |
|
return (u_int) -1; |
|
|
|
for (mul = 1, i = 0; i < sizeof ret; i++, mul *= 0x80) { |
|
dig = p[i]; |
|
ret += (dig & 0x7f) * mul; |
|
|
|
if (!(dig & 0x80)) |
|
break; |
|
} |
|
|
|
return ret; |
|
} |