isdnlog-4.66:

- Added support for AVM B1 (with layer 2 d-channel trace) in point-to-
   point mode, where only TEI 0 is used ("Anlagenanschluss" in German).
   Many thanks to Klaus Heske for his testing efforts.
 - The source number "0" in outgoing calls is now expanded to
   +<country><area>0.  This may be useful for point-to-point setups,
   when <area> contains area code and local number without extension.
 - Basic support for different codesets in (E)DSS1 messages.  Except
   for codeset 0, unknown information elements are now silently
   ignored (controlled by ignore_unknown_IE in isdnlog/isdnlog.h).
 - Added some information elements to isdnlog/messages.c.
 - Increased the length of msn (local number) in struct telnum.
 - Fixed seperation of country and area code for long numbers
   in getDest, tools/dest.c.
 - Changed broken (with gcc 2.95.2) generation of .depend.  The old
   output did not consider the location of objectfiles in subdirs.
   Remove this file before compiling this upgraded isdnlog.
 - Moved DUALFIX... defines from tools/tools.h to isdnlog/isdnlog.h.
 - Added missing R:-Links for cellphone entries in country-de.dat.
 - Different entry for each city "Neustadt" in tools/zone/de/code.
 - Earlier changes since isdnlog-4.65:
    - Allow dualmode workaround 0x100 (DUALFIX_DESTNUM) to work also with
      CALL_PROCEEDING messages for cleaning up unanswered incoming calls.
This commit is contained in:
tobiasb 2003-08-26 19:46:11 +00:00
parent f22c75d112
commit af7e5bfa2c
9 changed files with 450 additions and 141 deletions

View File

@ -1,4 +1,4 @@
## $Id: Makefile.in,v 1.209 2003/07/25 22:18:02 tobiasb Exp $
## $Id: Makefile.in,v 1.210 2003/08/26 19:46:11 tobiasb Exp $
##
## ISDN accounting for isdn4linux.
##
@ -19,6 +19,31 @@
## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
##
## $Log: Makefile.in,v $
## Revision 1.210 2003/08/26 19:46:11 tobiasb
## isdnlog-4.66:
## - Added support for AVM B1 (with layer 2 d-channel trace) in point-to-
## point mode, where only TEI 0 is used ("Anlagenanschluss" in German).
## Many thanks to Klaus Heske for his testing efforts.
## - The source number "0" in outgoing calls is now expanded to
## +<country><area>0. This may be useful for point-to-point setups,
## when <area> contains area code and local number without extension.
## - Basic support for different codesets in (E)DSS1 messages. Except
## for codeset 0, unknown information elements are now silently
## ignored (controlled by ignore_unknown_IE in isdnlog/isdnlog.h).
## - Added some information elements to isdnlog/messages.c.
## - Increased the length of msn (local number) in struct telnum.
## - Fixed seperation of country and area code for long numbers
## in getDest, tools/dest.c.
## - Changed broken (with gcc 2.95.2) generation of .depend. The old
## output did not consider the location of objectfiles in subdirs.
## Remove this file before compiling this upgraded isdnlog.
## - Moved DUALFIX... defines from tools/tools.h to isdnlog/isdnlog.h.
## - Added missing R:-Links for cellphone entries in country-de.dat.
## - Different entry for each city "Neustadt" in tools/zone/de/code.
## - Earlier changes since isdnlog-4.65:
## - Allow dualmode workaround 0x100 (DUALFIX_DESTNUM) to work also with
## CALL_PROCEEDING messages for cleaning up unanswered incoming calls.
##
## Revision 1.209 2003/07/25 22:18:02 tobiasb
## isdnlog-4.65:
## - New values for isdnlog option -2x / dual=x with enable certain
@ -1553,6 +1578,11 @@ export COUNTRYCODE := @COUNTRYCODE@
export COUNTRYPREFIX := @COUNTRYPREFIX@
export AREAPREFIX := @AREAPREFIX@
# store I4L-Version for make commands issued in the isdnlog subdirectory.
# In this case the export of I4L-Version by the global makefile does not take
# place because this makefile is not evaluted.
STORED_I4LVERSION := @I4LVERSION@
export ILABEL := %b %e %T %ICall to tei %t from %N2 on %n2
export OLABEL := %b %e %T %Itei %t calling %N2 with %n2
export CHARGEMAX := 1000.00
@ -1590,7 +1620,12 @@ SERVICEFILE = /etc/services
# DON'T EDIT BELOW THIS LINE
######################################################################
VERSION = 4.65
VERSION = 4.66
# fallback to I4L-Version as set at configure time
ifndef (I4LVERSION)
I4LVERSION := $(STORED_I4LVERSION)
endif
MANPAGES = isdnlog/callerid.conf.5 isdnlog/isdn.conf.5 \
isdnlog/isdnformat.5 isdnlog/isdnlog.5 isdnlog/isdnlog.8 \
@ -1663,7 +1698,14 @@ PCFLAGS = mode=oracle ireclen=160 lines=yes
MANDATE=`grep CHECKIN $< | $(AWK) '{print $$4}'`; \
$(SED) -e s%@MANDATE@%$$MANDATE%g $< > $@
%.1: %.1.in config.status
./config.status $@
%.5: %.5.in config.status
./config.status $@
%.8: %.8.in config.status
./config.status $@
ISDNLOG_OBJS = isdnlog/isdnlog.o isdnlog/processor.o isdnlog/functions.o \
isdnlog/server.o isdnlog/start_prog.o isdnlog/messages.o \
@ -1882,9 +1924,11 @@ install-progs:
$(INSTALL_BIN) $(ISDNBILL) $(DESTDIR)$(BINDIR)
-@if (ps x | fgrep $(ISDNLOG) | grep -v grep) >/dev/null; then \
kill -HUP `cat $(RUNDIR)/isdnlog.isdnctrl0.pid 2>/dev/null`; \
echo "Restarting running isdnlog!" ; \
echo "Restarting (the first) running isdnlog!" ; \
fi
# FIXME: "Installing /usr/local/lib/isdn/tools/dest/dest.cdb" is confusing
# because "/tools/dest" is only right for the source location of that file.
install-data:
$(INSTALL_DATA) isdnlog/isdnlog.8 $(DESTDIR)$(MAN8DIR)/isdnlog$(MAN8EXT)
$(INSTALL_DATA) isdnrep/isdnrep.1 $(DESTDIR)$(MAN1DIR)/isdnrep$(MAN1EXT)
@ -1963,8 +2007,12 @@ tools/tools.h: $(LIBISDNDIR)/libisdn.h $(PREFIXDIR)/policy.h
depend: .depend
# sed transforms "tools.o: tools/tools.c ..." to "tools/tools.o: ..."
.depend:
$(CPP) -M $(CFLAGS) $(DEFS) $(INCLUDE) */*.c >.depend
$(CPP) -M $(CFLAGS) $(DEFS) $(INCLUDE) */*.c >.depend.tmp
cat .depend.tmp | \
sed -e"s%^\([A-Za-z0-9_]\+\)\.o: \([A-Za-z0-9_]\+\)/\1\.c %\2/\1.o: \2/\1.c %" > .depend
rm -f .depend.tmp
ifeq ($(ORACLE),1)
$(CPP) -M $(CFLAGS) $(DEFS) $(INCLUDE) - < isdnlog/oracle.pc | \
sed s/-:/oracle.o:/ >>.depend

View File

@ -1,7 +1,7 @@
V:1.53 Int [12-Aug-2003 01:00:00]
V:1.54 Int [21-Aug-2003 01:00:00]
#
# This version of country.dat originates from rates4linux:
# $Id: country-de.dat,v 1.42 2003/08/14 12:18:57 tobiasb Exp $
# $Id: country-de.dat,v 1.43 2003/08/26 19:46:12 tobiasb Exp $
# The rates4linux homepage: http://www.sourceforge.net/projects/rates4linux/
# It bases on Rev. 1.39 of isdn4k-utils/isdnlog/country-de.dat
# in the CVS at http://www.isdn4linux.de.
@ -41,6 +41,7 @@ N:Kirgisien Mobilfunk
E:Kyrgyzstan cellphone
A:Kirgisistan Mobilfunk
C:+99631, +99632, +99634, +99635, +99636, +99637, +99639
R:KG
T:_KGMF
N:Kirgisien
@ -196,6 +197,7 @@ T:SY
N:Jordanien Mobilfunk
E:Jordan cellphone
C:+96279
R:JO
T:_JOMF
N:Jordanien
@ -257,6 +259,7 @@ T:PK
N:Indien Mobilfunk
E:India cellphone
C:+9198
R:IN
T:_INMF
# Codes _IN* also in use for Inmarsat.
@ -324,6 +327,7 @@ T:_IR16
N:Bangladesh Mobilfunk
E:Bangladesh cellphone
C:+8801
R:BD
T:_BDMF
N:Bangladesch
@ -611,10 +615,13 @@ N:international freephone
C:+800
T:_F800
# international numbering space +7... needs cleanup
N:Rußland Mobilfunk
E:Russia cellphone
A:Russische Föderation Mobilfunk
C:+7901, +7902
R:SU
T:_RUMF
N:Russische Föderat. (westl.)
@ -907,6 +914,7 @@ T:_NZMF
N:Philippinen Mobilfunk
E:Phillipines cellphone
C:+63241, +63242, +6327, +63275, +63291, +6385, +6390, +63912, +63915, +63917, +63918, +63973
R:PH
T:_PHMF
N:Philippinen
@ -1083,6 +1091,7 @@ T:CO
N:Chile Mobilfunk
E:Chile cellphone
C:+561, +56568, +56569, +56600, +569
R:CL
T:_CLMF
N:Chile
@ -1163,6 +1172,7 @@ T:PE
N:Haiti Mobilfunk
E:Haiti cellphone
C:+509251
R:HT
T:_HTMF
N:Haiti
@ -1190,6 +1200,7 @@ T:PA
N:Costa Rica Mobilfunk
E:Costa Rica cellphone
C:+506238, +506283, +506284, +5063
R:CR
T:_CRMF
N:Costa Rica
@ -1200,6 +1211,7 @@ T:CR
N:Nicaragua Mobilfunk
E:Nicaragua cellphone
C:+505800, +505830, +50583, +505832, +5059
R:NI
T:_NIMF
N:Nicaragua
@ -1223,6 +1235,7 @@ T:SV
N:Guatemala Mobilfunk
E:Guatemala cellphone
C:+50220
R:GT
T:_GTMF
N:Guatemala
@ -1248,8 +1261,9 @@ C:+500
T:FK
R:UK
# Source (2002-05-23):
# Source (2003-03-55):
# http://www.regtp.de/reg_tele/start/in_05-06-01-01-00_m/index.html
# http://www.regtp.de/reg_tele/start/in_05-06-01-00-00_m/index.html
N:Deutschland
E:Germany
C:+49
@ -1313,6 +1327,14 @@ C:+491672
R:DE
T:_DEBD
N:Deutschland Premium Rate
E:Germany premium rate
A:Deutschland Mehrwertdienste, Deutschland Premium Rate Dienste
C:+49190 # will be out of service after 2005-12-31
C:+49900
R:DE
T:_DESO
N:Deutschland Persönliche Rufnummer
E:Germany personal number
C:+49700 # reserved (2002-05-23): +49701
@ -1322,12 +1344,16 @@ T:_DEPR
N:Deutschland Freephone
E:Germany Freephone
A:Deutschland Freecall
C:+4911 # ? netzinterne Nutzung
C:+4931 # ? Testrufnummern
C:+49800, +49801 # Freephone
C:+49800, +49801 # Freephone, +49801 is reserved
R:DE
T:_DEFF
N:Deutschland Testrufnummern
E:Germany test numbers
C:+4931
R:DE
T:_DETE
N:Deutschland Cityruf
A:Cityruf, Cityruf Voicebox, Cityruf automatic, Cityruf Operator
A:Cityruf Auftragsdienst
@ -1406,6 +1432,7 @@ T:STO
N:Schweden Mobilfunk
E:Sweden cellphone
C:+4673, +46709, +46708, +46707, +46706, +46705, +46704, +46703, +46702, +4610
R:SE
T:_SEMF
N:Schweden
@ -1595,6 +1622,7 @@ E:Czech Republic cellphone
C:+420602, +420603, +420604 # temporary assignment (2002-09-22)
C:+42072, +42073, +42077
C:+420963 # ? voice mail
R:CZ
T:_CZMF
N:Freephone Tschechische Rep.
@ -1830,6 +1858,7 @@ T:MD
N:Estland Mobilfunk
E:Estonia cellphone
C:+37250, +37251, +37252, +37253, +37254, +37255, +37256
R:EE
T:_EEMF
N:Estland
@ -1869,6 +1898,7 @@ T:_LTMF
N:Ungarn Mobilfunk
E:Hungary cellphone
C:+3620, +3630, +3660
R:HU
T:_HUMF
N:Ungarn
@ -1905,6 +1935,7 @@ N:Zypern(griech) Mobilfunk
A:Zypern-Mobilfunk, Zypern Mobilfunk
E:Cyprus cellphone
C:+3579992, +357994, +357995, +357996, +357998
R:CY
T:_CYMF
# Quelle (2003-05-04):
@ -2007,6 +2038,7 @@ T:_MADE
N:Portugal Mobilfunk
E:Portugal cellphone
C:+35193
R:PT
T:_PTMF
N:Portugal
@ -2171,6 +2203,7 @@ T:NL
N:Griechenland Mobilfunk
E:Greece cellphone
C:+309
R:GR
T:_GRMF
N:Griechenland
@ -2189,7 +2222,7 @@ R:DK
N:Grönland Mobilfunk
E:Greenland cellphone
C:+29949, +29952, +29953, +29954, +29955, +29956, +29957, +29958, +29959
R;GL
R:GL
T:_GLMF
N:Färöer-Inseln Mobilfunk
@ -2246,6 +2279,7 @@ T:_TRIS
N:Südafrika Mobilfunk
E:South Africa cellphone
C:+2782, +2783
R:ZA
T:_ZAMF
N:Südafrika
@ -2490,6 +2524,7 @@ N:Kongo (Demokratische Republik) Mobilfunk
E:Congo (Democratic Republik of the) cellphone
A:Zaire Mobilfunk, Zaire cellphone
C:+24388
R:ZR
T:_ZRMF
N:Kongo (Republik)
@ -2751,6 +2786,7 @@ T:EH
N:Ägypten Mobilfunk
E:Egypt cellphone
C:+2012
R:EG
T:_EGMF
N:Ägypten

View File

@ -1,4 +1,4 @@
/* $Id: isdnlog.h,v 1.25 2001/06/08 11:55:24 kai Exp $
/* $Id: isdnlog.h,v 1.26 2003/08/26 19:46:12 tobiasb Exp $
*
* ISDN accounting for isdn4linux.
*
@ -20,6 +20,31 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log: isdnlog.h,v $
* Revision 1.26 2003/08/26 19:46:12 tobiasb
* isdnlog-4.66:
* - Added support for AVM B1 (with layer 2 d-channel trace) in point-to-
* point mode, where only TEI 0 is used ("Anlagenanschluss" in German).
* Many thanks to Klaus Heske for his testing efforts.
* - The source number "0" in outgoing calls is now expanded to
* +<country><area>0. This may be useful for point-to-point setups,
* when <area> contains area code and local number without extension.
* - Basic support for different codesets in (E)DSS1 messages. Except
* for codeset 0, unknown information elements are now silently
* ignored (controlled by ignore_unknown_IE in isdnlog/isdnlog.h).
* - Added some information elements to isdnlog/messages.c.
* - Increased the length of msn (local number) in struct telnum.
* - Fixed seperation of country and area code for long numbers
* in getDest, tools/dest.c.
* - Changed broken (with gcc 2.95.2) generation of .depend. The old
* output did not consider the location of objectfiles in subdirs.
* Remove this file before compiling this upgraded isdnlog.
* - Moved DUALFIX... defines from tools/tools.h to isdnlog/isdnlog.h.
* - Added missing R:-Links for cellphone entries in country-de.dat.
* - Different entry for each city "Neustadt" in tools/zone/de/code.
* - Earlier changes since isdnlog-4.65:
* - Allow dualmode workaround 0x100 (DUALFIX_DESTNUM) to work also with
* CALL_PROCEEDING messages for cleaning up unanswered incoming calls.
*
* Revision 1.25 2001/06/08 11:55:24 kai
* fix to compile with newer kernel headers. Maybe someone wants to fix isdnlog to recognize the number of channels at run time?
*
@ -369,6 +394,20 @@
/****************************************************************************/
#define DUALFIX_DESTNUM 0x100
#define DUALFIX_SRCNUM 0x200
#define DUALFIX_MULTLOG 0x400
/****************************************************************************/
typedef struct {
int current;
int shift;
int locked;
} CODESET;
/****************************************************************************/
typedef struct _interval {
int event;
int chan;
@ -382,9 +421,11 @@ typedef struct _interval {
#ifdef _ISDNLOG_C_
#define _EXTERN
socket_queue *sockets = NULL;
_EXTERN int ignore_unknown_IE = 0xFE; /* codesets 7 to 1 */
#else
#define _EXTERN extern
extern socket_queue *sockets;
_EXTERN int ignore_unknown_IE;
#endif
_EXTERN FILE *flog; /* /var/adm/isdn.log */

View File

@ -1,4 +1,4 @@
/* $Id: messages.c,v 1.3 1998/11/24 20:51:41 akool Exp $
/* $Id: messages.c,v 1.4 2003/08/26 19:46:12 tobiasb Exp $
*
* ISDN accounting for isdn4linux. (Q.931-Messages)
*
@ -103,35 +103,43 @@ static char *MessageType1TR6[] = {
"\x63 STATus",
NULL };
static char *InformationElement[] = {
/* Overview with references in ETSI EG 201 189 V1.4.1 (2000-09) */
static char *InformationElement[] = { /* DSS1 Codeset 0 */
"\x00 Segmented message",
"\x04 bearer service indication", /* Bearer capability */
"\x05 VPN indicator",
"\x08 Cause",
"\x0c Connected address (obsolete)",
"\x0c Connected address (obsolete)", /* 2) */
"\x0d Extended facility information element identifier",
"\x10 Call identity",
"\x14 Call state",
"\x18 Channel identification",
"\x19 Data link connection identifier",
"\x19 Data link connection identifier", /* 2) */
"\x1c Facility information element identifier", /* Facility */
"\x1e Progress indicator",
"\x20 Network-specific facilities",
"\x24 Terminal capabilities (obsolete)",
"\x24 Terminal capabilities (obsolete)", /* 2) */
"\x27 Notification indicator",
"\x28 Display",
"\x29 Date/Time",
"\x2c Keypad facility",
"\x34 Signal",
"\x40 Information rate",
"\x42 End-to-end transit delay",
"\x43 Transit delay selection and indication",
"\x44 Packet layer binary parameters",
"\x45 Packet layer window size",
"\x46 Packet size",
"\x47 Closed user group",
"\x4a Reverse charge indication",
"\x4c COLP",
"\x32 Information request", /* 1), 2) */
"\x34 Signal", /* 1) */
"\x36 Switch hook", /* 1) */
"\x38 Feature activation", /* 1) */
"\x39 Feature indication", /* 1) */
"\x3a Service profile indication", /* 1), 2) */
"\x3b Enpoint identifier", /* 1), 2) */
"\x40 Information rate", /* 1) */
"\x42 End-to-end transit delay", /* 1) */
"\x43 Transit delay selection and indication", /* 1) */
"\x44 Packet layer binary parameters", /* 1) */
"\x45 Packet layer window size", /* 1) */
"\x46 Packet size", /* 1) */
"\x47 Closed user group", /* 1) */
"\x4a Reverse charge indication", /* 1) */
"\x4c COLP", /* Connected number */
"\x4d Connected subaddress",
"\x6c Calling party number",
"\x6d Calling party subaddress",
"\x70 Called party number",
@ -145,6 +153,8 @@ static char *InformationElement[] = {
"\x7e User-user",
"\x7f Escape for extension",
NULL };
/* Note 1): not definied for Euro-ISDN (EDSS1) by ETSI but for DSS1 by ITU */
/* Note 2): not listened in mentioned ETSI masterlist */
static char *InformationElement1TR6[] = {
"\x08 Cause",

View File

@ -1,4 +1,4 @@
/* $Id: processor.c,v 1.125 2003/08/14 12:18:57 tobiasb Exp $
/* $Id: processor.c,v 1.126 2003/08/26 19:46:12 tobiasb Exp $
*
* ISDN accounting for isdn4linux. (log-module)
*
@ -19,6 +19,31 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log: processor.c,v $
* Revision 1.126 2003/08/26 19:46:12 tobiasb
* isdnlog-4.66:
* - Added support for AVM B1 (with layer 2 d-channel trace) in point-to-
* point mode, where only TEI 0 is used ("Anlagenanschluss" in German).
* Many thanks to Klaus Heske for his testing efforts.
* - The source number "0" in outgoing calls is now expanded to
* +<country><area>0. This may be useful for point-to-point setups,
* when <area> contains area code and local number without extension.
* - Basic support for different codesets in (E)DSS1 messages. Except
* for codeset 0, unknown information elements are now silently
* ignored (controlled by ignore_unknown_IE in isdnlog/isdnlog.h).
* - Added some information elements to isdnlog/messages.c.
* - Increased the length of msn (local number) in struct telnum.
* - Fixed seperation of country and area code for long numbers
* in getDest, tools/dest.c.
* - Changed broken (with gcc 2.95.2) generation of .depend. The old
* output did not consider the location of objectfiles in subdirs.
* Remove this file before compiling this upgraded isdnlog.
* - Moved DUALFIX... defines from tools/tools.h to isdnlog/isdnlog.h.
* - Added missing R:-Links for cellphone entries in country-de.dat.
* - Different entry for each city "Neustadt" in tools/zone/de/code.
* - Earlier changes since isdnlog-4.65:
* - Allow dualmode workaround 0x100 (DUALFIX_DESTNUM) to work also with
* CALL_PROCEEDING messages for cleaning up unanswered incoming calls.
*
* Revision 1.125 2003/08/14 12:18:57 tobiasb
* Allow dualmode workaround 0x100 aka DUALFIX_DESTNUM to work also with
* CALL_PROCEEDING messages for cleaning up unanswered incoming calls.
@ -1378,9 +1403,9 @@ void buildnumber(char *num, int oc3, int oc3a, char *result, int version,
*intern = ((strlen(num) < interns0) || !isdigit(*num));
if (trim && !*intern) {
if (dir && (who == CALLING))
if (dir && (who == CALLING)) /* source number of incoming call */
num += min(trimi, strlen(num));
else if (!dir && (who == CALLED))
else if (!dir && (who == CALLED)) /* dest. number of outgoing call */
num += min(trimo, strlen(num));
print_msg(PRT_DEBUG_DECODE, " TRIM> \"%s\" -> \"%s\" (trimi=%d, trimo=%d, %s, %s, %s)\n",
@ -1493,7 +1518,10 @@ void buildnumber(char *num, int oc3, int oc3a, char *result, int version,
if ((*sondernummer == UNKNOWN) && !*intern) {
switch (oc3 & 0x70) { /* Calling party number Information element, Octet 3 - Table 4-11/Q.931 */
case 0x00 : if (*num) { /* 000 Unknown */
if (*num != '0') {
/* Let own number 0 lead to +CC_Area_0, useful with PABX */
if (*num=='0' && !*(num+1) && !partner)
strcpy(result, mynum);
else if (*num != '0') {
/* in NL the MSN contains myarea w/o leading zero
so myarea get's prepended again */
if (memcmp(myarea, num, strlen(myarea)) == 0)
@ -1511,7 +1539,7 @@ void buildnumber(char *num, int oc3, int oc3a, char *result, int version,
while (*num == '0')
num++;
} /* else */
} /* if */
} /* if (*num) */
break;
case 0x10 : if (version != VERSION_1TR6)
@ -1905,7 +1933,9 @@ static int expensive(int bchan)
((ifo[bchan].u & ISDN_USAGE_MASK) == ISDN_USAGE_MODEM)));
} /* expensive */
/* decode parses the information elements (IE) of a layer 3 D-channel message
* and stores the retrieved information in call[chan].
* p points to "tt ee ll .." where tt is the message type as hex number */
static void decode(int chan, register char *p, int type, int version, int tei)
{
register char *pd, *px, *py;
@ -1917,12 +1947,24 @@ static void decode(int chan, register char *p, int type, int version, int tei)
auto struct tm tm;
auto time_t t;
auto double tx, err, tack;
auto CODESET codeset;
codeset.current = codeset.locked = 0; /* every message starts in codeset 0 */
codeset.shift = -1;
while (1) {
/* *p should be the first digit (O) of the last already processed byte, */
/* like: "oo Oo nn nn" or "oo Oo" */
if (!*(p - 1) || !*(p + 2))
break;
break; /* regular exit point of decode */
if (codeset.shift >= 0) { /* previous IE was non-locked shift */
codeset.current = codeset.shift;
codeset.shift = -1;
}
else
codeset.current = codeset.locked;
element = strtol(p += 3, NIL, 16);
@ -1932,7 +1974,7 @@ static void decode(int chan, register char *p, int type, int version, int tei)
l1 = strlen(p+2); /* *(p+2) is ' ' before first digit of first contents byte */
if (l1 < 3*l) { /* not enouph input to for l bytes of element contents */
sprintf(s, "Not enough raw input from isdnctrl? for contents of element 0x%X: %d raw bytes (length=%d) needed but only %d raw bytes present -- ignoring this element!", element, 3*l, l, l1);
sprintf(s, "Not enough raw input from isdnctrl? for contents of element 0x%X in codeset %d: %d raw bytes (length=%d) needed but only %d raw bytes present -- ignoring this element!", element, codeset.current, 3*l, l, l1);
info(chan, PRT_SHOWNUMBERS, STATE_RING, s);
return;
}
@ -1946,40 +1988,62 @@ static void decode(int chan, register char *p, int type, int version, int tei)
Q931dump(TYPE_STRING, l, s, version);
} /* if */
if ((l > 50) || (l < 0)) {
sprintf(s, "Invalid length %d -- complete frame ignored!", l);
/* An information element can be up to 256 octets long, that makes
* 254 octets for its contents. The old limit of 50 octets turned
* out to be to strict in case of the ISDN card connected to a PABX
* and violated the standards ETSI ... and ITU Q.931.
* |TB| 2003-08-17 */
if ((l > 254) || (l < 0)) {
sprintf(s, "Invalid length %d of information element %02x in codeset %d"
" -- complete frame ignored!", l, element, codeset.current);
info(chan, PRT_SHOWNUMBERS, STATE_RING, s);
return;
} /* if */
pd = qmsg(TYPE_ELEMENT, version, element);
/* FIXME: qmsg is not aware of codesets */
pd = (codeset.current) ? NULL : qmsg(TYPE_ELEMENT, version, element);
if (strncmp(pd, "UNKNOWN", 7) == 0) {
if (codeset.current || strncmp(pd, "UNKNOWN", 7) == 0) {
register char *p1 = p, *p2;
register int i, c;
auto char s[LONG_STRING_SIZE];
auto int full_l = l;
if (4*l > LONG_STRING_SIZE-400) /* handle very long unknown IE */
l = (LONG_STRING_SIZE-400)/4;
p2 = s;
p2 += sprintf(p2, "UNKNOWN ELEMENT %02x:", element);
p2 += sprintf(p2, "UNKNOWN ELEMENT %02x in codeset %d:",
element, codeset.current);
for (i = 0; i < l; i++)
p2 += sprintf(p2, " %02x", (int)strtol(p1 += 3, NIL, 16));
p2 += sprintf(p2, " [");
p2 += sprintf(p2, "%s [", (full_l>l)?" ...":"");
p1 = p;
for (i = 0; i < l; i++) {
c = (int)strtol(p1 += 3, NIL, 16);
p2 += sprintf(p2, "%c", isgraph(c) ? c : ' ');
} /* for */
l = full_l;
p2 += sprintf(p2, "], length=%d -- complete frame ignored!", l);
info(chan, PRT_SHOWNUMBERS, STATE_RING, s);
return;
}
if ( version==VERSION_EDSS1 &&
(ignore_unknown_IE>>codeset.current)&1 ) {
p2 += sprintf(p2, "], length=%d -- ignored", l);
print_msg(PRT_DEBUG_DECODE, " DEBUG> %s: %s\n", st+4, s);
p += 3*l; /* skip the content of the unknown IE */
continue; /* and next IE */
}
else { /* do not ignore unknown IE */
p2 += sprintf(p2, "], length=%d -- complete frame ignored!", l);
info(chan, PRT_SHOWNUMBERS, STATE_RING, s);
return;
}
} /* if IE unknown */
else
print_msg(PRT_DEBUG_DECODE, " DEBUG> %s: ELEMENT %02x:%s (length=%d)\n", st + 4, element, pd, l);
print_msg(PRT_DEBUG_DECODE, " DEBUG> %s: ELEMENT %02x:%s "
"(length=%d, codeset=%d)\n", st + 4, element, pd, l, codeset.current);
/* changing 0x28 to 0x2800 for special case prevents much complication */
/* later; 0x28 means / does different things in different countries */
@ -2552,8 +2616,8 @@ static void decode(int chan, register char *p, int type, int version, int tei)
/* fall thru, and overwrite ... */
} /* else */
} /* else */
} /* else */
} /* if current calling party number different */
} /* if calling party number already present */
call[chan].screening = (oc3a & 3);
@ -3061,8 +3125,9 @@ escape: for (c = 0; c <= sxp; c++)
if (!Q931dmp)
px += sprintf(px, "PROGRESS: ");
c = strtol(p + 6, NIL, 16);
sn[sxp] = c;
/* save coding standard (1=ISO,0=ETSI) with description */
c = ((c&0x60)<<3) + strtol(p + 6, NIL, 16);
sn[sxp] = c&0xff;
switch (c) {
#ifdef LANG_DE
@ -3078,6 +3143,17 @@ escape: for (c = 0; c <= sxp; c++)
case 0x84 : px += sprintf(px, "call has returned to the ISDN"); break;
case 0x88 : px += sprintf(px, "inband information available"); break;
#endif
/* EN 301 060-1 and ECMA-143 table ZB.1 define: */
case 0x190: px += sprintf(px, "interworking with a public network");
break;
case 0x191: px += sprintf(px, "interworking with a network unable to supply a release signal");
break;
case 0x192: px += sprintf(px, "interworking with a network unable to supply a release signal before answer");
break;
case 0x193: px += sprintf(px, "interworking with a network unable to supply a release signal after answer");
break;
default: px += sprintf(px, "unknown description");
break;
} /* switch */
} /* if */
@ -3228,7 +3304,7 @@ escape: for (c = 0; c <= sxp; c++)
default : {
register char *p1, *p2;
register int i;
UNKNOWN_ELEMENT: p1 = p; p2 = s;
UNKNOWN_ELEMENT: p1 = p; p2 = s; /* s has length of BUFSIZ=8192 */
for (i = 0; i < l; i++)
p2 += sprintf(p2, "%02x ", (int)strtol(p1 += 3, NIL, 16));
@ -3253,55 +3329,71 @@ UNKNOWN_ELEMENT: p1 = p; p2 = s;
break;
} /* switch */
}
else if (Q931dmp) {
if (version == VERSION_1TR6) {
switch ((element >> 4) & 7) {
case 1 : sprintf(s, "%02x ---> Shift %d (cs=%d, cs_fest=%d)", element, element & 0xf, element & 7, element & 8);
break;
} /* if (element < 128) -- variable length information elements */
else {
case 3 : sprintf(s, "%02x ---> Congestion level %d", element, element & 0xf);
break;
if (version == VERSION_EDSS1 && (element & 0x70) == 0x10) { /* shift IE */
if (element & 0x08) { /* non locking shift */
codeset.shift = element & 0x07;
print_msg(PRT_DEBUG_DECODE, " DEBUG> %s: non locking shift from"
"codeset %d to codeset %d\n", st+4, codeset.current, codeset.shift);
}
else {
codeset.locked = element & 0x07;
print_msg(PRT_DEBUG_DECODE, " DEBUG> %s: locking shift from codeset"
" %d to codeset %d\n", st+4, codeset.current, codeset.locked);
}
}
case 2 : if (element == 0xa0)
sprintf(s, "%02x ---> More data", element);
else if (element == 0xa1)
sprintf(s, "%02x ---> Sending complete", element);
break;
if (Q931dmp) {
if (version == VERSION_1TR6) {
switch ((element >> 4) & 7) {
case 1 : sprintf(s, "%02x ---> Shift %d (cs=%d, cs_fest=%d)", element, element & 0xf, element & 7, element & 8);
break;
default : sprintf(s, "%02x ---> Reserved %d", element, element);
break;
} /* switch */
case 3 : sprintf(s, "%02x ---> Congestion level %d", element, element & 0xf);
break;
Q931dump(TYPE_STRING, -3, s, version);
}
else if (version == VERSION_EDSS1) {
switch ((element >> 4) & 7) {
case 1 : sprintf(s, "%02x ---> Shift %d", element, element & 0xf);
break;
case 2 : if (element == 0xa0)
sprintf(s, "%02x ---> More data", element);
else if (element == 0xa1)
sprintf(s, "%02x ---> Sending complete", element);
break;
case 3 : sprintf(s, "%02x ---> Congestion level %d", element, element & 0xf);
break;
default : sprintf(s, "%02x ---> Reserved %d", element, element);
break;
} /* switch */
case 5 : sprintf(s, "%02x ---> Repeat indicator %d", element, element & 0xf);
break;
Q931dump(TYPE_STRING, -3, s, version);
}
else if (version == VERSION_EDSS1) {
switch ((element >> 4) & 7) {
case 1 : sprintf(s, "%02x ---> Shift %d", element, element & 0xf);
break;
case 2 : if (element == 0x90)
sprintf(s, "%02x ---> Umschaltung in eine andere Codegruppe %d\n", element, element);
if (element == 0xa0)
sprintf(s, "%02x ---> More data", element);
else if (element == 0xa1)
sprintf(s, "%02x ---> Sending complete", element);
break;
case 3 : sprintf(s, "%02x ---> Congestion level %d", element, element & 0xf);
break;
default : sprintf(s, "%02x ---> Reserved %d\n", element, element);
break;
} /* switch */
case 5 : sprintf(s, "%02x ---> Repeat indicator %d", element, element & 0xf);
break;
Q931dump(TYPE_STRING, -3, s, version);
} /* else */
} /* else */
} /* while */
case 2 : if (element == 0x90)
sprintf(s, "%02x ---> Umschaltung in eine andere Codegruppe %d\n", element, element);
if (element == 0xa0)
sprintf(s, "%02x ---> More data", element);
else if (element == 0xa1)
sprintf(s, "%02x ---> Sending complete", element);
break;
default : sprintf(s, "%02x ---> Reserved %d\n", element, element);
break;
} /* switch */
Q931dump(TYPE_STRING, -3, s, version);
} /* else */
} /* if Q931dmp */
} /* if (element<128) ... else */
} /* while (1) -- loop over all present information elements */
} /* decode */
/* --------------------------------------------------------------------------
@ -4405,7 +4497,7 @@ static void processctrl(int card, char *s)
auto char *why, *hint;
auto char hints[BUFSIZ];
static char last[BUFSIZ];
auto int isAVMB1 = 0;
auto int isAVMB1 = 0, isAVMB1_D2 = 0; /*, D2_net = -1; */
auto double tx;
auto int origchan = -1; /* sourcechan for RELEASE in chan 4 */
@ -4438,6 +4530,8 @@ static void processctrl(int card, char *s)
firsttime = 0;
print_msg (PRT_NORMAL, "(AVM B1 driver detected (D2))\n");
} /* if */
isAVMB1_D2 = 1;
/* D2_net = ( *(ps+2) == '<' ) ? 0 : 1; */
memcpy(ps, "HEX: ", 5);
} /* if */
@ -4719,12 +4813,20 @@ static void processctrl(int card, char *s)
type = strtol(ps += 3, NIL, 16);
if (!isAVMB1)
dialin = (tei == BROADCAST); /* dialin (Broadcast), alle anderen haben schon eine Tei! */
else
if (isAVMB1)
dialin = (cref & 0x80); /* first (SETUP) tells us who initiates the connection */
else if (isAVMB1_D2 && tei==0) /* AVMB1 with D2 D-channel trace connected */
dialin = (cref>>7)!=net; /* point to point (PtP) to NT or PABX */
else
dialin = (tei == BROADCAST); /* dialin (Broadcast), alle anderen haben schon eine Tei! */
/* cref&0x80 will be 0 if current message comes from the side (NET or USR)
* that has initially used this cref. It will be 0x80 if the message is
* from the opposite side. Consequently just (cref&0x80) should not work.
* |TB| 2003-08-17 */
/* dialin = (cref & 0x7f) < 64; */
/* ^-- line was commented out before rev. 1.1 dating from 1997-03-16 */
cref = (net) ? cref : cref ^ 0x80; /* cref immer aus Sicht des Amts */
@ -4734,6 +4836,12 @@ static void processctrl(int card, char *s)
if (allflags & PRT_DEBUG_DIAG)
diag(cref, tei, sapi, dialin, net, type, version);
#if 0
if (isAVMB1_D2)
print_msg(PRT_DEBUG_BUGS, " DEBUG> %s: AVMB1(D2): net=%d, D2_net=%d, %s\n"
, st+4, net, D2_net, (net==D2_net) ? "OK" : "ERROR");
#endif
/* leider laesst sich kein switch nehmen, da decode
innerhalb von SETUP/A_ACK aufgerufen werden muss, sonst
aber erst nach feststellen von chan
@ -5688,14 +5796,14 @@ retry:
processinfo(p3);
else if (!memcmp(p3, "HEX: ", 5) ||
!memcmp(p3, "hex: ", 5) ||
/* !memcmp(p3, "D2<: ", 5) || Layer 2 not yet evaluated */
/* !memcmp(p3, "D2>: ", 5) || Layer 2 not yet evaluated */
!memcmp(p3, "D2<: ", 5) || /* AVMB1 with layer 2 d-channel */
!memcmp(p3, "D2>: ", 5) || /* info works in replaymode |TB|*/
!memcmp(p3, "D3<: ", 5) ||
!memcmp(p3, "D3>: ", 5))
processctrl(0, p3);
else if (!memcmp(p3 + 3, "HEX: ", 5))
processctrl(atoi(p3), p3 + 3);
}
} /* if (replay) */
else {
#ifdef CONFIG_ISDN_WITH_ABC_LCR_SUPPORT
if (!memcmp(p1 + 9, "DW_ABC_LCR", 10))
@ -5723,7 +5831,7 @@ retry:
} /* else */
} /* else */
} /* else */
} /* else */
} /* if (replay) ... else */
p1 = p2 + 1;
} /* while */

View File

@ -223,7 +223,8 @@ int getDest(char *onumber, TELNUM * num)
int arealen, countrylen, prefixlen;
char *number = strdup(onumber);
char dummy[100]; /* V2.7.2.3 kills stack */
char tld[4];
char tld[TN_MAX_TLD_LEN];
char cc_ndc[TN_MAX_COUNTRY_LEN+TN_MAX_AREA_LEN];
char dummy2[100]; /* V2.7.2.3 kills stack */
#ifdef DEBUG
@ -231,6 +232,7 @@ int getDest(char *onumber, TELNUM * num)
#endif
*dummy = *dummy2 = '\0'; /* for keeping gcc happy */
*tld='\0';
*cc_ndc='\0';
if (get_cache(number, num)) {
#ifdef DEBUG
printf("getD (cache). %s %s\n", number, formatNumber("%f",num));
@ -240,7 +242,7 @@ int getDest(char *onumber, TELNUM * num)
}
len = strlen(number);
if (len==2 && isalpha(*number) && isupper(*number))
Strncpy(tld,number,3);
Strncpy(tld,number,TN_MAX_TLD_LEN);
if (isdigit(*number)) {
warning("getDest called with local number '%s'", number);
@ -282,7 +284,7 @@ again2:
}
else {
append(num->keys, value.dptr + 1);
Strncpy(tld,value.dptr+1,3);
Strncpy(tld,value.dptr+1,TN_MAX_TLD_LEN);
}
key.dptr = value.dptr + 1;
key.dsize = value.dsize - 2; /* w/o : and \x0 */
@ -324,19 +326,16 @@ again2:
#endif
if (p && *p) {
q = strtok(p, ","); /* we could have multiple codes */
if(*number!='+') {
if (arealen == 0) { /* first one must be city */
arealen = strlen(q);
Strncpy(num->area, q, TN_MAX_AREA_LEN);
}
if (arealen == 0) { /* first, longest, best matching area code */
char *n;
/* for number as input get area code from this number, which is already
* shortened if necessary (full number in onumber), for name as input
* use the first number from the dest.DB lookup for this name */
n = (*number == '+') ? number : q;
arealen = strlen(n);
Strncpy(cc_ndc, n, TN_MAX_COUNTRY_LEN+TN_MAX_AREA_LEN);
}
else {
if (arealen == 0) { /* we take the orig number */
arealen = strlen(number);
Strncpy(num->area, number, TN_MAX_AREA_LEN);
}
}
if (strstr(num->area, q)) /* only if new number has same prefix */
if (strstr(cc_ndc, q)) /* only if new number has same prefix */
countrylen = strlen(q); /* last one must be country */
else
r = strtok(NULL, ";"); /* save remaining number codes if any */
@ -354,20 +353,24 @@ again2:
if (!countrylen) /* countrylen missing */
while (r) { /* test remaining number codes */
q = strsep(&r, ",");
if (strstr(num->area, q)) {
if (strstr(cc_ndc, q)) {
countrylen = strlen(q);
break;
}
}
if (countrylen && (arealen || prefixlen)) {
append(num->sarea, city);
Strncpy(num->country, num->area, countrylen+1);
/* if country or area are too long, the exceeding digits will be
* stored in area or msn. */
countrylen = min(countrylen, TN_MAX_COUNTRY_LEN-1);
Strncpy(num->country, cc_ndc, countrylen+1);
num->ncountry = atoi(num->country+1);
strcpy(num->tld,tld);
p = num->area + countrylen;
p = cc_ndc + countrylen;
arealen -= countrylen;
if(prefixlen)
arealen=prefixlen;
arealen = min(arealen, TN_MAX_AREA_LEN-1);
Strncpy(num->area, p, 1 + arealen);
num->narea = atoi(num->area);
if (*onumber == '+' && strlen(onumber) > arealen + countrylen)
@ -379,7 +382,7 @@ again2:
/* do we have a code */
append(num->sarea, name);
append(num->keys, p + 1);
Strncpy(tld,p+1,3);
Strncpy(tld,p+1,TN_MAX_TLD_LEN);
key.dptr = p + 1;
key.dsize = strlen(p + 1);
nvalue = FETCH(db, key);
@ -432,7 +435,7 @@ int main(int argc, char *argv[])
{
char *msg;
TELNUM num;
int i = 1, res;
int i = 1, res, verbose = 0;
if (initDest("./dest" RDBEXT, &msg)) {
fprintf(stderr, "%s\n", msg);
@ -440,9 +443,14 @@ int main(int argc, char *argv[])
}
fprintf(stderr, "%s\n", msg);
if (argc == 1) {
fprintf(stderr, "Usage:\n\t%s number|name ...\n", basename(argv[0]));
fprintf(stderr, "Usage:\n\t%s [-v] number|name ...\n", basename(argv[0]));
exit(EXIT_FAILURE);
}
if (!strcmp(argv[i],"-v")) { /* handle verbose option in a pragmatic way */
verbose++;
i++;
argc--;
}
memset(&num, 0, sizeof(num));
while (--argc) {
res = getDest(argv[i++], &num);
@ -450,6 +458,31 @@ int main(int argc, char *argv[])
res == 0 ? "Ok." : "Err", num.country, num.ncountry, num.scountry,
num.sarea, num.area,
num.msn, num.keys);
if (verbose) { /* show TELNUM structure in detail */
printf("\nThe struct TELNUM for it:\n");
printf(" .vbn (%2d of %2d): %s\n",
strlen(num.vbn), TN_MAX_VBN_LEN-1, num.vbn);
printf(" .provider (%2d of %2d): %s\n",
strlen(num.provider), TN_MAX_PROVIDER_LEN-1, num.provider);
printf(" .nprovider : %i\n", num.nprovider);
printf(" .scountry (%2d of %2d): %s\n",
strlen(num.scountry), TN_MAX_SCOUNTRY_LEN-1, num.scountry);
printf(" .country (%2d of %2d): %s\n",
strlen(num.country), TN_MAX_COUNTRY_LEN-1, num.country);
printf(" .keys (%2d of %2d): %s\n",
strlen(num.keys), TN_MAX_SCOUNTRY_LEN-1, num.keys);
printf(" .tld (%2d of %2d): %s\n",
strlen(num.tld), TN_MAX_TLD_LEN-1, num.tld);
printf(" .ncountry : %i\n", num.ncountry);
printf(" .area (%2d of %2d): %s\n",
strlen(num.area), TN_MAX_AREA_LEN-1, num.area);
printf(" .narea : %i\n", num.narea);
printf(" .sarea (%2d of %2d): %s\n",
strlen(num.sarea), TN_MAX_SAREA_LEN-1, num.sarea);
printf(" .msn (%2d of %2d): %s\n\n",
strlen(num.msn), TN_MAX_MSN_LEN-1, num.msn);
}
}
exitDest();
return (EXIT_SUCCESS);

View File

@ -13,15 +13,19 @@
#define PRT_A PRT_ERR /* always on stderr */
/* string lens */
/* Support international numbers with 15 digits for almost any combinations
* of the lengths of country, area, and msn.
* Top level entries in the destination database may have a code like _INTN
* instead of CC in case of orbital services. |TB| 2003-08-18 */
#define TN_MAX_VBN_LEN 4
#define TN_MAX_PROVIDER_LEN 12
#define TN_MAX_COUNTRY_LEN 8
#define TN_MAX_SCOUNTRY_LEN 40
#define TN_MAX_COUNTRY_LEN 8
#define TN_MAX_TLD_LEN (5+1)
#define TN_MAX_AREA_LEN 10
#define TN_MAX_SAREA_LEN 40
#define TN_MAX_MSN_LEN 10
#define TN_MAX_MSN_LEN (12+1)
#define TN_MAX_NUM_LEN (TN_MAX_PROVIDER_LEN+TN_MAX_COUNTRY_LEN+TN_MAX_AREA_LEN+TN_MAX_MSN_LEN+4)
/* for number 1002 0043 1 2345 or 1002 01 2345 it gives */
@ -32,7 +36,7 @@ typedef struct {
char scountry[TN_MAX_SCOUNTRY_LEN]; /* "Austria" */
char country[TN_MAX_COUNTRY_LEN]; /* "+43" */
char keys[TN_MAX_SCOUNTRY_LEN]; /* "VIA/AT" */
char tld[3]; /* "AT" */
char tld[TN_MAX_TLD_LEN]; /* "AT" */
int ncountry; /* 43 */
char area[TN_MAX_AREA_LEN]; /* "1" */
int narea; /* 1 */

View File

@ -1,4 +1,4 @@
/* $Id: tools.h,v 1.58 2003/07/25 22:18:04 tobiasb Exp $
/* $Id: tools.h,v 1.59 2003/08/26 19:46:13 tobiasb Exp $
*
* ISDN accounting for isdn4linux.
*
@ -20,6 +20,31 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log: tools.h,v $
* Revision 1.59 2003/08/26 19:46:13 tobiasb
* isdnlog-4.66:
* - Added support for AVM B1 (with layer 2 d-channel trace) in point-to-
* point mode, where only TEI 0 is used ("Anlagenanschluss" in German).
* Many thanks to Klaus Heske for his testing efforts.
* - The source number "0" in outgoing calls is now expanded to
* +<country><area>0. This may be useful for point-to-point setups,
* when <area> contains area code and local number without extension.
* - Basic support for different codesets in (E)DSS1 messages. Except
* for codeset 0, unknown information elements are now silently
* ignored (controlled by ignore_unknown_IE in isdnlog/isdnlog.h).
* - Added some information elements to isdnlog/messages.c.
* - Increased the length of msn (local number) in struct telnum.
* - Fixed seperation of country and area code for long numbers
* in getDest, tools/dest.c.
* - Changed broken (with gcc 2.95.2) generation of .depend. The old
* output did not consider the location of objectfiles in subdirs.
* Remove this file before compiling this upgraded isdnlog.
* - Moved DUALFIX... defines from tools/tools.h to isdnlog/isdnlog.h.
* - Added missing R:-Links for cellphone entries in country-de.dat.
* - Different entry for each city "Neustadt" in tools/zone/de/code.
* - Earlier changes since isdnlog-4.65:
* - Allow dualmode workaround 0x100 (DUALFIX_DESTNUM) to work also with
* CALL_PROCEEDING messages for cleaning up unanswered incoming calls.
*
* Revision 1.58 2003/07/25 22:18:04 tobiasb
* isdnlog-4.65:
* - New values for isdnlog option -2x / dual=x with enable certain
@ -939,12 +964,6 @@
/****************************************************************************/
#define DUALFIX_DESTNUM 0x100
#define DUALFIX_SRCNUM 0x200
#define DUALFIX_MULTLOG 0x400
/****************************************************************************/
typedef struct {
int state;
int cref;
@ -1123,6 +1142,8 @@ _EXTERN int q931dmp;
_EXTERN int CityWeekend;
#endif
_EXTERN int preselect;
/* global variables specific to isdnlog (e.g. for parameterfile/commandline
* settings) should be moved to isdnlog/isdnlog.h. |TB| 2003-08-22 */
_EXTERN int dual;
/* Bitvalues 0x100 and greater in dual are used for activation of workarounds
* in isdnlog/processor.c. The input value for -2 (commandline) or dual

View File

@ -19,6 +19,7 @@
1803 Shared Cost 0180-3 3
1804 Shared Cost 0180-4 3
1805 Shared Cost 0180-5 3
1900 Premium Rate 0190-0 (freie Tarifierung)
1901 Premium Rate 0190-1 3
1902 Premium Rate 0190-2 3
1903 Premium Rate 0190-3 3
@ -42,7 +43,7 @@
190051 Junior Telecom
190054 Calladin
190071 RapidCall
190073 Tele2 Ortstarif
1900732 Tele2 iHear
190076 Telestunt
190079 smart79
190082 lightTalk
@ -574,6 +575,8 @@
2993 Marsberg-Canstein
2994 Marsberg-Westheim
30 Berlin
310 Testrufnummer Ferngespräche 2
311 Testrufnummer Ortsgespräche 2
3301 Oranienburg
3302 Henningsdorf
3303 Birkenwerdr
@ -800,7 +803,7 @@
33967 Freyenstein
33968 Meyenburg
33969 Stepenitz
33970 Neustadt
33970 Neustadt Dosse
33971 Kyritz
33972 Breddin
33973 Zernitz
@ -1191,7 +1194,7 @@
35953 Burkau
35954 Großharthau
35955 Pulsnitz
3596 Neustadt
3596 Neustadt i Sa
35971 Sebnitz
35973 Stolpen
35974 Hinterhermsdorf
@ -2253,7 +2256,7 @@
4407 Wardenburg
4408 Hude
4409 Westerstede-Ocholt
441 Oldenburg
441 Oldenburg (Oldb)
4421 Wilhelmshaven
4422 Sande
4423 Fedderwarden
@ -2357,7 +2360,7 @@
4557 Blunk
4558 Todesfelde
4559 Wensin
4561 Neustadt
4561 Neustadt in Holstein
4562 Grömitz
4563 Scharbeutz-Haffkrug
4564 Schashagen
@ -3378,7 +3381,7 @@
6307 Schopp
6308 Olsbrücken
631 Kaiserslautern
6321 Neustadt
6321 Neustadt a d Weinstr
6322 Bad Dürkheim
6323 Edenkoben
6324 Haßloch
@ -3637,7 +3640,7 @@
6683 Ehrenberg
6684 Hofbier Schwarzbach
6691 Schwalmstadt
6692 Neustadt
6692 Neustadt Hessen
6693 Neuental
6694 Neukirchen
6695 Jeseberg
@ -4445,7 +4448,7 @@
8326 Fischen
8327 Rettenberg
8328 Baderschwang
8329 Riezlern
8329 Riezlern Kleinwalsertal (+43 5517 ab 2003-07)
8330 Legau
8331 Memmingen
8332 Ottobeuren
@ -4470,6 +4473,7 @@
8363 Pfronten
8364 Seeg
8365 Wertach
83658 Jungholz Tirol (+43 5676 ab 2003-07)
8366 Oy-Mittelberg
8367 Roßhaupten
8368 Halblech
@ -4716,6 +4720,10 @@
9001 Premium Rate - Information
9003 Premium Rate - Unterhaltung
9005 Premium Rate - Sonstige (Erotik)
9005000 Centalk 5
9005001 Centalk 5
9005310 Centel
9009 Premium Rate - Dialer
906 Donauwörth
9070 Tapfheim
9071 Dillingen
@ -5070,7 +5078,7 @@
9574 Marktzeuln
9575 Weismain
9576 Lichtenfels-Isling
9602 Neustadt
9602 Neustadt a d Waldnaab
9603 Floß
9604 Wernberg-Köblitz
9605 Weiherhammer
@ -5162,7 +5170,7 @@
9764 Hoechheim
9765 Trappstadt
9766 Grosswenkheim
9771 Bad Neustadt
9771 Bad Neustadt a d Saale
9772 Bischofsheim a.d.Rhoen
9773 Unsleben
9774 Oberelsbach