ISDN4BSD - Dropped Calls
Hans Petter
mc467741 at c2i.net
Sat Jan 6 13:56:56 PST 2007
Hi Oliver,
On Sat, 06 Jan 2007 22:20:51 +0100
Oliver von Bueren wrote:
> Hello Hans Petter
>
> Thanks for pointing me to the reason for the
>STATUS_ENQUIRY messages with an invalid call reference.
>I've checked the behaviour after changing the code in
> dss1_l2_get_mbuf to not append any data but send the
>packet on without the STATUS_ENQUIRY attached. This did
>not change the overall result, except of course that the
>releasing of the "fake" call does not happen any more.
>Kind of a prove that this method used here does not
>confuse the PBX.
>
> As you wrote, a STATUS_ENQUIRY (I'm now talking about
>the one for the real call) needs to be answered by the
>PBX, which according to the trace, it does not. No idea
>why this is, I'll try to get a trace form the PBX.< br>>
> The strange thing is, that a lot of other applications
>connected to that PBX/port run without problem, even a
>FreeBSD 4.3 with the then-current i4b and some voice
>response system. Amongst the other working things are
>hardware phones/modems and even an active Card (Eicon
>Diva Pro 2.0) running under windows with the sort-of
>cygwin-port of Asterisk (from
>http://www.asteriskwin32.com/) runs without any problems.
>But as you can guess, I'd like to get away from that
>stone-age Asterisk version and change to my FreeBSD
>server.
Most ISDN equipment I have seen never queries for STATUS, whatsoever.
So maybe your provider did not see a reason to support that.
>
> If I find anything, I'll keep you posted.
> If you've any ideas on how to fix my problem, drop me a
>note.
I could implement an option that allows you to disable checking of
status, but I really don't like to do that.
In "cd_set_state()" you have the following code:
cd->state = newstate;
/* re-start timeout;
* the timeout is increased when L1 is not activated
* the timeout is always running while the CD is allocated
*/
__callout_reset(&cd->set_state_callout,
(L3_STATES_TIMEOUT_DELAY[newstate]*hz) +
(sc->L1_activity ? 0 : L1_ACTIVATION_TIME),
& nbsp; (void *)(void *)&cd_set_state_timeout,
cd);
if(send_status_enquiry)
{
/* need to check status regularly */
dss1_l3_tx_status_enquiry(cd);
}
You can try putting:
if (send_status_enquiry) {
newstate--;
}
Before:
cd->state = newstate;
That will prevent the status expiry timer from elapsing.
Yours
--HPS
More information about the freebsd-isdn
mailing list