1: #include <stdio.h>
2: #include <stdlib.h>
3: #include <string.h>
4: #include <sys/types.h>
5: #include <limits.h>
6: #include <elwix.h>
7: #include <aitmqtt.h>
8:
9:
10: int
11: main()
12: {
13: mqtt_msg_t *m;
14: mqtt_subscr_t s[4], *ss;
15: mqtthdr_connflgs_t flg;
16: mqtthdr_connack_t cack;
17: u_short ka, msgID;
18: int i, len;
19: char cid[BUFSIZ], user[BUFSIZ], pass[BUFSIZ], topic[BUFSIZ], *t, *msg, *pub;
20: struct mqtthdr *hdr;
21: u_char *qoses;
22:
23: /* conn* */
24: m = mqtt_msgCONNECT("MRYN", 4, 0, "aaaaa", NULL, "bbb", NULL, 0, 0, 0);
25: printf("connect=%d/%p\n", m->msg_len, m);
26: // for (i = 0; i < m->msg_len; i++)
27: // printf("%d\n", ((u_char*) m->msg_base)[i]);
28: t = msg = NULL;
29: cack = mqtt_readCONNECT(m, &ka, cid, sizeof cid, user, sizeof user, pass, sizeof pass, &t, &msg);
30: flg.flags = cack.reserved;
31: printf("read connect %d flags:: clean=%d will=%d qos=%d retain=%d pass=%d user=%d\n", cack.retcode,
32: flg.clean_sess, flg.will_flg, flg.will_qos, flg.will_retain, flg.password, flg.username);
33: if (flg.reserved) {
34: printf("Error:: mqtt_readCONNECT() #%d - %s\n", mqtt_GetErrno(), mqtt_GetError());
35: mqtt_msgFree(&m, 0);
36: return 1;
37: }
38: printf("++> KA=%d sec, ConnID=%s User=%s Pass=%s Will_Topic=%s Will_Message=%s\n", ka,
39: cid, user, pass, t, msg);
40: if (t)
41: e_free(t);
42: if (msg)
43: e_free(msg);
44: mqtt_msgFree(&m, 0);
45:
46: m = mqtt_msgCONNACK(1);
47: printf("connack=%d/%p\n", m->msg_len, m);
48: // for (i = 0; i < m->msg_len; i++)
49: // printf("%d\n", ((u_char*) m->msg_base)[i]);
50: printf("read connack=%d\n", mqtt_readCONNACK(m));
51: mqtt_msgFree(&m, 0);
52: getchar();
53:
54: /* pub* */
55: m = mqtt_msgPUBLISH("AAA/bbb/CCC/ddd", 7, 0, 2, 0, "OLE!!!", 7);
56: printf("publish=%d/%p\n", m->msg_len, m);
57: // for (i = 0; i < m->msg_len; i++)
58: // printf("%d\n", ((u_char*) m->msg_base)[i]);
59: if (!(len = mqtt_readPUBLISH(m, topic, sizeof topic, &msgID, (void**) &pub))) {
60: printf("Error:: mqtt_readPUBLISH() #%d - %s\n", mqtt_GetErrno(), mqtt_GetError());
61: mqtt_msgFree(&m, 0);
62: return 2;
63: } else
64: hdr = (struct mqtthdr*) m->msg_base;
65: printf("read publish: dup=%d qos=%d retain=%d\n", hdr->mqtt_msg.dup, hdr->mqtt_msg.qos, hdr->mqtt_msg.retain);
66: printf("++> topic=%s MessageID=%d DATA=(%d)%s\n", topic, msgID, len, pub);
67: mqtt_msgFree(&m, 0);
68: e_free(pub);
69:
70: m = mqtt_msgPUBACK(10);
71: printf("puback=%d/%p\n", m->msg_len, m);
72: // for (i = 0; i < m->msg_len; i++)
73: // printf("%d\n", ((u_char*) m->msg_base)[i]);
74: printf("read puback=%d\n", mqtt_readPUBACK(m));
75: mqtt_msgFree(&m, 0);
76:
77: m = mqtt_msgPUBREC(11);
78: printf("pubrec=%d/%p\n", m->msg_len, m);
79: // for (i = 0; i < m->msg_len; i++)
80: // printf("%d\n", ((u_char*) m->msg_base)[i]);
81: printf("read pubrec=%d\n", mqtt_readPUBREC(m));
82: mqtt_msgFree(&m, 0);
83:
84: m = mqtt_msgPUBREL(12);
85: printf("pubrel=%d/%p\n", m->msg_len, m);
86: // for (i = 0; i < m->msg_len; i++)
87: // printf("%d\n", ((u_char*) m->msg_base)[i]);
88: printf("read pubrel=%d\n", mqtt_readPUBREL(m));
89: mqtt_msgFree(&m, 0);
90:
91: m = mqtt_msgPUBCOMP(13);
92: printf("pubcomp=%d/%p\n", m->msg_len, m);
93: // for (i = 0; i < m->msg_len; i++)
94: // printf("%d\n", ((u_char*) m->msg_base)[i]);
95: printf("read pubcomp=%d\n", mqtt_readPUBCOMP(m));
96: mqtt_msgFree(&m, 0);
97: getchar();
98:
99: /* sub* */
100: memset(s, 0, sizeof s);
101: s[0].sub_topic.msg_len = 3;
102: s[0].sub_topic.msg_base = "a/b";
103: s[0].sub_qos = MQTT_QOS_ACK;
104: s[1].sub_topic.msg_len = 3;
105: s[1].sub_topic.msg_base = "c/d";
106: s[1].sub_qos = MQTT_QOS_ONCE;
107: s[2].sub_topic.msg_len = 7;
108: s[2].sub_topic.msg_base = "x/y/z/Q";
109: s[2].sub_qos = MQTT_QOS_EXACTLY;
110: m = mqtt_msgSUBSCRIBE(s, 10);
111: printf("subscribe=%d/%p\n", m->msg_len, m);
112: /*
113: for (i = 0; i < m->msg_len; i++)
114: printf("%d\n", ((u_char*) m->msg_base)[i]);
115: */
116: if (mqtt_readSUBSCRIBE(m, &msgID, &ss) == -1) {
117: printf("Error:: mqtt_readSUBSCRIBE() #%d - %s\n", mqtt_GetErrno(), mqtt_GetError());
118: mqtt_msgFree(&m, 0);
119: return 3;
120: }
121: printf("read subscribe: dup=%d qos=%d retain=%d\n", hdr->mqtt_msg.dup, hdr->mqtt_msg.qos, hdr->mqtt_msg.retain);
122: printf("++> MessageID=%d\n", msgID);
123: for (i = 0; ss[i].sub_topic.msg_base; i++)
124: printf(" >>> QoS=%d Topic(%d)=%s\n", ss[i].sub_qos, ss[i].sub_topic.msg_len,
125: (char*) ss[i].sub_topic.msg_base);
126: mqtt_msgFree(&m, 0);
127: mqtt_subFree(&ss);
128:
129: m = mqtt_msgSUBACK(s, 10);
130: printf("suback=%d/%p\n", m->msg_len, m);
131: // for (i = 0; i < m->msg_len; i++)
132: // printf("%d\n", ((u_char*) m->msg_base)[i]);
133: printf("read suback=%d\n", (len = mqtt_readSUBACK(m, &msgID, &qoses)));
134: for (i = 0; i < len; i++)
135: printf(" >>> QoS=%d\n", qoses[i]);
136: mqtt_msgFree(&m, 0);
137: e_free(qoses);
138:
139: m = mqtt_msgUNSUBSCRIBE(s, 10, 0, 1);
140: printf("unsubscribe=%d/%p\n", m->msg_len, m);
141: // for (i = 0; i < m->msg_len; i++)
142: // printf("%d\n", ((u_char*) m->msg_base)[i]);
143: if (mqtt_readUNSUBSCRIBE(m, &msgID, &ss) == -1) {
144: printf("Error:: mqtt_readUNSUBSCRIBE() #%d - %s\n", mqtt_GetErrno(), mqtt_GetError());
145: mqtt_msgFree(&m, 0);
146: return 3;
147: }
148: printf("read unsubscribe: dup=%d qos=%d retain=%d\n", hdr->mqtt_msg.dup, hdr->mqtt_msg.qos, hdr->mqtt_msg.retain);
149: printf("++> MessageID=%d\n", msgID);
150: for (i = 0; ss[i].sub_topic.msg_base; i++)
151: printf(" >>> Topic(%d)=%s\n", ss[i].sub_topic.msg_len, (char*) ss[i].sub_topic.msg_base);
152: mqtt_msgFree(&m, 0);
153: mqtt_subFree(&ss);
154:
155: m = mqtt_msgUNSUBACK(10);
156: printf("unsuback=%d/%p\n", m->msg_len, m);
157: // for (i = 0; i < m->msg_len; i++)
158: // printf("%d\n", ((u_char*) m->msg_base)[i]);
159: printf("read unsuback=%d\n", mqtt_readUNSUBACK(m));
160: mqtt_msgFree(&m, 0);
161: getchar();
162:
163: /* ping* */
164: m = mqtt_msgPINGREQ();
165: printf("pingreq=%d/%p\n", m->msg_len, m);
166: // for (i = 0; i < m->msg_len; i++)
167: // printf("%d\n", ((u_char*) m->msg_base)[i]);
168: printf("read pingreq=%d\n", mqtt_readPINGREQ(m));
169: mqtt_msgFree(&m, 0);
170: m = mqtt_msgPINGRESP();
171: printf("pingresp=%d/%p\n", m->msg_len, m);
172: // for (i = 0; i < m->msg_len; i++)
173: // printf("%d\n", ((u_char*) m->msg_base)[i]);
174: printf("read pingresp=%d\n", mqtt_readPINGRESP(m));
175: mqtt_msgFree(&m, 0);
176:
177: m = mqtt_msgDISCONNECT();
178: printf("disconnect=%d/%p\n", m->msg_len, m);
179: // for (i = 0; i < m->msg_len; i++)
180: // printf("%d\n", ((u_char*) m->msg_base)[i]);
181: printf("read disconnect=%d\n", mqtt_readDISCONNECT(m));
182: mqtt_msgFree(&m, 0);
183: return 0;
184: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>