Added TCP/IP trafic limits

This commit is contained in:
Michiel Broek
2002-03-23 13:12:29 +00:00
parent 8ffd82f9f2
commit 4462d9febb
9 changed files with 76 additions and 7 deletions

View File

@@ -101,6 +101,7 @@ extern int isdn_lines; /* ISDN lines available */
extern int pots_free; /* POTS lines free */
extern int isdn_free; /* ISDN lines free */
extern pp_list *pl; /* List of tty ports */
extern int ipmailers; /* TCP/IP mail sessions */
@@ -1157,7 +1158,7 @@ void scheduler(void)
*/
if (calllist[call_entry].addr.zone && !calllist[call_entry].calling &&
(calllist[call_entry].cst.trytime < now)) {
if ((calllist[call_entry].callmode == CM_INET) && (runtasktype(CM_INET) < TCFG.max_tcp) && internet) {
if ((calllist[call_entry].callmode == CM_INET) && (ipmailers < TCFG.max_tcp) && internet) {
found = TRUE;
break;
}

View File

@@ -143,6 +143,20 @@ char *exe_cmd(char *in)
}
}
/*
* ATCP:1,pid;
* 100:0;
* 200:1,Syntax Error;
*/
if (strncmp(cmd, "ATCP", 4) == 0) {
if (reg_ip(token) == 0)
return obuf;
else {
stat_inc_serr();
return ebuf;
}
}
/*
* ATTY:2,pid,tty;
* 100:0;

View File

@@ -37,6 +37,7 @@
extern reg_info reginfo[MAXCLIENT]; /* Array with clients */
static int entrypos = 0; /* Status pointer */
static int mailers = 0; /* Registered mailers */
int ipmailers = 0; /* TCP/IP mail sessions */
/***********************************************************************
@@ -104,7 +105,8 @@ int reg_newcon(char *data)
stat_inc_clients();
if (strcmp(prg, (char *)"mbcico") == 0)
mailers++;
tasklog('-', "Registered client pgm \"%s\", pid %s, slot %d, mailers %d", prg, pid, retval, mailers);
tasklog('-', "Registered client pgm \"%s\", pid %s, slot %d, mailers %d, TCP/IP %d",
prg, pid, retval, mailers, ipmailers);
return retval;
}
@@ -122,7 +124,10 @@ int reg_closecon(char *data)
if (strcmp(reginfo[rec].prg, (char *)"mbcico") == 0)
mailers--;
tasklog('-', "Unregistered client pgm \"%s\", pid %s, slot %d, mailers %d", reginfo[rec].prg, pid, rec, mailers);
if (reginfo[rec].istcp)
ipmailers--;
tasklog('-', "Unregistered client pgm \"%s\", pid %s, slot %d, mailers %d, TCP/IP %d",
reginfo[rec].prg, pid, rec, mailers, ipmailers);
memset(&reginfo[rec], 0, sizeof(reg_info));
stat_dec_clients();
return 0;
@@ -145,8 +150,10 @@ void reg_check(void)
if (errno == ESRCH) {
if (strcmp(reginfo[i].prg, (char *)"mbcico") == 0)
mailers--;
tasklog('?', "Stale registration found for pid %d (%s), mailers now %d",
reginfo[i].pid, reginfo[i].prg, mailers);
if (reginfo[i].istcp)
ipmailers--;
tasklog('?', "Stale registration found for pid %d (%s), mailers now %d, TCP/IP now %d",
reginfo[i].pid, reginfo[i].prg, mailers, ipmailers);
memset(&reginfo[i], 0, sizeof(reg_info));
stat_dec_clients();
}
@@ -197,6 +204,29 @@ int reg_doing(char *data)
/*
* Registrate connection as TCP/IP connection
*/
int reg_ip(char *data)
{
char *cnt, *pid;
int rec;
cnt = strtok(data, ",");
pid = strtok(NULL, ";");
if ((rec = reg_find(pid)) == -1)
return -1;
reginfo[rec].istcp = TRUE;
reginfo[rec].lastcon = time(NULL);
ipmailers++;
tasklog('?', "TCP/IP session registered, now %d sessions", ipmailers);
return 0;
}
/*
* Update timer using NOP
*/

View File

@@ -22,6 +22,7 @@ typedef struct _reg_info {
unsigned silent : 1; /* Do not disturb */
unsigned chatting : 1; /* User is chatting */
unsigned ismsg : 1; /* Message waiting */
unsigned istcp : 1; /* Is a TCP/IP session */
int channel; /* Chat channel */
int ptr_in; /* Input buffer pointer */
int ptr_out; /* Output buffer ptr */
@@ -30,11 +31,13 @@ typedef struct _reg_info {
} reg_info;
void reg_init(void);
int reg_newcon(char *);
int reg_closecon(char *);
void reg_check(void);
int reg_doing(char *);
int reg_ip(char *);
int reg_nop(char *);
int reg_timer(int, char *);
int reg_tty(char *);