This feature delivers an SMS encapsulated in SIP (SMS Over IP) to the UE
Feature cheat sheet
Feature Name | Network Operator Data | Used in PlanId(s) | Stateful or Stateless | POJO Feature or SBB Feature |
---|---|---|---|---|
IPSMGWPSDelivery |
Yes |
MTFSM_PS,MTFSM_PS_CS,MTFSM_CS_PS |
Stateless |
POJO |
Statistics
IPSMGWPSDelivery statistics are tracked by the sentinel.ipsmgw SBB
and can be found under the following parameter set in REM:
SLEE-Usage → sentinel.ipsmgw service → sentinel.ipsmgw SBB → feature → IPSMGWPSDelivery
or with rhino-stats:
"SLEE-Usage.Services.ServiceID[name=sentinel.ipsmgw,vendor=OpenCloud,version=2.9.0].SbbID[name=sentinel.ipsmgw,vendor=OpenCloud,version=2.9.0].feature.IPSMGWPSDelivery"
Name | Description |
---|---|
SentMessage |
Incremented when a SIP MESSAGE containig RP-Message is sent to the UE |
DeliverySucceeded |
Incremented when a delivery report indicating success is received |
DeliveryFailed |
Incremented when any 3xx or greater response is received for the SIP MESSAGE or when a delivery report indicating failure is received |
DeliveryTimedOut |
Incremented when the timer that is armed on sending the SIP MESSAGE gets fired |
NotAttemptedCreditLimitReached |
Incremented when a CreditLimitReached Direct Debit CCA is received. The PS Delivery attempt is aborted, with an Sm-DeliveryFailure sent back to the SMSC |
NotAttemptedChargingFailure |
Incremented when a general charging error occurs. The PS Delivery attempt is aborted, with an Sm-DeliveryFailure sent back to the SMSC |
SubscriptionFailed |
Incremented when an attempt to subscribe to UEReachabilityForIP notifications fails |
SentReportSMDeliveryStatus |
Incremented when a ReportSMDeliveryStatus message is sent to the UE |
FailedToSendReportSMDeliveryStatus |
Incremented when there was an error trying to send a ReportSMDeliveryStatus message |
ReportSMSucceeded |
Incremented when a ReportSMDeliveryStatus success response is received |
ReportSMFailed |
Incremented when a ReportSMDeliveryStatus error response is received |
Configuration
The IPSMGWPSDelivery feature configuration is scoped according to a Sentinel Selection Key. The IPSMGWPSDelivery feature refers to three Profile Tables for configuration.
The first Profile Table is Shared Configuration Profile
. The following attributes are used:
Attributes | Type | Meaning |
---|---|---|
ICSCFURI |
String |
The I-CSCF SIP URI that will be used to route outbound SIP MESSAGE requests (see SIP Transports and Routing) |
SipTransport |
String |
The SIP transport for the IPSMGW’s own SIP URI, used in the |
SubscribeToUEReachabilityForIP |
Boolean |
If true, request UEReachabilityForIP notifications from the HSS on certain PS Delivery failures. |
DeliveryOrder |
Enum |
If CS Delivery will run after PS Delivery, there is no need to send error report to SMSC on PS delivery failure |
UseMsisdnAsHlrAddress |
Boolean |
Controls whether to address the outbound HLR leg using a GT address formed from the subscriber MSISDN, instead of using the configured |
ChargingOptions |
String[] |
If this array contains the value |
The second Profile Table is IPSMGWPSDeliveryConfigProfileTable
. The following attributes are used:
Attributes | Type | Meaning |
---|---|---|
FallbackTimer |
int |
Time in milliseconds to wait for a response during PS Delivery before setting 'PSDeliveryStatus' to FAILED |
RPErrorFallbackAvoidanceCodes |
int[] |
A list of error codes that if matched from the RP-ERROR will stop a CS fallback |
The third Profile Table (IPSMGWPSDeliveryPerNodeURIConfigTable
) holds node-specific feature configuration. The following attributes are used:
Attributes | Type | Meaning |
---|---|---|
NodeURI |
String |
The SIP Local URI for this node to use when sending the MESSAGE |
MAP Application Contexts
The feature can be triggered by any of the following MAP Application Contexts:
shortMsgMT_RelayContext_v3_ac
shortMsgMT_RelayContext_v2_ac
shortMsgMT_RelayContext_v1_ac
Behaviour
The feature is triggered upon receipt of a mt_ForwardSM in any of the above three MAP Application Contexts.
After validating configuration and session state inputs, it then takes the ForwardSM argument and creates an RpDATA that it can send in a SIP MESSAGE to the ICSCF
The SIP MESSAGE is created as follows:
If a short message is received from the SMS-GMSC, the IP-SM-GW shall extract the IMSI of the SM-over-IP receiver from the received message. Then the IP-SM-GW shall send a SIP MESSAGE request with the following information:
a) the Request-URI, which shall contain a public user identity of the SM-over-IP receiver associated with the received IMSI;
b) the Accept-Contact header, which shall contain a "+g.3gpp.smsip" parameter and the "explicit" and "require" tags according to RFC 3841 [17];
c) the Request-Disposition header which shall contain the "no-fork" directive;
d) the P-Asserted-Identity header which shall contain the SIP URI of the IP-SM-GW;
e) the Content-Type header which shall contain "application/vnd.3gpp.sms"; and
f) the body of the request which shall contain an RP-DATA message as defined in 3GPP TS 24.011 [8], including the SMS headers and the SMS user information encoded as specified in 3GPP TS 23.040 [3].
For example flows, see MT Delivery Flows
The IPSMGWPSDelivery feature arms a service timer (with the value of FallbackTimer
attribute in the IPSMGWPSDeliveryConfigProfileTable) when it sends the SIP MESSAGE. If this timer expires, then PS Delivery has taken too long and the PSDeliveryStatus session state field is set to FAILED (default is NOT_ATTEMPTED.)
The following tables explains the behaviour during MT PS delivery.
PS_ONLY or CS_THEN_PS
This section describes the behaviour when the DeliveryOrder
attribute in the Shared Configuration Profile
is set to PS_ONLY
or CS_THEN_PS
.
For a PS delivery:
If | Then | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Charging is performed and returns a failure |
Error returned to SMSC in MT-FSM response |
||||||||||||
Response received from UE is a 408 or 410, or no response received from UE before the FallBackTimer expires |
Error returned to SMSC in MT-FSM response, IP-SM-GW subscribes to receive UEReachabilityForIP notifications using stored MSISDN, IP-SM-GW sends a MAP Report SM Delivery Status to the HLR |
||||||||||||
Response received from UE is other code that is not a 2xx (e.g. not 202 or 200) |
Error returned to SMSC in MT-FSM response |
||||||||||||
Response received from UE is a 2xx |
|
PS_THEN_CS
This section describes the behaviour when the DeliveryOrder
attribute in the Shared Configuration Profile
is set to PS_THEN_CS
. In this mode, PS Delivery may not necessarily respond to the SMSC itself, instead falling back to CS Delivery.
For a PS delivery:
If | Then | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Charging is performed and returns a failure |
Error returned to SMSC in MT-FSM response |
||||||||||||||||||
No Response received from UE before the FallBackTimer expires |
CS Fallback initiated, IP-SM-GW subscribes to receive a UEReachabilityForIP notification using the stored MSISDN |
||||||||||||||||||
Response received from UE is not a 2xx (e.g. not 202 or 200) |
CS Fallback initiated, IP-SM-GW may subscribe to receive a UEReachabilityForIP notification using the stored MSISDN |
||||||||||||||||||
Response received from UE is a 2xx |
|
Requesting a UE Reachability for IP Notification
This feature may request a UE Reachability for IP Notification from the HSS, using Diameter Sh’s SubscribeNotificationRequest
operation (through the Sh Cache Microservice).
This operation is only sent to the HSS if the SubscribeToUEReachabilityForIP configuration flag is set to true and one of the following occurs:
-
the SIP Message Request sent towards the UE is responded to with a 408 (Request Timeout) or 410 (Gone) error response, or
-
an RP-ACK or RP-ERROR is not received from the UE within a guard time period
The guard time value is the FallBackTimer. The Sh SubscribeNotificationRequest operation is sent with the MSISDN as the access key, and the One Time Notification flag set.
Session state inputs and outputs
Inputs
Name | Type | Format | Description | Behaviour if null/invalid |
---|---|---|---|---|
SentinelSelectionKey |
com.opencloud.sentinel.common.SentinelSelectionKey |
selection key (for example, |
For selecting configuration data and updating network operator field |
Report featureCannotStart, featureHasFinished |
MSISDN |
String |
The MSISDN to use in the subscription-notification and ReportSMDeliveryStatus operations, and to use for GT routing if configured |
Unable to send subscription-notification and ReportSMDeliveryStatus messages, and to route on GT if configured |
|
IsSMSOverIPRegistered |
boolean |
N/A |
True if the user is logged in to the IMS - feature only runs if logged in |
|
MTFSMDeliveryOrder |
com.opencloud.sentinel.ipsmgw.shared.config.profile.DeliveryOrder |
One of |
Current DeliveryOrder based on configuration and available routing info, correpsonding to current selection key plan Id. |
Set PSDeliveryStatus to FAILED and report featureHasFinished |
RegistrationRecords |
List of com.opencloud.sentinel.state.RegistrationRecord |
RegistrationRecords for the user - the default public ID is extracted from the first record and used as the RequestURI |
Report featureCannotStart, featureHasFinished |
|
SRI4SMArgV1, SRI4SMArgV2, SRI4SMArgV3 |
com.opencloud.slee.resources .cgin.map.MAPSendRoutingInfoForSMArg, com.opencloud.slee.resources .cgin.map.MAPRoutingInfoForSM_Arg |
The SendRoutingInfoForSM Arg received from the SMSC, used to populate the service centre address in a Report SM Delivery Status |
Use the IP-SM-GW address as the service centre address |
Outputs
Name | Type | Description |
---|---|---|
PSDeliveryStatus |
Enum |
Values are NOT_ATTEMPTED, FAILED, SUCCEEDED. Indicates the state of PS Delivery |
FallbackAllowed |
boolean |
True if the RP-Data Deliver MESSAGE received a SIP error response, or no RP-Ack MESSAGE was received, or if the delivery report didn’t contain RP Data, or if an RP-Error was received and its cause code was not a configured RPErrorFallbackAvoidanceCodes value. |
RP Cause Mappings
Any values not in the table are still valid as RPErrorFallbackAvoidanceCodes
but it is unlikely they will appear in the RP-ERROR.
Cause | Value |
---|---|
UNASSIGNED_NUMBER |
1 |
OPERATOR_DETERMINED_BARRING |
8 |
CALL_BARRED |
10 |
RESERVED |
11 |
SHORT_MESSAGE_TRANSFER_REJECTED |
21 |
MEMORY_CAPACITY_EXCEEDED |
22 |
DESTINATION_OUT_OF_ORDER |
27 |
UNIDENTIFIED_SUBSCRIBER |
28 |
FACILITY_REJECTED |
29 |
UNKNOWN_SUBSCRIBER |
30 |
NETWORK_OUT_OF_ORDER |
38 |
TEMPORARY_FAILURE |
41 |
CONGESTION |
42 |
RESOURCES_UNAVAILABLE |
47 |
REQUESTED_FACILITY_NOT_SUBSCRIBED |
50 |
REQUESTED_FACILITY_NOT_IMPLEMENTED |
69 |
INVALID_SHORT_MESSAGE_REFERENCE_VALUE |
81 |
INVALID_MESSAGE |
95 |
INVALID_MANDATORY_INFORMATION |
96 |
MESSAGE_TYPE_NONEXISTENT_OR_NOT_IMPLEMENTED |
97 |
MESSAGE_NOT_COMPATIBLE_WITH_SHORT_MESSAGE_PROTOCOL_STATE |
98 |
INFORMATION_ELEMENT_NONEXISTENT_OR_NOT_IMPLEMENTED |
99 |
PROTOCOL_ERROR |
111 |
INTERWORKING |
127 |