| rfc9585.original.xml | rfc9585.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="US-ASCII"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE rfc> | ||||
| <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | ||||
| <!-- used by XSLT processors --> | ||||
| <?rfc strict="yes" ?> | ||||
| <?rfc toc="yes"?> | ||||
| <?rfc tocdepth="4"?> | ||||
| <?rfc symrefs="yes"?> | ||||
| <?rfc sortrefs="yes" ?> | ||||
| <?rfc compact="yes" ?> | ||||
| <?rfc subcompact="no" ?> | ||||
| <?rfc private="Dovecot" ?> | ||||
| <rfc category="std" docName="draft-ietf-extra-imap-inprogress-06" | <!DOCTYPE rfc [ | |||
| ipr="trust200902" consensus="true" submissionType="IETF" | <!ENTITY nbsp " "> | |||
| xml:lang="en" version="3" xmlns:xi="http://www.w3.org/2001/XInclude"> | <!ENTITY zwsp "​"> | |||
| <!ENTITY nbhy "‑"> | ||||
| <!ENTITY wj "⁠"> | ||||
| ]> | ||||
| <front><!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> | <rfc category="std" docName="draft-ietf-extra-imap-inprogress-06" number="9585" updates="" obsoletes="" ipr="trust200902" consensus="true" submissionType="IETF" tocInclude="true" xml:lang="en" version="3" xmlns:xi="http://www.w3.org/2001/XI nclude" symRefs="true" sortRefs="true"> | |||
| <title abbrev="IMAP4 Response Code for Command Progress"> | <front> | |||
| IMAP4 Response Code for Command Progress Notifications. | <title abbrev="IMAP Response Code for Command Progress">IMAP Response | |||
| </title> | Code for Command Progress Notifications</title> | |||
| <seriesInfo name="Internet-Draft" value="draft-ietf-extra-imap-inprogress-06"/> | <seriesInfo name="RFC" value="9585"/> | |||
| <author fullname="Marco Bettini" initials="M." surname="Bettini"> | <author fullname="Marco Bettini" initials="M." surname="Bettini"> | |||
| <organization>Open-Xchange Oy</organization> | <organization>Open-Xchange Oy</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>Lars Sonckin kaari 10</street> | <street>Lars Sonckin kaari 10</street> | |||
| <code>02600</code> | <code>02600</code> | |||
| <city>Espoo</city> | <city>Espoo</city> | |||
| <country>Finland</country> | <country>Finland</country> | |||
| </postal> | </postal> | |||
| <email>marco.bettini@open-xchange.com</email> | <email>marco.bettini@open-xchange.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date/> | <date month="May" year="2024"/> | |||
| <area>ART</area> | <area>ART</area> | |||
| <workgroup>EXTRA</workgroup> | <workgroup>extra</workgroup> | |||
| <keyword>IMAP</keyword> | ||||
| <keyword>response code</keyword> | ||||
| <abstract> | <keyword>IMAP</keyword> | |||
| <t> | <keyword>response code</keyword> | |||
| This document defines a new IMAP untagged response code, "INPROGRESS", | ||||
| that provides structured numeric progress status indication for | ||||
| long-running commands. | ||||
| </t> | ||||
| </abstract> | ||||
| </front><!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> | <abstract> | |||
| <middle><!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> | <t>This document defines a new IMAP untagged response code, | |||
| "INPROGRESS", that provides progress notifications regarding the status | ||||
| of long-running commands. | ||||
| </t> | ||||
| </abstract> | ||||
| <section title="Introduction"> | </front> | |||
| <t> | <middle> | |||
| Internet Message Access Protocol (IMAP) <xref target="RFC9051"/> commands | ||||
| <section> | ||||
| <name>Introduction</name> | ||||
| <t> | ||||
| IMAP commands <xref target="RFC9051"/> | ||||
| can require a considerable amount of time to be completed by the server. | can require a considerable amount of time to be completed by the server. | |||
| In these cases, the client has no information about the progress of the | In these cases, the client has no information about the progress of the | |||
| commands. It is already possible to expose updates with a generic untagged | commands. It is already possible to expose updates with a generic untagged | |||
| response, like "* OK Still on it, 57% done"; however, this does not provide | response, like "* OK Still on it, 57% done"; however, this does not provide | |||
| a standard way to communicate with the client and allow it to inform the | a standard way to communicate with the client and does not allow the server | |||
| user of the progress of the long-running actions. | to inform the client of the progress of the long-running actions. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This document extends the Internet Message Access Protocol (IMAP) | This document extends the Internet Message Access Protocol (IMAP) | |||
| <xref target="RFC9051"/> with: | <xref target="RFC9051"/> with: | |||
| </t> | </t> | |||
| <ul> | <ul> | |||
| <li>a new "INPROGRESS" response code <xref target="RFC5530"/>. | <li>a new "INPROGRESS" response code <xref target="RFC5530"/>. | |||
| The new response code provides consistent means for a client to receive a | The new response code provides a consistent means for a client to receive | |||
| progress update notifications on command completion status.</li> | progress notifications on command completion status.</li> | |||
| <li>a new "INPROGRESS" capability <xref target="RFC9051"/>. | <li>a new "INPROGRESS" capability <xref target="RFC9051"/>. | |||
| The new capability informs the client that the server emits progress | The new capability informs the client that the server emits progress | |||
| update notifications, via the "INPROGRESS" response code</li> | notifications via the "INPROGRESS" response code.</li> | |||
| </ul> | </ul> | |||
| </section> | </section> | |||
| <section title="Conventions Used in This Document"> | <section> | |||
| <t> | <name>Conventions Used in This Document</name> | |||
| "Conventions" are basic principles or procedures. Document conventions are | ||||
| noted in this section. | <t> | |||
| </t> | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
| <t> | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14> | |||
| The key words | ", | |||
| "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | |||
| "<bcp14>REQUIRED</bcp14>", | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
| "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | be | |||
| "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | interpreted as described in BCP 14 <xref target="RFC2119"/> <xref | |||
| "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" | target="RFC8174"/> when, and only when, they appear in all capitals, as | |||
| in this document are to be interpreted as described in BCP 14 | shown here. | |||
| <xref target="RFC2119"/> <xref target="RFC8174"/> | </t> | |||
| when, and only when, they appear in all capitals, as shown here. | ||||
| </t> | ||||
| <t> | <t> | |||
| The word "can" (not "may") is used to refer to a possible | The word "can" (not "may") is used to refer to a possible | |||
| circumstance or situation, as opposed to an optional facility of the | circumstance or situation, as opposed to an optional facility of the | |||
| protocol. | protocol. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Conventions for notations are as in <xref target="RFC9051"/> and | Conventions for notations are as in <xref target="RFC9051"/> and | |||
| <xref target="RFC5530"/>. | <xref target="RFC5530"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In examples, "C:" and "S:" indicate lines sent by the client and | In examples, "C:" and "S:" indicate lines sent by the client and | |||
| server, respectively. Note that each line includes the terminating CRLF. | server, respectively. Note that each line includes the terminating CRLF. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="CAPABILITY Identification"> | <section> | |||
| <t> | <name>CAPABILITY Identification</name> | |||
| <t> | ||||
| IMAP servers that support this extension <bcp14>MUST</bcp14> include | IMAP servers that support this extension <bcp14>MUST</bcp14> include | |||
| "INPROGRESS" in the response list to the CAPABILITY command. | "INPROGRESS" in the response list to the CAPABILITY command. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="The "INPROGRESS" Response Code"> | <section> | |||
| <name>The "INPROGRESS" Response Code</name> | ||||
| <t> | <t> | |||
| The server <bcp14>MAY</bcp14> send the "INPROGRESS" Response Code to notify | The server <bcp14>MAY</bcp14> send the "INPROGRESS" response code to notify | |||
| the client about the progress of the commands in execution, or simply to | the client about the progress of the commands in execution or simply to | |||
| prevent the client from timing out and terminating the connection. | prevent the client from timing out and terminating the connection. | |||
| The notifications <bcp14>MAY</bcp14> be sent for any IMAP command. | The notifications <bcp14>MAY</bcp14> be sent for any IMAP command. | |||
| If the server elects to send notifications, it is <bcp14>RECOMMENDED</bcp14> | If the server elects to send notifications, it is <bcp14>RECOMMENDED</bcp14> | |||
| that these are sent every 10-15 seconds. | that these are sent every 10-15 seconds. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The response code is meant to appear embedded inside an untagged OK reply. | The response code is meant to appear embedded inside an untagged OK reply. | |||
| The response code <bcp14>MUST NOT</bcp14> appear in a tagged response | The response code <bcp14>MUST NOT</bcp14> appear in a tagged response | |||
| (the command has completed and further progress notifications make no sense). | (the command has completed and further progress notifications make no sense). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The response code <bcp14>MAY</bcp14> embed a list of details, composed | The response code <bcp14>MAY</bcp14> embed a list of details, which appear | |||
| in order of: | in the following order: | |||
| </t> | </t> | |||
| <ol> | <ol> | |||
| <li>CMD-TAG: the cmd-tag <xref target="RFC9051"/> that originated the | <li>CMD-TAG: the tag <xref target="RFC9051"/> that originated the | |||
| long-running command. If the tag is not available, or if it contains | long-running command. If the tag is not available or if it contains | |||
| the "]" character, it <bcp14>MUST</bcp14> be set to NIL. This still | the "]" character, it <bcp14>MUST</bcp14> be set to NIL. This still | |||
| produces a usable notification, unless multiple commands are in flight | produces a usable notification, unless multiple commands are in flight | |||
| simultaneously. A client can ensure reception of notifications with | simultaneously. A client can ensure reception of notifications with | |||
| cmd-tag(s) by simply refraining from the use of character "]" in the | tags by simply refraining from the use of the character "]" in the | |||
| originating command tags. | originating command tags. | |||
| </li> | </li> | |||
| <li>PROGRESS: a number indicating the number of items processed so far. | <li>PROGRESS: a number indicating the number of items processed so far. | |||
| The number <bcp14>MUST</bcp14> be non-negative and <bcp14>SHOULD</bcp14> | The number <bcp14>MUST</bcp14> be non-negative and <bcp14>SHOULD</bcp14> | |||
| be monotonically increasing. | be monotonically increasing. | |||
| If the PROGRESS is not available, both PROGRESS and GOAL <bcp14>MUST</bcp14> | If the PROGRESS is not available, both PROGRESS and GOAL <bcp14>MUST</bcp14> | |||
| be set to NIL. | be set to NIL. | |||
| </li> | </li> | |||
| <li>GOAL: a number indicating the total number of items to be processed. | <li>GOAL: a number indicating the total number of items to be processed. | |||
| The number <bcp14>MUST</bcp14> be positive and it <bcp14>SHOULD NOT</bcp14> | The number <bcp14>MUST</bcp14> be positive, and it <bcp14>SHOULD NOT</bcp14> | |||
| change between successive notifications for the same command (i.e. for | change between successive notifications for the same command tag. | |||
| the same cmd-tag). This is the number that PROGRESS is expected to reach | This is the number that PROGRESS is expected to reach | |||
| after the completion of the command and therefore it <bcp14>MUST</bcp14> be | after the completion of the command; therefore, it <bcp14>MUST</bcp14> be | |||
| strictly greater than PROGRESS. If the GOAL is not known, it | greater than PROGRESS. If the GOAL is not known, it | |||
| <bcp14>MUST</bcp14> be set to NIL.</li> | <bcp14>MUST</bcp14> be set to NIL.</li> | |||
| </ol> | </ol> | |||
| <t> | <t> | |||
| If the response code does not embed a list of details, all details are to | If the response code does not embed a list of details, all details are to | |||
| be interpreted as NIL. | be interpreted as NIL. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The server can provide the progress notification details with different | The server can provide the progress details with different | |||
| degrees of completeness: | degrees of completeness: | |||
| </t> | </t> | |||
| <sourcecode> | <sourcecode> | |||
| - bare keepalive | - bare keepalive | |||
| * OK [INPROGRESS] Hang in there.. | * OK [INPROGRESS] Hang in there... | |||
| - keepalive with an indication of the command tag | - keepalive with an indication of the command tag | |||
| * OK [INPROGRESS ("tag" NIL NIL)] Hang in there.. | * OK [INPROGRESS ("tag" NIL NIL)] Hang in there... | |||
| - progress indication with unknown GOAL | - progress notification with unknown GOAL | |||
| * OK [INPROGRESS ("tag" 175 NIL)] Processed 175 items so far | * OK [INPROGRESS ("tag" 175 NIL)] Processed 175 items so far | |||
| progress <span class="insert">notification</span> with unknown GOAL | - progress notification with an indication of the GOAL | |||
| - progress indication with the indication of the GOAL | ||||
| * OK [INPROGRESS ("tag" 175 1000)] Processed 17% of the items | * OK [INPROGRESS ("tag" 175 1000)] Processed 17% of the items | |||
| progress <span class="insert">notification</span> with <span class="insert">an< /span> indication of the GOAL | ||||
| </sourcecode> | </sourcecode> | |||
| <t> | <t> | |||
| Examples: | Examples: | |||
| </t> | </t> | |||
| <sourcecode> | <sourcecode> | |||
| C: A001 search text "this will be slow" | C: A001 search text "this will be slow" | |||
| [13 seconds later] | [13 seconds later] | |||
| S: * OK [INPROGRESS ("A001" 454 1000)] Processed 45% of the items | S: * OK [INPROGRESS ("A001" 454 1000)] Processed 45% of the items | |||
| [14 seconds later] | [14 seconds later] | |||
| skipping to change at line 211 ¶ | skipping to change at line 206 ¶ | |||
| [14 seconds later] | [14 seconds later] | |||
| S: * OK [INPROGRESS ("A003" 1388 2001)] Still working on this... | S: * OK [INPROGRESS ("A003" 1388 2001)] Still working on this... | |||
| [14 seconds later] | [14 seconds later] | |||
| S: * OK [INPROGRESS ("A003" 1876 2001)] Still working on this... | S: * OK [INPROGRESS ("A003" 1876 2001)] Still working on this... | |||
| [9 seconds later] | [9 seconds later] | |||
| S: A003 OK Copy completed | S: A003 OK Copy completed | |||
| </sourcecode> | </sourcecode> | |||
| <t> | <t> | |||
| PROGRESS and GOAL <bcp14>SHOULD</bcp14> be counts of the kind of item | PROGRESS and GOAL <bcp14>SHOULD</bcp14> be counts of the kind of item | |||
| being processed - in most cases, messages counts. If that is not possible, | being processed -- in most cases, messages counts. If that is not possible, | |||
| the counts <bcp14>SHOULD</bcp14> be percentages, with goal set to 100 | the counts <bcp14>SHOULD</bcp14> be percentages, with GOAL set to 100 | |||
| and progress varying between 0 and 99. | and PROGRESS varying between 0 and 99. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The server <bcp14>SHOULD NOT</bcp14> send a progress notification where | The server <bcp14>SHOULD NOT</bcp14> send a progress notification where | |||
| PROGRESS equals GOAL, as that would mean the command is completed. | PROGRESS equals GOAL, as that would mean the command is completed. | |||
| In that case, the proper tagged response should be emitted instead. | In that case, the proper tagged response should be emitted instead. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the command completes before the first server notification deadline, | If the command completes before the first server notification deadline, | |||
| there will be no notifications at all. The client <bcp14>MUST</bcp14> | there will be no notifications at all. The client <bcp14>MUST</bcp14> | |||
| assume PROGRESS to be 0 and GOAL to be unknown until the server issues a | assume PROGRESS to be 0 and GOAL to be unknown until the server issues a | |||
| notification for the command. | notification for the command. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| While the server <bcp14>SHOULD</bcp14> keep GOAL constant and PROGRESS | While the server <bcp14>SHOULD</bcp14> keep GOAL constant and PROGRESS | |||
| monotonically increasing, there are circumstances where this might not | monotonically increasing, there are circumstances where this might not | |||
| be possible. The client <bcp14>MUST</bcp14> be prepared to handle cases | be possible. The client <bcp14>MUST</bcp14> be prepared to handle cases | |||
| where the server cannot keep GOAL constant and/or PROGRESS monotonically | where the server cannot keep GOAL constant and/or PROGRESS monotonically | |||
| increasing. When the GOAL changes or the PROGRESS goes backward, the | increasing. When the GOAL changes or the PROGRESS goes backward, the | |||
| <bcp14>RECOMMENDED</bcp14> interpretation is that the previous GOAL has | <bcp14>RECOMMENDED</bcp14> interpretation is that the previous GOAL has | |||
| been reached, but the server discovered that further (long-running) work | been reached, but the server discovered that further (long-running) work | |||
| is required (either with known or unknown new GOAL), | is required (with a new known or unknown GOAL). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The client <bcp14>MAY</bcp14> disregard progress notifications entirely or | The client <bcp14>MAY</bcp14> disregard progress notifications entirely or | |||
| process them only in relation to specific commands. If a User Interface is | process them only in relation to specific commands. If a user interface is | |||
| involved, it is the client's duty to decide which of these commands are blocking | involved, it is the client's duty to decide which of these | |||
| on the user experience, since this may differ based on implementation details. | notifications should emerge to the user interface and/or modify the user's | |||
| ability to interact in their presence, since this may differ based on | ||||
| implementation details. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| Also, the client <bcp14>MUST NOT</bcp14> consider the values to be authoritative | Also, the client <bcp14>MUST NOT</bcp14> consider the values to be authoritative | |||
| for any other use than evaluating the progress of the commands. | for any other use than evaluating the progress of the commands. | |||
| E.g.: the client must not use the GOAL field in place of the proper output of a | For example, the client must not use the GOAL field in place of the proper outpu t of a | |||
| SEARCH command to know the number of messages in a folder. | SEARCH command to know the number of messages in a folder. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Formal Syntax"> | <section> | |||
| <name>Formal Syntax</name> | ||||
| <t> | <t> | |||
| The following syntax specification uses the Augmented Backus-Naur Form | The following syntax specification uses the Augmented Backus-Naur Form | |||
| (ABNF) <xref target="RFC5234"/> notation. Elements not defined here can | (ABNF) <xref target="RFC5234"/> notation. Elements not defined here can | |||
| be found in the formal syntax of the ABNF <xref target="RFC5234"/> and IMAP | be found in the formal syntax of the ABNF <xref target="RFC5234"/> and IMAP | |||
| <xref target="RFC9051"/> specifications. | <xref target="RFC9051"/> specifications. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Except as noted otherwise, all alphabetic characters are case-insensitive. | Except as noted otherwise, all alphabetic characters are case-insensitive. | |||
| The use of uppercase or lowercase characters to define token strings are | The use of uppercase or lowercase characters to define token strings are | |||
| for editorial clarity only. Implementations <bcp14>MUST</bcp14> accept | for editorial clarity only. Implementations <bcp14>MUST</bcp14> accept | |||
| these strings in a case-insensitive fashion. | these strings in a case-insensitive fashion. | |||
| </t> | </t> | |||
| <sourcecode> | <sourcecode type="abnf"> | |||
| inprogress-tag = quoted / nil | inprogress-tag = quoted / nil | |||
| inprogress-state-unknown = nil SP nil | inprogress-state-unknown = nil SP nil | |||
| inprogress-state-counting = number SP nil | inprogress-state-counting = number SP nil | |||
| inprogress-state-known-goal = number SP nz-number | inprogress-state-known-goal = number SP nz-number | |||
| inprogress-state = inprogress-state-unknown | inprogress-state = inprogress-state-unknown | |||
| / inprogress-state-counting | / inprogress-state-counting | |||
| / inprogress-state-known-goal | / inprogress-state-known-goal | |||
| resp-text-code =/ "INPROGRESS" [ SP "(" inprogress-tag SP | resp-text-code =/ "INPROGRESS" [ SP "(" inprogress-tag SP | |||
| inprogress-state ")" ] | inprogress-state ")" ] | |||
| </sourcecode> | </sourcecode> | |||
| </section> | </section> | |||
| <section title="Security Considerations"> | <section> | |||
| <name>Security Considerations</name> | ||||
| <t> | <t> | |||
| The details of the response code are not expected to disclose any information | The details of the response code are not expected to disclose any information | |||
| that isn't currently available from the command output. The progress details | that isn't currently available from the command output. The progress details | |||
| could be obtained anyway by sending a series of commands with different | could be obtained anyway by sending a series of commands with different | |||
| workloads - either by constructing data sets or searching in the appropriate | workloads -- by either constructing data sets or searching in the appropriate | |||
| way. | way. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The client must protect itself against data sent by a malicious server. | The client must protect itself against data sent by a malicious server. | |||
| Specifically, the client should guard against values that can cause arithmetic | Specifically, the client should guard against values that can cause arithmetic | |||
| exceptions, like GOAL = 0, GOAL/VALUE < 0, GOAL/VALUE >= 2^32 | exceptions, like GOAL = 0, GOAL/VALUE < 0, GOAL/VALUE ≥ 2<sup>32</sup> | |||
| (these are not possible within a correct implementation of the ABNF syntax | (these are not possible within a correct implementation of the ABNF syntax | |||
| above), and VALUE > GOAL. In these cases, the notification <bcp14>MUST</bcp14 > | above), and VALUE > GOAL. In these cases, the notification <bcp14>MUST</bcp14 > | |||
| be disregarded. | be disregarded. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="IANA Considerations"> | <section> | |||
| <name>IANA Considerations</name> | ||||
| <t> | <t> | |||
| IANA is requested to add "INPROGRESS" to the "IMAP Response Codes" registry | IANA has added "INPROGRESS" to the "IMAP Response Codes" registry | |||
| located at <https://www.iana.org/assignments/imap-response-codes>, | located at <eref target="https://www.iana.org/assignments/imap-response-codes | |||
| " brackets="angle"/>, | ||||
| with a reference to this document. | with a reference to this document. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| IANA is requested to add "INPROGRESS" to the "IMAP Capabilities" registry | IANA had added "INPROGRESS" to the "IMAP Capabilities" registry | |||
| located at <https://www.iana.org/assignments/imap-capabilities>, | located at <eref target="https://www.iana.org/assignments/imap-capabilities" | |||
| brackets="angle"/>, | ||||
| with a reference to this document. | with a reference to this document. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </middle><!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> | </middle> | |||
| <back><!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> | <back> | |||
| <references title="Normative References"> | <references> | |||
| <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.2119.xm | <name>Normative References</name> | |||
| l"/> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xm | |||
| <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.5234.xm | l"/> | |||
| l"/> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5234.xm | |||
| <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.5530.xm | l"/> | |||
| l"/> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5530.xm | |||
| <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8174.xm | l"/> | |||
| l"/> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xm | |||
| <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.9051.xm | l"/> | |||
| l"/> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9051.xm | |||
| l"/> | ||||
| </references> | </references> | |||
| <!-- | </back> | |||
| <references title="Informative References"> | ||||
| </references> | ||||
| </back><!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> | ||||
| </rfc> | </rfc> | |||
| End of changes. 45 change blocks. | ||||
| 129 lines changed or deleted | 130 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||