The StoreHeaderInfo feature is responsible for extracting information from incoming SIP requests that is relevant for charging purposes. It looks at and records information relevant for charging purposes, specifically from the Contact, Call-ID, P-Charging-Vector, and P-Access-Network headers on SIP requests and responses received from the served user. It records information from the P-Early-Media, Allow, and Contact headers relevant to access transfer procedures.
Details
Name in feature scripts |
StoreHeaderInfo |
---|---|
Applicable contexts |
SIP service |
SAS Support |
No |
Prerequisite features |
|
Feature execution points |
Many, will be triggered once for each SIP request or response received by Sentinel. |
Timer usage |
N/A |
Source Code
This feature’s source code is available in the Sentinel SDK in the sentinel-sip-service-information-modules
module pack.
It can be viewed by using the create-module
command in the SDK with that module pack. This command will prompt you for
information needed to create the new modules, once completed the original source for the feature can be found in the new modules.
The module-pack includes the following modules relevant to this feature:
Module Name | Description |
---|---|
sentinel-sip-service-information-modules |
Group module for all service information features, including the modules listed below. |
sentinel-sip-service-information-session-state-library |
Contains the session state interface for the feature. |
sentinel-sip-store-header-info-feature |
Contains the feature itself. |
Session state inputs and outputs
Inputs
Name | Type | Purpose |
---|---|---|
CallType |
Enum |
Used when determining if a message was received from the served user. |
Outputs
Name | Type | Description |
---|---|---|
ChargingIdentifier |
String |
The Charging Identifier for the served user, extracted from one of a number of possible parameters on the P-Charging-Vector header. |
IMSChargingId |
String |
The IMS Charging Identifier for the served user, taken from the icid-value of the P-Charging-Vector header. May be equal to the ChargingIdentifier. |
TerminatingInterOperatorIdentifier |
String |
The Terminating Inter-Operator Identifier, taken from the term-ioi parameter of the P-Charging-Vector header. |
OriginatingInterOperatorIdentifier |
String |
The Originating Inter-Operator Identifier, taken from the orig-ioi parameter of the P-Charging-Vector header. |
IMEI |
String |
The IMEI, extracted from the Contact header of the incoming message. |
UserSessionId |
String |
The Call-ID for the access leg. Used as User Session Id in Diameter charging. |
HeadersByLeg |
HeadersByLeg |
A map containing header name-value pairs, organized by leg name. eg records the value of the P-Early-Media header on the CalledParty leg. |
Statistics
Name | Description |
---|---|
SetAccessNetworkInfo |
Counter incremented when the AccessNetworkInfo field is set in session state by the feature. |
SetPEarlyMedia |
Counter incremented when the P-Early-Media header is found in the message and set in the headersByLeg object in session state. |
SetChargingIdentifier |
Counter incremented when the ChargingIdentifier field is set in session state by the feature. |
SetIMSChargingId |
Counter incremented when then IMSChargingId field is set in session state by the feature. |
SetTerminatingIOI |
Counter incremented when TerminatingInterOperatorIdentifier is set in session state by the feature. |
SetOriginatingIOI |
Counter incremented when OriginatingInterOperatorIdentifier is set in session state by the feature. |
SetIMEI |
Counter incremented when IMEI is set in session state by the feature. |
SetUserSessionId |
Counter incremented when UserSessionId is set in session state by the feature. |
Behaviour
The StoreHeaderInfo feature runs whenever a SIP request or response is received by Sentinel. Initially the feature examines which leg the message was received on to determine whether the message came from the served user (i.e. the calling party on the originating instance, and the called party on a terminating instance). If the message was not received from the served user, the feature will not attempt to modify headers related to charging. If the message was received from the served user, the feature will attempt to extract charging information from the message headers as described below. Other headers are examined in all cases, regardless of served leg. Once it has done this, the feature will finish execution.
P-Access-Network-Info Header
If the P-Access-Network-Info
header is present on the message, it will be recorded in the headersByLeg
session state field.
If the active leg already had a value for this header, it will be updated.
3GPP TS 24.229 (Release 8 and later) permits multiple |
P-Charging-Vector Header
If the P-Charging-Vector
header is present, then the feature will attempt to extract several pieces of information:
-
The value of the
icid-value
will be taken and stored in theIMSChargingId
session state field. -
If the
term-ioi
parameter is present, its value will be taken and stored in theTerminatingInterOperatorIdentifier
session state field. -
If the
orig-ioi
parameter is present, its value will be taken and stored in theOriginatingInterOperatorIdentifier
session state field. -
If any additional charging identifier parameters are present, one will be taken and stored in the
ChargingIdentifier
session state field.-
Any of the following parameters can be used:
gcid
,dslcid
,bcid
,itc-id
, orecid
. -
If no additional charging identifiers are found, the
icid-value
will be used for theChargingIdentifier
.
-
Contact Header
If there is a +sip.instance
parameter on the Contact
header of the incoming message, the feature will look at its
value and attempt to extract a valid IMEI from it. If an IMEI is found, it will be taken and stored in the IMEI
session
state field.
Call-ID
The value of the Call-ID
header is used as an identifier for the session in Diameter charging. So, the value of this
header will be taken and stored in the UserSessionId
session state field.
P-Early-Media Header
If the P-Early-Media
header is present, the header value will be recorded for the triggering leg in the headersByLeg
session state field.