- isdnlog Version 3.08

- more tesion)) Tarife from Michael Graw <Michael.Graw@bartlmae.de>
- use "bunzip -f" from Franz Elsner <Elsner@zrz.TU-Berlin.DE>
- show another "cheapest" hint if provider is overloaded ("OVERLOAD")
- "make install" now makes the required entry
    [GLOBAL]
    AREADIFF = /usr/lib/isdn/vorwahl.dat
- README: Syntax description of the new "rate-at.dat"
- better integration of "sondernummern.c" from mario.joussen@post.rwth-aachen.de
- server.c: buffer overrun fix from Michael.Weber@Post.RWTH-Aachen.DE (Michael Weber)
This commit is contained in:
Andreas Kool 1999-03-20 14:34:17 +00:00
parent 785060acd2
commit 59927aefa9
17 changed files with 339 additions and 118 deletions

View File

@ -19,6 +19,13 @@
## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
##
## $Log$
## Revision 1.60 1999/03/16 17:37:08 akool
## - isdnlog Version 3.07
## - Michael Reinelt's patch as of 16Mar99 06:58:58
## - fix a fix from yesterday with sondernummern
## - ignore "" COLP/CLIP messages
## - dont show a LCR-Hint, if same price
##
## Revision 1.59 1999/03/15 21:27:30 akool
## - isdnlog Version 3.06
## - README: explain some terms about LCR, corrected "-c" Option of "isdnconf"
@ -396,7 +403,7 @@ INSTALL_BIN := $(INSTALL) -m 0755 -o 0 -g 0
INSTALL_DATA := $(INSTALL) -m 0644 -o 0 -g 0
BZIP2 := @BZIP2@
BUNZIP2 := $(BZIP2) -d
BUNZIP2 := $(BZIP2) -f -d
LIBISDNDIR := @LIBISDNDIR@
I4LCONFDIR := @I4LCONFDIR@
@ -423,6 +430,7 @@ export COUNTRYCODE := @COUNTRYCODE@
export COUNTRYPREFIX := @COUNTRYPREFIX@
export AREACODE := @AREACODE@
export AREAPREFIX := @AREAPREFIX@
export AREADIFF := @DATADIR@/vorwahl.dat
export ILABEL := %b %e %T %ICall to tei %t from %N2 on %n2
export OLABEL := %b %e %T %Itei %t calling %N2 with %n2
@ -464,7 +472,7 @@ SERVICEFILE = /etc/services
# DON'T EDIT BELOW THIS LINE
######################################################################
VERSION = 3.07
VERSION = 3.08
MANPAGES = isdnlog/callerid.conf.5 isdnlog/isdn.conf.5 isdnlog/isdnformat.5 isdnlog/isdnlog.5 isdnlog/isdnlog.8 isdnlog/isdnlog.users.5 isdnrep/isdnrep.1 isdnconf/isdnconf.1
@ -489,7 +497,6 @@ DEFS += \
-DVERSION=\"$(VERSION)\" \
-DI4LVERSION=\"$(I4LVERSION)\" \
-D@NATION_MACRO@=1 \
-DDATADIR=\"$(DATADIR)\" \
$(INCLUDE)
%.o: %.c

View File

@ -1,10 +1,10 @@
ISDNLOG - Version 3.06 - 15-Mar-99 22:05
ISDNLOG - Version 3.08 - 18-Mar-99 22:27
isdnlog ist ein Utility zur Auswertung des D-Kanals eines
ISDN-BRI Anschlusses.
isdnlog-3.05 wurde ausgiebig mit Linux-2.0.36 getestet.
isdnlog-3.08 wurde ausgiebig mit Linux-2.0.36 getestet.
Fuer alle, die es nun ueberhaupt nicht mehr abwarten koennen, hier das
@ -55,11 +55,6 @@ Quick-Installation-Guide
ZONE = 1
3.1
[GLOBAL]
AREADIFF = /usr/lib/isdn/vorwahl.dat
4. isdn4linux das D-Kanal-Protokoll entlocken:
hisaxctrl <DriverID> 1 4
@ -1217,7 +1212,7 @@ ZONE = 5
Dieser Eintrag kann seit der Version 3.0 ersatzlos entfallen, da isdnlog
seitdem eine eigene Verzonungstabelle enthlt, d.h. selbststaendig in der
seitdem eine eigene Verzonungstabelle enthaelt, d.h. selbststaendig in der
Lage ist, die Zone des Gegners zu ermitteln.
@ -2354,7 +2349,7 @@ angegeben werden.
(keyboard={yes|no})
-ix isdnlog laeuft an einem internen S0-Bus
Mit x wird dabei die Mindestanzahl Ziffern f<EFBFBD>r eine externe
Mit x wird dabei die Mindestanzahl Ziffern fuer eine externe
Telefonnummer angegeben. Arbeitet die Anlage also z.b. mit 2-stelligen
internen Teilnehmernummern. sollte hier 3 angegeben werden.
(interns0="value")
@ -2380,10 +2375,10 @@ angegeben werden.
Meine TK-Anlage signalisiert bei einem reinkommenden Gespraech
aus Hamburg diese Nummer als "00040..." Bei einem rausgehenden
Gesprch nach Hamburg wird die Nummer als "0040..." signalisiert.
Gespraech nach Hamburg wird die Nummer als "0040..." signalisiert.
Da eine Nummer innerhalb Deutschlands ohne fuehrende "0"
weiterverarbeitet wird (bei einer Nummer im Ausland muá eine
weiterverarbeitet wird (bei einer Nummer im Ausland muss eine
fuehrende "0" uebrigbleiben), muessen dementsprechend bei
reinkommenden Gespaechen 3, bei rausgehenden Gespraechen 2
vorlaufende "0" entfernt werden, um die Normalform zu erreichen.
@ -3962,6 +3957,44 @@ die Kennzahl "98" den Tarif der Fa. Mox Telecom AG meint.
: - Sonderbehandlung von 24. Dezember bis 31. Dezember (Telekom)
Z.Zt. ist eine neue, verbesserte/erweiterte Version der "tarif.dat" Names
"rate-xx.dat" (xx == Laenderkennung: de, at usw.) in Arbeit.
Im folgenden eine vorlaeufige Syntaxbeschreibung:
V:Versionsstring (Vorschlag: 1.0-Germany [18-Mar-1999])
P:Nummer[,variante] Name (zwischen Nummer und Name kann auch ein '='
stehen, aber mir gefaellts mit Blanks und Tabs besser)
Z:Nummer Name (ebenfalls wahlweise '=', die Reihenfolge ist egal, es
muessen auch nicht alle Zonen vorkommen, es gibt auch ein Zone.used)
T:Tag/Zeit=Kosten[,Kosten] Name
wobei Tag in der Form 1-5 oder 1,2,3,4,5 stehen kann, 1=Montag, es gibt
noch * fuer alle Tage und H für Holiday=Feiertag (die anderen
Bezeichnungen E=Weekend (5-7 oder 6-7?) und F fuer Feiertag (Freitag?)
sind mißverständlich und wuerde ich nicht verwenden)
die Zeit sieht aehnlich aus, 8-12 oder 8,9,10,11 oder 8-12,13-17 ACHTUNG:
8-12 bedeutet 8:00 bis 11:59!!! Ich hatte das vorher anders, aber das
sieht komisch aus: einmal 8-11, naechste Zeile 12-12 usw.
Kosten: Kosten einer Einheit/Dauer der Einheit z.B. 0.56/30; Kosten und
Dauer sind doubles; bei mehreren Kosten kann/soll die Verzoegerung, nach
der auf den naechsten Kostenwert gewechselt werden soll, mit ':'getrennt
angegeben werden
z.B. 0.56/30:600,0.56/60 heisst: zuerst alle 30 sekunden, nach 10 min
alle 60 sekunden
Wenn das delay nicht angegeben wird, wird die Taktdauer als delay
verwendet (d.h. die Kosten gelten nur fuer eine Einheit)
Der letzte Kosteneintrag darf kein delay haben!
Sonderfaelle:
Grundkosten pro Gespraech:
1.0/0,0.40/30: 1 DM pro Verbindung, danach alle 30 Sekunden eine Einheit
zu 40 Pfennig
Freie Gespraechszeit:
0/10,0.50/30: 10 Sekunden mit 0 DM, dann alle 30 sekunden 50 Pf
Vergiss nicht den Namen des Tarifs!
z.B.
1-5/6-8=0.10/600 Morgenstund hat Kopfweh
18. LCR (Least cost router)
---------------------------
@ -3982,7 +4015,7 @@ in den USA gelaeufiger Begriff auf: das LCR, Least cost routing, d.h. die
Auswahl des guenstigsten Providers fuer eine gleich entstehende Verbindung.
Dazu muá folgendermaáen gewaehlt werden:
Dazu muss folgendermassen gewaehlt werden:
010 xxx 49 69 123456
@ -4020,7 +4053,7 @@ D.h. die schoenen "Leistungsmerkmale" AOCD sowie AOCE funktionieren _nicht_
mehr.
Daher macht es per heute (1999) wirklich absolut keinen Sinn mehr, einen
ISDN-Komfort-Anschluá zu beantragen! Das dort enthaltene "Leitungsmerkmal"
ISDN-Komfort-Anschluss zu beantragen! Das dort enthaltene "Leitungsmerkmal"
Gebuehreninformationen waehrend der Verbindung wird sowieso nur noch bei
Verbindungen ueber die DTAG erbracht (da die DTAG meistens die teuerste
Gesellschaft ist, kommt das also praktisch nie mehr vor ...)
@ -4055,7 +4088,7 @@ Was kann nun isdnlog (ab der Version 3.x) mit dieser neuen Situation anstellen?
- diverse Telefongesellschaften arbeiten mittlerweile mit sog.
Resellern - Firmen, die unter derselben Verbindungsnetzbetreiberauswahl
zu unterschiedlichen Tarifen Telefondienste anbieten. Hierzu muá man
zu unterschiedlichen Tarifen Telefondienste anbieten. Hierzu muss man
sich bei einem der Reseller zuerst anmelden - meistens kostenlos.
Zum Beispiel hat die Firma Star Telecom die
@ -4067,13 +4100,13 @@ Was kann nun isdnlog (ab der Version 3.x) mit dieser neuen Situation anstellen?
Nikoma, Mox sowie C@llas
Ist man gewillt, ueber eine dieser drei Firmen zu telefonieren,
muá man sich zuerst dort anmelden. Erschwerend kommt hinzu, dass alle
muss man sich zuerst dort anmelden. Erschwerend kommt hinzu, dass alle
diese Firmen noch unterschiedliche Tarif-Varianten anbieten:
- Abrechnung im Minutentakt
- Abrechnung im Sekundentakt, dafuer etwas teurer
- besondere Abrechnung, wenn man in einer sog. Superregion, d.h.
einer Groástadt wie Frankfurt, Muenchen, Hamburg, Stuttgart usw.
einer Grossstadt wie Frankfurt, Muenchen, Hamburg, Stuttgart usw.
wohnt.
Da jedoch alles oben genannte ueber ein und dieselbe
@ -4085,7 +4118,7 @@ Was kann nun isdnlog (ab der Version 3.x) mit dieser neuen Situation anstellen?
Daher sieht isdnlog in der Datei "/etc/isdn/tarif.conf" nach,
welcher konkrete Provider sowie welche konkrete Tarifvariante
gemeint ist, wenn z.b. die Nummer 01098 auftaucht.
Diese Datei muá dementspechend jeder entsprechend seiner eigenen
Diese Datei muss dementspechend jeder entsprechend seiner eigenen
Situation fuellen.
2. Anhand des ermittelten Providers kann isdnlog nun berechnen, was dieser

View File

@ -20,6 +20,11 @@
## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
##
## $Log$
## Revision 1.7 1997/05/28 21:22:47 luethje
## isdnlog option -b is working again ;-)
## isdnlog has new \$x variables
## README completed
##
## Revision 1.6 1997/05/19 22:58:13 luethje
## - bugfix: it is possible to install isdnlog now
## - improved performance for read files for vbox files and mgetty files.
@ -96,6 +101,7 @@ else
echo -n "Adding some entries to the config file \"$CONFFILE\"..."
fi
setentry "[GLOBAL]" "AREADIFF" "$AREADIFF"
setentry "[GLOBAL]" "AREACODE" "$AREACODE"
setentry "[GLOBAL]" "AREAPREFIX" "$AREAPREFIX"
setentry "[GLOBAL]" "COUNTRYCODE" "$COUNTRYCODE"

View File

@ -20,6 +20,15 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log$
* Revision 1.14 1999/03/15 21:27:48 akool
* - isdnlog Version 3.06
* - README: explain some terms about LCR, corrected "-c" Option of "isdnconf"
* - isdnconf: added a small LCR-feature - simply try "isdnconf -c 069"
* - isdnlog: dont change CHARGEINT, if rate is't known!
* - sonderrufnummern 1.02 [15-Mar-99] :: added WorldCom
* - tarif.dat 1.09 [15-Mar-99] :: added WorldCom
* - isdnlog now correctly handles the new "Ortstarif-Zugang" of UUnet
*
* Revision 1.13 1999/03/07 18:18:42 akool
* - new 01805 tarif of DTAG
* - new March 1999 tarife
@ -672,7 +681,7 @@ int main(int argc, char *argv[], char *envp[])
int len, i, zone;
(void)initSondernummern(msg);
initSondernummern(msg);
/* print_msg(PRT_NORMAL, "%s\n", msg); */
initTarife(msg);
/* print_msg(PRT_NORMAL, "%s\n", msg); */
@ -682,10 +691,11 @@ int main(int argc, char *argv[], char *envp[])
if (!isdnmon)
{
const char *area;
auto char info[BUFSIZ];
if ((i = is_sondernummer(areacode, DTAG)) > -1) {
print_msg(PRT_NORMAL, "%s\n", SN[i].info);
print_msg(PRT_NORMAL, "%s\n", sondernummername(i));
if (!memcmp(areacode, "01610", 5) ||
!memcmp(areacode, "01617", 5) ||
@ -715,7 +725,7 @@ int main(int argc, char *argv[], char *envp[])
print_msg(PRT_NORMAL,"%s%s%s\n",ptr,area[0] != '\0'?" / ":"", area[0] != '\0'?area:"");
} /* else */
showcheapest(zone, 181);
showcheapest(zone, 181, -1, info);
exit(0);
}

View File

@ -19,6 +19,13 @@
* along with this program; if not, write to the Free Software
*
* $Log$
* Revision 1.36 1999/03/14 14:26:28 akool
* - isdnlog Version 3.05
* - new Option "-u1" (or "ignoreRR=1")
* - added version information to "sonderrufnummern.dat"
* - added debug messages if sonderrufnummern.dat or tarif.dat could not be opened
* - sonderrufnummern.dat V 1.01 - new 01805 rates
*
* Revision 1.35 1999/02/28 19:32:38 akool
* Fixed a typo in isdnconf.c from Andreas Jaeger <aj@arthur.rhein-neckar.de>
* CHARGEMAX fix from Oliver Lauer <Oliver.Lauer@coburg.baynet.de>
@ -1174,12 +1181,12 @@ int main(int argc, char *argv[], char *envp[])
#endif
print_msg(PRT_NORMAL, "%s Version %s starting\n", myshortname, VERSION);
if ((i = initSondernummern(msg)) > -1) {
initSondernummern(msg);
#ifdef Q931
if (!q931dmp)
#endif
print_msg(PRT_NORMAL, "%s\n", msg);
} /* if */
if (readconfig(myshortname) < 0)
Exit(30);

View File

@ -19,6 +19,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log$
* Revision 1.44 1999/03/16 17:37:18 akool
* - isdnlog Version 3.07
* - Michael Reinelt's patch as of 16Mar99 06:58:58
* - fix a fix from yesterday with sondernummern
* - ignore "" COLP/CLIP messages
* - dont show a LCR-Hint, if same price
*
* Revision 1.43 1999/03/15 21:27:58 akool
* - isdnlog Version 3.06
* - README: explain some terms about LCR, corrected "-c" Option of "isdnconf"
@ -751,15 +758,20 @@ static void buildnumber(char *num, int oc3, int oc3a, char *result, int version,
#endif
if (!dir && (who == CALLED)) {
*sondernummer = is_sondernummer(num, DTAG); /* try with DTAG, these provider must support them all (i think) */
*sondernummer = is_sondernummer(num, *provider);
if (*sondernummer == UNKNOWN)
*sondernummer = is_sondernummer(num, *provider);
*sondernummer = is_sondernummer(num, DTAG); /* try with DTAG, these provider must support them all (i think) */
#ifdef 0
/* Das ist doch totaler Bloedsinn, oder?
* Schliesslich ist in *sondernummer doch der Index des Tabelleneintrags
* gespeichert. Den kann man doch nicht einfach auf 1 setzten. */
if (*sondernummer == UNKNOWN) {
if (!memcmp(num, "019", 3)) /* anything like 019xx is a Sondernummer! */
*sondernummer = 1;
} /* if */
#endif
} /* if */
@ -770,7 +782,8 @@ static void buildnumber(char *num, int oc3, int oc3a, char *result, int version,
if (*sondernummer != UNKNOWN) {
auto char s[256];
sprintf(s, "(Sonderrufnummer %s : %s)", num, sondernummername(num, DTAG));
sprintf(s, "(Sonderrufnummer %s : %s)", num,
sondernummername(*sondernummer));
Q931dump(TYPE_STRING, -1, s, version);
} /* if */
@ -4705,10 +4718,23 @@ doppelt:break;
strcat(sx, location(call[chan].loc));
strcat(sx, ")");
} /* if */
} /* if */
info(chan, PRT_SHOWHANGUP, STATE_HANGUP, sx);
if ((call[chan].cause == 0x22) && /* No circuit/channel available */
((call[chan].loc == 2) || /* Public network serving local user */
(call[chan].loc == 3))) { /* Transit network */
auto char s[BUFSIZ], s1[BUFSIZ];
showcheapest(call[chan].zone, 181, call[chan].provider, s1);
sprintf(s, "OVERLOAD %s", s1);
info(chan, PRT_SHOWHANGUP, STATE_HANGUP, s);
} /* if */
if (OUTGOING && ((c = call[chan].confentry[OTHER]) > -1)) {
if (chargemax != 0.0) {
sprintf(sx, "CHARGEMAX total=%s %s today=%s %s remaining=%s %s",

View File

@ -2,7 +2,8 @@
*
* ISDN accounting for isdn4linux.
*
* Copyright 1996 by Stefan Luethje (luethje@sl-gw.lake.de)
* Copyright 1996, 1999 by Stefan Luethje (luethje@sl-gw.lake.de)
* and Andreas Kool (akool@isdn4linux.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -19,6 +20,12 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log$
* Revision 1.4 1998/09/22 20:59:22 luethje
* isdnrep: -fixed wrong provider report
* -fixed wrong html output for provider report
* -fixed strange html output
* kisdnlog: -fixed "1001 message window" bug ;-)
*
* Revision 1.3 1998/03/08 11:42:58 luethje
* I4L-Meeting Wuerzburg final Edition, golden code - Service Pack number One
*
@ -358,7 +365,7 @@ int print_from_server(char *String)
tm_time->tm_isdst = 0;
strftime(NewString,LONG_STRING_SIZE,"%b %d %X ",tm_time);
strcat(NewString,String);
strncat(NewString, String, sizeof(NewString) - strlen(NewString) - 1);
if ((RetCode = String_For_Output(NewString)) < 0)
return RetCode;

View File

@ -19,6 +19,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log$
* Revision 1.4 1999/03/14 14:26:51 akool
* - isdnlog Version 3.05
* - new Option "-u1" (or "ignoreRR=1")
* - added version information to "sonderrufnummern.dat"
* - added debug messages if sonderrufnummern.dat or tarif.dat could not be opened
* - sonderrufnummern.dat V 1.01 - new 01805 rates
*
* Revision 1.3 1999/03/10 08:35:57 paul
* use DATADIR from "make config" phase instead of hardcoded /usr/lib/isdn
*
@ -53,10 +60,9 @@
/*
* Schnittstelle:
*
* int initSondernummern(char *info)
* initialisiert die Sonderrufnummerndatenbank, liefert die Anzahl der
* eingelesenen Datensaetze zurueck oder im Fehlerfall -1
* liefert Versionsinfo in `info' zurueck
* void initSondernummern(char *msg)
* initialisiert die Sonderrufnummerndatenbank, liefert Versionsinfo bzw.
* in Fehlermeldung in msg zurueck
*
* void exitSondernummern()
* deinitialisiert die Sonderrufnummerndatenbank
@ -65,11 +71,19 @@
* liefert die Nummer des ersten passenden Datensatzes zurueck oder -1 im
* Fehlerfall
*
* char *sondernummername(char *number, int provider)
* liefert die Beschreibung des ersten passenden Datensatzes zurueck oder
* NULL im Fehlerfall
* char *sondernummername(int index)
* liefert die Beschreibung des entsprecheden Datensatzes zurueck oder NULL
* im Fehlerfall
*
* double sonderpreis(time_t connect, int duration, char *number, int provider)
* char *sondernum(int index)
* liefert die Sondernummer des entsprechenden Datensatzes zurueck oder NULL
* im Fehlerfall
*
* int sondertarif(int index)
* liefert den Tarif des entsprechenden Datensatzes zurueck oder SO_FAIL
* im Fehlerfall
*
* double sonderpreis(time_t connect, int duration, int index)
* liefert folgendes zurueck:
* -3 -> Fehler
* -2 -> Preis nicht bekannt
@ -77,7 +91,7 @@
* 0 -> FreeCall
* >0 -> für das angegebene Gespraech angefallene Kosten
*
* double sondertaktlaenge(time_t connect, char *number, int provider, int *next)
* double sondertaktlaenge(time_t connect, int index, int *next)
* liefert folgendes zurueck:
* -3 -> Fehler
* -2 -> Taktlaenge nicht bekannt
@ -95,13 +109,14 @@
#include <string.h>
#include <time.h>
#include <math.h>
#include <errno.h>
#else
#include "isdnlog.h"
#endif
#ifdef STANDALONE
#undef DATADIR /* already defined via -DDATADIR=... */
#undef DATADIR /* already defined via policy.h */
#define DATADIR ".."
#define SO_FAIL -3
@ -125,6 +140,7 @@ typedef struct {
SonderNummern *SN;
int nSN;
int interns0 = 0;
double currency_factor = 0.12;
#endif
#define WA 0
@ -144,7 +160,7 @@ char *strip(char *s)
return s;
}
int initSondernummern(char *msg)
void initSondernummern(char *msg)
{
char *s, *t, *pos, *number, *info, fn[BUFSIZ], version[BUFSIZ];
int provider, tarif, tday, tbegin, tend;
@ -153,7 +169,7 @@ int initSondernummern(char *msg)
double grund, takt;
SN = NULL; nSN = 0;
SN = NULL; nSN = 0; strcpy(version, "unknown");
sprintf(fn, "%s/sonderrufnummern.dat", DATADIR);
f = fopen(fn, "r");
@ -224,13 +240,12 @@ int initSondernummern(char *msg)
}
}
fclose(f);
sprintf(msg, "Sonderrufnummern Version %s loaded [%d entries]", version, nSN);
return(nSN);
}
else {
sprintf(msg, "*** Cannot load Sonderrufnummern (%s : %d)", fn, errno);
return(-1);
sprintf(msg, "Sonderrufnummern Version %s loaded [%d entries]", version,
nSN);
}
else
sprintf(msg, "*** Cannot load Sonderrufnummern (%s : %s)", fn,
strerror(errno));
}
void exitSondernummern()
@ -244,7 +259,8 @@ int is_sondernummer(char *number, int provider)
{
int i;
if ((strlen(number) >= interns0) && ((*number == '0') || (*number == '1')))
if ((strlen(number) >= interns0) && ((*number == '0') || (*number == '1') ||
(*number == '2')))
for (i = 0; i < nSN; i++)
if ((strncmp(number, SN[i].number, strlen(SN[i].number)) == 0) &&
(provider == SN[i].provider))
@ -253,46 +269,63 @@ int is_sondernummer(char *number, int provider)
return(-1);
}
char *sondernummername(char *number, int provider)
char *sondernummername(int index)
{
int i;
if ((i = is_sondernummer(number, provider)) != -1)
return(SN[i].info);
if ((index > -1) && (index < nSN))
return(SN[index].info);
else
return(NULL);
}
int searchentry(time_t connect, char *number, int provider)
char *sondernum(int index)
{
int i;
struct tm *t;
if ((i = is_sondernummer(number, provider)) != -1) {
t = localtime(&connect);
while ((strncmp(number, SN[i].number, strlen(SN[i].number)) == 0) &&
(provider == SN[i].provider) &&
!(((SN[i].tday == WA) ||
((SN[i].tday == WE) && ((t->tm_wday == 0) || (t->tm_wday == 6))) ||
((SN[i].tday == WT) && (t->tm_wday >= 1) && (t->tm_wday <= 5))) &&
((SN[i].tbegin == -1) ||
((t->tm_hour >= SN[i].tbegin) && (t->tm_hour < SN[i].tend)))))
i++;
}
return(i);
if ((index > -1) && (index < nSN))
return(SN[index].number);
else
return(NULL);
}
double sonderpreis(time_t connect, int duration, char *number, int provider)
int sondertarif(int index)
{
if ((index > -1) && (index < nSN))
return(SN[index].tarif);
else
return(SO_FAIL);
}
int searchentry(time_t connect, int index)
{
int provider;
char *number;
struct tm *t;
if (index != -1) {
number = SN[index].number;
provider = SN[index].provider;
t = localtime(&connect);
while ((strncmp(number, SN[index].number, strlen(SN[index].number)) == 0)
&& (provider == SN[index].provider) &&
!(((SN[index].tday == WA) ||
((SN[index].tday == WE) && ((t->tm_wday == 0) || (t->tm_wday == 6))) ||
((SN[index].tday == WT) && (t->tm_wday >= 1) && (t->tm_wday <= 5))) &&
((SN[index].tbegin == -1) ||
((t->tm_hour >= SN[index].tbegin) && (t->tm_hour < SN[index].tend)))))
index++;
}
return(index);
}
double sonderpreis(time_t connect, int duration, int index)
{
int i;
double preis;
if ((i = searchentry(connect, number, provider)) != -1)
if ((i = searchentry(connect, index)) != -1)
if (SN[i].tarif == SO_CALCULATE) {
if (SN[i].takt == 0)
preis = SN[i].grund * 0.12;
preis = SN[i].grund * currency_factor;
else
preis = (ceil(duration / SN[i].takt) + SN[i].grund) * 0.12;
preis = (ceil(duration / SN[i].takt) + SN[i].grund) * currency_factor;
return(preis);
}
else
@ -301,12 +334,12 @@ double sonderpreis(time_t connect, int duration, char *number, int provider)
return(SO_FAIL);
}
double sondertaktlaenge(time_t connect, char *number, int provider, int *next)
double sondertaktlaenge(time_t connect, int index, int *next)
{
int i;
double taktlen;
if ((i = searchentry(connect, number, provider)) != -1)
if ((i = searchentry(connect, index)) != -1)
if (SN[i].tarif == SO_CALCULATE) {
taktlen = SN[i].takt;
return(taktlen);
@ -323,11 +356,23 @@ double sondertaktlaenge(time_t connect, char *number, int provider, int *next)
int main(int argc, char *argv[])
{
struct tm t;
time_t time;
double preis;
char msg[BUFSIZ];
int index;
if (argc > 6) {
fprintf(stdout, "%d Einträge aus \"%s/sonderrufnummern.dat\" eingelesen.\n",
initSondernummern(), DATADIR);
initSondernummern(msg);
fprintf(stdout, "%s\n", msg);
t.tm_sec = t.tm_min = 0;
t.tm_hour = strtol(argv[3], (char **)NULL, 10);
t.tm_mday = strtol(argv[4], (char **)NULL, 10);
t.tm_mon = strtol(argv[5], (char **)NULL, 10) - 1;
t.tm_year = 99;
t.tm_isdst = -1;
time = mktime(&t);
/*
fprintf(stdout, "Testausgabe für Eintrag: %d\n", TEST);
fprintf(stdout, "Provider: %d\n", SN[TEST].provider);
@ -341,18 +386,12 @@ int main(int argc, char *argv[])
fprintf(stdout, "Kurzbeschreibung: \"%s\"\n", SN[TEST].info);
exit(0);
*/
if (is_sondernummer(argv[2], strtol(argv[1], (char **)NULL, 10)) != -1) {
t.tm_sec = t.tm_min = 0;
t.tm_hour = strtol(argv[3], (char **)NULL, 10);
t.tm_mday = strtol(argv[4], (char **)NULL, 10);
t.tm_mon = strtol(argv[5], (char **)NULL, 10) - 1;
t.tm_year = 99;
t.tm_isdst = -1;
if ((index = is_sondernummer(argv[2],
strtol(argv[1], (char **)NULL, 10))) != -1) {
fprintf(stdout, "Sonderrufnummer: %s\n", argv[2]);
fprintf(stdout, "Beschreibung : %s\n",
sondernummername(argv[2], strtol(argv[1], (char **)NULL, 10)));
preis = sonderpreis(mktime(&t), strtol(argv[6], (char **)NULL, 10),
argv[2], strtol(argv[1], (char **)NULL, 10));
fprintf(stdout, "Beschreibung : %s\n", sondernummername(index));
preis = sonderpreis(time, strtol(argv[6], (char **)NULL, 10), index);
if (preis == SO_CITYCALL)
fprintf(stdout, "Kosten : CityCall\n");
else if (preis == SO_FREE)
@ -362,11 +401,10 @@ int main(int argc, char *argv[])
else
fprintf(stdout, "Kosten : %f\n", preis);
fprintf(stdout, "Taktlänge : %f\n",
sondertaktlaenge(mktime(&t), argv[2],
strtol(argv[1], (char **)NULL, 10), NULL));
sondertaktlaenge(time, index, NULL));
}
else
fprintf(stdout, "Die Nummer %s ist keine Sonderrufnummer.\n", argv[1]);
fprintf(stdout, "Die Nummer %s ist keine Sonderrufnummer.\n", argv[2]);
}
else
fprintf(stdout, "Usage: %s Provider Rufnummer Stunde Tag Monat Länge\n",

View File

@ -19,6 +19,15 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log$
* Revision 1.5 1999/02/28 19:33:11 akool
* Fixed a typo in isdnconf.c from Andreas Jaeger <aj@arthur.rhein-neckar.de>
* CHARGEMAX fix from Oliver Lauer <Oliver.Lauer@coburg.baynet.de>
* isdnrep fix from reinhard.karcher@dpk.berlin.fido.de (Reinhard Karcher)
* "takt_at.c" fixes from Ulrich Leodolter <u.leodolter@xpoint.at>
* sondernummern.c from Mario Joussen <mario.joussen@post.rwth-aachen.de>
* Reenable usage of the ZONE entry from Schlottmann-Goedde@t-online.de
* Fixed a typo in callerid.conf.5
*
* Revision 1.4 1999/01/10 15:23:30 akool
* - "message = 0" bug fixed (many thanks to
* Sebastian Kanthak <sebastian.kanthak@muehlheim.de>)
@ -497,7 +506,7 @@ void exitTarife()
{
} /* exitTarife */
void initSondernummern()
void initSondernummern(char *msg)
{
} /* initSondernummern */

View File

@ -19,6 +19,13 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log$
* Revision 1.14 1999/03/16 17:37:27 akool
* - isdnlog Version 3.07
* - Michael Reinelt's patch as of 16Mar99 06:58:58
* - fix a fix from yesterday with sondernummern
* - ignore "" COLP/CLIP messages
* - dont show a LCR-Hint, if same price
*
* Revision 1.13 1999/03/15 21:28:04 akool
* - isdnlog Version 3.06
* - README: explain some terms about LCR, corrected "-c" Option of "isdnconf"
@ -542,9 +549,8 @@ int taktlaenge(int chan, char *why)
if ((call[chan].sondernummer[CALLED] != UNKNOWN) &&
(call[chan].provider == DTAG) &&
((call[chan].zone < C_NETZ) || (call[chan].zone > E2_NETZ)) &&
SN[call[chan].sondernummer[CALLED]].tarif == SO_FREE) {
sondertarif(call[chan].sondernummer[CALLED]) == SO_FREE) {
strcpy(why, "FreeCall");
return(60 * 60 * 24); /* one day should be enough ;-) */
} /* if */
@ -604,12 +610,18 @@ void preparecint(int chan, char *msg, char *hint, int viarep)
provider = ((call[chan].provider == UNKNOWN) ? preselect : call[chan].provider);
if ((call[chan].sondernummer[CALLED] != UNKNOWN) &&
(is_sondernummer(call[chan].num[CALLED], provider) == UNKNOWN)) {
sprintf(s, "Unknown Sonderrufnummer for provider %s. Using chargeinfos from provider DTAG.",
Providername(provider));
info(chan, PRT_SHOWCONNECT, STATE_CONNECT, s);
}
if ((call[chan].sondernummer[CALLED] != UNKNOWN) && /* Sonderrufnummer, Abrechnung zum CityCall-Tarif */
(SN[call[chan].sondernummer[CALLED]].tarif == SO_CITYCALL))
(sondertarif(call[chan].sondernummer[CALLED]) == SO_CITYCALL))
zone = CITYCALL;
else if ((call[chan].sondernummer[CALLED] != UNKNOWN) && /* Sonderrufnummer, kostenlos */
(SN[call[chan].sondernummer[CALLED]].tarif == SO_FREE) &&
(provider == DTAG)) {
(sondertarif(call[chan].sondernummer[CALLED]) == SO_FREE)) {
call[chan].zone = CITYCALL;
call[chan].tarifknown = 0;
sprintf(msg, "CHARGE: free of charge - FreeCall");
@ -677,7 +689,7 @@ void preparecint(int chan, char *msg, char *hint, int viarep)
else {
sprintf(msg, "CHARGE: Oppps: No charge infos for provider %d, Zone %d %s",
provider, zone,
((call[chan].sondernummer[CALLED] != UNKNOWN) ? SN[call[chan].sondernummer[CALLED]].info : ""));
((call[chan].sondernummer[CALLED] != UNKNOWN) ? sondernummername(call[chan].sondernummer[CALLED]) : ""));
call[chan].tarifknown = 0;
} /* else */
@ -748,14 +760,14 @@ void price(int chan, char *hint, int viarep)
tm = localtime(&call[chan].connect);
if ((call[chan].sondernummer[CALLED] != UNKNOWN) &&
(call[chan].provider == DTAG) &&
((call[chan].zone < C_NETZ) || (call[chan].zone > E2_NETZ))) {
switch (SN[call[chan].sondernummer[CALLED]].tarif) {
switch (sondertarif(call[chan].sondernummer[CALLED])) {
case SO_UNKNOWN : if (!strcmp(call[chan].num[CALLED] + 3, "11833")) { /* Sonderbedingung Auskunft Inland */
duration -= 30;
pay2 = SN[call[chan].sondernummer[CALLED]].grund * currency_factor;
pay2 += (duration / SN[call[chan].sondernummer[CALLED]].takt) * currency_factor;
pay2 = sonderpreis(call[chan].connect, duration,
call[chan].sondernummer[CALLED]);
} /* if */
break;
@ -1197,7 +1209,7 @@ static int compare(const SORT *s1, const SORT *s2)
} /* compare */
void showcheapest(int zone, int duration)
void showcheapest(int zone, int duration, int ignoreprovider, char *info)
{
register int prefix, n = 0, n1, tz, cheapest = UNKNOWN;
auto char why[BUFSIZ], s[BUFSIZ];
@ -1209,6 +1221,8 @@ void showcheapest(int zone, int duration)
time(&cur_time);
tm = localtime(&cur_time);
tz = tarifzeit(tm, why, 0);
if (ignoreprovider == UNKNOWN)
print_msg(PRT_NORMAL, "%s\n", why);
@ -1224,7 +1238,7 @@ void showcheapest(int zone, int duration)
duration = TEST;
for (prefix = 0; prefix < MAXPROVIDER; prefix++) {
if (t[prefix].used) {
if (t[prefix].used && (prefix != ignoreprovider)) {
tz = tarifzeit(tm, why, ((prefix == DTAG) && CityWeekend));
tarif = tpreis(prefix, zone, tz, tm->tm_hour, duration);
@ -1244,6 +1258,11 @@ void showcheapest(int zone, int duration)
} /* if */
} /* for */
if ((cheapest != UNKNOWN) && (ignoreprovider != UNKNOWN)) {
sprintf(info, "Try 010%02d:%s", cheapest, t[cheapest].Provider);
return;
} /* if */
if (cheapest != UNKNOWN) {
tarif = t[cheapest].tarif[zone][tz][tm->tm_hour];

View File

@ -24,6 +24,15 @@
*
*
* $Log$
* Revision 1.58 1999/03/15 21:28:32 akool
* - isdnlog Version 3.06
* - README: explain some terms about LCR, corrected "-c" Option of "isdnconf"
* - isdnconf: added a small LCR-feature - simply try "isdnconf -c 069"
* - isdnlog: dont change CHARGEINT, if rate is't known!
* - sonderrufnummern 1.02 [15-Mar-99] :: added WorldCom
* - tarif.dat 1.09 [15-Mar-99] :: added WorldCom
* - isdnlog now correctly handles the new "Ortstarif-Zugang" of UUnet
*
* Revision 1.57 1999/03/14 14:27:25 akool
* - isdnlog Version 3.05
* - new Option "-u1" (or "ignoreRR=1")
@ -815,7 +824,7 @@ int read_logfile(char *myname)
initTarife(msg);
(void)initSondernummern(msg);
initSondernummern(msg);
interns0 = 3; /* FIXME */
msn_sum = calloc(mymsns + 1, sizeof(double));

View File

@ -0,0 +1,8 @@
# Kennzahl 98, moegliche Varianten:
# 0=Nikoma Minutentakt
# 1=Nikoma Sekundentakt
# 2=Nikocity Minutentakt
# 3=Nikocity Sekundentakt
# 4=Mox Telecom AG
# 5=C@llas Clever Communications
P:98=4

View File

@ -19,6 +19,15 @@
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# $Log$
# Revision 1.7 1999/03/15 21:27:38 akool
# - isdnlog Version 3.06
# - README: explain some terms about LCR, corrected "-c" Option of "isdnconf"
# - isdnconf: added a small LCR-feature - simply try "isdnconf -c 069"
# - isdnlog: dont change CHARGEINT, if rate is't known!
# - sonderrufnummern 1.02 [15-Mar-99] :: added WorldCom
# - tarif.dat 1.09 [15-Mar-99] :: added WorldCom
# - isdnlog now correctly handles the new "Ortstarif-Zugang" of UUnet
#
# Revision 1.6 1999/03/14 14:26:18 akool
# - isdnlog Version 3.05
# - new Option "-u1" (or "ignoreRR=1")
@ -43,9 +52,9 @@
# Telekom: Tarife im T-Net V1.19
# Arcor: http://www.arcor.de/tarif/sonderrufnummer.html
#
# Stand: 1/99
# Stand: 3/99
#
V:1.02 [15-Mar-99]
V:1.03 [19-Mar-99]
33|0010 |free| | | | |Operator Service
33|0031800 |free| | | | |Plus Freephone Service (Niederl.)
33|0041800 |free| | | | |Plus Freephone Service (Schweiz)
@ -267,8 +276,8 @@ V:1.02 [15-Mar-99]
33|01907 | | | | | 3 |Service 0190
33|01908 | | | | | 2 |Service 0190
33|01909 | | | | | 3 |Service 0190
33|01910 |City| | | | |Online-Dienste Zugang SLIP
33|0191011 |City| | | | |Online-Dienste Zugang PPP
33|01910 |City| | | | |Online-Dienste Zugang SLIP
33|01914 |City| | | | |Online-Dienste AOL Zugang
33|019161 |City| | | | |Online-Dienste AOL Zugang
33|02000 |? | | | | |Expo 2000 Hotline

View File

@ -1,8 +1,8 @@
# @(#)tarif.dat 1.09 15-Mar-99 20:00
# @(#)tarif.dat 1.10 17-Mar-99 22:09
#
# Copyright 1995, 1999 by Andreas Kool (akool@isdn4linux.de)
#
V:1.09 [15-Mar-99]
V:1.10 [17-Mar-99]
#
# P: Provider
# G: tt.mm.jjjj Tarif g<>ltig ab
@ -20,6 +20,8 @@ V:1.09 [15-Mar-99]
# 7=D2-Netz F=Welt 3
# 8=E-plus-Netz G=Welt 4
#
# Euro 1 = Schweiz und Frankreich
#
# T: (Tag)
# W=Werktag
# E=Wochenende/Feiertag
@ -123,6 +125,11 @@ T:E=0.11
Z:4-9,1/1
T:W09-19=0.81
T:W19-09=0.48
T:E=0.48
Z:A-D,1/1
T:W09-19=0.44
T:W19-09=0.30
T:E=0.30
Z:D,1/1
T:*=0.59
Z:E,1/1

View File

@ -19,6 +19,18 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log$
* Revision 1.19 1999/03/14 12:16:44 akool
* - isdnlog Version 3.04
* - general cleanup
* - new layout for "rate-xx.dat" and "holiday-xx.dat" files from
* Michael Reinelt <reinelt@eunet.at>
* unused by now - it's a work-in-progress !
* - bugfix for Wolfgang Siefert <siefert@wiwi.uni-frankfurt.de>
* The Agfeo AS 40 (Software release 2.1b) uses AOC_AMOUNT, not AOC_UNITS
* - bugfix for Ralf G. R. Bergs <rabe@RWTH-Aachen.DE> - 0800/xxx numbers
* are free of charge ;-)
* - tarif.dat V 1.08 - new mobil-rates DTAG
*
* Revision 1.18 1999/02/28 19:33:48 akool
* Fixed a typo in isdnconf.c from Andreas Jaeger <aj@arthur.rhein-neckar.de>
* CHARGEMAX fix from Oliver Lauer <Oliver.Lauer@coburg.baynet.de>
@ -551,10 +563,10 @@ char *vnum(int chan, int who)
if (cnf > -1)
strcpy(retstr[retnum], call[chan].alias[who]);
else if (call[chan].sondernummer[who] != -1) {
if ((l1 = strlen(SN[call[chan].sondernummer[who]].number)) < l)
sprintf(retstr[retnum], "%s - %s", SN[call[chan].sondernummer[who]].info, call[chan].num[who] + l1);
if ((l1 = strlen(sondernum(call[chan].sondernummer[who]))) < l)
sprintf(retstr[retnum], "%s - %s", sondernummername(call[chan].sondernummer[who]), call[chan].num[who] + l1);
else
strcpy(retstr[retnum], SN[call[chan].sondernummer[who]].info);
strcpy(retstr[retnum], sondernummername(call[chan].sondernummer[who]));
}
else
sprintf(retstr[retnum], "TN %s", call[chan].num[who]);

View File

@ -20,6 +20,15 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log$
* Revision 1.30 1999/03/15 21:28:54 akool
* - isdnlog Version 3.06
* - README: explain some terms about LCR, corrected "-c" Option of "isdnconf"
* - isdnconf: added a small LCR-feature - simply try "isdnconf -c 069"
* - isdnlog: dont change CHARGEINT, if rate is't known!
* - sonderrufnummern 1.02 [15-Mar-99] :: added WorldCom
* - tarif.dat 1.09 [15-Mar-99] :: added WorldCom
* - isdnlog now correctly handles the new "Ortstarif-Zugang" of UUnet
*
* Revision 1.29 1999/03/14 14:27:37 akool
* - isdnlog Version 3.05
* - new Option "-u1" (or "ignoreRR=1")
@ -945,14 +954,19 @@ _EXTERN char *qmsg(int type, int version, int val);
_EXTERN char *Myname;
_EXTERN void initTarife(char *msg);
_EXTERN void exitTarife(void);
_EXTERN void showcheapest(int zone, int duration);
_EXTERN void showcheapest(int zone, int duration, int ignoreprovider, char *info);
_EXTERN void price(int chan, char *hint, int viarep);
_EXTERN char *realProvidername(int prefix);
_EXTERN void preparecint(int chan, char *msg, char *hint, int viarep);
_EXTERN int taktlaenge(int chan, char *why);
_EXTERN int initSondernummern(char *msg);
_EXTERN int is_sondernummer(char *num, int provider);
_EXTERN char *sondernummername(char *number, int provider);
_EXTERN void initSondernummern(char *msg);
_EXTERN int is_sondernummer(char *number, int provider);
_EXTERN char *sondernummername(int index);
_EXTERN char *sondernum(int index);
_EXTERN int sondertarif(int index);
_EXTERN double sonderpreis(time_t connect, int duration, int index);
_EXTERN double sondertaktlaenge(time_t connect, int index, int *next);
_EXTERN void exitSondernummern();
_EXTERN char *zonen[MAXZONES];
#undef _EXTERN