Asterisk Transfers
Does anyone know if there is a way to disable the norefersub for PJSIP?
It appears this is causing problems with a test we’re running with Cisco.
A wireshark trace from a system where the transfer with Cisco works versus a trace with Asterisk/Cisco shows one big difference being the supported: norefersub
The REFER Accepted response is received by Asterisk. However, Cisco doesn’t send the NOTIFY messages with 100 Trying followed by 404 Not Found.
From what we’ve been able to determine, this is a direct result of
200 OK packet including Supported: 100rel, timer, replaces, norefersub
Specifically, the norefersub.
Dan
6 thoughts on - Asterisk Transfers
Is there no one who knows if there is a way to turn off the norefersub setting?
Supported: norefersub
This happens in the TRYing, OK, and other commands in response to the INVITE.
For chan_sip, I noticed it does not send the norefersub. As a result, Cisco then sends NOTIFY packets with TRYing, Ringing, OK inside them. This basically gives the chan_sip code the ability to know if the REFER (Transfer) is succeeding or not.
Dan
From: asterisk-users On Behalf Of Dan Cropp Sent: Monday, March 25, 2019 4:03 PM
To: asterisk-users@lists.digium.com Subject: [asterisk-users] Asterisk Transfers
Does anyone know if there is a way to disable the norefersub for PJSIP?
It appears this is causing problems with a test we’re running with Cisco.
A wireshark trace from a system where the transfer with Cisco works versus a trace with Asterisk/Cisco shows one big difference being the supported: norefersub
The REFER Accepted response is received by Asterisk. However, Cisco doesn’t send the NOTIFY messages with 100 Trying followed by 404 Not Found.
From what we’ve been able to determine, this is a direct result of
200 OK packet including Supported: 100rel, timer, replaces, norefersub
Specifically, the norefersub.
Dan
There is no way to configure it. It would have to be removed from res_pjsip_refer’s code itself. The presence of “norefersub” in Supported also isn’t supposed to enable it. It’s just for stating it is supported. It’s supposed to be enabled by the presence of the “Refer-Sub” header in the REFER itself. I don’t believe we set that on the REFER we produce, we only care if we receive a REFER with it in place.
—
Joshua C. Colp Digium – A Sangoma Company | Senior Software Developer
445 Jan Davis Drive NW – Huntsville, AL 35806 – US
Check us out at: http://www.digium.com & http://www.asterisk.org
—
Thank you Joshua.
We’re trying to run more tests. We believe Cisco may not be adhering to the specification. Unfortunately, we’re also stuck with having to make it work.
An interesting test, I commented out the norefersub from the res_pjsip_refer.c code just for a test. Without this, Cisco does sent the NOTIFY packets to let Asterisk know the status (Trying, Ringing, OK, 486 Busy Here, …)
Would it make sense for me to try including the Refer-Sub in the REFER packet Asterisk sends to Cisco? Perhaps Cisco sees the norefersub, but not the Refer-Sub header. It may interpret the lack of a Refer-Sub header in the REFER incorrectly?
Dan
—–Original Message—
It’s entirely possible it might. It doesn’t hurt to try.
—
Joshua C. Colp Digium – A Sangoma Company | Senior Software Developer
445 Jan Davis Drive NW – Huntsville, AL 35806 – US
Check us out at: http://www.digium.com & http://www.asterisk.org
—
Hi Joshua,
Unfortunately, I tried including the Refer-Sub true and also false in the REFER packet and Cisco seems to ignore them.
Refer-Sub: false and Refer-Sub: true
The only thing that seems to work properly with the Cisco switch is to remove the norefersub from Supported
Joshua, is it correct that the norefersub has to be in res_pjsip_refer.c for Asterisk to be able to process incoming REFER requests?
If I were willing to write code, how difficult would it be to make the norefersub optional or used for incoming (allowing phones to REFER), but not for outgoing (not send to Cisco)?
—–Original Message—
I’ll answer here too for anyone interested. The RFC[1] states that it should be present so that the remote endpoint knows whether or not it is supported. Removing it may effectively remove support. It depends on whether a remote endpoint takes it into account or not when issuing the REFER.
You also can’t limit it at that level, because generally for most things you don’t know if you are sending or receiving a REFER. The “norefersub” Supported occurs before it happens. You could only limit it globally.
[1] https://www.ietf.org/rfc/rfc4488.txt
—
Joshua C. Colp Digium – A Sangoma Company | Senior Software Developer
445 Jan Davis Drive NW – Huntsville, AL 35806 – US
Check us out at: http://www.digium.com & http://www.asterisk.org
—