David MacQuigg wrote:
At 01:24 AM 2/23/2005 +0100, Alex wrote:
Trace headers have a long history... Are you sure this
is "new" ?
Using Received: headers is certainly a possibility,
[snip]
RFC2822 defines the Received header as follows:
received = "Received:" name-val-list ";" date-time CRLF
I can't find anything further on the details of the
name-val-list. Has this been formalized in some other
document?
I assume the reason people developed new headers like
Received-SPF was to avoid these problems.
-- Dave
Do you mean these lines on pp 28 of RFC2822?
----------------------------------------------------------------------
received = "Received:" name-val-list ";" date-time CRLF
name-val-list = [CFWS] [name-val-pair *(CFWS name-val-pair)]
name-val-pair = item-name CFWS item-value
item-name = ALPHA *(["-"] (ALPHA / DIGIT))
item-value = 1*angle-addr / addr-spec /
atom / domain / msg-id
----------------------------------------------------------------------
name-val-list is defined on the line below the definition of
'received'
These definitions seem to be a variation on BNF.
Please see, "What is BNF notation?";
http://cui.unige.ch/db-research/Enseignement/analyseinfo/AboutBNF.html
... and also "Backus Normal Form vs. Backus Naur Form";
http://spirit.sourceforge.net/dl_docs/bnf.html
BTW, BNF is also associated with giving a formal definition of a
computer programming language ... and therefore also the formal
definition (we compiler writers call them 'specs') of the
compiler for that computer language.
BNF is also used to define command lines.
Some of the terms here are defined elsewhere in this document
... you might want to read 'chapter 3. Syntax' instead of
relying 100% on my 'off the cuff' explanation.
AFAIK, this is how to read the definitions in RFC2822 ...
"something" is the literal 'something'
CFWS is comment folding whitespace
FWS is folding white space
date-time is obvious
CRLF is an end of line symbol
something inside a pair of square brackets [] is optional
something inside *() can occur 1 or more times
something inside [*()] can occur 0 or more times
forward slash "/" is a choice ...
i.e. A / B ... either format, A or B is valid
ALPHA is any letter (A to Z, a to z)... plus some others
... anyway they are defined in 'Chapter 3 SYNTAX'
DIGIT is an single digit (0 to 9)
Thus the structure ALPHA *(["-"] (ALPHA / DIGIT)) means that
a valid token must begin with a letter and may be followed
by any number or combination of letters, dash, or digits.
At this point you should be able to read what is there.
If not, please feel free ask again.
--
Martin G. Diehl
http://www.renderosity.com/gallery.ez?ByArtist=Yes&Artist=MGD
Reality: That which remains after you stop thinking about it.
inspired by P. K. Dick