Subj : message-id
To   : All
From : andrew clarke
Date : Mon Oct 28 2002 03:24 pm

Document: message-id.txt
Version:  001
Date:     2002-10-28

                              Message-ID
            A new standard for unique message identifiers
                           October 28, 2002
                            andrew clarke
                         3:633/285.4@FidoNet
                          [email protected]


Status of this document
-----------------------

 This document is a FidoNet Standards Proposal (FSP).

 This document specifies an optional FidoNet standard protocol for
 the FidoNet community, and requests discussion and suggestions for
 improvements.

 This document is released to the public domain, and may be used,
 copied or modified for any purpose whatever.


Rationale
---------

FTS-9 MSGIDs are not unique enough to be accurately relied upon.  In
particular you the operator of a system runs the risk of generating
duplicate MSGIDs when using two or more different programs concurrently
that generate one, particularly when those programs use C's time(NULL)
function as a seed value to generate the hex value of the MSGID, which
is quite common.  time(NULL) can differ greatly between implementations.
There is also the chance of generating duplicate MSGIDs if the system
time is repeated, eg. switching from daylight saving time to normal
time.

To the author's knowledge the "no two messages from a given system may
have the same serial number within a three years" (sic) clause in FTS-9
has been largely ignored by implementation that perform duplicate
message detection based on the MSGIDs described by FTS-9.


Message-ID
----------

A Message-ID consists of

[\x01Message-ID:][space][YYYY][MM][DD][HH][MM][SS][RR...][space][address][newli
ne]

Where:

[\01Message-ID:] is the ASCII character 1 followed by the string,
"Message-ID:" (where the double-quotes are not part of the string).

[space] is the ASCII character 30.

[YYYY] is the current year.

[MM] is the current month.

[DD] is the current day.

[HH] is the current hour.

[MM] is the current minute.

[SS] is the current second.

[RR]... is a random alphanumeric sequence containing only the characters
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890" and
whose length may be between 2 and 20 characters.

[space] is the ASCII character 30.

[address] is the origination address of the message.

[newline] is the ASCII character 13.

This format is similar to that used in Internet mail.


General
-------

If a Message-ID is to be generated, all the information listed above
must be present.  The year must contain the century.  The month, day,
hour, minute and second must have a leading zero if their values are
less than 10.  The year, month, day, hour, minute and second must be in
decimal.  The Message-ID control line should be placed before the text
body of the message in which it appears.  An existing Message-ID line
should never be stripped from a message passing through an intermediate
system.  No system should ever add a Message-ID or modify an existing
Message-ID contained in a message not originating on that system.

Implementations that perform dupe-checking must perform their
comparisons on the entire string from the first [space] until the
[newline].

Implementations that generate a Message-ID may also optionally generate
a MSGID conforming to the FTS-9 standard for systems that do not
recognise the Message-ID.


Example
-------

An example of a valid Message-ID control line is as follows:

\01Message-ID: 20021028011631AHh7j12h91j1 3:633/285.4@fidonet

--- Msged/NT 6.1.1
* Origin: Blizzard of Ozz, Mt Eliza, Victoria, Australia (3:633/285.4)