Skip to content

Commit

Permalink
Fix session-expiry-interval for v5 clients using -c.
Browse files Browse the repository at this point in the history
Default behaviour for v5 clients using `-c` is now to use infinite length
sessions, as with v3 clients.

Closes #1546. Thanks to Kiran Pradeep.
  • Loading branch information
ralight committed Feb 6, 2020
1 parent 3671a6d commit 019d421
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 12 deletions.
2 changes: 2 additions & 0 deletions ChangeLog.txt
Expand Up @@ -42,6 +42,8 @@ Clients:
option.
- Add `-x` to all clients to all the session-expiry-interval property to be
easily set for MQTT v5 clients.
- Default behaviour for v5 clients using `-c` is now to use infinite length
sessions, as with v3 clients. Closes #1546.


1.6.8 - 20191128
Expand Down
2 changes: 1 addition & 1 deletion client/args.txt
Expand Up @@ -45,7 +45,7 @@ v - RR,SUB (verbose)
W - SUB (timeout)
w
X
x
x - PUB,RR,SUB (session-expiry-interval)
Y
y
Z
Expand Down
31 changes: 20 additions & 11 deletions client/client_shared.c
Expand Up @@ -155,6 +155,7 @@ void init_config(struct mosq_config *cfg, int pub_or_sub)
}else{
cfg->protocol_version = MQTT_PROTOCOL_V311;
}
cfg->session_expiry_interval = -1; /* -1 means unset here, the user can't set it to -1. */
}

void client_config_cleanup(struct mosq_config *cfg)
Expand Down Expand Up @@ -366,18 +367,26 @@ int client_config_load(struct mosq_config *cfg, int pub_or_sub, int argc, char *
}
#endif

if(cfg->protocol_version != 5 && cfg->clean_session == false && (cfg->id_prefix || !cfg->id)){
fprintf(stderr, "Error: You must provide a client id if you are using the -c option.\n");
return 1;
}
if(cfg->protocol_version == 5 && cfg->session_expiry_interval > 0){
if(cfg->session_expiry_interval == UINT32_MAX && (cfg->id_prefix || !cfg->id)){
fprintf(stderr, "Error: You must provide a client id if you are using an infinite session expiry interval.\n");
return 1;
if(cfg->protocol_version == 5){
if(cfg->clean_session == false && cfg->session_expiry_interval == -1){
/* User hasn't set session-expiry-interval, but has cleared clean
* session so default to persistent session. */
cfg->session_expiry_interval = UINT32_MAX;
}
rc = mosquitto_property_add_int32(&cfg->connect_props, MQTT_PROP_SESSION_EXPIRY_INTERVAL, cfg->session_expiry_interval);
if(rc){
fprintf(stderr, "Error adding property session-expiry-interval\n");
if(cfg->session_expiry_interval > 0){
if(cfg->session_expiry_interval == UINT32_MAX && (cfg->id_prefix || !cfg->id)){
fprintf(stderr, "Error: You must provide a client id if you are using an infinite session expiry interval.\n");
return 1;
}
rc = mosquitto_property_add_int32(&cfg->connect_props, MQTT_PROP_SESSION_EXPIRY_INTERVAL, cfg->session_expiry_interval);
if(rc){
fprintf(stderr, "Error adding property session-expiry-interval\n");
}
}
}else{
if(cfg->clean_session == false && (cfg->id_prefix || !cfg->id)){
fprintf(stderr, "Error: You must provide a client id if you are using the -c option.\n");
return 1;
}
}

Expand Down

0 comments on commit 019d421

Please sign in to comment.