PJSIP Redirect_method=uri_core And Header Modifications

Home » Asterisk Users » PJSIP Redirect_method=uri_core And Header Modifications
Asterisk Users 3 Comments

With chan_sip there is the variable SIP_MAX_FORWARDS to set Max-Forwards. This counter is persistant after a redirect. I can’t find the equivalent for PJSIP, so I went the way of header manipulation. Only to find out that any headers added to the outbound leg are lost after a redirect (with redirect_method=uri_core (didn’t try any other since in the past they didn’t work for me)).

Am I missing something? Or is this a PJSIP feature?

chan_sip example:

[macro-maxforwards]
exten => s,1,NoOp()
exten => s,n,Set(mf=${SIP_HEADER(Max-Forwards)})
exten => s,n,Set(mf=$[ ${mf} – 1 ])
exten => s,n,ExecIf($[ ${mf} < 1 ]?Hangup(19)) exten => s,n,Set(__SIP_MAX_FORWARDS=${mf})
exten => s,n,SipAddHeader(X-Foo: bar)
exten => s,n,MacroExit()

[route]
… exten => _+.,n,Macro(maxforwards)
exten => _+.,n,Dial(SIP/${EXTEN}@redirector)

An incomig INVITE will look like:

To the redirector:

< SIP/2.0 302 Redirect < Contact:

To somewhereelse:

PJSIP example (where the add strangely overrides the default Max-Forwards: 70).

[setoutgoinglegvars]
exten => add,1,Set(PJSIP_HEADER(add,Max-Forwards)`)
exten => add,1,Set(PJSIP_HEADER(add,X-Foo)

3 thoughts on - PJSIP Redirect_method=uri_core And Header Modifications

  • Forgot to mention this is tested on Debian/stable its Asterisk:
    13.14.1~dfsg-2+deb9u3 (so 13.14.x with some fixes).

  • redirect_method=uri_pjsip works as expected with regard to the header manipulation stuff.

    Also I can’t remember why, in the past, I decided to not use uri_pjsip other than having the redirected host in CDRs with uri_core and the original with uri_pjsip (which I don’t really care about).

    I still think header manipulation should work with uri_core though.

  • I found that out after going live with uri_pjsip:
    the domain in the to header with uri_pjsip is the hostname/ip of the redirector. With uri_core the domain will be the hostname/ip of the contact header in the 302 response.

    Reading the redirect_method description (version 13):
    “If this option is set to uri_core the target URI is returned to the dialing application which dials it using the PJSIP channel driver and endpoint originally used. If this option is set to uri_pjsip the redirect occurs within chan_pjsip itself and is not exposed to the core at all.”

    The wording for uri_core is that the original endpoint context will be used, that would make changing the to domain a bug IMHO. But since I
    need this behavior it is a nice feature.