.TITLE NNTP_HDR_PARSE_TBL - A simple parser of the RFC 822/821 header .IDENT /X-1/ ;++ ; FACILITY: NNTP Server for OpenVMS ; ; FUNCTIONAL DESCRIPTION: ; ; This module contains a parser table used by LIB$TPARSE routine to ; performs a header parsing and extracting a selected number of fields. ; ; ENVIRONMENT: VMS,DECThreads NNTP Server ; ; AUTHOR: Ruslan R. Laishev, CREATION-DATE: 1-APR-2001 ; ; MODIFIED BY: ; ; 2-MAR-2003 RRL Some fixes to recongizing "X-Path" and "Path" fields. ; 26-DEC-2003 RRL Added HT handling as CR and LF. ; 13-MAR-2005 RRL NNTP-Posting-Host -> X-NNTP-Posting-Host ;-- ; .PSECT IMPURE,WRT,NOEXE $TPADEF ;TParse stuff .LIBRARY /RFC822DEF.MLB/ .EXTRN HDR_PARSE_CPY CR = 13 LF = 10 HT = 9 .SBTTL Parser State Table RFC822DEF $INIT_STATE UFD_STATE,UFD_KEY $STATE START $TRAN CR, START $TRAN LF, START $TRAN HT, START $TRAN 'From', HDR_FROM $TRAN 'Newsgroups', HDR_GROUP $TRAN 'Subject', HDR_SUBJECT $TRAN 'Message', HDR_MESSID $TRAN 'Date', HDR_DATE $TRAN 'Path', HDR_PATH $TRAN 'Approved', HDR_APPROVED $TRAN 'Reply', HDR_REPLYTO $TRAN 'References', HDR_REFERENCES $TRAN 'Lines', HDR_LINES $TRAN 'X-NNTP-Posting-Host', HDR_POSTHOST $TRAN TPA$_ANY, SKIP $STATE SKIP $TRAN CR, START $TRAN LF, START $TRAN HT, START $TRAN TPA$_ANY, SKIP $TRAN TPA$_EOS, TPA$_EXIT ;++ ; Match a 'From:' field ;-- $STATE HDR_FROM $TRAN ':' $STATE $TRAN TPA$_BLANK $STATE $TRAN TPA$_ANY,START,HDR_PARSE_CPY,,,RFC822$K_FROM ;++ ; Match a 'Newsgroups:' field ;-- $STATE HDR_GROUP $TRAN ':' $STATE $TRAN TPA$_BLANK $STATE $TRAN TPA$_ANY,START,HDR_PARSE_CPY,,,RFC822$K_GROUP ;++ ; Match a 'Subject:' field ;-- $STATE HDR_SUBJECT $TRAN ':' $STATE $TRAN TPA$_BLANK $STATE $TRAN TPA$_ANY,START,HDR_PARSE_CPY,,,RFC822$K_SUBJECT ;++ ; Match a 'Message-ID:' field ;-- $STATE HDR_MESSID $TRAN '-' $STATE $TRAN 'I' $STATE $TRAN 'D' $STATE $TRAN ':' $STATE $TRAN TPA$_BLANK $STATE $TRAN TPA$_ANY,START,HDR_PARSE_CPY,,,RFC822$K_MESSID ;++ ; Match a 'Date:' field ;-- $STATE HDR_DATE $TRAN ':' $STATE $TRAN TPA$_BLANK $STATE $TRAN TPA$_ANY,START,HDR_PARSE_CPY,,,RFC822$K_DATE ;++ ; Match a 'Path:' field ;-- $STATE HDR_PATH $TRAN ':' $STATE $TRAN TPA$_BLANK $STATE $TRAN TPA$_ANY,START,HDR_PARSE_CPY,,,RFC822$K_PATH ;++ ; Match a 'Approved:' field ;-- $STATE HDR_APPROVED $TRAN ':' $STATE $TRAN TPA$_BLANK $STATE $TRAN TPA$_ANY,START,HDR_PARSE_CPY,,,RFC822$K_APPROVED ;++ ; Match a 'Reply-To:' field ;-- $STATE HDR_REPLYTO $TRAN '-' $STATE $TRAN 'T' $STATE $TRAN 'o' $STATE $TRAN ':' $STATE $TRAN TPA$_BLANK $STATE $TRAN TPA$_ANY,START,HDR_PARSE_CPY,,,RFC822$K_REPLYTO ;++ ; Match a 'References:' field ;-- $STATE HDR_REFERENCES $TRAN ':' $STATE $TRAN TPA$_BLANK $STATE $TRAN TPA$_ANY,START,HDR_PARSE_CPY,,,RFC822$K_REFERENCES ;++ ; Match a 'Lines:' field ;-- $STATE HDR_LINES $TRAN ':' $STATE $TRAN TPA$_BLANK $STATE $TRAN TPA$_ANY,START,HDR_PARSE_CPY,,,RFC822$K_LINES ;++ ; Match a 'X-NNTP-Posting-Host:' field ;-- $STATE HDR_POSTHOST $TRAN ':' $STATE $TRAN TPA$_BLANK $STATE $TRAN TPA$_ANY,START,HDR_PARSE_CPY,,,RFC822$K_POSTHOST $END_STATE .END