diff --git a/lib/mqtt_protocol.h b/lib/mqtt_protocol.h index b5807f47..62befba6 100644 --- a/lib/mqtt_protocol.h +++ b/lib/mqtt_protocol.h @@ -45,6 +45,9 @@ Contributors: #define DISCONNECT 0xE0 #define AUTH 0xF0 +/* For distinguishing CONNECT and WILL properties */ +#define CMD_WILL 0 + enum mqtt311_connack_codes { CONNACK_ACCEPTED = 0, CONNACK_REFUSED_PROTOCOL_VERSION = 1, diff --git a/lib/property_mosq.c b/lib/property_mosq.c index 5bb7331a..b4f44c84 100644 --- a/lib/property_mosq.c +++ b/lib/property_mosq.c @@ -26,6 +26,9 @@ Contributors: #include "packet_mosq.h" #include "property_mosq.h" +static int property__command_check(int command, struct mqtt5__property *properties); + + int property__read(struct mosquitto__packet *packet, int32_t *len, struct mqtt5__property *property) { int rc; @@ -138,7 +141,7 @@ int property__read(struct mosquitto__packet *packet, int32_t *len, struct mqtt5_ } -int property__read_all(struct mosquitto__packet *packet, struct mqtt5__property **properties) +int property__read_all(int command, struct mosquitto__packet *packet, struct mqtt5__property **properties) { int rc; int32_t proplen; @@ -197,6 +200,7 @@ int property__read_all(struct mosquitto__packet *packet, struct mqtt5__property } } + /* Check for duplicates */ current = *properties; while(current){ tail = current->next; @@ -212,6 +216,11 @@ int property__read_all(struct mosquitto__packet *packet, struct mqtt5__property current = current->next; } + /* Check for properties on incorrect commands */ + if(property__command_check(command, *properties)){ + property__free_all(properties); + return MOSQ_ERR_PROTOCOL; + } return MOSQ_ERR_SUCCESS; } @@ -441,3 +450,104 @@ int property__write_all(struct mosquitto__packet *packet, struct mqtt5__property return MOSQ_ERR_SUCCESS; } + +static int property__command_check(int command, struct mqtt5__property *properties) +{ + struct mqtt5__property *p; + + p = properties; + while(p){ + switch(p->identifier){ + case PROP_PAYLOAD_FORMAT_INDICATOR: + case PROP_MESSAGE_EXPIRY_INTERVAL: + case PROP_CONTENT_TYPE: + case PROP_RESPONSE_TOPIC: + case PROP_CORRELATION_DATA: + if(command != PUBLISH && command != 0){ + return MOSQ_ERR_PROTOCOL; + } + break; + + case PROP_SUBSCRIPTION_IDENTIFIER: + if(command != PUBLISH && command != SUBSCRIBE){ + return MOSQ_ERR_PROTOCOL; + } + break; + + case PROP_SESSION_EXPIRY_INTERVAL: + if(command != CONNECT && command != CONNACK && command != DISCONNECT){ + return MOSQ_ERR_PROTOCOL; + } + break; + + case PROP_AUTHENTICATION_METHOD: + case PROP_AUTHENTICATION_DATA: + if(command != CONNECT && command != CONNACK && command != AUTH){ + return MOSQ_ERR_PROTOCOL; + } + break; + + case PROP_ASSIGNED_CLIENT_IDENTIFIER: + case PROP_SERVER_KEEP_ALIVE: + case PROP_RESPONSE_INFO: + case PROP_MAXIMUM_QOS: + case PROP_RETAIN_AVAILABLE: + case PROP_WILDCARD_SUB_AVAILABLE: + case PROP_SUBSCRIPTION_ID_AVAILABLE: + case PROP_SHARED_SUB_AVAILABLE: + if(command != CONNACK){ + return MOSQ_ERR_PROTOCOL; + } + break; + + case PROP_WILL_DELAY_INTERVAL: + if(command != 0){ + return MOSQ_ERR_PROTOCOL; + } + break; + + case PROP_REQUEST_PROBLEM_INFO: + case PROP_REQUEST_RESPONSE_INFO: + if(command != CONNECT){ + return MOSQ_ERR_PROTOCOL; + } + break; + + case PROP_SERVER_REFERENCE: + if(command != CONNACK && command != DISCONNECT){ + return MOSQ_ERR_PROTOCOL; + } + break; + + case PROP_REASON_STRING: + if(command == CONNECT || command == PUBLISH || command == SUBSCRIBE || command == UNSUBSCRIBE){ + return MOSQ_ERR_PROTOCOL; + } + break; + + case PROP_RECEIVE_MAXIMUM: + case PROP_TOPIC_ALIAS_MAXIMUM: + case PROP_MAXIMUM_PACKET_SIZE: + if(command != CONNECT && command != CONNACK){ + return MOSQ_ERR_PROTOCOL; + } + break; + + case PROP_TOPIC_ALIAS: + if(command != PUBLISH){ + return MOSQ_ERR_PROTOCOL; + } + break; + + case PROP_USER_PROPERTY: + break; + + default: + return MOSQ_ERR_PROTOCOL; + } + + p = p->next; + } + return MOSQ_ERR_SUCCESS; +} + diff --git a/lib/property_mosq.h b/lib/property_mosq.h index 9e913f99..1253063a 100644 --- a/lib/property_mosq.h +++ b/lib/property_mosq.h @@ -39,7 +39,7 @@ struct mqtt5__property { }; -int property__read_all(struct mosquitto__packet *packet, struct mqtt5__property **property); +int property__read_all(int command, struct mosquitto__packet *packet, struct mqtt5__property **property); int property__write_all(struct mosquitto__packet *packet, struct mqtt5__property *property); void property__free(struct mqtt5__property **property); void property__free_all(struct mqtt5__property **property); diff --git a/src/handle_connect.c b/src/handle_connect.c index df4b3074..c0e42489 100644 --- a/src/handle_connect.c +++ b/src/handle_connect.c @@ -242,7 +242,7 @@ int handle__connect(struct mosquitto_db *db, struct mosquitto *context) } if(protocol_version == PROTOCOL_VERSION_v5){ - rc = property__read_all(&context->in_packet, &properties); + rc = property__read_all(CONNECT, &context->in_packet, &properties); if(rc) return rc; property__free_all(&properties); } @@ -302,7 +302,7 @@ int handle__connect(struct mosquitto_db *db, struct mosquitto *context) goto handle_connect_error; } if(protocol_version == PROTOCOL_VERSION_v5){ - rc = property__read_all(&context->in_packet, &will_struct->properties); + rc = property__read_all(CMD_WILL, &context->in_packet, &will_struct->properties); if(rc) return rc; property__free_all(&will_struct->properties); } diff --git a/src/handle_publish.c b/src/handle_publish.c index 0aa780b3..f5850a32 100644 --- a/src/handle_publish.c +++ b/src/handle_publish.c @@ -134,7 +134,7 @@ int handle__publish(struct mosquitto_db *db, struct mosquitto *context) } if(context->protocol == mosq_p_mqtt5){ - rc = property__read_all(&context->in_packet, &properties); + rc = property__read_all(PUBLISH, &context->in_packet, &properties); if(rc) return rc; } diff --git a/src/handle_subscribe.c b/src/handle_subscribe.c index 7585c225..a134bf55 100644 --- a/src/handle_subscribe.c +++ b/src/handle_subscribe.c @@ -21,6 +21,7 @@ Contributors: #include "mosquitto_broker_internal.h" #include "memory_mosq.h" +#include "mqtt_protocol.h" #include "packet_mosq.h" #include "property_mosq.h" @@ -52,7 +53,7 @@ int handle__subscribe(struct mosquitto_db *db, struct mosquitto *context) if(packet__read_uint16(&context->in_packet, &mid)) return 1; if(context->protocol == mosq_p_mqtt5){ - rc = property__read_all(&context->in_packet, &properties); + rc = property__read_all(SUBSCRIBE, &context->in_packet, &properties); if(rc) return rc; property__free_all(&properties); } diff --git a/test/unit/property_read.c b/test/unit/property_read.c index 97a8182c..86fb5ad6 100644 --- a/test/unit/property_read.c +++ b/test/unit/property_read.c @@ -6,6 +6,7 @@ #include "packet_mosq.h" static void byte_prop_read_helper( + int command, uint8_t *payload, int remaining_length, int rc_expected, @@ -19,7 +20,7 @@ static void byte_prop_read_helper( memset(&packet, 0, sizeof(struct mosquitto__packet)); packet.payload = payload; packet.remaining_length = remaining_length; - rc = property__read_all(&packet, &properties); + rc = property__read_all(command, &packet, &properties); CU_ASSERT_EQUAL(rc, rc_expected); CU_ASSERT_EQUAL(packet.pos, remaining_length); @@ -33,7 +34,7 @@ static void byte_prop_read_helper( CU_ASSERT_PTR_EQUAL(properties, NULL); } -static void duplicate_byte_helper(int identifier) +static void duplicate_byte_helper(int command, int identifier) { uint8_t payload[20]; @@ -44,10 +45,10 @@ static void duplicate_byte_helper(int identifier) payload[3] = identifier; payload[4] = 0; - byte_prop_read_helper(payload, 5, MOSQ_ERR_PROTOCOL, identifier, 1); + byte_prop_read_helper(command, payload, 5, MOSQ_ERR_PROTOCOL, identifier, 1); } -static void bad_byte_helper(int identifier) +static void bad_byte_helper(int command, int identifier) { uint8_t payload[20]; @@ -56,11 +57,12 @@ static void bad_byte_helper(int identifier) payload[1] = identifier; payload[2] = 2; /* 0, 1 are only valid values */ - byte_prop_read_helper(payload, 3, MOSQ_ERR_PROTOCOL, identifier, 0); + byte_prop_read_helper(command, payload, 3, MOSQ_ERR_PROTOCOL, identifier, 0); } static void int32_prop_read_helper( + int command, uint8_t *payload, int remaining_length, int rc_expected, @@ -74,7 +76,7 @@ static void int32_prop_read_helper( memset(&packet, 0, sizeof(struct mosquitto__packet)); packet.payload = payload; packet.remaining_length = remaining_length; - rc = property__read_all(&packet, &properties); + rc = property__read_all(command, &packet, &properties); CU_ASSERT_EQUAL(rc, rc_expected); CU_ASSERT_EQUAL(packet.pos, remaining_length); @@ -88,7 +90,7 @@ static void int32_prop_read_helper( CU_ASSERT_PTR_EQUAL(properties, NULL); } -static void duplicate_int32_helper(int identifier) +static void duplicate_int32_helper(int command, int identifier) { uint8_t payload[20]; @@ -105,11 +107,12 @@ static void duplicate_int32_helper(int identifier) payload[9] = 0; payload[10] = 0; - int32_prop_read_helper(payload, 11, MOSQ_ERR_PROTOCOL, identifier, 1); + int32_prop_read_helper(command, payload, 11, MOSQ_ERR_PROTOCOL, identifier, 1); } static void int16_prop_read_helper( + int command, uint8_t *payload, int remaining_length, int rc_expected, @@ -123,7 +126,7 @@ static void int16_prop_read_helper( memset(&packet, 0, sizeof(struct mosquitto__packet)); packet.payload = payload; packet.remaining_length = remaining_length; - rc = property__read_all(&packet, &properties); + rc = property__read_all(command, &packet, &properties); CU_ASSERT_EQUAL(rc, rc_expected); CU_ASSERT_EQUAL(packet.pos, remaining_length); @@ -137,7 +140,7 @@ static void int16_prop_read_helper( CU_ASSERT_PTR_EQUAL(properties, NULL); } -static void duplicate_int16_helper(int identifier) +static void duplicate_int16_helper(int command, int identifier) { uint8_t payload[20]; @@ -150,10 +153,11 @@ static void duplicate_int16_helper(int identifier) payload[5] = 0; payload[6] = 0; - int16_prop_read_helper(payload, 7, MOSQ_ERR_PROTOCOL, identifier, 1); + int16_prop_read_helper(command, payload, 7, MOSQ_ERR_PROTOCOL, identifier, 1); } static void string_prop_read_helper( + int command, uint8_t *payload, int remaining_length, int rc_expected, @@ -167,7 +171,7 @@ static void string_prop_read_helper( memset(&packet, 0, sizeof(struct mosquitto__packet)); packet.payload = payload; packet.remaining_length = remaining_length; - rc = property__read_all(&packet, &properties); + rc = property__read_all(command, &packet, &properties); CU_ASSERT_EQUAL(rc, rc_expected); CU_ASSERT_EQUAL(packet.pos, remaining_length); @@ -197,7 +201,7 @@ static void duplicate_string_helper(int identifier) payload[7] = 1; payload[8] = 'h'; - string_prop_read_helper(payload, 9, MOSQ_ERR_PROTOCOL, identifier, ""); + string_prop_read_helper(PUBLISH, payload, 9, MOSQ_ERR_PROTOCOL, identifier, ""); } static void bad_string_helper(int identifier) @@ -213,10 +217,11 @@ static void bad_string_helper(int identifier) payload[5] = 0; /* 0 in string not allowed */ payload[6] = 'h'; - string_prop_read_helper(payload, 7, MOSQ_ERR_MALFORMED_UTF8, identifier, ""); + string_prop_read_helper(PUBLISH, payload, 7, MOSQ_ERR_MALFORMED_UTF8, identifier, ""); } static void binary_prop_read_helper( + int command, uint8_t *payload, int remaining_length, int rc_expected, @@ -231,7 +236,7 @@ static void binary_prop_read_helper( memset(&packet, 0, sizeof(struct mosquitto__packet)); packet.payload = payload; packet.remaining_length = remaining_length; - rc = property__read_all(&packet, &properties); + rc = property__read_all(command, &packet, &properties); CU_ASSERT_EQUAL(rc, rc_expected); CU_ASSERT_EQUAL(packet.pos, remaining_length); @@ -246,7 +251,7 @@ static void binary_prop_read_helper( CU_ASSERT_PTR_EQUAL(properties, NULL); } -static void duplicate_binary_helper(int identifier) +static void duplicate_binary_helper(int command, int identifier) { uint8_t payload[20]; @@ -261,7 +266,7 @@ static void duplicate_binary_helper(int identifier) payload[7] = 1; payload[8] = 'h'; - string_prop_read_helper(payload, 9, MOSQ_ERR_PROTOCOL, identifier, ""); + string_prop_read_helper(command, payload, 9, MOSQ_ERR_PROTOCOL, identifier, ""); } static void string_pair_prop_read_helper( @@ -280,7 +285,7 @@ static void string_pair_prop_read_helper( memset(&packet, 0, sizeof(struct mosquitto__packet)); packet.payload = payload; packet.remaining_length = remaining_length; - rc = property__read_all(&packet, &properties); + rc = property__read_all(CONNECT, &packet, &properties); CU_ASSERT_EQUAL(rc, rc_expected); CU_ASSERT_EQUAL(packet.pos, remaining_length); @@ -315,30 +320,20 @@ static void varint_prop_read_helper( memset(&packet, 0, sizeof(struct mosquitto__packet)); packet.payload = payload; packet.remaining_length = remaining_length; - rc = property__read_all(&packet, &properties); + rc = property__read_all(PUBLISH, &packet, &properties); CU_ASSERT_EQUAL(rc, rc_expected); if(properties){ CU_ASSERT_EQUAL(properties->identifier, identifier); CU_ASSERT_EQUAL(properties->value.varint, value_expected); CU_ASSERT_PTR_NULL(properties->next); - if(value_expected < 128){ - CU_ASSERT_EQUAL(property__get_length_all(properties), 2); - }else if(value_expected < 16384){ - CU_ASSERT_EQUAL(property__get_length_all(properties), 3); - }else if(value_expected < 2097152){ - CU_ASSERT_EQUAL(property__get_length_all(properties), 4); - }else if(value_expected < 268435456){ - CU_ASSERT_EQUAL(property__get_length_all(properties), 5); - }else{ - CU_FAIL("Incorrect varint value."); - } + CU_ASSERT_EQUAL(property__get_length_all(properties), packet__varint_bytes(value_expected)+1); property__free_all(&properties); } CU_ASSERT_PTR_NULL(properties); } -static void packet_helper_reason_string_user_property(void) +static void packet_helper_reason_string_user_property(int command) { uint8_t payload[24] = {23, PROP_REASON_STRING, 0, 6, 'r', 'e', 'a', 's', 'o', 'n', @@ -351,26 +346,29 @@ static void packet_helper_reason_string_user_property(void) memset(&packet, 0, sizeof(struct mosquitto__packet)); packet.payload = payload; packet.remaining_length = sizeof(payload);; - rc = property__read_all(&packet, &properties); + rc = property__read_all(command, &packet, &properties); CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS); - CU_ASSERT_PTR_NOT_NULL(properties->next); - p = properties; + CU_ASSERT_PTR_NOT_NULL(properties); + if(properties){ + CU_ASSERT_PTR_NOT_NULL(properties->next); + p = properties; - CU_ASSERT_EQUAL(p->identifier, PROP_REASON_STRING); - CU_ASSERT_STRING_EQUAL(p->value.s.v, "reason"); - CU_ASSERT_EQUAL(p->value.s.len, strlen("reason")); + CU_ASSERT_EQUAL(p->identifier, PROP_REASON_STRING); + CU_ASSERT_STRING_EQUAL(p->value.s.v, "reason"); + CU_ASSERT_EQUAL(p->value.s.len, strlen("reason")); - p = p->next; - CU_ASSERT_PTR_NULL(p->next); + p = p->next; + CU_ASSERT_PTR_NULL(p->next); - CU_ASSERT_EQUAL(p->identifier, PROP_USER_PROPERTY); - CU_ASSERT_STRING_EQUAL(p->value.s.v, "value"); - CU_ASSERT_EQUAL(p->value.s.len, strlen("value")); - CU_ASSERT_STRING_EQUAL(p->name.v, "name"); - CU_ASSERT_EQUAL(p->name.len, strlen("name")); + CU_ASSERT_EQUAL(p->identifier, PROP_USER_PROPERTY); + CU_ASSERT_STRING_EQUAL(p->value.s.v, "value"); + CU_ASSERT_EQUAL(p->value.s.len, strlen("value")); + CU_ASSERT_STRING_EQUAL(p->name.v, "name"); + CU_ASSERT_EQUAL(p->name.len, strlen("name")); - property__free_all(&properties); + property__free_all(&properties); + } } /* ======================================================================== @@ -388,7 +386,7 @@ static void TEST_no_properties(void) memset(payload, 0, sizeof(payload)); packet.payload = payload; packet.remaining_length = 1; - rc = property__read_all(&packet, &properties); + rc = property__read_all(CONNECT, &packet, &properties); CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS); CU_ASSERT_PTR_EQUAL(properties, NULL); CU_ASSERT_EQUAL(packet.pos, 1); @@ -406,7 +404,7 @@ static void TEST_truncated(void) memset(payload, 0, sizeof(payload)); packet.payload = payload; packet.remaining_length = 0; - rc = property__read_all(&packet, &properties); + rc = property__read_all(CONNECT, &packet, &properties); CU_ASSERT_EQUAL(rc, MOSQ_ERR_PROTOCOL); CU_ASSERT_PTR_EQUAL(properties, NULL); CU_ASSERT_EQUAL(packet.pos, 0); @@ -417,7 +415,7 @@ static void TEST_truncated(void) payload[0] = 2; packet.payload = payload; packet.remaining_length = 1; - rc = property__read_all(&packet, &properties); + rc = property__read_all(CONNECT, &packet, &properties); CU_ASSERT_EQUAL(rc, MOSQ_ERR_PROTOCOL); CU_ASSERT_PTR_EQUAL(properties, NULL); CU_ASSERT_EQUAL(packet.pos, 1); @@ -429,7 +427,7 @@ static void TEST_truncated(void) payload[1] = PROP_PAYLOAD_FORMAT_INDICATOR; packet.payload = payload; packet.remaining_length = 2; - rc = property__read_all(&packet, &properties); + rc = property__read_all(CONNECT, &packet, &properties); CU_ASSERT_EQUAL(rc, MOSQ_ERR_PROTOCOL); CU_ASSERT_PTR_EQUAL(properties, NULL); CU_ASSERT_EQUAL(packet.pos, 2); @@ -452,7 +450,7 @@ static void TEST_invalid_property_id(void) payload[0] = 4; packet.payload = payload; packet.remaining_length = 2; - rc = property__read_all(&packet, &properties); + rc = property__read_all(CONNECT, &packet, &properties); CU_ASSERT_EQUAL(rc, MOSQ_ERR_MALFORMED_PACKET); CU_ASSERT_PTR_EQUAL(properties, NULL); CU_ASSERT_EQUAL(packet.pos, 2); @@ -464,7 +462,7 @@ static void TEST_invalid_property_id(void) payload[1] = 4; packet.payload = payload; packet.remaining_length = 2; - rc = property__read_all(&packet, &properties); + rc = property__read_all(CONNECT, &packet, &properties); CU_ASSERT_EQUAL(rc, MOSQ_ERR_MALFORMED_PACKET); CU_ASSERT_PTR_EQUAL(properties, NULL); CU_ASSERT_EQUAL(packet.pos, 2); @@ -483,7 +481,7 @@ static void TEST_single_payload_format_indicator(void) payload[1] = PROP_PAYLOAD_FORMAT_INDICATOR; payload[2] = 1; - byte_prop_read_helper(payload, 3, MOSQ_ERR_SUCCESS, PROP_PAYLOAD_FORMAT_INDICATOR, 1); + byte_prop_read_helper(PUBLISH, payload, 3, MOSQ_ERR_SUCCESS, PROP_PAYLOAD_FORMAT_INDICATOR, 1); } static void TEST_single_request_problem_information(void) @@ -495,7 +493,7 @@ static void TEST_single_request_problem_information(void) payload[1] = PROP_REQUEST_PROBLEM_INFO; payload[2] = 1; - byte_prop_read_helper(payload, 3, MOSQ_ERR_SUCCESS, PROP_REQUEST_PROBLEM_INFO, 1); + byte_prop_read_helper(CONNECT, payload, 3, MOSQ_ERR_SUCCESS, PROP_REQUEST_PROBLEM_INFO, 1); } static void TEST_single_request_response_information(void) @@ -507,7 +505,7 @@ static void TEST_single_request_response_information(void) payload[1] = PROP_REQUEST_RESPONSE_INFO; payload[2] = 1; - byte_prop_read_helper(payload, 3, MOSQ_ERR_SUCCESS, PROP_REQUEST_RESPONSE_INFO, 1); + byte_prop_read_helper(CONNECT, payload, 3, MOSQ_ERR_SUCCESS, PROP_REQUEST_RESPONSE_INFO, 1); } static void TEST_single_maximum_qos(void) @@ -519,7 +517,7 @@ static void TEST_single_maximum_qos(void) payload[1] = PROP_MAXIMUM_QOS; payload[2] = 1; - byte_prop_read_helper(payload, 3, MOSQ_ERR_SUCCESS, PROP_MAXIMUM_QOS, 1); + byte_prop_read_helper(CONNACK, payload, 3, MOSQ_ERR_SUCCESS, PROP_MAXIMUM_QOS, 1); } static void TEST_single_retain_available(void) @@ -531,7 +529,7 @@ static void TEST_single_retain_available(void) payload[1] = PROP_RETAIN_AVAILABLE; payload[2] = 1; - byte_prop_read_helper(payload, 3, MOSQ_ERR_SUCCESS, PROP_RETAIN_AVAILABLE, 1); + byte_prop_read_helper(CONNACK, payload, 3, MOSQ_ERR_SUCCESS, PROP_RETAIN_AVAILABLE, 1); } static void TEST_single_wildcard_subscription_available(void) @@ -543,7 +541,7 @@ static void TEST_single_wildcard_subscription_available(void) payload[1] = PROP_WILDCARD_SUB_AVAILABLE; payload[2] = 0; - byte_prop_read_helper(payload, 3, MOSQ_ERR_SUCCESS, PROP_WILDCARD_SUB_AVAILABLE, 0); + byte_prop_read_helper(CONNACK, payload, 3, MOSQ_ERR_SUCCESS, PROP_WILDCARD_SUB_AVAILABLE, 0); } static void TEST_single_subscription_identifier_available(void) @@ -555,7 +553,7 @@ static void TEST_single_subscription_identifier_available(void) payload[1] = PROP_SUBSCRIPTION_ID_AVAILABLE; payload[2] = 0; - byte_prop_read_helper(payload, 3, MOSQ_ERR_SUCCESS, PROP_SUBSCRIPTION_ID_AVAILABLE, 0); + byte_prop_read_helper(CONNACK, payload, 3, MOSQ_ERR_SUCCESS, PROP_SUBSCRIPTION_ID_AVAILABLE, 0); } static void TEST_single_shared_subscription_available(void) @@ -567,7 +565,7 @@ static void TEST_single_shared_subscription_available(void) payload[1] = PROP_SHARED_SUB_AVAILABLE; payload[2] = 1; - byte_prop_read_helper(payload, 3, MOSQ_ERR_SUCCESS, PROP_SHARED_SUB_AVAILABLE, 1); + byte_prop_read_helper(CONNACK, payload, 3, MOSQ_ERR_SUCCESS, PROP_SHARED_SUB_AVAILABLE, 1); } static void TEST_single_message_expiry_interval(void) @@ -582,7 +580,7 @@ static void TEST_single_message_expiry_interval(void) payload[4] = 0x34; payload[5] = 0x45; - int32_prop_read_helper(payload, 6, MOSQ_ERR_SUCCESS, PROP_MESSAGE_EXPIRY_INTERVAL, 0x12233445); + int32_prop_read_helper(CMD_WILL, payload, 6, MOSQ_ERR_SUCCESS, PROP_MESSAGE_EXPIRY_INTERVAL, 0x12233445); } static void TEST_single_session_expiry_interval(void) @@ -597,7 +595,7 @@ static void TEST_single_session_expiry_interval(void) payload[4] = 0x23; payload[5] = 0x12; - int32_prop_read_helper(payload, 6, MOSQ_ERR_SUCCESS, PROP_SESSION_EXPIRY_INTERVAL, 0x45342312); + int32_prop_read_helper(CONNACK, payload, 6, MOSQ_ERR_SUCCESS, PROP_SESSION_EXPIRY_INTERVAL, 0x45342312); } static void TEST_single_will_delay_interval(void) @@ -612,7 +610,7 @@ static void TEST_single_will_delay_interval(void) payload[4] = 0x23; payload[5] = 0x12; - int32_prop_read_helper(payload, 6, MOSQ_ERR_SUCCESS, PROP_WILL_DELAY_INTERVAL, 0x45342312); + int32_prop_read_helper(CMD_WILL, payload, 6, MOSQ_ERR_SUCCESS, PROP_WILL_DELAY_INTERVAL, 0x45342312); } static void TEST_single_maximum_packet_size(void) @@ -627,7 +625,7 @@ static void TEST_single_maximum_packet_size(void) payload[4] = 0x23; payload[5] = 0x12; - int32_prop_read_helper(payload, 6, MOSQ_ERR_SUCCESS, PROP_MAXIMUM_PACKET_SIZE, 0x45342312); + int32_prop_read_helper(CONNECT, payload, 6, MOSQ_ERR_SUCCESS, PROP_MAXIMUM_PACKET_SIZE, 0x45342312); } static void TEST_single_server_keep_alive(void) @@ -640,7 +638,7 @@ static void TEST_single_server_keep_alive(void) payload[2] = 0x45; payload[3] = 0x34; - int16_prop_read_helper(payload, 4, MOSQ_ERR_SUCCESS, PROP_SERVER_KEEP_ALIVE, 0x4534); + int16_prop_read_helper(CONNACK, payload, 4, MOSQ_ERR_SUCCESS, PROP_SERVER_KEEP_ALIVE, 0x4534); } static void TEST_single_receive_maximum(void) @@ -653,7 +651,7 @@ static void TEST_single_receive_maximum(void) payload[2] = 0x68; payload[3] = 0x42; - int16_prop_read_helper(payload, 4, MOSQ_ERR_SUCCESS, PROP_RECEIVE_MAXIMUM, 0x6842); + int16_prop_read_helper(CONNACK, payload, 4, MOSQ_ERR_SUCCESS, PROP_RECEIVE_MAXIMUM, 0x6842); } static void TEST_single_topic_alias_maximum(void) @@ -666,7 +664,7 @@ static void TEST_single_topic_alias_maximum(void) payload[2] = 0x68; payload[3] = 0x42; - int16_prop_read_helper(payload, 4, MOSQ_ERR_SUCCESS, PROP_TOPIC_ALIAS_MAXIMUM, 0x6842); + int16_prop_read_helper(CONNECT, payload, 4, MOSQ_ERR_SUCCESS, PROP_TOPIC_ALIAS_MAXIMUM, 0x6842); } static void TEST_single_topic_alias(void) @@ -679,7 +677,7 @@ static void TEST_single_topic_alias(void) payload[2] = 0x68; payload[3] = 0x42; - int16_prop_read_helper(payload, 4, MOSQ_ERR_SUCCESS, PROP_TOPIC_ALIAS, 0x6842); + int16_prop_read_helper(PUBLISH, payload, 4, MOSQ_ERR_SUCCESS, PROP_TOPIC_ALIAS, 0x6842); } static void TEST_single_content_type(void) @@ -697,7 +695,7 @@ static void TEST_single_content_type(void) payload[7] = 'l'; payload[8] = 'o'; - string_prop_read_helper(payload, 9, MOSQ_ERR_SUCCESS, PROP_CONTENT_TYPE, "hello"); + string_prop_read_helper(PUBLISH, payload, 9, MOSQ_ERR_SUCCESS, PROP_CONTENT_TYPE, "hello"); } static void TEST_single_response_topic(void) @@ -715,7 +713,7 @@ static void TEST_single_response_topic(void) payload[7] = 'l'; payload[8] = 'o'; - string_prop_read_helper(payload, 9, MOSQ_ERR_SUCCESS, PROP_RESPONSE_TOPIC, "hello"); + string_prop_read_helper(CMD_WILL, payload, 9, MOSQ_ERR_SUCCESS, PROP_RESPONSE_TOPIC, "hello"); } static void TEST_single_assigned_client_identifier(void) @@ -733,7 +731,7 @@ static void TEST_single_assigned_client_identifier(void) payload[7] = 'l'; payload[8] = 'o'; - string_prop_read_helper(payload, 9, MOSQ_ERR_SUCCESS, PROP_ASSIGNED_CLIENT_IDENTIFIER, "hello"); + string_prop_read_helper(CONNACK, payload, 9, MOSQ_ERR_SUCCESS, PROP_ASSIGNED_CLIENT_IDENTIFIER, "hello"); } static void TEST_single_authentication_method(void) @@ -751,7 +749,7 @@ static void TEST_single_authentication_method(void) payload[7] = 'l'; payload[8] = 'o'; - string_prop_read_helper(payload, 9, MOSQ_ERR_SUCCESS, PROP_AUTHENTICATION_METHOD, "hello"); + string_prop_read_helper(AUTH, payload, 9, MOSQ_ERR_SUCCESS, PROP_AUTHENTICATION_METHOD, "hello"); } static void TEST_single_response_information(void) @@ -769,7 +767,7 @@ static void TEST_single_response_information(void) payload[7] = 'l'; payload[8] = 'o'; - string_prop_read_helper(payload, 9, MOSQ_ERR_SUCCESS, PROP_RESPONSE_INFO, "hello"); + string_prop_read_helper(CONNACK, payload, 9, MOSQ_ERR_SUCCESS, PROP_RESPONSE_INFO, "hello"); } static void TEST_single_server_reference(void) @@ -787,7 +785,7 @@ static void TEST_single_server_reference(void) payload[7] = 'l'; payload[8] = 'o'; - string_prop_read_helper(payload, 9, MOSQ_ERR_SUCCESS, PROP_SERVER_REFERENCE, "hello"); + string_prop_read_helper(CONNACK, payload, 9, MOSQ_ERR_SUCCESS, PROP_SERVER_REFERENCE, "hello"); } static void TEST_single_reason_string(void) @@ -805,7 +803,7 @@ static void TEST_single_reason_string(void) payload[7] = 'l'; payload[8] = 'o'; - string_prop_read_helper(payload, 9, MOSQ_ERR_SUCCESS, PROP_REASON_STRING, "hello"); + string_prop_read_helper(PUBCOMP, payload, 9, MOSQ_ERR_SUCCESS, PROP_REASON_STRING, "hello"); } static void TEST_single_correlation_data(void) @@ -823,7 +821,7 @@ static void TEST_single_correlation_data(void) payload[7] = 'l'; payload[8] = 9; - binary_prop_read_helper(payload, 9, MOSQ_ERR_SUCCESS, PROP_CORRELATION_DATA, &payload[4], 5); + binary_prop_read_helper(PUBLISH, payload, 9, MOSQ_ERR_SUCCESS, PROP_CORRELATION_DATA, &payload[4], 5); } static void TEST_single_authentication_data(void) @@ -841,7 +839,7 @@ static void TEST_single_authentication_data(void) payload[7] = 'l'; payload[8] = 9; - binary_prop_read_helper(payload, 9, MOSQ_ERR_SUCCESS, PROP_AUTHENTICATION_DATA, &payload[4], 5); + binary_prop_read_helper(CONNECT, payload, 9, MOSQ_ERR_SUCCESS, PROP_AUTHENTICATION_DATA, &payload[4], 5); } static void TEST_single_user_property(void) @@ -926,82 +924,82 @@ static void TEST_single_subscription_identifier(void) static void TEST_duplicate_payload_format_indicator(void) { - duplicate_byte_helper(PROP_PAYLOAD_FORMAT_INDICATOR); + duplicate_byte_helper(PUBLISH, PROP_PAYLOAD_FORMAT_INDICATOR); } static void TEST_duplicate_request_problem_information(void) { - duplicate_byte_helper(PROP_REQUEST_PROBLEM_INFO); + duplicate_byte_helper(CONNECT, PROP_REQUEST_PROBLEM_INFO); } static void TEST_duplicate_request_response_information(void) { - duplicate_byte_helper(PROP_REQUEST_RESPONSE_INFO); + duplicate_byte_helper(CONNECT, PROP_REQUEST_RESPONSE_INFO); } static void TEST_duplicate_maximum_qos(void) { - duplicate_byte_helper(PROP_MAXIMUM_QOS); + duplicate_byte_helper(CONNACK, PROP_MAXIMUM_QOS); } static void TEST_duplicate_retain_available(void) { - duplicate_byte_helper(PROP_RETAIN_AVAILABLE); + duplicate_byte_helper(CONNACK, PROP_RETAIN_AVAILABLE); } static void TEST_duplicate_wildcard_subscription_available(void) { - duplicate_byte_helper(PROP_WILDCARD_SUB_AVAILABLE); + duplicate_byte_helper(CONNACK, PROP_WILDCARD_SUB_AVAILABLE); } static void TEST_duplicate_subscription_identifier_available(void) { - duplicate_byte_helper(PROP_SUBSCRIPTION_ID_AVAILABLE); + duplicate_byte_helper(CONNACK, PROP_SUBSCRIPTION_ID_AVAILABLE); } static void TEST_duplicate_shared_subscription_available(void) { - duplicate_byte_helper(PROP_SHARED_SUB_AVAILABLE); + duplicate_byte_helper(CONNACK, PROP_SHARED_SUB_AVAILABLE); } static void TEST_duplicate_message_expiry_interval(void) { - duplicate_int32_helper(PROP_MESSAGE_EXPIRY_INTERVAL); + duplicate_int32_helper(PUBLISH, PROP_MESSAGE_EXPIRY_INTERVAL); } static void TEST_duplicate_session_expiry_interval(void) { - duplicate_int32_helper(PROP_SESSION_EXPIRY_INTERVAL); + duplicate_int32_helper(DISCONNECT, PROP_SESSION_EXPIRY_INTERVAL); } static void TEST_duplicate_will_delay_interval(void) { - duplicate_int32_helper(PROP_WILL_DELAY_INTERVAL); + duplicate_int32_helper(CMD_WILL, PROP_WILL_DELAY_INTERVAL); } static void TEST_duplicate_maximum_packet_size(void) { - duplicate_int32_helper(PROP_MAXIMUM_PACKET_SIZE); + duplicate_int32_helper(CONNECT, PROP_MAXIMUM_PACKET_SIZE); } static void TEST_duplicate_server_keep_alive(void) { - duplicate_int16_helper(PROP_SERVER_KEEP_ALIVE); + duplicate_int16_helper(CONNACK, PROP_SERVER_KEEP_ALIVE); } static void TEST_duplicate_receive_maximum(void) { - duplicate_int16_helper(PROP_RECEIVE_MAXIMUM); + duplicate_int16_helper(CONNACK, PROP_RECEIVE_MAXIMUM); } static void TEST_duplicate_topic_alias_maximum(void) { - duplicate_int16_helper(PROP_TOPIC_ALIAS_MAXIMUM); + duplicate_int16_helper(CONNECT, PROP_TOPIC_ALIAS_MAXIMUM); } static void TEST_duplicate_topic_alias(void) { - duplicate_int16_helper(PROP_TOPIC_ALIAS); + duplicate_int16_helper(PUBLISH, PROP_TOPIC_ALIAS); } static void TEST_duplicate_content_type(void) @@ -1041,12 +1039,12 @@ static void TEST_duplicate_reason_string(void) static void TEST_duplicate_correlation_data(void) { - duplicate_binary_helper(PROP_CORRELATION_DATA); + duplicate_binary_helper(PUBLISH, PROP_CORRELATION_DATA); } static void TEST_duplicate_authentication_data(void) { - duplicate_binary_helper(PROP_AUTHENTICATION_DATA); + duplicate_binary_helper(CONNACK, PROP_AUTHENTICATION_DATA); } static void TEST_duplicate_user_property(void) @@ -1098,37 +1096,37 @@ static void TEST_duplicate_subscription_identifier(void) static void TEST_bad_request_problem_information(void) { - bad_byte_helper(PROP_REQUEST_PROBLEM_INFO); + bad_byte_helper(CONNECT, PROP_REQUEST_PROBLEM_INFO); } static void TEST_bad_request_response_information(void) { - bad_byte_helper(PROP_REQUEST_RESPONSE_INFO); + bad_byte_helper(CONNECT, PROP_REQUEST_RESPONSE_INFO); } static void TEST_bad_maximum_qos(void) { - bad_byte_helper(PROP_MAXIMUM_QOS); + bad_byte_helper(CONNACK, PROP_MAXIMUM_QOS); } static void TEST_bad_retain_available(void) { - bad_byte_helper(PROP_RETAIN_AVAILABLE); + bad_byte_helper(CONNACK, PROP_RETAIN_AVAILABLE); } static void TEST_bad_wildcard_sub_available(void) { - bad_byte_helper(PROP_WILDCARD_SUB_AVAILABLE); + bad_byte_helper(CONNACK, PROP_WILDCARD_SUB_AVAILABLE); } static void TEST_bad_subscription_id_available(void) { - bad_byte_helper(PROP_SUBSCRIPTION_ID_AVAILABLE); + bad_byte_helper(CONNACK, PROP_SUBSCRIPTION_ID_AVAILABLE); } static void TEST_bad_shared_sub_available(void) { - bad_byte_helper(PROP_SHARED_SUB_AVAILABLE); + bad_byte_helper(CONNACK, PROP_SHARED_SUB_AVAILABLE); } static void TEST_bad_maximum_packet_size(void) @@ -1143,7 +1141,7 @@ static void TEST_bad_maximum_packet_size(void) payload[4] = 0; payload[5] = 0; /* 0 is invalid */ - int32_prop_read_helper(payload, 6, MOSQ_ERR_PROTOCOL, PROP_MAXIMUM_PACKET_SIZE, 0); + int32_prop_read_helper(CONNACK, payload, 6, MOSQ_ERR_PROTOCOL, PROP_MAXIMUM_PACKET_SIZE, 0); } static void TEST_bad_receive_maximum(void) @@ -1156,7 +1154,7 @@ static void TEST_bad_receive_maximum(void) payload[2] = 0; payload[3] = 0; /* 0 is invalid */ - int32_prop_read_helper(payload, 4, MOSQ_ERR_PROTOCOL, PROP_RECEIVE_MAXIMUM, 0); + int32_prop_read_helper(CONNECT, payload, 4, MOSQ_ERR_PROTOCOL, PROP_RECEIVE_MAXIMUM, 0); } static void TEST_bad_topic_alias(void) @@ -1169,7 +1167,7 @@ static void TEST_bad_topic_alias(void) payload[2] = 0; payload[3] = 0; /* 0 is invalid */ - int32_prop_read_helper(payload, 4, MOSQ_ERR_PROTOCOL, PROP_TOPIC_ALIAS, 0); + int32_prop_read_helper(PUBLISH, payload, 4, MOSQ_ERR_PROTOCOL, PROP_TOPIC_ALIAS, 0); } static void TEST_bad_content_type(void) @@ -1219,7 +1217,7 @@ static void TEST_packet_connect(void) memset(&packet, 0, sizeof(struct mosquitto__packet)); packet.payload = payload; packet.remaining_length = sizeof(payload);; - rc = property__read_all(&packet, &properties); + rc = property__read_all(CONNECT, &packet, &properties); CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS); CU_ASSERT_PTR_NOT_NULL(properties->next); @@ -1308,7 +1306,7 @@ static void TEST_packet_connack(void) memset(&packet, 0, sizeof(struct mosquitto__packet)); packet.payload = payload; packet.remaining_length = sizeof(payload);; - rc = property__read_all(&packet, &properties); + rc = property__read_all(CONNACK, &packet, &properties); CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS); CU_ASSERT_PTR_NOT_NULL(properties->next); @@ -1432,7 +1430,7 @@ static void TEST_packet_publish(void) memset(&packet, 0, sizeof(struct mosquitto__packet)); packet.payload = payload; packet.remaining_length = sizeof(payload);; - rc = property__read_all(&packet, &properties); + rc = property__read_all(PUBLISH, &packet, &properties); CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS); CU_ASSERT_PTR_NOT_NULL(properties->next); @@ -1489,22 +1487,22 @@ static void TEST_packet_publish(void) static void TEST_packet_puback(void) { - packet_helper_reason_string_user_property(); + packet_helper_reason_string_user_property(PUBACK); } static void TEST_packet_pubrec(void) { - packet_helper_reason_string_user_property(); + packet_helper_reason_string_user_property(PUBREC); } static void TEST_packet_pubrel(void) { - packet_helper_reason_string_user_property(); + packet_helper_reason_string_user_property(PUBREL); } static void TEST_packet_pubcomp(void) { - packet_helper_reason_string_user_property(); + packet_helper_reason_string_user_property(PUBCOMP); } static void TEST_packet_subscribe(void) @@ -1522,7 +1520,7 @@ static void TEST_packet_subscribe(void) memset(&packet, 0, sizeof(struct mosquitto__packet)); packet.payload = payload; packet.remaining_length = sizeof(payload);; - rc = property__read_all(&packet, &properties); + rc = property__read_all(SUBSCRIBE, &packet, &properties); CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS); CU_ASSERT_PTR_NOT_NULL(properties->next); @@ -1545,7 +1543,7 @@ static void TEST_packet_subscribe(void) static void TEST_packet_suback(void) { - packet_helper_reason_string_user_property(); + packet_helper_reason_string_user_property(SUBACK); } static void TEST_packet_unsubscribe(void) @@ -1562,7 +1560,7 @@ static void TEST_packet_unsubscribe(void) memset(&packet, 0, sizeof(struct mosquitto__packet)); packet.payload = payload; packet.remaining_length = sizeof(payload);; - rc = property__read_all(&packet, &properties); + rc = property__read_all(UNSUBSCRIBE, &packet, &properties); CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS); p = properties; @@ -1579,7 +1577,7 @@ static void TEST_packet_unsubscribe(void) static void TEST_packet_unsuback(void) { - packet_helper_reason_string_user_property(); + packet_helper_reason_string_user_property(UNSUBACK); } static void TEST_packet_disconnect(void) @@ -1598,7 +1596,7 @@ static void TEST_packet_disconnect(void) memset(&packet, 0, sizeof(struct mosquitto__packet)); packet.payload = payload; packet.remaining_length = sizeof(payload);; - rc = property__read_all(&packet, &properties); + rc = property__read_all(DISCONNECT, &packet, &properties); CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS); CU_ASSERT_PTR_NOT_NULL(properties->next); @@ -1642,7 +1640,7 @@ static void TEST_packet_auth(void) memset(&packet, 0, sizeof(struct mosquitto__packet)); packet.payload = payload; packet.remaining_length = sizeof(payload);; - rc = property__read_all(&packet, &properties); + rc = property__read_all(AUTH, &packet, &properties); CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS); CU_ASSERT_PTR_NOT_NULL(properties->next); diff --git a/test/unit/property_write.c b/test/unit/property_write.c index dae52829..5eb9caee 100644 --- a/test/unit/property_write.c +++ b/test/unit/property_write.c @@ -6,6 +6,7 @@ #include "packet_mosq.h" static void byte_prop_write_helper( + int command, int remaining_length, int rc_expected, int identifier, @@ -29,7 +30,7 @@ static void byte_prop_write_helper( property__write_all(&packet, &property); packet.pos = 0; - rc = property__read_all(&packet, &properties); + rc = property__read_all(command, &packet, &properties); CU_ASSERT_EQUAL(rc, rc_expected); CU_ASSERT_EQUAL(packet.pos, remaining_length); @@ -45,6 +46,7 @@ static void byte_prop_write_helper( static void int32_prop_write_helper( + int command, int remaining_length, int rc_expected, int identifier, @@ -68,7 +70,7 @@ static void int32_prop_write_helper( property__write_all(&packet, &property); packet.pos = 0; - rc = property__read_all(&packet, &properties); + rc = property__read_all(command, &packet, &properties); CU_ASSERT_EQUAL(rc, rc_expected); CU_ASSERT_EQUAL(packet.pos, remaining_length); @@ -84,6 +86,7 @@ static void int32_prop_write_helper( static void int16_prop_write_helper( + int command, int remaining_length, int rc_expected, int identifier, @@ -107,7 +110,7 @@ static void int16_prop_write_helper( property__write_all(&packet, &property); packet.pos = 0; - rc = property__read_all(&packet, &properties); + rc = property__read_all(command, &packet, &properties); CU_ASSERT_EQUAL(rc, rc_expected); CU_ASSERT_EQUAL(packet.pos, remaining_length); @@ -122,6 +125,7 @@ static void int16_prop_write_helper( } static void string_prop_write_helper( + int command, int remaining_length, int rc_expected, int identifier, @@ -146,7 +150,7 @@ static void string_prop_write_helper( property__write_all(&packet, &property); packet.pos = 0; - rc = property__read_all(&packet, &properties); + rc = property__read_all(command, &packet, &properties); CU_ASSERT_EQUAL(rc, rc_expected); CU_ASSERT_EQUAL(packet.pos, remaining_length); @@ -164,6 +168,7 @@ static void string_prop_write_helper( static void binary_prop_write_helper( + int command, int remaining_length, int rc_expected, int identifier, @@ -190,7 +195,7 @@ static void binary_prop_write_helper( property__write_all(&packet, &property); packet.pos = 0; - rc = property__read_all(&packet, &properties); + rc = property__read_all(command, &packet, &properties); CU_ASSERT_EQUAL(rc, rc_expected); CU_ASSERT_EQUAL(packet.pos, remaining_length); @@ -235,7 +240,7 @@ static void string_pair_prop_write_helper( property__write_all(&packet, &property); packet.pos = 0; - rc = property__read_all(&packet, &properties); + rc = property__read_all(CONNECT, &packet, &properties); CU_ASSERT_EQUAL(rc, rc_expected); CU_ASSERT_EQUAL(packet.pos, remaining_length); @@ -282,7 +287,7 @@ static void varint_prop_write_helper( property__write_all(&packet, &property); packet.pos = 0; - rc = property__read_all(&packet, &properties); + rc = property__read_all(PUBLISH, &packet, &properties); CU_ASSERT_EQUAL(rc, rc_expected); if(properties){ @@ -333,131 +338,131 @@ static void TEST_bad_identifier(void) static void TEST_single_payload_format_indicator(void) { - byte_prop_write_helper(3, MOSQ_ERR_SUCCESS, PROP_PAYLOAD_FORMAT_INDICATOR, 1); + byte_prop_write_helper(PUBLISH, 3, MOSQ_ERR_SUCCESS, PROP_PAYLOAD_FORMAT_INDICATOR, 1); } static void TEST_single_request_problem_information(void) { - byte_prop_write_helper(3, MOSQ_ERR_SUCCESS, PROP_REQUEST_PROBLEM_INFO, 1); + byte_prop_write_helper(CONNECT, 3, MOSQ_ERR_SUCCESS, PROP_REQUEST_PROBLEM_INFO, 1); } static void TEST_single_request_response_information(void) { - byte_prop_write_helper(3, MOSQ_ERR_SUCCESS, PROP_REQUEST_RESPONSE_INFO, 1); + byte_prop_write_helper(CONNECT, 3, MOSQ_ERR_SUCCESS, PROP_REQUEST_RESPONSE_INFO, 1); } static void TEST_single_maximum_qos(void) { - byte_prop_write_helper(3, MOSQ_ERR_SUCCESS, PROP_MAXIMUM_QOS, 1); + byte_prop_write_helper(CONNACK, 3, MOSQ_ERR_SUCCESS, PROP_MAXIMUM_QOS, 1); } static void TEST_single_retain_available(void) { - byte_prop_write_helper(3, MOSQ_ERR_SUCCESS, PROP_RETAIN_AVAILABLE, 1); + byte_prop_write_helper(CONNACK, 3, MOSQ_ERR_SUCCESS, PROP_RETAIN_AVAILABLE, 1); } static void TEST_single_wildcard_subscription_available(void) { - byte_prop_write_helper(3, MOSQ_ERR_SUCCESS, PROP_WILDCARD_SUB_AVAILABLE, 0); + byte_prop_write_helper(CONNACK, 3, MOSQ_ERR_SUCCESS, PROP_WILDCARD_SUB_AVAILABLE, 0); } static void TEST_single_subscription_identifier_available(void) { - byte_prop_write_helper(3, MOSQ_ERR_SUCCESS, PROP_SUBSCRIPTION_ID_AVAILABLE, 0); + byte_prop_write_helper(CONNACK, 3, MOSQ_ERR_SUCCESS, PROP_SUBSCRIPTION_ID_AVAILABLE, 0); } static void TEST_single_shared_subscription_available(void) { - byte_prop_write_helper(3, MOSQ_ERR_SUCCESS, PROP_SHARED_SUB_AVAILABLE, 1); + byte_prop_write_helper(CONNACK, 3, MOSQ_ERR_SUCCESS, PROP_SHARED_SUB_AVAILABLE, 1); } static void TEST_single_message_expiry_interval(void) { - int32_prop_write_helper(6, MOSQ_ERR_SUCCESS, PROP_MESSAGE_EXPIRY_INTERVAL, 0x12233445); + int32_prop_write_helper(PUBLISH, 6, MOSQ_ERR_SUCCESS, PROP_MESSAGE_EXPIRY_INTERVAL, 0x12233445); } static void TEST_single_session_expiry_interval(void) { - int32_prop_write_helper(6, MOSQ_ERR_SUCCESS, PROP_SESSION_EXPIRY_INTERVAL, 0x45342312); + int32_prop_write_helper(CONNACK, 6, MOSQ_ERR_SUCCESS, PROP_SESSION_EXPIRY_INTERVAL, 0x45342312); } static void TEST_single_will_delay_interval(void) { - int32_prop_write_helper(6, MOSQ_ERR_SUCCESS, PROP_WILL_DELAY_INTERVAL, 0x45342312); + int32_prop_write_helper(CMD_WILL, 6, MOSQ_ERR_SUCCESS, PROP_WILL_DELAY_INTERVAL, 0x45342312); } static void TEST_single_maximum_packet_size(void) { - int32_prop_write_helper(6, MOSQ_ERR_SUCCESS, PROP_MAXIMUM_PACKET_SIZE, 0x45342312); + int32_prop_write_helper(CONNECT, 6, MOSQ_ERR_SUCCESS, PROP_MAXIMUM_PACKET_SIZE, 0x45342312); } static void TEST_single_server_keep_alive(void) { - int16_prop_write_helper(4, MOSQ_ERR_SUCCESS, PROP_SERVER_KEEP_ALIVE, 0x4534); + int16_prop_write_helper(CONNACK, 4, MOSQ_ERR_SUCCESS, PROP_SERVER_KEEP_ALIVE, 0x4534); } static void TEST_single_receive_maximum(void) { - int16_prop_write_helper(4, MOSQ_ERR_SUCCESS, PROP_RECEIVE_MAXIMUM, 0x6842); + int16_prop_write_helper(CONNACK, 4, MOSQ_ERR_SUCCESS, PROP_RECEIVE_MAXIMUM, 0x6842); } static void TEST_single_topic_alias_maximum(void) { - int16_prop_write_helper(4, MOSQ_ERR_SUCCESS, PROP_TOPIC_ALIAS_MAXIMUM, 0x6842); + int16_prop_write_helper(CONNECT, 4, MOSQ_ERR_SUCCESS, PROP_TOPIC_ALIAS_MAXIMUM, 0x6842); } static void TEST_single_topic_alias(void) { - int16_prop_write_helper(4, MOSQ_ERR_SUCCESS, PROP_TOPIC_ALIAS, 0x6842); + int16_prop_write_helper(PUBLISH, 4, MOSQ_ERR_SUCCESS, PROP_TOPIC_ALIAS, 0x6842); } static void TEST_single_content_type(void) { - string_prop_write_helper(9, MOSQ_ERR_SUCCESS, PROP_CONTENT_TYPE, "hello"); + string_prop_write_helper(PUBLISH, 9, MOSQ_ERR_SUCCESS, PROP_CONTENT_TYPE, "hello"); } static void TEST_single_response_topic(void) { - string_prop_write_helper(9, MOSQ_ERR_SUCCESS, PROP_RESPONSE_TOPIC, "hello"); + string_prop_write_helper(CMD_WILL, 9, MOSQ_ERR_SUCCESS, PROP_RESPONSE_TOPIC, "hello"); } static void TEST_single_assigned_client_identifier(void) { - string_prop_write_helper(9, MOSQ_ERR_SUCCESS, PROP_ASSIGNED_CLIENT_IDENTIFIER, "hello"); + string_prop_write_helper(CONNACK, 9, MOSQ_ERR_SUCCESS, PROP_ASSIGNED_CLIENT_IDENTIFIER, "hello"); } static void TEST_single_authentication_method(void) { - string_prop_write_helper(9, MOSQ_ERR_SUCCESS, PROP_AUTHENTICATION_METHOD, "hello"); + string_prop_write_helper(CONNECT, 9, MOSQ_ERR_SUCCESS, PROP_AUTHENTICATION_METHOD, "hello"); } static void TEST_single_response_information(void) { - string_prop_write_helper(9, MOSQ_ERR_SUCCESS, PROP_RESPONSE_INFO, "hello"); + string_prop_write_helper(CONNACK, 9, MOSQ_ERR_SUCCESS, PROP_RESPONSE_INFO, "hello"); } static void TEST_single_server_reference(void) { - string_prop_write_helper(9, MOSQ_ERR_SUCCESS, PROP_SERVER_REFERENCE, "hello"); + string_prop_write_helper(CONNACK, 9, MOSQ_ERR_SUCCESS, PROP_SERVER_REFERENCE, "hello"); } static void TEST_single_reason_string(void) { - string_prop_write_helper(9, MOSQ_ERR_SUCCESS, PROP_REASON_STRING, "hello"); + string_prop_write_helper(PUBREC, 9, MOSQ_ERR_SUCCESS, PROP_REASON_STRING, "hello"); } static void TEST_single_correlation_data(void) { uint8_t payload[5] = {1, 'e', 0, 'l', 9}; - binary_prop_write_helper(9, MOSQ_ERR_SUCCESS, PROP_CORRELATION_DATA, payload, 5); + binary_prop_write_helper(PUBLISH, 9, MOSQ_ERR_SUCCESS, PROP_CORRELATION_DATA, payload, 5); } static void TEST_single_authentication_data(void) { uint8_t payload[5] = {1, 'e', 0, 'l', 9}; - binary_prop_write_helper(9, MOSQ_ERR_SUCCESS, PROP_AUTHENTICATION_DATA, payload, 5); + binary_prop_write_helper(CONNECT, 9, MOSQ_ERR_SUCCESS, PROP_AUTHENTICATION_DATA, payload, 5); } static void TEST_single_user_property(void)