Skip to main content

XCAP Supplementary Services (Simservs)

OmniSEP implements ETSI TS 183 023 XCAP (XML Configuration Access Protocol) for managing IMS supplementary services including call forwarding, call barring, and caller ID settings.

Control Panel UI

The XCAP Simservs Profiles page provides a web-based interface for viewing and managing subscriber profiles:

XCAP Profile Details

Features:

  • Search and filter local profiles by MSISDN
  • Fetch profiles from HSS using Diameter Sh interface
  • View profile details in a 2-column layout:
    • Left column: Identity Services (OIP/OIR), Other Services (Call Waiting, Call Hold), Call Forwarding rules
    • Right column: Incoming and Outgoing Call Barring rules with conditions
  • Push/Pull synchronization with HSS
  • Edit mode for modifying profile settings

Overview

Simservs Document Structure

The simservs document follows ETSI TS 183 023 structure:

HTTP Interface

XCAP URL Format

/simservs.ngn.etsi.org/users/{sip_uri}/simservs.xml[/~~/{xpath}]
ComponentDescriptionExample
{sip_uri}SIP URI with MSISDNsip:+15551234567@ims.example.com
{xpath}XPath selector (optional)simservs/communication-diversion

Operations

MethodPathDescription
GET/simservs.ngn.etsi.org/users/{sip}/simservs.xmlGet full document
PUT/simservs.ngn.etsi.org/users/{sip}/simservs.xmlReplace full document
GET/simservs.ngn.etsi.org/users/{sip}/simservs.xml/~~/simservs/{service}Get service element
PUT/simservs.ngn.etsi.org/users/{sip}/simservs.xml/~~/simservs/{service}Update service element
DELETE/simservs.ngn.etsi.org/users/{sip}/simservs.xml/~~/simservs/{service}/{element}Delete element

Content Types

Content-TypeUsage
application/xcap-el+xmlXCAP element operations
application/xmlStandard XML

ETag Support

OmniSEP implements RFC 4825 ETag-based concurrency control:

HeaderUsage
ETagResponse header with document version
If-MatchConditional update (PUT/DELETE)
If-None-MatchConditional GET (304 Not Modified)

Caching Architecture

OmniSEP uses a local-first caching strategy with ETS-based storage and asynchronous HSS synchronization.

Storage Tables

TableKeyValuePurpose
xcap_profilesIMSI{profile_map, etag}Primary profile storage
xcap_by_msisdnMSISDNIMSILookup index for XCAP requests

Caching Strategy

Read Operations (GET)

  1. Query local ETS cache first
  2. On cache miss, fetch from HSS via Diameter Sh
  3. Seed local cache with HSS response
  4. Return default profile if HSS unavailable or no profile exists

Write Operations (PUT)

  1. Validate ETag precondition against cached value
  2. Update local cache immediately
  3. Return response to client with new ETag
  4. Asynchronously push changes to HSS (non-blocking)

ETag Generation

ETags are computed as MD5 hashes of the profile data:

ETag = MD5(erlang:term_to_binary(profile))[0:16]

Example: "a1b2c3d4e5f6g7h8"

The 16-character hex string changes whenever any profile field is modified, enabling precise cache invalidation.

Concurrency Control

MechanismPurpose
ETS read_concurrencyFast parallel reads without locking
GenServer writesAtomic write operations
ETag validationPrevents lost updates from concurrent clients

Default Profile

Unknown subscribers automatically receive a default profile per 3GPP TS 24.623:

  • All supplementary services active
  • OIR default: presentation-not-restricted
  • NoReplyTimer: 20 seconds
  • Empty call forwarding/barring rulesets

This ensures devices always receive a valid response without requiring pre-provisioning.

HSS Integration

OperationDiameter CommandTiming
Fetch profileSh UDR (User-Data-Request)Synchronous on cache miss
Push changesSh PUR (Profile-Update-Request)Asynchronous after PUT

The asynchronous push means HSS updates don't block client responses, improving latency for device requests.

Simservs XML Document

Full Document Example

<?xml version="1.0" encoding="UTF-8"?>
<simservs xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
xmlns:cp="urn:ietf:params:xml:ns:common-policy">

<originating-identity-presentation active="true"/>

<originating-identity-presentation-restriction active="true">
<default-behaviour>presentation-not-restricted</default-behaviour>
</originating-identity-presentation-restriction>

<communication-diversion active="true">
<NoReplyTimer>20</NoReplyTimer>
<cp:ruleset>
<cp:rule id="cfb">
<cp:conditions>
<busy/>
</cp:conditions>
<cp:actions>
<forward-to>
<target>tel:+15557654321</target>
<notify-caller>false</notify-caller>
</forward-to>
</cp:actions>
</cp:rule>
</cp:ruleset>
</communication-diversion>

<incoming-communication-barring active="false">
<cp:ruleset/>
</incoming-communication-barring>

<outgoing-communication-barring active="false">
<cp:ruleset/>
</outgoing-communication-barring>

</simservs>

Namespaces

PrefixNamespaceDescription
(default)http://uri.etsi.org/ngn/params/xml/simservs/xcapETSI Simservs
cpurn:ietf:params:xml:ns:common-policyRFC 4745 Common Policy

Services

Originating Identity Presentation (OIP)

Controls whether caller ID is displayed to called party.

<originating-identity-presentation active="true"/>
AttributeTypeDescription
activeBooleanService enabled/disabled

Originating Identity Presentation Restriction (OIR)

Controls caller ID hiding.

<originating-identity-presentation-restriction active="true">
<default-behaviour>presentation-not-restricted</default-behaviour>
</originating-identity-presentation-restriction>
ElementValuesDescription
default-behaviourpresentation-restricted, presentation-not-restrictedDefault caller ID behavior

Communication Diversion (Call Forwarding)

Rule Types

Rule IDConditionDescription
cfu(none)Call Forwarding Unconditional - forwards all calls immediately
cfbbusyCall Forwarding on Busy
cfnano-answerCall Forwarding on No Answer (uses NoReplyTimer)
cfnrcnot-reachableCall Forwarding on Not Reachable
cfnlnot-logged-inCall Forwarding on Not Logged In

Call Forwarding Rule Structure

<communication-diversion active="true">
<NoReplyTimer>20</NoReplyTimer>
<cp:ruleset>
<cp:rule id="cfna">
<cp:conditions>
<no-answer/>
</cp:conditions>
<cp:actions>
<forward-to>
<target>tel:+15557654321</target>
<notify-caller>false</notify-caller>
</forward-to>
</cp:actions>
</cp:rule>
</cp:ruleset>
</communication-diversion>
ElementTypeDescription
NoReplyTimerIntegerSeconds to wait before CFNA (1-300)
cp:rule/@idStringRule identifier (cfu, cfb, cfna, cfnrc, cfnl)
targettel: URIForward destination number
notify-callerBooleanPlay announcement to caller

Target URI Format

Forward targets use tel: URI format per RFC 3966:

tel:+15557654321;phone-context=ims.mnc001.mcc310.3gppnetwork.org
ComponentDescription
tel:URI scheme
+15557654321E.164 number with country code
phone-contextIMS domain (optional)

Call Barring

Incoming Communication Barring

<incoming-communication-barring active="true">
<cp:ruleset>
<cp:rule id="international">
<cp:conditions>
<international/>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
</cp:ruleset>
</incoming-communication-barring>

Outgoing Communication Barring

<outgoing-communication-barring active="true">
<cp:ruleset>
<cp:rule id="international">
<cp:conditions>
<international/>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
</cp:ruleset>
</outgoing-communication-barring>

Barring Rule Types

Rule IDConditionDescription
all(none)Bar all calls
internationalinternationalBar international calls
international-exHCinternational-exHCBar international except home country
roamingroamingBar calls while roaming

API Examples

Get Full Simservs Document

GET /simservs.ngn.etsi.org/users/sip:+15551234567@ims.example.com/simservs.xml
Accept: application/xcap-el+xml

Response:

HTTP/1.1 200 OK
Content-Type: application/xcap-el+xml
ETag: "a1b2c3d4e5f6g7h8"

<?xml version="1.0" encoding="UTF-8"?>
<simservs xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap"...>
...
</simservs>

Get Call Forwarding Settings

GET /simservs.ngn.etsi.org/users/sip:+15551234567@ims.example.com/simservs.xml/~~/simservs/communication-diversion

Enable Call Forwarding on Busy

PUT /simservs.ngn.etsi.org/users/sip:+15551234567@ims.example.com/simservs.xml/~~/simservs/communication-diversion/cp:ruleset/cfb
Content-Type: application/xcap-el+xml
If-Match: "a1b2c3d4e5f6g7h8"

<cp:rule id="cfb">
<cp:conditions>
<busy/>
</cp:conditions>
<cp:actions>
<forward-to>
<target>tel:+15557654321</target>
<notify-caller>false</notify-caller>
</forward-to>
</cp:actions>
</cp:rule>

Disable Call Forwarding Rule

DELETE /simservs.ngn.etsi.org/users/sip:+15551234567@ims.example.com/simservs.xml/~~/simservs/communication-diversion/cp:ruleset/cfb
If-Match: "a1b2c3d4e5f6g7h8"

Update NoReplyTimer

PUT /simservs.ngn.etsi.org/users/sip:+15551234567@ims.example.com/simservs.xml/~~/simservs/communication-diversion/NoReplyTimer
Content-Type: application/xcap-el+xml

25

Management API

For administrative access, use the JSON management API:

Get Profile

GET /api/xcap/15551234567

Response:

{
"oip": { "active": true },
"oir": {
"active": true,
"default_behaviour": "presentation-not-restricted"
},
"no_reply_timer": 20,
"call_forwarding": {
"cfb": {
"enabled": true,
"target": "tel:+15557654321",
"condition": "busy"
}
},
"call_barring_incoming": {},
"call_barring_outgoing": {}
}

Set Profile

POST /api/xcap/15551234567
Content-Type: application/json

{
"no_reply_timer": 25,
"call_forwarding": {
"cfna": {
"enabled": true,
"target": "tel:+15559876543",
"condition": "no-answer"
}
}
}

Default Profile

New subscribers receive this default profile:

SettingDefault
OIPActive
OIRActive, presentation-not-restricted
NoReplyTimer20 seconds
Call ForwardingAll rules disabled
Call Barring (Incoming)All calls allowed
Call Barring (Outgoing)All calls allowed

Error Responses

HTTP StatusDescription
200Success
304Not Modified (If-None-Match matched)
400Bad Request - Invalid XML or path
404Not Found - Document or element not found
405Method Not Allowed
409Conflict - Constraint violation
412Precondition Failed - ETag mismatch

Error Response Format

<?xml version="1.0" encoding="UTF-8"?>
<xcap-error xmlns="urn:ietf:params:xml:ns:xcap-error">
<error-element>Element not found: simservs/unknown</error-element>
</xcap-error>

Reference Specifications

SpecificationDescription
ETSI TS 183 023XCAP framework for NGN Simservs
ETSI TS 183 004Communication Diversion (CDIV)
RFC 4825XCAP Protocol
RFC 4745Common Policy
RFC 3966tel: URI
3GPP TS 24.623XCAP over Ut interface