Better error logging

This commit is contained in:
Johannes Schriewer 2018-07-30 22:06:32 +02:00
parent cfd8934779
commit 0a56f00222
4 changed files with 58 additions and 26 deletions

View file

@ -9,6 +9,7 @@
#include "mqtt.h"
#include "mqtt_internal.h"
#include "packet.h"
#include "platform.h"
#include "protocol.h"
#include "debug.h"
@ -33,7 +34,7 @@ static inline void parse_packet(MQTTHandle *handle, MQTTPacket *packet) {
case PacketTypeSubAck:
case PacketTypeUnsubAck:
if (!dispatch_packet(handle, packet)) {
DEBUG_LOG("Unexpected packet!");
DEBUG_LOG("Unexpected packet! (type: %s, packet_id: %d)", get_packet_name(packet), get_packet_id(packet));
disconnect(handle);
}
break;

View file

@ -662,3 +662,52 @@ Buffer *mqtt_packet_encode(MQTTPacket *packet) {
return NULL;
}
/*
* Helper functions
*/
uint16_t get_packet_id(MQTTPacket *packet) {
switch(packet->packet_type) {
case PacketTypePublish:
return ((PublishPayload *)packet->payload)->packet_id;
case PacketTypePubAck:
return ((PubAckPayload *)packet->payload)->packet_id;
case PacketTypePubRec:
return ((PubRecPayload *)packet->payload)->packet_id;
case PacketTypePubRel:
return ((PubRelPayload *)packet->payload)->packet_id;
case PacketTypePubComp:
return ((PubCompPayload *)packet->payload)->packet_id;
case PacketTypeSubscribe:
return ((SubscribePayload *)packet->payload)->packet_id;
case PacketTypeSubAck:
return ((SubAckPayload *)packet->payload)->packet_id;
case PacketTypeUnsubscribe:
return ((UnsubscribePayload *)packet->payload)->packet_id;
case PacketTypeUnsubAck:
return ((UnsubAckPayload *)packet->payload)->packet_id;
default:
return 0; // no packet id in payload
}
}
char *get_packet_name(MQTTPacket *packet) {
switch (packet->packet_type) {
case PacketTypeConnect: return "CONNECT";
case PacketTypeConnAck: return "CONNACK";
case PacketTypePublish: return "PUBLISH";
case PacketTypePubAck: return "PUBACK";
case PacketTypePubRec: return "PUBREC";
case PacketTypePubRel: return "PUBREL";
case PacketTypePubComp: return "PUBCOMP";
case PacketTypeSubscribe: return "SUBSCRIBE";
case PacketTypeSubAck: return "SUBACK";
case PacketTypeUnsubscribe: return "UNSUBSCRIBE";
case PacketTypeUnsubAck: return "UNSUBACK";
case PacketTypePingReq: return "PINGREQ";
case PacketTypePingResp: return "PINGRESP";
case PacketTypeDisconnect: return "DISCONNECT";
}
return "[UNKNOWN]";
}

View file

@ -127,4 +127,11 @@ void free_MQTTPacket(MQTTPacket *packet);
Buffer *mqtt_packet_encode(MQTTPacket *packet);
MQTTPacket *allocate_MQTTPacket(MQTTControlPacketType type);
/*
* Utility
*/
uint16_t get_packet_id(MQTTPacket *packet);
char *get_packet_name(MQTTPacket *packet);
#endif /* packet_h__included */

View file

@ -31,31 +31,6 @@ void expect_packet(MQTTHandle *handle, MQTTControlPacketType type, uint16_t pack
// dump_expected(handle);
}
static uint16_t get_packet_id(MQTTPacket *packet) {
switch(packet->packet_type) {
case PacketTypePublish:
return ((PublishPayload *)packet->payload)->packet_id;
case PacketTypePubAck:
return ((PubAckPayload *)packet->payload)->packet_id;
case PacketTypePubRec:
return ((PubRecPayload *)packet->payload)->packet_id;
case PacketTypePubRel:
return ((PubRelPayload *)packet->payload)->packet_id;
case PacketTypePubComp:
return ((PubCompPayload *)packet->payload)->packet_id;
case PacketTypeSubscribe:
return ((SubscribePayload *)packet->payload)->packet_id;
case PacketTypeSubAck:
return ((SubAckPayload *)packet->payload)->packet_id;
case PacketTypeUnsubscribe:
return ((UnsubscribePayload *)packet->payload)->packet_id;
case PacketTypeUnsubAck:
return ((UnsubAckPayload *)packet->payload)->packet_id;
default:
return 0; // no packet id in payload
}
}
void remove_from_queue(MQTTHandle *handle, MQTTCallbackQueueItem *remove) {
MQTTCallbackQueueItem *item = handle->queue.pending;
MQTTCallbackQueueItem *prev_item = NULL;