about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2012-02-27 21:16:54 +0000
committerJames Booth <boothj5@gmail.com>2012-02-27 21:16:54 +0000
commitb512f3b8ffddd81270e98b071d71276d2690e110 (patch)
treeada0d307ab2be3b8750d3e704b3fde7704e6f7c8
parent91b369edf6195b0182961fa5abdadf13ad9a96af (diff)
downloadprofani-tty-b512f3b8ffddd81270e98b071d71276d2690e110.tar.gz
Added ping for keepalive
-rw-r--r--jabber.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/jabber.c b/jabber.c
index 693b946d..41bd9a16 100644
--- a/jabber.c
+++ b/jabber.c
@@ -27,6 +27,8 @@
 #include "log.h"
 #include "windows.h"
 
+#define PING_INTERVAL 120000 // 2 minutes
+
 // log reference
 extern FILE *logp;
 
@@ -65,6 +67,8 @@ static int _jabber_message_handler(xmpp_conn_t * const conn,
 static int _roster_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza,
     void * const userdata);
 
+static int _ping_timed_handler(xmpp_conn_t * const conn, void * const userdata);
+
 void jabber_init(int disable_tls)
 {
     jabber_conn.conn_status = JABBER_STARTED;
@@ -196,6 +200,7 @@ static void _jabber_conn_handler(xmpp_conn_t * const conn,
         xmpp_stanza_t* pres;
         xmpp_handler_add(conn, _jabber_message_handler, NULL, "message", NULL, ctx);
         xmpp_id_handler_add(conn, _roster_handler, "roster", ctx);
+        xmpp_timed_handler_add(conn, _ping_timed_handler, PING_INTERVAL, ctx);
 
         pres = xmpp_stanza_new(ctx);
         xmpp_stanza_set_name(pres, "presence");
@@ -248,3 +253,28 @@ static int _roster_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanz
     
     return 1;
 }
+
+static int _ping_timed_handler(xmpp_conn_t * const conn, void * const userdata)
+{
+    xmpp_ctx_t *ctx = (xmpp_ctx_t *)userdata;
+    
+    xmpp_stanza_t *iq, *ping;
+
+    iq = xmpp_stanza_new(ctx);
+    xmpp_stanza_set_name(iq, "iq");
+    xmpp_stanza_set_type(iq, "get");
+    xmpp_stanza_set_id(iq, "c2s1");
+
+    ping = xmpp_stanza_new(ctx);
+    xmpp_stanza_set_name(ping, "ping");
+
+    // FIXME add ping namespace to libstrophe
+    xmpp_stanza_set_ns(ping, "urn:xmpp:ping");
+
+    xmpp_stanza_add_child(iq, ping);
+    xmpp_stanza_release(ping);
+    xmpp_send(conn, iq);
+    xmpp_stanza_release(iq);
+
+    return 1;
+}