A client can use the following operations to process a Mailbox in the authenticated Account,
as well as in other Accounts (by specifying the full Mailbox name as ~accountName@domainName/mailboxName).
- folderOpen
- This operation opens the specified Mailbox as a "Folder".
A Folder represents a Server Mailbox, with all messages being sorted and, optionally, filtered.
Each folder has a name, and one session cannot have two folders with the same name. On the
other hand, the same session can open the same Mailbox as two different folders (with different names).
For example, an application may use one folder to show the Mailbox content sorted by the Date field,
while maintaining a separate window where it shows the same Mailbox, but only the messages containing
the Business tag in the Keywords field, with all these messages sorted by the From field.
When Mailbox messages are added, removed, or updated, the Server reports these updates to
all clients that have opened that Mailbox as a Folder.
Each folder sends its update notifications independently, so the client does not need to know
that two folders are presenting different views on the same Server Mailbox.
- Attributes:
- folder
- the name for the new Folder to be opened. A client can use an arbitrary string as a Folder name.
- mailbox
- the Mailbox name. If this attribute is not specified, the folder name is used.
- mailboxClass
- an optional attribute. If the specified Mailbox does not exist and this optional attribute is specified, the specified Mailbox is created.
If this attribute value is a non-empty string, that value is assigned as the Mailbox Class to the newly created Mailbox.
- sortField
- the name of a message header field to use for Mailbox sorting.
- sortOrder
- if this optional attribute is specified and it has the desc value, the sorting order is reversed.
- filter
- if this optional attribute is specified, only the Mailbox messages matching this attribute value
are included into the Folder.
- filterField
- if this optional attribute is specified, its value specifies the message header field to compare
with the filter attribute. Only the messages containing the specified field and with the field
value matching the filter attribute value are included into the folder.
If this attribute value is FLAGS, the filter attribute value should contain a
comma-separated list of message flags names and/or negative names.
Only the messages with the specified flags set and the specified negative flags not set are included into the Server view.
For example, the filter="Media,Unseen" attribute will tell the Server to build a view
using only the messages with the Media flags set and the Seen flag not set.
If this attribute value is body, messages containing the filter attribute value
in any message body part are included into the server view.
If this attribute is missing, messages containing the filter attribute value
in message body part, or in any message header field are included into the server view.
- hideDeleted
- If this optional attribute is present, the "hide deleted" folder mode is switched on if the attribute value is yes.
If this optional attribute is absent, the "hide deleted" folder mode is switched on if the current effective value of the DeleteMode Account Preference is not Mark.
When the "hide deleted" mode is on, a mailbox message is removed from the folder list as soon as the "Deleted" flag is assigned to it. If the "Deleted" flag is removed later, the message does not re-appear in the folder, but it will become visible again after the folder is re-opened.
- UIDValidity, UIDMin
- If these optional numeric attributes are present, and the Folder Mailbox UIDValidity value is equal to the UIDValidity request attribute value,
then only the messages with UID not smaller than the UIDMin value are included into the Folder.
Body:
- the request body should contain one or more <field> elements.
Each element body should contain a name of a header field to be retrieved for each message.
These fields are called viewer fields.
The following sortField and viewer fields can be specified:
- From, To, Cc, Bcc, Reply-To, Sender, Return-Path, or
other Email-field name. If a message header contains the specified Email-field, it is parsed.
If the field contains a "comment" (i.e. a "real name"), it is used. Otherwise, the parsed E-mail address is used.
- Date, Resent-Date. The field date value is converted to GMT.
When elements with these field values are sent within a folderReport message, they contain
the localTime attribute specifying the field value in the Time Zone selected for the current user.
- any other E-mail header field name (Subject, X-Mailer, etc). The field MIME-decoded value is used.
- E-From, E-To, or other E-Email-field name.
If a message header contains the specified Email-field, it is parsed, and the parsed E-mail address is used.
- Pty. The X-Priority field value is converted to the strings High, Low, or to an empty string.
- UID. The message metadata - its UID (unique ID) in the Mailbox.
- ORIGUID. The message metadata - its original UID in the Mailbox. Unless the message is an updated version of some older (and now deleted) message, the ORIGUID value is the same as the UID value.
- SIZE. The message metadata - its "raw" size in the Mailbox.
- INTERNALDATE. The message metadata - its "timestamp". It is formatted in the same way as the Date element.
- FLAGS the message metadata attribute values are used.
See the Mailboxes section for more information on the Mailbox message flags.
A session can use several open Folders at the same time.
A client should maintain an internal view of the Folder - an array or a table with one element for
each Folder message. A client should keep that view synchronized with the Server view (implemented with that Folder).
When a Folder is opened, the Server sends a folderReport
data message containing the total number of messages in the Folder.
The client uses this number to create the initial internal view table, filling it with empty elements.
To display the Mailbox content on the screen, the client checks which
elements of its internal view table it should use. If some of those elements are empty,
the client should ask the Server to send it the information about the Folder messages
specified by their index values (positions) in the sorted view (in the Folder).
Some Mailbox operations use a message set to specify the Mailbox messages to apply the operation to.
Messages can be specified either by their UIDs, or by their index numbers (their positions in the folder view).
To specify messages by their UIDs, use one or more UID elements.
Each UID element can include one message, in this case the message UID is specified as the element body:
<UID>12377</UID>.
An UID element can include a range of message UIDs specified as the from and till attributes:
<UID from="12377" till="12455" />.
The operation is applied to all Mailbox messages with UIDs not smaller than the from attribute value and not larger than the till attribute value.
Please remember that Folder messages are not sorted by their UIDs, unless the sortField="UID" attribute was used in the folderOpen operation.
To specify messages by index, use one or more index elements.
Each index element can include one message, in this case the message index is specified as the element body:
<index>14</index>.
An index element can include an index range specified as the from and till attributes:
<index from="12" till="10000" />.
The operation is applied to all Folder messages with position (index) not smaller than the from attribute value and not larger than the till attribute value.
A message set can include one or more UID elements, or it can include one or more index elements, but it cannot include both UID and index elements.
- folderBrowse
- This operation makes the Server send data messages for the specified message set in an open Folder.
- Attributes:
- folder
- the Folder name.
Body:
- a message set (see above).
The Server sends a folderReport data message for each message with the index or UID in the specified set.
The data message attributes specify the message index (position) in the Folder and the message UID.
The folderReport data message body contains the viewer fields values.
The "on demand" client-server synchronization model is used. When a Folder message is modified, added, or deleted,
the client gets an asynchronous folderReport data message with the mode attribute value set to notify
(a "notify-mode" message).
The newly added messages do not become visible in the logical Folder and the deleted messages are not
removed from the logical Folder. Requests to retrieve deleted message data return no data items or empty data items.
When the client application is ready to update its "internal view", it should use the
folderSync operation:
- folderSync
- This operation tells the Server to send all pending Folder modifications to the client.
- Attributes:
- folder
- the Folder name.
- limit
- optional; the maximum number of data messages to return.
The Server sends folderReport data messages with the mode attribute
set to the removed, added, updated, or attrsUpdated value.
After the Server sends a "notify-mode" message to the Client,
the Server may choose not to send further "notify-mode" messages for this Folder until the client
performs the folderSync operation on this Folder.
If the limit attribute is specified and the specified number of data message has been sent,
the Server finishes the the folderSync operation, but expects the client to perform an additional
folderSync operation on this Folder before it sends further "notify-mode" messages for this Folder.
The client can send requests to the Server asking for
certain update operations (such as message deletion), but it should update its internal view
only when the Server sends it a folderReport data message informing the client about actual changes in the Folder.
Note: unlike UIDs, Folder message index can change any time when the folderSync operation is performed.
Before you start any operation using an index-based message set, make sure that you have correctly updated the internal view with all folderReport data messages generated
with the previously sent folderSync operation.
Note: when a message has been removed from or added to a Mailbox, the Server only sends folderReport data messages with the mode="notify" attribute.
The Server-side "view" of the modified Folder (the logical Folder) is not updated, and it is safe to use an index-based message set to start a Folder operation.
- messageCopy
- This operation copies messages from an open Folder to a target Mailbox.
Note: the target is specified as a Mailbox, not as a Folder.
- Attributes:
- folder
- the source Folder name.
- targetMailbox
- the target Mailbox name.
- mailboxClass
- If the target Mailbox does not exist and this optional attribute is specified, the target Mailbox is created.
If this attribute value is a non-empty string, the value is assigned as the Mailbox Class to the newly created Mailbox.
- encrypt
- if this optional attribute exists, and its value is yes, the messages are copied encrypted, using the current user S/MIME certificate.
- decrypt
- if this optional attribute exists, and its value is yes, and the encrypt attribute is not specified, the messages are copied decrypted. The Account Private Key should be unlocked, otherwise an error is returned.
- report
- If this optional attribute is specified, it should have the uid value.
For each message copied to the target mailbox, the Server sends the synchronous messageAdded message containing the UID of the copied message.
Body:
- a message set (see above).
- messageMove
- This operation is the same as the messageCopy operation, but if the messages have been copied successfully,
the operation deletes the original messages.
This operation can also be used to implement the "encrypt/decrypt message" functionality:
the selected messages should be moved to the same Mailbox using the encrypt or decrypt operation attribute.
- messageMark
- This operation modifies Mailbox message flags in an open Folder.
- Attributes:
- folder
- the Folder name.
- flags
- this attribute specifies the Mailbox message flags to add or delete. Several operations
can be specified, separated with the comma symbol. See the Mailbox section for more details.
Body:
- a message set (see above).
- messageRemove
- This operation removes messages from an open Folder.
- Attributes:
- folder
- the Folder name.
- mode
- an optional attribute, specifying the delete operation method.
If specified, it should have one of the following values:
- Immediately - the messages are physically removed from the Folder Mailbox.
- Move To Trash - the messages are moved to the Trash Mailbox (its name is specified with the TrashBox Account preference).
If the specified Folder is the Trash Mailbox itself, the messages are physically removed.
- Mark - the messages are marked with the Deleted flag.
If this attribute is not specified, the method specified with the DeleteMode Account Preference is used.
Body:
- a message set (see above).
- folderExpunge
- This operation removes all messages marked with the Deleted flag from the Folder Mailbox.
Note: it removes ALL marked Mailbox messages, not only the messages visible in this Folder.
- Attributes:
- folder
- the Folder name.
- folderClose
- This operation closes an open Folder.
- Attributes:
- folder
- the Folder name.
- folderReopen
- This operation re-builds an open Folder by re-scanning its Mailbox using different sorting and filtering parameters.
- Attributes:
- folder
- the Folder name.
- sortField, sortOrder, filter, filterField, hideDeleted, UIDValidity, UIDMin
- these attributes have the same meaning as the same folderOpen operation attributes.
Body:
- if the request body contains at least one <field> element, these elements specify
the new viewer fields set. If no <field> element is specified, the viewer fields set is not modified.
When a client uses this command, the Server sends the folderReport message with the mode attribute set to init,
notifying the client about the new Folder size.
The client should clear its internal Folder view, and re-populate it again.
Note:if a Client receives a folderReport message with the mode attribute set to notify
when the Client has already sent the folderReopen command,
the Client should use the folderSync command after it receives response for the folderReopen command.
- emptyTrash
- This operation physically removes all messages from the Trash Mailbox (if it has been specified).
- emptyMailbox
- This operation physically removes all messages from the specified mailbox.
- Attributes:
- mailbox
- the mailbox name.
- duration
- time limit (in "time delta" format) between the current time and the internal date of the newest message to keep in the mailbox.
Specify 0 to delete all messages.
The Server sends the following data messages:
- folderReport
- These messages are sent synchronously when a Folder is being opened or re-opened, and when the client sends a folderBrowse or a folderSync request.
These messages are sent asynchronously when a Folder status changes (messages are added, removed, or updated), in this case its mode attribute is set to notify.
- Attributes:
- folder
- the Folder name.
- mode
- this optional attribute specifies the type of notification.
- If the attribute value is init then the messages attribute specifies the total number of messages in the Folder,
and the unseen attribute specifies the total number of unseen messages (messages without the Seen flag) in the Folder.
This is a synchronous data message sent when a Folder is being opened or re-opened.
- If the attribute value is notify some Mailbox messages have been added, modified, or deleted.
This message is sent as an asynchronous data message.
The client is expected to send the folderSync request for this Folder.
- If the attribute value is removed
then the index and UID attributes specify the message removed from the Folder.
This data message is sent only in response to the folderSync request.
The client should immediately update its internal view: for all messages with the index
value larger than the specified index attribute value, the index value is decreased by 1.
- If the attribute value is added
then the index and UID attributes specify the message added to the Folder.
This data message is sent only in response to the folderSync request.
The client should immediately update its internal view: for all messages with the index
value equal or larger than the specified index attribute value, the index value is increased by 1.
- If the attribute value is updated, or attrsUpdated, or the attribute is missing,
then the index and UID attributes specify a Mailbox message and the body
contains the message viewer field values.
This attribute is present and it is set to error when the folderBrowse request
fails to retrieve the message data (for example, when a message has been already deleted, but it has not been removed from the view, because the folderSync request has not been issued yet.
- index
- the message index in this Folder.
This attribute is not present when the mode attribute value is init.
- UID
- the message UID (unique ID).
This attribute is not present when the mode attribute value is removed, updated, attrsUpdated, or added.
- messages
- the total number of messages in the Folder.
This attribute is present when the mode attribute value is init, removed, or added.
- unseen
- the total number of unseen messages in the Folder.
This attribute is present when the mode attribute value is init, removed, updated, attrsUpdated, or added.
- rights
- the effective access rights for the Folder.
This attribute is present when the mode attribute value is init. If this attribute is absent, access to the Folder is not restricted.
- UIDValidity, UIDNext
- the Folder Mailbox UIDValidity and UIDNext values.
These attributes are present when the mode attribute value is init.
Body:
- The body is present when the mode attribute value is absent (folderBrowse response message),
or when the mode attribute value is updated, attrsUpdated, or added (folderSync response message).
The body contains a set of XML elements with viewer field values.
Example 1:
- A001: the Client asks the Server to open the INBOX Mailbox as Folder "INBOX" and to sort it by the
INTERNALDATE 'field' (this is not an actual message field, but a message metadata element - it specifies the time
when the message was added into the Mailbox). The Client informs the Server that it needs to retrieve the
FLAGS, From, and Subject fields of Mailbox messages.
- the Server opens the INBOX Mailbox and sorts it; the Server informs the Client that the Folder has 234 messages.
- A002: the Client asks the Server to send it data from the first 4 Folder messages,
and the Server sends that information to the Client.
- while the Server was processing this request, one message was added to the Mailbox.
- after the Server has sent the response message, the Folder messages number 2 and 35 were deleted.
- A003: the Client asks the Server to send it data from the first 4 messages in the sorted view (again).
- A004: the Client asks the Server to send it all Folder modifications.
- The Server informs the Client about the message number 35 being removed. The Client should remove the element number
35 from its internal view table and update the information on its screen if necessary.
The total number of Folder messages has changed to 233.
- The Server informs the Client about the message number 2 being removed. The Client should remove the element number
2 from its internal view table. The message number 3 becomes the message number 2, the message
number 4 becomes the message number 3, etc.
- The Server adds a newly added message to the Folder and informs the Client that it has inserted
the message as the message number 1. The Client should update its internal view table by inserting a new element
as the element number 1. The element number 1 becomes the element number 2, the element number 2 becomes the element number 3, etc.
- A005: the Client asks the Server to send it data from the first 4 messages in the Folder (again).
C:
<folderOpen id="A001" folder="INBOX" mailbox="INBOX" sortField="INTERNALDATE" sortOrder="asc">
<field>FLAGS</field><field>From</field><field>Subject</field>
</folderOpen>
S:
<folderReport id="A001" folder="INBOX" mode="init" messages="234" unseen="12" />
S:
<response id="A001"/>
C:
<folderBrowse id="A002" folder="INBOX"><index from="0" till="3" /></folderBrowse>
S:
<folderReport id="A002" folder="INBOX" index="0" UID="123">
<FLAGS>Seen,Deleted</FLAGS><From>John H. Smith</From>
<Subject>Hello - just a test</Subject>
</folderReport>
S:
<folderReport id="A002" folder="INBOX" index="1" UID="543">
<FLAGS>Seen,Answered</FLAGS><From>Jim Spammer</From>
<Subject>This is the best offer!</Subject>
</folderReport>
S:
<folderReport id="A002" folder="INBOX" index="2" UID="343">
<FLAGS>Seen,Media</FLAGS><From>[email protected]</From>
<Subject>Meeting reminder</Subject>
</folderReport>
S:
<folderReport folder="INBOX" mode="notify" />
S:
<folderReport id="A002" folder="INBOX" index="3" UID="512">
<FLAGS>Seen,Flagged</FLAGS><From>[email protected]</From>
<Subject>Shutdown @ 4:45AM</Subject>
</folderReport>
S:
<response id="A002" />
S:
<folderReport folder="INBOX" mode="notify" />
C:
<folderBrowse id="A003" folder="INBOX"><index from="0" till="3" /></folderBrowse>
S:
<folderReport id="A003" folder="INBOX" index="0" UID="123">
<FLAGS>Seen,Deleted</FLAGS><From>John H. Smith</From>
<Subject>Hello - just a test</Subject>
</folderReport>
S:
<folderReport id="A003" folder="INBOX" index="1" UID="543">
<FLAGS>Seen,Answered</FLAGS><From>Jim Spammer</From>
<Subject>This is the best offer!</Subject>
</folderReport>
S:
<folderReport id="A003" folder="INBOX" index="2" UID="343">
<FLAGS>Seen,Media</FLAGS><From></From>
<Subject></Subject>
</folderReport>
S:
<folderReport id="A003" folder="INBOX" index="3" UID="512">
<FLAGS>Seen,Flagged</FLAGS><From>[email protected]</From>
<Subject>Shutdown @ 4:45AM</Subject>
</folderReport>
S:
<response id="A003" />
C:
<folderSync id="A004" folder="INBOX" />
S:
<folderReport id="A004" folder="INBOX" index="35" UID="117" mode="deleted" messages="233" unseen="11" />
S:
<folderReport id="A004" folder="INBOX" index="2" UID="343" mode="deleted" messages="232" unseen="11" />
S:
<folderReport id="A004" folder="INBOX" index="1" UID="976" mode="added" messages="233" unseen="12" >
<FLAGS>Recent</FLAGS><From>CGatePro Discussions</From>
<Subject>[CGP] Re: Session Timer?</Subject>
</folderReport>
S:
<response id="A004" />
C:
<folderBrowse id="A005" folder="INBOX"><index from="0" till="3" /></folderBrowse>
S:
<folderReport id="A005" folder="INBOX" index="0" UID="123">
<FLAGS>Seen,Deleted</FLAGS><From>John H. Smith</From>
<Subject>Hello - just a test</Subject>
</folderReport>
S:
<folderReport id="A005" folder="INBOX" index="1" UID="976">
<FLAGS>Recent</FLAGS><From>CGatePro Discussions</From>
<Subject>[CGP] Re: Session Timer?</Subject>
</folderReport>
S:
<folderReport id="A005" folder="INBOX" index="2" UID="543">
<FLAGS>Seen,Answered</FLAGS><From>Jim Spammer</From>
<Subject>This is the best offer!</Subject>
</folderReport>
S:
<folderReport id="A005" folder="INBOX" index="3" UID="512">
<FLAGS>Seen,Flagged</FLAGS><From>[email protected]</From>
<Subject>Shutdown @ 4:45AM</Subject>
</folderReport>
S:
<response id="A005" />
Example 2:
- A010: the Client asks the Server to copy 3 messages
from the already opened INBOX Mailbox to the Archive Mailbox
- The Archive Mailbox appears to be opened, and the Server sends a Mailbox notification
message to the Client
C:<messageCopy id="A010" folder="INBOX" targetMailbox="Archive">
<UID>512</UID><UID>123</UID><UID>976</UID>
</messageCopy>
S:<folderReport folder="Archive" mode="notify" />
S:<response id="A010"/>
Example 3:
- A020: the Client asks the Server to mark 3 messages (UIDs 512, 123, and 976) with
the Deleted flag.
- The Server sets these flags, and it sends a Mailbox notification message to the Client.
- A021: the Client asks the Server to send it all Mailbox modifications.
- The Server sends the updated information for the messages with UID 512 and 976. The message
with the UID 123 already had the Deleted flag set, so this request has not modified that message
and the Server does not send information for this message.
- A022: the Client asks the Server to expunge the Mailbox.
- The Server deletes the messages with UIDs 512, 123, and 976, as well as message with UIDs 446 and 756 which also happened to have
the Deleted flag set. The Server sends a Mailbox notification message to the Client.
- A023: the Client asks the Server to send it all Mailbox modifications.
- The Server sends data messages informing the client that it has removed the messages with UIDs 512, 123, 976, 446, and 756 from
its sorted Mailbox view.
- A024: the Client closes the INBOX Mailbox.
C:
<messageMark id="A020" folder="INBOX" flags="Deleted">
<UID>512</UID><UID>123</UID><UID>976</UID>
</messageMark>
S:
<folderReport folder="INBOX" mode="notify" />
S:
<response id="A020"/>
C:
<folderSync id="A021" folder="INBOX" />
S:
<folderReport id="A021" folder="INBOX" index="1" UID="976" mode="updated" unseen="12" >
<FLAGS>Recent,Deleted</FLAGS><From>CGatePro Discussions</From>
<Subject>[CGP] Re: Session Timer?</Subject>
</folderReport>
S:
<folderReport id="A021" folder="INBOX" index="3" UID="512" mode="updated" unseen="12" >
<FLAGS>Seen,Deleted,Flagged</FLAGS><From>[email protected]</From>
<Subject>Shutdown @ 4:45AM</Subject>
</folderReport>
S:
<response id="A021"/>
C:
<folderExpunge id="A022" folder="INBOX" />
S:
<folderReport folder="INBOX" mode="notify" />
S:
<response id="A022"/>
C:
<folderSync id="A023" folder="INBOX" />
S:
<folderReport id="A023" folder="INBOX" index="0" UID="123" mode="deleted" messages="232" unseen="12" />
S:
<folderReport id="A023" folder="INBOX" index="0" UID="976" mode="deleted" messages="231" unseen="11" />
S:
<folderReport id="A023" folder="INBOX" index="29" UID="446" mode="deleted" messages="230" unseen="11" />
S:
<folderReport id="A023" folder="INBOX" index="123" UID="756" mode="deleted" messages="229" unseen="11" />
S:
<folderReport id="A023" folder="INBOX" index="1" UID="512" mode="deleted" messages="228" unseen="11" />
S:
<response id="A023"/>
C:
<closeMailbox id="A024" folder="INBOX" />
S:
<response id="A024"/>
A Client should use the "bind" operation to start receiving signals directed to the authenticated user.
A Client can maintain one or several concurrent communication sessions ("calls").
Each call is identified with its callLeg identifier. The callLeg attribute is present in all call-related operation requests
and in all Server data messages related to that call. Each call is independent.
For each call, a Client should be able to create one or several "media objects", which implement actual media (audio, video, etc.) communications.
The media descrptor element ("SDP elements") are data elements (text or XML) that a Client retrieves from and sends to "media objects".
As a minimum, it should be possible to perform the following operations on each media object:
- retrieve an "offer" SDP from the media object, and then send it an "answer" SDP that describes the media object of the communication peer; or
- send an "offer" SDP describing a communication peer to the media object, and then retrieve an "answer" SDP from that media object.
If it is not possible to re-send an "offer" SDP to an already active media object, a new media object should be created, and the new "offer" SDP is sent to.
If the "answer" SDP is successfully retrieved from the new media object, the old media object should be disposed of.
If it is not possible to re-retreive an "offer" SDP from an already active media object, a new media object should be created, and an "offer" SDP is retreieved from it.
When the "answer" SDP received and sent to the new media object, the old media object should be disposed of.
A media object supports "forking" if it is possible to retrieve a single "offer" SDP from that media object, and then send several "answer" SDP elements to that media object, establishing several concurrent media communication channels.
Many messages and operation requests described in this section may contain an "SDP descriptor" as the XML body.
The SDP descriptor may be specified using the XML presentation, or as
an sdpText XML element with the SDP descriptor in the native SDP text format.
The signalBind operation request specifies the format that the Server will be using in its messages (see below).
- signalBind
- This operation allows the current XIMSS session to receive signals directed to the authenticated user.
- Attributes:
- clientID
- an optional parameter specifying a name for this session. If not specified, the Server generates a unique one.
- mode
- if this attribute exists, and its value is fixed, the Server rejects the operation
if the Account already has an open session using the same name;
if this attribute exists, and its value is kill, the Server closes the currently
opened Account session with the same name (if any).
if this attribute does not exist or it has some other value, the Server generates a unique name for this session
if the Account already has an open session that uses the specified name;
- presence
- if this optional attribute exists, and its value is yes, the client starts to receive Roster and Presence notifications.
- readIM
- if this optional attribute exists, and its value is 1, the readIM messages use the "extended" format.
Body (optional):
- the XML presentation of the client SDP descriptor.
The descriptor is used to specify the client capabilities (ability to accept audio/video calls) and to detect "far-end NAT" configurations.
Note: to detect "far-end NAT" configurations, the SDP descriptor
must contain the ip attribute with the default media IP address used by the client (see below).
An sdpText XML element can be used instead of the SDP element.
The sdpText XML element body should be text containing SDP data in the SDP native format.
If the sdpText is used, then SDP information in callIncoming, callProvisioned, callConnected, and callUpdated Server messages
is also presented using the sdpText XML element.
- signalUnbind
- After this operation is complete, the current XIMSS session does not receive signals directed to the authenticated user.
- callKill
- Use this operation to end the call and release all associated resources.
If the call was in the 'calling' state, the outgoing call is canceled.
If the call was in the 'alerting' state, the incoming call is rejected.
If the call was in the 'connected' state, the disconnect signal is sent to the peer.
- Attributes:
- callLeg
- the call identifier.
After this operation succeeds, it is possible to create a new call with the same identifier.
Outgoing calls are initiated by the Client using the
callStart operation request.
The Client should generate a unique
callLeg attribute value for the
callStart request. All other requests and messages related to this call will have the same
callLeg attribute value.
When an outgoing call is started, the Server may send:
Each of these messages contains a
tag attribute, identifying an "early dialog" (a "ringing" device) .
When an outgoing call is started, the Client may send:
An outgoing call becomes an "established" call when the Server sends a
callConnected message.
An outgoing call fails if the Server sends a
callDisconnected message.
The Client can cancel a pending outgoing call using the
callKill operation.
Incoming calls are initiated by the Server sending to the Client a
callIncoming message.
The Server generates a unique
callLeg value for the
callIncoming message. All other requests and messages related to this call will have the same
callLeg attribute value.
The Server-generated
callLeg value for incoming calls use the
inp prefix, so the Client should not use this prefix for the
callLeg values it generates for outgoing calls.
When an incoming call is received, the Server may send:
When an incoming call is received, the Client may send:
An incoming call fails (it is cancelled) if the Server sends a
callDisconnected message.
The Client can end processing an incoming call by rejecting the call with the
callReject operation,
or by redirecting the call with the
callRedirect operation.
The Client can accept an incoming call with the
callAccept operation, making it an "established" call.
When an outgoing call connects or when an incoming call is accepted, the call becomes an "established" one.
Media in an established call flows in both directions (unless one party decides to put the call "on hold").
When a call is established, the Server may send:
When a call is established, the Client may send:
An established call ends if the Server sends a
callDisconnected message.
The Client can end an established call using the
callKill operation.
- callStart
- Use this operation to start an outgoing call.
- Attributes:
- callLeg
- the new call identifier. The current XIMSS session should have no other call with this identifier.
- peer
- an E-mail address or a SIP URI to call.
- peerName
- an optional string - the real name of the callee.
Body (optional):
- An SDP descriptor.
If the callStart request succeeds, the new call object is created and an outgoing call is initiated.
Note: the client should be ready to process call-related Server messages even before the client receives the positive response for this callStart request.
Note: if the call fails (the callDisconnected message is received),
the client still needs to use the callKill operation to release the resources associated with the call, and to allow itself to reuse the call identifier.
Media Handling
Call with SDP: the Client creates a media object (called "untagged" object).
The Client should configure the created media object to operate in the "receiving-only" mode.
The Client retrieves an "offer SDP" from that untagged media object, and sends that SDP with the callStart request.
Note: to process "behind-the-NAT" calls correctly, the SDP descriptor must contain the ip attribute with the default media IP address used with the client.
Call without SDP: the Client does not create any media object. The Cleint sends the callStart request without an SDP body element.
Optionally, the Client should be prepared to create additional media objects and to build an "association mapping", where each created media object is accociated with a string - a value of
the tag attribute of the receieved callProvisioned and/or callUpdateRequest messages.
- callProvision
- Use this operation to provision an incoming call (the call object is created when the callIncoming message is received from the Server).
Call provisioning informes the caller that the callee is being alerted (the callee's "phone rings").
- Attributes:
- callLeg
- the incoming call identifier.
Body (optional):
- An SDP descriptor.
When the operation completes, the Client will receive the callUpdated message from the Server.
Media Handling
If the Client wishes to send "early media" to the caller, the Client sends a callProvision request with SDP. "Early media" may be played by the caller's device instead of its default "ringback" tones.
To send early media, the Client should create an untagged media object.
The Client should configure the created media object to operate in the "sending-only" mode.
- If the callIncoming message contained an SDP:
- That SDP element is an "offer".
The Client should send this "offer" SDP to the untagged media object.
Then the Client should retrieve the "answer" SDP from that media object and send it to the Server using the callProvision request.
Then the Client can instruct the media object to play the desired "early media".
- If the callIncoming message did not contain an SDP:
- The Client should retrieve an "offer" SDP from the untagged media object and send it to the Server using the callProvision request.
When the Client receives the callUpdated message from the Server, it will contain an error code or an "answer" SDP.
If the "answer" SDP is received, the Client should send it to the untagged media object, and then the Client can instruct the media object to play the desired "early media".
- callRedirect
- Use this operation to redirect an incoming call.
- Attributes:
- callLeg
- the incoming call identifier.
- fork
- if this optional attribute exists, and its value is yes, the call is directed to the specified destinations, but it is still pending
for this session, and it can be accepted or rejected.
Body:
- one or more XML To elements. Each element should have a text body specifying a URI to redirect the call to.
Note: the client still needs to use the callKill operation to release the resources associated with the call
and to allow itself to reuse the call identifier.
Example:
Redirecting an incoming call inp003 to the [email protected] and [email protected].
Media Handling
The Client should dispose of all media objects associated with this call.
- callReject
- Use this operation to reject an incoming call. You can also use the callKill operation, but this operation
allows you to specify an error code.
- Attributes:
- callLeg
- the incoming call identifier.
- signalCode
- a numeric code (defined with the SIP standards) to pass to the Signal component as an error code.
Use the 486 code ("Busy here") to signal that this device is "busy" (but other devices registered for this user will continue to ring).
Use a 6xx code (600 - "Busy Everywhere" or 603 - "Declined") to signal that the user does not want to accept this call on any device (all other devices will stop ringing, too).
If this parameter is not specified, the 603 code is used.
Note: the client still needs to use the callKill operation to release the resources associated with the call
and to allow itself to reuse the call identifier.
Example:
Rejecting an incoming call inp004 with the 603 "Declined" code:
C:<callReject id="A020" callLeg="inp004" signalCode="603" />
S:<response id="A020"/>
Media Handling
The Client should dispose of all media objects associated with this call.
- callAccept
- Use this operation to accept an incoming call.
- Attributes:
- callLeg
- the incoming call identifier.
Body (optional):
- An SDP descriptor.
When the operation completes, the Client will receive the callUpdated message from the Server.
Media Handling
The Client should create an untagged media object, if it has not been created yet.
- If the Client has already sent a callProvision request with SDP:
- The callAccept request should contain no SDP element, and the callUpdated message will not contain any SDP element.
- If the Client has not sent any callProvision request with SDP, and the callIncoming message contained an SDP:
- That SDP element is an "offer".
The Client should send this "offer" SDP to the untagged media object.
Then the Client should retrieve the "answer" SDP from that media object and send it to the Server using the callAccept request.
When the connection is established, the Client will receive the callUpdated message without an SDP from the Server.
- If the Client has not sent any callProvision request with SDP, and the callIncoming message did not contain an SDP:
- The Client should retrieve an "offer" SDP from the untagged media object and send it to the Server using the callAccept request.
The Client will receive the callUpdated message from the Server, which contains an "answer" SDP.
The Client should send that "answer" SDP to the untagged media object.
The Client should configure the "untagged" media object to stop playing "early media" and to operate in the "sending and receiving" mode.
- callUpdate
- Use this operation to update a call (to modify the call SDP descriptor). The Client may need to use this function if it places a call on hold or resumes it,
when it changes the number and/type of the media streams (for example, adds a vidio stream to an audio call), switches to a different media object, etc.
- Attributes:
- callLeg
- the call identifier.
- tag
- optional: the "to-tag" (dialog/fork ID) of an "early" dialog; should be used when updating an outgoing call.
Body (optional):
- An SDP descriptor.
When the operation completes, the Client will receive a callUpdated message from the Server.
If the operation fails, the callUpdated message contains signalCode and errorText attributes.
If the operation succeeds, the callUpdated message does not contain these attributes.
Media Handling
If the Client does not want to modify the call SDP descriptor, it should send the callUpdate request without an SDP descriptor.
The Server will send back a callUpdatedmessage without an SDP element.
To modify the call SDP descriptor, the Client should retrieve a new "offer" SDP from the untagged media object.
Alternatively, it should create a new media object and retrieve the "offer" SDP from it.
This "offer" SDP should be sent using the callUpdate request.
If the callUpdated message received does not contain an errorText attribute, it contains an "answer" SDP, and the Client should send it to the same media object.
If it is a newly created media object, the old "untagged" media object should be removed, and the new one should become the current "untagged" media object.
If the operation fails, the callUpdated message contains an errorText attribute. In this case, the untagged media object should be reverted to its previous state.
If a new media object has been created to retrieve an "offer" SDP, that new media object should be removed.
- callTransfer
- Use this operation to transfer the connected peer to a different party.
- Attributes:
- callLeg
- the call identifier.
- peer
- an E-mail address or a SIP URI to transfer the call to. Use this attribute to initiate a "blind transfer" operation.
- otherLeg
- the call identifier. It should specify some other "call" in this session. Both calls should be in the 'connected' state.
Use this attribute to complete an "attended transfer" operation. The remote peer of the "callLeg" call is connected to the
remote peer of the "otherLeg" call.
If the otherLeg attribute is specified, the peer attribute is ignored.
If the call transfer operation succeeds, the "callLeg" call is disconnected (the callDisconnected data message is sent to the client).
Additionally, in the case of an "attended transfer", the client receives the callDisconnected message for the "otherLeg" call, too.
If the call transfer operation fails, a callOpFailed data message is sent to the client.
- callUpdateAccept
- Use this operation to accept call SDP modifications.
- Attributes:
- callLeg
- the call identifier.
Body (optional):
- An SDP descriptor.
The Client should send this request in response to callUpdateRequest, callProvisioned, and
callConnected messages. See the description of these messages for the details.
- callUpdateReject
- Use this operation to reject call SDP modifications.
- Attributes:
- callLeg
- the call identifier.
- signalCode
- the numeric code (defined with the SIP standards) to pass to the Signal component as an error code.
If this attribute is absent, the 488 code ("Not Acceptable Here") is used.
Body:
- none.
The Client should send this request instead of the callUpdateAccept request if the Client fails to perform the requested SDP modification.
See callUpdateAccept description for the details.
- callSendDTMF
- Use this operation to send a DTMF signal via the signaling path.
- Attributes:
- callLeg
- the call identifier.
Body:
- a one-symbol string with the DTMF code to send (10 for '*', 11 for '#').
If the operation succeeds, the server sends a callOpCompleted message.
If the operation fails, the server sends a callOpFailed message.
- callSendInfo
- Use this operation to send an INFO signal to the connected peer.
- Attributes:
- callLeg
- the call identifier.
Body:
- a MIME XML element:
- Attributes:
- type
- INFO content Content-Type.
- subtype
- INFO content subtype (optional).
Body:
- a string with INFO content data.
If the operation succeeds, the server sends a callOpCompleted data message.
If the operation fails, the server sends a callOpFailed data message.
- makeCall
- Use this operation to establish a call using any registered device or client. The Server initiates a call
to the authenticated Account ("self-call"), causing all its registered devices and clients to ring.
When any device answers the call, that device is instructed to call the specified address (or telephone number).
- Attributes:
- peer
- an E-mail address or a SIP URI to call.
- callerParams
- an optional attribute containing SIP R-URI (request-URI) parameters for the "self-call".
The operation completes as soon as the CG/PL task implementing this functionality is started.
Asynchronous makeCallReport data messages are sent when the status of this task changes.
When the call attempt completes, an empty makeCallReport data message is sent.
The Server can send the following data messages:
- callDisconnected
- These asynchronous data messages are sent when an outgoing call fails, when an incoming call is canceled,
or when an established call disconnects:
- Attributes:
- callLeg
- the call identifier.
- signalCode
- this optional attribute specifies the numeric signaling error code.
- errorText
- optional: specifies the call disconnect reason.
Note: the client still needs to use the callKill operation to release the resources associated with the call
and to allow itself to reuse the call identifier.
Media Handling
Dispose of all media objects associated with this call.
- callProvisioned
- These asynchronous data messages are sent when there is an outgoing call in progress, after a callStart request was sent to the Server:
- Attributes:
- callLeg
- the call identifier.
- callId
- the call Call-Id string
- tag
- the "to-tag" (dialog/fork ID) of an outgoing "early" dialog.
Body (optional):
- An SDP descriptor.
In response, the Client should send a callUpdateAccept or a callUpdateReject request to the Server.
Media Handling
- If the callProvisioned message does not contain an SDP element:
- if there is a media object or a ringback player associated with the tag attribute value, the Client should ignore this message.
Otherwise, the Client should create a ringback player (which plays a "ringback" sound, informing the user that the callee is being alterted), and associate this player with the tag attribute value.
- If the callProvisioned message contains an SDP element, and there is a media object associated with the tag attribute value:
- The SDP element is an "offer".
The Client should use this "offer" SDP to update the associated media object.
Then the Client should retrieve the "answer" SDP from that media object and send it to the Server using the callUpdateAccept request.
- If the callProvisioned message contains an SDP element, there is no media object associated with the tag attribute value, and the callStart request contained an "offer" SDP:
- The SDP element is an "answer".
The Client should remember this "answer" SDP associated with the tag attribute value, replacing any older SDP associated with this tag attribute value.
If the "untagged" media object supports forking, the Client should send this "answer" SDP to that media object; the Client should also remove any ringback object associated with the tag attribute value.
If the "untagged" media object does not support "forking", the Client should create a ringback player and associate it with the tag attribute value, if a ringback player associate with this value does not already exist.
- If the callProvisioned message contains an SDP element, there is no media object associated with the tag attribute value, and the callStart request did not contain an SDP:
- The SDP element is an "offer".
The Client should create a new media object and associate it with the tag attribute value. If there is a ringback object associated with the tag attribute value, the Client should remove it.
The Client should send this "offer" SDP to the newly created media object, retrieve the "answer" SDP from the media object, and send this "answer" SDP to the Server using the callUpdateAccept request.
If the Client cannot process the callProvisioned message, it should send the callUpdateReject request to the Server.
- callConnected
- These asynchronous data messages are sent when an outgoing call (initiated with a callStart request) succeeds,
and the call is established:
- Attributes:
- callLeg
- the call identifier.
- callId
- the call Call-Id string
- peer
- the address of the peer which has accepted this call.
- tag
- the "to-tag" (dialog/fork ID) of the established dialog.
Body (optional):
- An SDP descriptor.
In response, the Client should send a callUpdateAccept or a callUpdateReject request to the Server.
Media Handling
- If there is a media object associated with the tag attribute value, and the callConnected message does not contain an SDP element:
- The Client should remove all other media objects and all ringback players. The selected media object becomes the "untagged" media object.
- If there is a media object associated with the tag attribute value, and the callConnected message contains an SDP element:
- The SDP element is an "offer".
The Client should send this "offer" SDP to the selected media object. Then the Client should retrieve the "answer" SDP from that media object and send it to the Server using the callUpdateAccept request.
The Client should remove all other media objects and all ringback players. The selected media object becomes the "untagged" media object.
- If there is no a media object associated with the tag attribute value, the callStart request contained an "offer" SDP, and the callConnected message contains an SDP element:
- The SDP element is an "answer".
The Client should send this "answer" SDP to the "untagged" media object. If the media object supports "forking" and some "answer" SDP have been sent to it, the Client should instruct the media object so stop these other media communications.
The Client should remove all tagged media objects and ringback players.
- If there is no a media object associated with the tag attribute value, the callStart request contained an "offer" SDP, and the callConnected message does not contain an SDP element:
- The SDP element is an "answer".
If the media object supports "forking", then some "answer" SDP associated with the tag attribute value has been already sent to it. The Client should instruct the media object to stop all other media communications.
If the media object does not support "forking", then some "answer" SDP received with a callProvisioned message and associated with the tag attribute value should be "remembered".
The Client should send this remembered "answer" SDP to the untagged media object.
The Client should remove all tagged media objects and ringback players.
- If there is no a media object associated with the tag attribute value, the callStart request did not contain an "offer" SDP:
- The callConnected message must contain an SDP element, and that SDP element is an "offer".
The Client should create a new media object, and to send this "offer" SDP to the new media object. Then the Client should retrieve the "answer" SDP from that media object and send it to the Server using the callUpdateAccept request.
The Client should remove all other media objects and all ringback players. The created media object becomes the "untagged" media object.
The "untagged" media object (the only media object left) should be instructed to use the "sending and receiving" mode.
- callIncoming
- These asynchronous data messages are sent when new incoming calls are received (you need to use the signalBind operation to receive incoming calls):
- Attributes:
- callLeg
- the call identifier. The Server generates these identifiers itself.
- peer
- the remote peer E-mail address.
- peerName
- optional; the remote peer real name.
- callId
- the call Call-Id string
- transferredBy
- optional; the E-mail address of the person who has transferred this call.
Body (optional):
- An SDP descriptor.
Media Handling
The Client may create an "untagged" media object immediately, or it may create it when the Client sends callProvision or callAccept requests.
- If the callIncoming message contains an SDP element:
- The SDP element is an "offer".
The Client should pass this SDP to the "untagged" media object when it is created.
- callUpdateRequest
- These asynchronous data messages are sent when the communication peer wants to update the call parameters (such as SDP).
- Attributes:
- callLeg
- the call identifier.
- callId
- the call Call-Id string
- tag
- optional: the "to-tag" (dialog/fork ID) of an "early" dialog.
Body (optional):
- An SDP descriptor.
The client should answer by sending the callUpdateAccept or callUpdateReject request to the Server.
Media Handling
- If the callUpdateRequest message does not contain an SDP element, the Client can ignore it.
- If the callUpdateRequest message contains an SDP element:
- This element is an "offer" SDP.
If the call is still outgoing, the Client should remove any "ringback player" associated with this tag.
The Client should find the media object associated with the tag attribute (or create a new media object if none is found).
If no tag attribute is specified, the "untagged" media object should be used.
The "offer" SDP from the callUpdateRequest message should be used to update the selected media object.
The client should retrieve the "answer" SDP from the selected media object, and send it to the Server using the callUpdateAccept request.
If the client does not want to or cannot accept the new "offer" SDP, it should inform the Server using the callUpdateReject request.
- callUpdated
- These asynchronous data messages are sent when an existing call is updated (placed on hold, switched to a different remote peer, etc.).
- Attributes:
- callLeg
- the call identifier.
- peer
- optional; the remote peer E-mail address. It is sent when a call has been transferred.
- peerName
- optional; the remote peer real name.
- signalCode
- this optional attribute specifies the numeric signaling error code.
- errorText
- optional; the error message.
Body (optional):
- An SDP descriptor.
This message is received in response to the callUpdate,
callProvision, callAccept requests. See the description of those requests for the details.
If the operation fails, the signalCode and errorText attributes are present.
If the operation succeeds, the signalCode and errorText attributes are absent, and an SDP descriptor may be present.
- callUpdateSolicited
- These asynchronous data messages are sent when the communication peer wants to update the call SDP descriptor, but it wants this Client to provide an SDP offer.
- Attributes:
- callLeg
- the call identifier.
- tag
- optional: the "to-tag" (dialog/fork ID) of an "early" dialog.
Body (optional):
- An SDP descriptor.
The Server sends these messages only when a call is established or when an outgoing call is pending.
Media Handling
The Client should execute the callUpdate operation with a new "offer" SDP.
If the Client cannot initiate a callUpdate operation (for example, it cannot create a new media object), it should
send the callUpdateReject request to the Server.
For a pending outgoing call, the Client should create a "tagged" media object, from which it should retrieve the "offer" SDP for the callUpdate request.
- callOpCompleted
- These asynchronous data messages are sent when in-call operations (such as callUpdate, callSendDTMF, callSendInfo) are completed.
- Attributes:
- callLeg
- the call identifier.
- callOpFailed
- These asynchronous data messages are sent when in-call operations (such as callUpdate, callSendDTMF, callSendInfo) fail.
- Attributes:
- callLeg
- the call identifier.
- signalCode
- the numeric signaling error code.
- errorText
- the error message.
- callDTMF
- These asynchronous data messages are sent when a DTMF signal is received via the signaling path.
- Attributes:
- callLeg
- the call identifier.
Body:
- A string with the numeric DTMF code received.
- callTransferred
- These asynchronous data messages are sent when the remote peer has transferred the call to a different peer.
- Attributes:
- callLeg
- the call identifier.
- peer
- the new peer address.
- peerName
- optional; the new peer real name.
- callId
- the call Call-Id string; call transfer usually results in a Call-Id change.
Body:
- Empty.
- callInfo
- These asynchronous data messages are sent when an INFO signal is received:
- Attributes:
- callLeg
- the call identifier.
Body:
- the same as in the callSendInfo request.
- makeCallReport
- These asynchronous data messages are sent after the makeCall operation is initiated.
- Body:
- A string containing the current operation status. A message contains an empty body if the calling process completes.
Example Incoming-01. Incoming call session with an initial SDP. The Client does not send any custom "ringback" media to the caller.
The Client receives a
callIncoming message with a Server-generated
callLeg attribute.
S:
<callIncoming id="A001" callLeg="inp01" peer="[email protected]" >SDP:X(offer)</callIncoming>
The Client starts to alert the user (the Client starts "ringing").
The Client notifiers the caller that the user is being alerted:
C:
<callProvision id="A001" callLeg="inp01"/>
S:
<response id="A001"/>
The user instructs the Client to accept this incoming call.
The Client creates an "untagged" media object A, and sends the received SDP:X(offer) (an "offer" SDP) to that media object A.
The Client retrieves an "answer" SDP from the media object A, and sends it to the Server, accepting the call:
C:
<callAccept id="A002" callLeg="inp01">SDP:A(answer)</callAccept>
S:
<response id="A002"/>
The Server sends back the
callUpdated message:
S:
<callUpdated callLeg="inp01"/>
Note: the
callUpdated may arrive before arrival of the
response message for the
callAccept request.
The Client stops "ringing".
The call has connected, the media object A is instructed to work in the "send and receive" mode, communications started.
S:
<callDisconnected callLeg="inp01" />
The call ends, the Client removes the "untagged" media object A.
The Client releases the Server resources associated with this call:
C:
<callKill id="A003" callLeg="inp01"/>
S:
<response id="A003"/>
Example Incoming-02. Incoming call session without an initial SDP. The Client does not send any custom "ringback" media to the caller.
The Client receives a
callIncoming message with a Server-generated
callLeg attribute.
S:
<callIncoming id="A001" callLeg="inp01" peer="[email protected]" />
The Client starts to alert the user (the Client starts "ringing").
The Client notifiers the caller that the user is being alerted:
C:
<callProvision id="A001" callLeg="inp01"/>
S:
<response id="A001"/>
The user instructs the Client to accept this incoming call.
The Client creates an "untagged" media object A, and retrieves an "offer" SDP from this media object: SDP:A(offer).
The Client sends this SDP to the Server, accepting the call:
C:
<callAccept id="A002" callLeg="inp01">SDP:A(offer)</callAccept>
S:
<response id="A002"/>
The Server sends back the
callUpdated message with an "answer" SDP:
S:
<callUpdated callLeg="inp01">SDP:X(answer)</callUpdated>
Note: the
callUpdated may arrive before arrival of the
response message for the
callAccept request.
The Client stops "ringing".
The Client sends the received "answer" SDP to the media object A.
The call has connected, the media object A is instructed to work in the "send and receive" mode, communications started.
S:
<callDisconnected callLeg="inp01" />
The call ends, the Client removes the "untagged" media object A.
The Client releases the Server resources associated with this call:
C:
<callKill id="A003" callLeg="inp01"/>
S:
<response id="A003"/>
Example Incoming-03. Incoming call session with an initial SDP. The Client does not send any custom "ringback" media to the caller.
The call has been cancelled by the caller (or some other client or device has answered this call).
The Client receives a
callIncoming message with a Server-generated
callLeg attribute.
S:
<callIncoming id="A001" callLeg="inp01" peer="[email protected]" >SDP:X(offer)</callIncoming>
The Client starts to alert the user (the Client starts "ringing").
The Client notifiers the caller that the user is being alerted:
C:
<callProvision id="A001" callLeg="inp01"/>
S:
<response id="A001"/>
The incoming call is cancelled:
S:
<callDisconnected callLeg="inp01" />
The call ends (it is a "missed" call for this Client), the Client stops "ringing".
The Client releases the Server resources associated with this call:
C:
<callKill id="A002" callLeg="inp01"/>
S:
<response id="A002"/>
Example Incoming-04. Incoming call session with an initial SDP. The Client does not send any custom "ringback" media to the caller.
The call has been declined by the user.
The Client receives a
callIncoming message with a Server-generated
callLeg attribute.
S:
<callIncoming id="A001" callLeg="inp01" peer="[email protected]" >SDP:X(offer)</callIncoming>
The Client starts to alert the user (the Client starts "ringing").
The Client notifiers the caller that the user is being alerted:
C:
<callProvision id="A001" callLeg="inp01"/>
S:
<response id="A001"/>
The incoming call is declined:
S:
<callReject id="A002" callLeg="inp01" signalCode="603" />
S:
<response id="A002"/>
The call ends, the Client stops "ringing".
The Client releases the Server resources associated with this call:
C:
<callKill id="A003" callLeg="inp01"/>
S:
<response id="A003"/>
Example Incoming-05. Incoming call session with an initial SDP. The Client does not send any custom "ringback" media to the caller.
The user has redirected the call to the
voicemail application.
The Client receives a
callIncoming message with a Server-generated
callLeg attribute.
S:
<callIncoming id="A001" callLeg="inp01" peer="[email protected]" >SDP:X(offer)</callIncoming>
The Client starts to alert the user (the Client starts "ringing").
The Client notifiers the caller that the user is being alerted:
C:
<callProvision id="A001" callLeg="inp01"/>
S:
<response id="A001"/>
The incoming call is redirected:
S:
<callRedirect id="A002" callLeg="inp01"><To>#voicemail</To></callRedirect>
S:
<response id="A002"/>
The call ends, the Client stops "ringing".
The Client releases the Server resources associated with this call:
C:
<callKill id="A003" callLeg="inp01"/>
S:
<response id="A003"/>
Example Outgoing-01. Outgoing call session with an initial SDP.
The Client creates a media object A and makes it the "untagged" media object for the new call.
The Client retrieves the "offer" SDP from that object: SDP:A(offer)
C:
<callStart id="A001" callLeg="c1" peer="[email protected]">SDP:A(offer)</callStart>
S:
<response id="A001"/>
S:
<callProvisioned callLeg="c1" tag="device1"/>
The Client creates a "ringback player" so the user knows that the communication peer is being alerted.
C:
<callUpdateAccept id="A002" callLeg="c1"/>
S:
<response id="A002"/>
S:
<callProvisioned callLeg="c1" tag="device1"/>
The Client already has a "ringback player" for this device (tag), so it does not do any additional media operation.
C:
<callUpdateAccept id="A003" callLeg="c1"/>
S:
<response id="A003"/>
S:
<callConnected callLeg="c1" tag="device1">SDP:X(answer)</callConnected>
The Client removes the "ringback player", and passes the received SDP:X(answer) media descriptor (it's an "answer" SDP) to its "untagged" media object A.
The call has connected, the media object A is instructed to work in the "send and receive" mode, communications started.
C:
<callUpdateAccept id="A004" callLeg="c1"/>
S:
<response id="A004"/>
S:
<callDisconnected callLeg="c1" />
The call ends, the Client removes the "untagged" media object A.
The Client releases the Server resources associated with this call:
C:
<callKill id="A005" callLeg="c1"/>
S:
<response id="A005"/>
Example Outgoing-02. Outgoing call session with an initial SDP, multiple callee devices. Media objects do not support "forking".
The Client does not support advanced outgoing call messages.
The Client creates a media object A and makes it the "untagged" media object for the new call.
The Client retrieves the "offer" SDP from that object: SDP:A(offer)
C:
<callStart id="A001" callLeg="c1" peer="[email protected]">SDP:A(offer)</callStart>
S:
<response id="A001"/>
S:
<callProvisioned callLeg="c1" tag="device1"/>
The Client creates a "ringback player" so the user knows that the communication peer is being alerted.
C:
<callUpdateAccept id="A002" callLeg="c1"/>
S:
<response id="A002"/>
S:
<callProvisioned callLeg="c1" tag="device2"/>
The Client creates one more "ringback player", so the user knows that the communication peer is being alerted. Both players are playing.
C:
<callUpdateAccept id="A003" callLeg="c1"/>
S:
<response id="A003"/>
S:
<callProvisioned callLeg="c1" tag="device1">SDP:X(answer1)</callProvisioned>
The Client stores the SDP:X(answer1) received, associated with the tag "device1". No changes to the media, both players are playing.
C:
<callUpdateAccept id="A004" callLeg="c1"/>
S:
<response id="A004"/>
S:
<callProvisioned callLeg="c1" tag="device1">SDP:X(answer2)</callProvisioned>
The Client stores the SDP:X(answer2) received, associated with the tag "device1". It replaces the SDP:X(answer1) received for this tag earlier. No changes to the media, both players are playing.
C:
<callUpdateAccept id="A005" callLeg="c1"/>
S:
<response id="A005"/>
S:
<callUpdateRequest callLeg="c1" tag="device3">SDP:Y(offer)</callUpdateRequest>
C:
<callUpdateReject id="A006" callLeg="c1" errorText="not implemented" />
S:
<response id="A006"/>
S:
<callUpdateSolicited callLeg="c1" tag="device4" />
C:
<callUpdateReject id="A006" callLeg="c1" errorText="not implemented" />
S:
<response id="A006"/>
S:
<callConnected callLeg="c1" tag="device1">SDP:X(answer3)</callConnected>
The Client removes all "ringback players", and passes the received SDP:X(answer3) media descriptor (it's an "answer" SDP) to its "untagged" media object A.
Alternatively, the <callConnected/> message could come without any SDP in it:
S:
<callConnected callLeg="c1" tag="device1"/>
The Client removes all "ringback players", and retrieves the SDP:X(answer2) media descriptor, as it was the last one it stored for the "device1" tag.
The Client passes the received SDP:X(answer2) media descriptor (it's an "answer" SDP) to its "untagged" media object A.
The call has connected, the media object A is instructed to work in the "send and receive" mode, communications started.
C:
<callUpdateAccept id="A006" callLeg="c1"/>
S:
<response id="A006"/>
The user instructs the Client to end this call, the Client ends this call and releases the Server resources associated with this call:
S:
<callKill id="A007" callLeg="c1" />
S:
<response id="A007"/>
The call ends, the Client removes the "untagged" media object A.
Example Outgoing-03. Outgoing call session with an initial SDP, multiple callee devices. Media objects do not support "forking", additional messages from the called devices.
The Client creates a media object A and makes it the "untagged" media object for the new call.
The Client retrieves the "offer" SDP from that object: SDP:A(offer)
C:
<callStart id="A001" callLeg="c1" peer="[email protected]">SDP:A(offer)</callStart>
S:
<response id="A001"/>
S:
<callProvisioned callLeg="c1" tag="device1"/>
The Client creates a "ringback player" so the user knows that the communication peer is being alerted.
C:
<callUpdateAccept id="A002" callLeg="c1"/>
S:
<response id="A002"/>
S:
<callProvisioned callLeg="c1" tag="device2"/>
The Client creates one more "ringback player", so the user knows that the communication peer is being alerted. Both players are playing.
C:
<callUpdateAccept id="A003" callLeg="c1"/>
S:
<response id="A003"/>
S:
<callProvisioned callLeg="c1" tag="device1">SDP:X(answer1)</callProvisioned>
The Client stores the SDP:X(answer1) received, associated with the tag "device1". No changes to the media, both players are playing.
C:
<callUpdateAccept id="A004" callLeg="c1"/>
S:
<response id="A004"/>
S:
<callProvisioned callLeg="c1" tag="device1">SDP:X(answer2)</callProvisioned>
The Client stores the SDP:X(answer2) received, associated with the tag "device1". It replaces the SDP:X(answer1) received for this tag earlier. No changes to the media, both players are playing.
C:
<callUpdateAccept id="A005" callLeg="c1"/>
S:
<response id="A005"/>
S:
<callUpdateRequest callLeg="c1" tag="device2">SDP:Y(offer)</callUpdateRequest>
The Client removes the "ringback player" associated with the "device2" tag.
The Client creates a new "tagged" media object B, and associates it with the "device2" tag. The media object B is configured to work in the "receiving only" mode.
The Client passes the received SDP:Y(offer) as an "offer" SDP to this media object B.
The Client retrieves the "answer" SDP from that media object: SDP:B(answer), and passes it to the Server:
C:
<callUpdateAccept id="A006" callLeg="c1">SDP:B(answer)</callUpdateAccept>
S:
<response id="A006"/>
S:
<callConnected callLeg="c1" tag="device1">SDP:X(answer3)</callConnected>
The Client removes all "ringback players", removes the "tagged" media object B, and passes the received SDP:X(answer3) media descriptor (it's an "answer" SDP) to its "untagged" media object A.
Alternatively, the <callConnected/> message could come without any SDP in it:
S:
<callConnected callLeg="c1" tag="device1"/>
The Client removes all "ringback players", removes the "tagged" media object B, and retrieves the SDP:X(answer2) media descriptor, as it was the last one it stored for the "device1" tag.
The Client passes the received SDP:X(answer2) media descriptor (it's an "answer" SDP) to its "untagged" media object A.
Alternatively, the <callConnected/> message could come without any SDP in it, and with a different tag:
S:
<callConnected callLeg="c1" tag="device2"/>
The Client removes all "ringback players", removes the "untagged" media object A, and makes the "tagged" media object B (associated with the "device2" tag) the new "untagged" media object.
The call has connected, the "untagged" media object (be it A or B) is instructed to work in the "send and receive" mode, communications started.
C:
<callUpdateAccept id="A007" callLeg="c1"/>
S:
<response id="A007"/>
The user instructs the Client to end this call, the Client ends this call and releases the Server resources associated with this call:
S:
<callKill id="A008" callLeg="c1" />
S:
<response id="A008"/>
The call ends, the Client removes the "untagged" media object A.
Example Outgoing-04. Outgoing call session with an initial SDP, multiple callee devices. Media objects do not support "forking", additional messages from the called devices.
The Client creates a media object A and makes it the "untagged" media object for the new call.
The Client retrieves the "offer" SDP from that object: SDP:A(offer)
C:
<callStart id="A001" callLeg="c1" peer="[email protected]">SDP:A(offer)</callStart>
S:
<response id="A001"/>
S:
<callProvisioned callLeg="c1" tag="device1"/>
The Client creates a "ringback player" so the user knows that the communication peer is being alerted.
C:
<callUpdateAccept id="A002" callLeg="c1"/>
S:
<response id="A002"/>
S:
<callProvisioned callLeg="c1" tag="device2"/>
The Client creates one more "ringback player", so the user knows that the communication peer is being alerted. Both players are playing.
C:
<callUpdateAccept id="A003" callLeg="c1"/>
S:
<response id="A003"/>
S:
<callProvisioned callLeg="c1" tag="device1">SDP:X(answer1)</callProvisioned>
The Client stores the SDP:X(answer1) received, associated with the "device1" tag. No changes to the media, both players are playing.
C:
<callUpdateAccept id="A004" callLeg="c1"/>
S:
<response id="A004"/>
S:
<callProvisioned callLeg="c1" tag="device1">SDP:X(answer2)</callProvisioned>
The Client stores the SDP:X(answer2) received, associated with the "device1" tag. It replaces the SDP:X(answer1) received for this tag earlier. No changes to the media, both players are playing.
C:
<callUpdateAccept id="A005" callLeg="c1"/>
S:
<response id="A005"/>
S:
<callUpdateRequest callLeg="c1" tag="device2">SDP:Y(offer1)</callUpdateRequest>
The Client removes the "ringback player" associated with the "device2" tag.
The Client creates a new media object B, and associates it with the "device2" tag. The media object B is configured to work in the "receiving only" mode.
The Client passes the received SDP:Y(offer1) as an "offer" SDP to this media object B.
The Client retrieves the "answer" SDP from that media object: SDP:B(answer), and passes it to the Server:
C:
<callUpdateAccept id="A006" callLeg="c1">SDP:B(answer)</callUpdateAccept>
S:
<response id="A006"/>
S:
<callUpdateRequest callLeg="c1" tag="device2">SDP:Y(offer2)</callUpdateRequest>
The Client uses the received SDP to update the existing media object B associated with the "device2" tag.
If this is not possible, the Client creates a new media object C, sends it the received SDP:Y(offer2) as an "offer" SDP, and retrieves from that media object
the "answer" SDP:C(answer). If it succeeds, it removes the media object B and makes the newly created media object C a "tagged" media object associated with the "device2" tag.
The new media object C is configured to work in the "receiving only" mode.
The Client and passes the retrieved "answer" SDP to the Server:
C:
<callUpdateAccept id="A007" callLeg="c1">SDP:C(answer)</callUpdateAccept>
S:
<response id="A007"/>
S:
<callUpdateSolicited callLeg="c1" tag="device3"/>
The Client creates a new media object D, and associates it with the "device3" tag.
The new media object D is configured to work in the "receiving only" mode.
The Client retrieves the "offer" SDP - SDP:D(offer) - from this media object, and passes it to the Server, using the
callUpdate operation.
C:
<callUpdate id="A008" callLeg="c1">SDP:D(offer)</callUpdate>
S:
<response id="A008"/>
The Server then sends the
callUpdated message:
S:
<callUpdated callLeg="c1" tag="device3">SDP:Z(answer)</callUpdated>
The Client should pass the received SDP to the media object D as an "answer" SDP.
S:
<callConnected callLeg="c1" tag="device1">SDP:X(answer3)</callConnected>
The Client removes all "ringback players", removes all "tagged" media object (C and D), and passes the received SDP:X-3 media descriptor (it's an "answer" SDP) to its "untagged" media object A.
Alternatively, the <callConnected/> message could come without any SDP in it:
S:
<callConnected callLeg="c1" tag="device1"/>
The Client removes all "ringback players", removes all "tagged" media object (C and D), and retrieves the SDP:X(answer2) media descriptor, as it was the last one it stored for the tag="device1".
The Client passes the received SDP:X(answer2) media descriptor (it's an "answer" SDP) to its "untagged" media object A.
Alternatively, the <callConnected/> message could come without any SDP in it, and with a different tag:
S:
<callConnected callLeg="c1" tag="device2"/>
The Client removes all "ringback players", removes the "untagged" media object A and the tagged media object D, and makes the "tagged" media object C (associated with the "device2" tag) the new "untagged" media object.
Alternatively, the <callConnected/> message could come without any SDP in it, and with a different tag:
S:
<callConnected callLeg="c1" tag="device3"/>
The Client removes all "ringback players", removes the "untagged" media object A and the tagged media object C, and makes the "tagged" media object D (associated with the "device3" tag) the new "untagged" media object.
The call has connected, the "untagged" media object (be it A, C, or D) is instructed to work in the "send and receive" mode, communications started.
C:
<callUpdateAccept id="A007" callLeg="c1"/>
S:
<response id="A007"/>
The user instructs the Client to end this call, the Client ends this call and releases the Server resources associated with this call:
S:
<callKill id="A008" callLeg="c1" />
S:
<response id="A008"/>
The call ends, the Client removes the "untagged" media object A.
Example Outgoing-11. Outgoing call session without an initial SDP.
The Client does not create any media object before a call.
C:
<callStart id="A001" callLeg="c1" peer="[email protected]" />
S:
<response id="A001"/>
S:
<callProvisioned callLeg="c1" tag="device1"/>
The Client creates a "ringback player" so the user knows that the communication peer is being alerted.
C:
<callUpdateAccept id="A002" callLeg="c1"/>
S:
<response id="A002"/>
S:
<callProvisioned callLeg="c1" tag="device1"/>
The Client already has a "ringback player" for this device (tag), so it does not do any additional media operation.
C:
<callUpdateAccept id="A003" callLeg="c1"/>
S:
<response id="A003"/>
S:
<callConnected callLeg="c1" tag="device1">SDP:X-1</callConnected>
The Client removes the "ringback player", creates an "untagged" media object A, and passes the received SDP:X-1 media descriptor (it's an "offer" SDP) to its "untagged" media object A.
The Client retrieves the "answer" SDP (SDP:A-1) from the media object A, and sends it to the Server:
C:
<callUpdateAccept id="A004" callLeg="c1">SDP:A-1</callUpdateAccept>
S:
<response id="A004"/>
The call has connected, the media object A is instructed to work in the "send and receive" mode, communications started.
S:
<callDisconnected callLeg="c1" />
The call ends, the Client removes the "untagged" media object A.
The Client releases the Server resources associated with this call:
C:
<callKill id="A005" callLeg="c1"/>
S:
<response id="A005"/>
Example Outgoing-12. Outgoing call session without an initial SDP, multiple callee devices.
The Client does not create any media object before a call.
C:
<callStart id="A001" callLeg="c1" peer="[email protected]" />
S:
<response id="A001"/>
S:
<callProvisioned callLeg="c1" tag="device1"/>
The Client creates a "ringback player" so the user knows that the communication peer is being alerted.
C:
<callUpdateAccept id="A002" callLeg="c1"/>
S:
<response id="A002"/>
S:
<callProvisioned callLeg="c1" tag="device2"/>
The Client creates one more "ringback player", so the user knows that the communication peer is being alerted. Both players are playing.
C:
<callUpdateAccept id="A003" callLeg="c1"/>
S:
<response id="A003"/>
S:
<callProvisioned callLeg="c1" tag="device2">SDP:X-1</callProvisioned>
The Client removes the "ringback player" associated with the "device2" tag.
The Client creates a media object A, makeing it a "tagged" object associated with the "device2" tag.
The Client sends the received SDP:X-1 as an "offer" SDP to the media object A.
The Client retrieves an "answer" SDP from the media object A (SDP:A-1) and sends it to the Server.
C:
<callUpdateAccept id="A004" callLeg="c1">SDP:A-1</callUpdateAccept>
S:
<response id="A004"/>
S:
<callConnected callLeg="c1" tag="device1">SDP:Y-1</callConnected>
The Client removes the "ringback player", and the media object A (tagged with the "device2" tag).
The Client creates a media object B, making it the "untagged" media object, and sends the received SDP:Y-1 media descriptor (it's an "offer" SDP) to this "untagged" media object B.
The Client retrieves an "answer" SDP from the media object B (SDP:B-1) and sends it to the Server.
The call has connected, the media object B is instructed to work in the "send and receive" mode, communications started.
C:
<callUpdateAccept id="A005" callLeg="c1">SDP:B-1</callUpdateAccept>
S:
<response id="A005"/>
Alternatively, the <callConnected/> message could come without any SDP in it and with a different device tag:
S:
<callConnected callLeg="c1" tag="device2"/>
The Client removes all "ringback players", and makes the media object A (associated with the "device2" tag) the "untagged" media object.
The call has connected, the media object A is instructed to work in the "send and receive" mode, communications started.
C:
<callUpdateAccept id="A005" callLeg="c1"/>
S:
<response id="A005"/>
The user instructs the Client to end this call, the Client ends this call and releases the Server resources associated with this call:
S:
<callKill id="A006" callLeg="c1" />
S:
<response id="A006"/>
The call ends, the Client removes the "untagged" media object A.
Some clients may be unable to implement all operations via the XIMSS protocol.
When a XIMSS session is created, its ID is reported back to the client using the session
data message. The Server provides access to that session via the HTTP protocol.
The following URL can be used to retrieve any part of a message visible in any currently opened Folder:
- /Session/sessionID/MIME/folder/UID-partID-suffix[/filename]
where
- sessionID
- the current XIMSS session ID, sent with the session data message
- folder
- the target Folder name or the target Calendar name
- UID
- the target message UID in the target Folder or Calendar
- partID
- the id of the requested message MIME part. This is the string reported in the MIME
XML element when the message was retrieved using the folderRead operation. If the entire
message is to be retrieved, the partID string and the following - symbol should be
omitted.
- suffix
- the retrieval mode:
- P.txt - the entire undecoded part (including the headers and the body) is retrieved.
- H.txt - the part headers are retrieved.
- B.extension - the decoded part body is retrieved. You can use any appropriate file name extension.
The HTTP response gets the Content-Type of the retrieved MIME part.
- R/cid - the cid string should be URI-encoded. Its decoded value specifies a MIME-part Content-ID.
The Server searches all MIME parts "related" to the current one, and retrieves the body of the part with the matching Content-ID.
This feature is used to convert cid:-type URLs in HTML-formatted messages.
- filename
- an optional file name. It is ignored by the Server, but it can help the user browser to store the file under the proper name.
Examples:
C:GET /Session/1-2xklkdld8-djdkjk/MIME/INBOX/567-01-B.gif HTTP/1.1
C:GET /Session/1-2xklkdld8-djdkjk/MIME/INBOX/567-02-01-B.gif/Logo.gif HTTP/1.1
It is possible to retrieve only a portion of a message part,using the HTTP
Range header field.
Alternatively (when HTTP request fields cannot be specified), the URL parameters can be used:
- OffsetFrom
- part data byte-position to start with (0 means to start from the beginning).
- OffsetTill
- (optional) part data byte-position following the last byte to send.
Example:
C:GET /Session/1-2xklkdld8-djdkjk/MIME/INBOX/567-01-B.gif?OffsetFrom=100&OffsetTill=200 HTTP/1.1
This request retrieves 100 bytes (bytes 100..199 inclusive) from the GIF file encoded in the specified MIME part.
The following URL can be used to retrieve the Profile vCard or any of its properties:
- /Session/sessionID/PROFILE/[propertyname[/index][/filename]]
where
- sessionID
- the current XIMSS session ID, sent with the session data message
- propertyname
- the vCard property name, such as PHOTO. If the property name is not specified, the entire vCard is retrieved.
- index
- if the vCard contains several values for the specified property name, the index of the value to retrieve (zero-based).
If not specified, the index value of 0 is assumed.
- filename
- any properly encoded URL-string.
Example:
C:GET /Session/1-2xklkdld8-djdkjk/PROFILE/PHOTO/0/avatar HTTP/1.1
This request retrieves the first value of the "PHOTO" property of the Profile vCard.
The following URL can be used to upload a file to the session "uploaded file set".
- /Session/sessionID/UPLOAD/uploadID
where
- sessionID
- the current XIMSS session ID, sent with the session data message.
- uploadID
- a string identifying this file in the "uploaded file set".
The HTTP request should be:
- a POST request, with the multipart/form-data content, and the file (raw binary data) should be sent as the fileData form element, or
- a PUT request, and the file (raw binary data) should be sent as the request body.
When the file is uploaded and added to the "uploaded file set", the Server returns the 200 response code. If uploading
failed, the Server returns the 500 response code.
The uploaded file is stored together with its Content-Type value.
If the "uploaded file set" already contains a file with the specified uploadID value, the old file is removed.
The following URL can be used to download a file from the session Account
File Storage.
- /Session/sessionID/DOWNLOAD/fileName
where
- sessionID
- the current XIMSS session ID, sent with the session data message.
- fileName
- the file name in the session Account File Storage.
Note: to download a file from the "uploaded file set", specify the fileName
as $UPLOAD$/uploadId, where uploadId is the "uploaded file set" file identifier.
The following URL can be used to export data from a folder or a calendar:
- /Session/sessionID/Export/folderName/fileName[?oldStyle=1]
If the
folderName is a name of an open
Calendar object, the request retrieves
an iCalendar text that includes all object VEVENT and VTODO items, and all VTIMEZONE objects referenced.
If the
folderName is a name of an open folder object, the request retrieves a vCard text that includes
all VCard items stored in that folder. If the oldStyle parameter is specified, the vCard items are exported using the
vCard 2.1 format and the UTF-8 character set, otherwise the vCard 3.0 format and the Unicode character set is used.
The following URL can be used to export the Account Private Key and Certificate as a PKCS12 ("PFX") file:
- /Session/sessionID/CertAndKey.pfx?PFXPassword=password[&PFXPassword1=password1]
If the
PFXPassword1 is specified, its value must be the same as the
PFXPassword value.
The session must have its S/MIME unlocked.
The Account Private Key and Certificate are placed into PKCS12-formated data encrypted using the
PFXPassword value.
The following URL can be used to close the session without doing any "logout cleanup" procedures:
- /Session/sessionID/KILL
CommuniGate® Pro Guide. Copyright © 1998-2018, Stalker Software, Inc.