The SIP Client API manages the multimedia sessions, subscribes to events, and sends SIP messages. It also provides access to the basic services of the SIP stack such as:
Sending and receiving of SIP messages
Creating registrations
Forming and tearing down dialogs initiated by INVITE, REFER and SUBSCRIBE requests
The SIP Client API uses the client-server mechanism to interact with the SIP stack. This means more than one client can use the SIP stack at the same time. The calls to the SIP Client API are synchronous. The SIP Client API implements a set of callback functions to pass the events back to the application.
Capability information
The following table describes the capabilities required to use the SIP Client API and the conditions in which they are required:
| Capability | Reason needed |
|---|---|
NetworkServices |
to send or receive SIP messages |
WriteDeviceData |
to create an instance of the |
NetworkControl Location ReadDeviceData |
to use the function |
Extending the API
SIP Client API cannot be extended.
CSIP, MSIPObserver, CSIPConnection and MSIPConnectionObserver

An application creates a single instance of the CSIP class,
and implements the callback functions defined by MSIPObserver.
The CSIP uses the MSIPObserver functions.
The CSIP class asks the supported security mechanisms and
determines whether a CSIPConnection object exists for a
given IAP.
The CSIP object creates an instance
of CSIPConnection that allows you to send standalone SIP
requests and ask for the state of the network connection. Responses are received
through the MSIPConnectionObserver interface that defines
a set of callback functions that an application must implement.
An
application can have many CSIPConnection objects, but each
of them must have a different IAP.

An existing CSIPConnection is required to create
an instance of CSIPRegistrationBinding. The CSIPRegistrationBinding class
provides services for registration, updating the registration, and deregistration.
This class also provides instructions to the SIP stack to automatically refresh
the registration, and to query and set the outbound proxy used by the registration.

CSIPDialogAssocBase is the base class for SIP
dialog associations, such as CSIPInviteDialogAssoc, CSIPSubscribeDialogAssoc, CSIPReferDialogAssoc and CSIPNotifyDialogAssoc. The CSIPDialogAssocBase class
is used to obtain the associated SIP dialog, for the associated CSIPDialog instance,
and for sending a non-target Refresh request within the dialog.
Note: The
SIP Client API creates the CSIPDialog instance, it cannot
be created by the application.
If any of the CSIPInviteDialogAssoc, CSIPSubscribeDialogAssoc, CSIPReferDialogAssoc and CSIPNotifyDialogAssoc objects
are associated, they are bound to an existing CSIPDialog object,
or they can be used to create a new CSIPDialog object.
Note:
CSIPInviteDialogAssoc allows
an application to initiate a dialog and to send INVITE,,PRACK,,ACK, UPDATE, and BYE requests related to the dialog.
CSIPSubscribeDialogAssoc allows
an application to subscribe to different events by sending SUBSCRIBE and UNSUBSCRIBE
requests. It also orders the SIP stack to automatically refresh the SUBSCRIBE
request.
CSIPReferDialogAssoc allows
an application to define and send REFER requests.
CSIPNotifyDialogAssoc allows
an application to define and send NOTIFY requests.
Sent and received network requests

When a SIP request is sent to the network, the SIP Client API implementation
creates a CSIPClientTransaction object and returns it to
the application. A CSIPClientTransaction object represents
the SIP transaction and consists of the SIP request and the SIP response.
After receiving a response, the application gets CSIPResponseElements from
the CSIPClientTransaction object. Note: Some client
transactions can also be cancelled or refreshed.
When a SIP request
is received from the network, it is passed to the application as a CSIPServerTransaction object.
The application gets CSIPRequestElements from the CSIPServerTransaction object.
A CSIPRequestElements object describes the kind of SIP request
received. After the application determines the type of response to send, it
uses the CSIPServerTransaction to send the responses.
CSIPTransactionBase is
the base class for CSIPClientTransaction and CSIPServerTransaction.
It provides the functions to obtain the current state of the transaction and
the transaction type. Some operations are only allowed when the transaction
is in a certain state. Note: The SIP Client API creates instances of CSIPClientTransaction and CSIPServerTransaction and they cannot be created by the application.

When a SIP request is sent to the network, the SIP Client API implementation
creates a CSIPClientTransaction object and returns it to
the application. A CSIPClientTransaction object represents
the SIP transaction and consists of the SIP request and the SIP response.
After receiving a response the application gets CSIPResponseElements from
the CSIPClientTransaction object. Note: Some client
transactions can be cancelled or refreshed.
When a SIP request is
received from the network, it is passed to the application as a CSIPServerTransaction object.
The application gets CSIPRequestElements from the CSIPServerTransaction object.
A CSIPRequestElements object describes the type of SIP request
received. After the application determines the type of response to send, it
uses the CSIPServerTransaction to send the responses.
CSIPTransactionBase is
the base class for CSIPClientTransaction and CSIPServerTransaction.
It provides functions to obtain the current state of the transaction and the
transaction type. Some operations are only allowed when the transaction is
in a certain state. Note: The SIP Client API creates instances of CSIPClientTransaction and CSIPServerTransaction and they cannot be created by the application.
Automatically refreshing a SIP request

The SIP stack automatically refreshes a SIP request using the CSIPRefresh object. REGISTER, SUBSCRIBE and a request outside the dialog are refreshed. After
sending a refresh request, the application queries the state of the refresh
from CSIPRefresh.
CSIPRefresh provides
functions for updating and terminating the refresh, for requests outside the
dialog. The CSIPRegistrationBinding and CSIPSubscribeDialogAssoc classes
are used to update and terminate a refreshed REGISTER or SUBSCRIBE.
Managing HTTP digest security settings

An application must create an instance of the CSIP class
to use CSIPHttpDigest. The CSIPHttpDigest class
manages HTTP digest security settings and contains only static functions.
After
the CSIP and CSIPConnection objects
are created, most of the memory consumed is by CSIPMessageElements, CSIPRequestElements and CSIPResponseElements classes. CSIPTransactionBase holds the most recent SIP
response in a CSIPResponseElements object. When another
response is received, the previous CSIPResponseElements object
is deleted and a new one is created.
CSIPClientTransaction contains
a CSIPRequestElements object until the SIP request is transferred
to the server side of the SIP stack. CSIPServerTransaction contains
the SIP request as CSIPRequestElements. The application
owns the CSIPClientTransaction and CSIPServerTransaction objects.
When the transaction terminates, the application deletes these objects to
conserve memory.
A non-INVITE CSIPClientTransaction is
deleted when it has received a final response or when the ErrorOccured() callback
is called. A non-INVITE CSIPServerTransaction is
deleted after the application sends a final response.
The INVITE related
transactions are deleted if the ErrorOccured() callback function
is called. These transactions behave differently because of the presence of
an ACK.
When the application sends a 2xx response
to an INVITE related CSIPServerTransaction,
it enters the CSIPTransactionBase::ETerminated state and
it is deleted at this point. A new CSIPServerTransaction object
receives the ACK.
When the application sends an INVITE request
and the CSIPClientTransaction receives a 2xx response, the
transaction enters the CSIPTransactionBase::ETerminated state.
The associated CSIPClientTransaction must not be deleted
as it is required to send the ACK and also to receive the MSIPConnectionObserver::InviteCompleted() callback.
An INVITE related CSIPClientTransaction must
be deleted only after a MSIPConnectionObserver::InviteCompleted or MSIPConnectionObserver
::ErrorOccured event is received, or if the state of the associated CSIPConnection goes
to CSIPConnection::EInactive or CSIPConnection::EUnavailable.