SIP Notify Subscription State

Overview

This features adds support for Subscription-State headers in REFER-NOTIFY requests in Call Agent Mode (CAM) and non-CAM configurations.

The benefits of this feature include:

Host control on REFER-NOTIFY Subscription-State header.

Host control on the duration of REFER-NOTIFY subscription ("expires" parameter).

Host control on the retry-after time interval, which would be used to inform the remote UA when the REFER request could be retried in case the previous REFER failed.

Customizable reason code in the Subscription-State header of REFER-NOTIFY that terminates the subscription.

Pertinent Specification

RFC 3265 and 3515

Description

The NOTIFY request for REFER now contains the Subscription-State header. This feature provides the following functionality:

Access to Subscription-State header.

Access to "expires" parameter when the subscription state is active.

Access to reason code when the subscription state is terminated.

Access to "retry-after" parameter when the subscription state is terminated unsuccessfully.

REFER-NOTIFY Subscription

Termination of the REFER-NOTIFY means either that the notifier (Referee) will not send any more REFER-NOTIFY messages or that the referrer will not accept any more REFER-NOTIFY requests once the REFER-NOTIFY subscription is terminated.

When the subscription is terminated the notifier CSP will nack the PPL the Event Request with message 0x1308. All REFER-NOTIFY requests to the referrer will receive a "481 Call/Transaction Does Not Exist" response.

 

API Call Control Messages

PPL Event Request (0x0044)

PPL Event Indication (0x0043)

API and CSA Configuring and Querying

This feature can be configured either using the API or CSA.

API Configuring and Querying

 

You can configure Subscription-State header reporting in a REFER-NOTIFY message. By default the CSP does not report the Subscription-State header if the header is present in the received REFER-NOTIFY message.

To enable the reporting, set bit 19 of the data part in SIP Message Information Mask TLV (0x027F) and send the TLV within the VoIP Protocol Configure API (0x00EE).

CSA Configuring and Querying

To configure and query the SIP stack for this feature, view the Configure SIP Advanced screen, Additional Host Signaling Parameters, and select Subscription State Refer-Notify message..

Call Flows

Blind REFER

The default PPL Event Request (that is, without the Notify Subscription State TLV) to generate NOTIFY for Blind REFER works as follows. Also, see the call flow diagram following these steps.

1. The NOTIFY will have a Subscription-State header with the string "active" if the host provides a provisional response status else it will be "terminated;reason=noresource" if the host provides a final response status.

2. Notifications for Blind refer do not contain "expires" parameter and hence the subscription never times out.

3. Notify with final response status or releasing a call would terminate the subscription.

4. If the NOTIFY gets a response in the range 3xx-6xx the subscription will be terminated.

Consultative REFER

The default PPL Event Request (that is, without the Notify Subscription State TLV) to generate NOTIFY for Consultative REFER works as follows: Also, see the call flow diagram following these steps.

1. The NOTIFY will have a Subscription-State header with the string "active;expire=x" if the host provides a provisional response status where x is 64*T1 (for default T1 of 500 ms x is 32 s) else it will be "terminated;reason=noresource" if the host provides a final response status.

2. Notifications for Consultative refer would have a default expiry interval of 64*T1.

3. Notify with final response status, exceeding the time interval in the expires parameter or releasing a call would terminate the subscription.

4. A timer with interval equal to the "expires" parameter value will be started or restarted at the UAs each time NOTIFY is send/received. The value of timer is the host supplied value or if host has not supplied it would be the default value of 64*T1. NOTIFY with subscription state of terminated stops this timer in both the UAs.

5. When the subscription expires the notifier CSP sends out a NOTIFY of status 603 Decline with Subscription-State header with string set to "terminated:reason=noresource".

6. When the subscription expires, the referrer CSP will terminate the subscription. No message will be send out to the remote UA.

7. If the NOTIFY gets a response in the range 3xx-6xx, the timer will be stopped and the subscription will be terminated.

 

Blind/Consultative

The PPL ER with the Notify Subscription State TLV duly filled to generate NOTIFY for REFER (Blind/Consultative) works in the following manner:

1. The NOTIFY will have a Subscription-State header with the string "active;expire=x" if the host either provides or sets the subscription state to active and expire parameter to 'x', irrespective of the response status provided.

2. The NOTIFY will have a Subscription-State header with the string "pending;reason=waiting" if the host either provides or sets the subscription state to pending and reason code to 'waiting', irrespective of the response status provided.

3. If a NOTIFY is generated when the subscription state is pending, its body should consist only of a status line containing a response code of 100 else the NOTIFY would be responded with 400 Bad Request.

4. The NOTIFY will have a Subscription-State header with the string "terminated;reason=noresource" if the host sets the subscription state to terminated and reason code to 'noresource, irrespective of the response status provided.

5. The CSP which receives the NOTIFY with expire parameter would terminate the subscription after the time interval expires. The CSP will not send any messages to inform the remote end about the termination.

6. A timer with interval equal to the "expires" parameter value, if present, will be started or restarted at the UAs each time NOTIFY is send/received. The value of timer is the host supplied value or if host has not supplied it would be the default value of 64*T1 seconds (default value only used for consultative refer).

7. The notifier CSP that sends NOTIFY with expire parameters would terminate the subscription after the time interval expires and also sends a NOTIFY of status 603 Decline with Subscription-State header string set to "terminated:reason=noresource".

8. The referrer CSP that received NOTIFY with expire parameters would terminate the subscription after the time expires. No messages would be send out to the remote UA.

9. If the NOTIFY gets a response in the range 3xx-6xx, the timer will be stopped and the subscription will be terminated.

10. The "retry-after" parameter will be added only if the host provides it in the PPL ER for REFER-NOTIFY that terminates the subscription. CSP will not add this by itself in any case.

11. The following figures show two instances of REFER-NOTIFY call flow.

 

Message Trace

The trace for call flow in figure 4 is given below.

 

CSP 1 API Trace:

H->X

[00 88 00 2c 00 00 01 00 01 0d 03 00 64 1f 02 03 00 1e 00 0f 00 02 01 16 00 02 00 00 01 1a 00 03 00 00 00 03 00 33 00 62 00 0a 27 7e 00 03 08 00 00 29 19 00 06 32 32 32 32 32 00 29 1b 00 0c 31 30 2e 31 30 2e 31 2e 32 35 32 00 29 1c 00 04 00 00 13 c4 29 23 00 06 31 31 31 31 31 00 29 25 00 0c 31 30 2e 31 30 2e 31 2e 32 35 34 00 29 26 00 04 00 00 13 c4 27 92 00 04 0a 0a 01 bf 27 93 00 04 00 00 10 7c 29 14 00 01 01]

 

X->H

[00 07 00 2c 00 00 01 00 10]

 

X->H

[00 11 00 43 00 50 01 00 01 0d 03 00 64 1f 00 a7 00 24 00]

 

H->X

[00 05 00 43 00 50 01]

 

H->X

[00 05 00 43 00 50 01]

 

X->H

[00 44 00 43 00 51 01 00 01 0d 03 00 64 1f 00 a7 00 20 01 03 00 33 00 2e 00 01 29 ff 00 28 2a 0e 00 04 0a 0a 01 ac 2a 01 00 1c 2a 03 00 01 00 2a 07 00 04 00 00 29 bc 2a 13 00 01 00 2a 02 00 06 2a 08 00 02 00 02]

 

X->H

[00 0d 00 2e 00 10 01 00 01 0d 03 00 64 1f 20]

 

H->X

[00 05 00 43 00 51 01]

 

H->X

[00 05 00 43 00 51 01]

 

H->X

[00 32 00 44 00 00 01 00 01 0d 03 00 64 1f 00 a7 00 27 01 03 00 33 00 1c 00 02 29 1e 00 06 32 30 35 39 37 00 29 20 00 0c 31 30 2e 31 30 2e 31 2e 32 35 34 00]

 

H->X

[00 05 00 2e 00 10 01]

 

X->H

[00 07 00 44 00 00 01 00 10]

 

H->X

[00 05 00 2e 00 10 01]

 

X->H

[00 1e 00 43 00 52 01 00 01 0d 03 00 64 1f 00 a7 00 27 01 03 00 33 00 08 00 01 29 15 00 02 00 ca]

 

H->X

[00 05 00 43 00 52 01]

 

H->X

[00 05 00 43 00 52 01]

 

X->H

[00 25 00 43 00 53 01 00 01 0d 03 00 64 1f 00 a7 00 28 01 03 00 33 00 0f 00 02 29 15 00 02 00 64 29 48 00 03 02 00 20]

 

H->X

[00 05 00 43 00 53 01]

 

H->X

[00 05 00 43 00 53 01]

 

X->H

[00 37 00 43 00 54 01 00 01 0d 03 00 64 1f 00 a7 00 28 01 03 00 33 00 21 00 02 29 15 00 02 00 c8 29 48 00 15 00 00 05 64 65 61 63 74 69 76 61 74 65 64 68 65 61 64 65 72 00]

 

H->X

[00 05 00 43 00 54 01]

 

H->X

[00 05 00 43 00 54 01]

 

H->X

[00 11 00 08 00 00 01 00 02 0d 03 00 64 1f 0d 03 00 64 1f]

 

X->H

[00 07 00 08 00 00 01 00 10]

 

X->H

[00 57 00 69 00 10 01 00 01 0d 03 00 64 1f 02 02 1e 2a 00 05 01 04 00 04 00 00 00 00 01 05 00 04 00 00 00 3c 01 11 00 04 00 00 00 3c 01 10 00 04 00 00 25 80 01 12 00 04 00 00 25 80 03 00 33 00 18 00 03 27 4e 00 02 00 10 27 92 00 04 0a 0a 01 bf 27 93 00 04 00 00 10 7c]

 

H->X

[00 05 00 69 00 10 01]

 

 

CSP 2 API Trace:

X->H

[00 da 00 2d 00 17 02 00 01 0d 03 00 c8 17 00 33 01 03 00 33 00 c6 00 11 27 4e 00 02 00 05 27 7e 00 03 08 00 00 29 19 00 06 32 32 32 32 32 00 29 1b 00 0c 31 30 2e 31 30 2e 31 2e 32 35 32 00 29 1c 00 04 00 00 13 c4 29 23 00 06 31 31 31 31 31 00 29 25 00 0c 31 30 2e 31 30 2e 31 2e 32 35 34 00 29 26 00 04 00 00 13 c4 29 28 00 06 31 31 31 31 31 00 29 2d 00 06 31 31 31 31 31 00 29 2f 00 0c 31 30 2e 31 30 2e 31 2e 32 35 34 00 29 30 00 04 00 00 13 c4 29 33 00 01 01 27 18 00 08 02 00 00 00 05 11 11 10 27 17 00 06 02 00 05 22 22 20 29 ff 00 23 2a 0e 00 04 0a 0a 01 bf 2a 01 00 17 2a 03 00 01 00 2a 07 00 04 00 00 10 7c 2a 02 00 06 2a 08 00 02 00 02 29 16 00 01 01]

 

H->X

[00 0c 00 2d 00 17 02 00 01 0d 03 00 c8 17]

 

H->X

[00 0c 00 2d 00 17 02 00 01 0d 03 00 c8 17]

 

H->X

[00 11 00 bf 00 00 02 00 02 0d 03 00 c8 17 0d 03 00 c8

17]

 

X->H

[00 07 00 bf 00 00 02 00 10]

 

H->X

[00 0d 00 ba 00 00 02 00 01 0d 03 00 c8 17 01]

 

X->H

[00 07 00 ba 00 00 02 00 10]

 

X->H

[00 32 00 43 00 17 02 00 01 0d 03 00 c8 17 00 a7 00 21 01 03 00 33 00 1c 00 02 29 19 00 06 32 30 35 39 37 00 29 1b 00 0c 31 30 2e 31 30 2e 31 2e 32 35 34 00]

 

H->X

[00 05 00 43 00 17 02]

 

H->X

[00 05 00 43 00 17 02]

 

H->X

[00 25 00 44 00 00 02 00 01 0d 03 00 c8 17 00 a7 00 20 01 03 00 33 00 0f 00 02 29 4b 00 02 00 64 29 48 00 03 02 00 20]

 

X->H

[00 07 00 44 00 00 02 00 10]

 

H->X

[00 37 00 44 00 00 02 00 01 0d 03 00 c8 17 00 a7 00 20 01 03 00 33 00 21 00 02 29 4b 00 02 00 c8 29 48 00 15 00 00 05 64 65 61 63 74 69 76 61 74 65 64 68 65 61 64 65 72 00]

 

X->H

[00 07 00 44 00 00 02 00 10]

 

X->H

[00 57 00 69 00 17 02 00 01 0d 03 00 c8 17 02 02 1e 2a 00 05 01 04 00 04 00 00 00 00 01 05 00 04 00 00 00 3b 01 11 00 04 00 00 00 45 01 10 00 04 00 00 24 e0 01 12 00 04 00 00 2b 20 03 00 33 00 18 00 03 27 4e 00 02 00 10 27 92 00 04 0a 0a 01 ac 27 93 00 04 00 00 29 bc]

 

H->X

[00 05 00 69 00 17 02]

 

 

SIP Trace from CSP1:

 

1 -SENT To 10.10.1.252:5060 at 6262

INVITE sip:22222@10.10.1.252:5060 SIP/2.0

Via: SIP/2.0/UDP 10.10.1.254

To: 22222<sip:22222@10.10.1.252:5060>

From: 11111<sip:11111@10.10.1.254:5060>;tag=412781131876

Call-ID: EXCEL-CSP1.101f.6262.800@10.10.1.254

Contact: 11111<sip:11111@10.10.1.254:5060>

User-Agent: Excel_CSP/83.10.9

Supported: timer

Session-Expires: 1800

Min-SE: 300

CSeq: 1 INVITE

Content-Type: application/sdp

Content-Length: 100

 

v=0

o=sip 0 0 IN IP4 10.10.1.254

s=SIP_Call

c=IN IP4 10.10.1.191

t=0 0

m=audio 4220 RTP/AVP 0

 

2 -RECEIVED From 10.10.1.252:5060 at 6262

SIP/2.0 100 Trying

To: 22222<sip:22222@10.10.1.252:5060>;tag=81131b2a

From: 11111<sip:11111@10.10.1.254:5060>;tag=412781131876

Call-ID: EXCEL-CSP1.101f.6262.800@10.10.1.254

CSeq: 1 INVITE

Contact: 22222<sip:22222@10.10.1.252:5060>

Via: SIP/2.0/UDP 10.10.1.254

User-Agent: Excel_CSP/83.10.9

Content-Length: 0

 

3 -RECEIVED From 10.10.1.252:5060 at 6263

SIP/2.0 180 Ringing

To: 22222<sip:22222@10.10.1.252:5060>;tag=81131b2a

From: 11111<sip:11111@10.10.1.254:5060>;tag=412781131876

Call-ID: EXCEL-CSP1.101f.6262.800@10.10.1.254

CSeq: 1 INVITE

Contact: 22222<sip:22222@10.10.1.252:5060>

Via: SIP/2.0/UDP 10.10.1.254

User-Agent: Excel_CSP/83.10.9

Content-Length: 0

 

4 -RECEIVED From 10.10.1.252:5060 at 6263

SIP/2.0 200 OK

To: 22222<sip:22222@10.10.1.252:5060>;tag=81131b2a

From: 11111<sip:11111@10.10.1.254:5060>;tag=412781131876

Call-ID: EXCEL-CSP1.101f.6262.800@10.10.1.254

CSeq: 1 INVITE

Contact: 22222<sip:22222@10.10.1.252:5060>

Require: timer

Supported: timer

Session-Expires: 1800; refresher=uas

Via: SIP/2.0/UDP 10.10.1.254

User-Agent: Excel_CSP/83.10.9

Content-Type: application/sdp

Content-Length: 131

 

v=0

o=sip 1151434244 1151434244 IN IP4 10.10.1.252

s=SIP_Call

c=IN IP4 10.10.1.172

t=0 0

m=audio 10684 RTP/AVP 0

a=sendrecv

 

5 -SENT To 10.10.1.252:5060 at 6263

ACK sip:22222@10.10.1.252:5060 SIP/2.0

Via: SIP/2.0/UDP 10.10.1.254

To: 22222<sip:22222@10.10.1.252:5060>;tag=81131b2a

From: 11111<sip:11111@10.10.1.254:5060>;tag=412781131876

Call-ID: EXCEL-CSP1.101f.6262.800@10.10.1.254

CSeq: 1 ACK

Content-Length: 0

 

6 -SENT To 10.10.1.252:5060 at 6263

REFER sip:22222@10.10.1.252:5060 SIP/2.0

Via: SIP/2.0/UDP 10.10.1.254

From: 11111<sip:11111@10.10.1.254:5060>;tag=412781131876

To: 22222<sip:22222@10.10.1.252:5060>;tag=81131b2a

Call-ID: EXCEL-CSP1.101f.6262.800@10.10.1.254

CSeq: 2 REFER

Max-Forwards: 70

Contact: 11111<sip:11111@10.10.1.254:5060>

Refer-To: <sip:20597@10.10.1.254>

User-Agent: Excel_CSP/83.10.9

Content-Length: 0

 

7 -RECEIVED From 10.10.1.252:5060 at 6263

SIP/2.0 202 Accepted

To: 22222<sip:22222@10.10.1.252:5060>;tag=81131b2a

From: 11111<sip:11111@10.10.1.254:5060>;tag=412781131876

Call-ID: EXCEL-CSP1.101f.6262.800@10.10.1.254

CSeq: 2 REFER

Contact: 22222<sip:22222@10.10.1.252:5060>

Via: SIP/2.0/UDP 10.10.1.254

User-Agent: Excel_CSP/83.10.9

Content-Length: 0

 

8 -RECEIVED From 10.10.1.252:5060 at 6264

NOTIFY sip:11111@10.10.1.254:5060 SIP/2.0

Via: SIP/2.0/UDP 10.10.1.252

To: 11111<sip:11111@10.10.1.254:5060>;tag=412781131876

From: 22222<sip:22222@10.10.1.252:5060>;tag=81131b2a

Call-ID: EXCEL-CSP1.101f.6262.800@10.10.1.254

CSeq: 3 NOTIFY

Event: refer

Contact: 22222<sip:22222@10.10.1.252:5060>

Subscription-State: active;expires=32

Content-Type: message/sipfrag;version=2.0

Content-Length: 20

 

SIP/2.0 100 Trying

 

9 -SENT To 10.10.1.252:5060 at 6264

SIP/2.0 200 OK

To: 11111<sip:11111@10.10.1.254:5060>;tag=412781131876

From: 22222<sip:22222@10.10.1.252:5060>;tag=81131b2a

Call-ID: EXCEL-CSP1.101f.6262.800@10.10.1.254

CSeq: 3 NOTIFY

Via: SIP/2.0/UDP 10.10.1.252

User-Agent: Excel_CSP/83.10.9

Content-Length: 0

 

10-RECEIVED From 10.10.1.252:5060 at 6264

NOTIFY sip:11111@10.10.1.254:5060 SIP/2.0

Via: SIP/2.0/UDP 10.10.1.252

To: 11111<sip:11111@10.10.1.254:5060>;tag=412781131876

From: 22222<sip:22222@10.10.1.252:5060>;tag=81131b2a

Call-ID: EXCEL-CSP1.101f.6262.800@10.10.1.254

CSeq: 4 NOTIFY

Event: refer

Contact: 22222<sip:22222@10.10.1.252:5060>

Subscription-State: terminated;retry-after=5;reason=deactivatedheader

Content-Type: message/sipfrag;version=2.0