Annotation of mqtt/src/client.c, revision 1.3
1.2 misho 1: #include "global.h"
2: #include "mqtt.h"
3: #include "client.h"
4:
5:
6: int
7: ConnectClient(int sock)
8: {
9: int siz = 0;
10: struct pollfd pfd;
11:
12: siz = mqtt_msgCONNECT(args->msg, (char*) AIT_GET_STR(&args->ConnID), args->ka,
13: (char*) AIT_GET_STR(&args->User), (char*) AIT_GET_STR(&args->Pass),
14: (char*) args->Will.Topic.val.string, (char*) args->Will.Msg.val.string,
15: !args->notClear, args->QoS, args->Retain);
16: if (siz == -1) {
17: printf("Error:: msgCONNECT #%d - %s\n", mqtt_GetErrno(), mqtt_GetError());
18: return -1;
19: }
20:
21: siz = send(sock, args->msg->msg_base, siz, 0);
22: if (siz == -1) {
23: printf("Error:: send() #%d - %s\n", errno, strerror(errno));
24: return -1;
25: } else
26: ioVERBOSE(3) printf("Sended CONNECT %d bytes\n", siz);
27:
28: pfd.fd = sock;
29: pfd.events = POLLIN | POLLPRI;
30: switch (poll(&pfd, 1, args->ka * 1000)) {
31: case -1:
32: printf("Error:: poll() #%d - %s\n", errno, strerror(errno));
33: return -1;
34: case 0:
35: ioVERBOSE(3) printf("Timeout reached (%d) ...\n", args->ka * 1000);
36: return -1;
37: }
38: if (pfd.revents & (POLLERR | POLLHUP | POLLNVAL))
39: return -1;
40:
1.3 ! misho 41: memset(args->msg->msg_base, 0, args->msg->msg_len);
1.2 misho 42: siz = recv(sock, args->msg->msg_base, args->msg->msg_len, 0);
43: if (siz == -1) {
44: printf("Error:: recv() #%d - %s\n", errno, strerror(errno));
45: return -1;
46: } else
47: ioVERBOSE(3) printf("Received %d bytes\n", siz);
48:
49: return (u_char) mqtt_readCONNACK(args->msg);
50: }
51:
52: void *
53: OpenFile(void)
54: {
55: int f, siz = 0;
56: void *mem;
57:
58: if (!args->isFile)
59: return NULL;
60:
61: f = open(AIT_GET_STR(&args->Value), O_RDONLY);
62: if (f == -1) {
63: printf("Error:: in open file #%d - %s\n", errno, strerror(errno));
64: return NULL;
65: }
66: mem = mmap(NULL, siz, PROT_READ, MAP_PRIVATE, f, 0);
67: if (mem == MAP_FAILED) {
68: printf("Error:: in map file #%d - %s\n", errno, strerror(errno));
69: close(f);
70: return NULL;
71: } else
72: close(f);
73:
74: AIT_SET_PTR(&args->Value, mem, siz);
75: return mem;
76: }
77:
78: void
79: CloseFile(void)
80: {
81: if (args->isFile) {
82: munmap(AIT_GET_PTR(&args->Value), AIT_LEN(&args->Value));
83: AIT_FREE_VAL(&args->Value);
84: }
85: }
86:
87: inline int
88: SendTo(int sock, int siz)
89: {
1.3 ! misho 90: siz = send(sock, args->msg->msg_base, siz, MSG_NOSIGNAL);
1.2 misho 91: if (siz == -1) {
92: printf("Error:: send() #%d - %s\n", errno, strerror(errno));
93: return -1;
94: } else
1.3 ! misho 95: ioVERBOSE(3) printf("Sended %d bytes\n", siz);
1.2 misho 96:
97: return siz;
98: }
99:
100: inline int
101: RecvFrom(int sock)
102: {
103: struct pollfd pfd;
104: int siz = 0;
105:
1.3 ! misho 106: memset(args->msg->msg_base, 0, args->msg->msg_len);
! 107:
1.2 misho 108: pfd.fd = sock;
109: pfd.events = POLLIN | POLLPRI;
110: do {
111: switch (poll(&pfd, 1, args->ka * 1000)) {
112: case -1:
113: printf("Error:: poll() #%d - %s\n", errno, strerror(errno));
114: return -1;
115: case 0:
116: ioVERBOSE(3) printf("Timeout reached (%d) ...\n", args->ka * 1000);
1.3 ! misho 117: if (mqtt_KeepAlive(sock, args->ka, 1) == -1)
1.2 misho 118: return -1;
119: continue;
120: }
121: if (pfd.revents & (POLLERR | POLLHUP | POLLNVAL))
122: return -1;
123: } while (0);
124:
125: siz = recv(sock, args->msg->msg_base, args->msg->msg_len, 0);
126: if (siz == -1) {
127: printf("Error:: recv() #%d - %s\n", errno, strerror(errno));
128: return -1;
129: } else
130: ioVERBOSE(3) printf("Received %d bytes\n", siz);
131:
132: return siz;
133: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>