Network Working Group | A. Tveretin |
Internet-Draft | September 1, 2015 |
Intended status: Standards Track | |
Expires: March 4, 2016 |
Remote Call Control and Call Pick-up in SIP
draft-tveretin-dispatch-remote-01.txt
This memo defines a mechanism by which a SIP user agent could inspect calls at another user agent, and control a call, including picking up for itself.
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."
This Internet-Draft will expire on March 4, 2016.
Copyright (c) 2015 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.
Alice calls Bob. Bob hears the call from B1 device (e.g. fixed). However, Bob wants to answer (or reject) that call from another device B2 (e.g. mobile).
For more precise definition of this service, see [H.450.5]
First, B2 MUST identify the call umambigously. The only way for this is to use dialog-id [RFC3261]. Thus, B2 must ask B1 somehow for the dialog-id in question. An [RFC4235] solution exists, but only some information will be supplied. Thus, an alternative is suggested: use message/sip media type for dialog information.
Note: this does not affect existing implementations and interoperability.
Any given UA at any given time may hold multiple dialogs. After the affected dialog is chosen, B2 orders B1 to handle it (answer, reject, pick up [forward to B2], or forward somewhere else.
Affected dialog (AfD): a SIP dialog whose state changed by remote call control; Controlling party (Ctg): an entity requesting call monitoring, or issuing remote call control commands (Note: this definition does not require to use SIP). Controlled party (Ctd): an entity to which remote call control commands are directed. It is also a party of Affected dialog.
This specification reuses the dialog event package, which is defined in [RFC4235]
SUBSCRIBE request body is empty.
NOTIFY request body comforming to this specification is a valid SIP message (request or response). It has "message/sip" MIME type. This specification also allows multipart bodies.
As per [RFC6665]. However, consider security implications.
The Ctd will relay SIP messages, both incoming and outgoing, that alter state of any dialog. It MUST NOT relay any messages (e.g. MESSAGE, OPTIONS, ANSWER, PICKUP, REJECT requests and responses) that do not imply any kind of dialog state change themselves. The Ctd MAY strip SIP header fields and SIP bodies that do not indicate state of calls, including information hidden from Ctd for privacy reasons. However, this memo does not suggest any.
Messages are packed unencrypted.
In addition, Ctd will add the 'direction' parameter to the Event header field. The value is a token indicating the direction of the call (not dialog). Currently, predefined values are: incoming, outgoing, transit, external, internal, 3pcc, unknown, none. FFS: should this form an IANA registry?
Cntrlg discriminates incoming and outgoing (from Ctd perspective) messages by comparing known AoR with From-URI and To-URI. Then Ctg uses this information to track the state of dialogs. It MAY also alter call state by sending appropriate requests.
See [RFC6665].
Remote call control is done in near real time. So no trottling is allowed. Nor it is allowed to suppress notifications, which may bring devices out-of-sync.
This specification covers state changes presumable triggered by user. As such, they are assumed to be rare.
It is still possible to combine several messages (using multipart/mixed) into a single NOTIFY request. In that case, they retain relative order.
This document introduces new methods, namely ANSWER, PICKUP, and REJECT, into SIP. Existing methods considered unsuitable for the task.
The ANSWER method has semantics of answering the call, or otherwise establishing a dialog. Ctg provides instructions for this, via request-body.
Structure: header field are those mandated by SIP (From, To, Call-Id, Contact, Via)
To-tag: this MUST NOT be present, as the request is out-of-dialog.
Answer-Mode, Priv-Answer-Mode: as by [RFC5373]. "Auto" implies automatic reception of faxes, files, or voice mail (or video mail) etc. "Manual" implies using a loudspeaker for the call. This distinction has less sense for faxes. Exactly one of them is REQUIRED.
Replaces: header field is REQUIRED, it indicates the AFD.
Target-Dialog: SHOULD refer to an existing dialog between Ctg and Ctd, if any.
Referred-By: OPTIONALLY reveals the Ctg to the caller. If present, it is relayed in the 200 or equivalent response.
Subject: is not relayed, but could be used by Ctd for logging.
The request body is a URI. It is used by the Ctd to answer anonymously or not. Thus, the body becomes To-URI of the response.
Detailed execution:
Early-dialog at UAS side is answered (200 response).
A subscription at subscriber side is renewed.
A subscription at notifier side is renewed. Note that the NOTIFY request act as a "response" for the purpose of this section.
For established dialogs, this method fails.
Request MAY fail because of e.g. race condition. Ctd reports actual state by exisiting subscriptions (or equivalent monitoring); Ctg MUST NOT rely on responses to track outcome of call control. For this reason, responses are defined to contain only minimum required information, and in particular, no body.
The PICKUP method has semantics of forwarding the call to Ctg, or to another party. Unlike forwarding proper, it is initiated by Ctg as forwarded-to, rather than the forwarder. Ctd also relays any extra information (Referred-By:, Contact:, Reason: header fields, or the request body) to its peer.
Structure: header field are those mandated by SIP (From, To, Call-Id, Contact, Via)
To-tag: this MUST NOT be present, as the request is out-of-dialog.
Replaces: header field is REQUIRED, it indicates the AFD.
Target-Dialog: SHOULD refer to an existing dialog between Ctg and Ctd, if any.
Reason: SHOULD be present. This information is exposed to the caller.
Referred-By: OPTIONALLY reveals the Ctg to the caller. If present, it is relayed to the caller.
Refer-To: may reference the Ctg (this is the default), or the call may be forwarded to other entity. This header field is OPTIONAL.
Subject: is not relayed, but could be used by Ctd for logging.
The request body is relayed just as the Referred-By: header field.
Detailed execution:
UAS forwards the affected early-dialog by sending 302 (or 3xx for that reason).
UAC forwards the affected early-dialog by cancelling it (i.e. sending the CANCEL request) and making another call.
An established dialog is transferred.
Similar behaviour is expected for subscriptions at subscriber side.
The REJECT method has semantics of tearing down a dialog, including rejection of an incoming call (early dialog).
Structure: header field are those mandated by SIP (From, To, Call-Id, Contact, Via)
To-tag: this MUST NOT be present, as the request is out-of-dialog.
Replaces: header field is REQUIRED, it indicates the AFD.
Target-Dialog: SHOULD refer to an existing dialog between Ctg and Ctd, if any.
Reason: SHOULD be present. This information is exposed to the caller.
Referred-By: OPTIONALLY reveals the Ctg to the caller. If present, it is relayed to the caller.
Subject: is not relayed, but could be used by Ctd for logging.
The request body is relayed just as the Referred-By: header field. It MAY be used as a detailed error message.
Detailed execution:
Early-dialog at UAS side is rejected by a 4xx-5xx response, using the reason code of the REJECT request.
Early-dialog at UAC side is cancelled with a CANCEL request, using the reason code of the REJECT request.
An established dialog is terminated with a BYE request, using the reason code of the REJECT request.
A subscription is terminated (by reducing time to to zero) by either subscriber or notifier.
This memo introduces 3 new methods for SIP. Namely, ANSWER PICKUP REJECT For details, please refer to this specification, RFC xxxx
All information related to calls (including the fact of the call) is sensitive. An appropriate authorization of Ctg by Ctd is REQUIRED.
Another issue is the implementation of the ANSWER method. It may be unexpected even by authorized Cntrlg, e.g. receiving a fax or turning on a loudspeaker. All behaviour MUST be documented well, including warnings when needed.
For scenario: INVITE sip:bob@biloxi.com SIP/2.0 From: Alice <alice@atlanta.com>;tag=tag1 To: Bob <bob@biloxi.com> Subject: Hello Content-Type: application/sdp Contact: <sip:192.168.2.101> Call-Id: 15@atlanta.com /*More header skipped*/ SDP... Now consider Carol intercepting this call. First, any further information is requested: SUBSCRIBE bob@biloxi.com SIP/2.0 From: Carol <carol@cover.com>;tag=tag3 To: Bob <bob@biloxi.com> Event: dialog Accept-types: message/sip, application/sdp Expire: /*More header skipped*/ Bob responds, and sends a notification: NOTIFY sip:192.168.2.301 SIP/2.0 From: Bob <bob@biloxi.com>;tag=tag4 To: Carol <carol@cover.com>;tag=tag3 Event: dialog Content-Type: message/sip /*more...*/ Now Carol chooses to answer this call. She sends a PICKUP: PICKUP sip:192.168.2.201 SIP/2.0 From: Carol <carol@cover.com>;tag=tag83 To: Bob <bob@biloxi.com> Refer-To: Carol@cover.com Content-Type: text/csv /*skipped*/ 15@atlanta.com;tag1;tag2;500 Picked Up Now Bob responds to Alice: SIP/2.0 302 Picked Up From: Alice <alice@atlanta.com>;tag=tag1 To: Bob <bob@biloxi.com>;tag=tag2 History-Info: <sip:bob@biloxi.com?reason=sip%3bcause%3d500>;index=1 Contact: Carol@cover.com Content-Length: 0 The success of this operation is also reported to by with 200 PICKUP and NOTIFY messages.
RFC 3891 gives an impression that it is minimal message flow for a call pick-up or equivalent. The fact is this RFC assumes the same number of SIP messages.