Annotation of mqtt/src/aitmqtt.c, revision 1.1.1.1.2.3
1.1 misho 1: #include "global.h"
2:
3:
4: static int mqtt_Errno;
5: static char mqtt_Error[STRSIZ];
6:
7:
8: //
9: // Error maintenance functions ...
10: //
11:
12: // mqtt_GetErrno() Get error code of last operation
13: inline int
14: mqtt_GetErrno()
15: {
16: return mqtt_Errno;
17: }
18:
19: // mqtt_GetError() Get error text of last operation
20: inline const char *
21: mqtt_GetError()
22: {
23: return mqtt_Error;
24: }
25:
26: // mqtt_SetErr() Set error to variables for internal use!!!
27: inline void
28: mqtt_SetErr(int eno, char *estr, ...)
29: {
30: va_list lst;
31:
32: mqtt_Errno = eno;
33: memset(mqtt_Error, 0, sizeof mqtt_Error);
34: va_start(lst, estr);
35: vsnprintf(mqtt_Error, sizeof mqtt_Error, estr, lst);
36: va_end(lst);
37: }
38:
39: // ----------------------------------------------------------
40:
1.1.1.1.2.1 misho 41: /*
42: * mqtt_encodeLen() Encode number to MQTT length field
43: * @num = number for encode
44: * return: -1 error or >-1 length
45: */
46: inline u_int
47: mqtt_encodeLen(u_int num)
48: {
49: register u_int dig, i;
50: u_int ret = 0;
51:
52: if (num > 268435455)
53: return (u_int) -1;
54:
55: for (i = 0; i < sizeof ret && num > 0; i++) {
56: dig = num % 0x80;
57: num /= 0x80;
58: if (num > 0)
59: dig |= 0x80;
60:
61: *((u_char*) &ret + i) = (u_char) dig;
62: }
63:
64: return ret;
65: }
66:
67: /*
68: * mqtt_decodeLen() Decode length from MQTT packet
69: * @len = length
1.1.1.1.2.2 misho 70: * @n = sizeof bytes, if !=NULL
1.1.1.1.2.1 misho 71: * return: -1 error, >-1 length of message
72: */
73: inline u_int
1.1.1.1.2.2 misho 74: mqtt_decodeLen(u_int len, char *n)
1.1.1.1.2.1 misho 75: {
76: register u_int i, dig, mul;
77: u_int ret = 0;
78: u_char *p = (u_char*) &len;
79:
80: if (len > 0xffffff7f)
81: return (u_int) -1;
82:
83: for (mul = 1, i = 0; i < sizeof ret; i++, mul *= 0x80) {
84: dig = p[i];
85: ret += (dig & 0x7f) * mul;
86:
87: if (!(dig & 0x80))
88: break;
89: }
90:
1.1.1.1.2.2 misho 91: if (n)
92: *n = (char) (i & 0x7f) + 1;
1.1.1.1.2.1 misho 93: return ret;
94: }
1.1.1.1.2.2 misho 95:
96: /*
97: * mqtt_sizeLen Return sizeof len field
98: * @len = length
99: * return: -1 error, >-1 sizeof len in bytes
100: */
101: inline char
102: mqtt_sizeLen(u_int len)
103: {
104: register char i;
105: u_char *p = (u_char*) &len;
106:
107: if (len > 0xffffff7f)
108: return -1;
109:
110: for (i = 0; i < sizeof len; i++)
111: if (!(*(p + i) & 0x80))
112: break;
113:
114: return ++i;
115: }
1.1.1.1.2.3! misho 116:
! 117: /*
! 118: * mqtt_str2var Create MQTT variable from string
! 119: * @csStr = string
! 120: * @strLen = string length
! 121: * return: NULL error or != ok variable, must be free after use!
! 122: */
! 123: inline mqtthdr_var_t *
! 124: mqtt_str2var(const u_char *csStr, u_short strLen)
! 125: {
! 126: mqtthdr_var_t *v;
! 127:
! 128: if (!csStr)
! 129: return NULL;
! 130: if (!(v = malloc(strLen + sizeof(mqtthdr_var_t)))) {
! 131: LOGERR;
! 132: return NULL;
! 133: } else
! 134: memset(v, 0, strLen + sizeof(mqtthdr_var_t));
! 135:
! 136: memcpy(v->var_data, csStr, strLen);
! 137: v->var_sb.val = htons(strLen);
! 138:
! 139: return v;
! 140: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>