Annotation of mqtt/src/client.c, revision 1.2

1.2     ! misho       1: #include "global.h"
        !             2: #include "mqtt.h"
        !             3: #include "client.h"
        !             4: 
        !             5: 
        !             6: int
        !             7: InitClient(void)
        !             8: {
        !             9:        int sock;
        !            10: 
        !            11:        sock = socket(args->addr.sa.sa_family, SOCK_STREAM, IPPROTO_TCP);
        !            12:        if (sock == -1) {
        !            13:                printf("Error:: socket() #%d - %s\n", errno, strerror(errno));
        !            14:                return -1;
        !            15:        }
        !            16:        if (connect(sock, &args->addr.sa, args->addr.sa.sa_len) == -1) {
        !            17:                printf("Error:: connect() #%d - %s\n", errno, strerror(errno));
        !            18:                return -1;
        !            19:        }
        !            20: 
        !            21:        return sock;
        !            22: }
        !            23: 
        !            24: int
        !            25: ConnectClient(int sock)
        !            26: {
        !            27:        int siz = 0;
        !            28:        struct pollfd pfd;
        !            29: 
        !            30:        siz = mqtt_msgCONNECT(args->msg, (char*) AIT_GET_STR(&args->ConnID), args->ka, 
        !            31:                        (char*) AIT_GET_STR(&args->User), (char*) AIT_GET_STR(&args->Pass), 
        !            32:                        (char*) args->Will.Topic.val.string, (char*) args->Will.Msg.val.string, 
        !            33:                        !args->notClear, args->QoS, args->Retain);
        !            34:        if (siz == -1) {
        !            35:                printf("Error:: msgCONNECT #%d - %s\n", mqtt_GetErrno(), mqtt_GetError());
        !            36:                return -1;
        !            37:        }
        !            38: 
        !            39:        siz = send(sock, args->msg->msg_base, siz, 0);
        !            40:        if (siz == -1) {
        !            41:                printf("Error:: send() #%d - %s\n", errno, strerror(errno));
        !            42:                return -1;
        !            43:        } else
        !            44:                ioVERBOSE(3) printf("Sended CONNECT %d bytes\n", siz);
        !            45: 
        !            46:        pfd.fd = sock;
        !            47:        pfd.events = POLLIN | POLLPRI;
        !            48:        switch (poll(&pfd, 1, args->ka * 1000)) {
        !            49:                case -1:
        !            50:                        printf("Error:: poll() #%d - %s\n", errno, strerror(errno));
        !            51:                        return -1;
        !            52:                case 0:
        !            53:                        ioVERBOSE(3) printf("Timeout reached (%d) ...\n", args->ka * 1000);
        !            54:                        return -1;
        !            55:        }
        !            56:        if (pfd.revents & (POLLERR | POLLHUP | POLLNVAL))
        !            57:                return -1;
        !            58: 
        !            59:        siz = recv(sock, args->msg->msg_base, args->msg->msg_len, 0);
        !            60:        if (siz == -1) {
        !            61:                printf("Error:: recv() #%d - %s\n", errno, strerror(errno));
        !            62:                return -1;
        !            63:        } else
        !            64:                ioVERBOSE(3) printf("Received %d bytes\n", siz);
        !            65: 
        !            66:        return (u_char) mqtt_readCONNACK(args->msg);
        !            67: }
        !            68: 
        !            69: int
        !            70: CloseClient(int sock)
        !            71: {
        !            72:        int siz = 0;
        !            73: 
        !            74:        siz = mqtt_msgDISCONNECT(args->msg);
        !            75:        if (siz == -1) {
        !            76:                printf("Error:: msgDISCONNECT #%d - %s\n", mqtt_GetErrno(), mqtt_GetError());
        !            77:                return -1;
        !            78:        }
        !            79: 
        !            80:        siz = send(sock, args->msg->msg_base, siz, 0);
        !            81:        if (siz == -1) {
        !            82:                printf("Error:: send() #%d - %s\n", errno, strerror(errno));
        !            83:                return -1;
        !            84:        } else
        !            85:                ioVERBOSE(3) printf("Sended DISCONNECT %d bytes\n", siz);
        !            86: 
        !            87:        shutdown(sock, SHUT_RDWR);
        !            88:        close(sock);
        !            89:        return siz;
        !            90: }
        !            91: 
        !            92: int
        !            93: KAClient(int sock)
        !            94: {
        !            95:        int siz = 0;
        !            96:        struct pollfd pfd;
        !            97: 
        !            98:        siz = mqtt_msgPINGREQ(args->msg);
        !            99:        if (siz == -1) {
        !           100:                printf("Error:: msgPINGREQ #%d - %s\n", mqtt_GetErrno(), mqtt_GetError());
        !           101:                return -1;
        !           102:        }
        !           103:        if (SendTo(sock, siz) == -1)
        !           104:                return -1;
        !           105: 
        !           106:        pfd.fd = sock;
        !           107:        pfd.events = POLLIN | POLLPRI;
        !           108:        switch (poll(&pfd, 1, args->ka * 1000)) {
        !           109:                case -1:
        !           110:                        printf("Error:: poll() #%d - %s\n", errno, strerror(errno));
        !           111:                        return -1;
        !           112:                case 0:
        !           113:                        ioVERBOSE(3) printf("Timeout reached (%d) ...\n", args->ka * 1000);
        !           114:                        return -1;
        !           115:        }
        !           116:        if (pfd.revents & (POLLERR | POLLHUP | POLLNVAL))
        !           117:                return -1;
        !           118: 
        !           119:        siz = recv(sock, args->msg->msg_base, args->msg->msg_len, 0);
        !           120:        if (siz == -1) {
        !           121:                printf("Error:: recv() #%d - %s\n", errno, strerror(errno));
        !           122:                return -1;
        !           123:        } else
        !           124:                ioVERBOSE(3) printf("Received %d bytes\n", siz);
        !           125: 
        !           126:        return mqtt_readPINGRESP(args->msg);
        !           127: }
        !           128: 
        !           129: void *
        !           130: OpenFile(void)
        !           131: {
        !           132:        int f, siz = 0;
        !           133:        void *mem;
        !           134: 
        !           135:        if (!args->isFile)
        !           136:                return NULL;
        !           137: 
        !           138:        f = open(AIT_GET_STR(&args->Value), O_RDONLY);
        !           139:        if (f == -1) {
        !           140:                printf("Error:: in open file #%d - %s\n", errno, strerror(errno));
        !           141:                return NULL;
        !           142:        }
        !           143:        mem = mmap(NULL, siz, PROT_READ, MAP_PRIVATE, f, 0);
        !           144:        if (mem == MAP_FAILED) {
        !           145:                printf("Error:: in map file #%d - %s\n", errno, strerror(errno));
        !           146:                close(f);
        !           147:                return NULL;
        !           148:        } else
        !           149:                close(f);
        !           150: 
        !           151:        AIT_SET_PTR(&args->Value, mem, siz);
        !           152:        return mem;
        !           153: }
        !           154: 
        !           155: void
        !           156: CloseFile(void)
        !           157: {
        !           158:        if (args->isFile) {
        !           159:                munmap(AIT_GET_PTR(&args->Value), AIT_LEN(&args->Value));
        !           160:                AIT_FREE_VAL(&args->Value);
        !           161:        }
        !           162: }
        !           163: 
        !           164: inline int
        !           165: SendTo(int sock, int siz)
        !           166: {
        !           167:        siz = send(sock, args->msg->msg_base, siz, 0);
        !           168:        if (siz == -1) {
        !           169:                printf("Error:: send() #%d - %s\n", errno, strerror(errno));
        !           170:                return -1;
        !           171:        } else
        !           172:                ioVERBOSE(3) printf("Sended PUBLISH %d bytes\n", siz);
        !           173: 
        !           174:        return siz;
        !           175: }
        !           176: 
        !           177: inline int
        !           178: RecvFrom(int sock)
        !           179: {
        !           180:        struct pollfd pfd;
        !           181:        int siz = 0;
        !           182: 
        !           183:        pfd.fd = sock;
        !           184:        pfd.events = POLLIN | POLLPRI;
        !           185:        do {
        !           186:                switch (poll(&pfd, 1, args->ka * 1000)) {
        !           187:                        case -1:
        !           188:                                printf("Error:: poll() #%d - %s\n", errno, strerror(errno));
        !           189:                                return -1;
        !           190:                        case 0:
        !           191:                                ioVERBOSE(3) printf("Timeout reached (%d) ...\n", args->ka * 1000);
        !           192:                                if (KAClient(sock) == -1)
        !           193:                                        return -1;
        !           194:                                continue;
        !           195:                }
        !           196:                if (pfd.revents & (POLLERR | POLLHUP | POLLNVAL))
        !           197:                        return -1;
        !           198:        } while (0);
        !           199: 
        !           200:        siz = recv(sock, args->msg->msg_base, args->msg->msg_len, 0);
        !           201:        if (siz == -1) {
        !           202:                printf("Error:: recv() #%d - %s\n", errno, strerror(errno));
        !           203:                return -1;
        !           204:        } else
        !           205:                ioVERBOSE(3) printf("Received %d bytes\n", siz);
        !           206: 
        !           207:        return siz;
        !           208: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>