The MMTelOCB feature implements outgoing communication barring and operator determined retargeting .
(The MMTelICB feature implements incoming communication barring and anonymous communication rejection.)
What is OCB?
3GPP defines communication barring in TS 24.611, including Incoming Communication Barring (ICB), Anonymous Communication Rejection as a special case of ICB, and Outgoing Communication Barring (OCB):
The Outgoing Communication Barring (OCB) is a service that rejects outgoing communications that fulfil certain provisioned or configured conditions on behalf of the originating user. The Outgoing Communication Barring (OCB) service makes it possible for a user to have barring of certain categories of outgoing communications according to a provisioned or user configured barring program and is valid for all outgoing communications. A barring program is expressed as a set of rules in which the rules have a conditional part and an action part. An example condition is whether the request uri matches a specific public user identity. The action part can specify for a rule that contains a matching condition that the specific outgoing communication is to be barred. The complete set of conditions and actions that apply to this service and their semantics is described in subclause 4.9.Incoming. |
Feature cheat sheet
Feature Script Name |
MMTelOCB |
---|---|
MMTel or SCC |
MMTel |
Call-Type |
Originating |
Session Plan |
mmtel-orig |
Execution Points |
SipAccess_SubscriberCheck, SubscriptionSipRequest |
Network Operator Config |
Yes |
Subscriber Config |
Yes |
POJO or SBB |
POJO |
Feature FSMs |
None |
Feature Parameters |
None |
SAS Support |
Yes |
Prerequisite features
-
DetermineCallType
-
Determine International and Roaming Status (used for Roaming, International and International-exHC detection)
For announcements, SIPPlayAnnouncement is a dependent feature; but it is not a prerequisite. |
Source Code
This feature’s source code is available in the Sentinel VoLTE SDK in the mmtel-communication-barring
module pack.
It can be viewed by using the create-module
command in the SDK with that module pack, for example:
> create-module new-cb-module opencloud#mmtel-communication-barring#volte/4.0.0;4.0.0.0
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 |
---|---|
mmtel-communication-barring |
Group module for the feature that includes all of the modules listed below. |
mmtel-communication-barring-library |
Contains code shared by both communication barring features. |
mmtel-ocb-profile |
Contains the profile specification for the feature configuration profile table. |
mmtel-ocb-prefix-address-list |
Contains the address list specification for prefix based barring. |
mmtel-ocb-prefix-classification-profile |
Contains the prefix classification profile specification for prefix based barring. |
mmtel-ocb |
Contains the feature itself. |
Network Operator Data
The MMTelOCB feature retrieves configuration from three profile tables and an address list:
-
The
MMTelOCBConfigProfileTable
provides the basic configuration for the feature. -
The
MMTelOdbOperatorSpecificTypeRuleProfileTable
provides operator-specific ODB rule configuration. -
The
${platform.operator.name}_PrefixBarring_AddressListEntryTable
maps dialled numbers to prefix barring classifications. -
The
PrefixBarringClassificationsTable
defines matching criteria and the barring treatment for classes of dialled prefixes.
MMTelOCBConfigProfileTable
Basic feature configuration is stored on a profile table called MMTelOCBConfigProfileTable
.
Operator data is scoped according to a Sentinel selection key.
Attribute Name | Type | Default | Description |
---|---|---|---|
PlayAnnouncement |
boolean |
false |
If true, MMTelOCB will request an announcement is played when it bars a call. |
AnnouncementID |
int |
0 |
The ID for the announcement to be played. If set to |
MMTelOdbOperatorSpecificTypeRuleProfileTable
Operator specific ODB rule configuration is stored on a profile table called MMTelOdbOperatorSpecificTypeRuleProfileTable
.
See How to Provision the Operator Specific Barring Rules for details of this profile table.
${platform.operator.name}_PrefixBarring_AddressListEntryTable
An address list called ${platform.operator.name}_PrefixBarring_AddressListEntryTable
is used to classify the called number for prefix based barring.
Session Input Variables
Variable name | Type | Comments |
---|---|---|
Complex |
Read from the HSS or HLR in SubscriberDataLookupFromHSS or SubscriberDataLookupFromHLR |
|
Complex |
Read from the HSS in SubscriberDataLookupFromHSS |
|
RoamingIndicator |
Boolean |
Set by the Determine International and Roaming Status feature |
International |
Boolean |
Set by the Determine International and Roaming Status feature |
InternationalExHC |
Boolean |
Set by the Determine International and Roaming Status feature |
Session Output Variables
Variable name | Type | Comments |
---|---|---|
OCBBarred |
boolean |
Set to |
EarlyMediaAnnouncementInfoQueue |
List<SipAnnouncementInformation> |
Feature adds an entry with the value of the announcement ID to be played. |
EndSessionAfterAnnouncement |
int |
The status code used when ending the session if barring has occurred and announcements are used. |
RanOcb |
boolean |
Signal to other features that OCB ran on this session. |
MonitorCallOnly |
boolean |
Set to |
Statistics
MMTelOCB statistics are tracked by the sentinel.volte.sip SBB
and can be found under the following parameter set in REM:
SLEE-Usage → sentinel.volte.sip service → sentinel.volte.sip SBB → feature → MMTelOCB
or with rhino-stats:
"SLEE-Usage.Services.ServiceID[name=sentinel.volte.sip,vendor=OpenCloud,version=4.0.0].SbbID[name=sentinel.volte.sip,vendor=OpenCloud,version=4.0.0].feature.MMTelOCB"
Statistic | Type | Description |
---|---|---|
Started |
Counter |
Incremented when the feature is invoked. |
FailedToStart |
Counter |
Incremented when Sentinel VoLTE encounters an error while attempting to start the feature. |
IssuedWarning |
Counter |
Incremented when a non-fatal problem is encountered and the feature issues a warning. |
FailedDuringExecution |
Counter |
Incremented when a fatal problem is encountered and the feature cannot execute correctly. |
TimedOut |
Counter |
Incremented when the feature takes too long to complete and Sentinel VoLTE aborts execution. |
CallBarred |
Counter |
Incremented when the feature bars a call. |
CallExplicitlyAllowed |
Counter |
Incremented when the feature finds a rule that explicitly allows the call to go through, thus preventing any barring. |
ODBRuleApplied |
Counter |
Incremented when an ODB rule’s conditions were met and its action was executed. |
OCBRuleApplied |
Counter |
Incremented when an OCB rule’s conditions were met and its action was executed. |
PrefixBasedRuleApplied |
Counter |
Incremented when a rule was applied due to prefix barring. Either |
PlayAnnouncementTriggered |
Counter |
Incremented when the feature requests that an announcement be played to the calling party. |
RedirectionRequested |
Counter |
Incremented when an operator specific ODB rule’s conditions were met and it has been configured to redirect the call. |
RedirectionFailed |
Counter |
Incremented when an attempt to redirect the outbound |
RedirectionSuccessful |
Counter |
Incremented when an attempt to redirect the outbound |
OdbSpecificTypeRulesNotFound |
Counter |
Incremented when the subscriber data for the served user indicates that an operator specific ODB rule should be applied, but no configuration could be found for the specified rule. |
ClassifiedNumberByPrefix |
Counter |
Incremented when prefix barring classifies the dialled number as triggering some barring treatment(s). |
FoundMultipleNonConflictingPrefixBarringClassifications |
Counter |
Incremented when prefix barring classifies the dialled number and selects multiple classifications, all with separate treatments. |
FoundConflictingPrefixBarringClassifications |
Counter |
Incremented when prefix barring classifies the dialled number and selects multiple classifications, with some duplicate treatments. Such as
|
FallbackToNetworkDefaultServiceConfig |
Counter |
Incremented when the feature uses the network default service configuration as the session state does not contain the feature specific subscriber service data. |
Supported Barring Rule Conditions
Roaming
This condition evaluates to true if the session state variable RoamingIndicator
is true. This is set by the Determine International and Roaming Status feature.
Use this XML in the REM HSS Subscriber Data page to configure OCB for roaming calls:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy" xmlns:ocp="urn:oma:xml:xdm:common-policy">
<cp:rule id="roaming">
<cp:conditions>
<roaming/>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
</cp:ruleset>
Media
This condition evaluates to true when the value of this condition matches the media field in one of the "m=" lines in the SDP message body offered in an INVITE request.
Use this XML in the REM HSS Subscriber Data Page to configure OCB for calls offering specific media:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy" xmlns:ocp="urn:oma:xml:xdm:common-policy">
<cp:rule id="no_video">
<cp:conditions>
<media>video</media>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
</cp:ruleset>
Combinations of media types may be expressed as multiple conditions within the same rule. For example:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy" xmlns:ocp="urn:oma:xml:xdm:common-policy">
<cp:rule id="no_video_and_text">
<cp:conditions>
<media>video</media>
<media>text</media>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
</cp:ruleset>
Identity
This condition evaluates to true if the identity of the other party in the communication matches that which is expressed in the condition. Identities within the condition can be expressed in different ways:
-
a single, fully expressed identity (e.g. sip:alice@example.com)
-
a whole domain (e.g. example.com)
-
a whole domain, but with exceptional identities or domains (e.g. example.com except for alice@example.com)
-
all identities (may also have exceptions)
-
any combination of the above
In case of a single identity (i.e. a 'one' condition), or in case of an exception (i.e. an 'except' condition), the URI in the condition and the URI to match against are both normalized before they are compared. Normalization is done using the Normalization Component.
The URI to match against although normalized comes from the inbound request. This means that the URI will not have had number translation features such as SIP Short Code applied. Therefore any condition intended to match a shortcode should take this into account.
The following XML snippets show how to configure the user’s Subscriber data for each of the above cases.
This example, without any other rule, blocks any session towards 'sip:alice@example.com'.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy" xmlns:ocp="urn:oma:xml:xdm:common-policy">
<cp:rule id="barr-alice">
<cp:conditions>
<cp:identity>
<one id="sip:alice@example.com"/>
</cp:identity>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
</cp:ruleset>
This example, without any other rule, blocks any session towards any user in the 'example.com' domain.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy" xmlns:ocp="urn:oma:xml:xdm:common-policy">
<cp:rule id="barr-domains">
<cp:conditions>
<cp:identity>
<many domain="example.com"></many>
</cp:identity>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
</cp:ruleset>
This example, without any other rule, blocks any session towards any user in the 'example.com' domain, except for 'sip:alice@example.com'.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy" xmlns:ocp="urn:oma:xml:xdm:common-policy">
<cp:rule id="barr-domains-with-exceptions">
<cp:conditions>
<cp:identity>
<many domain="example.com">
<except id="sip:alice@example.com"/>
</many>
</cp:identity>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
</cp:ruleset>
This example, without any other rule, blocks any session towards any user in the 'example.com' domain, except for users within the domain 'callcentre.example.com'.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy" xmlns:ocp="urn:oma:xml:xdm:common-policy">
<cp:rule id="barr-domain-except-callcentre">
<cp:conditions>
<cp:identity>
<many domain="example.com">
<except domain="callcentre.example.com"/>
</many>
</cp:identity>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
</cp:ruleset>
Note the attribute of the 'except' element is now 'domain'. |
This example, without any other rule, blocks all sessions towards any user.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy" xmlns:ocp="urn:oma:xml:xdm:common-policy">
<cp:rule id="barr-all">
<cp:conditions>
<cp:identity>
<many />
</cp:identity>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
</cp:ruleset>
This example, without any other rule, blocks any session towards any user registered in the domain 'example2.com' except for 'sip:charlie@example2.com, for 'sip:alice@example1.com' and sip:bob@example1.com.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy" xmlns:ocp="urn:oma:xml:xdm:common-policy">
<cp:rule id="barr-some">
<cp:conditions>
<cp:identity>
<one id="sip:alice@example1.com"/>
<one id="sip:bob@example1.com"/>
<many domain="example2.com">
<except id="sip:charlie@example2.com"/>
</many>
</cp:identity>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
</cp:ruleset>
This example, always blocks some domains, always allow other domains and a set of sip URIs.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy" xmlns:ocp="urn:oma:xml:xdm:common-policy">
<cp:rule id="always-allow-these-domains">
<cp:conditions>
<cp:identity>
<many domain="emergency.org"></many>
<many domain="police.org"></many>
</cp:identity>
</cp:conditions>
<cp:actions>
<allow>true</allow>
</cp:actions>
</cp:rule>
<cp:rule id="always-barr-these-domains">
<cp:conditions>
<cp:identity>
<many domain="fakelotery.org"></many>
<many domain="dhueb!.org"></many>
</cp:identity>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
<cp:rule id="always-barr-these-identities">
<cp:conditions>
<cp:identity>
<one id="sip:john@example.com"/>
<one id="sip:marc@example.com"/>
</cp:identity>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
</cp:ruleset>
Depending on the value of the 'allow' element of the rule, the rule can essentially become an 'allowlist' or a 'blocklist'. |
International
This condition evaluates to true if the session state variable International
is true. This is set by the Determine International and Roaming Status feature.
Use this XML in the REM HSS Subscriber Data page to configure OCB for international calls:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy" xmlns:ocp="urn:oma:xml:xdm:common-policy">
<cp:rule id="international">
<cp:conditions>
<international/>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
</cp:ruleset>
International-exHC
This condition evaluates to true if the session state variable InternationalExHC
is true. This is set by the Determine International and Roaming Status feature.
Use this XML in the REM HSS Subscriber Data page to configure OCB for international-exHC calls:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy" xmlns:ocp="urn:oma:xml:xdm:common-policy">
<cp:rule id="international-exHC">
<cp:conditions>
<international-exHC/>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
</cp:ruleset>
International when roaming
This condition evaluates to true if the session state variable International
is true and RoamingIndicator
is true. These are set by the Determine International and Roaming Status feature.
Use this XML in the REM HSS Subscriber Data page to configure OCB for international when roaming calls:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy" xmlns:ocp="urn:oma:xml:xdm:common-policy">
<cp:rule id="international">
<cp:conditions>
<roaming/>
<international/>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
</cp:ruleset>
Unconditional
Use this XML in the REM HSS Subscriber Data page to configure OCB for all calls:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy" xmlns:ocp="urn:oma:xml:xdm:common-policy">
<cp:rule id="all-calls">
<cp:conditions/>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
</cp:ruleset>
Validity
This condition evaluates to true if the current time is within the times specified by the validity period.
Time is based on the Home Network time (that is, the time of the MMTel Server).
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy" xmlns:ocp="urn:oma:xml:xdm:common-policy">
<cp:rule id="all-calls">
<cp:conditions>
<cp:validity>
<cp:from>1970-01-01T00:00:00</cp:from>
<cp:until>1970-01-01T00:00:00</cp:until>
</cp:validity>
</cp:conditions>
</cp:rule>
</cp:ruleset>
Rule deactivated
This condition always evaluates to false. Used to disable a rule without removing the rule entirely. The rule is re-enabled by removing this condition.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:ruleset xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap" xmlns:cp="urn:ietf:params:xml:ns:common-policy" xmlns:ocp="urn:oma:xml:xdm:common-policy">
<cp:rule id="all-calls">
<cp:conditions>
<rule-deactivated/>
<cp:validity>
<cp:from>1970-01-01T00:00:00</cp:from>
<cp:until>1970-01-01T00:00:00</cp:until>
</cp:validity>
</cp:conditions>
</cp:rule>
</cp:ruleset>
Barring rule actions
Barring rule actions are a string. There could be many actions defined, but the only one that makes any sense is the allow
action.
The allow
action has a Boolean attribute, with meaning as follows:
-
true
— allow session setup to proceed -
false
— deny session setup from proceeding.
Any other rule action (that is, an action that is not set to allow
) will result in us treating the action as the following:
-
allow rule action with value of
true
.
Behaviour
Initial Checks
When triggered the feature first undergoes a series of checks to ensure that the conditions for the feature to run are met. The feature enforces the following conditions:
-
The call-type is
Originating
orForwarded
. -
OCB service data for the subscriber has been successfully loaded and the
OperatorAuthorized
flag in the data is set totrue
. -
Network operator configuration for the feature is present and has been successfully loaded.
-
The invoking trigger for the feature is an inbound SIP
INVITE
orREFER
request.
If any of those conditions are not met, the feature will terminate immediately and the OCB service will not run.
Barring Rule Evaluation
If all checks passed, then the feature will move on to carry out barring rule evaluation. This occurs in three phases, one for each type of rule:
-
All operator specific type rules are evaluated. If any of them apply (be they a barring, retarget or explicit allow action), then the feature will execute the appropriate action and then skip the following phases. Prefix barring interacts with this step as described in Prefix Based Barring Behaviour
-
The remaining ODB rules are evaluated, again if any of the rules apply, their action will be executed and the final evaluation phase skipped.
-
Prefix based premium-rate communication barring options are evaluated as described in Prefix Based Barring Behaviour
-
Standard OCB rules will be evaluated and the appropriate action applied if one is matched. This final phase will be skipped if the MMTel OCB
Active
flag is set to false in the service data.
When deciding whether a rule should be applied, the feature will check the set of conditions provided by the rule. The feature will apply the rule if any of the following statements are true:
-
The rule has no set of conditions, i.e. the
<conditions>
element is absent in the rule definition. -
The set of conditions for the rule is empty.
-
All of the conditions within the set defined in the rule are met.
If none of those statements are true for any rule, the feature will complete execution and the call will be allowed to continue.
Rule Actions
When a rule is applied, there are three possible actions the feature may have to carry out:
-
Allowlisting (that is, call is explicitly allowed to continue)
-
Call barring
-
Retargeting (only available with operator specified ODB rules)
Allowlisting
If the action of an applicable rule indicates the call should be allowed, then the feature immediately stops evaluating other rules and allows the call to proceed.
Call Barring
If the action of an applicable rule indicates that the call should be barred, the feature won’t act immediately. It will first evaluate the other rules of the same type to ensure that none of them indicate that the call should be allowlisted. If the call is not allowlisted by another rule, then the feature will execute the call barring procedure as follows:
-
Set the
OCBBarred
session state flag totrue
to limit which features will run afterMMTelOCB
. -
Increment appropriate stats to indicate the call was barred.
-
Check whether the method for the incoming message is
INVITE
orREFER
, and execute the appropriate procedure as described below.
INVITE
barring procedure:
-
Check the feature configuration to determine if an announcement needs to played.
-
Depending on the outcome:
-
If an announcement does not need to be played, instruct sentinel to immediately terminate the call with a
603 Decline
response for theINVITE
request. -
If an announcement is to be played:
-
Suppress online charging for the call (if applicable).
-
Queue an announcement for the SipPlayAnnouncement feature, using the announcement ID provided in the feature configuration.
-
Set the
EndSessionAfterAnnouncement
session state field to indicate to theSipPlayAnnouncement
that it should terminate the session with a603 Decline
response for the originalINVITE
request after the announcement has been played.
-
-
REFER
barring procedure:
-
Send a SIP
403 Forbidden
response for theREFER
request. -
Search for the outbound
REFER
on the outbound leg’s message queue, and then remove it.
Retargeting
Only operator-specific ODB rules can be used to retarget a call.
In the rule XML, the action is still listed with allow
being false
(i.e. bar the call), but additional configuration on the MMTelOdbOperatorSpecificTypeRuleProfileTable
is used to transform the rule action into a retarget.
If there are multiple applicable operator-specific ODB rules for a call, and they retarget to different destinations, or one retargets and another bars the call, then the rule with the lowest Type
number will take precedence (e.g. the Type2
rule will take precedence over the Type3
rule).
However, as always, an operator-specific ODB rule that explicitly allowlists the call will take precedence regardless of its number.
When it is determined that a call should be retargeted, the procedure is as follows:
-
Retrieve the new target URI from the rule’s configuration profile on the
MMTelOdbOperatorSpecificTypeRuleProfileTable
. -
Release the original outbound leg towards the called party (at this point no signalling should have occurred on this leg, so no message is sent to do this).
-
Generate a new outbound
INVITE
request from the original inbound request. -
Update the newly created request to retarget it, the procedure for doing this is similar to the one used by unconditional forwarding (CFU) in the MMTelCDIV feature:
-
The
Request-URI
is set to the value of the new target URI and acause=302
parameter is added. -
The
To
header is set to the value of the new target URI. -
The
History-Info
header is modified/added to indicate a diversion has occurred, the original target URI is given the 'privacy=history' parameter.
-
-
Create a new outbound leg (named
MMTelOCBRetargetedLeg
) to send the newINVITE
request, and link this leg to the calling party leg. -
If the rule’s configuration profile indicates that the redirected call should not be subject to online charging, then suppress online charging for the call.
-
If the rule’s configuration profile indicates that a retarget announcement should be played, then queue an announcement with the announcement ID provided in the rule’s configuration (note that the standard barring announcement as configured on the
MMTelOCBConfigProfileTable
will not be played on a retarget action).
If at any point in the procedure there is a problem that prevents retargeting from working, then the feature will fall back to standard call barring behaviour (including playing the standard barring announcement if applicable).
Rule Priority
The behavior described above gives rise to a natural priority that rules will follow when multiple rules with different actions are applicable to a call.
To summarise:
-
There are different types of rules: Prefix based
OperatorAllow
, Prefix basedOperatorBar
, Operator-specific ODB rules, Prefix based premium-rate communication barring, standard ODB rules, and OCB rules. -
The overall priority is
-
Prefix based
OperatorAllow
-
Operator-specific ODB rules that allowlist a call, regardless whether applied by matching their defined condition, or by prefix based treatment
-
Prefix based
OperatorBar
-
Operator-specific ODB rules that bar a call, regardless whether applied by matching their defined condition, or by prefix based treatment
-
Prefix based premium-rate communication barring
-
Standard ODB rules
-
OCB rules
-
-
Within rules of the same type, an allowlisting action will always take precedence over a barring or retargeting action.
-
If multiple operator-specific ODB rules apply and have conflicting retarget or barring actions, then the rule with the lower number will take precedence. (there are four slots available for operator-specific ODB rules, numbered one through four).
Roaming and International Determination
The MMTelOCB feature does not compute whether or not the served user is roaming or international; rather it relies on a session input fields (RoamingIndicator
, International
, and InternationalExHC
).
These fields are set by the DetermineInternationalAndRoamingStatus feature.
For this reason the DetermineInternationalAndRoamingStatus
feature must run before MMTelOCB
in the feature execution scripts if international and roaming status need to be considered.
Playing Announcements
The MMTelOCB feature does not play announcements itself; rather it relies on setting data in session output fields (EarlyMediaAnnouncementInfoQueue
and EndSessionAfterAnnouncement
) if an announcement is to be played.
These fields are read by the SipPlayAnnouncement feature.
Based on the the data in the fields that feature will:
-
Handle the signalling required to play the announcement to the calling party.
-
Terminate the call after the announcement if instructed to do so.
For this reason the SipPlayAnnouncement
feature must run after MMTelOCB
in the feature execution scripts if announcements are required.