diff options
author | hm <hm@FreeBSD.org> | 2002-08-12 07:53:55 +0000 |
---|---|---|
committer | hm <hm@FreeBSD.org> | 2002-08-12 07:53:55 +0000 |
commit | bab2f90e8c83b6eb980a9fae5c06507af7c9aca5 (patch) | |
tree | 8e32105516b9c65156f2a1e551c1f5c865e99a5a /usr.sbin/i4b | |
parent | bcb47193d3fd4d73dadf171a0537fa2e37fe348f (diff) | |
download | FreeBSD-src-bab2f90e8c83b6eb980a9fae5c06507af7c9aca5.zip FreeBSD-src-bab2f90e8c83b6eb980a9fae5c06507af7c9aca5.tar.gz |
add support properly displaying and logging incoming telephone numbers (MSNs)
by looking at the "type of number" field and providing configurable hooks
to correct the numbers accordingly. See keywords add-prefix, prefix-national
and prefix-international in isdnd.rc(5).
This feature was implemented by Christian Ullrich <chris@chrullrich.de>
Diffstat (limited to 'usr.sbin/i4b')
-rw-r--r-- | usr.sbin/i4b/isdnd/isdnd.h | 8 | ||||
-rw-r--r-- | usr.sbin/i4b/isdnd/isdnd.rc.5 | 29 | ||||
-rw-r--r-- | usr.sbin/i4b/isdnd/msghdl.c | 8 | ||||
-rw-r--r-- | usr.sbin/i4b/isdnd/rc_config.c | 15 | ||||
-rw-r--r-- | usr.sbin/i4b/isdnd/rc_parse.y | 6 | ||||
-rw-r--r-- | usr.sbin/i4b/isdnd/rc_scan.l | 3 | ||||
-rw-r--r-- | usr.sbin/i4b/isdnd/support.c | 28 |
7 files changed, 95 insertions, 2 deletions
diff --git a/usr.sbin/i4b/isdnd/isdnd.h b/usr.sbin/i4b/isdnd/isdnd.h index f95e841..e4a0ffc 100644 --- a/usr.sbin/i4b/isdnd/isdnd.h +++ b/usr.sbin/i4b/isdnd/isdnd.h @@ -659,6 +659,10 @@ time_t starttime = 0; char holidayfile[MAXPATHLEN] = HOLIDAY_FILE_DEF; /* holiday filename */ +int addprefix = 0; +char prefixnational[TELNO_MAX] = ""; +char prefixinternational[TELNO_MAX] = ""; + #else /* !MAIN */ int isdnfd; @@ -743,6 +747,10 @@ time_t starttime; char holidayfile[MAXPATHLEN]; +int addprefix; +char prefixnational[TELNO_MAX]; +char prefixinternational[TELNO_MAX]; + #endif /* MAIN */ char * bdrivername ( int drivertype ); diff --git a/usr.sbin/i4b/isdnd/isdnd.rc.5 b/usr.sbin/i4b/isdnd/isdnd.rc.5 index ee2e35a..a74546f 100644 --- a/usr.sbin/i4b/isdnd/isdnd.rc.5 +++ b/usr.sbin/i4b/isdnd/isdnd.rc.5 @@ -24,9 +24,9 @@ .\" .\" $FreeBSD$ .\" -.\" last edit-date: [Sun Aug 11 13:03:49 2002] +.\" last edit-date: [Sun Aug 11 20:07:38 2002] .\" -.Dd March 26, 2002 +.Dd August 11, 2002 .Dt ISDND.RC 5 .Os .Sh NAME @@ -101,6 +101,17 @@ See also system keyword .Em rotatesuffix . If this keyword is omitted the system default is used. (optional) +.It Li add-prefix +If set to +.Em on , +for incoming numbers, have a look at the "type of number" indicator and +adjust the number as specified by the +.Em prefix-national +and +.Em prefix-international +keywords described later. +If this keyword is omitted, the system default (off) is used. +(optional) .It Li aliasing If this parameter is set to .Em on , @@ -203,6 +214,20 @@ The supported access rights are: .It Ar callin .It Ar callout .El +.It Li prefix-international +In conjunction with the +.Em add-prefix +switch (see above), specify the prefix number string for incoming numbers +with the international number tag. If aliases are used, they have to be +adjusted accordingly. +(optional) +.It Li prefix-national +In conjunction with the +.Em add-prefix +switch (see above), specify the prefix number string for incoming numbers +with the national number tag. If aliases are used, they have to be +adjusted accordingly. +(optional) .It Li ratesfile Specifies the name of the ratesfile. If this keyword is omitted the system diff --git a/usr.sbin/i4b/isdnd/msghdl.c b/usr.sbin/i4b/isdnd/msghdl.c index 2b12226..2687e48 100644 --- a/usr.sbin/i4b/isdnd/msghdl.c +++ b/usr.sbin/i4b/isdnd/msghdl.c @@ -64,6 +64,14 @@ msg_connect_ind(msg_connect_ind_t *mp) #define SRC (aliasing == 0 ? mp->src_telno : src_tela) #define DST (aliasing == 0 ? mp->dst_telno : dst_tela) + /* Add prefixes. All preexisting alias files are useless + if this is on. */ + if(addprefix) + { + add_number_prefix(mp->src_telno, mp->src_ton); + add_number_prefix(mp->dst_telno, mp->dst_ton); + } + if(aliasing) { src_tela = get_alias(mp->src_telno); diff --git a/usr.sbin/i4b/isdnd/rc_config.c b/usr.sbin/i4b/isdnd/rc_config.c index b06685c..6504747 100644 --- a/usr.sbin/i4b/isdnd/rc_config.c +++ b/usr.sbin/i4b/isdnd/rc_config.c @@ -361,6 +361,11 @@ cfg_setval(int keyword) strcpy(acctfile, yylval.str); DBGL(DL_RCCF, (log(LL_DBG, "system: acctfile = %s", yylval.str))); break; + + case ADDPREFIX: + addprefix = yylval.booln; + DBGL(DL_RCCF, (log(LL_DBG, "system: add-prefix = %d", yylval.booln))); + break; case ALERT: if(yylval.num < MINALERT) @@ -910,6 +915,16 @@ cfg_setval(int keyword) set_isppp_auth(entrycount); break; + case PREFIXINTERNATIONAL: + strncpy(prefixinternational, yylval.str, sizeof(prefixinternational)-1); + DBGL(DL_RCCF, (log(LL_DBG, "system: prefix-international = %s", prefixinternational))); + break; + + case PREFIXNATIONAL: + strncpy(prefixnational, yylval.str, sizeof(prefixnational)-1); + DBGL(DL_RCCF, (log(LL_DBG, "system: prefix-national = %s", prefixnational))); + break; + case PROTOCOL: DBGL(DL_RCCF, (log(LL_DBG, "controller %d: protocol = %s", controllercount, yylval.str))); if(!(strcmp(yylval.str, "dss1"))) diff --git a/usr.sbin/i4b/isdnd/rc_parse.y b/usr.sbin/i4b/isdnd/rc_parse.y index 0395bfb..6427500 100644 --- a/usr.sbin/i4b/isdnd/rc_parse.y +++ b/usr.sbin/i4b/isdnd/rc_parse.y @@ -73,6 +73,7 @@ int controllercount = -1; %token ACCTALL %token ACCTFILE +%token ADDPREFIX %token ALERT %token ALIASFNAME %token ALIASING @@ -141,6 +142,8 @@ int controllercount = -1; %token PPP_SEND_AUTH %token PPP_SEND_NAME %token PPP_SEND_PASSWORD +%token PREFIXNATIONAL +%token PREFIXINTERNATIONAL %token PROTOCOL %token RATESFILE %token RATETYPE @@ -349,6 +352,7 @@ sysfilekeyword: RATESFILE { $$ = RATESFILE; } sysboolkeyword: USEACCTFILE { $$ = USEACCTFILE; } | ALIASING { $$ = ALIASING; } | ACCTALL { $$ = ACCTALL; } + | ADDPREFIX { $$ = ADDPREFIX; } | BEEPCONNECT { $$ = BEEPCONNECT; } | EXTCALLATTR { $$ = EXTCALLATTR; } | ISDNTIME { $$ = ISDNTIME; } @@ -361,6 +365,8 @@ sysnumkeyword: MONITORPORT { $$ = MONITORPORT; } sysstrkeyword: MAILER { $$ = MAILER; } | MAILTO { $$ = MAILTO; } + | PREFIXNATIONAL { $$ = PREFIXNATIONAL; } + | PREFIXINTERNATIONAL { $$ = PREFIXINTERNATIONAL; } | ROTATESUFFIX { $$ = ROTATESUFFIX; } | REGEXPR { $$ = REGEXPR; } | REGPROG { $$ = REGPROG; } diff --git a/usr.sbin/i4b/isdnd/rc_scan.l b/usr.sbin/i4b/isdnd/rc_scan.l index ac5c018..988a4fb 100644 --- a/usr.sbin/i4b/isdnd/rc_scan.l +++ b/usr.sbin/i4b/isdnd/rc_scan.l @@ -87,6 +87,7 @@ int lineno; acctall { return ACCTALL; } acctfile { return ACCTFILE; } +add-prefix { return ADDPREFIX; } alert { return ALERT; } aliasing { return ALIASING; } aliasfile { return ALIASFNAME; } @@ -157,6 +158,8 @@ ppp-expect-password { return PPP_EXPECT_PASSWORD; } ppp-send-auth { return PPP_SEND_AUTH; } ppp-send-name { return PPP_SEND_NAME; } ppp-send-password { return PPP_SEND_PASSWORD; } +prefix-international { return PREFIXINTERNATIONAL; } +prefix-national { return PREFIXNATIONAL; } protocol { return PROTOCOL; } ratesfile { return RATESFILE; } ratetype { return RATETYPE; } diff --git a/usr.sbin/i4b/isdnd/support.c b/usr.sbin/i4b/isdnd/support.c index cd5e36d..b6c53a8 100644 --- a/usr.sbin/i4b/isdnd/support.c +++ b/usr.sbin/i4b/isdnd/support.c @@ -1135,4 +1135,32 @@ dayok: return(0); } +/*--------------------------------------------------------------------------* + * prepend national or international prefix to a number + *--------------------------------------------------------------------------*/ +int add_number_prefix(char *number, int type_of_number) +{ + char tmp[TELNO_MAX]; + char *prefix; + int result = 0; + + if (type_of_number == TON_NATIONAL || type_of_number == TON_INTERNAT) + { + if (type_of_number == TON_NATIONAL) + prefix = prefixnational; + else + prefix = prefixinternational; + + /* Add prefix only if not already there */ + if (strncmp(number, prefix, strlen(prefix)) != 0) + { + snprintf(tmp, sizeof(tmp)-1, "%s%s", prefix, number); + strncpy(number, tmp, TELNO_MAX-1); + result = 1; + } + } + + return result; +} + /* EOF */ |