Annotation of mqtt/src/recv.c, revision 1.1.2.3
1.1.2.1 misho 1: #include "global.h"
2:
3:
4: /* ------------------------------------------------------------------- */
5:
6: /*
7: * mqttInitCallbacks() Init callback array for dispatcher
8: *
9: * return: NULL error or !=NULL allocated callback array, after use free with mqttFiniCallbacks()
10: */
11: mqtt_cb_t *
12: mqttInitCallbacks(void)
13: {
14: mqtt_cb_t *cb = NULL;
15:
16: cb = malloc((MQTT_TYPE_MAX + 1) * sizeof(mqtt_cb_t));
17: if (!cb) {
18: LOGERR;
19: return NULL;
20: } else
21: memset(cb, 0, (MQTT_TYPE_MAX + 1) * sizeof(mqtt_cb_t));
22:
23: return cb;
24: }
25:
26: /*
27: * mqttFiniCallbacks() Free callback array
28: *
29: * @cb = Callback array
30: * return: none
31: */
32: void
33: mqttFiniCallbacks(mqtt_cb_t ** __restrict cb)
34: {
35: if (!cb)
36: return;
37:
38: if ((*cb)[MQTT_TYPE_MAX])
39: (*cb)[MQTT_TYPE_MAX](*cb);
40:
41: free(*cb);
42: *cb = NULL;
43: }
1.1.2.2 misho 44:
45: /*
46: * mqttDispatcher() MQTT Message type dispatcher
47: *
48: * @cb = Callback array
49: * @buf = Received MQTT message
50: * return: -1 error or >-1 return value from executed callback
51: */
52: inline int
53: mqttDispatcher(mqtt_cb_t * __restrict cb, mqtt_msg_t * __restrict buf)
54: {
55: struct mqtthdr *hdr;
56:
57: if (!cb || !buf)
58: return -1;
59: if (buf->msg_len < sizeof(struct mqtthdr)) {
1.1.2.3 ! misho 60: mqtt_SetErr(EINVAL, "Error:: message is too small ...");
1.1.2.2 misho 61: return -1;
62: }
63:
64: hdr = (struct mqtthdr *) buf->msg_base;
65: if (hdr->mqtt_msg.type > MQTT_TYPE_MAX) {
66: mqtt_SetErr(ENOSYS, "Error:: message type %d not implemented", hdr->mqtt_msg.type);
67: return -1;
68: }
69:
70: if (cb[hdr->mqtt_msg.type])
71: return cb[hdr->mqtt_msg.type](buf);
72:
73: mqtt_SetErr(ENOTSUP, "Error:: Unsupported message type %d", hdr->mqtt_msg.type);
74: return -1;
75: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>