Dial Application Q Parameter Unexpectedly Removing SIP cause Header


#1

Hello Asterisk Community.

I am using Asterisk 14.6.0 with the PJSIP channel driver and I am interested in using Q(NONE) as a Dial parameter in order to suppress the Reason:Q.850 header from appearing in the SIP Cancel messages that result from a call being answered elsewhere.

Curiously, the addition of the Q parameter to the Dial Application, which appears to have occurred with the release of Asterisk 13, is not listed in the “New in 13” section of the Asterisk documentation. Nonetheless, starting with that version, the Q parameter appears as an option within the Dial application documentation, which explains that Q(cause) is used to specify the Q.850/Q.931 cause to send on unanswered channels when another channel answers the call. Of particular interest to me is the part of the documentation that says, “You can also specify 0 or NONE to send no cause”.

The reason I want to suppress the Reason:Q.850 header from appearing in the Cancel messages is because several brands of SIP phones are getting confused by its presence and improperly logging these “answered elsewhere” calls as missed calls (Obi, Grandstream and Yaelink are some that I verified). With the old SIP channel driver the Reason:Q.850 did not appear in the Cancel messages and under this circumstance these phones behave well, not improperly logging the call.

But the Q(NONE) option is not working for me. Please observe.

Without Q(NONE) as a Dial parameter, what I see in the SIP Cancel message are two Reason headers (excerpt from Cancel message):
CSeq: 6562 CANCEL
Reason: Q.850;cause=26
Reason: SIP;cause=200;text="Call completed elsewhere"
Max-Forwards: 70
User-Agent: Asterisk PBX 14.6.0
Content-Length: 0

However, with Q(NONE) specified as a Dial parameter, what I see in the SIP Cancel message is that the wrong Reason header appears to have been suppressed (excerpt from Cancel message):
CSeq: 19076 CANCEL
Reason: Q.850;cause=0
Max-Forwards: 70
User-Agent: Asterisk PBX 14.6.0
Content-Length: 0

Why is the Reason:SIP header missing in the Q(NONE) case? What I expected to see with the use of the Q(NONE) option was the removal of the Reason:Q.850 header and the continued presence of the Reason:SIP header.

Is this a bug, or is it my misunderstanding of what the documentation means when it says NONE means to send no [Q.850] cause? If this is not a bug, may I request an enhancement to a future version of Asterisk that includes an option for the suppression of the Reason:Q.850 header while leaving the Reason:SIP header intact?


#2

Sounds like a bug, I’d recommend opening a issue on it at https://issues.asterisk.org/jira/secure/Dashboard.jspa


#3

John,

Thank you for your tip. I followed your recommendation and copied this topic and posted it as an issue to the other system that you referred me to. The issue has now successfully gone through the “triage” process and has been escalated to an open issue. This probably means that it has been taken notice by the correct people.

javauser