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