|
|
| 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; | |
| } |