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:
parent
f22c75d112
commit
af7e5bfa2c
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue