| < draft-ietf-simple-winfo-package-04.txt | draft-ietf-simple-winfo-package-05.txt > | |||
|---|---|---|---|---|
| Internet Engineering Task Force SIMPLE WG | Internet Engineering Task Force SIMPLE WG | |||
| Internet Draft J. Rosenberg | Internet Draft J. Rosenberg | |||
| dynamicsoft | dynamicsoft | |||
| draft-ietf-simple-winfo-package-04.txt | draft-ietf-simple-winfo-package-05.txt | |||
| December 6, 2002 | January 31, 2003 | |||
| Expires: June 2003 | Expires: July 2003 | |||
| A Watcher Information Event Template-Package for the | A Watcher Information Event Template-Package for | |||
| Session Initiation Protocol (SIP) | the Session Initiation Protocol (SIP) | |||
| STATUS OF THIS MEMO | STATUS OF THIS MEMO | |||
| This document is an Internet-Draft and is in full conformance with | This document is an Internet-Draft and is in full conformance with | |||
| all provisions of Section 10 of RFC2026. | all provisions of Section 10 of RFC2026. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that | |||
| other groups may also distribute working documents as Internet- | other groups may also distribute working documents as Internet- | |||
| Drafts. | Drafts. | |||
| skipping to change at page 5, line 15 ¶ | skipping to change at page 5, line 15 ¶ | |||
| Max-Forwards: 70 | Max-Forwards: 70 | |||
| CSeq: 1288 NOTIFY | CSeq: 1288 NOTIFY | |||
| Contact: sip:B@server.example.com | Contact: sip:B@server.example.com | |||
| Event: presence.winfo | Event: presence.winfo | |||
| Content-Type: application/watcherinfo+xml | Content-Type: application/watcherinfo+xml | |||
| Content-Length: ... | Content-Length: ... | |||
| <?xml version="1.0"?> | <?xml version="1.0"?> | |||
| <watcherinfo xmlns="urn:ietf:params:xml:ns:watcherinfo" | <watcherinfo xmlns="urn:ietf:params:xml:ns:watcherinfo" | |||
| version="0" state="full"> | version="0" state="full"> | |||
| <watcher-list resource="sip:B@foo.com" package="presence"> | <watcher-list resource="sip:B@example.com" package="presence"> | |||
| <watcher id="7768a77s" event="subscribe" | <watcher id="7768a77s" event="subscribe" | |||
| status="pending">sip:A@foo.com</watcher> | status="pending">sip:A@example.com</watcher> | |||
| </watcher-list> | </watcher-list> | |||
| </watcherinfo> | </watcherinfo> | |||
| This indicates to B that A has subscribed, and that the subscription | This indicates to B that A has subscribed, and that the subscription | |||
| is pending (meaning, it is awaiting authorization). B's software can | is pending (meaning, it is awaiting authorization). B's software can | |||
| alert B that this subscription is awaiting authorization. B can then | alert B that this subscription is awaiting authorization. B can then | |||
| set policy for that subscription. | set policy for that subscription. | |||
| 3.2 Blacklist Alerts | 3.2 Blacklist Alerts | |||
| skipping to change at page 7, line 32 ¶ | skipping to change at page 7, line 32 ¶ | |||
| 4.5 NOTIFY Bodies | 4.5 NOTIFY Bodies | |||
| RFC 3265 [1] requires package definitions to describe the allowed set | RFC 3265 [1] requires package definitions to describe the allowed set | |||
| of body types in NOTIFY requests, and to specify the default value to | of body types in NOTIFY requests, and to specify the default value to | |||
| be used when there is no Accept header field in the SUBSCRIBE | be used when there is no Accept header field in the SUBSCRIBE | |||
| request. | request. | |||
| The body of the watcherinfo notification contains a watcher | The body of the watcherinfo notification contains a watcher | |||
| information document. This document describes some or all of the | information document. This document describes some or all of the | |||
| watchers for a given package, and the state of their subscriptions. | watchers for a given package, and the state of their subscriptions. | |||
| All watcherinfo subscribers MUST support the | All watcherinfo subscribers and notifiers MUST support the | |||
| application/watcherinfo+xml format described in [3], and MUST list | application/watcherinfo+xml format described in [3], and MUST list | |||
| its MIME type, application/watcherinfo+xml, in any Accept header | its MIME type, application/watcherinfo+xml, in any Accept header | |||
| field present in the SUBSCRIBE request. | field present in the SUBSCRIBE request. | |||
| Other watcher information formats might be defined in the future. In | Other watcher information formats might be defined in the future. In | |||
| that case, the watcherinfo subscriptions MAY indicate support for | that case, the watcherinfo subscriptions MAY indicate support for | |||
| other formats. However, they MUST always support and list | other formats. However, they MUST always support and list | |||
| application/watcherinfo+xml as an allowed format. | application/watcherinfo+xml as an allowed format. | |||
| Of course, the watcherinfo notifications generated by the server MUST | Of course, the watcherinfo notifications generated by the server MUST | |||
| skipping to change at page 10, line 15 ¶ | skipping to change at page 10, line 15 ¶ | |||
| policy= +----------+ | policy= +----------+ | |||
| reject | |<------------------------+ | reject | |<------------------------+ | |||
| +------------>|terminated|<---------+ | | +------------>|terminated|<---------+ | | |||
| | | | | | | | | | | | | |||
| | | | |noresource | | | | | |noresource | | |||
| | +----------+ |rejected | | | +----------+ |rejected | | |||
| | ^noresource |deactivated | | | ^noresource |deactivated | | |||
| | |rejected |probation | | | |rejected |probation | | |||
| | |deactivated |timeout |noresource | | |deactivated |timeout |noresource | |||
| | |probation | |rejected | | |probation | |rejected | |||
| | |giveup | |deactivated | | |giveup | |giveup | |||
| | | | |probation | | | | |approved | |||
| +-------+ +-------+ +-------+ |giveup | +-------+ +-------+ +-------+ | | |||
| | |subscribe| |approved| | |approved | | |subscribe| |approved| | | | |||
| | init |-------->|pending|------->|active | | | | init |-------->|pending|------->|active | | | |||
| | |no policy| | | | | | | |no policy| | | | | | |||
| | | | | | | | | | | | | | | | | |||
| +-------+ +-------+ +-------+ | | +-------+ +-------+ +-------+ | | |||
| | | ^ ^ | | | | ^ ^ | | |||
| | subscribe, | | | | | | subscribe, | | | | | |||
| +-----------------------------------+ | | +-----------------------------------+ | | |||
| policy = accept | | +-------+ | | policy = accept | | +-------+ | | |||
| | |subscribe | | | | | |subscribe | | | | |||
| | +----------|waiting|----------+ | | +----------|waiting|----------+ | |||
| skipping to change at page 14, line 6 ¶ | skipping to change at page 14, line 6 ¶ | |||
| resource. This server would accept the watcherinfo subscription | resource. This server would accept the watcherinfo subscription | |||
| (assuming it was authorized, of course), and generate watcherinfo | (assuming it was authorized, of course), and generate watcherinfo | |||
| notifications as the watcherinfo state changed. The watcherinfo | notifications as the watcherinfo state changed. The watcherinfo | |||
| subscriber would only have a single dialog in this case. | subscriber would only have a single dialog in this case. | |||
| 5 Example Usage | 5 Example Usage | |||
| The following section discusses an example application and call flows | The following section discusses an example application and call flows | |||
| using the watcherinfo package. | using the watcherinfo package. | |||
| In this example, a user Joe, sip:joe@bar.com provides presence | In this example, a user Joe, sip:joe@example.com provides presence | |||
| through the bar.com presence server. Joe subscribes to his own | through the example.com presence server. Joe subscribes to his own | |||
| watcher information, in order to learn about people who subscribe to | watcher information, in order to learn about people who subscribe to | |||
| his presence, so that he can approve or reject their subscriptions. | his presence, so that he can approve or reject their subscriptions. | |||
| Joe sends the following SUBSCRIBE request: | Joe sends the following SUBSCRIBE request: | |||
| SUBSCRIBE sip:joe@bar.com SIP/2.0 | SUBSCRIBE sip:joe@example.com SIP/2.0 | |||
| Via: SIP/2.0/UDP pc34.bar.com;branch=z9hG4bKnashds7 | Via: SIP/2.0/UDP pc34.example.com;branch=z9hG4bKnashds7 | |||
| From: sip:joe@bar.com;tag=123aa9 | From: sip:joe@example.com;tag=123aa9 | |||
| To: sip:joe@bar.com | To: sip:joe@example.com | |||
| Call-ID: 9987@pc34.bar.com | Call-ID: 9987@pc34.example.com | |||
| CSeq: 9887 SUBSCRIBE | CSeq: 9887 SUBSCRIBE | |||
| Contact: sip:joe@pc34.bar.com | Contact: sip:joe@pc34.example.com | |||
| Event: presence.winfo | Event: presence.winfo | |||
| Max-Forwards: 70 | Max-Forwards: 70 | |||
| The server responds with a 401 to authenticate, and Joe resubmits the | The server responds with a 401 to authenticate, and Joe resubmits the | |||
| SUBSCRIBE with credentials (message not shown). The server then | SUBSCRIBE with credentials (message not shown). The server then | |||
| authorizes the subscription, since it allows Joe to subscribe to his | authorizes the subscription, since it allows Joe to subscribe to his | |||
| own watcher information for presence. It responds with a 200 OK: | own watcher information for presence. It responds with a 200 OK: | |||
| SIP/2.0 200 OK | SIP/2.0 200 OK | |||
| Via: SIP/2.0/UDP pc34.bar.com;branch=z9hG4bKnashds8 | Via: SIP/2.0/UDP pc34.example.com;branch=z9hG4bKnashds8 | |||
| ;received=1.2.3.4 | ;received=192.0.2.8 | |||
| From: sip:joe@bar.com;tag=123aa9 | From: sip:joe@example.com;tag=123aa9 | |||
| To: sip:joe@bar.com;tag=xyzygg | To: sip:joe@example.com;tag=xyzygg | |||
| Call-ID: 9987@pc34.bar.com | Call-ID: 9987@pc34.example.com | |||
| CSeq: 9988 SUBSCRIBE | CSeq: 9988 SUBSCRIBE | |||
| Contact: sip:server19.bar.com | Contact: sip:server19.example.com | |||
| Expires: 3600 | Expires: 3600 | |||
| Event: presence.winfo | Event: presence.winfo | |||
| The server then sends a NOTIFY with the current state of | The server then sends a NOTIFY with the current state of | |||
| presence.winfo for joe@bar.com: | presence.winfo for joe@example.com: | |||
| NOTIFY sip:joe@pc34.bar.com SIP/2.0 | NOTIFY sip:joe@pc34.example.com SIP/2.0 | |||
| Via: SIP/2.0/UDP server19.bar.com;branch=z9hG4bKnasaii | Via: SIP/2.0/UDP server19.example.com;branch=z9hG4bKnasaii | |||
| From: sip:joe@bar.com;tag=xyzygg | From: sip:joe@example.com;tag=xyzygg | |||
| To: sip:joe@bar.com;tag=123aa9 | To: sip:joe@example.com;tag=123aa9 | |||
| Call-ID: 9987@pc34.bar.com | Call-ID: 9987@pc34.example.com | |||
| CSeq: 1288 NOTIFY | CSeq: 1288 NOTIFY | |||
| Contact: sip:server19.bar.com | Contact: sip:server19.example.com | |||
| Event: presence.winfo | Event: presence.winfo | |||
| Max-Forwards: 70 | Max-Forwards: 70 | |||
| Content-Type: application/watcherinfo+xml | Content-Type: application/watcherinfo+xml | |||
| Content-Length: ... | Content-Length: ... | |||
| <?xml version="1.0"?> | <?xml version="1.0"?> | |||
| <watcherinfo xmlns="urn:ietf:params:xml:ns:watcherinfo" | <watcherinfo xmlns="urn:ietf:params:xml:ns:watcherinfo" | |||
| version="0" state="full"> | version="0" state="full"> | |||
| <watcher-list resource="sip:joe@bar.com" package="presence"> | <watcher-list resource="sip:joe@example.com" package="presence"> | |||
| <watcher id="77ajsyy76" event="subscribe" | <watcher id="77ajsyy76" event="subscribe" | |||
| status="pending">sip:A@example.com</watcher> | status="pending">sip:A@example.com</watcher> | |||
| </watcher-list> | </watcher-list> | |||
| </watcherinfo> | </watcherinfo> | |||
| Joe then responds with a 200 OK to the NOTIFY: | Joe then responds with a 200 OK to the NOTIFY: | |||
| SIP/2.0 200 OK | SIP/2.0 200 OK | |||
| Via: SIP/2.0/UDP server19.bar.com;branch=z9hG4bKnasaii | Via: SIP/2.0/UDP server19.example.com;branch=z9hG4bKnasaii | |||
| ;received=1.2.3.8 | ;received=192.0.2.7 | |||
| From: sip:joe@bar.com;tag=xyzygg | From: sip:joe@example.com;tag=xyzygg | |||
| To: sip:joe@bar.com;tag=123aa9 | To: sip:joe@example.com;tag=123aa9 | |||
| Call-ID: 9987@pc34.bar.com | Call-ID: 9987@pc34.example.com | |||
| CSeq: 1288 NOTIFY | CSeq: 1288 NOTIFY | |||
| The NOTIFY tells Joe that user A currently has a pending | The NOTIFY tells Joe that user A currently has a pending | |||
| subscription. Joe then authorizes A's subscription through some | subscription. Joe then authorizes A's subscription through some | |||
| means. This causes a change in the status of the subscription (which | means. This causes a change in the status of the subscription (which | |||
| moves from pending to active), and the delivery of another | moves from pending to active), and the delivery of another | |||
| notification: | notification: | |||
| NOTIFY sip:joe@pc34.bar.com SIP/2.0 | NOTIFY sip:joe@pc34.example.com SIP/2.0 | |||
| Via: SIP/2.0/UDP server19.bar.com;branch=z9hG4bKnasaij | Via: SIP/2.0/UDP server19.example.com;branch=z9hG4bKnasaij | |||
| From: sip:joe@bar.com;tag=xyzygg | From: sip:joe@example.com;tag=xyzygg | |||
| To: sip:joe@bar.com;tag=123aa9 | To: sip:joe@example.com;tag=123aa9 | |||
| Call-ID: 9987@pc34.bar.com | Call-ID: 9987@pc34.example.com | |||
| CSeq: 1289 NOTIFY | CSeq: 1289 NOTIFY | |||
| Contact: sip:server19.bar.com | Contact: sip:server19.example.com | |||
| Event: presence.winfo | Event: presence.winfo | |||
| Max-Forwards: 70 | Max-Forwards: 70 | |||
| Content-Type: application/watcherinfo+xml | Content-Type: application/watcherinfo+xml | |||
| Content-Length: ... | Content-Length: ... | |||
| <?xml version="1.0"?> | <?xml version="1.0"?> | |||
| <watcherinfo xmlns="urn:ietf:params:xml:ns:watcherinfo" | <watcherinfo xmlns="urn:ietf:params:xml:ns:watcherinfo" | |||
| version="1" state="partial"> | version="1" state="partial"> | |||
| <watcher-list resource="sip:joe@bar.com" package="presence"> | <watcher-list resource="sip:joe@example.com" package="presence"> | |||
| <watcher id="77ajsyy76" event="approved" | <watcher id="77ajsyy76" event="approved" | |||
| status="active">sip:A@example.com</watcher> | status="active">sip:A@example.com</watcher> | |||
| </watcher-list> | </watcher-list> | |||
| </watcherinfo> | </watcherinfo> | |||
| B then responds with a 200 OK to the NOTIFY: | B then responds with a 200 OK to the NOTIFY: | |||
| SIP/2.0 200 OK | SIP/2.0 200 OK | |||
| Via: SIP/2.0/UDP server19.bar.com;branch=z9hG4bKnasaij | Via: SIP/2.0/UDP server19.example.com;branch=z9hG4bKnasaij | |||
| ;received=1.2.3.8 | ;received=192.0.2.7 | |||
| From: sip:joe@bar.com;tag=xyzygg | From: sip:joe@example.com;tag=xyzygg | |||
| To: sip:joe@bar.com;tag=123aa9 | To: sip:joe@example.com;tag=123aa9 | |||
| Call-ID: 9987@pc34.bar.com | Call-ID: 9987@pc34.example.com | |||
| CSeq: 1289 NOTIFY | CSeq: 1289 NOTIFY | |||
| 6 Security Considerations | 6 Security Considerations | |||
| 6.1 Denial of Service Attacks | 6.1 Denial of Service Attacks | |||
| Watcher information generates notifications about changes in the | Watcher information generates notifications about changes in the | |||
| state of watchers for a particular resource. It is possible for a | state of watchers for a particular resource. It is possible for a | |||
| single resource to have many watchers, resulting in the possibility | single resource to have many watchers, resulting in the possibility | |||
| of a large volume of notifications. This makes watcherinfo | of a large volume of notifications. This makes watcherinfo | |||
| skipping to change at page 17, line 33 ¶ | skipping to change at page 17, line 33 ¶ | |||
| Watcher information indicates what users are interested in a | Watcher information indicates what users are interested in a | |||
| particular resource. Depending on the package and the resource, this | particular resource. Depending on the package and the resource, this | |||
| can be very sensitive information. For example, in the case of | can be very sensitive information. For example, in the case of | |||
| presence, the watcher information for some user represents the | presence, the watcher information for some user represents the | |||
| friends, family, and business relations of that person. This | friends, family, and business relations of that person. This | |||
| information can be used for a variety of malicious purposes. | information can be used for a variety of malicious purposes. | |||
| One way in which this information can be revealed is eavesdropping. | One way in which this information can be revealed is eavesdropping. | |||
| An attacker can observe watcherinfo notifications, and learn this | An attacker can observe watcherinfo notifications, and learn this | |||
| information. To prevent that, the notifications can be encrypted | information. To prevent that, watchers MAY use the SIPS scheme when | |||
| using SIPs S/MIME feature. Another way in which this information can | subscribing to a watcherinfo resource. Notifiers for watcherinfo MUST | |||
| be revealed is through spoofed subscriptions. These attacks can be | support TLS and SIPS as if they were a proxy (see Section 26.3.1 of | |||
| prevented by authenticating and authorizing all watcherinfo | RFC 3261). | |||
| subscriptions. | ||||
| SIP encryption, using S/MIME, MAY be used end-to-end for the | ||||
| transmission of both SUBSCRIBE and NOTIFY requests. | ||||
| Another way in which this information can be revealed is through | ||||
| spoofed subscriptions. These attacks can be prevented by | ||||
| authenticating and authorizing all watcherinfo subscriptions. In | ||||
| order for the notifier to authenticate the subscriber, it MAY use | ||||
| HTTP Digest (Section 22 of RFC 3261). As a result, all watchers MUST | ||||
| support HTTP Digest. This is a redundant requirement, however, since | ||||
| all SIP user agents are mandated to support it by RFC 3261. | ||||
| 7 IANA Considerations | 7 IANA Considerations | |||
| This specification registers an event template package as specified | This specification registers an event template package as specified | |||
| in Section 6.2 of RFC 3265 [1]. | in Section 6.2 of RFC 3265 [1]. | |||
| Package Name: winfo | Package Name: winfo | |||
| Template Package: yes | Template Package: yes | |||
| skipping to change at page 18, line 24 ¶ | skipping to change at page 18, line 34 ¶ | |||
| 72 Eagle Rock Avenue | 72 Eagle Rock Avenue | |||
| First Floor | First Floor | |||
| East Hanover, NJ 07936 | East Hanover, NJ 07936 | |||
| email: jdrosen@dynamicsoft.com | email: jdrosen@dynamicsoft.com | |||
| 10 Normative References | 10 Normative References | |||
| [1] A. B. Roach, "Session initiation protocol (sip)-specific event | [1] A. B. Roach, "Session initiation protocol (sip)-specific event | |||
| notification," RFC 3265, Internet Engineering Task Force, June 2002. | notification," RFC 3265, Internet Engineering Task Force, June 2002. | |||
| [2] S. Bradner, "Key words for use in RFCs to indicate requirement | [2] S. Bradner, "Key words for use in rfcs to indicate requirement | |||
| levels," RFC 2119, Internet Engineering Task Force, Mar. 1997. | levels," RFC 2119, Internet Engineering Task Force, Mar. 1997. | |||
| [3] J. Rosenberg, "An extensible markup language (XML) based format | [3] J. Rosenberg, "An extensible markup language (XML) based format | |||
| for watcher information," Internet Draft, Internet Engineering Task | for watcher information," internet draft, Internet Engineering Task | |||
| Force, May 2002. Work in progress. | Force, Dec. 2002. Work in progress. | |||
| [4] J. Rosenberg, H. Schulzrinne, G. Camarillo, A. Johnston, J. | [4] J. Rosenberg, H. Schulzrinne, G. Camarillo, A. R. Johnston, J. | |||
| Peterson, R. Sparks, M. Handley, and E. Schooler, "SIP: session | Peterson, R. Sparks, M. Handley, and E. Schooler, "SIP: session | |||
| initiation protocol," RFC 3261, Internet Engineering Task Force, June | initiation protocol," RFC 3261, Internet Engineering Task Force, June | |||
| 2002. | 2002. | |||
| 11 Informative References | 11 Informative References | |||
| [5] J. Rosenberg, "Session initiation protocol (SIP) extensions for | [5] J. Rosenberg, "A presence event package for the session | |||
| presence," Internet Draft, Internet Engineering Task Force, May 2002. | initiation protocol (SIP)," internet draft, Internet Engineering Task | |||
| Work in progress. | Force, Dec. 2002. Work in progress. | |||
| Intellectual Property Statement | ||||
| The IETF takes no position regarding the validity or scope of any | ||||
| intellectual property or other rights that might be claimed to | ||||
| pertain to the implementation or use of the technology described in | ||||
| this document or the extent to which any license under such rights | ||||
| might or might not be available; neither does it represent that it | ||||
| has made any effort to identify any such rights. Information on the | ||||
| IETF's procedures with respect to rights in standards-track and | ||||
| standards-related documentation can be found in BCP-11. Copies of | ||||
| claims of rights made available for publication and any assurances of | ||||
| licenses to be made available, or the result of an attempt made to | ||||
| obtain a general license or permission for the use of such | ||||
| proprietary rights by implementors or users of this specification can | ||||
| be obtained from the IETF Secretariat. | ||||
| The IETF invites any interested party to bring to its attention any | ||||
| copyrights, patents or patent applications, or other proprietary | ||||
| rights which may cover technology that may be required to practice | ||||
| this standard. Please address the information to the IETF Executive | ||||
| Director. | ||||
| Full Copyright Statement | Full Copyright Statement | |||
| Copyright (c) The Internet Society (2002). All Rights Reserved. | Copyright (c) The Internet Society (2003). All Rights Reserved. | |||
| This document and translations of it may be copied and furnished to | This document and translations of it may be copied and furnished to | |||
| others, and derivative works that comment on or otherwise explain it | others, and derivative works that comment on or otherwise explain it | |||
| or assist in its implementation may be prepared, copied, published | or assist in its implementation may be prepared, copied, published | |||
| and distributed, in whole or in part, without restriction of any | and distributed, in whole or in part, without restriction of any | |||
| kind, provided that the above copyright notice and this paragraph are | kind, provided that the above copyright notice and this paragraph are | |||
| included on all such copies and derivative works. However, this | included on all such copies and derivative works. However, this | |||
| document itself may not be modified in any way, such as by removing | document itself may not be modified in any way, such as by removing | |||
| the copyright notice or references to the Internet Society or other | the copyright notice or references to the Internet Society or other | |||
| Internet organizations, except as needed for the purpose of | Internet organizations, except as needed for the purpose of | |||
| End of changes. 26 change blocks. | ||||
| 64 lines changed or deleted | 96 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||