summaryrefslogtreecommitdiffstats
path: root/usr.sbin/i4b
diff options
context:
space:
mode:
authorhm <hm@FreeBSD.org>2002-08-12 07:53:55 +0000
committerhm <hm@FreeBSD.org>2002-08-12 07:53:55 +0000
commitbab2f90e8c83b6eb980a9fae5c06507af7c9aca5 (patch)
tree8e32105516b9c65156f2a1e551c1f5c865e99a5a /usr.sbin/i4b
parentbcb47193d3fd4d73dadf171a0537fa2e37fe348f (diff)
downloadFreeBSD-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.h8
-rw-r--r--usr.sbin/i4b/isdnd/isdnd.rc.529
-rw-r--r--usr.sbin/i4b/isdnd/msghdl.c8
-rw-r--r--usr.sbin/i4b/isdnd/rc_config.c15
-rw-r--r--usr.sbin/i4b/isdnd/rc_parse.y6
-rw-r--r--usr.sbin/i4b/isdnd/rc_scan.l3
-rw-r--r--usr.sbin/i4b/isdnd/support.c28
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 */
OpenPOWER on IntegriCloud