Added connection keep alive
This commit is contained in:
parent
2de56de377
commit
f0375195df
@ -306,9 +306,23 @@ void check_servers(void)
|
|||||||
if ((j > (CFG.dialdelay / 10)) && (j > 9))
|
if ((j > (CFG.dialdelay / 10)) && (j > 9))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Syslog('r', "next call in %d seconds", j);
|
Syslog('r', "next call in %d %d seconds", CFG.dialdelay, j);
|
||||||
tnsl->action = now + (time_t)j;
|
tnsl->action = now + (time_t)j;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case NCS_CONNECT: /*
|
||||||
|
* In this state we check if the connection is still alive
|
||||||
|
*/
|
||||||
|
Syslog('r', "%s connect", tnsl->server);
|
||||||
|
if (((int)now - (int)tnsl->last) > 70) {
|
||||||
|
Syslog('r', "Server %s is dead", tnsl->server);
|
||||||
|
}
|
||||||
|
if (((int)now - (int)tnsl->last) > 60) {
|
||||||
|
sprintf(csbuf, "PING\r\n");
|
||||||
|
send_msg(tnsl->socket, tnsl->servaddr_in, tnsl->server, csbuf);
|
||||||
|
}
|
||||||
|
tnsl->action = now + (time_t)10;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -340,7 +354,7 @@ void command_pass(char *hostname, char *parameters)
|
|||||||
Syslog('r', "link \"%s\"", printable(lnk, 0));
|
Syslog('r', "link \"%s\"", printable(lnk, 0));
|
||||||
|
|
||||||
if (version == NULL) {
|
if (version == NULL) {
|
||||||
sprintf(csbuf, "461 PASS: Not enough parameters");
|
sprintf(csbuf, "461 PASS: Not enough parameters\r\n");
|
||||||
send_msg(tnsl->socket, tnsl->servaddr_in, tnsl->server, csbuf);
|
send_msg(tnsl->socket, tnsl->servaddr_in, tnsl->server, csbuf);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -382,7 +396,7 @@ void command_server(char *hostname, char *parameters)
|
|||||||
Syslog('r', "vers \"%s\"", printable(parameters, 0));
|
Syslog('r', "vers \"%s\"", printable(parameters, 0));
|
||||||
|
|
||||||
if (id == NULL) {
|
if (id == NULL) {
|
||||||
sprintf(csbuf, "461 SERVER: Not enough parameters");
|
sprintf(csbuf, "461 SERVER: Not enough parameters\r\n");
|
||||||
send_msg(tnsl->socket, tnsl->servaddr_in, tnsl->server, csbuf);
|
send_msg(tnsl->socket, tnsl->servaddr_in, tnsl->server, csbuf);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -499,18 +513,21 @@ void receiver(struct servent *se)
|
|||||||
|
|
||||||
if (! strcmp(command, (char *)"PASS")) {
|
if (! strcmp(command, (char *)"PASS")) {
|
||||||
if (parameters == NULL) {
|
if (parameters == NULL) {
|
||||||
sprintf(csbuf, "461 %s: Not enough parameters", command);
|
sprintf(csbuf, "461 %s: Not enough parameters\r\n", command);
|
||||||
send_msg(tnsl->socket, tnsl->servaddr_in, tnsl->server, csbuf);
|
send_msg(tnsl->socket, tnsl->servaddr_in, tnsl->server, csbuf);
|
||||||
} else {
|
} else {
|
||||||
command_pass(hostname, parameters);
|
command_pass(hostname, parameters);
|
||||||
}
|
}
|
||||||
} else if (! strcmp(command, (char *)"SERVER")) {
|
} else if (! strcmp(command, (char *)"SERVER")) {
|
||||||
if (parameters == NULL) {
|
if (parameters == NULL) {
|
||||||
sprintf(csbuf, "461 %s: Not enough parameters", command);
|
sprintf(csbuf, "461 %s: Not enough parameters\r\n", command);
|
||||||
send_msg(tnsl->socket, tnsl->servaddr_in, tnsl->server, csbuf);
|
send_msg(tnsl->socket, tnsl->servaddr_in, tnsl->server, csbuf);
|
||||||
} else {
|
} else {
|
||||||
command_server(hostname, parameters);
|
command_server(hostname, parameters);
|
||||||
}
|
}
|
||||||
|
} else if (! strcmp(command, (char *)"PING")) {
|
||||||
|
sprintf(csbuf, "PONG\r\n");
|
||||||
|
send_msg(tnsl->socket, tnsl->servaddr_in, tnsl->server, csbuf);
|
||||||
} else if (tnsl->state == NCS_CONNECT) {
|
} else if (tnsl->state == NCS_CONNECT) {
|
||||||
/*
|
/*
|
||||||
* Only if connected we send a error response
|
* Only if connected we send a error response
|
||||||
|
Reference in New Issue
Block a user