Hangup(${DISCONNECTCAUSE}) or made a conditional Hangup(CAUSECODE) if returned causecodes are non-standard On 22 November 2006 15:49, Peter Demeter wrote: > Hi, > > I have a problem with chan_ss7 & Asterisk. > > If an IP Phone (SIP) calls a PSTN number and the call is > terminated by the calling party chan_ss7 won't (?) > recieve a release cause from Asterisk. In my case this > means that the release cause will be 41 (Temporary > Failure) in the connecting EWSD switch instead of 16 > (Normal Call Clearing). > > IP phone calls PSTN -> IP side releases call -> Temporary > failure IP phone calls PSTN -> PSTN side releases call -> > Normal Call Clearing PSTN calls IP phone -> IP side > releases call -> Normal Call Clearing PSTN calls IP phone > -> PSTN side releases call -> Normal Call Clearing > > I tried with: > Asterisk 1.2.10 & chan_ss7 0.8.4 > Asterisk 1.2.10 & chan_ss7 0.9 > Asterisk 1.2.13 & chan_ss7 0.9 > > Based on chan_ss7 0.9 l4isup.c, I guess the developers > are aware of this poblem: > static void initiate_release_circuit(struct ss7_chan* > pvt, int cause) { > pvt->hangupcause = cause; /* Remember for REL > retransmit */ /* We sometimes get hangupcause=0 (seen > when no match in dialplan, not even invalid handler). > This doesn't work too well, for example ast_softhangup() > doesn't actually hang up when hangupcause=0. */ > if(pvt->hangupcause == 0) { > pvt->hangupcause = > AST_CAUSE_NORMAL_TEMPORARY_FAILURE; } > isup_send_rel(pvt, pvt->hangupcause); > pvt->state = ST_SENT_REL; > /* Set up timer T1 and T5 waiting for RLC. */ > t1_start(pvt); > t5_start(pvt); > } > > Anybody knows a way to correct this? Preferably within > Asterisk. As a temporal solution I modified l4isup.c, > but I think it's not the correct place to do it. > > Regards, > Peter