This feature performs a list of predefined HTTP PUT operations to update subscriber data in an XCAP server.
Feature Cheat Sheet
| B2BUA Instance | SAS Support | Originating / Terminating | Point(s) in Session Plan | Network Operator Data | Subscriber Data | Stateful or Stateless | POJO Feature or SBB Feature | Other notes |
|---|---|---|---|---|---|---|---|---|
MMTel |
Yes |
Originating |
|
Yes |
Updated |
Stateless |
POJO |
Will only run if indicated by Vertical Service Code feature |
Configuration
Feature configuration defines the XCAP server and document, and success and failure responses. It is common to all update actions.
Action configuration maps the named actions to details of which part of the XCAP document is to be updated and with what value.
Feature Configuration
The profiles within the XcapDataUpdateConfigProfileTable are selected using the SentinelSelectionKey and have the following fields:
| Parameter | Type | Description |
|---|---|---|
xcapServer |
String |
XCAP server to send HTTP requests to |
xcapServerPort |
int |
XCAP server port, a value of 0 will use the default port |
xcapServerPath |
String |
Path of the XCAP server application e.g. |
auid |
String |
Application Unique ID e.g. |
Document |
String |
XCAP Document to update, e.g. |
successResponseStatusCode |
int |
SIP Response status code to use following a successful HTTP response. Because the SIP session is ended using this code, it should be a SIP error response (300+) |
failureResponseStatusCode |
int |
SIP Response status code to use following a failure HTTP response |
failureAnnouncementID |
int |
Announcement ID to play on document update failure.
Use |
useHttps |
boolean |
Whether to use HTTPS |
Action Configuration
The profiles within the XcapDataUpdateActionConfigProfileTable are selected using the SentinelSelectionKey and action name and have the following fields:
| Parameter | Type | Description |
|---|---|---|
actionName |
String |
Name of the action |
documentPath |
String |
An XCAP Node Selector (subset of XPath) expression to select the element or attribute to update |
XMLNS |
String |
XCAP definitions for any XML namespaces used in |
isElement |
boolean |
Whether the field to update is an element. If |
elementName |
String |
The name of the field to update if it is an element |
useDialledDigitsAsParameter |
boolean |
Whether the dialled digits should be used as the new value of the XCAP Node |
parameter |
String |
The new value of the XCAP Node when not using dialled digits |
If isElement is true it is expected the documentPath node selector will select an element whose name is elementName.
if isElement is true and useDialledDigitsAsParameter is false, it is expected that parameter will be serialised replacement content of the selected element.
if isElement is false and useDialledDigitsAsParameter is false, it is expected that parameter will be a serialised attribute value and the documentPath node selector will select an element’s attribute.
Session Input Variables
| Session State variable name | Type | Comments |
|---|---|---|
SentinelSelectionKey |
SentinelSelectionKey |
Determines which configuration to use. |
XcapDataUpdateActionsQueueAsString |
String |
A comma separated list of Actions to be performed (spaces not ignored) |
DialledSuffix |
String |
Can be used as the replacement value in the xcap update request |
Subscriber |
String |
Used as the XUI to identify the user in the XCAP server. |
Session Variables
These fields are used internally to maintain state while each XCAP request is in progress.
| Session State variable name | Type | Comments |
|---|---|---|
XcapDataUpdateActionsQueue |
List<String> |
Remaining actions to perform after the current one |
XcapDataUpdateActionInProgress |
String |
The action currently in progress |
XcapDataUpdateAci |
ActivityContextInterface |
The activity context associated with the current HTTP request |
XcapDataUpdateNormalizedDialledSuffix |
String |
Cached normalized version of |
Session Output Variables
| Session State variable name | Type | Comments |
|---|---|---|
EndSessionAfterAnnouncement |
int |
|
EarlyMediaAnnouncementInfoQueue |
List<SipAnnouncementInformation> |
Unmodified when all XCAP updates succeed. When an XCAP update fails
|
Statistics
XcapDataUpdate statistics are tracked by the sentinel.volte.sip SBB
and can be found under the following parameter set in REM:
SLEE-Usage → sentinel.volte.sip service → sentinel.volte.sip SBB → feature → XcapDataUpdate
or with rhino-stats:
"SLEE-Usage.Services.ServiceID[name=sentinel.volte.sip,vendor=OpenCloud,version=4.1].SbbID[name=sentinel.volte.sip,vendor=OpenCloud,version=4.1].feature.XcapDataUpdate"
| Statistic | Incremented when… |
|---|---|
Started |
the feature runs |
FailedToStart |
Sentinel VoLTE encounters an error while attempting to start the feature |
IssuedWarning |
a non-fatal problem is encountered and the feature issues a warning |
FailedDuringExecution |
a fatal problem is encountered and the feature cannot execute correctly |
TimedOut |
the feature takes too long to complete and Sentinel VoLTE aborts execution |
SentXcapUpdate |
the feature sends an XCAP request |
ReceivedXcapUpdateSuccess |
the features receives a success response to an XCAP update request |
ReceivedXcapUpdateFailure |
the feature receives a failure response to an XCAP update request |
Behaviour
The feature assumes that any appropriate announcements to indicate successful update of subscriber data have already been enqueued by Vertical-Service-Code feature.
The feature extracts the action names from XcapDataUpdateActionsQueueAsString.
For each action name sequentially
-
The feature sends an XCAP request for the action and waits for a response. See [Sending an XCAP request]
-
If a failure response is received
-
no further actions are processed
-
the announcement queue is cleared
-
if a
FailureAnnouncementIDis configured, that announcement is queued and the SIP session is ended withFailureResponseStatusCodeafter the announcement plays -
otherwise the SIP session is ended with
FailureResponseStatusCodeimmediately.
-
If all actions succeed…
-
if there are queued announcements the session state field
EndSessionAfterAnnouncementis set to the value ofSuccessResponseStatusCode -
otherwise the SIP session is ended immediately using
SuccessResponseStatusCode
Sending an XCAP Request
The action name is used to read the appropriate action profile. If the profile cannot be found, the feature fails to execute with Invalid Configuration cause.
The URL for the request is generated from feature configuration, the action profile and the session state as follows:
-
The URL’s protocol is set according to the feature config’s
UseHttpsvalue. -
The URL’s host and port are set from the feature config’s
XCAPServerandXCAPServerPortvalues. -
The URL’s path is set to contain the following segments
-
The config’s
XCAPServerPathvalue -
The config’s
AUIDvalue -
The constant value
users -
The session state’s
Subscribervalue percent encoded -
The config’s
Documentvalue percent encoded -
If the action’s
DocumentPathis set,-
the action’s
DocumentPathvalue percent encoded and prefixed with~~
-
-
-
The URL’s query is set to the action’s
XMLNSvalue if present
Additional headers are set:
-
X-3GPP-Asserted-Identityis set to the value of session state’sSubscriberfield -
If the action’s
IsElementis trueContent-Typeis set toapplication/xcap-el+xml -
otherwise
Content-Typeis set toapplication/xcap-att+xml
The request body is generated:
-
if action’s
IsElementis true the body is a serialized XML element.-
The element name is the action’s
ElementNamevalue. -
The element has no attributes.
-
If the action’s
UseDialledDigitsAsParameteris true the content of the element is atel:URI of the normalized value of the session state fieldDialledSuffix -
Otherwise the content of the element is the action’s
Parametervalue.
-
-
Otherwise
-
If the action’s
UseDialledDigitsAsParameteris true the body is the normalized value of the session state fieldDialledSuffix. -
Otherwise the body is the action’s
Parametervalue.
-
The request including those headers and that body is sent to that URL.
Session state is updated so that the HTTP response can handled.
