|
||
The SIP Client Resolver defines the architecture for resolving, or identifying, the target client on receipt of SIP requests from the default port.
The Client Resolver API requires the SIP Codec API and the SAP Codec API
The target clients interested in receiving SIP requests must implement this API. The following are the two different ways in which a target client can receive SIP requests:
By implementing CSIPResolvedClient
interface
and providing an XML description with their capabilities. The XML description
includes details about the supported content types and media formats, using SIP
headers and SDP m-lines in the ECom resource file. Client Resolver framework
determines the target client by comparing the incoming SIP request to the XML
descriptions provided by the CSIPResolvedClient
implementation.
By implementing CSIPResolvedClient2
interface
and adding Request-URIs user-part, plug-in's UID, and client's UID to SIP
Client Resolver’s mapping table in Central Repository. The table maps the
user-part of the incoming SIP request’s Request-URI to the corresponding
CSIPResolvedClient2
implementation’s UID. SIP Client
Resolver framework offers the SIP request to only those plug-ins for which a
mapping entry is found in the Central Repository.
This means that every target client must provide an ECom plug-in that can be used by the Client Resolver Framework.
The Client Resolver Framework uses the information in the SIP request and matches it with the XML description or the mapping table entry provided by the target clients, to decide which target client plug-in to load.
Clients must create a class derived from
CSIPResolvedClient
or
CSIPResolvedClient2
to receive requests outside SIP
dialogs. If the target client is not running, it must be launched to be able to
receive SIP requests.
CSIPResolvedClient
is an interface that the
target clients must implement in order to receive SIP requests outside SIP
dialogs and enable client resolution mechanism.
SIP uses the data provided in the ECom resource file or, optionally, as requested by the implementation to decide which target client to be used.
CSIPResolvedClient2
is an interface that the
target clients must implement in order to receive SIP requests outside SIP
dialogs and enable client resolution mechanism.
The SIP stack utilizes the plug-ins that implement this interface in the following manner:
If the SIP request does not contain Accept-Contact-header(s),
next step is performed. If it does, SIP stack calls the
CSIPResolvedClient2::MatchAcceptContactsL()
method on all
the plug-ins and applies the following logic:
If none of the clients match, go to next step.
If a client matches, the SIP request is routed to the matching client.
If several clients match, go to next step.
If the SIP request does not contain Event-header, next step is
performed. If it does, SIP stack calls
CSIPResolvedClient2::MatchEventL()
method on all the
plug-ins and applies the following logic:
If none of the clients match, go to next step.
If a client matches, the SIP request is routed to the matching client.
If several clients match, go to next step.
SIP stack calls the
CSIPResolvedClient2::MatchRequestL()
method on all the
plug-ins and applies the following logic:
If none of the clients match, an error response is generated.
If a client matches, the SIP request is routed to the matching client.
If several clients match, one of these clients are randomly picked and the SIP request is routed to it. Normally, the ROM-based clients are preferred.
Note: The channel UIDs must be unique across all SIP clients. The clients may use UIDs assigned for the binaries.
How the target client is resolved using CSIPResolvedClient2