Description

Feature name

DetermineIfRoaming

Applicable contexts

SIP service

SAS Support

No

Prerequisite Features

None

The Determine If Roaming feature is a pre credit check feature early in the feature list (but always after the emergency number feature). The feature sets the call’s Roaming Indicator, which is stored in a session state variable for future features. The DetermineIfRoaming feature analyses the p-visited-network-id header and compares it with the platforms set of home network ids.

Leg Manager inputs

Leg Name Type Format Description Behaviour if null/invalid

callingParty

InviteRequest

org.jainslee.resources.sip.SipRequest

See Easysip javadoc

INVITE received from the calling party

Runtime exception handled by feature runner

Session state inputs and outputs

Inputs

Name Type Format Description Behaviour if null/invalid

SentinelSelectionKey

com.opencloud.sentinel.common.SentinelSelectionKey

selection key (for example, <platform>::::)

For selecting the Home Network IDs to determine RoamingIndicator \

Report featureCannotStart, featureHasFinished

Outputs

Name Type Format Description

RoamingIndicator

java.lang.Boolean

True: Roaming, False:NotRoaming

Roaming status indicator

Feature responses

Response Reason

featureCannotStart

SessionState SentinelSelectionKey is not set or CallingParty leg InviteRequest has not been set

featureFailedToExecute

Roaming status could not be determined

featureHasFinished

feature has finished

Roaming indicator

The call’s roaming indicator is classified as one of:

  • Roaming

  • NotRoaming

The roaming indicator is stored in session state variable RoamingIndicator as a Boolean.

The roaming indicator is determined based on the following pseudo code:

Function determineIfRoaming(callingPartyInvite)

    roamingIndicator = determineRoamingBasedOnPVisitedNetworkHeader(callingPartyInvite)

    IF roamingIndicator is null
    THEN
        roamingIndicator = determineRoamingBasedOnRecordRouteAnalysis(callingPartyInvite)
    ENDIF

    /* if that still didn't work report a feature error*/
    IF roamingIndicator is null
    THEN
        /* Roaming status could not be determined */
        featureFailedToExecute()
    ENDIF


RoamingIndicator Function determineRoamingBasedOnPVisitedNetworkHeader(callingPartyInvite)

    headers = callingPartyInvite.getHeaders("p-visited-network-id")
    IF header is null
    THEN
        return null
    ENDIF

    /* assumes all values are the same (RFC3455 says 'hopefully' they are!)
     * so just take the first one
     */
    visitedNetworkID = headers.next()

    List<String> homeNetworkIDs = getSessionState().getSentinelSelectionKey().getHomeNetworkIDs();

    IF homeNetworkIDs contain visitedNetworkIDs THEN
       return false
    ENDIF

    return true

/* Roaming based on record route anaylsis is NOT fully implemented.  However it will affect the
 * setting of the roaming indicator, so it is included here for completeness.
 */
RoamingIndicator Function determineRoamingBasedOnRecordRouteAnalysis(callingPartyInvite)

       headers = callingPartyInvite.getAddressHeaders(RecordRouteHeader.NAME);
       IF SipParseException THEN
           TRACE "Unable to parse. Interpreting call as non-roaming.")
           return false
       ENDIF

       IF headers is null OR headers is empty {
            TRACE ("No header present: Interpreting call as non-roaming.");
            return false;
       ENDIF

       return null;

Configuration Profile Naming

Configuration Profile Table Name Description Profile Naming

SipSentinelConfigurationTable

Sentinel configuration table (profile configuration containing home network ids)

${SELECTIONKEY}:homeNetworkIDs

Previous page Next page
Sentinel Express Version 4.1