Added squit command
This commit is contained in:
parent
66afcb540b
commit
80a68d037c
@ -68,6 +68,8 @@ void dump_ncslist(void);
|
|||||||
int send_msg(int, struct sockaddr_in, char *, char *);
|
int send_msg(int, struct sockaddr_in, char *, char *);
|
||||||
void check_servers(void);
|
void check_servers(void);
|
||||||
void command_pass(char *, char *);
|
void command_pass(char *, char *);
|
||||||
|
void command_server(char *, char *);
|
||||||
|
void command_squit(char *, char *);
|
||||||
void receiver(struct servent *);
|
void receiver(struct servent *);
|
||||||
|
|
||||||
|
|
||||||
@ -323,6 +325,11 @@ void check_servers(void)
|
|||||||
}
|
}
|
||||||
tnsl->action = now + (time_t)10;
|
tnsl->action = now + (time_t)10;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case NCS_HANGUP: Syslog('r', "%s hangup", tnsl->server);
|
||||||
|
tnsl->action = now + (time_t)1;
|
||||||
|
tnsl->state = NCS_CALL;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -376,7 +383,7 @@ void command_pass(char *hostname, char *parameters)
|
|||||||
void command_server(char *hostname, char *parameters)
|
void command_server(char *hostname, char *parameters)
|
||||||
{
|
{
|
||||||
ncs_list *tnsl;
|
ncs_list *tnsl;
|
||||||
char *name, *hops, *id;
|
char *name, *hops, *id, *vers;
|
||||||
time_t now;
|
time_t now;
|
||||||
unsigned long token;
|
unsigned long token;
|
||||||
|
|
||||||
@ -389,11 +396,12 @@ void command_server(char *hostname, char *parameters)
|
|||||||
name = strtok(parameters, " \0");
|
name = strtok(parameters, " \0");
|
||||||
hops = strtok(NULL, " \0");
|
hops = strtok(NULL, " \0");
|
||||||
id = strtok(NULL, " \0");
|
id = strtok(NULL, " \0");
|
||||||
|
vers = strtok(NULL, "\0");
|
||||||
|
|
||||||
Syslog('r', "name \"%s\"", printable(name, 0));
|
Syslog('r', "name \"%s\"", printable(name, 0));
|
||||||
Syslog('r', "hops \"%s\"", printable(hops, 0));
|
Syslog('r', "hops \"%s\"", printable(hops, 0));
|
||||||
Syslog('r', "id \"%s\"", printable(id, 0));
|
Syslog('r', "id \"%s\"", printable(id, 0));
|
||||||
Syslog('r', "vers \"%s\"", printable(parameters, 0));
|
Syslog('r', "vers \"%s\"", printable(vers, 0));
|
||||||
|
|
||||||
if (id == NULL) {
|
if (id == NULL) {
|
||||||
sprintf(csbuf, "461 SERVER: Not enough parameters\r\n");
|
sprintf(csbuf, "461 SERVER: Not enough parameters\r\n");
|
||||||
@ -445,6 +453,33 @@ void command_server(char *hostname, char *parameters)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void command_squit(char *hostname, char *parameters)
|
||||||
|
{
|
||||||
|
ncs_list *tnsl;
|
||||||
|
char *name, *message;
|
||||||
|
|
||||||
|
for (tnsl = ncsl; tnsl; tnsl = tnsl->next) {
|
||||||
|
if (strcmp(tnsl->server, hostname) == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
name = strtok(parameters, " \0");
|
||||||
|
message = strtok(NULL, "\0");
|
||||||
|
|
||||||
|
if ((tnsl->state == NCS_CONNECT) && (strcmp(hostname, name) == 0)) {
|
||||||
|
Syslog('+', "IBC: disconnect server %s: %s", name, message);
|
||||||
|
}
|
||||||
|
tnsl->state = NCS_HANGUP;
|
||||||
|
tnsl->action = time(NULL) + (time_t)120; // 2 minutes delay before calling again.
|
||||||
|
tnsl->gotpass = FALSE;
|
||||||
|
tnsl->gotserver = FALSE;
|
||||||
|
tnsl->token = 0;
|
||||||
|
changed = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void receiver(struct servent *se)
|
void receiver(struct servent *se)
|
||||||
{
|
{
|
||||||
struct pollfd pfd;
|
struct pollfd pfd;
|
||||||
@ -537,6 +572,13 @@ void receiver(struct servent *se)
|
|||||||
/*
|
/*
|
||||||
* Just accept
|
* Just accept
|
||||||
*/
|
*/
|
||||||
|
} else if (! strcmp(command, (char *)"SQUIT")) {
|
||||||
|
if (parameters == NULL) {
|
||||||
|
sprintf(csbuf, "461 %s: Not enough parameters\r\n", command);
|
||||||
|
send_msg(tnsl->socket, tnsl->servaddr_in, tnsl->server, csbuf);
|
||||||
|
} else {
|
||||||
|
command_squit(hostname, parameters);
|
||||||
|
}
|
||||||
} else if (atoi(command)) {
|
} else if (atoi(command)) {
|
||||||
Syslog('r', "IBC: Got error %d", atoi(command));
|
Syslog('r', "IBC: Got error %d", atoi(command));
|
||||||
} else if (tnsl->state == NCS_CONNECT) {
|
} else if (tnsl->state == NCS_CONNECT) {
|
||||||
@ -560,6 +602,7 @@ void receiver(struct servent *se)
|
|||||||
void *ibc_thread(void *dummy)
|
void *ibc_thread(void *dummy)
|
||||||
{
|
{
|
||||||
struct servent *se;
|
struct servent *se;
|
||||||
|
ncs_list *tnsl;
|
||||||
|
|
||||||
Syslog('+', "Starting IBC thread");
|
Syslog('+', "Starting IBC thread");
|
||||||
|
|
||||||
@ -592,6 +635,18 @@ void *ibc_thread(void *dummy)
|
|||||||
* First check Shutdown requested
|
* First check Shutdown requested
|
||||||
*/
|
*/
|
||||||
if (T_Shutdown) {
|
if (T_Shutdown) {
|
||||||
|
for (tnsl = ncsl; tnsl; tnsl = tnsl->next) {
|
||||||
|
if (tnsl->state == NCS_CONNECT) {
|
||||||
|
sprintf(csbuf, "SQUIT %s System shutdown\r\n", tnsl->server);
|
||||||
|
send_msg(tnsl->socket, tnsl->servaddr_in, tnsl->server, csbuf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Cleanup
|
||||||
|
*/
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user