In this section:

Summary

When LYNC forks a call and that call is answered by one of the forked devices, LYNC will CANCEL the other forked legs. The CANCEL includes a Reason header which should stop the other forked devices from displaying a missed call notification.

Forked Lync Call 1

Forked Lync Call 2

 

The SBC does not natively transport the received Reason header, so, using the configuration below, the SBC can pass-through the Reason header to other call legs.

Passing-through a CANCEL's Reason Header

This document details how to pass a Reason Header from the incoming SIP leg to the outgoing SIP leg.

Configure the SBC1000/2000 for Header Manipulation

  1. Create two new SIP Message Rule Tables: Collect Reason and Send Reason. The first will be used to capture the SIP Reason header from SIP CANCEL messages delivered by LYNC. The second will be used to add the Reason header to CANCEL messages being sent by the SBC.

    Collect Reason

     

    Send Reason

  2. Add a SIP Message Rule to capture the Reason header using the Add Header selection.

    Add SIP Message Rule


     

    The Header Name Reason isn't included in the token drop-down list. It must be typed in by hand.

    CANCEL sip:+15103644064@ux.vx.net;user=phone SIP/2.0
    FROM: <sip:+14083489775@vx.net;user=phone>;tag=6186a5308f;epid=03FE79405B
    TO: <sip:+15103644064@ux.vx.net;user=phone>
    CSEQ: 34 CANCEL
    CALL-ID: e2cb98ce-038e-442b-be0c-f82c1265e0d3
    MAX-FORWARDS: 70
    VIA: SIP/2.0/TLS 10.1.1.73:49399;branch=z9hG4bKbbacc69a
    CONTACT: <sip:SBA1.vx.net:5067;transport=Tls>
    CONTENT-LENGTH: 0
    USER-AGENT: RTCC/4.0.0.0 MediationServer
    Reason: SIP;cause=200;text="Call completed elsewhere";ms-acceptedby="sip:jdoe@vx.net"(reason header from LYNC)

     

  3. In a separate SIP Message Table, add a SIP Message Rule to add the Reason header to the outgoing SIP CANCEL message. Use the Add Header selection.

    CANCEL sip:15103644064@vxgw2.vx.net:5060;user=phone SIP/2.0

    reason: SIP;cause=200;text="Call completed elsewhere";ms-acceptedby="sip:jdoe@vx.net" (SBC-added reason header)
    Allow: INVITE, ACK, CANCEL, BYE, UPDATE, NOTIFY, OPTIONS, REFER, REGISTER
    Call-ID: call-F96B1300-0000-0010-0C13-8@10.1.1.74
    Content-Length: 0
    CSeq: 1 CANCEL
    From: <sip:+14083489775@10.1.1.74:5060;user=phone>;tag=a01014a-d
    Max-Forwards: 70
    To: <sip:15103644064@vxgw2.vx.net:5060;user=phone>
    User-Agent: NET UX 2.2.1v999 UX
    Via: SIP/2.0/TCP 10.1.1.74:5060;branch=z9hG4bK-UX-0a01-014a-0038
       

  4. On the LYNC or SBA Signaling Group, add the capture SIP Message Rule to the Inbound Message Manipulation.

  5. On any Signaling Group which would send a forked call, add the sending SIP Message Rule to the Outbound Message Manipulation.

Debugging Output

CANCEL sip:+15103644064@ux.vx.net;user=phone SIP/2.0
FROM: <sip:+14083489775@vx.net;user=phone>;tag=6186a5308f;epid=03FE79405B
TO: <sip:+15103644064@ux.vx.net;user=phone>
CSEQ: 34 CANCEL
CALL-ID: e2cb98ce-038e-442b-be0c-f82c1265e0d3
MAX-FORWARDS: 70
VIA: SIP/2.0/TLS 10.1.1.73:49399;branch=z9hG4bKbbacc69a
CONTACT: <sip:SBA1.vx.net:5067;transport=Tls>
CONTENT-LENGTH: 0
USER-AGENT: RTCC/4.0.0.0 MediationServer
Reason: SIP;cause=200;text="Call completed elsewhere";ms-acceptedby="sip:jdoe@vx.net"
...
012-11-07 20:22:27,202] 3723 0039 com.net.ux.sip DEBUG (sipSignalingGroup.cpp:792) - {SG(2) 0x28dfe8} ProcessTransportMessage: Protocol Repair,calling Ingress executive(1 item(s) on list)
[2012-11-07 20:22:27,202] 3724 0038 com.net.ux.sip DEBUG (Executive.cpp:52) - Run: Protocol Engine::Executive running 1 rules
[2012-11-07 20:22:27,202] 3725 0037 com.net.ux.sip TRACE (Executive.cpp:58) - Run: Protocol Engine::getting ruleid (5)
[2012-11-07 20:22:27,202] 3726 0036 com.net.ux.sip TRACE (Executive.cpp:75) - Run: Processing Message Rule (collect reason)
[2012-11-07 20:22:27,202] 3727 0035 com.net.ux.sip TRACE (Executive.cpp:127) - processMessageRule: Processing Message Rule (5)
[2012-11-07 20:22:27,202] 3728 0034 com.net.ux.sip TRACE (Executive.cpp:1252) - MatchSipMessageRule: StartLine from configuration (cancel)From Msg (CANCEL sip:+15103644064@ux.vx.net;user=phone SIP/2.0)
[2012-11-07 20:22:27,202] 3729 0033 com.net.ux.sip TRACE (Executive.cpp:1262) - MatchSipMessageRule: Request configuration (cancel)From Msg (cancel)
[2012-11-07 20:22:27,202] 3730 0032 com.net.ux.sip DEBUG (HeaderRule.h:1069) - debugInfo: HeaderRuleFieldCopy
[2012-11-07 20:22:27,202] 3731 0031 com.net.ux.sip DEBUG (HeaderRule.h:798) - debugInfo: HeaderRuleFieldChange mReplacement
[2012-11-07 20:22:27,202] 3732 0030 com.net.ux.sip DEBUG (ProtocolField.h:93) - debugInfo: FieldElement:: FieldType(0) Source(sguser[1])
[2012-11-07 20:22:27,202] 3733 002f com.net.ux.sip DEBUG (ProtocolField.h:272) - debugInfo: FieldElementObject:: Valid Object Tokens
[2012-11-07 20:22:27,203] 3734 002e com.net.ux.sip DEBUG (HeaderRule.h:679) - debugInfo: HeaderRuleField:: Element
[2012-11-07 20:22:27,203] 3735 002d com.net.ux.sip DEBUG (ProtocolField.h:93) - debugInfo: FieldElement:: FieldType(0) Source(header["reason",1])
[2012-11-07 20:22:27,203] 3736 002c com.net.ux.sip DEBUG (ProtocolField.h:272) - debugInfo: FieldElementObject:: Valid Object Tokens
[2012-11-07 20:22:27,203] 3737 002b com.net.ux.sip DEBUG (HeaderRule.h:115) - debugInfo: HeaderRule:: HeaderRuleType(1)
[2012-11-07 20:22:27,203] 3738 002a com.net.ux.sip DEBUG (RuleBase.h:123) - debugInfo: RuleBase:: RuleBaseType(1)  Result(1) Description(collect cancel header) valid(true), Condition Expression(No conditions for this header rule)
[2012-11-07 20:22:27,203] 3739 0029 com.net.ux.sip TRACE (Executive.cpp:211) - processMessageRule: Processing Header rule
[2012-11-07 20:22:27,203] 3740 0028 com.net.ux.sip DEBUG (Executive.cpp:316) - processHeaderRule: Processing header Rule (collect cancel header)
[2012-11-07 20:22:27,203] 3741 0027 com.net.ux.sip TRACE (Executive.cpp:546) - processHeaderRule: Processing Rule Field Copy
[2012-11-07 20:22:27,203] 3742 0026 com.net.ux.sip TRACE (SipMessage.cpp:1312) - getObjectValue: name:(3:Header) value:
[2012-11-07 20:22:27,203] 3743 0025 com.net.ux.sip TRACE (SipMessage.cpp:1392) - setObjectValue: name:(19:SGUser) value:SIP;cause=200;text="Call completed elsewhere";ms-acceptedby="sip:jdoe@vx.net"
[2012-11-07 20:22:27,203] 3744 0024 com.net.ux.sip TRACE (Executive.cpp:218) - processMessageRule: HeaderRule executed
[2012-11-07 20:22:27,203] 3745 0023 com.net.ux.sip TRACE (Executive.cpp:81) - Run: Message Rule (5) matched at least one message rule
[2012-11-07 20:22:27,203] 3746 0022 com.net.ux.sip DEBUG (sipSignalingGroup.cpp:794) - {SG(2) 0x28dfe8} ProcessTransportMessage: Protocol Repair, out of Ingress executive
...
[2012-11-07 20:22:27,402] 4645 0021 com.net.ux.sip DEBUG (Transaction.cpp:698) - egressProtocolRepair: Transaction Protocol Repair (Transaction),calling Egress executive(1 item(s) on list)
[2012-11-07 20:22:27,402] 4646 0020 com.net.ux.sip DEBUG (Executive.cpp:52) - Run: Protocol Engine::Executive running 1 rules
[2012-11-07 20:22:27,402] 4647 001f com.net.ux.sip TRACE (Executive.cpp:58) - Run: Protocol Engine::getting ruleid (6)
[2012-11-07 20:22:27,402] 4648 001e com.net.ux.sip TRACE (Executive.cpp:75) - Run: Processing Message Rule (send reason)
[2012-11-07 20:22:27,402] 4649 001d com.net.ux.sip TRACE (Executive.cpp:127) - processMessageRule: Processing Message Rule (6)
[2012-11-07 20:22:27,402] 4650 001c com.net.ux.sip TRACE (Executive.cpp:1252) - MatchSipMessageRule: StartLine from configuration (cancel)From Msg (CANCEL sip:15103644064@vxgw2.vx.net:5060;user=phone SIP/2.0
)
[2012-11-07 20:22:27,402] 4651 001b com.net.ux.sip TRACE (Executive.cpp:1262) - MatchSipMessageRule: Request configuration (cancel)From Msg (cancel)
[2012-11-07 20:22:27,402] 4652 001a com.net.ux.sip DEBUG (HeaderRule.h:281) - debugInfo: HeaderRuleAdd
[2012-11-07 20:22:27,402] 4653 0019 com.net.ux.sip DEBUG (HeaderRule.h:176) - debugInfo: HeaderRulePayload:: FieldList
[2012-11-07 20:22:27,402] 4654 0018 com.net.ux.sip DEBUG (ProtocolField.h:93) - debugInfo: FieldElement:: FieldType(0) Source(sguser[1])
[2012-11-07 20:22:27,402] 4655 0017 com.net.ux.sip DEBUG (ProtocolField.h:272) - debugInfo: FieldElementObject:: Valid Object Tokens
[2012-11-07 20:22:27,402] 4656 0016 com.net.ux.sip DEBUG (HeaderRule.h:115) - debugInfo: HeaderRule:: HeaderRuleType(1)
[2012-11-07 20:22:27,402] 4657 0015 com.net.ux.sip DEBUG (RuleBase.h:123) - debugInfo: RuleBase:: RuleBaseType(1)  Result(1) Description(sending reason) valid(true), Condition Expression(No conditions for this header rule)
[2012-11-07 20:22:27,402] 4658 0014 com.net.ux.sip TRACE (Executive.cpp:211) - processMessageRule: Processing Header rule
[2012-11-07 20:22:27,402] 4659 0013 com.net.ux.sip DEBUG (Executive.cpp:316) - processHeaderRule: Processing header Rule (sending reason)
[2012-11-07 20:22:27,402] 4660 0012 com.net.ux.sip TRACE (Executive.cpp:358) - processHeaderRule: Processing Rule Add
[2012-11-07 20:22:27,402] 4661 0011 com.net.ux.sip TRACE (Executive.cpp:727) - buildField: Building fields with element count=1
[2012-11-07 20:22:27,402] 4662 0010 com.net.ux.sip TRACE (Executive.cpp:736) - buildField: Building field object
[2012-11-07 20:22:27,402] 4663 00e9 com.net.ux.sip TRACE (SipMessage.cpp:1312) - getObjectValue: name:(19:SGUser) value:
[2012-11-07 20:22:27,402] 4664 00e8 com.net.ux.sip TRACE (Executive.cpp:948) - headerAdd: Executing header add
[2012-11-07 20:22:27,403] 4665 00e7 com.net.ux.sip TRACE (SipMessage.cpp:1474) - addObjectValue: name:(3:Header) value:SIP;cause=200;text="Call completed elsewhere";ms-acceptedby="sip:jdoe@vx.net"
[2012-11-07 20:22:27,403] 4666 00e6 com.net.ux.sip TRACE (Executive.cpp:218) - processMessageRule: HeaderRule executed
[2012-11-07 20:22:27,403] 4667 00e5 com.net.ux.sip TRACE (Executive.cpp:81) - Run: Message Rule (6) matched at least one message rule
[2012-11-07 20:22:27,403] 4668 00e4 com.net.ux.sip DEBUG (Transaction.cpp:700) - egressProtocolRepair: Transaction Protocol Repair, out of Egress executive

...

CANCEL sip:15103644064@vxgw2.vx.net:5060;user=phone SIP/2.0
reason: SIP;cause=200;text="Call completed elsewhere";ms-acceptedby="sip:jdoe@vx.net"
Allow: INVITE, ACK, CANCEL, BYE, UPDATE, NOTIFY, OPTIONS, REFER, REGISTER
Call-ID: call-F96B1300-0000-0010-0C13-8@10.1.1.74
Content-Length: 0
CSeq: 1 CANCEL
From:  <sip:+14083489775@10.1.1.74:5060;user=phone>;tag=a01014a-d
Max-Forwards: 70
To:  <sip:15103644064@vxgw2.vx.net:5060;user=phone>
User-Agent: NET UX 2.2.1v999 UX
Via: SIP/2.0/TCP 10.1.1.74:5060;branch=z9hG4bK-UX-0a01-014a-0038

Important Notes

The SIP Header feature cannot generate a new SIP packet. Only arriving or leaving SIP packets changed via the SIP Header function.

Care must be exercised when modifying incoming SIP packets, especially with respects to the TO, FROM and RURI headers. Modifying tags, IDs or any other items that define the dialogue or transactions, will likely cause calls to not complete.