typedef int bool; #define true 1 #define false 0 Parray Phostname{ Pstring_SE(:"/[. ]/":) [] : Psep('.') && Pterm(Pnosep); }; Punion client_t { Pip ip; /- 135.207.23.32 Phostname host; /- www.research.att.com }; Punion auth_id_t { Pchar unauthorized : unauthorized == '-'; Pstring(:' ':) id; }; Penum method_t { GET, PUT, POST, HEAD, DELETE, LINK, UNLINK }; Pstruct version_t { "HTTP/"; Puint8 major; '.'; Puint8 minor; }; bool chkVersion(version_t v, method_t m) { if ((v.major == 1) && (v.minor == 0)) return true; if ((m == LINK) || (m == UNLINK)) return false; return true; }; Pstruct request_t { '\"'; method_t meth; ' '; Pstring(:' ':) req_uri; ' '; version_t version : chkVersion(version, meth); '\"'; }; Ptypedef Puint16_FW(:3:) response_t : response_t x => { 100 <= x && x < 600}; Punion length_t { Pchar unavailable : unavailable == '-'; Puint32 len; }; Precord Pstruct entry_t { client_t client; ' '; auth_id_t remoteID; ' '; auth_id_t auth; " ["; Pdate(:']':) date; "] "; request_t request; ' '; response_t response; ' '; length_t length; }; Psource Parray clt_t { entry_t []; }