dect
/
asterisk
Archived
13
0
Fork 0

Add distinctive ring detection with Caller ID for Australia, New Zealand, and other countries. (issue #3596 reported by deon patch by dbowerman with minor mods by moi)

git-svn-id: http://svn.digium.com/svn/asterisk/trunk@27812 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
file 2006-05-17 16:51:47 +00:00
parent b67ad9f025
commit 8a01819b8a
2 changed files with 65 additions and 6 deletions

View File

@ -206,6 +206,7 @@ static char musicclass[MAX_MUSICCLASS] = "";
static char progzone[10]= "";
static int usedistinctiveringdetection = 0;
static int distinctiveringaftercid = 0;
static int transfertobusy = 1;
@ -6246,6 +6247,59 @@ lax);
break;
}
}
if (res == 1) {
callerid_get(cs, &name, &number, &flags);
if (option_debug)
ast_log(LOG_DEBUG, "CallerID number: %s, name: %s, flags=%d\n", number, name, flags);
}
if (distinctiveringaftercid == 1) {
/* Clear the current ring data array so we dont have old data in it. */
for (receivedRingT=0; receivedRingT < 3; receivedRingT++) {
curRingData[receivedRingT] = 0;
}
receivedRingT = 0;
if(option_verbose > 2)
ast_verbose( VERBOSE_PREFIX_3 "Detecting post-CID distinctive ring\n");
for(;;) {
i = ZT_IOMUX_READ | ZT_IOMUX_SIGEVENT;
if ((res = ioctl(p->subs[index].zfd, ZT_IOMUX, &i))) {
ast_log(LOG_WARNING, "I/O MUX failed: %s\n", strerror(errno));
callerid_free(cs);
ast_hangup(chan);
return NULL;
}
if (i & ZT_IOMUX_SIGEVENT) {
res = zt_get_event(p->subs[index].zfd);
ast_log(LOG_NOTICE, "Got event %d (%s)...\n", res, event2str(res));
res = 0;
/* Let us detect callerid when the telco uses distinctive ring */
curRingData[receivedRingT] = p->ringt;
if (p->ringt < p->ringt_base/2)
break;
++receivedRingT; /* Increment the ringT counter so we can match it against
values in zapata.conf for distinctive ring */
} else if (i & ZT_IOMUX_READ) {
res = read(p->subs[index].zfd, buf, sizeof(buf));
if (res < 0) {
if (errno != ELAST) {
ast_log(LOG_WARNING, "read returned error: %s\n", strerror(errno));
callerid_free(cs);
ast_hangup(chan);
return NULL;
}
break;
}
if (p->ringt)
p->ringt--;
if (p->ringt == 1) {
res = -1;
break;
}
}
}
}
if (p->usedistinctiveringdetection == 1) {
if(option_verbose > 2)
/* this only shows up if you have n of the dring patterns filled in */
@ -6254,6 +6308,12 @@ lax);
for (counter=0; counter < 3; counter++) {
/* Check to see if the rings we received match any of the ones in zapata.conf for this
channel */
if(option_verbose > 2)
/* this only shows up if you have n of the dring patterns filled in */
ast_verbose( VERBOSE_PREFIX_3 "Checking %d,%d,%d\n",
p->drings.ringnum[counter].ring[0],
p->drings.ringnum[counter].ring[1],
p->drings.ringnum[counter].ring[2]);
distMatches = 0;
for (counter1=0; counter1 < 3; counter1++) {
if (curRingData[counter1] <= (p->drings.ringnum[counter].ring[counter1]+10) && curRingData[counter1] >=
@ -6271,11 +6331,6 @@ lax);
}
}
}
if (res == 1) {
callerid_get(cs, &name, &number, &flags);
if (option_debug)
ast_log(LOG_DEBUG, "CallerID number: %s, name: %s, flags=%d\n", number, name, flags);
}
/* Restore linear mode (if appropriate) for Caller*ID processing */
zt_setlinear(p->subs[index].zfd, p->subs[index].linear);
#if 1
@ -10354,6 +10409,9 @@ static int setup_zap(int reload)
} else if (!strcasecmp(v->name, "usedistinctiveringdetection")) {
if (ast_true(v->value))
usedistinctiveringdetection = 1;
} else if (!strcasecmp(v->name, "distinctiveringaftercid")) {
if (ast_true(v->value))
distinctiveringaftercid = 1;
} else if (!strcasecmp(v->name, "dring1context")) {
ast_copy_string(drings.ringContext[0].contextData,v->value,sizeof(drings.ringContext[0].contextData));
} else if (!strcasecmp(v->name, "dring2context")) {

View File

@ -223,7 +223,8 @@ rxwink=300 ; Atlas seems to use long (250ms) winks
; Whether or not to do distinctive ring detection on FXO lines
;
;usedistinctiveringdetection=yes
;distinctiveringaftercid=yes ; enable dring detection after callerid for those countries like Australia
; where the ring cadence is changed *after* the callerid spill.
;
; Whether or not to use caller ID
;