Fix session-expiry-interval for v5 clients using -c.

Default behaviour for v5 clients using `-c` is now to use infinite length
sessions, as with v3 clients.

Closes #1546. Thanks to Kiran Pradeep.
pull/1588/head
Roger A. Light 6 years ago
parent 078ad752cd
commit 17e20de9e7

@ -21,6 +21,8 @@ Client library:
Clients: Clients:
- Fix `--remove-retained` not obeying the `-T` option for filtering out - Fix `--remove-retained` not obeying the `-T` option for filtering out
topics. Closes #1585. topics. Closes #1585.
- Default behaviour for v5 clients using `-c` is now to use infinite length
sessions, as with v3 clients. Closes #1546.
1.6.8 - 20191128 1.6.8 - 20191128

@ -139,6 +139,7 @@ void init_config(struct mosq_config *cfg, int pub_or_sub)
}else{ }else{
cfg->protocol_version = MQTT_PROTOCOL_V311; 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) void client_config_cleanup(struct mosq_config *cfg)
@ -350,9 +351,27 @@ int client_config_load(struct mosq_config *cfg, int pub_or_sub, int argc, char *
} }
#endif #endif
if(cfg->clean_session == false && (cfg->id_prefix || !cfg->id)){ if(cfg->protocol_version == 5){
fprintf(stderr, "Error: You must provide a client id if you are using the -c option.\n"); if(cfg->clean_session == false && cfg->session_expiry_interval == -1){
return 1; /* User hasn't set session-expiry-interval, but has cleared clean
* session so default to persistent session. */
cfg->session_expiry_interval = UINT32_MAX;
}
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;
}
} }
if(pub_or_sub == CLIENT_SUB){ if(pub_or_sub == CLIENT_SUB){

Loading…
Cancel
Save