From 2070e08969f1f88b80261bf6c64e18fba8ac3dc6 Mon Sep 17 00:00:00 2001 From: Michiel Broek Date: Sat, 23 Apr 2005 10:58:43 +0000 Subject: [PATCH] Better dead link detection --- mbtask/taskibc.c | 43 +++++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/mbtask/taskibc.c b/mbtask/taskibc.c index e20949a9..53edc295 100644 --- a/mbtask/taskibc.c +++ b/mbtask/taskibc.c @@ -250,7 +250,7 @@ int add_user(usr_list **fap, char *server, char *name, char *realname) /* - * Delete one user. + * Delete one user. If name == NULL then delete all users of a server. */ void del_user(usr_list **fap, char *server, char *name) { @@ -258,19 +258,23 @@ void del_user(usr_list **fap, char *server, char *name) srv_list *sl; int rc; - Syslog('r', "deluser %s %s", server, name); + Syslog('r', "deluser %s %s", server, printable(name, 0)); if (*fap == NULL) return; - if ((rc = pthread_mutex_lock(&b_mutex))) - Syslog('!', "del_user() mutex_lock failed rc=%d", rc); + if (name) + if ((rc = pthread_mutex_lock(&b_mutex))) + Syslog('!', "del_user() mutex_lock failed rc=%d", rc); tmp = fap; while (*tmp) { -// Syslog('r', "%s %s", (*tmp)->server, (*tmp)->realname); - if ((strcmp((*tmp)->server, server) == 0) && (strcmp((*tmp)->name, name) == 0)) { -// Syslog('r', "remove"); + if (name && (strcmp((*tmp)->server, server) == 0) && (strcmp((*tmp)->name, name) == 0)) { + tmpa = *tmp; + *tmp=(*tmp)->next; + free(tmpa); + usrchg = TRUE; + } else if ((name == NULL) && (strcmp((*tmp)->server, server) == 0)) { tmpa = *tmp; *tmp=(*tmp)->next; free(tmpa); @@ -280,9 +284,6 @@ void del_user(usr_list **fap, char *server, char *name) } } -// if (!usrchg) -// Syslog('r', "Could not delete user"); - for (sl = servers; sl; sl = sl->next) { if ((strcmp(sl->server, server) == 0) && sl->users) { sl->users--; @@ -290,8 +291,9 @@ void del_user(usr_list **fap, char *server, char *name) } } - if ((rc = pthread_mutex_unlock(&b_mutex))) - Syslog('!', "del_user() mutex_unlock failed rc=%d", rc); + if (name) + if ((rc = pthread_mutex_unlock(&b_mutex))) + Syslog('!', "del_user() mutex_unlock failed rc=%d", rc); } @@ -392,6 +394,7 @@ void del_router(srv_list **fap, char *name) for (ta = *fap; ta; ta = ta->next) { while ((tan = ta->next) && (strcmp(tan->router, name) == 0)) { + del_user(&users, tan->server, NULL); ta->next = tan->next; free(tan); srvchg = TRUE; @@ -638,7 +641,10 @@ void check_servers(void) case NCS_CONNECT: /* * In this state we check if the connection is still alive */ - if (((int)now - (int)tnsl->last) > 70) { + if (((int)now - (int)tnsl->last) > 130) { + /* + * Missed 3 PING replies + */ Syslog('+', "IBC: server %s connection is dead", tnsl->server); tnsl->state = NCS_DEAD; tnsl->action = now + (time_t)120; // 2 minutes delay before calling again. @@ -651,7 +657,16 @@ void check_servers(void) system_shout("*** NETWORK SPLIT, lost connection with server %s", tnsl->server); break; } - if (((int)now - (int)tnsl->last) > 60) { + /* + * Ping at 60, 90 and 120 seconds + */ + if (((int)now - (int)tnsl->last) > 120) { + Syslog('r', "sending 3rd PING at 120 seconds"); + send_msg(tnsl, "PING\r\n"); + } else if (((int)now - (int)tnsl->last) > 90) { + Syslog('r', "sending 2nd PING at 90 seconds"); + send_msg(tnsl, "PING\r\n"); + } else if (((int)now - (int)tnsl->last) > 60) { send_msg(tnsl, "PING\r\n"); } tnsl->action = now + (time_t)10;