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@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@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@10.201.1.15:5060 SIP/2.0.
From: <sip:527@192.168.1.101>;tag=629ca252-0930-404b-9f58-f921ed264ebf.
From: Update to From Header.
CustomOne: <sip:custom_...@example.com>;reason=unconditional;screen=yes;privacy=off). CustomTwo: <sip:custom_...@example.com>;reason=unconditional;screen=yes;privacy=off).
Diversion: <sip:836@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_divers...@example.com>\;reason=unconditional\;screen=yes\;privacy=off)) exten => FWDdiver,5,Set(PJSIP_HEADER(add,CustomOne)=<sip:custom_...@example.com>\;reason=unconditional\;screen=yes\;privacy=off)) exten => FWDdiver,6,Set(PJSIP_HEADER(add,CustomTwo)=<sip:custom_...@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@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@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@add_diversion:6] Set("PJSIP/SBC1-0000003a", "PJSIP_HEADER(add,From)=Another From Header") in new stack -- Executing [FWDdiver@add_diversion:7] Set("PJSIP/SBC1-0000003a", "PJSIP_HEADER(add,Diversion)=<sip:new_divers...@example.com>;reason=unconditional;screen=yes;privacy=off)") in new stack -- Executing [FWDdiver@add_diversion:8] Set("PJSIP/SBC1-0000003a", "PJSIP_HEADER(add,CustomOne)=<sip:custom_...@example.com>;reason=unconditional;screen=yes;privacy=off)") in new stack -- Executing [FWDdiver@add_diversion:9] Set("PJSIP/SBC1-0000003a", "PJSIP_HEADER(add,CustomTwo)=<sip:custom_...@example.com>;reason=unconditional;screen=yes;privacy=off)") in new stack -- Executing [FWDdiver@add_diversion:10] Set("PJSIP/SBC1-0000003a", "PJSIP_HEADER(update,From)=Update to From Header") in new stack -- Executing [FWDdiver@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.jovano...@srce.hr <mailto:davor.jovano...@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...@example.com
    
<mailto:sip%3afull_pstn...@example.com>>\;reason=unconditional\;screen=yes\;privacy=off))
    exten =>
    FWDdiver,2,Set(PJSIP_HEADER(add,CustomOne)=<sip:custom_...@example.com
    
<mailto:sip%3acustom_...@example.com>>\;reason=unconditional\;screen=yes\;privacy=off))
    exten =>
    FWDdiver,3,Set(PJSIP_HEADER(add,CustomTwo)=<sip:custom_...@example.com
    
<mailto:sip%3acustom_...@example.com>>\;reason=unconditional\;screen=yes\;privacy=off))
    exten => FWDdiver,4,Return()


    Asterisk*CLI>
         -- Now forwarding PJSIP/527-00000168 to
    'Local/0123456789@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@outgoing-0000002c;1
          -- Executing [0123456789@outgoing:1]
    Dial("Local/0123456789@outgoing-0000002c;2",
    "PJSIP/0123456789@SBC1,,b(add_diversion^FWDdiver^1)") in new stack
          -- PJSIP/SBC1-0000016a Internal
    Gosub(add_diversion,FWDdiver,1) start
          -- Executing [FWDdiver@add_diversion:1]
    Set("PJSIP/SBC1-0000016a",
    "PJSIP_HEADER(add,Diversion)=<sip:full_pstn...@example.com
    
<mailto:sip%3afull_pstn...@example.com>>;reason=unconditional;screen=yes;privacy=off)")

    in new stack
          -- Executing [FWDdiver@add_diversion:2]
    Set("PJSIP/SBC1-0000016a",
    "PJSIP_HEADER(add,CustomOne)=<sip:custom_...@example.com
    
<mailto:sip%3acustom_...@example.com>>;reason=unconditional;screen=yes;privacy=off)")

    in new stack
          -- Executing [FWDdiver@add_diversion:3]
    Set("PJSIP/SBC1-0000016a",
    "PJSIP_HEADER(add,CustomTwo)=<sip:custom_...@example.com
    
<mailto:sip%3acustom_...@example.com>>;reason=unconditional;screen=yes;privacy=off)")

    in new stack
          -- Executing [FWDdiver@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@10.201.1.19
    <mailto:sip%3A836@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_...@example.com
    
<mailto:sip%3acustom_...@example.com>>;reason=unconditional;screen=yes;privacy=off.
    CustomTwo:
    <sip:custom_...@example.com
    
<mailto:sip%3acustom_...@example.com>>;reason=unconditional;screen=yes;privacy=off.
    Diversion: <sip:836@192.168.1.101
    <mailto:sip%3A836@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


--
_____________________________________________________________________
-- 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

Reply via email to