Annotation of mqtt/src/recv.c, revision 1.2
1.2 ! 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: }
! 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)) {
! 60: mqtt_SetErr(EINVAL, "Error:: message is too small ...");
! 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>