diff --git a/include/mosquitto.h b/include/mosquitto.h index 780f0009..16c3f65f 100644 --- a/include/mosquitto.h +++ b/include/mosquitto.h @@ -3158,7 +3158,7 @@ libmosq_EXPORT int mosquitto_property_identifier(const mosquitto_property *prope * Pointer to the next item in the list * NULL, if proplist is NULL, or if there are no more items in the list. */ -libmosq_EXPORT const mosquitto_property *mosquitto_property_next(const mosquitto_property *proplist); +libmosq_EXPORT mosquitto_property *mosquitto_property_next(const mosquitto_property *proplist); /* diff --git a/lib/actions_publish.c b/lib/actions_publish.c index 65c4d232..6251f818 100644 --- a/lib/actions_publish.c +++ b/lib/actions_publish.c @@ -77,11 +77,11 @@ int mosquitto_publish_v5(struct mosquitto *mosq, int *mid, const char *topic, in p = outgoing_properties; have_topic_alias = false; while(p){ - if(p->identifier == MQTT_PROP_TOPIC_ALIAS){ + if(mosquitto_property_identifier(p) == MQTT_PROP_TOPIC_ALIAS){ have_topic_alias = true; break; } - p = p->next; + p = mosquitto_property_next(p); } if(have_topic_alias == false){ return MOSQ_ERR_INVAL; diff --git a/lib/property_mosq.c b/lib/property_mosq.c index 467cf4a3..56306263 100644 --- a/lib/property_mosq.c +++ b/lib/property_mosq.c @@ -318,7 +318,7 @@ static int property__write(struct mosquitto__packet *packet, const mosquitto_pro { int rc; - rc = packet__write_varint(packet, (uint32_t)property->identifier); + rc = packet__write_varint(packet, (uint32_t)mosquitto_property_identifier(property)); if(rc) return rc; switch(property->property_type){ @@ -957,7 +957,7 @@ BROKER_EXPORT int mosquitto_property_type(const mosquitto_property *property) } -BROKER_EXPORT const mosquitto_property *mosquitto_property_next(const mosquitto_property *proplist) +BROKER_EXPORT mosquitto_property *mosquitto_property_next(const mosquitto_property *proplist) { if(proplist == NULL) return NULL; @@ -1269,7 +1269,7 @@ BROKER_EXPORT int mosquitto_property_copy_all(mosquitto_property **dest, const m return MOSQ_ERR_INVAL; } - src = src->next; + src = mosquitto_property_next(src); } return MOSQ_ERR_SUCCESS; diff --git a/lib/will_mosq.c b/lib/will_mosq.c index c154c141..ec3a6de3 100644 --- a/lib/will_mosq.c +++ b/lib/will_mosq.c @@ -55,9 +55,9 @@ int will__set(struct mosquitto *mosq, const char *topic, int payloadlen, const v } p = properties; while(p){ - rc = mosquitto_property_check_command(CMD_WILL, p->identifier); + rc = mosquitto_property_check_command(CMD_WILL, mosquitto_property_identifier(p)); if(rc) return rc; - p = p->next; + p = mosquitto_property_next(p); } } diff --git a/src/handle_publish.c b/src/handle_publish.c index d1d40a40..efeb9e23 100644 --- a/src/handle_publish.c +++ b/src/handle_publish.c @@ -128,7 +128,7 @@ int handle__publish(struct mosquitto *context) base_msg->data.properties = NULL; msg_properties_last = NULL; while(p){ - switch(p->identifier){ + switch(mosquitto_property_identifier(p)){ case MQTT_PROP_CONTENT_TYPE: case MQTT_PROP_CORRELATION_DATA: case MQTT_PROP_PAYLOAD_FORMAT_INDICATOR: @@ -142,39 +142,39 @@ int handle__publish(struct mosquitto *context) msg_properties_last = p; } if(p_prev){ - p_prev->next = p->next; - p = p_prev->next; + p_prev->next = mosquitto_property_next(p); + p = mosquitto_property_next(p_prev); }else{ - properties = p->next; + properties = mosquitto_property_next(p); p = properties; } msg_properties_last->next = NULL; break; case MQTT_PROP_TOPIC_ALIAS: - topic_alias = p->value.i16; + topic_alias = mosquitto_property_int16_value(p); p_prev = p; - p = p->next; + p = mosquitto_property_next(p); break; case MQTT_PROP_MESSAGE_EXPIRY_INTERVAL: - message_expiry_interval = p->value.i32; + message_expiry_interval = mosquitto_property_int32_value(p); p_prev = p; - p = p->next; + p = mosquitto_property_next(p); break; case MQTT_PROP_SUBSCRIPTION_IDENTIFIER: - if(p->value.varint == 0){ + if(mosquitto_property_varint_value(p) == 0){ mosquitto_property_free_all(&properties); db__msg_store_free(base_msg); return MOSQ_ERR_PROTOCOL; } p_prev = p; - p = p->next; + p = mosquitto_property_next(p); break; default: - p = p->next; + p = mosquitto_property_next(p); break; } } diff --git a/src/loop.c b/src/loop.c index 95afb994..85996e1e 100644 --- a/src/loop.c +++ b/src/loop.c @@ -112,19 +112,19 @@ static void read_message_expiry_interval(mosquitto_property **proplist, uint32_t p = *proplist; while(p){ - if(p->identifier == MQTT_PROP_MESSAGE_EXPIRY_INTERVAL){ - *message_expiry = p->value.i32; + if(mosquitto_property_identifier(p) == MQTT_PROP_MESSAGE_EXPIRY_INTERVAL){ + *message_expiry = mosquitto_property_int32_value(p); if(p == *proplist){ - *proplist = p->next; + *proplist = mosquitto_property_next(p); }else{ - previous->next = p->next; + previous->next = mosquitto_property_next(p); } property__free(&p); return; } previous = p; - p = p->next; + p = mosquitto_property_next(p); } } diff --git a/src/persist_read_v5.c b/src/persist_read_v5.c index 99f8ec0b..53627bf7 100644 --- a/src/persist_read_v5.c +++ b/src/persist_read_v5.c @@ -144,10 +144,10 @@ int persist__chunk_client_msg_read_v56(FILE *db_fptr, struct P_client_msg *chunk if(properties){ p = properties; while(p){ - if(p->identifier == MQTT_PROP_SUBSCRIPTION_IDENTIFIER){ - chunk->subscription_identifier = p->value.varint; + if(mosquitto_property_identifier(p) == MQTT_PROP_SUBSCRIPTION_IDENTIFIER){ + chunk->subscription_identifier = mosquitto_property_varint_value(p); } - p = p->next; + p = mosquitto_property_next(p); } mosquitto_property_free_all(&properties); } diff --git a/src/property_broker.c b/src/property_broker.c index ec442d78..d71344a6 100644 --- a/src/property_broker.c +++ b/src/property_broker.c @@ -35,28 +35,37 @@ int property__process_connect(struct mosquitto *context, mosquitto_property **pr p = *props; while(p){ - if(p->identifier == MQTT_PROP_SESSION_EXPIRY_INTERVAL){ - context->session_expiry_interval = p->value.i32; - }else if(p->identifier == MQTT_PROP_RECEIVE_MAXIMUM){ - if(p->value.i16 == 0){ - return MOSQ_ERR_PROTOCOL; - } + switch(mosquitto_property_identifier(p)){ + case MQTT_PROP_SESSION_EXPIRY_INTERVAL: + context->session_expiry_interval = mosquitto_property_int32_value(p); + break; - context->msgs_out.inflight_maximum = p->value.i16; - context->msgs_out.inflight_quota = context->msgs_out.inflight_maximum; - }else if(p->identifier == MQTT_PROP_MAXIMUM_PACKET_SIZE){ - if(p->value.i32 == 0){ - return MOSQ_ERR_PROTOCOL; - } - context->maximum_packet_size = p->value.i32; - }else if(p->identifier == MQTT_PROP_TOPIC_ALIAS_MAXIMUM){ - if(p->value.i16 > context->listener->max_topic_alias_broker){ - context->alias_max_l2r = context->listener->max_topic_alias_broker; - }else{ - context->alias_max_l2r = p->value.i16; - } + case MQTT_PROP_RECEIVE_MAXIMUM: + context->msgs_out.inflight_maximum = mosquitto_property_int16_value(p); + if(context->msgs_out.inflight_maximum == 0){ + return MOSQ_ERR_PROTOCOL; + } + context->msgs_out.inflight_quota = context->msgs_out.inflight_maximum; + break; + + case MQTT_PROP_MAXIMUM_PACKET_SIZE: + context->maximum_packet_size = mosquitto_property_int32_value(p); + if(context->maximum_packet_size == 0){ + return MOSQ_ERR_PROTOCOL; + } + break; + + case MQTT_PROP_TOPIC_ALIAS_MAXIMUM: + context->alias_max_l2r = mosquitto_property_int16_value(p); + if(context->alias_max_l2r > context->listener->max_topic_alias_broker){ + context->alias_max_l2r = context->listener->max_topic_alias_broker; + } + break; + + default: + break; } - p = p->next; + p = mosquitto_property_next(p); } return MOSQ_ERR_SUCCESS; @@ -73,7 +82,7 @@ int property__process_will(struct mosquitto *context, struct mosquitto_message_a msg_properties = NULL; msg_properties_last = NULL; while(p){ - switch(p->identifier){ + switch(mosquitto_property_identifier(p)){ case MQTT_PROP_CONTENT_TYPE: case MQTT_PROP_CORRELATION_DATA: case MQTT_PROP_PAYLOAD_FORMAT_INDICATOR: @@ -92,10 +101,10 @@ int property__process_will(struct mosquitto *context, struct mosquitto_message_a /* And remove it from *props */ if(p_prev){ - p_prev->next = p->next; - p = p_prev->next; + p_prev->next = mosquitto_property_next(p); + p = mosquitto_property_next(p_prev); }else{ - *props = p->next; + *props = mosquitto_property_next(p); p = *props; } msg_properties_last->next = NULL; @@ -103,16 +112,16 @@ int property__process_will(struct mosquitto *context, struct mosquitto_message_a case MQTT_PROP_WILL_DELAY_INTERVAL: /* Leave this in *props, to be freed */ - context->will_delay_interval = p->value.i32; + context->will_delay_interval = mosquitto_property_int32_value(p); p_prev = p; - p = p->next; + p = mosquitto_property_next(p); break; case MQTT_PROP_MESSAGE_EXPIRY_INTERVAL: /* Leave this in *props, to be freed */ - msg->expiry_interval = p->value.i32; + msg->expiry_interval = mosquitto_property_int32_value(p); p_prev = p; - p = p->next; + p = mosquitto_property_next(p); break; default: @@ -135,14 +144,14 @@ int property__process_disconnect(struct mosquitto *context, mosquitto_property * p = *props; while(p){ - if(p->identifier == MQTT_PROP_SESSION_EXPIRY_INTERVAL){ - if(context->session_expiry_interval == 0 && p->value.i32 != 0){ + if(mosquitto_property_identifier(p) == MQTT_PROP_SESSION_EXPIRY_INTERVAL){ + uint32_t session_expiry_interval = mosquitto_property_int32_value(p); + if(context->session_expiry_interval == 0 && session_expiry_interval != 0){ return MOSQ_ERR_PROTOCOL; } - context->session_expiry_interval = p->value.i32; + context->session_expiry_interval = session_expiry_interval; } - p = p->next; + p = mosquitto_property_next(p); } return MOSQ_ERR_SUCCESS; } -