draft-ietf-imapext-thread-01.txt   draft-ietf-imapext-thread-02.txt 
IMAP Extensions Working Group M. Crispin IMAP Extensions Working Group M. Crispin
Internet Draft: IMAP THREAD K. Murchison Internet Draft: IMAP THREAD K. Murchison
Document: internet-drafts/draft-ietf-imapext-thread-01.txt August 2000 Document: internet-drafts/draft-ietf-imapext-thread-02.txt August 2000
INTERNET MESSAGE ACCESS PROTOCOL - THREAD EXTENSION INTERNET MESSAGE ACCESS PROTOCOL - THREAD EXTENSION
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 RFC 2026. all provisions of Section 10 of RFC 2026.
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
skipping to change at page 1, line 34 skipping to change at page 1, line 34
The list of current Internet-Drafts can be accessed at The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt http://www.ietf.org/ietf/1id-abstracts.txt
To view the list Internet-Draft Shadow Directories, see To view the list Internet-Draft Shadow Directories, see
http://www.ietf.org/shadow.html. http://www.ietf.org/shadow.html.
A revised version of this draft document will be submitted to the RFC A revised version of this draft document will be submitted to the RFC
editor as a Proposed Standard for the Internet Community. editor as a Proposed Standard for the Internet Community.
Discussion and suggestions for improvement are requested, and should Discussion and suggestions for improvement are requested, and should
be sent to ietf-imapext@IMC.ORG. This document will expire before 10 be sent to ietf-imapext@IMC.ORG. This document will expire before 1
January 2001. Distribution of this memo is unlimited. March 2001. Distribution of this memo is unlimited.
Abstract Abstract
This document describes the server-based threading extension to the This document describes the server-based threading extension to the
IMAP4rev1 protocol. This extension provides substantial performance IMAP4rev1 protocol. This extension provides substantial performance
improvements for IMAP clients which offer threaded views. improvements for IMAP clients which offer threaded views.
A server which supports this extension indicates this with more or A server which supports this extension indicates this with more or
more capability names consisting of "THREAD=" followed by a supported more capability names consisting of "THREAD=" followed by a supported
threading algorithm name as described in this document. This threading algorithm name as described in this document. This
skipping to change at page 6, line 24 skipping to change at page 6, line 24
current message if either of the following criteria are current message if either of the following criteria are
true: true:
The current message is a dummy and the one in the The current message is a dummy and the one in the
table is not, OR table is not, OR
The message in the table is a reply or forward (its The message in the table is a reply or forward (its
original subject contains a subj-refwd part and/or a original subject contains a subj-refwd part and/or a
"(fwd)" subj-trailer) and the current message is not. "(fwd)" subj-trailer) and the current message is not.
[OPTIONAL REPLACEMENT FOR CRITERION ABOVE] The message
in the table is a deeper reply or forward than the
current message (its original subject contains more
subj-refwd and "(fwd)" subj-trailer parts).
(C) Merge threads with the same subject. For each message (C) Merge threads with the same subject. For each message
under the root: under the root:
(i) Find the subject of this thread as in step 4.B.i (i) Find the subject of this thread as in step 4.B.i
above. above.
(ii) Lookup the message associated with this extracted (ii) Lookup the message associated with this extracted
subject in the table. subject in the table.
(iii) If the message in the table is the current message, (iii) If the message in the table is the current message,
skipping to change at page 7, line 10 skipping to change at page 7, line 5
If the message in the table is a dummy and the current If the message in the table is a dummy and the current
message is not, make the current message a child of message is not, make the current message a child of
the message in the table (a sibling of it's children). the message in the table (a sibling of it's children).
If the current message is a reply or forward and the If the current message is a reply or forward and the
message in the table is not, make the current message message in the table is not, make the current message
a child of the message in the table (a sibling of it's a child of the message in the table (a sibling of it's
children). children).
[OPTIONAL REPLACEMENT FOR RULE ABOVE] If the current
message is a deeper reply or forward than the one in
the table (its original subject contains more
subj-refwd and "(fwd)" subj-trailer parts), make the
current message a child of the message in the table (a
sibling of it's children).
Otherwise, create a new dummy container and make both Otherwise, create a new dummy container and make both
messages children of the dummy, and replace the messages children of the dummy, and replace the
message in the table with the dummy message. message in the table with the dummy message.
(5) Traverse the messages under the root and sort each set of (5) Traverse the messages under the root and sort each set of
siblings by date. siblings by date. In the case of an exact match on date, use
the order in which they appear in the mailbox (that is, by
sequence number) to determine the order. In the case of a
dummy message (which can occur with top-level siblings), use
the first child for sorting.
Example: C: A283 THREAD ORDEREDSUBJECT UTF-8 SINCE 5-MAR-2000 Example: C: A283 THREAD ORDEREDSUBJECT UTF-8 SINCE 5-MAR-2000
S: * THREAD (166)(167)(168)(169)(172)(170)(171) S: * THREAD (166)(167)(168)(169)(172)(170)(171)
(173)(174 175 176 178 181 180)(179)(177 183 (173)(174 175 176 178 181 180)(179)(177 183
182 188 184 185 186 187 189)(190)(191)(192) 182 188 184 185 186 187 189)(190)(191)(192)
(193)(194 195)(196 197 198)(199)(200 202)(201) (193)(194 195)(196 197 198)(199)(200 202)(201)
(203)(204)(205)(206 207)(208) (203)(204)(205)(206 207)(208)
S: A283 OK THREAD completed S: A283 OK THREAD completed
C: A284 THREAD ORDEREDSUBJECT US-ASCII TEXT "gewp" C: A284 THREAD ORDEREDSUBJECT US-ASCII TEXT "gewp"
S: * THREAD S: * THREAD
skipping to change at page 8, line 14 skipping to change at page 8, line 14
Additional Responses Additional Responses
This response is an extension to the IMAP4rev1 base protocol. This response is an extension to the IMAP4rev1 base protocol.
The section heading of this response is intended to correspond with The section heading of this response is intended to correspond with
where it would be located in the main document. where it would be located in the main document.
7.2.THREAD. THREAD Response 7.2.THREAD. THREAD Response
Data: one or more threads Data: zero or more threads
The THREAD response occurs as a result of a THREAD or UID THREAD The THREAD response occurs as a result of a THREAD or UID THREAD
command. It contains one or more threads. A thread consists of a command. It contains zero or more threads. A thread consists of
parenthesized list of thread members. a parenthesized list of thread members.
Thread members consist of one or more message numbers, delimited Thread members consist of zero or more message numbers, delimited
by spaces, indicating successive parent and child. This continues by spaces, indicating successive parent and child. This continues
until the thread splits into multiple sub-threads, at which point until the thread splits into multiple sub-threads, at which point
the thread nests into multiple sub-threads with the first member the thread nests into multiple sub-threads with the first member
of each subthread being siblings at this level. There is no limit of each subthread being siblings at this level. There is no limit
to the nesting of threads. to the nesting of threads.
The messages numbers refer to those messages that match the search The messages numbers refer to those messages that match the search
criteria. For THREAD, these are message sequence numbers; for UID criteria. For THREAD, these are message sequence numbers; for UID
THREAD, these are unique identifiers. THREAD, these are unique identifiers.
skipping to change at page 10, line 7 skipping to change at page 10, line 7
\-- 44 \-- 44
\-- 7 \-- 7
\-- 96 \-- 96
Example: S: * THREAD ((3)(5)) Example: S: * THREAD ((3)(5))
In this example, 3 and 5 are siblings of a parent which does not In this example, 3 and 5 are siblings of a parent which does not
exist in the mailbox; however they are members of the same thread. exist in the mailbox; however they are members of the same thread.
Formal Syntax of THREAD commands and Responses Formal Syntax of THREAD commands and Responses
thread-data = "THREAD" SP 1*thread-list thread-data = "THREAD" [SP 1*thread-list]
thread-list = "(" thread-members / thread-nested ")" thread-list = "(" thread-members / thread-nested ")"
thread-members = nz-number *(SP nz-number) [SP thread-nested] thread-members = nz-number *(SP nz-number) [SP thread-nested]
thread-nested = 2*thread-list thread-nested = 2*thread-list
thread = ["UID" SP] "THREAD" SP thread-algorthm thread = ["UID" SP] "THREAD" SP thread-algorthm
SP search-charset 1*(SP search-key) SP search-charset 1*(SP search-key)
 End of changes. 

This html diff was produced by rfcdiff 1.23, available from http://www.levkowetz.com/ietf/tools/rfcdiff/