The IPSMGW IEC charging feature defines immediate event charging of MT-FSM’s delivered over the PS network for Sentinel as an IPSMGW.
Description
Feature script name |
IPSMGWIECFeature |
---|---|
Applicable contexts |
SIP service |
Prerequisite features |
PS Delivery |
Feature execution points |
SipAccess_ChargingReauth SipAccess_CreditAllocatedPostCC SipAccess_CreditLimitReachedPostCC SipAccess_ControlNotRequiredPostCC SipAccess_OCSFailurePostCC SipAccess_PartyResponse SipAccess_ServiceTimer SipThirdPartyAccess_SubscriberCheck SipThirdPartyAccess_PartyRequest SipThirdPartyAccess_PartyResponse SipTransaction_Request SipTransaction_Response SipTransaction_SubscriberCheck |
The IPSMGW IEC feature covers immediate event charging using a charge/refund model. The feature is responsible for:
-
creating the reservation charging instance (
IPSMGWChargingFeatureUtil.DEFAULT_IEC_CHARGING_INSTANCE
) and default session counter on a pending PS Delivery. -
instructing the charging manager to send a direct debit to the OCS
-
detection of message nondelivery conditions and refunding as necessary
The general use case is that an MT-FSM will be delivered over the PS Network by IPSMGW’s PS Delivery feature. On the incoming DialogTcapMessage with an MT-FSM, the IEC feature will trigger a direct debit, suspending the outgoing MESSAGE until a charging response is received, then allow delivery of the message. If a response to the MESSAGE is received which indicates non-delivery, a refund will be issued.
For a high level overview of Sentinel charging see Sentinel SIP Charging Architecture
Currently, IPSMGW only supports one charging instance per Sentinel session, though this instance may have multiple session counters. |
All of IPSMGW’s charging features make use of Sentinel’s comprehensive charging API — see Using the SIP Charging Manager |
Feature cheat sheet
Feature Name | Network Operator Data | Used in PlanId(s) | Stateful or Stateless | POJO Feature or SBB Feature |
---|---|---|---|---|
IPSMGWIECFeature |
No |
MTFSM_PS,MTFSM_CS_PS,MTFSM_PS_CS |
Stateless |
SBB |
Session state inputs and outputs
Inputs
Name | Format | Description | Behaviour if null/invalid |
---|---|---|---|
SentinelSelectionKey |
selection key (for example, |
For selecting mappers |
Increment InputParameterErrors Common cleanup actions |
SentinelIPSMGWAddress |
MAP-CommonDataTypes.AddressString |
The value that the feature will use as the MSC-address in outgoing messages. Written to SessionState for retrieval by charging mappers. |
N/A |
IPSMGWChargingCounterAddress |
key/value pairs identifying the session charged service |
Determines which counter the feature will update with charging data (the IEC feature only treats one counter as the immediate charging counter at a time). Also see Outputs. |
No-op unless initial request |
LatestOcsAnswer |
Last received CCA |
Passed through to a charging mapper to generate the session counter values |
Exception thrown, if the feature is expecting a response from the OCS. Otherwise ignored. |
PSDeliveryStatus |
NOT_ATTEMPTED/FAILED/SUCCEEDED |
Outcome of last PS Delivery attempt |
N/A |
LatestClientRequest |
Credit-Control-Request |
Determine whether an incoming CCA is a direct debit |
N/A |
Outputs
Name | Format | Description |
---|---|---|
IPSMGWChargingCounterAddress |
key/value pairs identifying the session charged service |
Mapped from initial incoming chargeable event request in SIP initiated sessions to determine the default session counter against which the units will be charged. |
Charging API interactions
The charging API interactions fall under the following categories:
-
charging instructions issued on the
IPSMGWChargingFeatureUtil.DEFAULT_IEC_CHARGING_INSTANCE
itself -
updates made to all counters on the charging instance, mainly limited to updates from CCAs.
-
complete implementation of event based charging on the default counter.
Interaction with the default charging instance
Initialisation
When the feature is first triggered on an incoming DialogTcapMessage, if there is a PS Delivery MESSAGE pending, it creates the default IEC charging instance, under the name IPSMGWChargingFeatureUtil.IPSMGW_IEC_CHARGING_INSTANCE
. It then maps the request to a session counter address written to the session state field IPSMGWChargingCounterAddress. This is the default session counter on which all subsequent IEC based charging is performed.
Initial debit
On any trigger other than an incoming DialogTcapMessage request, the feature checks whether the IPSMGWChargingFeatureUtil.DEFAULT_IEC_CHARGING_INSTANCE
has been initialised. The first step is to check the instance exists in the ChargingManager, then that the instance has a session counter with the address specified in session state IPSMGWChargingCounterAddress. If either check fails, the feature ends immediately on the assumption that IEC is not enabled.
The feature will instruct the charging instance to send a direct debit message to the OCS. It will suspend the outgoing PS Delivery leg until the OCS authorises the request.
The Ro Credit-Control-Request is generated using the IPSMGWChargingInstanceToCCR mapper.
Interaction with all session counters
When a CCA is received, all counters on the ChargingInstance will be processed according to the algorithm outlined in Counter update algorithm pseudo code. The feature will clear the pending requested units on all session counters.
When charging using a non-default counter, another feature will need to set reported used and pending requested units on the counters as needed.
Mappers
This feature relies on two mappers:
-
The first converts the initial MT-FSM to a SessionCounterAddress.
The default implementation is MTFSMToSessionCounterAddress:// a mapper that takes a {{Inbound MT-FSM}} and generates a {{SessionCounterAddress}}. final Mapper<SentinelSipSessionState> mapper = getMapperLibrary().findMapper( getSessionState().getSentinelSelectionKey(), SipRequest.class, SessionCounterAddress.class, mappingPoint);
-
The second mapper converts a CCA into a list of session counters.
The default implementation is CCAtoSessionCounterList:// a mapper that takes a {{CreditControlAnswer}} and generates a {{List<SessionCounter>}}. final Mapper<SentinelSipSessionState> mapper = getMapperLibrary().findMapper( getSessionState().getSentinelSelectionKey(), CreditControlAnswer.class, List.class mappingPoint);