From 3ec4eca3a75255de6ee36793d665d5b0e0ff5d7e Mon Sep 17 00:00:00 2001 From: jgeboski Date: Sat, 17 Jan 2015 13:15:27 -0500 Subject: facebook-mqtt: fixed preemptive connection timeouts As it stands, a connection is declared as being timed out if it has not heard back from the server with a ping response in one keep-alive time interval. However, the MQTT specification states that a connection is only declared timed out after one and a half time intervals. While the effects of this oversight may not be immediately present, over a period uptime, the connection may fall victim to preemptive timeouts. --- facebook/facebook-mqtt.c | 4 ++-- facebook/facebook-mqtt.h | 14 ++++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/facebook/facebook-mqtt.c b/facebook/facebook-mqtt.c index 88f9c94..46af995 100644 --- a/facebook/facebook-mqtt.c +++ b/facebook/facebook-mqtt.c @@ -194,7 +194,7 @@ static void fb_mqtt_timeout(fb_mqtt_t *mqtt) g_return_if_fail(mqtt != NULL); fb_mqtt_timeout_clear(mqtt); - mqtt->tev = b_timeout_add(FB_MQTT_TIMEOUT, fb_mqtt_cb_timeout, mqtt); + mqtt->tev = b_timeout_add(FB_MQTT_TIMEOUT_CONN, fb_mqtt_cb_timeout, mqtt); } /** @@ -232,7 +232,7 @@ static void fb_mqtt_ping(fb_mqtt_t *mqtt) g_return_if_fail(mqtt != NULL); fb_mqtt_timeout_clear(mqtt); - mqtt->tev = b_timeout_add(FB_MQTT_TIMEOUT, fb_mqtt_cb_ping, mqtt); + mqtt->tev = b_timeout_add(FB_MQTT_TIMEOUT_PING, fb_mqtt_cb_ping, mqtt); } /** diff --git a/facebook/facebook-mqtt.h b/facebook/facebook-mqtt.h index 0d9b3f9..e279240 100644 --- a/facebook/facebook-mqtt.h +++ b/facebook/facebook-mqtt.h @@ -25,12 +25,14 @@ #include "facebook-util.h" -#define FB_MQTT_NAME "MQIsdp" -#define FB_MQTT_VERS 3 -#define FB_MQTT_KA 60 -#define FB_MQTT_HOST "mqtt.facebook.com" -#define FB_MQTT_PORT 443 -#define FB_MQTT_TIMEOUT (FB_MQTT_KA * 1000) +#define FB_MQTT_NAME "MQIsdp" +#define FB_MQTT_VERS 3 +#define FB_MQTT_KA 60 +#define FB_MQTT_HOST "mqtt.facebook.com" +#define FB_MQTT_PORT 443 + +#define FB_MQTT_TIMEOUT_CONN (FB_MQTT_KA * 1500) +#define FB_MQTT_TIMEOUT_PING (FB_MQTT_KA * 1000) /** * Executes one of the #fb_mqtt_funcs. -- cgit v1.2.3