|
|
|
@ -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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|