mirror of
https://github.com/eclipse/mosquitto.git
synced 2025-05-08 16:52:13 +08:00
Fix persisted clients being restored without a session expiry time.
This commit is contained in:
parent
a8448a9c7b
commit
1af3152ddc
@ -43,6 +43,26 @@ static int session_expiry__cmp(struct session_expiry_list *i1, struct session_ex
|
||||
}
|
||||
|
||||
|
||||
static void set_session_expiry_time(struct mosquitto *context)
|
||||
{
|
||||
context->session_expiry_time = db.now_real_s;
|
||||
|
||||
if(db.config->persistent_client_expiration == 0){
|
||||
/* No global expiry, so use the client expiration interval */
|
||||
context->session_expiry_time += context->session_expiry_interval;
|
||||
}else{
|
||||
/* We have a global expiry interval */
|
||||
if(db.config->persistent_client_expiration < context->session_expiry_interval){
|
||||
/* The client expiry is longer than the global expiry, so use the global */
|
||||
context->session_expiry_time += db.config->persistent_client_expiration;
|
||||
}else{
|
||||
/* The global expiry is longer than the client expiry, so use the client */
|
||||
context->session_expiry_time += context->session_expiry_interval;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int session_expiry__add(struct mosquitto *context)
|
||||
{
|
||||
struct session_expiry_list *item;
|
||||
@ -59,21 +79,7 @@ int session_expiry__add(struct mosquitto *context)
|
||||
if(!item) return MOSQ_ERR_NOMEM;
|
||||
|
||||
item->context = context;
|
||||
item->context->session_expiry_time = db.now_real_s;
|
||||
|
||||
if(db.config->persistent_client_expiration == 0){
|
||||
/* No global expiry, so use the client expiration interval */
|
||||
item->context->session_expiry_time += item->context->session_expiry_interval;
|
||||
}else{
|
||||
/* We have a global expiry interval */
|
||||
if(db.config->persistent_client_expiration < item->context->session_expiry_interval){
|
||||
/* The client expiry is longer than the global expiry, so use the global */
|
||||
item->context->session_expiry_time += db.config->persistent_client_expiration;
|
||||
}else{
|
||||
/* The global expiry is longer than the client expiry, so use the client */
|
||||
item->context->session_expiry_time += item->context->session_expiry_interval;
|
||||
}
|
||||
}
|
||||
set_session_expiry_time(item->context);
|
||||
context->expiry_list_item = item;
|
||||
|
||||
DL_INSERT_INORDER(expiry_list, item, session_expiry__cmp);
|
||||
@ -98,7 +104,12 @@ int session_expiry__add_from_persistence(struct mosquitto *context, time_t expir
|
||||
if(!item) return MOSQ_ERR_NOMEM;
|
||||
|
||||
item->context = context;
|
||||
item->context->session_expiry_time = expiry_time;
|
||||
if(expiry_time){
|
||||
item->context->session_expiry_time = expiry_time;
|
||||
}else{
|
||||
set_session_expiry_time(item->context);
|
||||
|
||||
}
|
||||
context->expiry_list_item = item;
|
||||
|
||||
DL_INSERT_INORDER(expiry_list, item, session_expiry__cmp);
|
||||
@ -165,4 +176,3 @@ void session_expiry__check(void)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -17,6 +17,7 @@ def write_config(filename, port1, port2, protocol_version):
|
||||
f.write("address 127.0.0.1:%d\n" % (port1))
|
||||
f.write("topic bridge/# out\n")
|
||||
f.write("bridge_protocol_version %s\n" % (protocol_version))
|
||||
f.write("cleansession false\n")
|
||||
|
||||
|
||||
def do_test(proto_ver):
|
||||
|
Loading…
x
Reference in New Issue
Block a user