Davor Jovanovic
2018-Dec-10 10:02 UTC
[asterisk-users] PJSIP_HEADER - Diversion header manipulation
Hi all, I’m trying to rewrite Diversion header when call forwarding is done on the phone. The phone sends "302 Moved Temporarily" response and sets Diversion header to a local number, but before Asterisk sends this call towards TSP provider I need to change Diversion header to a full PSTN number. I am using PJSIP_HEADER in a pre-dial handler (configuration is below). On the same call I can add some other custom headers (logs are below). Is there any chance I can rewrite Diversion header in this scenario with PJSIP_HEADER function? Asterisk version is 16.0.1 built from source on Debian 9. Thank you Davor # Outgoing context - TSP provider [outgoing] exten => 0123456789,1,Dial(PJSIP/${EXTEN}@${SBC_1},,b(add_diversion^FWDdiver^1)) same => n,Hangup() # Diversion manipulation context [add_diversion] exten => FWDdiver,1,Set(PJSIP_HEADER(add,Diversion)=<sip:full_pstn_no at example.com>\;reason=unconditional\;screen=yes\;privacy=off)) exten => FWDdiver,2,Set(PJSIP_HEADER(add,CustomOne)=<sip:custom_one at example.com>\;reason=unconditional\;screen=yes\;privacy=off)) exten => FWDdiver,3,Set(PJSIP_HEADER(add,CustomTwo)=<sip:custom_two at example.com>\;reason=unconditional\;screen=yes\;privacy=off)) exten => FWDdiver,4,Return() Asterisk*CLI> -- Now forwarding PJSIP/527-00000168 to 'Local/0123456789 at outgoing' (thanks to PJSIP/836-00000169) [Dec 10 10:25:08] NOTICE[26309][C-000000c0]: app_dial.c:1005 do_forward: Not accepting call completion offers from call-forward recipient Local/0123456789 at outgoing-0000002c;1 -- Executing [0123456789 at outgoing:1] Dial("Local/0123456789 at outgoing-0000002c;2", "PJSIP/0123456789 at SBC1,,b(add_diversion^FWDdiver^1)") in new stack -- PJSIP/SBC1-0000016a Internal Gosub(add_diversion,FWDdiver,1) start -- Executing [FWDdiver at add_diversion:1] Set("PJSIP/SBC1-0000016a", "PJSIP_HEADER(add,Diversion)=<sip:full_pstn_no at example.com>;reason=unconditional;screen=yes;privacy=off)") in new stack -- Executing [FWDdiver at add_diversion:2] Set("PJSIP/SBC1-0000016a", "PJSIP_HEADER(add,CustomOne)=<sip:custom_one at example.com>;reason=unconditional;screen=yes;privacy=off)") in new stack -- Executing [FWDdiver at add_diversion:3] Set("PJSIP/SBC1-0000016a", "PJSIP_HEADER(add,CustomTwo)=<sip:custom_two at example.com>;reason=unconditional;screen=yes;privacy=off)") in new stack -- Executing [FWDdiver at add_diversion:4] Return("PJSIP/SBC1-0000016a", "") in new stack Phone => Asterisk U 10.201.8.192:5060 -> 10.201.1.19:5060 SIP/2.0 302 Moved Temporarily. Diversion: <sip:836 at 10.201.1.19>;reason=unconditional. Asterisk => TSP provider U 10.201.1.19:5060 -> 10.201.1.15:5060 CustomOne: <sip:custom_one at example.com>;reason=unconditional;screen=yes;privacy=off. CustomTwo: <sip:custom_two at example.com>;reason=unconditional;screen=yes;privacy=off. Diversion: <sip:836 at 192.168.1.101>;reason=unconditional.
John Kiniston
2018-Dec-10 17:23 UTC
[asterisk-users] PJSIP_HEADER - Diversion header manipulation
Davor, Have you attempted to do a Set(PJSIP_HEADER(remove,Diversion)=)) in your add_diversion context to remove the header Asterisk is passing through? On Mon, Dec 10, 2018 at 3:04 AM Davor Jovanovic <davor.jovanovic at srce.hr> wrote:> Hi all, > > I’m trying to rewrite Diversion header when call forwarding is done on > the phone. The phone sends "302 Moved Temporarily" response and sets > Diversion header to a local number, but before Asterisk sends this call > towards TSP provider I need to change Diversion header to a full PSTN > number. I am using PJSIP_HEADER in a pre-dial handler (configuration is > below). On the same call I can add some other custom headers (logs are > below). > > Is there any chance I can rewrite Diversion header in this scenario with > PJSIP_HEADER function? Asterisk version is 16.0.1 built from source on > Debian 9. > > > Thank you > > Davor > > > # Outgoing context - TSP provider > [outgoing] > exten => > 0123456789,1,Dial(PJSIP/${EXTEN}@${SBC_1},,b(add_diversion^FWDdiver^1)) > same => n,Hangup() > > # Diversion manipulation context > [add_diversion] > exten => > FWDdiver,1,Set(PJSIP_HEADER(add,Diversion)=<sip:full_pstn_no at example.com > >\;reason=unconditional\;screen=yes\;privacy=off)) > exten => > FWDdiver,2,Set(PJSIP_HEADER(add,CustomOne)=<sip:custom_one at example.com > >\;reason=unconditional\;screen=yes\;privacy=off)) > exten => > FWDdiver,3,Set(PJSIP_HEADER(add,CustomTwo)=<sip:custom_two at example.com > >\;reason=unconditional\;screen=yes\;privacy=off)) > exten => FWDdiver,4,Return() > > > Asterisk*CLI> > -- Now forwarding PJSIP/527-00000168 to 'Local/0123456789 at outgoing' > (thanks to PJSIP/836-00000169) > [Dec 10 10:25:08] NOTICE[26309][C-000000c0]: app_dial.c:1005 do_forward: > Not accepting call completion offers from call-forward recipient > Local/0123456789 at outgoing-0000002c;1 > -- Executing [0123456789 at outgoing:1] > Dial("Local/0123456789 at outgoing-0000002c;2", > "PJSIP/0123456789 at SBC1,,b(add_diversion^FWDdiver^1)") in new stack > -- PJSIP/SBC1-0000016a Internal Gosub(add_diversion,FWDdiver,1) start > -- Executing [FWDdiver at add_diversion:1] Set("PJSIP/SBC1-0000016a", > "PJSIP_HEADER(add,Diversion)=<sip:full_pstn_no at example.com>;reason=unconditional;screen=yes;privacy=off)") > > in new stack > -- Executing [FWDdiver at add_diversion:2] Set("PJSIP/SBC1-0000016a", > "PJSIP_HEADER(add,CustomOne)=<sip:custom_one at example.com>;reason=unconditional;screen=yes;privacy=off)") > > in new stack > -- Executing [FWDdiver at add_diversion:3] Set("PJSIP/SBC1-0000016a", > "PJSIP_HEADER(add,CustomTwo)=<sip:custom_two at example.com>;reason=unconditional;screen=yes;privacy=off)") > > in new stack > -- Executing [FWDdiver at add_diversion:4] > Return("PJSIP/SBC1-0000016a", "") in new stack > > > Phone => Asterisk > U 10.201.8.192:5060 -> 10.201.1.19:5060 > SIP/2.0 302 Moved Temporarily. > Diversion: <sip:836 at 10.201.1.19>;reason=unconditional. > > > Asterisk => TSP provider > U 10.201.1.19:5060 -> 10.201.1.15:5060 > CustomOne: > <sip:custom_one at example.com>;reason=unconditional;screen=yes;privacy=off. > CustomTwo: > <sip:custom_two at example.com>;reason=unconditional;screen=yes;privacy=off. > Diversion: <sip:836 at 192.168.1.101>;reason=unconditional. > > -- > _____________________________________________________________________ > -- Bandwidth and Colocation Provided by http://www.api-digital.com -- > > Check out the new Asterisk community forum at: > https://community.asterisk.org/ > > New to Asterisk? Start here: > https://wiki.asterisk.org/wiki/display/AST/Getting+Started > > asterisk-users mailing list > To UNSUBSCRIBE or update options visit: > http://lists.digium.com/mailman/listinfo/asterisk-users-- A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects. ---Heinlein -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.digium.com/pipermail/asterisk-users/attachments/20181210/e1c42892/attachment.html>
Davor Jovanovic
2018-Dec-11 13:35 UTC
[asterisk-users] PJSIP_HEADER - Diversion header manipulation
Hi John, yes I tried to do "remove" and "update" of the Diversion header but I get "No headers had been previously added to this session" error. As you can see from the configuration and logs below I can successfully add another From: header and make update to that additional From header. I previously missed to notice change in the domain part of SIP URI in Diversion header. Phone sets Diversion header to "836 at 10.201.1.19" and Asterisk makes change in domain part of Diversion hdr in INVITE message to "192.168.1.101". This server has two network interfaces and 192.168.1.101 is set on eth0. So, Asterisk makes a change to Diversion header but not the one set by PJSIP_HEADER function. Davor #1 Phone -> Asterisk U 10.201.8.192:5060 -> 10.201.1.19:5060 SIP/2.0 302 Moved Temporarily. Diversion: <sip:836 at 10.201.1.19>;reason=unconditional. Server: Linksys/SPA922-6.1.5(a). Content-Length: 0. #2 Asterisk -> TSP provider U 10.201.1.19:5060 -> 10.201.1.15:5060 INVITE sip:0123456789 at 10.201.1.15:5060 SIP/2.0. From: <sip:527 at 192.168.1.101>;tag=629ca252-0930-404b-9f58-f921ed264ebf. From: Update to From Header. CustomOne: <sip:custom_one at example.com>;reason=unconditional;screen=yes;privacy=off). CustomTwo: <sip:custom_two at example.com>;reason=unconditional;screen=yes;privacy=off). Diversion: <sip:836 at 192.168.1.101>;reason=unconditional. [add_diversion] exten => FWDdiver,1,Set(PJSIP_HEADER(remove,Diversion)=) exten => FWDdiver,2,Set(PJSIP_HEADER(update,Diversion)=new_diversion_update) exten => FWDdiver,3,Set(PJSIP_HEADER(add,From)=Another From Header) exten => FWDdiver,4,Set(PJSIP_HEADER(add,Diversion)=<sip:new_diversion at example.com>\;reason=unconditional\;screen=yes\;privacy=off)) exten => FWDdiver,5,Set(PJSIP_HEADER(add,CustomOne)=<sip:custom_one at example.com>\;reason=unconditional\;screen=yes\;privacy=off)) exten => FWDdiver,6,Set(PJSIP_HEADER(add,CustomTwo)=<sip:custom_two at example.com>\;reason=unconditional\;screen=yes\;privacy=off)) exten => FWDdiver,7,Set(PJSIP_HEADER(update,From)=Update to From Header) exten => FWDdiver,8,Return() Asterisk*CLI> -- Executing [FWDdiver at add_diversion:4] Set("PJSIP/SBC1-0000003a", "PJSIP_HEADER(remove,Diversion)=") in new stack [Dec 11 14:10:05] ERROR[4426]: res_pjsip_header_funcs.c:410 remove_header: No headers had been previously added to this session. -- Executing [FWDdiver at add_diversion:5] Set("PJSIP/SBC1-0000003a", "PJSIP_HEADER(update,Diversion)=new_diversion_update") in new stack [Dec 11 14:10:05] ERROR[4426]: res_pjsip_header_funcs.c:373 update_header: No headers had been previously added to this session. -- Executing [FWDdiver at add_diversion:6] Set("PJSIP/SBC1-0000003a", "PJSIP_HEADER(add,From)=Another From Header") in new stack -- Executing [FWDdiver at add_diversion:7] Set("PJSIP/SBC1-0000003a", "PJSIP_HEADER(add,Diversion)=<sip:new_diversion at example.com>;reason=unconditional;screen=yes;privacy=off)") in new stack -- Executing [FWDdiver at add_diversion:8] Set("PJSIP/SBC1-0000003a", "PJSIP_HEADER(add,CustomOne)=<sip:custom_one at example.com>;reason=unconditional;screen=yes;privacy=off)") in new stack -- Executing [FWDdiver at add_diversion:9] Set("PJSIP/SBC1-0000003a", "PJSIP_HEADER(add,CustomTwo)=<sip:custom_two at example.com>;reason=unconditional;screen=yes;privacy=off)") in new stack -- Executing [FWDdiver at add_diversion:10] Set("PJSIP/SBC1-0000003a", "PJSIP_HEADER(update,From)=Update to From Header") in new stack -- Executing [FWDdiver at add_diversion:11] Return("PJSIP/SBC1-0000003a", "") in new stack On 10.12.2018. 18:23, John Kiniston wrote:> Davor, > > Have you attempted to do a Set(PJSIP_HEADER(remove,Diversion)=)) in your > add_diversion context to remove the header Asterisk is passing through? > > On Mon, Dec 10, 2018 at 3:04 AM Davor Jovanovic <davor.jovanovic at srce.hr > <mailto:davor.jovanovic at srce.hr>> wrote: > > Hi all, > > I’m trying to rewrite Diversion header when call forwarding is done on > the phone. The phone sends "302 Moved Temporarily" response and sets > Diversion header to a local number, but before Asterisk sends this call > towards TSP provider I need to change Diversion header to a full PSTN > number. I am using PJSIP_HEADER in a pre-dial handler (configuration is > below). On the same call I can add some other custom headers (logs are > below). > > Is there any chance I can rewrite Diversion header in this scenario > with > PJSIP_HEADER function? Asterisk version is 16.0.1 built from source on > Debian 9. > > > Thank you > > Davor > > > # Outgoing context - TSP provider > [outgoing] > exten => > 0123456789,1,Dial(PJSIP/${EXTEN}@${SBC_1},,b(add_diversion^FWDdiver^1)) > same => n,Hangup() > > # Diversion manipulation context > [add_diversion] > exten => > FWDdiver,1,Set(PJSIP_HEADER(add,Diversion)=<sip:full_pstn_no at example.com > <mailto:sip%3Afull_pstn_no at example.com>>\;reason=unconditional\;screen=yes\;privacy=off)) > exten => > FWDdiver,2,Set(PJSIP_HEADER(add,CustomOne)=<sip:custom_one at example.com > <mailto:sip%3Acustom_one at example.com>>\;reason=unconditional\;screen=yes\;privacy=off)) > exten => > FWDdiver,3,Set(PJSIP_HEADER(add,CustomTwo)=<sip:custom_two at example.com > <mailto:sip%3Acustom_two at example.com>>\;reason=unconditional\;screen=yes\;privacy=off)) > exten => FWDdiver,4,Return() > > > Asterisk*CLI> > -- Now forwarding PJSIP/527-00000168 to > 'Local/0123456789 at outgoing' > (thanks to PJSIP/836-00000169) > [Dec 10 10:25:08] NOTICE[26309][C-000000c0]: app_dial.c:1005 > do_forward: > Not accepting call completion offers from call-forward recipient > Local/0123456789 at outgoing-0000002c;1 > -- Executing [0123456789 at outgoing:1] > Dial("Local/0123456789 at outgoing-0000002c;2", > "PJSIP/0123456789 at SBC1,,b(add_diversion^FWDdiver^1)") in new stack > -- PJSIP/SBC1-0000016a Internal > Gosub(add_diversion,FWDdiver,1) start > -- Executing [FWDdiver at add_diversion:1] > Set("PJSIP/SBC1-0000016a", > "PJSIP_HEADER(add,Diversion)=<sip:full_pstn_no at example.com > <mailto:sip%3Afull_pstn_no at example.com>>;reason=unconditional;screen=yes;privacy=off)") > > in new stack > -- Executing [FWDdiver at add_diversion:2] > Set("PJSIP/SBC1-0000016a", > "PJSIP_HEADER(add,CustomOne)=<sip:custom_one at example.com > <mailto:sip%3Acustom_one at example.com>>;reason=unconditional;screen=yes;privacy=off)") > > in new stack > -- Executing [FWDdiver at add_diversion:3] > Set("PJSIP/SBC1-0000016a", > "PJSIP_HEADER(add,CustomTwo)=<sip:custom_two at example.com > <mailto:sip%3Acustom_two at example.com>>;reason=unconditional;screen=yes;privacy=off)") > > in new stack > -- Executing [FWDdiver at add_diversion:4] > Return("PJSIP/SBC1-0000016a", "") in new stack > > > Phone => Asterisk > U 10.201.8.192:5060 <http://10.201.8.192:5060> -> 10.201.1.19:5060 > <http://10.201.1.19:5060> > SIP/2.0 302 Moved Temporarily. > Diversion: <sip:836 at 10.201.1.19 > <mailto:sip%3A836 at 10.201.1.19>>;reason=unconditional. > > > Asterisk => TSP provider > U 10.201.1.19:5060 <http://10.201.1.19:5060> -> 10.201.1.15:5060 > <http://10.201.1.15:5060> > CustomOne: > <sip:custom_one at example.com > <mailto:sip%3Acustom_one at example.com>>;reason=unconditional;screen=yes;privacy=off. > CustomTwo: > <sip:custom_two at example.com > <mailto:sip%3Acustom_two at example.com>>;reason=unconditional;screen=yes;privacy=off. > Diversion: <sip:836 at 192.168.1.101 > <mailto:sip%3A836 at 192.168.1.101>>;reason=unconditional. > > -- > _____________________________________________________________________ > -- Bandwidth and Colocation Provided by http://www.api-digital.com -- > > Check out the new Asterisk community forum at: > https://community.asterisk.org/ > > New to Asterisk? Start here: > https://wiki.asterisk.org/wiki/display/AST/Getting+Started > > asterisk-users mailing list > To UNSUBSCRIBE or update options visit: > http://lists.digium.com/mailman/listinfo/asterisk-users > > > > -- > A human being should be able to change a diaper, plan an invasion, > butcher a hog, conn a ship, design a building, write a sonnet, balance > accounts, build a wall, set a bone, comfort the dying, take orders, give > orders, cooperate, act alone, solve equations, analyze a new problem, > pitch manure, program a computer, cook a tasty meal, fight efficiently, > die gallantly. Specialization is for insects. > ---Heinlein >
Joshua C. Colp
2018-Dec-11 13:46 UTC
[asterisk-users] PJSIP_HEADER - Diversion header manipulation
On Mon, Dec 10, 2018, at 6:02 AM, Davor Jovanovic wrote:> Hi all, > > I’m trying to rewrite Diversion header when call forwarding is done on > the phone. The phone sends "302 Moved Temporarily" response and sets > Diversion header to a local number, but before Asterisk sends this call > towards TSP provider I need to change Diversion header to a full PSTN > number. I am using PJSIP_HEADER in a pre-dial handler (configuration is > below). On the same call I can add some other custom headers (logs are > below). > > Is there any chance I can rewrite Diversion header in this scenario with > PJSIP_HEADER function? Asterisk version is 16.0.1 built from source on > Debian 9.The Diversion header is created and managed by the implementation in PJSIP itself. It can't be edited using the PJSIP_HEADER dialplan function, but can be manipulated using the normal core mechanisms[1]. [1] https://wiki.asterisk.org/wiki/display/AST/Manipulating+Party+ID+Information#ManipulatingPartyIDInformation-REDIRECTINGdialplanfunction -- Joshua C. Colp Digium - A Sangoma Company | Senior Software Developer 445 Jan Davis Drive NW - Huntsville, AL 35806 - US Check us out at: www.digium.com & www.asterisk.org
Davor Jovanovic
2018-Dec-11 14:11 UTC
[asterisk-users] PJSIP_HEADER - Diversion header manipulation
got it working by using REDIRECTING function, thank you. Davor On 11.12.2018. 14:46, Joshua C. Colp wrote:> On Mon, Dec 10, 2018, at 6:02 AM, Davor Jovanovic wrote: >> Hi all, >> >> I’m trying to rewrite Diversion header when call forwarding is done on >> the phone. The phone sends "302 Moved Temporarily" response and sets >> Diversion header to a local number, but before Asterisk sends this call >> towards TSP provider I need to change Diversion header to a full PSTN >> number. I am using PJSIP_HEADER in a pre-dial handler (configuration is >> below). On the same call I can add some other custom headers (logs are >> below). >> >> Is there any chance I can rewrite Diversion header in this scenario with >> PJSIP_HEADER function? Asterisk version is 16.0.1 built from source on >> Debian 9. > > The Diversion header is created and managed by the implementation in PJSIP itself. It can't be edited using the PJSIP_HEADER dialplan function, but can be manipulated using the normal core mechanisms[1]. > > [1] https://wiki.asterisk.org/wiki/display/AST/Manipulating+Party+ID+Information#ManipulatingPartyIDInformation-REDIRECTINGdialplanfunction >