Bugfix: Some packets need fixed flags in header, missed that in the spec
This commit is contained in:
parent
05b939dfea
commit
31cf6d965d
3 changed files with 25 additions and 14 deletions
11
src/packet.c
11
src/packet.c
|
@ -376,6 +376,17 @@ Buffer *make_buffer_for_header(size_t sz, MQTTControlPacketType type) {
|
||||||
|
|
||||||
Buffer *buffer = buffer_allocate(sz);
|
Buffer *buffer = buffer_allocate(sz);
|
||||||
buffer->data[0] = type << 4;
|
buffer->data[0] = type << 4;
|
||||||
|
|
||||||
|
// MQTT Spec means we should set a bit in the flags field for some packet types
|
||||||
|
switch (type) {
|
||||||
|
case PacketTypePubRel:
|
||||||
|
case PacketTypeSubscribe:
|
||||||
|
case PacketTypeUnsubscribe:
|
||||||
|
buffer->data[0] |= 0x02;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
buffer->position += 1;
|
buffer->position += 1;
|
||||||
variable_length_int_encode(sz - 2, buffer);
|
variable_length_int_encode(sz - 2, buffer);
|
||||||
|
|
||||||
|
|
|
@ -260,7 +260,7 @@ TestResult test_decode_publish_with_msg(void) {
|
||||||
TestResult test_decode_puback(void) {
|
TestResult test_decode_puback(void) {
|
||||||
char data[] = {
|
char data[] = {
|
||||||
0x40, 0x02, // header
|
0x40, 0x02, // header
|
||||||
0x00, 0x0a // packet id
|
0x00, 0x0a // packet id
|
||||||
};
|
};
|
||||||
Buffer *buffer = buffer_from_data_copy(data, sizeof(data));
|
Buffer *buffer = buffer_from_data_copy(data, sizeof(data));
|
||||||
MQTTPacket *packet = mqtt_packet_decode(buffer);
|
MQTTPacket *packet = mqtt_packet_decode(buffer);
|
||||||
|
@ -280,7 +280,7 @@ TestResult test_decode_puback(void) {
|
||||||
TestResult test_decode_pubrec(void) {
|
TestResult test_decode_pubrec(void) {
|
||||||
char data[] = {
|
char data[] = {
|
||||||
0x50, 0x02, // header
|
0x50, 0x02, // header
|
||||||
0x00, 0x0a // packet id
|
0x00, 0x0a // packet id
|
||||||
};
|
};
|
||||||
Buffer *buffer = buffer_from_data_copy(data, sizeof(data));
|
Buffer *buffer = buffer_from_data_copy(data, sizeof(data));
|
||||||
MQTTPacket *packet = mqtt_packet_decode(buffer);
|
MQTTPacket *packet = mqtt_packet_decode(buffer);
|
||||||
|
@ -299,8 +299,8 @@ TestResult test_decode_pubrec(void) {
|
||||||
|
|
||||||
TestResult test_decode_pubrel(void) {
|
TestResult test_decode_pubrel(void) {
|
||||||
char data[] = {
|
char data[] = {
|
||||||
0x60, 0x02, // header
|
0x62, 0x02, // header
|
||||||
0x00, 0x0a // packet id
|
0x00, 0x0a // packet id
|
||||||
};
|
};
|
||||||
Buffer *buffer = buffer_from_data_copy(data, sizeof(data));
|
Buffer *buffer = buffer_from_data_copy(data, sizeof(data));
|
||||||
MQTTPacket *packet = mqtt_packet_decode(buffer);
|
MQTTPacket *packet = mqtt_packet_decode(buffer);
|
||||||
|
@ -320,7 +320,7 @@ TestResult test_decode_pubrel(void) {
|
||||||
TestResult test_decode_pubcomp(void) {
|
TestResult test_decode_pubcomp(void) {
|
||||||
char data[] = {
|
char data[] = {
|
||||||
0x70, 0x02, // header
|
0x70, 0x02, // header
|
||||||
0x00, 0x0a // packet id
|
0x00, 0x0a // packet id
|
||||||
};
|
};
|
||||||
Buffer *buffer = buffer_from_data_copy(data, sizeof(data));
|
Buffer *buffer = buffer_from_data_copy(data, sizeof(data));
|
||||||
MQTTPacket *packet = mqtt_packet_decode(buffer);
|
MQTTPacket *packet = mqtt_packet_decode(buffer);
|
||||||
|
@ -339,7 +339,7 @@ TestResult test_decode_pubcomp(void) {
|
||||||
|
|
||||||
TestResult test_decode_subscribe(void) {
|
TestResult test_decode_subscribe(void) {
|
||||||
char data[] = {
|
char data[] = {
|
||||||
0x80, 0x0f, // header
|
0x82, 0x0f, // header
|
||||||
0x00, 0x0a, // packet id
|
0x00, 0x0a, // packet id
|
||||||
0x00, 0x0a, 't', 'e', 's', 't', '/', 't', 'o', 'p', 'i', 'c',
|
0x00, 0x0a, 't', 'e', 's', 't', '/', 't', 'o', 'p', 'i', 'c',
|
||||||
0x01 // qos
|
0x01 // qos
|
||||||
|
@ -385,7 +385,7 @@ TestResult test_decode_suback(void) {
|
||||||
|
|
||||||
TestResult test_decode_unsubscribe(void) {
|
TestResult test_decode_unsubscribe(void) {
|
||||||
char data[] = {
|
char data[] = {
|
||||||
0xa0, 0x0e, // header
|
0xa2, 0x0e, // header
|
||||||
0x00, 0x0a, // packet id
|
0x00, 0x0a, // packet id
|
||||||
0x00, 0x0a, 't', 'e', 's', 't', '/', 't', 'o', 'p', 'i', 'c',
|
0x00, 0x0a, 't', 'e', 's', 't', '/', 't', 'o', 'p', 'i', 'c',
|
||||||
};
|
};
|
||||||
|
|
|
@ -302,7 +302,7 @@ TestResult test_encode_publish_with_msg(void) {
|
||||||
TestResult test_encode_puback(void) {
|
TestResult test_encode_puback(void) {
|
||||||
char data[] = {
|
char data[] = {
|
||||||
0x40, 0x02, // header
|
0x40, 0x02, // header
|
||||||
0x00, 0x0a // packet id
|
0x00, 0x0a // packet id
|
||||||
};
|
};
|
||||||
PubAckPayload *payload = calloc(1, sizeof(PubAckPayload));
|
PubAckPayload *payload = calloc(1, sizeof(PubAckPayload));
|
||||||
|
|
||||||
|
@ -320,7 +320,7 @@ TestResult test_encode_puback(void) {
|
||||||
TestResult test_encode_pubrec(void) {
|
TestResult test_encode_pubrec(void) {
|
||||||
char data[] = {
|
char data[] = {
|
||||||
0x50, 0x02, // header
|
0x50, 0x02, // header
|
||||||
0x00, 0x0a // packet id
|
0x00, 0x0a // packet id
|
||||||
};
|
};
|
||||||
PubRecPayload *payload = calloc(1, sizeof(PubRecPayload));
|
PubRecPayload *payload = calloc(1, sizeof(PubRecPayload));
|
||||||
|
|
||||||
|
@ -337,8 +337,8 @@ TestResult test_encode_pubrec(void) {
|
||||||
|
|
||||||
TestResult test_encode_pubrel(void) {
|
TestResult test_encode_pubrel(void) {
|
||||||
char data[] = {
|
char data[] = {
|
||||||
0x60, 0x02, // header
|
0x62, 0x02, // header
|
||||||
0x00, 0x0a // packet id
|
0x00, 0x0a // packet id
|
||||||
};
|
};
|
||||||
PubRelPayload *payload = calloc(1, sizeof(PubRelPayload));
|
PubRelPayload *payload = calloc(1, sizeof(PubRelPayload));
|
||||||
|
|
||||||
|
@ -356,7 +356,7 @@ TestResult test_encode_pubrel(void) {
|
||||||
TestResult test_encode_pubcomp(void) {
|
TestResult test_encode_pubcomp(void) {
|
||||||
char data[] = {
|
char data[] = {
|
||||||
0x70, 0x02, // header
|
0x70, 0x02, // header
|
||||||
0x00, 0x0a // packet id
|
0x00, 0x0a // packet id
|
||||||
};
|
};
|
||||||
PubCompPayload *payload = calloc(1, sizeof(PubCompPayload));
|
PubCompPayload *payload = calloc(1, sizeof(PubCompPayload));
|
||||||
|
|
||||||
|
@ -373,7 +373,7 @@ TestResult test_encode_pubcomp(void) {
|
||||||
|
|
||||||
TestResult test_encode_subscribe(void) {
|
TestResult test_encode_subscribe(void) {
|
||||||
char data[] = {
|
char data[] = {
|
||||||
0x80, 0x0f, // header
|
0x82, 0x0f, // header
|
||||||
0x00, 0x0a, // packet id
|
0x00, 0x0a, // packet id
|
||||||
0x00, 0x0a, 't', 'e', 's', 't', '/', 't', 'o', 'p', 'i', 'c',
|
0x00, 0x0a, 't', 'e', 's', 't', '/', 't', 'o', 'p', 'i', 'c',
|
||||||
0x01 // qos
|
0x01 // qos
|
||||||
|
@ -415,7 +415,7 @@ TestResult test_encode_suback(void) {
|
||||||
|
|
||||||
TestResult test_encode_unsubscribe(void) {
|
TestResult test_encode_unsubscribe(void) {
|
||||||
char data[] = {
|
char data[] = {
|
||||||
0xa0, 0x0e, // header
|
0xa2, 0x0e, // header
|
||||||
0x00, 0x0a, // packet id
|
0x00, 0x0a, // packet id
|
||||||
0x00, 0x0a, 't', 'e', 's', 't', '/', 't', 'o', 'p', 'i', 'c',
|
0x00, 0x0a, 't', 'e', 's', 't', '/', 't', 'o', 'p', 'i', 'c',
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue