[Asterisk-Users] TDM400 FXO stops handling outgoing calls,
but still accepts incoming?
William R Sowerbutts
will at sowerbutts.com
Mon Nov 22 06:20:10 MST 2004
Having read through the Caller ID code, it appears that this is indeed what is
happening. The Caller ID code doesn't contain any logic to trigger a timeout
if no Caller ID data stream is found, or if a stream starts and does not
terminate.
The attached patch causes the Caller ID to timeout after processing around 15
seconds of data. I assume that this should be quite long enough, but I am no
Caller ID expert!
I've tested this patch with BT's automated line test (dial 17070, options 3,
1, 2). It appears to work fine:
== Starting post polarity CID detection on channel 3
-- Starting simple switch on 'Zap/3-1'
Nov 22 13:16:03 NOTICE[7862]: chan_zap.c:5257 ss_thread: Got event 17 (Polarity Reversal)...
Nov 22 13:16:13 ERROR[7862]: callerid.c:257 callerid_feed: Caller ID processed 120160 samples, giving up.
Nov 22 13:16:13 WARNING[7862]: chan_zap.c:5272 ss_thread: CallerID feed failed: Success
Nov 22 13:16:13 WARNING[7862]: chan_zap.c:5284 ss_thread: CallerID returned with error on channel 'Zap/3-1'
Nov 22 13:16:15 WARNING[7862]: chan_zap.c:5293 ss_thread: CID timed out waiting for ring. Exiting simple switch
-- Hungup 'Zap/3-1'
Mark, how do I go about getting this included in CVS?
Thanks,
Will
On Sun, Nov 21, 2004 at 10:34:27PM +0000, William R Sowerbutts wrote:
>Hmmmm.
>
>Is it possible that the line is detecting a polarity event, decided that the
>line is ringing and started listening for a non-existant V23 data stream, and
>then the line has not in fact rung?
>
>This would mark the line as busy (and unable to handle an outgoing call) but
>when a call did in fact come in the line would then ring correctly.
>
>I believe BT's automated testing equipment can produce these line conditions.
>
>Will
_________________________________________________________________________
William R Sowerbutts will at sowerbutts.com
"Carpe post meridiem" http://sowerbutts.com
main(){char*s=">#=0> ^#X@#@^7=",c=0,m;for(;c<15;c++)for
(m=-1;m<7;putchar(m++/6&c%3/2?10:s[c]-31&1<<m?42:32));}
-------------- next part --------------
--- asterisk/callerid.c.orig 2004-11-22 13:01:33.000000000 +0000
+++ asterisk/callerid.c 2004-11-22 13:01:59.000000000 +0000
@@ -43,6 +43,7 @@
int flags;
int sawflag;
int len;
+ int eaten;
};
@@ -132,6 +133,7 @@
cid->fskd.cont = 0; /* Digital PLL reset */
cid->fskd.x0 = 0.0;
cid->fskd.state = 0;
+ cid->eaten = 0;
memset(cid->name, 0, sizeof(cid->name));
memset(cid->number, 0, sizeof(cid->number));
cid->flags = CID_UNKNOWN_NAME | CID_UNKNOWN_NUMBER;
@@ -249,6 +251,12 @@
ast_log(LOG_WARNING, "Out of memory\n");
return -1;
}
+ cid->eaten += len;
+ if(cid->eaten > (8000 * 15)){
+ /* we've eaten over 15 seconds of data */
+ ast_log(LOG_ERROR, "Caller ID processed %d samples, giving up.\n", cid->eaten);
+ return -1;
+ }
memset(buf, 0, 2 * len + cid->oldlen);
memcpy(buf, cid->oldstuff, cid->oldlen);
mylen += cid->oldlen/2;
More information about the asterisk-users
mailing list