diff options
author | Sorin Zamfir <sorin.zamfir@yahoo.com> | 2016-02-19 20:22:54 +0200 |
---|---|---|
committer | Sorin Zamfir <sorin.zamfir@yahoo.com> | 2016-02-19 20:22:54 +0200 |
commit | d18a1edb679814b66f282232f9d5a586939cc1f8 (patch) | |
tree | 5657d84691ecfdf722e9004e5cdc7c6e06bc3783 /src/lib/protocols/mqtt.c | |
parent | a8050635fa7b7a817a4b6b0c70cca1d814593f88 (diff) |
Functional mqtt
Diffstat (limited to 'src/lib/protocols/mqtt.c')
-rw-r--r-- | src/lib/protocols/mqtt.c | 42 |
1 files changed, 33 insertions, 9 deletions
diff --git a/src/lib/protocols/mqtt.c b/src/lib/protocols/mqtt.c index 00d327e00..f069cb6e6 100644 --- a/src/lib/protocols/mqtt.c +++ b/src/lib/protocols/mqtt.c @@ -135,25 +135,49 @@ void ndpi_search_mqtt (struct ndpi_detection_module_struct *ndpi_struct, } if (pt == PUBLISH){ u_int8_t qos = (u_int8_t) (flags & 0x06); - if (((qos == 1) || (qos == 2)) && (packet->payload_packet_len < 4)){ + if (((qos == 1) || (qos == 2)) && (packet->payload_packet_len < 4)){ // at least topic + pkt identifier NDPI_LOG(NDPI_PROTOCOL_MQTT, ndpi_struct, NDPI_LOG_DEBUG, "Excluding Mqtt\n"); NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_MQTT); return; - } else { - NDPI_LOG(NDPI_PROTOCOL_MQTT, ndpi_struct, NDPI_LOG_DEBUG, "Mqtt found [%d]\n",pt); - ndpi_int_mqtt_add_connection(ndpi_struct,flow); + } + if ((qos == 0) && (packet->payload_packet_len < 3)){ // at least topic + NDPI_LOG(NDPI_PROTOCOL_MQTT, ndpi_struct, NDPI_LOG_DEBUG, "Excluding Mqtt\n"); + NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_MQTT); return; } + NDPI_LOG(NDPI_PROTOCOL_MQTT, ndpi_struct, NDPI_LOG_DEBUG, "Mqtt found [%d]\n",pt); + ndpi_int_mqtt_add_connection(ndpi_struct,flow); + return; + } - if (pt == SUBSCRIBE){ -// if () + if ((pt == SUBSCRIBE) && (packet->payload_packet_len < 8)){ // at least one topic+filter is required in the payload + NDPI_LOG(NDPI_PROTOCOL_MQTT, ndpi_struct, NDPI_LOG_DEBUG, "Excluding Mqtt\n"); + NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_MQTT); + return; + } else { + NDPI_LOG(NDPI_PROTOCOL_MQTT, ndpi_struct, NDPI_LOG_DEBUG, "Mqtt found [%d]\n",pt); + ndpi_int_mqtt_add_connection(ndpi_struct,flow); + return; } - if (pt == SUBACK ){ - + if ((pt == SUBACK ) && (packet->payload_packet_len <5 )){ // must have at least a response code + NDPI_LOG(NDPI_PROTOCOL_MQTT, ndpi_struct, NDPI_LOG_DEBUG, "Excluding Mqtt\n"); + NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_MQTT); + return; + } else { + NDPI_LOG(NDPI_PROTOCOL_MQTT, ndpi_struct, NDPI_LOG_DEBUG, "Mqtt found [%d]\n",pt); + ndpi_int_mqtt_add_connection(ndpi_struct,flow); + return; } - if (pt == UNSUBSCRIBE){ + if ((pt == UNSUBSCRIBE) && (packet->payload_packet_len < 7)) { // at least a topic + NDPI_LOG(NDPI_PROTOCOL_MQTT, ndpi_struct, NDPI_LOG_DEBUG, "Excluding Mqtt\n"); + NDPI_ADD_PROTOCOL_TO_BITMASK(flow->excluded_protocol_bitmask, NDPI_PROTOCOL_MQTT); + return; + } else { + NDPI_LOG(NDPI_PROTOCOL_MQTT, ndpi_struct, NDPI_LOG_DEBUG, "Mqtt found [%d]\n",pt); + ndpi_int_mqtt_add_connection(ndpi_struct,flow); + return; } NDPI_LOG(NDPI_PROTOCOL_MQTT, ndpi_struct, NDPI_LOG_DEBUG, "Excluding Mqtt ...\n"); |