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>