Fix some places where return codes were incorrect.

Closes #850.

Signed-off-by: Roger A. Light <roger@atchoo.org>
pull/830/head
Roger A. Light 7 years ago
parent fc9a0db966
commit 4bacbecb1b

@ -13,6 +13,11 @@ Broker:
- All clients now time out if they exceed their keepalive*1.5, rather than - All clients now time out if they exceed their keepalive*1.5, rather than
just reach it. This was inconsistent in two places. just reach it. This was inconsistent in two places.
Library:
- Fix some places where return codes were incorrect, including to the
on_disconnect() callback. This has resulted in two new error codes,
MOSQ_ERR_KEEPALIVE and MOSQ_ERR_LOOKUP.
1.5 - 20180502 1.5 - 20180502
============== ==============

@ -300,6 +300,7 @@ int mosquitto_loop_misc(struct mosquitto *mosq)
mosquitto__check_keepalive(mosq); mosquitto__check_keepalive(mosq);
now = mosquitto_time(); now = mosquitto_time();
if(mosq->ping_t && now - mosq->ping_t >= mosq->keepalive){ if(mosq->ping_t && now - mosq->ping_t >= mosq->keepalive){
/* mosq->ping_t != 0 means we are waiting for a pingresp. /* mosq->ping_t != 0 means we are waiting for a pingresp.
* This hasn't happened in the keepalive time so we should disconnect. * This hasn't happened in the keepalive time so we should disconnect.
@ -309,7 +310,7 @@ int mosquitto_loop_misc(struct mosquitto *mosq)
if(mosq->state == mosq_cs_disconnecting){ if(mosq->state == mosq_cs_disconnecting){
rc = MOSQ_ERR_SUCCESS; rc = MOSQ_ERR_SUCCESS;
}else{ }else{
rc = 1; rc = MOSQ_ERR_KEEPALIVE;
} }
pthread_mutex_unlock(&mosq->state_mutex); pthread_mutex_unlock(&mosq->state_mutex);
pthread_mutex_lock(&mosq->callback_mutex); pthread_mutex_lock(&mosq->callback_mutex);

@ -84,7 +84,9 @@ enum mosq_err_t {
MOSQ_ERR_EAI = 15, MOSQ_ERR_EAI = 15,
MOSQ_ERR_PROXY = 16, MOSQ_ERR_PROXY = 16,
MOSQ_ERR_PLUGIN_DEFER = 17, MOSQ_ERR_PLUGIN_DEFER = 17,
MOSQ_ERR_MALFORMED_UTF8 = 18 MOSQ_ERR_MALFORMED_UTF8 = 18,
MOSQ_ERR_KEEPALIVE = 19,
MOSQ_ERR_LOOKUP = 20,
}; };
/* Error values */ /* Error values */

@ -748,21 +748,21 @@ int net__socket_nonblock(mosq_sock_t sock)
opt = fcntl(sock, F_GETFL, 0); opt = fcntl(sock, F_GETFL, 0);
if(opt == -1){ if(opt == -1){
COMPAT_CLOSE(sock); COMPAT_CLOSE(sock);
return 1; return MOSQ_ERR_ERRNO;
} }
if(fcntl(sock, F_SETFL, opt | O_NONBLOCK) == -1){ if(fcntl(sock, F_SETFL, opt | O_NONBLOCK) == -1){
/* If either fcntl fails, don't want to allow this client to connect. */ /* If either fcntl fails, don't want to allow this client to connect. */
COMPAT_CLOSE(sock); COMPAT_CLOSE(sock);
return 1; return MOSQ_ERR_ERRNO;
} }
#else #else
unsigned long opt = 1; unsigned long opt = 1;
if(ioctlsocket(sock, FIONBIO, &opt)){ if(ioctlsocket(sock, FIONBIO, &opt)){
COMPAT_CLOSE(sock); COMPAT_CLOSE(sock);
return 1; return MOSQ_ERR_ERRNO;
} }
#endif #endif
return 0; return MOSQ_ERR_SUCCESS;
} }

@ -119,7 +119,7 @@ int packet__queue(struct mosquitto *mosq, struct mosquitto__packet *packet)
# ifdef WITH_WEBSOCKETS # ifdef WITH_WEBSOCKETS
if(mosq->wsi){ if(mosq->wsi){
libwebsocket_callback_on_writable(mosq->ws_context, mosq->wsi); libwebsocket_callback_on_writable(mosq->ws_context, mosq->wsi);
return 0; return MOSQ_ERR_SUCCESS;
}else{ }else{
return packet__write(mosq); return packet__write(mosq);
} }
@ -347,7 +347,7 @@ int packet__write(struct mosquitto *mosq)
pthread_mutex_lock(&mosq->callback_mutex); pthread_mutex_lock(&mosq->callback_mutex);
if(mosq->on_disconnect){ if(mosq->on_disconnect){
mosq->in_callback = true; mosq->in_callback = true;
mosq->on_disconnect(mosq, mosq->userdata, 0); mosq->on_disconnect(mosq, mosq->userdata, MOSQ_ERR_SUCCESS);
mosq->in_callback = false; mosq->in_callback = false;
} }
pthread_mutex_unlock(&mosq->callback_mutex); pthread_mutex_unlock(&mosq->callback_mutex);

@ -44,7 +44,7 @@ static void srv_callback(void *arg, int status, int timeouts, unsigned char *abu
pthread_mutex_lock(&mosq->callback_mutex); pthread_mutex_lock(&mosq->callback_mutex);
if(mosq->on_disconnect){ if(mosq->on_disconnect){
mosq->in_callback = true; mosq->in_callback = true;
mosq->on_disconnect(mosq, mosq->userdata, 2); mosq->on_disconnect(mosq, mosq->userdata, MOSQ_ERR_LOOKUP);
mosq->in_callback = false; mosq->in_callback = false;
} }
pthread_mutex_unlock(&mosq->callback_mutex); pthread_mutex_unlock(&mosq->callback_mutex);

@ -96,7 +96,7 @@ void mosquitto__check_keepalive(struct mosquitto *mosq)
if(mosq->state == mosq_cs_disconnecting){ if(mosq->state == mosq_cs_disconnecting){
rc = MOSQ_ERR_SUCCESS; rc = MOSQ_ERR_SUCCESS;
}else{ }else{
rc = 1; rc = MOSQ_ERR_KEEPALIVE;
} }
pthread_mutex_unlock(&mosq->state_mutex); pthread_mutex_unlock(&mosq->state_mutex);
pthread_mutex_lock(&mosq->callback_mutex); pthread_mutex_lock(&mosq->callback_mutex);

Loading…
Cancel
Save