* Uwe Furchheim <[EMAIL PROTECTED]> schrieb:
> nur isdnrep hat ein problem: es wird als provider immer nur der
> defaultprovider (telekom) ausgegeben!!! keine fehlermeldungen oder
> warnungen von isdnrep...
Hier existiert tats�chlich ein Fehler in isdnrep. Verbindungen �ber
Provider, deren Nummer wie etwa in der rate.conf angegeben gr��er gleich
der Anzahl der in der rate-de.dat aufgef�hrten Provider ist, werden dem
preselected-Provider zugerechnet. Gegenw�rtig mit 58 Provider betrifft
das die 01058 und alle folgenden.
Im folgenden meine behutsam editierten Notizen, die mich zu dieser
Aussage und einer Probleml�sung f�hrten.
Anhand der genannten Fehlereingrenzung auf isdnrep findet sich
auf den ersten Blick findet sich in Zeile 2250 in
isdnlog/isdnrep/isdnrep.c eine Anweisung, die f�r diese Zuordnung
verantwortlich sein k�nnte.
Funktion set_caller_infos:
> case 17: if (!adapt) {
> cur_call->provider = atoi(array[i]);
> /* Korrektur der falschen Eintrage bis zum 16-Jan-99 */
> if (cur_call->provider <= UNKNOWN || cur_call->provider >=
>MAXPROVIDER)
> cur_call->provider = preselect;
> /* -lt- provider-# may change during time */
> cur_call->provider = pnum2prefix(cur_call->provider,cur_call->t);
> } /* if */
> break;
case 17: behandelt das 18. Feld eines Logfileeintrags, also die
Providernummer.
adapt kann mit 0 angenommen werden, solange die Zielrufnummer nicht mit
+4010(19|33|70) beginnt.
UNKNOWN ist -1, UNDEFINED w�re -2 (aus isdnlog/tools/tools.h).
MAXPROVIDER ist anf�nglich 1000 (aus isdnlog/tools/tools.h), an dieser
Stelle aber ein Alias f�r getNProvider() aus isdnlog/tools/rate.c, das
die Anzahl der Provider angibt, gegenw�rtig (mit rate-de.dat V:3.04)
sind dies 58.
Damit trifft diese Abfrage, die wohl ung�ltige Providernummern
verhindern soll, z. B. auf eine | 78| im Logfile zu, da nicht so
viele (Anzahl) Provider definiert sind. Es sollte daher f�r diesen
Test nicht die im Logfile angegebene Nummer, die Kennzahl des Providers
(010xx) verwendet werden, sondern der interne Z�hlindex dieses
Providers.
pnum2prefix weiter unten macht folgendes
(nach/in isdnlog/tools/rate.c:)
* int pnum2prefix(int pnum, time_t when)
* converts the external provider number to the internal prefix at
* the given date/time when, or know if when is 0
Der zweite Parameter dient zum Handling von zeitlichen G�ltigkeiten der
Bauform P:[from-to]pnum,var aus der rate-de.dat; soll hier nicht weiter
interessieren.
Findet pnum2prefix nichts, wird UNKNOWN zur�ckgeben.
Somit bietet sich folgende L�sung an (ohne Anspruch auf maximale
Eleganz):
> case 17: if (!adapt) {
> cur_call->provider = atoi(array[i]);
> /* Korrektur der falschen Eintrage bis zum 16-Jan-99 */
> if (cur_call->provider <= UNKNOWN)
> cur_call->provider = preselect;
> /* -lt- provider-# may change during time */
> cur_call->provider = pnum2prefix(cur_call->provider,cur_call->t);
> /* provider from logfile unknown in ratefile or rateconf
> * --> default to preselected provider */
> if (cur_call->provider == UNKNOWN)
> cur_call->provider = pnum2prefix(preselect, cur_call->t);
> } /* if */
> break;
Vor Umwandlung der Providernummer aus dem logfile in die interne
Providernummer (in dieser Nachricht auch als interner Z�hlindex
bezeichnet) wird nur noch gegen zu kleine Angaben gepr�ft. Die Pr�fung
nach oben entf�llt -- gegenw�rtig w�re 299 f�r 0190-0-99 das maximal
denkbare --, stattdessen werden alle unbekannten oder in der rate.conf
nicht aktivierten Provider dem preselected-Previder zugewiesen.
Noch etwas zur Historie dieser Quelltextdatei: Der Aufrug von
pnum2prefix erschient in Revision 1.88 am 2000/02/07 mit isdnlog 4.09,
die Pr�fung cur_call->provider >= MAXPROVIDER in Revision 1.91 am
2000/05/27 mit isdnlog 4.25.
Ende der Details zur Fehlerursache. Der Patch mit der oben gezeigten
�nderung f�r ~/isdn4k-utils/isdnlog/isdnrep/isdnrep.c ist angehangen
und sollte sich mittels patch -p0 < patchfile im Verzeichnis
~/isdn4k-utils/isdnlog anwenden lassen.
Gru� Tobias
--
Tobias Becker E-Mail [EMAIL PROTECTED] PGP 0xD06BB70D
* Beschr�nke dich nicht auf den Zweig oder das Blatt, sonst vergisst du,
dass sie Teil eines Baumes sind. Und beschr�nke dich nicht auf den Baum,
sonst vergisst du, dass er Teil eines Waldes ist. * Mario Vargas Llosa *
Index: isdnrep/isdnrep.c
===================================================================
RCS file: /i4ldev/isdn4k-utils/isdnlog/isdnrep/isdnrep.c,v
retrieving revision 1.95
diff -u -r1.95 isdnrep.c
--- isdnrep/isdnrep.c 2001/03/21 10:24:01 1.95
+++ isdnrep/isdnrep.c 2003/01/16 16:02:53
@@ -2246,10 +2246,14 @@
case 17: if (!adapt) {
cur_call->provider = atoi(array[i]);
/* Korrektur
der falschen Eintrage bis zum 16-Jan-99 */
- if
(cur_call->provider <= UNKNOWN || cur_call->provider >= MAXPROVIDER)
+ if
+(cur_call->provider <= UNKNOWN)
cur_call->provider = preselect;
/* -lt-
provider-# may change during time */
cur_call->provider = pnum2prefix(cur_call->provider,cur_call->t);
+ /* provider
+from logfile unknown in ratefile or rateconf
+ * --> default
+to preselected provider */
+ if
+(cur_call->provider == UNKNOWN)
+
+cur_call->provider = pnum2prefix(preselect, cur_call->t);
} /* if */
break;