added more server database fields
This commit is contained in:
parent
b05118a4b2
commit
2bdcf1a3f2
@ -42,6 +42,7 @@ int ibc_run = FALSE; /* Thread running */
|
|||||||
extern int T_Shutdown; /* Program shutdown */
|
extern int T_Shutdown; /* Program shutdown */
|
||||||
extern int internet; /* Internet status */
|
extern int internet; /* Internet status */
|
||||||
time_t scfg_time = (time_t)0; /* Servers config time */
|
time_t scfg_time = (time_t)0; /* Servers config time */
|
||||||
|
time_t now; /* Current time */
|
||||||
ncs_list *ncsl = NULL; /* Neighbours list */
|
ncs_list *ncsl = NULL; /* Neighbours list */
|
||||||
srv_list *servers = NULL; /* Active servers */
|
srv_list *servers = NULL; /* Active servers */
|
||||||
int ls; /* Listen socket */
|
int ls; /* Listen socket */
|
||||||
@ -68,7 +69,7 @@ static char *ncsstate[] = {
|
|||||||
void fill_ncslist(ncs_list **, char *, char *, char *);
|
void fill_ncslist(ncs_list **, char *, char *, char *);
|
||||||
void dump_ncslist(void);
|
void dump_ncslist(void);
|
||||||
void tidy_servers(srv_list **);
|
void tidy_servers(srv_list **);
|
||||||
void add_server(srv_list **, char *, int);
|
void add_server(srv_list **, char *, int, char *, char *, char *);
|
||||||
void del_server(srv_list **, char *);
|
void del_server(srv_list **, char *);
|
||||||
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);
|
||||||
@ -93,7 +94,7 @@ void fill_ncslist(ncs_list **fdp, char *server, char *myname, char *passwd)
|
|||||||
strncpy(tmp->myname, myname, 63);
|
strncpy(tmp->myname, myname, 63);
|
||||||
strncpy(tmp->passwd, passwd, 15);
|
strncpy(tmp->passwd, passwd, 15);
|
||||||
tmp->state = NCS_INIT;
|
tmp->state = NCS_INIT;
|
||||||
tmp->action = time(NULL);
|
tmp->action = now;
|
||||||
tmp->last = (time_t)0;
|
tmp->last = (time_t)0;
|
||||||
tmp->version = 0;
|
tmp->version = 0;
|
||||||
tmp->remove = FALSE;
|
tmp->remove = FALSE;
|
||||||
@ -119,12 +120,10 @@ void dump_ncslist(void)
|
|||||||
{
|
{
|
||||||
ncs_list *tmp;
|
ncs_list *tmp;
|
||||||
srv_list *srv;
|
srv_list *srv;
|
||||||
time_t now;
|
|
||||||
|
|
||||||
if (!changed)
|
if (!changed)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
now = time(NULL);
|
|
||||||
Syslog('r', "Server State Del Pwd Srv Next action");
|
Syslog('r', "Server State Del Pwd Srv Next action");
|
||||||
Syslog('r', "------------------------------ ------- --- --- --- -----------");
|
Syslog('r', "------------------------------ ------- --- --- --- -----------");
|
||||||
|
|
||||||
@ -157,7 +156,7 @@ void tidy_servers(srv_list ** fdp)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void add_server(srv_list **fdp, char *name, int hops)
|
void add_server(srv_list **fdp, char *name, int hops, char *prod, char *vers, char *fullname)
|
||||||
{
|
{
|
||||||
srv_list *tmp, *ta;
|
srv_list *tmp, *ta;
|
||||||
|
|
||||||
@ -165,7 +164,10 @@ void add_server(srv_list **fdp, char *name, int hops)
|
|||||||
memset(tmp, 0, sizeof(tmp));
|
memset(tmp, 0, sizeof(tmp));
|
||||||
tmp->next = NULL;
|
tmp->next = NULL;
|
||||||
strncpy(tmp->server, name, 63);
|
strncpy(tmp->server, name, 63);
|
||||||
tmp->connected = time(NULL);
|
strncpy(tmp->prod, prod, 20);
|
||||||
|
strncpy(tmp->vers, vers, 20);
|
||||||
|
strncpy(tmp->fullname, fullname, 35);
|
||||||
|
tmp->connected = now;
|
||||||
tmp->users = 0;
|
tmp->users = 0;
|
||||||
tmp->hops = hops;
|
tmp->hops = hops;
|
||||||
|
|
||||||
@ -241,7 +243,6 @@ void check_servers(void)
|
|||||||
FILE *fp;
|
FILE *fp;
|
||||||
ncs_list *tnsl;
|
ncs_list *tnsl;
|
||||||
int j, inlist;
|
int j, inlist;
|
||||||
time_t now;
|
|
||||||
int a1, a2, a3, a4;
|
int a1, a2, a3, a4;
|
||||||
struct servent *se;
|
struct servent *se;
|
||||||
struct hostent *he;
|
struct hostent *he;
|
||||||
@ -275,7 +276,7 @@ void check_servers(void)
|
|||||||
/*
|
/*
|
||||||
* First add this server name to the servers database.
|
* First add this server name to the servers database.
|
||||||
*/
|
*/
|
||||||
add_server(&servers, ibcsrv.myname, 0);
|
add_server(&servers, ibcsrv.myname, 0, (char *)"mbsebbs", (char *)VERSION, CFG.bbs_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -297,7 +298,7 @@ void check_servers(void)
|
|||||||
if (!inlist) {
|
if (!inlist) {
|
||||||
Syslog('r', " not in configuration, remove");
|
Syslog('r', " not in configuration, remove");
|
||||||
tnsl->remove = TRUE;
|
tnsl->remove = TRUE;
|
||||||
tnsl->action = time(NULL);
|
tnsl->action = now;
|
||||||
changed = TRUE;
|
changed = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -312,7 +313,6 @@ void check_servers(void)
|
|||||||
/*
|
/*
|
||||||
* Check if we need to make state changes
|
* Check if we need to make state changes
|
||||||
*/
|
*/
|
||||||
now = time(NULL);
|
|
||||||
for (tnsl = ncsl; tnsl; tnsl = tnsl->next) {
|
for (tnsl = ncsl; tnsl; tnsl = tnsl->next) {
|
||||||
if (((int)tnsl->action - (int)now) <= 0) {
|
if (((int)tnsl->action - (int)now) <= 0) {
|
||||||
switch (tnsl->state) {
|
switch (tnsl->state) {
|
||||||
@ -493,9 +493,9 @@ 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, *vers;
|
char *name, *hops, *id, *prod, *vers, *fullname;
|
||||||
time_t now;
|
|
||||||
unsigned long token;
|
unsigned long token;
|
||||||
|
int ihops;
|
||||||
|
|
||||||
for (tnsl = ncsl; tnsl; tnsl = tnsl->next) {
|
for (tnsl = ncsl; tnsl; tnsl = tnsl->next) {
|
||||||
if (strcmp(tnsl->server, hostname) == 0) {
|
if (strcmp(tnsl->server, hostname) == 0) {
|
||||||
@ -506,21 +506,25 @@ 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");
|
||||||
|
prod = strtok(NULL, " \0");
|
||||||
vers = strtok(NULL, "\0");
|
vers = strtok(NULL, "\0");
|
||||||
|
fullname = strtok(NULL, "\0");
|
||||||
|
ihops = atoi(hops) + 1;
|
||||||
|
|
||||||
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', "prod \"%s\"", printable(prod, 0));
|
||||||
Syslog('r', "vers \"%s\"", printable(vers, 0));
|
Syslog('r', "vers \"%s\"", printable(vers, 0));
|
||||||
|
Syslog('r', "full \"%s\"", printable(fullname, 0));
|
||||||
|
|
||||||
if (id == NULL) {
|
if (vers == NULL) {
|
||||||
sprintf(csbuf, "461 SERVER: Not enough parameters\r\n");
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
token = atoi(id);
|
token = atoi(id);
|
||||||
now = time(NULL);
|
|
||||||
|
|
||||||
if (tnsl->token) {
|
if (tnsl->token) {
|
||||||
/*
|
/*
|
||||||
@ -534,7 +538,7 @@ void command_server(char *hostname, char *parameters)
|
|||||||
tnsl->state = NCS_CONNECT;
|
tnsl->state = NCS_CONNECT;
|
||||||
tnsl->action = now + (time_t)10;
|
tnsl->action = now + (time_t)10;
|
||||||
Syslog('+', "IBC: connected with %s", tnsl->server);
|
Syslog('+', "IBC: connected with %s", tnsl->server);
|
||||||
add_server(&servers, tnsl->server, 1);
|
add_server(&servers, tnsl->server, ihops, prod, vers, fullname);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Syslog('r', "IBC: collision with %s", tnsl->server);
|
Syslog('r', "IBC: collision with %s", tnsl->server);
|
||||||
@ -555,7 +559,7 @@ void command_server(char *hostname, char *parameters)
|
|||||||
tnsl->state = NCS_CONNECT;
|
tnsl->state = NCS_CONNECT;
|
||||||
tnsl->action = now + (time_t)10;
|
tnsl->action = now + (time_t)10;
|
||||||
Syslog('+', "IBC: connected with %s", tnsl->server);
|
Syslog('+', "IBC: connected with %s", tnsl->server);
|
||||||
add_server(&servers, tnsl->server, 1);
|
add_server(&servers, tnsl->server, ihops, prod, vers, fullname);
|
||||||
changed = TRUE;
|
changed = TRUE;
|
||||||
} else {
|
} else {
|
||||||
Syslog('r', "IBC: got SERVER command without PASS command from %s", hostname);
|
Syslog('r', "IBC: got SERVER command without PASS command from %s", hostname);
|
||||||
@ -582,7 +586,7 @@ void command_squit(char *hostname, char *parameters)
|
|||||||
if (strcmp(name, tnsl->server) == 0) {
|
if (strcmp(name, tnsl->server) == 0) {
|
||||||
Syslog('+', "IBC: disconnect server %s: %s", name, message);
|
Syslog('+', "IBC: disconnect server %s: %s", name, message);
|
||||||
tnsl->state = NCS_HANGUP;
|
tnsl->state = NCS_HANGUP;
|
||||||
tnsl->action = time(NULL) + (time_t)120; // 2 minutes delay before calling again.
|
tnsl->action = now + (time_t)120; // 2 minutes delay before calling again.
|
||||||
tnsl->gotpass = FALSE;
|
tnsl->gotpass = FALSE;
|
||||||
tnsl->gotserver = FALSE;
|
tnsl->gotserver = FALSE;
|
||||||
tnsl->token = 0;
|
tnsl->token = 0;
|
||||||
@ -646,7 +650,7 @@ void receiver(struct servent *se)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
tnsl->last = time(NULL);
|
tnsl->last = now;
|
||||||
crbuf[strlen(crbuf) -2] = '\0';
|
crbuf[strlen(crbuf) -2] = '\0';
|
||||||
Syslog('r', "< %s: \"%s\"", hostname, printable(crbuf, 0));
|
Syslog('r', "< %s: \"%s\"", hostname, printable(crbuf, 0));
|
||||||
|
|
||||||
@ -662,9 +666,9 @@ void receiver(struct servent *se)
|
|||||||
command = strtok(crbuf, " \0");
|
command = strtok(crbuf, " \0");
|
||||||
parameters = strtok(NULL, "\0");
|
parameters = strtok(NULL, "\0");
|
||||||
}
|
}
|
||||||
// Syslog('r', "prefix \"%s\"", printable(prefix, 0));
|
Syslog('r', "prefix \"%s\"", printable(prefix, 0));
|
||||||
// Syslog('r', "command \"%s\"", printable(command, 0));
|
Syslog('r', "command \"%s\"", printable(command, 0));
|
||||||
// Syslog('r', "parameters \"%s\"", printable(parameters, 0));
|
Syslog('r', "parameters \"%s\"", printable(parameters, 0));
|
||||||
|
|
||||||
if (! strcmp(command, (char *)"PASS")) {
|
if (! strcmp(command, (char *)"PASS")) {
|
||||||
if (parameters == NULL) {
|
if (parameters == NULL) {
|
||||||
@ -747,6 +751,8 @@ void *ibc_thread(void *dummy)
|
|||||||
ibc_run = TRUE;
|
ibc_run = TRUE;
|
||||||
|
|
||||||
while (! T_Shutdown) {
|
while (! T_Shutdown) {
|
||||||
|
|
||||||
|
now = time(NULL);
|
||||||
/*
|
/*
|
||||||
* Check neighbour servers state
|
* Check neighbour servers state
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user