diff --git a/isdnlog/Makefile.in b/isdnlog/Makefile.in index 4d067792..795041fb 100644 --- a/isdnlog/Makefile.in +++ b/isdnlog/Makefile.in @@ -19,6 +19,9 @@ ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ## ## $Log$ +## Revision 1.17 1997/04/20 23:44:46 luethje +## some primitve changes +## ## Revision 1.16 1997/04/20 22:55:14 luethje ## isdnrep has new features (Documentation will follow ;-)): ## -variable format string @@ -186,7 +189,7 @@ SERVICEFILE = /etc/services # DON'T EDIT BELOW THIS LINE ###################################################################### -VERSION = 2.99.12 +VERSION = 2.99.13 ifeq ($(POSTGRES),1) DEFS += -DPOSTGRES diff --git a/isdnlog/README b/isdnlog/README index 6fc2f2c5..18b9d054 100644 --- a/isdnlog/README +++ b/isdnlog/README @@ -1,7 +1,8 @@ # Lock und PID-Files # Beschreibung, was bei der Installation genau gemacht werden muss +# und was gemacht wird. # (isdn.conf vorhanden oder neu) -ISDNLOG - Version 3.0 - 31-Mar-97 22:09 +ISDNLOG - Version 3.0 - 4-Mai-97 22:09 isdnlog ist ein Tool zur Auswertung der Info's vom ISDN-S0-Bus sowie @@ -141,9 +142,11 @@ Sourcen. Aenderungen seit Version 2.50: - - Konfigurationsdatei heisst jetzt isdn.conf statt isdnlog.conf - - Neue Syntax der Konfigurationsdatei + - Konfigurationsdateien heissen jetzt isdn.conf, callerid.conf und + ~/.isdn statt isdnlog.conf + - Neue Syntax der Konfigurationsdateien - Watchdog-Funktion (isdnlog ueberwacht isdn4linux) + - HTML-Ausgabe des isdnrep Aenderungen seit Version 2.41: @@ -338,10 +341,6 @@ Dazu siehe jedoch Kapitel 15. Dual-Mode ! 3. Installation --------------- -Der X11-Client ist zwar im isdnlog-Paket enthalten, aber es ist _nicht_ -zwingend notwendig ihn einzusetzen. Der isdnlog laeuft auch weiter -wie gewohnt, ohne den Client. - Nun kann isdnlog ausgepackt (wohl bereits geschehen ;-) und erstellt sowie installiert werden: @@ -350,8 +349,9 @@ sowie installiert werden: cd isdnlog- make install -Vor dem "make" koennen folgende Eintraege im "Makefile" den eigenen -Gegebenheiten angepasst werden: +Vor dem "make" koennen folgende Eintraege koennen im Installationsmenue +den eigenen Gegebenheiten angepasst werden. Bitte nicht mehr direkt im Makefile +editieren, da diese Eintraege ueberschrieben werden. COPTS Compiler-Optionen fuer den gcc @@ -417,34 +417,15 @@ ACHTUNG: Durch die Syntaxandaerung und den Erweiterungen, muessen folgende Anderungen _zuerst_ an der bestehenden isdnlog.conf durchgefuehrt werden: - - MYPREFIX wird durch AREACODE ersetzt. - - Es gibt einen weiteren zwingenden Eintrag COUNTRYCODE. + Bei der Installation von isdnlog werden automatisch die neuen + Konfigurationsdatei angelegt. - COUNTRYCODE. beinhaltet die Anwahl an das eigene Land von aussen - her. Die beiden Eintrage sollten also folgende Form aufweisen: - - COUNTRYCODE=+49 # fuer Anwender innerhalb Deutschland - AREA=7531 # fuer Anwender im Ortsnetz Konstanz - -Wer sowohl das Motif-Development-Kit 2.0 (und hoeher) besitzt, und -dazu nicht vor Software im Alpha-Stadium zurueckschreckt, kann sich mit - - make xinstall - -den X11-Client "xisdn" erstellen. - -In der Datei "/etc/services" sollte der folgende Eintrag eingefuegt werden, -falls noch nicht vorhanden: - -isdnlog 20011/tcp isdnlog - -Der X11-Client benoetigt eine eigene Resource-Datei. -Diese hat den Namen "Isdn". -Waehrend der Installation wird die Datei in das Verzeichnis -"/usr/X11R6/lib/X11/app-defaults" kopiert. -Wenn dieses bei der Installation unterdrueckt wird, muss dem X11-Client -"von Hand" mitgeteilt werden, wo sich sein Resourcen-File befindet: -"export XENVIRONMENT=./Isdn" + Wenn isdnlog noch nie installiert war, muss noch die Datei + callerid.conf editiert werden. + Bestand schon eine aeltere Version von isdnlog und wurde der alte + Pfad der Dateien korrekt im Installationsmenue angegeben, + werden alle Daten aus der alten Datei isdnlog.conf in die neuen + uebernommen. Es sollte also keine Nachbearbeitung noetig sein. Im Verzeichnis "xisdnload" befindet sich ein weiterer X11-Client von Frank Strauss (strauss@escape.de), der die Durchsatz-Rate pro B-Kanal @@ -579,7 +560,7 @@ LOGFILE = /var/log/isdn.log Dieses ist das Logfile in dem isdnlog alle Gespraeche ablegt, und isdnrep sie anschliessend anzeigt. Wenn diese sich in einem anderen Platz befindet, -als zur Compilationszeitpinkt (in der Regel /var/log/isdn.log), dann kann +als zur Compilationszeitpunkt (in der Regel /var/log/isdn.log), dann kann dieses hier passieren. Die Option "-f" vom isdnrep ueberschreibt diesen Wert dann allerdings wieder. @@ -642,6 +623,33 @@ angegeben zu werden. Defaultmaessig steht im isdnrep "0.12,DM". Daher entfaellt diese Angabe fuer Deutschland. + Wenn man zum Beispiel die Nettogebuehren (ohne MwSt.) sich anzeigen + lassen will, kann man hier z. B. folgenden Wert setzen: + + CURRENCY=0.1043,DM + +Fuer den isdnrep kann man einen oder mehrere Formatsstrings definieren, +wie der isdnrep die einzelnen Gebuehren anzeigen soll. Die genaue Syntax +wird unter dem Kapitel isdnrep beschrieben. + +Alle Formateintraege sind optional. Bei der Installation werden diese +allerdings erzeugt. + +Die folgenden beiden sind Standard-Eintraege, die der isdnrep sucht: + +REPFMT = " %X %D %15.15H %T %-15.15F %7u %U %I %O" +REPFMTWWW = "%X %D %17.17H %T %-17.17F %-20.20l %9u %U %I %O" + +Der erste ist fuer den "normalen" Gebuehrenausdruck. Der zweite wird +verwendet, falls die Ausgabe im HTML-Format erfolgen soll. + +Es koennen noch weitere angegeben werden: + +REPFMTxxx = ... + +Fuer "xxx" kann eine beliebige Zeichenfolge ohne Leerzeichen und Tabulator +stehen. Dieser Formatstring wird dann vom isdnrep verwendet mit der +Option -Fxxx. ILABEL=xxxxx OLABEL=xxxxx @@ -1463,8 +1471,7 @@ START={ TIME = 8-14,16-22 } -*************** Bis hier ist sl gekommen, die Doku zu ueberarbeiten *********** -Die letzte Zeile wird also wie folgt expandiert als Kommando, wenn ich +Die letzte Sektion wird also wie folgt expandiert als Kommando, wenn ich jemanden anrufe mit der Nummer 0815 (Meine MSN 040/1234): "/bin/auplay OC 0401234 0815" @@ -1474,8 +1481,8 @@ Ausgehendes Gspraech (O), Ereignis CONNECT (C) Nummer des Anrufenden (also Meine) Nummer des Angerufenden -Die Variablen von isdnlog ($1, $2, ..) kann man nicht in geschweiften Klammern -setzen. Also auch nicht anhaengen. +Die Variablen von isdnlog ($1, $2, ..) kann man ebenfalls in geschweiften +Klammern setzen. Also auch nicht anhaengen. Wenn eine unbekannte Variable verlangt wird (meistens wohl Tipp-Fehler;-)), dann wird die mit einem "?" ersetzt, damit wenigstens die Parameterzahl @@ -1512,24 +1519,101 @@ ACHTUNG: Bei eigenen MSN's, auf die kein eigenes Geraet reagiert 4.2.6 Konkretes Beispiel fuer die "-S" Option ---------------------------------------------- -MYPREFIX = 0815 +[GLOBAL] +AREACODE = 0815 +COUNTRYCODE = 49 + +[VARIABLES] PLAYER = /usr/bin/auplay SOUNDS = /usr/sounds -START = O R L = $PLAYER ${SOUNDS}/unknown_ring.au,,8-14,16-22;\ - IOA = $PLAYER ${SOUNDS}/pay.au,,8-14,16-22;\ - IOC U = /usr/bin/who_is_it $2 $3;\ - IOH = $PLAYER ${SOUNDS}/hangup.au,,8-14,16-22;\ - IORAH = $PLAYER ${SOUNDS}/silent.au,,14-16,22-8; +START = { -4711 MSN\#1 1 - I RK = $PLAYER ${SOUNDS}/msn1_ring.au,5,8-14,16-22;\ - - IOA = $PLAYER ${SOUNDS}/msn1_pay.au,,8-14,16-22; -4712 MSN\#2 1 - I RK = $PLAYER ${SOUNDS}/msn2_ring.au,5,8-14,16-22; -4713 MSN\#3 1 - I RK = $PLAYER ${SOUNDS}/msn3_ring.au,5,8-14,16-22; + [FLAG] + FLAGS = O R L + PROGRAM = $PLAYER ${SOUNDS}/unknown_ring.au + TIME = 8-14,16-22 -*40441777 My_Provider 4 isdn0 OIR = $PLAYER ${SOUNDS}/provider_ring.au;\ - OICU = /usr/bin/get.mails.from.provider,300;\ - OICU = /usr/bin/get.news.from.provider,1800; + [FLAG] + FLAGS = IOA + PROGRAM = $PLAYER ${SOUNDS}/pay.au + TIME = 8-14,16-22 + + [FLAG] + FLAGS = IOC U + PROGRAM = /usr/bin/who_is_it $2 $3 + + [FLAG] + FLAGS = IOH + PROGRAM = $PLAYER ${SOUNDS}/hangup.au + TIME = 8-14,16-22 + + [FLAG] + FLAGS = IORAH + PROGRAM = $PLAYER ${SOUNDS}/silent.au + TIME = 14-16,22-8 +} + +[MSN] +NUMBER = 4711 +ALIAS = MSN\#1 +ZONE = 1 +START = { + + [FLAG] + FLAGS = I RK + PROGRAM = $PLAYER ${SOUNDS}/msn1_ring.au + INTERVAL = 5 + TIME = 8-14,16-22 +} + +[MSN] +NUMBER = 4712 +ALIAS = MSN\#2 +ZONE = 1 +START = { + + [FLAG] + FLAGS = I RK + PROGRAM = $PLAYER ${SOUNDS}/msn2_ring.au + INTERVAL = 5 + TIME = 8-14,16-22 +} + +[MSN] +NUMBER = 4713 +ALIAS = MSN\#3 +ZONE = 1 +START = { + + [FLAG] + FLAGS = I RK + PROGRAM = $PLAYER ${SOUNDS}/msn3_ring.au + INTERVAL = 5 + TIME = 8-14,16-22 +} + +[NUMBER] +NUMBER = *40441777 +ALIAS = My_Provider +ZONE = 4 +INTERFACE= isdn0 +START = { + + [FLAG] + FLAGS = OIR + PROGRAM = $PLAYER ${SOUNDS}/provider_ring.au + + [FLAG] + FLAGS = OICU + PROGRAM = /usr/bin/get.mails.from.provider + INTERVAL = 300 + + [FLAG] + FLAGS = OICU + PROGRAM = /usr/bin/get.news.from.provider + INTERVAL = 1800 +} Erklaerung zum Beispiel: @@ -1570,7 +1654,8 @@ kommt. So wie "/usr/bin/auplay" beendet ist, wird es wieder neu gestartet. Die Flags "OR" haben allerdings keine Bedeutung fuer andere Geraete am S0-Bus, da die ISDN-Karte die Ring-Phase von anderen Geraeten am Bus nicht mitbekommt. -Kommentare in der in der Telefonnummerndateien: +Kommentare in den Konfigurationsdateien isdn.conf, callerid.conf und ~/.isdn: +----------------------------------------------------------------------------- Es koennen koennen Kommentare an beliebiger Stelle beginnend mit de Zeichen '#' eingefuegt werden (siehe lib/README.Syntax.conffile). @@ -1820,6 +1905,8 @@ Daneben bietet isdnlog noch folgende interessante Zusatz-Funktion: 8. Start von isdnlog -------------------- +ACHTUNG: Ab der Version 3.0 kann der isdnlog nur noch als root gestartet werden! + Vor dem Start von "isdnlog" muss das D-Channel Q.931 logging des Teles-Treiber eingeschaltet werden. Bis "isdn4linux0.6.6beta" ist dazu @@ -1878,8 +1965,9 @@ angegeben werden. -V isdnlog zeigt seine eigene Versionsnummer an, und terminiert wieder -fX isdnlog liest eine Konfigurationsdatei "X". Hier koennen Optionen - angegeben werden. - Der Aufbau der Datei (Beispiel). + angegeben werden. Die Datei hat nichts mit der isdn.conf zu tun. + Hier befinden sich nur Parameter zum starten von isdnlog. + Der Aufbau der Datei (Beispiel): [options] # Muss immer zuerst kommen. log=yes @@ -1995,7 +2083,18 @@ angegeben werden. Beispiel: Mein Internet-Provider steht folgendermassen in der "isdn.conf" : - 4711 EUnet 3 isdn0 OC=$CMD ${SOUNDS}/dial.au + + [NUMBER] + NUMBER = 4711 + ALIAS = EUnet + ZONE = 3 + INTERFACE = isdn0 + START = { + + [FLAG] + FLAGS = OC + PROGRAM = $CMD ${SOUNDS}/dial.au + } Konfiguriert wurde dessen IP-Interface "isdn0" in der "rc.isdn" so: isdnctrl huptimeout isdn0 12 @@ -2021,14 +2120,14 @@ angegeben werden. Tarif, also um 9:00, 12:00, 18:00, 21:00, 2:00 sowie 5:00 Uhr. ACHTUNG: Die Gebuehrenimpulse der VSt kommen keineswegs im Rythmus - der wirklichen Gebuehrentakt-Laenge, sondern in jeweils + der wirklichen Gebuehrentakt-Laenge, sondern in jeweils auf 10 Sekunden gerundeten Abschnitten (entsprechend eigener Beobachtungen) - In obigem Beispiel also nicht nach 12,24,36,48 .. Sekunden, + In obigem Beispiel also nicht nach 12,24,36,48 .. Sekunden, sondern nach 20,30,40,50 Sekunden. ACHTUNG: Wird dieses Feature genutzt, sollte isdnlog mindestens - mit "-t1", besser mit "-t2" synchron zur Uhr der VSt + mit "-t1", besser mit "-t2" synchron zur Uhr der VSt laufen! Fuer diese Funktionalitaet benoetigt isdnlog das Programm "isdnctrl" @@ -2220,6 +2319,13 @@ Gestartet wird isdnrep mittels: isdnrep [ -anvt:f:d: ] +Der isdnrep kann seit der Version 3.0 die Ausgabe im HTML-Format erzeugen. +Dieses kann ueber zwei Wege erreicht werden: +- Option -wX +- Der Name des isdnrep hat die Endung ".cgi" (z.B. isdnrep.cgi). Diese + entspricht der Option -w1. Man kann also z.B. einen Link auf + den isdnrep machen: ln -s isdnrep isdnrep.cgi + Die Optionen von isdnrep haben im einzelnen folgende Funktion: -a "all" isdnrep druckt alle Verbindungen an, die sich in der @@ -2230,6 +2336,8 @@ Die Optionen von isdnrep haben im einzelnen folgende Funktion: Gespraeche und Gebuehren angezeigt. Dieses ist sinnvoll, wenn man den Output in ein anderes Programm einlesen will. + Diese Option hat keine Funktion, wenn der isdnrep + ebenfalls mit der Option -wX aufgerufen wurde. -n "numbers" isdnrep druckt anstelle der Symbolischen Namen die Telefonnummern an @@ -2364,8 +2472,67 @@ Die Optionen von isdnrep haben im einzelnen folgende Funktion: callerid.conf oder ~/.isdn eingetragen sind. Diese Option laeuft nicht bei der Ausgabe im HTML-Format. +-wX "WWW" Der isdnrep kann die Ausgabe im HTML-Format erzeugen. + dieses wird mit der Option -w erreicht. Es gibt dort zwei + Modi: + 0 Es wird der HTML-Header unterdrueckt. Dieses ist + sinnvoll, wenn die Ausgabe der isdnrep in eine + bestehende Seite eingebettet werden soll. + 1 Es wird eine eigenstaendige Seite im HTML-Format + erzeugt. -Es wird nun auf stdout eine Abrechnung mit folgender Optik generiert: +-sX "format string" + Die Ausgabe des isdnrep kann beeinflusst werden, indem + ein Formatstring angegeben wird, welche Informationen + Pro Verbindung gezeigt werden soll. Die Syntax + entspricht dem printf. Folgende Platzhalter sind bekannt: + + %X: Die Zeit ohne Datum (z.B. 23:54:06) + %x: Das Datum (z.B. 05/07/97) + %y: Datum ohne Jahresangabe (z.B. Sun May 04) + %Y: Das Jahr, vierstellig (z.B. 1997) + + %D: Gespraechsdauer (z.B. 00:03:34) + %H: Die eigene MSN, wenn ein Eintrag in der callerid.conf + gefunden wurde wird dort das Alias angezeigt. + %h: Die eigene MSN (kein Alias, nur die Nummer) + %F: Der andere Gesprachsteilnehmer, wenn ein Eintrag in + der callerid.conf gefunden wurde wird dort das Alias + angezeigt. + %f: Der andere Gesprachsteilnehmer (kein Alias, nur die + Nummer) + %L: Gibt den Ort aus fuer die eigene MSN falls bekannt, + sonst ein Leerstring. + %l: Gibt den Ort aus fuer den anderen Gesprachsteilnehmer + falls bekannt, sonst ein Leerstring. + %T: Gibt den Pfeil an zischen den Nummern ("->" oder "<-") + fuer die Gespraechsrichtung. Die eigene MSN + sollte hierbei immer links vom Pfeil stehen. + %t: Gibt den Pfeil an zischen den Nummern ("->" oder "<-") + fuer die Gespraechsrichtung. Die eigene MSN + sollte hierbei immer rechts vom Pfeil stehen. + + %u: Gibt die Einheiten aus, falls vorhanden (z.B. 6 EH) + %U: Gibt die Gebuehren aus, falls vorhanden (z.B. 2,28 DM) + %I: Gibt den INPUT-Datendurchsatz an. + %O: Gibt den OUTPUT-Datendurchsatz an. + + Defaultmaessig ist der folgende String fuer den isdnrep + (nicht HTML) eingestellt: + + " %X %D %15.15H %T %-15.15F %7u %U %I %O" + +-FX "format" Es koennen in der Datei isdn.conf Format-Strings definiert + werden. Diese koennen mit Option -F verwendet werden. + Unter der Sektion [ISDNLOG] kann es Eintraege namens + "REPFMTxxx" existieren. Der String nach der Option -F + muss identisch sein mit "xxx". Beispiel: + + REPFMT1 = ... # -> isdnrep -F1 + REPFMTMYSTRING = ... # -> isdnrep -Fmystring oder + # isdnrep -FMYSTRING + +Es wird nun auf stdout eine Abrechnung mit folgender Default-Optik generiert: $ isdnrep -v -t 6/1/96 I S D N Connection Report - Sun Jan 7 22:21:19 1996 @@ -2380,7 +2547,7 @@ Sat Jan 6 1996 20:02:28 0:02:37 Phone/HDLC <- UNKNOWN (1) 20:09:53 0:07:01 Modem/X.75 -> T-Online 3 EH 0,36 DM (2) 21:27:56 UNKNOWN -> UNKNOWN User busy (3) - 22:09:41 0:29:36 UNKNOWN -> UNKNOWN 43 EH 9,89 DM * + 22:09:41 0:29:36 UNKNOWN -> UNKNOWN 43 EH 9,89 DM* ========================================================================= 1 IN= 0:02:37, 13 OUT= 3:40:14, 3 failed 210 EH 25,20 DM (6)^^^^^^^^^^^^ (7)^^^^^^^^^^^^^ (8)^^^^^^^ (9)^^^^^^ (10)^^^^^^^^ @@ -2423,6 +2590,7 @@ Einheiten gemeldet (Charging-Info fehlte) Daher steht dann hier die von isdnrep errechnete Anzahl Einheiten. +*************** Bis hier ist sl gekommen, die Doku zu ueberarbeiten *********** 11. Das Konfigurations-Tool isdnconf ------------------------------------ @@ -2595,6 +2763,10 @@ Kommentare werden geloescht. 12. Der X-Client xisdn ---------------------- +ACHTUNG: Der xisdn ist noch nicht an die Version 3.0 angepasst. Daher ist der + Client in dieser Version nicht enthalten. Es kann allerdings nicht + garantiert werden, ob der xisdn mit der Version 3.0 lauffaehig ist. + Der xisdn basiert auf Motif-2.0. Daher werden die wenigsten ihn selber uebersetzen koennen. Der xisdn liegt als binary direkt neben dem isdnlog-Paket auf den meisten ftp-Server'n, die auch isdnlog vorhalten. Der xisdn kann dann diff --git a/isdnlog/install/genconf b/isdnlog/install/genconf index bd179d38..c2982ec9 100755 --- a/isdnlog/install/genconf +++ b/isdnlog/install/genconf @@ -20,6 +20,10 @@ ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ## ## $Log$ +## Revision 1.3 1997/04/15 22:37:05 luethje +## allows the character `"' in the program argument like the shell. +## some bugfixes. +## ## Revision 1.2 1997/04/08 21:20:02 luethje ## primitive changes ## @@ -81,10 +85,13 @@ setentry "[GLOBAL]" "AREAPREFIX" "$AREAPREFIX" setentry "[GLOBAL]" "COUNTRYCODE" "$COUNTRYCODE" setentry "[GLOBAL]" "COUNTRYPREFIX" "$COUNTRYPREFIX" setentry "[ISDNLOG]" "CHARGEMAX" "$CHARGEMAX" +setentry "[ISDNLOG]" "REPFMT" '\" %X %D %15.15H %T %-15.15F %7u %U %I %O\"' +setentry "[ISDNLOG]" "REPFMTWWW" '\"%X %D %17.17H %T %-17.17F %-20.20l %9u %U %I %O\"' setentry "[ISDNLOG]" "OLABEL" "$OLABEL" setentry "[ISDNLOG]" "ILABEL" "$ILABEL" setentry "[ISDNLOG]" "LOGFILE" "$LOGFILE" + sed -e "s/\([^\]\)\$\([0-9][ ]\)/\1\\\\$\2/g" $CONFFILE >$RESFILE cp $RESFILE $CONFFILE rm -f $RESFILE diff --git a/isdnlog/isdnlog/isdnlog.c b/isdnlog/isdnlog/isdnlog.c index a54fc0e3..de271d09 100644 --- a/isdnlog/isdnlog/isdnlog.c +++ b/isdnlog/isdnlog/isdnlog.c @@ -19,6 +19,9 @@ * along with this program; if not, write to the Free Software * * $Log$ + * Revision 1.8 1997/04/17 20:09:32 luethje + * patch of Ingo Schneider + * * Revision 1.7 1997/04/08 21:56:48 luethje * Create the file isdn.conf * some bug fixes for pid and lock file @@ -141,7 +144,7 @@ static void loop(void) /* Damit sich der neue Client anmelden kann, ohne das was anderes dazwischen funkt ... */ if (sockets[NewClient].descriptor >= 0) - FD_SET_MAX(sockets[Cnt].descriptor, &readmask, maxdesc); + FD_SET_MAX(sockets[NewClient].descriptor, &readmask, maxdesc); NewClient = 0; } diff --git a/isdnlog/isdnlog/start_prog.c b/isdnlog/isdnlog/start_prog.c index d38822bd..6b7333f3 100644 --- a/isdnlog/isdnlog/start_prog.c +++ b/isdnlog/isdnlog/start_prog.c @@ -20,6 +20,9 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Log$ + * Revision 1.5 1997/04/16 22:22:51 luethje + * some bugfixes, README completed + * * Revision 1.4 1997/04/15 22:37:10 luethje * allows the character `"' in the program argument like the shell. * some bugfixes. @@ -769,19 +772,22 @@ const char *Set_Ringer_Flags( int condtion, int InOut ) int Start_Interval(void) { - interval *Ptr = RootIntervall; + interval *Ptr = RootIntervall; + interval *next; time_t cur_time = time(NULL); int RetCode = 0; while (Ptr != NULL) { + next = Ptr->next; + if (Ptr->next_start <= cur_time) { - RetCode += Start_Ring(Ptr->chan, Ptr->infoarg, Ptr->event, RING_INTERVAL); Ptr->next_start = cur_time + Ptr->infoarg->interval; + RetCode += Start_Ring(Ptr->chan, Ptr->infoarg, Ptr->event, RING_INTERVAL); } - Ptr = Ptr->next; + Ptr = next; } return RetCode; @@ -848,6 +854,7 @@ int Del_Interval(int chan, info_args *infoarg) if ((*Ptr)->infoarg == infoarg && (*Ptr)->chan == chan) { Ptr2 = (*Ptr)->next; + memset(*Ptr, 0, sizeof(**Ptr)); free(*Ptr); *Ptr = Ptr2; return 0; diff --git a/isdnlog/isdnrep/isdnrep.c b/isdnlog/isdnrep/isdnrep.c index 711487a4..0ef5a579 100644 --- a/isdnlog/isdnrep/isdnrep.c +++ b/isdnlog/isdnrep/isdnrep.c @@ -20,6 +20,9 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Log$ + * Revision 1.13 1997/04/20 23:44:49 luethje + * some primitve changes + * * Revision 1.12 1997/04/20 22:52:25 luethje * isdnrep has new features: * -variable format string @@ -164,7 +167,7 @@ /*****************************************************************************/ #define DEF_FMT " %X %D %15.15H %T %-15.15F %7u %U %I %O" -#define WWW_FMT "%X %D%17.17H %T %-17.17F%-20.20l%9u%U%-14I%-14O" +#define WWW_FMT "%X %D %17.17H %T %-17.17F %-20.20l %9u %U %I %O" /*****************************************************************************/ @@ -178,7 +181,7 @@ /*****************************************************************************/ -#define H_HEADER_COLOR "#FFFFFF" +#define H_BG_COLOR "#FFFFFF" #define H_TABLE_COLOR1 "#CCCCFF" #define H_TABLE_COLOR2 "#FFCCCC" #define H_TABLE_COLOR3 "#CCFFCC" @@ -192,11 +195,11 @@ #define H_BODY_BOTTOM1 "%s%s\n" #define H_BODY_BOTTOM2 "

\n" -#define H_LEFT "%s" -#define H_CENTER "%s" -#define H_RIGHT "%s" +#define H_LEFT "%s" +#define H_CENTER "%s" +#define H_RIGHT "%s" -#define H_EMPTY " " +#define H_EMPTY " " /*****************************************************************************/ @@ -319,7 +322,7 @@ int read_logfile(char *myname) clear_sum(&all_sum); clear_sum(&all_com_sum); - if (strcmp(known[knowns-1]->who,S_UNKNOWN)) + if (knowns == 0 || strcmp(known[knowns-1]->who,S_UNKNOWN)) { if ((known = (KNOWN**) realloc(known, sizeof(KNOWN *) * (knowns+1))) == NULL) { @@ -556,7 +559,7 @@ static int print_bottom(double unit, char *start, char *stop) for (i = mymsns; i < knowns; i++) { if (known[i]->usage[j]) { print_line3(NULL, - !numbers?known[i]->who:known[i]->num, + /*!numbers?*/known[i]->who/*:known[i]->num*/, known[i]->usage[j], double2clock(known[i]->dur[j]), j==DIALOUT?print_currency(known[i]->dm,0): @@ -785,7 +788,7 @@ static int print_line(int status, one_call *cur_call, int computed, char *overla } break; /* date (without year): */ - case 'd': if (status == F_BODY_LINE) + case 'y': if (status == F_BODY_LINE) colsize[i] = append_string(&string,*fmtstring, get_time_value(0,NULL,GET_DATE)); else { @@ -949,17 +952,18 @@ static int print_line(int status, one_call *cur_call, int computed, char *overla case 'I': if (cur_call->ibytes) colsize[i] = append_string(&string,*fmtstring,set_byte_string('I',(double)cur_call->ibytes)); else - colsize[i] = append_string(&string,*fmtstring, ""); + colsize[i] = append_string(&string,*fmtstring, " "); break; /* Out-Bytes: */ /* Benoetigt Range! */ case 'O': if (cur_call->obytes) colsize[i] = append_string(&string,*fmtstring,set_byte_string('O',(double)cur_call->obytes)); else - colsize[i] = append_string(&string,*fmtstring, ""); + colsize[i] = append_string(&string,*fmtstring, " "); break; /* there are dummy entries */ case 'c': + case 'd': case 's': if (status != F_BODY_LINE) free_col = 1; @@ -992,13 +996,13 @@ static int print_line(int status, one_call *cur_call, int computed, char *overla char *help2 = NULL; - if ((help2 = (char*) calloc(strlen(H_BODY_BOTTOM1)+strlen(string)+strlen(overlap)+1,sizeof(char))) == NULL) + if ((help2 = (char*) calloc(strlen(H_BODY_BOTTOM1)+(string?strlen(string):0)+strlen(overlap)+1,sizeof(char))) == NULL) { print_msg(PRT_ERR, nomemory); return -1; } - sprintf(help2,H_BODY_BOTTOM1,last_free_col+1,overlap,string); + sprintf(help2,H_BODY_BOTTOM1,last_free_col+1,overlap,string?string:""); free(string); string = help2; @@ -1144,7 +1148,7 @@ static char *set_byte_string(char Direction, double Bytes) static int set_col_size(void) { one_call *tmp_call; - int size; + int size = 0; int i = 0; if ((tmp_call = (one_call*) calloc(1,sizeof(one_call))) == NULL) @@ -1153,13 +1157,16 @@ static int set_col_size(void) return -1; } - size = print_line(F_COUNT_ONLY,tmp_call,0,NULL); + print_line(F_COUNT_ONLY,tmp_call,0,NULL); while(colsize[i] != -1) - print_msg(PRT_NORMAL,H_BODY_HEADER2,colsize[i++]); + if (html) + print_msg(PRT_NORMAL,H_BODY_HEADER2,colsize[i++]); + else + size += colsize[i++]; free(tmp_call); - return 0; + return size; } /*****************************************************************************/ @@ -1292,6 +1299,9 @@ static prt_fmt** get_format(const char *format) if ((num = sscanf(Ptr+1,"%[^a-zA-Z]%c%[^\n]",Range,&Type,End)) > 1 || (num = sscanf(Ptr+1,"%c%[^\n]",&Type,End)) > 0 ) { + if (!isalpha(Type)) + print_msg(PRT_ERR, "Warning: Invalid token in format type `%c'!\n",Type); + if ((fmt = (prt_fmt*) calloc(1,sizeof(prt_fmt))) == NULL) { print_msg(PRT_ERR, nomemory); @@ -1590,7 +1600,7 @@ static int set_alias(one_call *cur_call, int *nx, char *myname) hit = 0; if (!*(cur_call->num[n])) { - if (!numbers) +// if (!numbers) { cur_call->num[n][0] = C_UNKNOWN; cur_call->num[n][1] = '\0'; @@ -1630,7 +1640,7 @@ static int set_alias(one_call *cur_call, int *nx, char *myname) if (cc) { - strcpy(cur_call->who[n], known[i]->who); + strncpy(cur_call->who[n], known[i]->who,NUMSIZE); nx[n] = i; hit++; @@ -2145,6 +2155,20 @@ static void strich(int type) } else { + char *string; + int size = set_col_size(); + + if ((string = (char*) calloc(size+1,sizeof(char))) == NULL) + { + print_msg(PRT_ERR, nomemory); + return; + } + + while (size>0) + string[--size] = type==2?'=':'-'; + + print_msg(PRT_NORMAL,"%s\n",string); + /* switch (type) { case 1 : print_msg(PRT_NORMAL,"----------------------------------------------------------------------------------------\n"); break; @@ -2152,7 +2176,10 @@ static void strich(int type) break; case 3 : print_msg(PRT_NORMAL,"------------------------------------------------------------\n"); break; - } /* switch */ + } + */ + + free(string); } } /* strich */ @@ -2195,7 +2222,7 @@ static int html_header(void) { print_msg(PRT_NORMAL,"Content-Type: text/html\n\n"); print_msg(PRT_NORMAL,"\n"); - print_msg(PRT_NORMAL,"\n",H_HEADER_COLOR); + print_msg(PRT_NORMAL,"\n",H_BG_COLOR); return 0; } diff --git a/isdnlog/isdnrep/rep_main.c b/isdnlog/isdnrep/rep_main.c index 62c538c6..8e09ea4a 100644 --- a/isdnlog/isdnrep/rep_main.c +++ b/isdnlog/isdnrep/rep_main.c @@ -20,6 +20,13 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Log$ + * Revision 1.2 1997/04/20 22:52:29 luethje + * isdnrep has new features: + * -variable format string + * -can create html output (option -w1 or ln -s isdnrep isdnrep.cgi) + * idea and design from Dirk Staneker (dirk.staneker@student.uni-tuebingen.de) + * bugfix of processor.c from akool + * * Revision 1.1 1997/04/06 21:03:38 luethje * switch -f is working again * currency_factor is float again ;-) @@ -129,6 +136,7 @@ /*****************************************************************************/ static int print_in_modules(int Level, const char *fmt, ...); +static int set_linefmt(char *linefmt); /*****************************************************************************/ @@ -138,9 +146,10 @@ int main(int argc, char *argv[], char *envp[]) auto char fnbuff[512] = ""; auto char usage[] = "%s: usage: %s [ -%s ]\n"; auto char wrongdate[] = "unknown date: %s\n"; - auto char options[] = "ac:nviot:f:d:p:NVhw:u"; + auto char options[] = "ac:d:f:hinop:s:t:uvw:NVF:"; auto char *myname = basename(argv[0]); - auto char *ptr; + auto char *ptr = NULL; + auto char *linefmt = ""; set_print_fct_for_tools(printf); @@ -195,6 +204,13 @@ int main(int argc, char *argv[], char *envp[]) case 'w' : html = strtol(optarg, NIL, 0)?H_PRINT_HEADER:H_PRINT_HTML; break; + case 's' : lineformat = strdup(optarg); + linefmt = NULL; + break; + + case 'F' : linefmt = strdup(optarg); + break; + case 'N' : use_new_config = 0; break; @@ -205,14 +221,36 @@ int main(int argc, char *argv[], char *envp[]) return(1); } /* switch */ + if (readconfig(myname) != 0) + return 1; + if (!html && (ptr = strrchr(myname,'.')) != NULL && !strcasecmp(ptr+1,"cgi")) html = H_PRINT_HEADER; if (html) + { seeunknowns = 0; + header++; + } - if (readconfig(myname) != 0) - return 1; + if (linefmt != NULL) + { + if (*linefmt == '\0') + { + if (html) + set_linefmt("WWW"); + else + set_linefmt(linefmt); + } + else + { + if (set_linefmt(linefmt)) + { + printf("Error: %s can not find format `%s%s'!\n",myname,CONF_ENT_REPFMT,To_Upper(linefmt)); + exit(0); + } + } + } if (!currency_factor) currency = "DM"; @@ -240,3 +278,28 @@ static int print_in_modules(int Level, const char *fmt, ...) /*****************************************************************************/ +int set_linefmt(char *linefmt) +{ + int i = 0; + int RetCode = -1; + + if (lineformats != NULL) + { + while(lineformats[i] != NULL) + { + if (!strcasecmp(linefmt,lineformats[i][0])) + { + lineformat = lineformats[i][1]; + RetCode = 0; + break; + } + + i++; + } + } + + return RetCode; +} + +/*****************************************************************************/ + diff --git a/isdnlog/tools/isdnconf.c b/isdnlog/tools/isdnconf.c index dce3f884..8c0f7f0c 100644 --- a/isdnlog/tools/isdnconf.c +++ b/isdnlog/tools/isdnconf.c @@ -20,6 +20,13 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Log$ + * Revision 1.7 1997/04/20 22:52:32 luethje + * isdnrep has new features: + * -variable format string + * -can create html output (option -w1 or ln -s isdnrep isdnrep.cgi) + * idea and design from Dirk Staneker (dirk.staneker@student.uni-tuebingen.de) + * bugfix of processor.c from akool + * * Revision 1.6 1997/04/17 20:09:57 luethje * patch of Ingo Schneider * @@ -67,6 +74,7 @@ static int GetNextEnv(char ***EnvPtr, char **name, char **value); static int ClearEnv(char ****EnvPtr); static int Set_ILabel(char *value); static int Set_OLabel(char *value); +static char *Get_FmtStr(char *Ptr, char *name); /****************************************************************************/ @@ -945,21 +953,76 @@ static int _readconfig(char *_myname) /****************************************************************************/ +static char *Get_FmtStr(char *Ptr, char *name) +{ + static char *RetCode = NULL; + char *ptr2; + + if (*Ptr++ != '\"') + return Ptr; + + free(RetCode); + ptr2 = RetCode = strdup(Ptr); + + while(*Ptr != '\"') + { + if (*Ptr == '\0') + { + _print_msg("Warning: Missing character `\"' at the end of entry `%s'!\n",name); + break; + } + + if (*Ptr == '\\' && Ptr[1] == '\"') + Ptr++; + + *ptr2++ = *Ptr++; + } + + *ptr2 = '\0'; + + if (*Ptr == '\"') + Ptr++; + + while(isspace(*Ptr)) Ptr++; + + if (*Ptr != '\0') + _print_msg("Warning: Invalid token at the end of entry `%s'!\n",name); + + return RetCode; +} + +/****************************************************************************/ + static int Set_Globals(section *SPtr) { + auto int cnt = 0; + auto char ***sPtr = lineformats; auto section *Ptr; auto entry *CEPtr; + if (sPtr != NULL) + { + while (sPtr != NULL) + { + free(sPtr[0]); + free(sPtr[1]); + free(sPtr); + + sPtr++; + } + + free(lineformats); + } if ((Ptr = Get_Section(SPtr,CONF_SEC_ISDNLOG)) != NULL) { if ((CEPtr = Get_Entry(Ptr->entries,CONF_ENT_ILABEL)) != NULL) - Set_ILabel(CEPtr->value); + Set_ILabel(Get_FmtStr(CEPtr->value,CEPtr->name)); else Set_ILabel(NULL); if ((CEPtr = Get_Entry(Ptr->entries,CONF_ENT_OLABEL)) != NULL) - Set_OLabel(CEPtr->value); + Set_OLabel(Get_FmtStr(CEPtr->value,CEPtr->name)); else Set_OLabel(NULL); @@ -1001,6 +1064,43 @@ static int Set_Globals(section *SPtr) _print_msg("%s: WARNING: Syntax error in `%s' in Line %d, ignored\n", Myname, CONF_ENT_CURR, ln); else currency++; + } + + CEPtr = Ptr->entries; + cnt = 0; + + while (CEPtr != NULL) + { + if (!strncmp(CEPtr->name,CONF_ENT_REPFMT,strlen(CONF_ENT_REPFMT))) + { + if ((lineformats = (char ***) realloc(lineformats,sizeof(char**)*(cnt+2))) == NULL) + { + _print_msg("%s: ERROR: Can not allocate memory!\n", Myname); + return 0; + } + + if ((lineformats[cnt] = (char **) calloc(2,sizeof(char*))) == NULL) + { + _print_msg("%s: ERROR: Can not allocate memory!\n", Myname); + return 0; + } + + if ((lineformats[cnt][0] = strdup(CEPtr->name+strlen(CONF_ENT_REPFMT))) == NULL) + { + _print_msg("%s: ERROR: Can not allocate memory!\n", Myname); + return 0; + } + + if ((lineformats[cnt][1] = strdup(Get_FmtStr(CEPtr->value,CEPtr->name))) == NULL) + { + _print_msg("%s: ERROR: Can not allocate memory!\n", Myname); + return 0; + } + + lineformats[++cnt] = NULL; + } + + CEPtr = CEPtr->next; } } else diff --git a/isdnlog/tools/tools.h b/isdnlog/tools/tools.h index a00e4897..f878211d 100644 --- a/isdnlog/tools/tools.h +++ b/isdnlog/tools/tools.h @@ -20,6 +20,13 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Log$ + * Revision 1.11 1997/04/20 22:52:36 luethje + * isdnrep has new features: + * -variable format string + * -can create html output (option -w1 or ln -s isdnrep isdnrep.cgi) + * idea and design from Dirk Staneker (dirk.staneker@student.uni-tuebingen.de) + * bugfix of processor.c from akool + * * Revision 1.10 1997/04/15 22:37:13 luethje * allows the character `"' in the program argument like the shell. * some bugfixes. @@ -383,6 +390,8 @@ #define CONF_ENT_INTVAL "INTERVAL" #define CONF_ENT_TIME "TIME" +#define CONF_ENT_REPFMT "REPFMT" + /****************************************************************************/ #define PRT_ERR 1 @@ -617,6 +626,7 @@ _EXTERN char* rebootcmd = REBOOTCMD; _EXTERN char* logfile = LOGFILE; _EXTERN int (*_print_msg)(const char *, ...) = printf; _EXTERN int use_new_config = 1; +_EXTERN char ***lineformats = NULL; #else #define _EXTERN extern @@ -627,6 +637,7 @@ _EXTERN char* rebootcmd; _EXTERN char* logfile; _EXTERN int (*_print_msg)(const char *, ...); _EXTERN int use_new_config; +_EXTERN char ***lineformats; #endif