[/trunk] Changeset 126 by mikael
* Fix keepalive.
--- a/mcabber/connwrap/connwrap.c Sat Apr 23 21:12:36 2005 +0000
+++ b/mcabber/connwrap/connwrap.c Sun Apr 24 17:38:48 2005 +0000
@@ -7,6 +7,7 @@
#include <arpa/inet.h>
#include <fcntl.h>
#include <sys/time.h>
+#include <unistd.h>
#define PROXY_TIMEOUT 10
// HTTP proxy timeout in seconds (for the CONNECT method)
--- a/mcabber/src/TODO Sat Apr 23 21:12:36 2005 +0000
+++ b/mcabber/src/TODO Sun Apr 24 17:38:48 2005 +0000
@@ -3,6 +3,7 @@
* Should not stay on buddy buffer when one moves to a group
* Pending message not displayed if buddy outside Contact window
+* Check keepalive
TODO:
--- a/mcabber/src/jabglue.c Sat Apr 23 21:12:36 2005 +0000
+++ b/mcabber/src/jabglue.c Sun Apr 24 17:38:48 2005 +0000
@@ -31,8 +31,11 @@
#define JABBERSSLPORT 5223
jconn jc;
+time_t LastPingTime;
+unsigned int KeepaliveDelay;
static int s_id = 1; // FIXME which use??
static int regmode, regdone;
+unsigned char online;
char imstatus2char[imstatus_size] = {
'_', 'o', 'i', 'f', 'd', 'c', 'n', 'a'
@@ -116,7 +119,7 @@
jab_state_handler(jc, &statehandler);
if (jc->user) {
- //fonline = TRUE;
+ online = TRUE;
jstate = STATE_CONNECTING;
statehandler(0, -1);
jab_start(jc);
@@ -130,12 +133,24 @@
statehandler(jc, JCONN_STATE_OFF);
}
+inline void jb_reset_keepalive()
+{
+ time(&LastPingTime);
+}
+
void jb_keepalive()
{
if (jc) {
// XXX Only if connected...
- jab_send_raw(jc, " ");
+ jab_send_raw(jc, " \t ");
+ scr_LogPrint("Sent keepalive");
}
+ jb_reset_keepalive();
+}
+
+void jb_set_keepalive_delay(unsigned int delay)
+{
+ KeepaliveDelay = delay;
}
void jb_main()
@@ -143,6 +158,8 @@
xmlnode x, z;
char *cid;
+ if (!online)
+ return;
if (jc && jc->state == JCONN_STATE_CONNECTING) {
jab_start(jc);
return;
@@ -167,7 +184,7 @@
if (!jc || jc->state == JCONN_STATE_OFF) {
scr_LogPrint("Unable to connect to the server");
- // fonline = FALSE;
+ online = FALSE;
}
}
@@ -176,6 +193,14 @@
} else if (jc->state == JCONN_STATE_OFF || jc->fd == -1) {
statehandler(jc, JCONN_STATE_OFF);
}
+
+ // Keepalive
+ if (KeepaliveDelay) {
+ time_t now;
+ time(&now);
+ if (now > LastPingTime + KeepaliveDelay)
+ jb_keepalive();
+ }
}
void setjabberstatus(enum imstatus st, char *msg)
@@ -362,7 +387,7 @@
switch(state) {
case JCONN_STATE_OFF:
- /* jhook.flogged = jhook.fonline = FALSE; */
+ online = FALSE;
if (previous_state != JCONN_STATE_OFF) {
scr_LogPrint("+ JCONN_STATE_OFF");
@@ -383,7 +408,7 @@
case JCONN_STATE_ON:
scr_LogPrint("+ JCONN_STATE_ON");
- // if (regmode) jhook.fonline = TRUE;
+ online = TRUE;
break;
case JCONN_STATE_CONNECTING:
@@ -407,6 +432,7 @@
enum imstatus ust;
// int npos;
+ jb_reset_keepalive(); // reset keepalive delay
jpacket_reset(packet);
p = xmlnode_get_attrib(packet->x, "from"); if (p) from = p;
--- a/mcabber/src/jabglue.h Sat Apr 23 21:12:36 2005 +0000
+++ b/mcabber/src/jabglue.h Sun Apr 24 17:38:48 2005 +0000
@@ -29,8 +29,10 @@
jconn jb_connect(const char *jid, unsigned int port, int ssl, const char *pass);
void jb_disconnect(void);
-void jb_keepalive();
void jb_main();
void jb_send_msg(const char *, const char *);
+void jb_keepalive();
+inline void jb_reset_keepalive();
+void jb_set_keepalive_delay(unsigned int delay);
#endif /* __JABGLUE_H__ */
--- a/mcabber/src/main.c Sat Apr 23 21:12:36 2005 +0000
+++ b/mcabber/src/main.c Sun Apr 24 17:38:48 2005 +0000
@@ -18,21 +18,14 @@
void sig_handler(int signum)
{
- switch (signum) {
- case SIGALRM:
- jb_keepalive();
- break;
-
- case SIGTERM:
+ if (signum == SIGTERM) {
// bud_TerminateBuddies();
scr_TerminateCurses();
jb_disconnect();
printf("Killed by SIGTERM\nBye!\n");
exit(EXIT_SUCCESS);
- break;
-
}
- signal(SIGALRM, sig_handler);
+ ut_WriteLog("Caught signal: %d\n", signum);
}
ssize_t my_getpass (char **passstr, size_t *n)
@@ -177,15 +170,12 @@
return -2;
}
- ping = 20;
+ ping = 40;
if (cfg_read("pinginterval"))
ping = (unsigned int) atoi(cfg_read("pinginterval"));
-
+ jb_set_keepalive_delay(ping);
ut_WriteLog("Ping interval stablished: %d secs\n", ping);
- ut_WriteLog("Entering into main loop...\n\n");
- ut_WriteLog("Ready to send/receive messages...\n");
-
optstring = cfg_read("hide_offline_buddies");
if (optstring && (atoi(optstring) > 0))
buddylist_hide_offline_buddies(TRUE);
@@ -193,9 +183,12 @@
/* Initialize commands system */
cmd_init();
+ ut_WriteLog("Entering into main loop...\n\n");
+ ut_WriteLog("Ready to send/receive messages...\n");
+
+ jb_reset_keepalive();
keypad(scr_GetInputWindow(), TRUE);
while (ret != 255) {
- alarm(ping);
key = scr_Getch();
if (key != ERR)
ret = process_key(key);