’isfocus’.
An example call flow is shown in Figure 2. It is assumed that Alice
is already a participant of the conference. The focus invites Carol
to the conference by sending an INVITE. After the session is
established, Carol subscribes to the conference URI. It is important
to note that there is no dependency on Carol’s SUBSCRIBE (F5) and the
NOTIFY to Alice (F9) -- they occur asynchronously and independently.
Alice Focus Bob Carol
| | | |
|<==================>| | |
| | |
| Focus "dials out" to add Carol to the conference |
| | |
| | INVITE Contact:Conf-ID;isfocus F1 |
| |---------------------------------------->|
| | 180 Ringing F2 |
| |<----------------------------------------|
| | 200 OK F3 |
| |<----------------------------------------|
| | ACK F4 |
| |---------------------------------------->|
| | RTP |
| |<=======================================>|
| | SUBSCRIBE sip:Conf-ID F5 |
| |<----------------------------------------|
| | 200 OK F6 |
| |---------------------------------------->|
| | NOTIFY F7 |
| |---------------------------------------->|
| | 200 OK F8 |
| |<----------------------------------------|
| NOTIFY F9 | |
|<-------------------| |
| 200 OK F10 | |
|------------------->| |
Figure 2. A Focus "Dials Out" to Add a Participant to the Conference.
F7 NOTIFY sip:carol@chicago.example.com SIP/2.0
Via: SIP/2.0/UDP ms5.conf.example.com;branch=z9hG4bK3343d1
Max-Forwards: 70
To: Carol <sip:carol@chicago.example.com>;tag=43524545
From: <sip:3402934234@conf.example.com>;tag=a3343df32
Call-ID: k3l43id034ksereree
CSeq: 34321 NOTIFY
Contact: <sip:3402934234@conf.example.com>;isfocus
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER,
SUBSCRIBE, NOTIFY
Event: conference
Accept: application/sdp, message/sipfrag
Subscription-State: active;expires=3600
Supported: replaces, gruu
Content-Type: application/conference-info+xml
Content-Length: ...
<conference-info version="0" state="full"
entity="sip:3402934234@conf.example.com">
<conference-description>
<conf-uris>
<entry>
<uri>tel:+18882934234</uri>
</entry>
</conf-uris>
</conference-description>
<users>
<user entity="sip:alice@atlanta.example.com" state="full">
<display-text>Alice</display-text>
<endpoint entity="sip:alice@client.atlanta.example.com">
<status>connected</status>
<joining-method>dialed-in</joining-method>
<media id="3">
<display-text>Main Audio</display-text>
<type>audio</type>
<src-id>647231</src-id>
<status>sendrecv</status>
</media>
<media id="4">
<type>video</type>
<src-id>21345</src-id>
<status>sendrecv</status>
</media>
</endpoint>
</user>
<user entity="sip:carol@chicago.example.com" state="full">
<display-text>Carol</display-text>
<endpoint entity="sip:carol@client.chicago.example.com">
<status>connected</status>
<joining-method>dialed-out</joining-method>
<media id="1">
<display-text>Main Audio</display-text>
<type>audio</type>
<src-id>583398</src-id>
<status>sendrecv</status>
</media>
<media id="2">
<type>video</type>
<src-id>345212</src-id>
<status>sendrecv</status>
</media>
</endpoint>
</user>
</users>
</conference-info>
F9 NOTIFY sip:alice@atlanta.example.com SIP/2.0
Via: SIP/2.0/UDP ms5.conf.example.com;branch=z9hG4bK3432
Max-Forwards: 70
To: Alice <sip:alice@atlanta.example.com>;tag=43524545
From: <sip:3402934234@conf.example.com>;tag=a3343df32
Call-ID: 8820450524545
CSeq: 998 NOTIFY
Contact: <sip:3402934234@conf.example.com>;isfocus
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER,
SUBSCRIBE, NOTIFY
Event: conference
Accept: application/sdp, message/sipfrag
Subscription-State: active;expires=2450
Supported: replaces, gruu
Content-Type: application/conference-info+xml
Content-Length: ...
<conference-info version="1" state="partial"
entity="sip:3402934234@conf.example.com">
<users>
<user entity="sip:carol@chicago.example.com" state="full">
<display-text>Carol</display-text>
<endpoint entity="sip:carol@client.chicago.example.com">
<status>connected</status>
<joining-method>dialed-out</joining-method>
<media id="1">
<display-text>Main Audio</display-text>
<type>audio</type>
<src-id>583398</src-id>
<status>sendrecv</status>
</media>
<media id="2">
<type>video</type>
<src-id>345212</src-id>
<status>sendrecv</status>
</media>
</endpoint>
</user>
</users>
</conference-info>
5.3. INVITE: Manually Creating a Conference by Dialing in to a
Conferencing Application
In this section, a user sends an INVITE to a conference server
application. The application (such as an IVR system or a web page)
is implemented because the system requires additional input from the
user before it is able to create a conference. After a normal dialog
is established, additional information is received and the conference
together with its focus are created. Since the UA is now in a dialog
with a focus, the focus will re-INVITE the user with the conference
URI in Contact with the ’isfocus’ feature parameter.
Alternatively, the additional information can be provided by the user
during an early dialog (see RFC 3261 [2] for a discussion of early
dialogs in SIP). This could be accomplished by a 183 Session
Progress response sent by the conferencing application. After the
conference is created, the conference URI would then be returned in a
Contact in the 200 OK.
Note that since this flow is all about human interaction with a
conferencing application, any errors and failures will be returned to
the human (recorded announcements, error tones, etc.).
As discussed in the conferencing framework, the conference URI must
be unique across all distinct conferences within the same domain. In
general, the user part of a conference URI will contain a pseudo
random string.
An example call flow is shown in Figure 3. In this example, Alice
uses a conference application that is triggered when Alice sends an
INVITE to the conference application. In this example, Conf-App is
used to represent the conference application URI. Alice’s
conference-aware UA learns of the existence of the conference from
the ’isfocus’ feature parameter and subscribes to the conference
package to receive notifications of the conference state.
Alice Focus Bob Carol
| | | |
| Alice establishes session with conference application. |
| | | |
| INVITE sip:Conf-App F1 | |
|------------------->| | |
| 180 Ringing F2 | | |
|<-------------------| | |
| 200 OK F3 | | |
|<-------------------| | |
| ACK F4 | | |
|------------------->| | |
| RTP | | |
|<==================>| | |
| | | |
| Alice uses the application to create the conference. |
| | | |
| INVITE Contact:Conf-ID;isfocus F5 | |
|<-------------------| | |
| 200 OK F6 | | |
|------------------->| | |
| ACK F7 | | |
|<-------------------| | |
| RTP | | |
|<==================>| | |
| | | |
| SUBSCRIBE sip:Conf-ID F8 | |
|------------------->| | |
| 200 OK F9 | | |
|<-------------------| | |
| NOTIFY F10 | | |
|<-------------------| | |
| 200 OK F11 | | |
|------------------->| | |
Figure 3. A Participant Creates a Conference Using an Application.
5.4. INVITE: Creating a Conference Using Ad-Hoc SIP Methods
This section addresses creating a conference by using ad-hoc SIP
means. The conference factory URI (as defined in Section 3.2) is
used to automatically create the conference in this example. This is
different from the previous scenario in that no human intervention is
required -- an automaton can create the conference and add
participants. Since the conference does not need to be scheduled or
reserved, but is created "on the fly", it is an "ad-hoc" conference
creation.
The benefit of this approach is that the conference URI need not be
known to the user; instead it is created by a focus and used by the
participants’ UAs. The main difference between this scenario and
Section 5.3 is that no user intervention (IVR, web page form, etc.)
is required to create the conference.
The SIP URI of the conference factory can be provisioned in the UA
(as in a "create new conference" button on a SIP phone) or can be
discovered using other means.
A SIP entity (such as conferencing server) can distinguish this
INVITE request as a request to create a new ad-hoc conference from a
request to join an existing conference by the Request-URI. That is,
although both requests may route to the same application, the
differing services requested can be identified by the differing URIs
in the request itself.
Assuming that all security and policy requirements have been met, a
new conference will be created with the Contact URI returned in the
200 OK being the conference URI. The Contact header field MUST
contain the ’isfocus’ feature parameter to indicate that this URI is
for a conference.
An example call flow is shown in Figure 4. Note that Conf-Factory is
shorthand for the conference factory URI and Conf-ID Is short for the
conference URI. In this flow, Alice has a conference-aware UA and
creates a conference by sending an INVITE to the conference factory
URI. The conference factory application creates the conference and
redirects Alice to the focus using a 302 Moved Temporarily response.
Note that with proxy recursion as part of normal RFC 3261 [2]
behavior, Alice may never see the redirect but may just receive the
responses from the focus starting with message F5. Once the media
session is established, Alice subscribes to the conference URI
obtained through the Contact in the 200 OK response from the focus.
Alice Conf-Factory App Focus Bob
| | | |
| Alice creates the conference. | |
| | | |
| INVITE sip:Conf-Factory F1 | |
|------------------->| | |
| 302 Moved Contact:Conf-ID;isfocus F2 | |
|<-------------------| | |
| ACK F3 | | |
|------------------->| | |
| INVITE sip:Conf-ID F4 | |
|---------------------------------------->| |
| 180 Ringing F5 | |
|<----------------------------------------| |
| 200 OK Contact:Conf-ID;isfocus F6 | |
|<----------------------------------------| |
| ACK F7 | |
|---------------------------------------->| |
| RTP | |
|<=======================================>| |
| | |
| Alice subscribes to the conference URI. | |
| | |
| SUBSCRIBE sip:Conf-ID F8 | |
|---------------------------------------->| |
| 200 OK F9 | |
|<----------------------------------------| |
| NOTIFY F10 | |
|<----------------------------------------| |
| 200 OK F11 | |
|---------------------------------------->| |
Figure 4. Creation of a Conference Using SIP Ad-Hoc Methods.
5.5. REFER: Requesting a Focus to Add a New Resource to a Conference
(Dial Out to a New Participant)
A SIP conference URI can be used to inject different kinds of
information into the conference. Examples include new participants,
new real-time media sources, new IM messages, and pointers to passive
information references (such as HTTP URIs).