diff --git a/isdnlog/Makefile.in b/isdnlog/Makefile.in index e8c29984..8e298226 100644 --- a/isdnlog/Makefile.in +++ b/isdnlog/Makefile.in @@ -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 +## +0. This may be useful for point-to-point setups, +## when 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 diff --git a/isdnlog/country-de.dat b/isdnlog/country-de.dat index 0c4fe34d..9b615519 100644 --- a/isdnlog/country-de.dat +++ b/isdnlog/country-de.dat @@ -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 diff --git a/isdnlog/isdnlog/isdnlog.h b/isdnlog/isdnlog/isdnlog.h index 43635233..602a54c4 100644 --- a/isdnlog/isdnlog/isdnlog.h +++ b/isdnlog/isdnlog/isdnlog.h @@ -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 + * +0. This may be useful for point-to-point setups, + * when 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 */ diff --git a/isdnlog/isdnlog/messages.c b/isdnlog/isdnlog/messages.c index 0901c2b5..6df2a317 100644 --- a/isdnlog/isdnlog/messages.c +++ b/isdnlog/isdnlog/messages.c @@ -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", diff --git a/isdnlog/isdnlog/processor.c b/isdnlog/isdnlog/processor.c index 997eb0bf..55766296 100644 --- a/isdnlog/isdnlog/processor.c +++ b/isdnlog/isdnlog/processor.c @@ -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 + * +0. This may be useful for point-to-point setups, + * when 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 */ diff --git a/isdnlog/tools/dest.c b/isdnlog/tools/dest.c index c88814d3..4aa1c4f0 100644 --- a/isdnlog/tools/dest.c +++ b/isdnlog/tools/dest.c @@ -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); diff --git a/isdnlog/tools/telnum.h b/isdnlog/tools/telnum.h index ea9edfac..f78aadf7 100644 --- a/isdnlog/tools/telnum.h +++ b/isdnlog/tools/telnum.h @@ -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 */ diff --git a/isdnlog/tools/tools.h b/isdnlog/tools/tools.h index 6a161f03..8687d5d1 100644 --- a/isdnlog/tools/tools.h +++ b/isdnlog/tools/tools.h @@ -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 + * +0. This may be useful for point-to-point setups, + * when 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 diff --git a/isdnlog/tools/zone/de/code b/isdnlog/tools/zone/de/code index f15d546b..d160cb5c 100644 --- a/isdnlog/tools/zone/de/code +++ b/isdnlog/tools/zone/de/code @@ -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