README completed

isdnrep finished
interval-bug fixed
This commit is contained in:
Stefan Luethje 1997-05-04 20:20:05 +00:00
parent 6fd30eeca9
commit 0ddbbe0697
9 changed files with 488 additions and 95 deletions

View File

@ -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

View File

@ -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-<Version>
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

View File

@ -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

View File

@ -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;
}

View File

@ -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;

View File

@ -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 "<TD align=left colspan=%d>%s</TD>%s\n"
#define H_BODY_BOTTOM2 "</TABLE><P>\n"
#define H_LEFT "<TD align=left>%s</TD>"
#define H_CENTER "<TD align=center>%s</TD>"
#define H_RIGHT "<TD align=right>%s</TD>"
#define H_LEFT "<TD align=left><TT>%s</TT></TD>"
#define H_CENTER "<TD align=center><TT>%s</TT></TD>"
#define H_RIGHT "<TD align=right><TT>%s</TT></TD>"
#define H_EMPTY "&nbsp"
#define H_EMPTY "&nbsp;"
/*****************************************************************************/
@ -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,"<HTML>\n");
print_msg(PRT_NORMAL,"<BODY bgcolor=%s>\n",H_HEADER_COLOR);
print_msg(PRT_NORMAL,"<BODY bgcolor=%s>\n",H_BG_COLOR);
return 0;
}

View File

@ -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;
}
/*****************************************************************************/

View File

@ -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

View File

@ -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