draft-ietf-calext-rscale-01.txt | draft-ietf-calext-rscale-02.txt | |||
---|---|---|---|---|
Network Working Group C. Daboo | Network Working Group C. Daboo | |||
Internet-Draft Apple Inc. | Internet-Draft Apple Inc. | |||
Updates: 5545, 5546, 4791 (if approved) G. Yakushev | Updates: 4791, 5545, 5546, 6321, 7265 G. Yakushev | |||
Intended status: Standards Track Google Inc. | (if approved) Google Inc. | |||
Expires: May 15, 2015 November 11, 2014 | Intended status: Standards Track December 10, 2014 | |||
Expires: June 13, 2015 | ||||
Non-Gregorian Recurrence Rules in iCalendar | Non-Gregorian Recurrence Rules in iCalendar | |||
draft-ietf-calext-rscale-01 | draft-ietf-calext-rscale-02 | |||
Abstract | Abstract | |||
This document defines how non-Gregorian recurrence rules can be | This document defines how non-Gregorian recurrence rules can be | |||
specified and used in iCalendar data, and with CalDAV servers. | specified and used in iCalendar data, and with CalDAV servers. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
skipping to change at page 1, line 32 | skipping to change at page 1, line 33 | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on May 15, 2015. | This Internet-Draft will expire on June 13, 2015. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2014 IETF Trust and the persons identified as the | Copyright (c) 2014 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
skipping to change at page 2, line 15 | skipping to change at page 2, line 15 | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
2. Conventions Used in This Document . . . . . . . . . . . . . . 3 | 2. Conventions Used in This Document . . . . . . . . . . . . . . 3 | |||
3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
4. Extended RRULE Property . . . . . . . . . . . . . . . . . . . 5 | 4. Extended RRULE Property . . . . . . . . . . . . . . . . . . . 5 | |||
4.1. Handling Leap Months . . . . . . . . . . . . . . . . . . 6 | 4.1. Handling Leap Months . . . . . . . . . . . . . . . . . . 6 | |||
4.2. Examples . . . . . . . . . . . . . . . . . . . . . . . . 7 | 4.2. Examples . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
5. Registering Calendar Systems . . . . . . . . . . . . . . . . 9 | 5. Registering Calendar Systems . . . . . . . . . . . . . . . . 9 | |||
6. Use with iTIP . . . . . . . . . . . . . . . . . . . . . . . . 10 | 6. Use with iTIP . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
7. Use with CalDAV . . . . . . . . . . . . . . . . . . . . . . . 11 | 7. Use with xCal . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
7.1. CALDAV:supported-rscale-set Property . . . . . . . . . . 11 | 8. Use with jCal . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
8. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | 9. Use with CalDAV . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 12 | 9.1. CALDAV:supported-rscale-set Property . . . . . . . . . . 13 | |||
10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 12 | 10. Security Considerations . . . . . . . . . . . . . . . . . . . 14 | |||
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 14 | |||
11.1. Normative References . . . . . . . . . . . . . . . . . . 12 | 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
11.2. Informative References . . . . . . . . . . . . . . . . . 13 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
13.1. Normative References . . . . . . . . . . . . . . . . . . 14 | ||||
13.2. Informative References . . . . . . . . . . . . . . . . . 15 | ||||
Appendix A. Change History (To be removed by RFC Editor before | Appendix A. Change History (To be removed by RFC Editor before | |||
publication) . . . . . . . . . . . . . . . . . . . . 13 | publication) . . . . . . . . . . . . . . . . . . . . 15 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 15 | Appendix B. xCal RELAX NG schema update . . . . . . . . . . . . 16 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 17 | ||||
1. Introduction | 1. Introduction | |||
The iCalendar [RFC5545] data format is in widespread use to represent | The iCalendar [RFC5545] data format is in widespread use to represent | |||
calendar data. iCalendar represents dates and times using the | calendar data. iCalendar represents dates and times using the | |||
Gregorian calendar system only. It does provide a way to use non- | Gregorian calendar system only. It does provide a way to use non- | |||
Gregorian calendar systems via a "CALSCALE" property, but this has | Gregorian calendar systems via a "CALSCALE" property, but this has | |||
never been used. However, there is a need to support at least non- | never been used. However, there is a need to support at least non- | |||
Gregorian recurrence patterns to cover anniversaries, and many local, | Gregorian recurrence patterns to cover anniversaries, and many local, | |||
religious, or civil holidays based on non-Gregorian dates. | religious, or civil holidays based on non-Gregorian dates. | |||
skipping to change at page 3, line 21 | skipping to change at page 3, line 24 | |||
calendar systems to be used. With this, all the date, time and | calendar systems to be used. With this, all the date, time and | |||
period values in the iCalendar object would remain specified using | period values in the iCalendar object would remain specified using | |||
the Gregorian calendar system, but repeating patterns in other | the Gregorian calendar system, but repeating patterns in other | |||
calendar systems could be defined. It is then up to calendar user | calendar systems could be defined. It is then up to calendar user | |||
agents and servers to map between Gregorian and non-Gregorian | agents and servers to map between Gregorian and non-Gregorian | |||
calendar systems in order to expand out recurrence instances. | calendar systems in order to expand out recurrence instances. | |||
This specification does not itself define calendar systems, rather it | This specification does not itself define calendar systems, rather it | |||
utilizes the calendar system registry defined by the Unicode | utilizes the calendar system registry defined by the Unicode | |||
Consortium in their CLDR (Common Locale Data Repository) project | Consortium in their CLDR (Common Locale Data Repository) project | |||
[UNICODE.CLDR]. | [UNICODE.CLDR], as implemented in the Unicode (ICU) Library | |||
[UNICODE.ICU]. | ||||
2. Conventions Used in This Document | 2. Conventions Used in This Document | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
[RFC2119]. | [RFC2119]. | |||
The notation used in this memo is the ABNF notation of [RFC5234] as | The notation used in this memo is the ABNF notation of [RFC5234] as | |||
used by iCalendar [RFC5545]. Any syntax elements shown below that | used by iCalendar [RFC5545]. Any syntax elements shown below that | |||
skipping to change at page 11, line 5 | skipping to change at page 11, line 5 | |||
the iTIP message SHOULD be rejected, returning a "REQUEST-STATUS" | the iTIP message SHOULD be rejected, returning a "REQUEST-STATUS" | |||
property set to the "3.1" status code (as per Section 3.6.14 of | property set to the "3.1" status code (as per Section 3.6.14 of | |||
[RFC5546]). | [RFC5546]). | |||
if the iTIP message is accepted and the calendar component treated | if the iTIP message is accepted and the calendar component treated | |||
as non-recurring, an iTIP reply with a "REQUEST-STATUS" property | as non-recurring, an iTIP reply with a "REQUEST-STATUS" property | |||
set to the "2.8" or "2.10" status codes (as per Sections 3.6.9 or | set to the "2.8" or "2.10" status codes (as per Sections 3.6.9 or | |||
3.6.11, respectively, of [RFC5546]) SHOULD be returned. | 3.6.11, respectively, of [RFC5546]) SHOULD be returned. | |||
7. Use with CalDAV | 7. Use with xCal | |||
xCal [RFC6321] defines how iCalendar data is represented in XML. | ||||
This specification extends the <recur> XML element in Section 3.6.10 | ||||
of [RFC6321] in the following manner: | ||||
1. A new <rscale> XML element is defined as a child element of | ||||
<recur>. The content of this element MUST be a string whose | ||||
value is the "RSCALE" element value of the "RRULE", with case | ||||
preserved. | ||||
2. A new <skip> XML element is defined as a child element of | ||||
<recur>. The content of this element MUST be a string whose | ||||
value is the "SKIP" element value of the "RRULE", with case | ||||
preserved. | ||||
3. The "bymonth" XML element is redefined to support either numeric | ||||
or string values as its content (as per Section 4.1). | ||||
Extensions to the RELAX NG schema in Appendix A of [RFC6321] are | ||||
defined in Appendix B. | ||||
Example: the iCalendar "RRULE" property: | ||||
RRULE:RSCALE=GREGORIAN;FREQ=YEARLY;SKIP=FORWARD | ||||
would be represented in XML as: | ||||
<rrule> | ||||
<recur> | ||||
<rscale>GREGORIAN</rscale> | ||||
<freq>YEARLY</freq> | ||||
<skip>FORWARD</skip> | ||||
</recur> | ||||
</rrule> | ||||
8. Use with jCal | ||||
jCal [RFC7265] defines how iCalendar data is represented in JSON. | ||||
This specification extends the "recur" JSON object defined in | ||||
Section 3.6.10 of [RFC7265] in the following manner: | ||||
1. A new "rscale" child member is defined. This MUST be a string | ||||
whose value is the "RSCALE" element value of the "RRULE", with | ||||
case preserved. | ||||
2. A new "skip" child member is defined. This MUST be a string | ||||
whose value is the "SKIP" element value of the "RRULE", with case | ||||
preserved. | ||||
3. The "bymonth" child member is redefined to support either numeric | ||||
or string values. If the "BYMONTH" element value is an integer, | ||||
then a numeric JSON value MUST be used. If the "BYMONTH" element | ||||
value is an integer with the "L" suffix (as per Section 4.1), | ||||
then a JSON string value MUST be used. | ||||
Example: the iCalendar "RRULE" property: | ||||
RRULE:RSCALE=GREGORIAN;FREQ=YEARLY;SKIP=FORWARD | ||||
would be represented in JSON as: | ||||
[ | ||||
"rrule", | ||||
{}, | ||||
"recur", | ||||
{ | ||||
"rscale": "GREGORIAN", | ||||
"freq": "YEARLY", | ||||
"skip": "FORWARD" | ||||
} | ||||
] | ||||
9. Use with CalDAV | ||||
The CalDAV [RFC4791] calendar access protocol allows clients and | The CalDAV [RFC4791] calendar access protocol allows clients and | |||
servers to exchange iCalendar data. In addition, CalDAV clients are | servers to exchange iCalendar data. In addition, CalDAV clients are | |||
able to query calendar data stored on the server, including time- | able to query calendar data stored on the server, including time- | |||
based queries. Since an "RSCALE" element value determines the time | based queries. Since an "RSCALE" element value determines the time | |||
ranges for recurring instances in a calendar component, CalDAV | ranges for recurring instances in a calendar component, CalDAV | |||
servers need to support it to interoperate with clients also using | servers need to support it to interoperate with clients also using | |||
the "RSCALE" element. | the "RSCALE" element. | |||
A CalDAV server advertises a CALDAV:supported-rscale-set WebDAV | A CalDAV server advertises a CALDAV:supported-rscale-set WebDAV | |||
skipping to change at page 11, line 41 | skipping to change at page 13, line 21 | |||
attempts to store iCalendar data with an "RSCALE" element value not | attempts to store iCalendar data with an "RSCALE" element value not | |||
supported by the server. | supported by the server. | |||
It is possible for an "RSCALE" value to be present in calendar data | It is possible for an "RSCALE" value to be present in calendar data | |||
on the server being accessed by a client that does not support an | on the server being accessed by a client that does not support an | |||
"RSCALE" element or its specified value. It is expected that | "RSCALE" element or its specified value. It is expected that | |||
existing clients, unaware of "RSCALE", will fail gracefully by | existing clients, unaware of "RSCALE", will fail gracefully by | |||
ignoring the calendar component, whilst still processing other | ignoring the calendar component, whilst still processing other | |||
calendar data on the server. | calendar data on the server. | |||
7.1. CALDAV:supported-rscale-set Property | 9.1. CALDAV:supported-rscale-set Property | |||
Name: supported-rscale-set | Name: supported-rscale-set | |||
Namespace: urn:ietf:params:xml:ns:caldav | Namespace: urn:ietf:params:xml:ns:caldav | |||
Purpose: Enumerates the set of supported iCalendar "RSCALE" element | Purpose: Enumerates the set of supported iCalendar "RSCALE" element | |||
values supported by the server. | values supported by the server. | |||
Protected: This property MUST be protected and SHOULD NOT be | Protected: This property MUST be protected and SHOULD NOT be | |||
returned by a PROPFIND allprop request (as defined in Section 14.2 | returned by a PROPFIND allprop request (as defined in Section 14.2 | |||
skipping to change at page 12, line 25 | skipping to change at page 14, line 5 | |||
<C:supported-rscale-set | <C:supported-rscale-set | |||
xmlns:C="urn:ietf:params:xml:ns:caldav"> | xmlns:C="urn:ietf:params:xml:ns:caldav"> | |||
<C:supported-rscale>GREGORIAN</C:supported-rscale> | <C:supported-rscale>GREGORIAN</C:supported-rscale> | |||
<C:supported-rscale>CHINESE</C:supported-rscale> | <C:supported-rscale>CHINESE</C:supported-rscale> | |||
<C:supported-rscale>ISLAMIC-CIVIL</C:supported-rscale> | <C:supported-rscale>ISLAMIC-CIVIL</C:supported-rscale> | |||
<C:supported-rscale>HEBREW</C:supported-rscale> | <C:supported-rscale>HEBREW</C:supported-rscale> | |||
<C:supported-rscale>ETHIOPIC</C:supported-rscale> | <C:supported-rscale>ETHIOPIC</C:supported-rscale> | |||
</C:supported-rscale-set> | </C:supported-rscale-set> | |||
8. Security Considerations | 10. Security Considerations | |||
This specification does not introduce any addition security concerns | This specification does not introduce any addition security concerns | |||
beyond those described in [RFC5545], [RFC5546], and [RFC4791]. | beyond those described in [RFC5545], [RFC5546], and [RFC4791]. | |||
9. IANA Considerations | 11. IANA Considerations | |||
This document requires no IANA actions. | This document requires no IANA actions. | |||
10. Acknowledgments | 12. Acknowledgments | |||
Thanks to the following for feedback: Mark Davis, Mike Douglass, | Thanks to the following for feedback: Mark Davis, Mike Douglass, | |||
Peter Edberg, Marten Gajda, Ken Murchison, Arnaud Quillaud, Dave | Peter Edberg, Marten Gajda, Philipp Kewisch, Ken Murchison, Arnaud | |||
Thewlis, and Umaoka Yoshito. | Quillaud, Dave Thewlis, and Umaoka Yoshito. | |||
This specification originated from work at the Calendaring and | This specification originated from work at the Calendaring and | |||
Scheduling Consortium, which has helped with the development and | Scheduling Consortium, which has helped with the development and | |||
testing of implementations. | testing of implementations. | |||
11. References | 13. References | |||
11.1. Normative References | 13.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
[RFC4791] Daboo, C., Desruisseaux, B., and L. Dusseault, | [RFC4791] Daboo, C., Desruisseaux, B., and L. Dusseault, | |||
"Calendaring Extensions to WebDAV (CalDAV)", RFC 4791, | "Calendaring Extensions to WebDAV (CalDAV)", RFC 4791, | |||
March 2007. | March 2007. | |||
[RFC4918] Dusseault, L., "HTTP Extensions for Web Distributed | [RFC4918] Dusseault, L., "HTTP Extensions for Web Distributed | |||
Authoring and Versioning (WebDAV)", RFC 4918, June 2007. | Authoring and Versioning (WebDAV)", RFC 4918, June 2007. | |||
skipping to change at page 13, line 23 | skipping to change at page 14, line 49 | |||
Specifications: ABNF", STD 68, RFC 5234, January 2008. | Specifications: ABNF", STD 68, RFC 5234, January 2008. | |||
[RFC5545] Desruisseaux, B., "Internet Calendaring and Scheduling | [RFC5545] Desruisseaux, B., "Internet Calendaring and Scheduling | |||
Core Object Specification (iCalendar)", RFC 5545, | Core Object Specification (iCalendar)", RFC 5545, | |||
September 2009. | September 2009. | |||
[RFC5546] Daboo, C., "iCalendar Transport-Independent | [RFC5546] Daboo, C., "iCalendar Transport-Independent | |||
Interoperability Protocol (iTIP)", RFC 5546, December | Interoperability Protocol (iTIP)", RFC 5546, December | |||
2009. | 2009. | |||
[RFC6321] Daboo, C., Douglass, M., and S. Lees, "xCal: The XML | ||||
Format for iCalendar", RFC 6321, August 2011. | ||||
[RFC7265] Kewisch, P., Daboo, C., and M. Douglass, "jCal: The JSON | ||||
Format for iCalendar", RFC 7265, May 2014. | ||||
[UNICODE.CLDR] | [UNICODE.CLDR] | |||
"CLDR calendar.xml Data", Unicode Consortium CLDR, | "CLDR calendar.xml Data", Unicode Consortium CLDR, | |||
<http://www.unicode.org/repos/cldr/tags/latest/common/ | <http://www.unicode.org/repos/cldr/tags/latest/common/ | |||
bcp47/calendar.xml>. | bcp47/calendar.xml>. | |||
11.2. Informative References | 13.2. Informative References | |||
[ISO.8601.2004] | [ISO.8601.2004] | |||
International Organization for Standardization, "Data | International Organization for Standardization, "Data | |||
elements and interchange formats - Information interchange | elements and interchange formats - Information interchange | |||
- Representation of dates and times", ISO Standard 8601, | - Representation of dates and times", ISO Standard 8601, | |||
2004. | 2004. | |||
[UNICODE.ICU] | [UNICODE.ICU] | |||
"International Components for Unicode", Unicode Consortium | "International Components for Unicode", Unicode Consortium | |||
ICU, April 2014, <http://site.icu-project.org>. | ICU, April 2014, <http://site.icu-project.org>. | |||
Appendix A. Change History (To be removed by RFC Editor before | Appendix A. Change History (To be removed by RFC Editor before | |||
publication) | publication) | |||
Changes in draft-ietf-calext-rscale-02: | ||||
1. Added xCal and jCal changes sections and relax NG schema | ||||
appendix. | ||||
2. Added ICU reference at the end of Section 1. | ||||
Changes in draft-ietf-calext-rscale-01: | Changes in draft-ietf-calext-rscale-01: | |||
1. Editorial changes/fixes per document shepherd review. | 1. Editorial changes/fixes per document shepherd review. | |||
2. Switched CLDR reference to "tags/latest". | 2. Switched CLDR reference to "tags/latest". | |||
Changes in draft-ietf-calext-rscale-00: | Changes in draft-ietf-calext-rscale-00: | |||
1. Updated some references. | 1. Updated some references. | |||
skipping to change at page 15, line 5 | skipping to change at page 16, line 41 | |||
3. Clarified when SKIP processing occurs. | 3. Clarified when SKIP processing occurs. | |||
Changes in draft-daboo-icalendar-rscale-01: | Changes in draft-daboo-icalendar-rscale-01: | |||
1. Removed requirement that RSCALE be the first item in an RRULE. | 1. Removed requirement that RSCALE be the first item in an RRULE. | |||
2. Added BYLEAPMONTH element and removed BYMONTH "L" suffix. | 2. Added BYLEAPMONTH element and removed BYMONTH "L" suffix. | |||
3. Removed Open Issues. | 3. Removed Open Issues. | |||
Authors' Addresses | Appendix B. xCal RELAX NG schema update | |||
The following changes are made to the RELAX NG schema defined in | ||||
Appendix A of [RFC6321]. | ||||
# 3.3.10 RECUR | ||||
# This extension adds type-rscale and type-skip, | ||||
# and modifies type-bymonth | ||||
value-recur = element recur { | ||||
type-rscale?, | ||||
type-freq, | ||||
(type-until | type-count)?, | ||||
element interval { | ||||
xsd:positiveInteger | ||||
}?, | ||||
type-bysecond*, | ||||
type-byminute*, | ||||
type-byhour*, | ||||
type-byday*, | ||||
type-bymonthday*, | ||||
type-byyearday*, | ||||
type-byweekno*, | ||||
type-bymonth*, | ||||
type-bysetpos*, | ||||
element wkst { type-weekday }?, | ||||
type-skip? | ||||
} | ||||
type-rscale = element rscale { | ||||
xsd:string | ||||
} | ||||
type-bymonth = element bymonth { | ||||
xsd:positiveInteger | | ||||
xsd:string | ||||
} | ||||
type-skip = element skip { | ||||
"YES" | | ||||
"BACKWARD" | | ||||
"FORWARD" | ||||
} | ||||
Authors' Addresses | ||||
Cyrus Daboo | Cyrus Daboo | |||
Apple Inc. | Apple Inc. | |||
1 Infinite Loop | 1 Infinite Loop | |||
Cupertino, CA 95014 | Cupertino, CA 95014 | |||
USA | USA | |||
Email: cyrus@daboo.name | Email: cyrus@daboo.name | |||
URI: http://www.apple.com/ | URI: http://www.apple.com/ | |||
Gregory Yakushev | Gregory Yakushev | |||
End of changes. 19 change blocks. | ||||
27 lines changed or deleted | 161 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |