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)
|
int session_expiry__add(struct mosquitto *context)
|
||||||
{
|
{
|
||||||
struct session_expiry_list *item;
|
struct session_expiry_list *item;
|
||||||
@ -59,21 +79,7 @@ int session_expiry__add(struct mosquitto *context)
|
|||||||
if(!item) return MOSQ_ERR_NOMEM;
|
if(!item) return MOSQ_ERR_NOMEM;
|
||||||
|
|
||||||
item->context = context;
|
item->context = context;
|
||||||
item->context->session_expiry_time = db.now_real_s;
|
set_session_expiry_time(item->context);
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
context->expiry_list_item = item;
|
context->expiry_list_item = item;
|
||||||
|
|
||||||
DL_INSERT_INORDER(expiry_list, item, session_expiry__cmp);
|
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;
|
if(!item) return MOSQ_ERR_NOMEM;
|
||||||
|
|
||||||
item->context = context;
|
item->context = context;
|
||||||
|
if(expiry_time){
|
||||||
item->context->session_expiry_time = expiry_time;
|
item->context->session_expiry_time = expiry_time;
|
||||||
|
}else{
|
||||||
|
set_session_expiry_time(item->context);
|
||||||
|
|
||||||
|
}
|
||||||
context->expiry_list_item = item;
|
context->expiry_list_item = item;
|
||||||
|
|
||||||
DL_INSERT_INORDER(expiry_list, item, session_expiry__cmp);
|
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("address 127.0.0.1:%d\n" % (port1))
|
||||||
f.write("topic bridge/# out\n")
|
f.write("topic bridge/# out\n")
|
||||||
f.write("bridge_protocol_version %s\n" % (protocol_version))
|
f.write("bridge_protocol_version %s\n" % (protocol_version))
|
||||||
|
f.write("cleansession false\n")
|
||||||
|
|
||||||
|
|
||||||
def do_test(proto_ver):
|
def do_test(proto_ver):
|
||||||
|
Loading…
Reference in New Issue
Block a user