aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordequis <dx@dxzone.com.ar>2015-03-19 13:02:31 -0300
committerdequis <dx@dxzone.com.ar>2015-04-10 14:10:41 -0300
commite59eec03bee8bb7df76f1a323f0f404754dff8ca (patch)
tree88bf4a473c68d2b7d9608d1ddb214884a5a32daf
parentcd5fdcf1b6b3ee4e5072e6332b6b8ef83dd5b2b3 (diff)
msn: switch to long polling http
-rw-r--r--protocols/msn/gw.c10
-rw-r--r--protocols/msn/msn.h1
2 files changed, 9 insertions, 2 deletions
diff --git a/protocols/msn/gw.c b/protocols/msn/gw.c
index e046f0c8..eecbdb3b 100644
--- a/protocols/msn/gw.c
+++ b/protocols/msn/gw.c
@@ -69,6 +69,7 @@ void msn_gw_callback(struct http_request *req)
struct msn_gw *gw = req->data;
gw->waiting = FALSE;
+ gw->polling = FALSE;
if (!gw->open) {
/* the user tried to logout while the request was pending
@@ -109,7 +110,7 @@ void msn_gw_callback(struct http_request *req)
if (gw->poll_timeout != -1) {
b_event_remove(gw->poll_timeout);
}
- gw->poll_timeout = b_timeout_add(5000, msn_gw_poll_timeout, gw);
+ gw->poll_timeout = b_timeout_add(500, msn_gw_poll_timeout, gw);
}
@@ -126,6 +127,11 @@ void msn_gw_dorequest(struct msn_gw *gw, char *args)
gw->out = g_byte_array_new();
}
+ if (!bodylen && !args) {
+ args = "Action=poll&Lifespan=60";
+ gw->polling = TRUE;
+ }
+
request = g_strdup_printf(REQUEST_TEMPLATE,
gw->session_id ? : "", args ? : "", gw->last_host, bodylen, body ? : "");
@@ -171,7 +177,7 @@ void msn_gw_write(struct msn_gw *gw, char *buf, size_t len)
g_byte_array_append(gw->out, (const guint8 *) buf, len);
if (!gw->open) {
msn_gw_open(gw);
- } else if (!gw->waiting) {
+ } else if (gw->polling || !gw->waiting) {
msn_gw_dorequest(gw, NULL);
}
}
diff --git a/protocols/msn/msn.h b/protocols/msn/msn.h
index cdc459f5..ba7e4247 100644
--- a/protocols/msn/msn.h
+++ b/protocols/msn/msn.h
@@ -140,6 +140,7 @@ struct msn_gw {
gboolean open;
gboolean waiting;
+ gboolean polling;
};
struct msn_data {