mirror of
https://github.com/eclipse-mosquitto/mosquitto.git
synced 2026-02-05 18:50:06 +08:00
Add macros to make session expiry values clearer
This commit is contained in:
@@ -295,4 +295,6 @@ enum mqtt5_sub_options {
|
||||
#define MQTT_SUB_OPT_SET(opt, val) ((opt) |= val)
|
||||
#define MQTT_SUB_OPT_CLEAR(opt, val) ((opt) = (opt) & !val)
|
||||
|
||||
#define MQTT_SESSION_EXPIRY_IMMEDIATE 0
|
||||
#define MQTT_SESSION_EXPIRY_NEVER UINT32_MAX
|
||||
#endif
|
||||
|
||||
@@ -127,7 +127,7 @@ static struct mosquitto *bridge__new(struct mosquitto__bridge *bridge)
|
||||
new_context->retain_available = bridge->outgoing_retain;
|
||||
new_context->protocol = bridge->protocol_version;
|
||||
if(!bridge->clean_start_local){
|
||||
new_context->session_expiry_interval = UINT32_MAX;
|
||||
new_context->session_expiry_interval = MQTT_SESSION_EXPIRY_NEVER;
|
||||
plugin_persist__handle_client_add(new_context);
|
||||
if(new_context->expiry_list_item){
|
||||
/* We've restored from persistence and been added to the session
|
||||
@@ -432,7 +432,7 @@ int bridge__connect_step3(struct mosquitto *context)
|
||||
receive_maximum.next = properties;
|
||||
properties = &receive_maximum;
|
||||
}
|
||||
if(context->bridge->session_expiry_interval != 0){
|
||||
if(context->bridge->session_expiry_interval != MQTT_SESSION_EXPIRY_IMMEDIATE){
|
||||
session_expiry_interval.value.i32 = context->bridge->session_expiry_interval;
|
||||
session_expiry_interval.identifier = MQTT_PROP_SESSION_EXPIRY_INTERVAL;
|
||||
session_expiry_interval.property_type = MQTT_PROP_TYPE_INT32;
|
||||
@@ -615,7 +615,7 @@ int bridge__connect(struct mosquitto *context)
|
||||
receive_maximum.next = properties;
|
||||
properties = &receive_maximum;
|
||||
}
|
||||
if(context->bridge->session_expiry_interval != 0){
|
||||
if(context->bridge->session_expiry_interval != MQTT_SESSION_EXPIRY_IMMEDIATE){
|
||||
session_expiry_interval.value.i32 = context->bridge->session_expiry_interval;
|
||||
session_expiry_interval.identifier = MQTT_PROP_SESSION_EXPIRY_INTERVAL;
|
||||
session_expiry_interval.property_type = MQTT_PROP_TYPE_INT32;
|
||||
|
||||
@@ -1527,8 +1527,8 @@ static int config__read_file_core(struct mosquitto__config *config, bool reload,
|
||||
if(tmp_int < 0){
|
||||
log__printf(NULL, MOSQ_LOG_ERR, "Error: bridge_session_expiry_interval must not be negative.");
|
||||
return MOSQ_ERR_INVAL;
|
||||
}else if((uint64_t)tmp_int > (uint64_t)UINT32_MAX){
|
||||
log__printf(NULL, MOSQ_LOG_ERR, "Error: bridge_session_expiry_interval must be lower than %u.", UINT32_MAX);
|
||||
}else if((uint64_t)tmp_int > (uint64_t)MQTT_SESSION_EXPIRY_NEVER){
|
||||
log__printf(NULL, MOSQ_LOG_ERR, "Error: bridge_session_expiry_interval must be lower than %u.", MQTT_SESSION_EXPIRY_NEVER);
|
||||
return MOSQ_ERR_INVAL;
|
||||
}
|
||||
cur_bridge->session_expiry_interval = (uint32_t)tmp_int;
|
||||
|
||||
@@ -268,7 +268,7 @@ void context__disconnect(struct mosquitto *context, int reason)
|
||||
}
|
||||
}
|
||||
|
||||
if(context->session_expiry_interval == 0){
|
||||
if(context->session_expiry_interval == MQTT_SESSION_EXPIRY_IMMEDIATE){
|
||||
plugin__handle_disconnect(context, reason);
|
||||
}else{
|
||||
plugin__handle_client_offline(context, reason);
|
||||
@@ -281,7 +281,7 @@ void context__disconnect(struct mosquitto *context, int reason)
|
||||
/* Outgoing bridge connection never expire */
|
||||
#endif
|
||||
{
|
||||
if(context->session_expiry_interval == 0){
|
||||
if(context->session_expiry_interval == MQTT_SESSION_EXPIRY_IMMEDIATE){
|
||||
plugin_persist__handle_client_delete(context);
|
||||
/* Client session is due to be expired now */
|
||||
if(context->will_delay_interval == 0){
|
||||
|
||||
@@ -106,13 +106,13 @@ int connect__on_authorised(struct mosquitto *context, void *auth_data_out, uint1
|
||||
|
||||
if(context->clean_start == true){
|
||||
sub__clean_session(found_context);
|
||||
found_context->session_expiry_interval = 0;
|
||||
found_context->session_expiry_interval = MQTT_SESSION_EXPIRY_IMMEDIATE;
|
||||
plugin_persist__handle_client_delete(found_context);
|
||||
}
|
||||
context->is_persisted = found_context->is_persisted;
|
||||
found_context->is_persisted = false; /* stops persistence for context being removed */
|
||||
|
||||
if(context->clean_start == false && found_context->session_expiry_interval > 0){
|
||||
if(context->clean_start == false && found_context->session_expiry_interval != MQTT_SESSION_EXPIRY_IMMEDIATE){
|
||||
if(context->protocol == mosq_p_mqtt311 || context->protocol == mosq_p_mqtt5){
|
||||
connect_ack |= 0x01;
|
||||
}
|
||||
@@ -170,7 +170,7 @@ int connect__on_authorised(struct mosquitto *context, void *auth_data_out, uint1
|
||||
}
|
||||
}
|
||||
|
||||
if((found_context->protocol == mosq_p_mqtt5 && found_context->session_expiry_interval == 0)
|
||||
if((found_context->protocol == mosq_p_mqtt5 && found_context->session_expiry_interval == MQTT_SESSION_EXPIRY_IMMEDIATE)
|
||||
|| (found_context->protocol != mosq_p_mqtt5 && found_context->clean_start == true)
|
||||
|| (context->clean_start == true)
|
||||
){
|
||||
@@ -183,7 +183,7 @@ int connect__on_authorised(struct mosquitto *context, void *auth_data_out, uint1
|
||||
will__clear(found_context);
|
||||
|
||||
found_context->clean_start = true;
|
||||
found_context->session_expiry_interval = 0;
|
||||
found_context->session_expiry_interval = MQTT_SESSION_EXPIRY_IMMEDIATE;
|
||||
mosquitto__set_state(found_context, mosq_cs_duplicate);
|
||||
if(found_context->protocol == mosq_p_mqtt5){
|
||||
send__disconnect(found_context, MQTT_RC_SESSION_TAKEN_OVER, NULL);
|
||||
@@ -317,7 +317,7 @@ int connect__on_authorised(struct mosquitto *context, void *auth_data_out, uint1
|
||||
if(rc == MOSQ_ERR_SUCCESS){
|
||||
plugin__handle_connect(context);
|
||||
|
||||
if(context->session_expiry_interval != 0){
|
||||
if(context->session_expiry_interval != MQTT_SESSION_EXPIRY_IMMEDIATE){
|
||||
plugin_persist__handle_client_add(context);
|
||||
}else if(context->will){
|
||||
plugin_persist__handle_will_add(context);
|
||||
@@ -582,9 +582,9 @@ static void set_session_expiry_interval(struct mosquitto *context, uint8_t clean
|
||||
/* session_expiry_interval will be overridden if the properties are read later */
|
||||
if(clean_start == false && protocol_version != PROTOCOL_VERSION_v5){
|
||||
/* v3* has clean_start == false mean the session never expires */
|
||||
context->session_expiry_interval = UINT32_MAX;
|
||||
context->session_expiry_interval = MQTT_SESSION_EXPIRY_NEVER;
|
||||
}else{
|
||||
context->session_expiry_interval = 0;
|
||||
context->session_expiry_interval = MQTT_SESSION_EXPIRY_IMMEDIATE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1265,7 +1265,7 @@ handle_connect_error:
|
||||
will__clear(context);
|
||||
/* We return an error here which means the client is freed later on. */
|
||||
context->clean_start = true;
|
||||
context->session_expiry_interval = 0;
|
||||
context->session_expiry_interval = MQTT_SESSION_EXPIRY_IMMEDIATE;
|
||||
context->will_delay_interval = 0;
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -172,7 +172,7 @@ static int persist__client_save(FILE *db_fptr)
|
||||
#endif
|
||||
){
|
||||
chunk.F.session_expiry_time = context->session_expiry_time;
|
||||
if(context->session_expiry_interval != 0 && context->session_expiry_interval != UINT32_MAX && context->session_expiry_time == 0){
|
||||
if(context->session_expiry_interval != MQTT_SESSION_EXPIRY_IMMEDIATE && context->session_expiry_interval != MQTT_SESSION_EXPIRY_NEVER && context->session_expiry_time == 0){
|
||||
chunk.F.session_expiry_time = context->session_expiry_interval + db.now_real_s;
|
||||
}else{
|
||||
chunk.F.session_expiry_time = context->session_expiry_time;
|
||||
|
||||
@@ -143,7 +143,7 @@ void plugin_persist__handle_client_delete(struct mosquitto *context)
|
||||
plugin_persist__handle_will_delete(context);
|
||||
|
||||
if(context->is_persisted == false
|
||||
|| context->session_expiry_interval > 0){
|
||||
|| context->session_expiry_interval != MQTT_SESSION_EXPIRY_IMMEDIATE){
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -419,7 +419,7 @@ static void disconnect_client(struct mosquitto *context, bool with_will)
|
||||
if(with_will == false){
|
||||
mosquitto__set_state(context, mosq_cs_disconnecting);
|
||||
}
|
||||
if(context->session_expiry_interval > 0){
|
||||
if(context->session_expiry_interval != MQTT_SESSION_EXPIRY_IMMEDIATE){
|
||||
check_subscription_acls(context);
|
||||
}
|
||||
do_disconnect(context, MOSQ_ERR_ADMINISTRATIVE_ACTION);
|
||||
@@ -618,7 +618,7 @@ BROKER_EXPORT int mosquitto_persist_client_delete(const char *clientid)
|
||||
will__clear(context);
|
||||
|
||||
context->clean_start = true;
|
||||
context->session_expiry_interval = 0;
|
||||
context->session_expiry_interval = MQTT_SESSION_EXPIRY_IMMEDIATE;
|
||||
context->is_persisted = false;
|
||||
mosquitto__set_state(context, mosq_cs_duplicate);
|
||||
do_disconnect(context, MOSQ_ERR_SUCCESS);
|
||||
@@ -876,7 +876,7 @@ BROKER_EXPORT void mosquitto_complete_basic_auth(const char *clientid, int resul
|
||||
send__connack(context, 0, CONNACK_REFUSED_NOT_AUTHORIZED, NULL);
|
||||
}
|
||||
context->clean_start = true;
|
||||
context->session_expiry_interval = 0;
|
||||
context->session_expiry_interval = MQTT_SESSION_EXPIRY_IMMEDIATE;
|
||||
will__clear(context);
|
||||
do_disconnect(context, MOSQ_ERR_AUTH);
|
||||
}
|
||||
|
||||
@@ -212,7 +212,9 @@ int property__process_disconnect(struct mosquitto *context, mosquitto_property *
|
||||
while(p){
|
||||
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){
|
||||
if(context->session_expiry_interval == MQTT_SESSION_EXPIRY_IMMEDIATE
|
||||
&& session_expiry_interval != MQTT_SESSION_EXPIRY_IMMEDIATE){
|
||||
|
||||
return MOSQ_ERR_PROTOCOL;
|
||||
}
|
||||
context->session_expiry_interval = session_expiry_interval;
|
||||
|
||||
@@ -72,7 +72,7 @@ int session_expiry__add(struct mosquitto *context)
|
||||
}
|
||||
|
||||
if(db.config->persistent_client_expiration == 0){
|
||||
if(context->session_expiry_interval == UINT32_MAX){
|
||||
if(context->session_expiry_interval == MQTT_SESSION_EXPIRY_NEVER){
|
||||
/* There isn't a global expiry set, and the client has asked to
|
||||
* never expire, so we don't add it to the list. */
|
||||
return MOSQ_ERR_SUCCESS;
|
||||
@@ -107,7 +107,7 @@ int session_expiry__add_from_persistence(struct mosquitto *context, time_t expir
|
||||
}
|
||||
|
||||
if(db.config->persistent_client_expiration == 0){
|
||||
if(context->session_expiry_interval == UINT32_MAX){
|
||||
if(context->session_expiry_interval == MQTT_SESSION_EXPIRY_NEVER){
|
||||
/* There isn't a global expiry set, and the client has asked to
|
||||
* never expire, so we don't add it to the list. */
|
||||
return MOSQ_ERR_SUCCESS;
|
||||
@@ -152,7 +152,7 @@ void session_expiry__remove_all(void)
|
||||
DL_FOREACH_SAFE(expiry_list, item, tmp){
|
||||
context = item->context;
|
||||
session_expiry__remove(context);
|
||||
context->session_expiry_interval = 0;
|
||||
context->session_expiry_interval = MQTT_SESSION_EXPIRY_IMMEDIATE;
|
||||
context->will_delay_interval = 0;
|
||||
will_delay__remove(context);
|
||||
context__disconnect(context, -1);
|
||||
@@ -193,7 +193,7 @@ void session_expiry__check(void)
|
||||
metrics__int_inc(mosq_counter_clients_expired, 1);
|
||||
|
||||
/* Session has now expired, so clear interval */
|
||||
context->session_expiry_interval = 0;
|
||||
context->session_expiry_interval = MQTT_SESSION_EXPIRY_IMMEDIATE;
|
||||
/* Session has expired, so will delay should be cleared. */
|
||||
context->will_delay_interval = 0;
|
||||
will_delay__remove(context);
|
||||
|
||||
@@ -94,7 +94,7 @@ void will_delay__check(void)
|
||||
item->context->will_delay_interval = 0;
|
||||
item->context->will_delay_entry = NULL;
|
||||
context__send_will(item->context);
|
||||
if(item->context->session_expiry_interval == 0){
|
||||
if(item->context->session_expiry_interval == MQTT_SESSION_EXPIRY_IMMEDIATE){
|
||||
context__add_to_disused(item->context);
|
||||
}
|
||||
mosquitto_FREE(item);
|
||||
|
||||
Reference in New Issue
Block a user