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>