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