CLIP presentation enhanced, new ILABEL/OLABEL operators

This commit is contained in:
akool 1997-03-29 09:24:17 +00:00
parent 33d3e4239b
commit 7daf7bbf26
5 changed files with 148 additions and 122 deletions

View File

@ -1,4 +1,4 @@
ISDNLOG - Version 3.0 - 20-Mar-97 23:29
ISDNLOG - Version 3.0 - 28-Mar-97 20:49
isdnlog ist ein Tool zur Auswertung der Info's vom ISDN-S0-Bus sowie
@ -13,7 +13,7 @@ Fuer alle, die es nun ueberhaupt nicht mehr abwarten koennen, hier das
Quick-Installation-Guide
------------------------
1. Linux-2.0.29 + isdn4liunx-Patches (oder 2.0.30???) verwenden:
1. Linux-2.0.29 + isdn4kernel-2.0.29.5 verwenden:
CONFIG_ISDN=m
CONFIG_ISDN_DRV_TELES=m
@ -552,12 +552,40 @@ ACHTUNG: "MYPATH = /home/fred" wird als Variable zu "MYPATH=/home/fred".
Die dritte Sektion beschreibt spezifische Angaben fuer den isdnlog. Diese
Sektion wird durch [ISDNLOG] eingeleitet:
Sektion wird durch [ISDNLOG] eingeleitet.
Andreas, die folgenden Zeilen muss du noch dokumentieren:
RELOADCMD
STOPCMD
RELOADCMD
RELOADCMD = reload
Hiermit wird ein ausfuehrbares Programm (z.b. Shell-Script) angegeben,
mit dem isdnlog ein evtl. wildgewordenes isdn4linux reanimieren kann.
(Ein Beispiel findet sich im Kapitel 14.1 Watchdog)
STOPCMD = stop
Hiermit wird ein ausfuehrbares Programm (z.b. Shell-Script) angegeben,
mit dem isdnlog isdn4linux terminieren kann.
(Ein Beispiel findet sich im Kapitel 14.2 CHARGEMAX)
REBOOTCMD = /sbin/reboot
Hiermit wird ein ausfuehrbares Programm (z.b. Shell-Script) angegeben,
mit dem isdnlog Linux herunterfahren kann.
(Ein Beispiel findet sich im Kapitel 14.2 CHARGEMAX)
CHARGEMAX = 15.00
Hiermit wird (in DM) angegeben, wieviel Geld man pro Tag maximal
mit isdn4linux vertelefonieren moechte.
CONNECTMAX = 18000,0
Hiermit wird (in Sekunden) angegeben, wieviel Zeit man pro Monat
maximal Online sein moechte.
BYTEMAX = 67108864,0
Hiermit wird (in Byte) angegeben, wieviel Byte man maximal pro
Monat saugen moechte.
CURRENCY=factor,currency
@ -585,7 +613,7 @@ OLABEL=xxxxx
Hiermit kann definiert werden, wie die Console-Ausgaben aussehen sollen.
Fehlen diese Eintraege, wird
ILABEL=%b %e %T %ICall to tei %t from %N2 on %n2
OLABEL=%b %e %T %ICall to tei %t from %N2 on %n2
OLABEL=%b %e %T %Itei %t calling %N2 with %n2
angenommen (die bislang bekannte Optik)
Bei reinkommenden Verbindungen wird das "ILABEL", und bei rausgehenden
@ -601,21 +629,39 @@ koennen folgende Platzhalter angegeben werden:
%C Call reference
%Nx MSN (Telefonnummer) des Gegner's (siehe *1)
%nx Eigene MSN (Telefonnummer) (siehe *1)
%cx Via CLIP vermeldete MSN (siehe *1)
%A der Text " alias <MSN>", falls
CLIP-Meldung, sonst leer
%I Tabulation (siehe *2)
%a Wochentag (-> "Fri")
%b Monat (-> "Aug")
%e Tag im Monat (-> " 8")
%T Uhrzeit (-> "13:17:11")
%B B-Kanal (0, oder 1)
%k Nummer der ISDN-Karte, von der die Meldung kam (0 = 1. Karte)
*1 Bei %N sowie %n muss angegeben werden, wie die Telefonnummer ausgegeben
%/
%
%(
%) Falls die Nummer des Gegners bekannt, entsprechendes Zeichen,
sonst Leerstring
*1 Bei %N, %n sowie %c muss angegeben werden, wie die Telefonnummer ausgegeben
werden soll:
%N0 - Telefonnummer exakt so, wie von der VSt gemeldet
(z.b. "8989810530")
%N1 - Telefonnummer, von isdnlog um Vorwahl, vorlaufende "0" etc.
ergaenzt
ergaenzt (z.b. "+498989810530")
%N2 - Von isdnlog optimal "verschoenerte" Nummer, also Alias
aus "isdn.conf", mit Ortsnetz etc.
aus "isdn.conf" oder mit Ortsnetz etc.
(z.b. "+49 89/89810530, Muenchen")
%N3 - Vorwahl (z.b. "89")
%N4 - Rufnummer (z.b. "89810530")
%N5 - Alias
%N6 - Ortsnetz (z.b. "Muenchen")
%N7 - Areacode (z.b. "+49")
*2 Dieser Platzhalter wird von isdnlog folgendermassen aufgeloest:

View File

@ -1,4 +1,4 @@
/* $Id: isdnlog.c,v 1.2 1997/03/20 22:42:31 akool Exp $
/* $Id: isdnlog.c,v 1.3 1997/03/29 09:24:23 akool Exp $
*
* ISDN accounting for isdn4linux. (log-module)
*
@ -436,7 +436,7 @@ int set_options(int argc, char* argv[])
message = newmessage;
if (trace && isdaemon) {
printf("%s","Can not trace and daemon together!\n");
printf("%s","Can not trace daemonized!\n");
exit(20);
} /* if */
@ -450,7 +450,7 @@ int set_options(int argc, char* argv[])
syslogmessage = defaultmsg;
switch (fork()) {
case -1 : print_msg(PRT_ERR,"%s","Can not start fork()!\n");
case -1 : print_msg(PRT_ERR,"%s","Can not fork()!\n");
Exit(18);
break;
case 0 : break;
@ -481,7 +481,7 @@ static int read_param_file(char *FileName)
if (opt_dat != NULL)
{
print_msg(PRT_ERR,"Can not more than one option file (file %s)!\n", FileName);
print_msg(PRT_ERR, "Only one option file allowed (file %s)!\n", FileName);
return -1;
}

View File

@ -1,4 +1,4 @@
/* $Id: processor.c,v 1.2 1997/03/20 22:42:33 akool Exp $
/* $Id: processor.c,v 1.3 1997/03/29 09:24:25 akool Exp $
*
* ISDN accounting for isdn4linux. (log-module)
*
@ -19,6 +19,9 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log: processor.c,v $
* Revision 1.3 1997/03/29 09:24:25 akool
* CLIP presentation enhanced, new ILABEL/OLABEL operators
*
* Revision 1.2 1997/03/20 22:42:33 akool
* Some minor enhancements.
*
@ -376,7 +379,7 @@ static int facility(int type, int l)
switch(type) {
case AOC_INITIAL : ID = OP = EH = MP = 0;
#if 0
#if 0
if (asnp == NULL)
return(AOC_OTHER);
#endif
@ -386,7 +389,7 @@ static int facility(int type, int l)
case 0x91 : aoc_debug(c, "Remote Operation Protocol"); break;
case 0x92 : aoc_debug(c, "CMIP Protocol"); break;
case 0x93 : aoc_debug(c, "ACSE Protocol"); break;
default : aoc_debug(c, "UNKNOWN Protocol");
default : aoc_debug(c, "UNKNOWN Protocol");
return(AOC_OTHER);
} /* switch */
@ -520,7 +523,7 @@ static int facility(int type, int l)
} /* switch */
aoc_debug(c, px1);
c = strtol(asnp += 3, NIL, 16);
sprintf(s, "Enumeration type BasicService=%d", c);
aoc_debug(c, s);
@ -543,7 +546,7 @@ static int facility(int type, int l)
} /* switch */
aoc_debug(c, px2);
c = strtol(asnp += 3, NIL, 16);
sprintf(s, "SEQUENCE, Address (Zieladresse)=%d", c);
aoc_debug(c, s);
@ -564,7 +567,7 @@ static int facility(int type, int l)
aoc_debug(l, s);
c = strtol(asnp += 3, NIL, 16);
sprintf(s, "Aufzhlungstyp, PublicTypeOfNumber=%d", c);
sprintf(s, "Aufzaehlungstyp, PublicTypeOfNumber=%d", c);
aoc_debug(c, s);
l = strtol(asnp += 3, NIL, 16);
@ -580,7 +583,7 @@ static int facility(int type, int l)
case 0x05 : px3 = "abbreviated Number"; break;
default : px3 = "UNKNOWN PublicTypeOfNumber"; break;
} /* switch */
aoc_debug(c, px3);
break;
@ -692,7 +695,7 @@ static int facility(int type, int l)
c = strtol(asnp += 3, NIL, 16);
sprintf(s, "ServedUserNr=%d", c);
aoc_debug(c, s);
l = strtol(asnp += 3, NIL, 16);
sprintf(s, "length=%d", l);
aoc_debug(l, s);
@ -1183,7 +1186,7 @@ static void buildnumber(char *num, int oc3, int oc3a, char *result, int version)
switch (oc3 & 0x70) { /* Calling party number Information element, Octet 3 - Table 4-11/Q.931 */
case 0x00 : if (*num) { /* 000 Unknown */
char *amt = amtsholung;
while (amt && *amt) {
int len = strchr(amt, ':') ? strchr(amt, ':') - amt : strlen(amt);
@ -1200,7 +1203,7 @@ static void buildnumber(char *num, int oc3, int oc3a, char *result, int version)
#endif
break;
} /* if */
amt += len + (strchr(amt, ':') ? 1 : 0);
} /* while */
@ -1301,7 +1304,7 @@ static void chargemaxAction(int chan, double charge_overflow)
sprintf(cmd, "%s/dontstop", confdir());
if (access(cmd, F_OK)) {
sprintf(cmd, "%s/%s", confdir(), STOPCMD);
@ -1518,14 +1521,14 @@ static void decode(int chan, register char *p, int type, int version)
switch (c & 0xf0) {
case 0x00 :
case 0x80 : sprintf(ps, "CCITT standartisierte Codierung"); break;
case 0x80 : sprintf(ps, "CCITT standartisierte Codierung"); break;
case 0x20 :
case 0xa0 : sprintf(ps, "Reserve"); break;
case 0xa0 : sprintf(ps, "Reserve"); break;
case 0x40 :
case 0xc0 : sprintf(ps, "reserviert f<EFBFBD>r nationale Standards"); break;
case 0xc0 : sprintf(ps, "reserviert fuer nationale Standards"); break;
case 0x60 :
case 0xe0 : sprintf(ps, "Standard bzgl. Localierung"); break;
default : sprintf(ps, "UNKNOWN #%d", c & 0xf0); break;
case 0xe0 : sprintf(ps, "Standard bzgl. Localierung"); break;
default : sprintf(ps, "UNKNOWN #%d", c & 0xf0); break;
} /* switch */
Q931dump(TYPE_STRING, c, s, version);
@ -1559,7 +1562,7 @@ static void decode(int chan, register char *p, int type, int version)
case 0x0a : py = "Network beyond inter-working point"; break;
default : py = ""; break;
} /* switch */
c = strtol(p + 6, NIL, 16);
call[chan].cause = c & 0x7f;
@ -1972,31 +1975,41 @@ static void decode(int chan, register char *p, int type, int version)
if (*call[chan].onum[CALLING]) /* another Calling-party? */
if (strcmp(call[chan].onum[CALLING], s)) /* different! */
if ((call[chan].screening == 3) && ((oc3a & 3) < 3)) { /* we believe the first one! */
strcpy(call[6].onum[CALLING], s);
buildnumber(s, oc3, oc3a, call[6].num[CALLING], version);
strcpy(call[6].vnum[CALLING], vnum(6, CALLING));
strcpy(call[chan].onum[CLIP], s);
buildnumber(s, oc3, oc3a, call[chan].num[CLIP], version);
strcpy(call[chan].vnum[CLIP], vnum(6, CLIP));
#ifdef Q931
if (q931dmp && (*call[chan].vnum[CALLING] != '?') && *call[chan].vorwahl[CALLING] && oc3 && ((oc3 & 0x70) != 0x40)) {
if (q931dmp && (*call[chan].vnum[CLIP] != '?') && *call[chan].vorwahl[CLIP] && oc3 && ((oc3 & 0x70) != 0x40)) {
auto char s[BUFSIZ];
sprintf(s, "%s %s/%s, %s",
call[6].areacode[CALLING],
call[6].vorwahl[CALLING],
call[6].rufnummer[CALLING],
call[6].area[CALLING]);
call[chan].areacode[CLIP],
call[chan].vorwahl[CLIP],
call[chan].rufnummer[CLIP],
call[chan].area[CLIP]);
Q931dump(TYPE_STRING, -2, s, version);
} /* if */
#endif
sprintf(s1, "CLIP %s", call[6].vnum[CALLING]);
sprintf(s1, "CLIP %s", call[chan].vnum[CLIP]);
info(chan, PRT_SHOWNUMBERS, STATE_RING, s1);
break;
}
else {
warn = 1;
strcpy(call[6].vnum[CALLING], call[chan].vnum[CALLING]);
strcpy(call[chan].onum[CLIP], call[chan].onum[CALLING]);
strcpy(call[chan].num[CLIP], call[chan].num[CALLING]);
strcpy(call[chan].vnum[CLIP], call[chan].vnum[CALLING]);
call[chan].confentry[CLIP] = call[chan].confentry[CALLING];
strcpy(call[chan].areacode[CLIP], call[chan].areacode[CALLING]);
strcpy(call[chan].vorwahl[CLIP], call[chan].vorwahl[CALLING]);
strcpy(call[chan].rufnummer[CLIP], call[chan].rufnummer[CALLING]);
strcpy(call[chan].alias[CLIP], call[chan].alias[CALLING]);
strcpy(call[chan].area[CLIP], call[chan].area[CALLING]);
/* fall thru, and overwrite ... */
} /* else */
@ -2021,9 +2034,10 @@ static void decode(int chan, register char *p, int type, int version)
#endif
if (warn) {
sprintf(s1, "CLIP %s", call[6].vnum[CALLING]);
sprintf(s1, "CLIP %s", call[chan].vnum[CLIP]);
info(chan, PRT_SHOWNUMBERS, STATE_RING, s1);
} /* if */
break;
@ -2093,7 +2107,7 @@ static void decode(int chan, register char *p, int type, int version)
if (version != VERSION_1TR6) {
if (call[chan].knock)
info(chan, PRT_SHOWNUMBERS, STATE_RING, "********************");
sprintf(s, "RING (%s)", call[chan].service);
info(chan, PRT_SHOWNUMBERS, STATE_RING, s);
@ -2101,7 +2115,7 @@ static void decode(int chan, register char *p, int type, int version)
info(chan, PRT_SHOWNUMBERS, STATE_RING, "NO FREE B-CHANNEL !!");
info(chan, PRT_SHOWNUMBERS, STATE_RING, "********************");
} /* if */
if (sound)
ringer(chan, RING_RING);
} /* if */
@ -2402,7 +2416,7 @@ escape: for (c = 0; c <= sxp; c++)
px += sprintf(px, "CHANNEL: ");
switch (c) {
case 0x80 : px += sprintf(px, "BRI, kein Kanal");
case 0x80 : px += sprintf(px, "BRI, kein Kanal");
call[chan].knock = 1;
break;
case 0x81 : px += sprintf(px, "BRI, B1 bevorzugt"); break;

View File

@ -1,4 +1,4 @@
/* $Id: tools.c,v 1.1 1997/03/16 20:59:24 luethje Exp $
/* $Id: tools.c,v 1.2 1997/03/29 09:24:33 akool Exp $
*
* ISDN accounting for isdn4linux. (Utilities)
*
@ -19,6 +19,9 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log: tools.c,v $
* Revision 1.2 1997/03/29 09:24:33 akool
* CLIP presentation enhanced, new ILABEL/OLABEL operators
*
* Revision 1.1 1997/03/16 20:59:24 luethje
* Added the source code isdnlog. isdnlog is not working yet.
* A workaround for that problem:
@ -189,7 +192,7 @@ char *num2nam(char *num, int si)
/****************************************************************************/
#ifdef _GNU_SOURCE
#ifdef GLIBC /* _GNU_SOURCE */
char *double2str(double n, int l, int d, int flags)
{
if (++retnum == MAXRET)
@ -548,12 +551,10 @@ int iprintf(char *obuf, int chan, register char *fmt, ...)
register int c, i, who;
register short int width, ndigit;
register int ndfnd, ljust, zfill, lflag;
register long l;
register int unknown = !*call[chan].digits && !*call[chan].onum[OTHER];
register char *op = obuf;
#if 0
auto int decpt, sign;
#endif
auto char buf[MAXDIG + 1]; /* +1 for sign */
auto char sx[BUFSIZ];
static char nul[] = "(null)";
auto va_list ap;
@ -637,64 +638,6 @@ int iprintf(char *obuf, int chan, register char *fmt, ...)
who = OTHER;
switch (c) {
case 'X' : lflag++;
case 'x' : c = 16;
goto oxu;
case 'U' : lflag++;
case 'u' : c = 10;
goto oxu;
case 'O' : lflag++;
case 'o' : c = 8;
oxu:
if (lflag)
p = ltoa((unsigned long)GETARG(long), p, c, 0);
else
p = itoa((unsigned int)GETARG(int), p, c, 0);
break;
case 'D' : lflag++;
case 'd' : if (lflag) {
if ((l = GETARG(long)) < 0) {
*p++ = '-';
l = -l;
} /* if */
p = ltoa((unsigned long)l, p, 10, 0);
}
else {
if ((i = GETARG(int)) < 0) {
*p++ = '-';
i = -i;
} /* if */
p = itoa((unsigned int)i, p, 10, 0);
} /* else */
break;
#if 0
case 'e' : if (!ndfnd)
ndigit = 6;
ndigit++;
p = ecvt(GETARG(double), ndigit, &decpt, &sign) + ndigit;
break;
case 'f' : if (!ndfnd)
ndigit = 6;
p = fcvt(GETARG(double), ndigit, &decpt, &sign) + ndigit;
break;
case 'g' : if (!ndfnd)
ndigit = 6;
p = gcvt(GETARG(double), ndigit, p) + ndigit;
break;
#endif
case 'c' : zfill = ' ';
*p++ = GETARG(int);
break;
case 's' : zfill = ' ';
if ((s = GETARG(char *)) == NULL)
@ -719,8 +662,18 @@ oxu:
case 'B' : p = itoa(chan, p, 10, 0);
break;
case 'n' : who = ME;
case 'N' : if (!ndigit)
case 'A' : s = sx;
if (*call[chan].onum[CLIP])
sprintf(sx, " alias %s", call[chan].vnum[CLIP]);
else
*sx = 0;
p = s + strlen(s);
break;
case 'n' : who = ME; goto go;
case 'c' : who = CLIP; goto go;
case 'N' :
go: if (!ndigit)
ndigit = 32767;
if (*fmt) {
@ -732,6 +685,7 @@ oxu:
case '4' : s = call[chan].rufnummer[who]; break;
case '5' : s = call[chan].alias[who]; break;
case '6' : s = call[chan].area[who]; break;
case '7' : s = call[chan].areacode[who]; break;
default : s = nul; break;
} /* switch */
@ -758,6 +712,14 @@ oxu:
case 'T' : s = idate + 8; p = s + 8;
break;
case ' ' :
case '(' :
case ')' :
case '/' : sprintf(sx, "%c", unknown ? 0 : c);
s = sx;
p = s + strlen(s);
break;
default : *p++ = c;
break;
} /* switch */

View File

@ -1,4 +1,4 @@
/* $Id: tools.h,v 1.6 1997/03/23 23:12:05 luethje Exp $
/* $Id: tools.h,v 1.7 1997/03/29 09:24:34 akool Exp $
*
* ISDN accounting for isdn4linux.
*
@ -19,6 +19,9 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log: tools.h,v $
* Revision 1.7 1997/03/29 09:24:34 akool
* CLIP presentation enhanced, new ILABEL/OLABEL operators
*
* Revision 1.6 1997/03/23 23:12:05 luethje
* improved performance
*
@ -299,6 +302,7 @@
#define OTHER (call[chan].dialin ? CALLING : CALLED)
#define ME (call[chan].dialin ? CALLED : CALLING)
#define CLIP 2
#define _OTHER(call) (call->dialin ? CALLING : CALLED)
#define _ME(call) (call->dialin ? CALLED : CALLING)
@ -410,13 +414,13 @@ typedef struct {
int bearer;
int si1; /* Service Indicator entsprechend i4l convention */
int si11; /* if (si1 == 1) :: 0 = Telefon analog / 1 = Telefon digital */
char onum[2][NUMSIZE];
char onum[3][NUMSIZE];
int screening;
char num[2][NUMSIZE];
char vnum[2][256];
char num[3][NUMSIZE];
char vnum[3][256];
char id[32];
char usage[16];
int confentry[2];
int confentry[3];
time_t time;
time_t connect;
time_t t_duration;
@ -429,11 +433,11 @@ typedef struct {
long lobytes;
double ibps;
double obps;
char areacode[2][NUMSIZE];
char vorwahl[2][NUMSIZE];
char rufnummer[2][NUMSIZE];
char alias[2][NUMSIZE];
char area[2][128];
char areacode[3][NUMSIZE];
char vorwahl[3][NUMSIZE];
char rufnummer[3][NUMSIZE];
char alias[3][NUMSIZE];
char area[3][128];
char money[64];
char currency[32];
char msg[128];