U if @sddlZddlZddlZddlmZddlmZddlmZ ddlm Z ddlm Z e dZ e e dBZe d Zee BZee d Zee d Zee d Be d Zee BZee d BZee BZee dZddhZeeBZddZedejejBZGdddeZ Gddde Z!Gddde Z"Gddde Z#Gddde Z$Gddde!Z%Gd d!d!e Z&Gd"d#d#e Z'Gd$d%d%e Z(Gd&d'd'e Z)Gd(d)d)e)Z*Gd*d+d+e!Z+Gd,d-d-e Z,Gd.d/d/e Z-Gd0d1d1e Z.Gd2d3d3e Z/Gd4d5d5e Z0Gd6d7d7e Z1Gd8d9d9e Z2Gd:d;d;e Z3Gdd?d?e Z5Gd@dAdAe Z6GdBdCdCe Z7GdDdEdEe Z8GdFdGdGe Z9GdHdIdIe Z:GdJdKdKe Z;GdLdMdMe#ZGdRdSdSe Z?GdTdUdUe Z@GdVdWdWe@ZAGdXdYdYe ZBGdZd[d[e ZCGd\d]d]e ZDGd^d_d_e ZEGd`dadae ZFGdbdcdceFZGGdddedeeFZHGdfdgdge ZIGdhdidie ZJGdjdkdke ZKGdldmdmeKZLGdndodoeLZMGdpdqdqe ZNGdrdsdseOZPGdtduduePZQGdvdwdwePZRGdxdydyeQZSGdzd{d{e jTZUeRd d|ZVeRd}d~ZWeRddZXedYdZe j[Z\edYe]dZej^Z_edj`ZaedYe]dZej^ZbedYe]dZej^ZcedYe]dZej^ZdddZeddZfddZgddZhddZiddZjddZkddZlddZmddZnddZoddZpddZqddZrddZsddZtddZuddZvddZwddZxddZyddZzddZ{ddZ|ddZ}ddZ~ddZddZddZddZdd„ZddĄZddƄZddȄZddʄZdd̄Zdd΄ZddЄZdd҄ZddԄZddքZdd؄ZddڄZdd܄ZddބZddZddZddZddZddZddZddZddZddZddZddZddZddZdS)N) hexdigits) itemgetter)_encoded_words)errors)utilsz (z ()<>@,:;.\"[].z."(z/?=z*'%%  cCs dt|dddddS)N"\\\z\")strreplacevaluer?/opt/alt/python38/lib64/python3.8/email/_header_value_parser.py quote_stringbsrz =\? # literal =? [^?]* # charset \? # literal ? [qQbB] # literal 'q' or 'b', case insensitive \? # literal ? .*? # encoded word \?= # literal ?= cseZdZdZdZdZfddZddZfddZe d d Z e d d Z d dZ e ddZ e ddZddZdddZdddZdddZZS) TokenListNTcstj||g|_dSN)super__init__defects)selfargskw __class__rrr{szTokenList.__init__cCsddd|DS)Ncss|]}t|VqdSrr.0xrrr sz$TokenList.__str__..joinrrrr__str__szTokenList.__str__csd|jjtSNz{}({})formatr__name__r__repr__r(rrrr.s zTokenList.__repr__cCsddd|DS)Nr css|]}|jr|jVqdSrrr"rrrr%sz"TokenList.value..r&r(rrrrszTokenList.valuecCstdd|D|jS)Ncss|] }|jVqdSr) all_defectsr"rrrr%sz(TokenList.all_defects..)sumrr(rrrr/szTokenList.all_defectscCs |dSNr)startswith_fwsr(rrrr2szTokenList.startswith_fwscCstdd|DS)Ncss|] }|jVqdSr) as_ew_allowed)r#partrrrr%sz*TokenList.as_ew_allowed..)allr(rrrr3szTokenList.as_ew_allowedcCsg}|D]}||jq|Sr)extendcomments)rr7tokenrrrr7szTokenList.commentscCs t||dS)Npolicy)_refold_parse_treerr:rrrfoldszTokenList.foldr cCst|j|ddS)Nindent)printppstrrr?rrrpprintszTokenList.pprintcCsd|j|dS)Nr r>)r'_pprBrrrrAszTokenList.ppstrccszd||jj|jV|D]4}t|ds:|d|Vq||dEdHq|jrdd|j}nd}d||VdS)Nz{}{}/{}(rDz* !! invalid element in token list: {!r}z z Defects: {}r z{}){})r,rr- token_typehasattrrDr)rr?r8ZextrarrrrDs  z TokenList._pp)r )r )r )r- __module__ __qualname__rEsyntactic_breakew_combine_allowedrr)r.propertyrr/r2r3r7r=rCrArD __classcell__rrrrrus&        rc@s$eZdZeddZeddZdS)WhiteSpaceTokenListcCsdSN rr(rrrrszWhiteSpaceTokenList.valuecCsdd|DS)NcSsg|]}|jdkr|jqS)comment)rEcontentr"rrr s z0WhiteSpaceTokenList.comments..rr(rrrr7szWhiteSpaceTokenList.commentsN)r-rGrHrKrr7rrrrrMs rMc@seZdZdZdS)UnstructuredTokenList unstructuredNr-rGrHrErrrrrSsrSc@seZdZdZdS)PhrasephraseNrUrrrrrVsrVc@seZdZdZdS)WordZwordNrUrrrrrXsrXc@seZdZdZdS)CFWSListcfwsNrUrrrrrYsrYc@seZdZdZdS)AtomatomNrUrrrrr[sr[c@seZdZdZdZdS)Tokenr8FN)r-rGrHrEZ encode_as_ewrrrrr]sr]c@seZdZdZdZdZdZdS) EncodedWord encoded-wordN)r-rGrHrEctecharsetlangrrrrr^sr^c@s4eZdZdZeddZeddZeddZdS) QuotedString quoted-stringcCs"|D]}|jdkr|jSqdSNbare-quoted-stringrErrr$rrrrQs zQuotedString.contentcCs>g}|D]*}|jdkr&|t|q||jqd|S)Nrfr )rEappendrrr')rresr$rrr quoted_values  zQuotedString.quoted_valuecCs"|D]}|jdkr|jSqdSrergrr8rrrstripped_values zQuotedString.stripped_valueN)r-rGrHrErKrQrkrmrrrrrcs  rcc@s$eZdZdZddZeddZdS)BareQuotedStringrfcCstddd|DS)Nr css|]}t|VqdSrr!r"rrrr%sz+BareQuotedString.__str__..)rr'r(rrrr)szBareQuotedString.__str__cCsddd|DS)Nr css|]}t|VqdSrr!r"rrrr%sz)BareQuotedString.value..r&r(rrrrszBareQuotedString.valueN)r-rGrHrEr)rKrrrrrrnsrnc@s8eZdZdZddZddZeddZedd Zd S) CommentrPcs(dtdgfddDdgggS)Nr rcsg|]}|qSr)quoter"r(rrrRsz#Comment.__str__..))r'r0r(rr(rr) szComment.__str__cCs2|jdkrt|St|ddddddS)NrPr rrz\(rqz\))rErr)rrrrrrps z Comment.quotecCsddd|DS)Nr css|]}t|VqdSrr!r"rrrr%sz"Comment.content..r&r(rrrrQszComment.contentcCs|jgSr)rQr(rrrr7szComment.commentsN) r-rGrHrEr)rprKrQr7rrrrro s roc@s4eZdZdZeddZeddZeddZdS) AddressListz address-listcCsdd|DS)NcSsg|]}|jdkr|qS)addressrEr"rrrrR)s z)AddressList.addresses..rr(rrr addresses'szAddressList.addressescCstdd|DgS)Ncss|]}|jdkr|jVqdSrsNrE mailboxesr"rrrr%-s z(AddressList.mailboxes..r0r(rrrrx+s zAddressList.mailboxescCstdd|DgS)Ncss|]}|jdkr|jVqdSrvrE all_mailboxesr"rrrr%2s z,AddressList.all_mailboxes..ryr(rrrr{0s zAddressList.all_mailboxesN)r-rGrHrErKrurxr{rrrrrr#s  rrc@s4eZdZdZeddZeddZeddZdS) AddressrscCs|djdkr|djSdS)NrgrouprE display_namer(rrrr:szAddress.display_namecCs4|djdkr|dgS|djdkr*gS|djSNrmailboxinvalid-mailboxrwr(rrrrx?s  zAddress.mailboxescCs:|djdkr|dgS|djdkr0|dgS|djSrrzr(rrrr{Gs   zAddress.all_mailboxesN)r-rGrHrErKrrxr{rrrrr|6s  r|c@s(eZdZdZeddZeddZdS) MailboxList mailbox-listcCsdd|DS)NcSsg|]}|jdkr|qS)rrtr"rrrrRUs z)MailboxList.mailboxes..rr(rrrrxSszMailboxList.mailboxescCsdd|DS)NcSsg|]}|jdkr|qS))rrrtr"rrrrRYs z-MailboxList.all_mailboxes..rr(rrrr{WszMailboxList.all_mailboxesNr-rGrHrErKrxr{rrrrrOs  rc@s(eZdZdZeddZeddZdS) GroupList group-listcCs |r|djdkrgS|djSNrrrwr(rrrrxaszGroupList.mailboxescCs |r|djdkrgS|djSrrzr(rrrr{gszGroupList.all_mailboxesNrrrrrr]s  rc@s4eZdZdZeddZeddZeddZdS) Groupr}cCs|djdkrgS|djSNrrwr(rrrrxrszGroup.mailboxescCs|djdkrgS|djSrrzr(rrrr{xszGroup.all_mailboxescCs |djSr1)rr(rrrr~szGroup.display_nameN)r-rGrHrErKrxr{rrrrrrns  rc@sLeZdZdZeddZeddZeddZedd Zed d Z d S) NameAddr name-addrcCst|dkrdS|djSNr)lenrr(rrrrs zNameAddr.display_namecCs |djSN local_partr(rrrrszNameAddr.local_partcCs |djSrdomainr(rrrrszNameAddr.domaincCs |djSr)router(rrrrszNameAddr.routecCs |djSr addr_specr(rrrrszNameAddr.addr_specN r-rGrHrErKrrrrrrrrrrs    rc@s@eZdZdZeddZeddZeddZedd Zd S) AngleAddrz angle-addrcCs"|D]}|jdkr|jSqdSN addr-spec)rErrhrrrrs zAngleAddr.local_partcCs"|D]}|jdkr|jSqdSrrErrhrrrrs zAngleAddr.domaincCs"|D]}|jdkr|jSqdS)N obs-route)rEdomainsrhrrrrs zAngleAddr.routecCs<|D]2}|jdkr|jr"|jSt|j|jSqdS)Nrz<>)rErrrrhrrrrs   zAngleAddr.addr_specN) r-rGrHrErKrrrrrrrrrs   rc@seZdZdZeddZdS)ObsRoutercCsdd|DS)NcSsg|]}|jdkr|jqSrrr"rrrrRs z$ObsRoute.domains..rr(rrrrszObsRoute.domainsN)r-rGrHrErKrrrrrrsrc@sLeZdZdZeddZeddZeddZedd Zed d Z d S) MailboxrcCs|djdkr|djSdSNrrr~r(rrrrszMailbox.display_namecCs |djSr1rr(rrrrszMailbox.local_partcCs |djSr1rr(rrrrszMailbox.domaincCs|djdkr|djSdSr)rErr(rrrrsz Mailbox.routecCs |djSr1rr(rrrrszMailbox.addr_specNrrrrrrs    rc@s,eZdZdZeddZeZZZZ dS)InvalidMailboxrcCsdSrrr(rrrrszInvalidMailbox.display_nameNrrrrrrs rcs(eZdZdZdZefddZZS)DomainrFcsdtjSNr r'rrsplitr(rrrrsz Domain.domain)r-rGrHrEr3rKrrLrrrrrsrc@seZdZdZdS)DotAtomdot-atomNrUrrrrrsrc@seZdZdZdZdS) DotAtomTextz dot-atom-textTNr-rGrHrEr3rrrrrsrc@seZdZdZdZdS) NoFoldLiteralzno-fold-literalFNrrrrrrsrc@sDeZdZdZdZeddZeddZeddZed d Z d S) AddrSpecrFcCs |djSr1rr(rrrr szAddrSpec.local_partcCst|dkrdS|djS)Nr)rrr(rrrrs zAddrSpec.domaincCs<t|dkr|djS|dj|dj|djS)Nrrrr)rrrstriplstripr(rrrrs  zAddrSpec.valuecCsLt|j}t|t|tkr*t|j}n|j}|jdk rH|d|jS|S)N@)setrr DOT_ATOM_ENDSrr)rZnamesetZlprrrrs   zAddrSpec.addr_specN) r-rGrHrEr3rKrrrrrrrrrs   rc@seZdZdZdZdS) ObsLocalPartzobs-local-partFNrrrrrr(srcs4eZdZdZdZeddZefddZZS) DisplayNamez display-nameFcCst|}t|dkr|jS|djdkr4|dn*|ddjdkr^t|ddd|d<|djdkrv|n*|ddjdkrt|ddd|d<|jS)NrrZrr)rrrrEpop)rrjrrrr3s   zDisplayName.display_namecsd}|jrd}n|D]}|jdkrd}qt|dkr|rd}}|djdks`|ddjdkrdd}|djdks|ddjdkrd}|t|j|StjSdS) NFTrdrr rZrOr)rrErrrrr)rrpr$ZpreZpostrrrrDs   zDisplayName.value) r-rGrHrErJrKrrrLrrrrr.s  rc@s,eZdZdZdZeddZeddZdS) LocalPartz local-partFcCs&|djdkr|djS|djSdS)Nrrd)rErkrr(rrrr]s zLocalPart.valuecCstg}t}d}|dtgD]}|jdkr,q|r\|jdkr\|djdkr\t|dd|d<t|t}|r|jdkr|djdkr|t|ddn |||d}|}qt|dd}|jS)NFrrZdotrr)DOTrEr isinstancerir)rrjZlastZ last_is_tltokZis_tlrrrrds(     zLocalPart.local_partN)r-rGrHrEr3rKrrrrrrrXs  rcs4eZdZdZdZefddZeddZZS) DomainLiteralzdomain-literalFcsdtjSrrr(rrrrszDomainLiteral.domaincCs"|D]}|jdkr|jSqdS)Nptextrgrhrrrips zDomainLiteral.ip) r-rGrHrEr3rKrrrLrrrrr|s rc@seZdZdZdZdZdS) MIMEVersionz mime-versionN)r-rGrHrEmajorminorrrrrrsrc@s4eZdZdZdZdZdZeddZeddZ dS) Parameter parameterFus-asciicCs|jr|djSdSr) sectionednumberr(rrrsection_numberszParameter.section_numbercCsf|D]\}|jdkr|jS|jdkr|D]4}|jdkr*|D] }|jdkr<|jSqsrc@seZdZdZdZdZdS)ContentTransferEncodingzcontent-transfer-encodingFZ7bitN)r-rGrHrEr3r`rrrrrDsrc@seZdZdZdZdS) HeaderLabelz header-labelFNrrrrrrJsrc@seZdZdZdZddZdS)MsgIDzmsg-idFcCst||jSr)rlinesepr<rrrr=Ssz MsgID.foldN)r-rGrHrEr3r=rrrrrOsrc@seZdZdZdS) MessageIDz message-idNrUrrrrrXsrc@seZdZdZdS)InvalidMessageIDzinvalid-message-idNrUrrrrr\src@seZdZdZdS)HeaderheaderNrUrrrrr`srcsreZdZdZdZdZfddZfddZddZe dd Z dfd d Z d dZ e ddZ ddZZS)TerminalTcst||}||_g|_|Sr)r__new__rEr)clsrrErrrrrnszTerminal.__new__csd|jjtSr*r+r(rrrr.tszTerminal.__repr__cCst|jjd|jdS)N/)r@rr-rEr(rrrrCwszTerminal.pprintcCs t|jSr)listrr(rrrr/zszTerminal.all_defectsr c s2d||jj|jt|js"dn d|jgS)Nz {}{}/{}({}){}r z {})r,rr-rErr.rrBrrrrD~sz Terminal._ppcCsdSrrr(rrrpop_trailing_wsszTerminal.pop_trailing_wscCsgSrrr(rrrr7szTerminal.commentscCst||jfSr)rrEr(rrr__getnewargs__szTerminal.__getnewargs__)r )r-rGrHr3rJrIrr.rCrKr/rDrr7rrLrrrrrhs     rc@s eZdZeddZddZdS)WhiteSpaceTerminalcCsdSrNrr(rrrrszWhiteSpaceTerminal.valuecCsdS)NTrr(rrrr2sz!WhiteSpaceTerminal.startswith_fwsNr-rGrHrKrr2rrrrrs rc@s eZdZeddZddZdS) ValueTerminalcCs|Srrr(rrrrszValueTerminal.valuecCsdS)NFrr(rrrr2szValueTerminal.startswith_fwsNrrrrrrs rc@s eZdZeddZddZdS)EWWhiteSpaceTerminalcCsdSrrr(rrrrszEWWhiteSpaceTerminal.valuecCsdSrrr(rrrr)szEWWhiteSpaceTerminal.__str__N)r-rGrHrKrr)rrrrrs rc@s eZdZdS)_InvalidEwErrorN)r-rGrHrrrrrsrr,list-separatorrzroute-component-markerz([{}]+)r z[^{}]+z[\x00-\x20\x7F]cCs>t|}|r|jt|t|r:|jtddS)Nz*Non-ASCII characters found in header token)_non_printable_finderrrirZNonPrintableDefectrrr)xtextZnon_printablesrrr_validate_xtexts  r cCst|d^}}g}d}d}tt|D]L}||dkrJ|rDd}d}nd}q&|rTd}n|||krdq||||q&|d}d|d||dg||fS)NrFr Tr ) _wsp_splitterrangerrir')rendcharsZfragment remainderZvcharsescapehad_qpposrrr_get_ptext_to_endcharss$   rcCs.|}t|dt|t|d}||fS)Nfws)rrr)rZnewvaluerrrrget_fwssrc Cst}|ds td||dddd^}}||ddkrXtd|d|}t|dkr|dtkr|dtkr| ddkr|dd^}}|d|}t|dkr|j t d ||_ d|}ztd|d\}}}} Wn*ttfk r*td |j YnX||_||_|j | |r|dtkrrt|\} }| | qDt|d^} }t| d } t| | | d|}qD|r|dtkr|j t d ||fS) N=?z"expected encoded word but found {}rz?=rr r?zwhitespace inside encoded wordz!encoded word format invalid: '{}'vtextz.missing trailing whitespace after encoded-word)r^ startswithrHeaderParseErrorr,rr'rrcountrrirr`_ewr ValueErrorKeyErrorrrarbr6WSPrr rr ) rZewrrZremstrrestrrarbrr8charsrrrrget_encoded_wordsd                r"cCsFt}|rB|dtkr0t|\}}||qd}|drzt|\}}Wn,tk rfd}Yntjk rzYnrXd}t |dkr|dj dkr|j t dd}|rt |dkr|d j d krt |dd|d<||qt|d^}}|rt|r|d^}}t|d }t|||d |}q|S) NrTrFrrz&missing whitespace before encoded wordrr_rr )rSrrrirr"rrrrrErrrr rfc2047_matchersearch partitionrr r')rrTr8valid_ewZhave_wsrrrrrrget_unstructuredAsJ          r(cCs*t|d\}}}t|d}t|||fS)Nz()r)rrr rr_rrr get_qp_ctexts  r+cCs*t|d\}}}t|d}t|||fS)Nr r)rrr r)rrr get_qcontents  r,cCsNt|}|std||}|t|d}t|d}t|||fS)Nzexpected atext but found '{}'atext)_non_atom_end_matcherrrr,r}rrr )rmr-rrr get_atexts r0cCsr|ddkrtd|t}|dd}|rT|ddkrTt|\}}|||rB|ddkrB|dtkrt|\}}n|dddkr*d}z&t|\}}|j t dd }Wn"tjk rt|\}}YnX|r6t |dkr6|d j d kr6|d j d kr6t |d d |d <n t|\}}||qT|sb|j t d||fS||ddfS)Nrr zexpected '"' but found '{}'rrrFz!encoded word inside quoted stringTrrr#r_z"end of header inside quoted string)rrr,rnr,rirrr"rrrrEr)rZbare_quoted_stringr8r'rrrget_bare_quoted_stringsL            r1cCs|r |ddkr td|t}|dd}|r|ddkr|dtkr\t|\}}n&|ddkrvt|\}}n t|\}}||q2|s|j t d||fS||ddfS)Nrrzexpected '(' but found '{}'rrqzend of header inside comment) rrr,rorr get_commentr+rirr)rrPr8rrrr2s&      r2cCsPt}|rH|dtkrH|dtkr0t|\}}n t|\}}||q||fSr1)rY CFWS_LEADERrrr2ri)rrZr8rrrget_cfwss   r4cCspt}|r,|dtkr,t|\}}||t|\}}|||rh|dtkrht|\}}||||fSr1)rcr3r4rir1)rZ quoted_stringr8rrrget_quoted_strings      r5cCst}|r,|dtkr,t|\}}|||rL|dtkrLtd||drzt |\}}Wqtjk rt |\}}YqXn t |\}}|||r|dtkrt|\}}||||fS)Nrzexpected atom but found '{}'r) r[r3r4ri ATOM_ENDSrrr,rr"r0)rr\r8rrrget_atoms&       r7cCst}|r|dtkr&td||rt|dtkrtt|\}}|||r&|ddkr&|t|dd}q&|dtkrtdd|||fS)Nrz8expected atom at a start of dot-atom-text but found '{}'rrrz4expected atom at end of dot-atom-text but found '{}')rr6rrr,r0rir)rZ dot_atom_textr8rrrget_dot_atom_text2s     r8cCst}|dtkr(t|\}}|||drhzt|\}}Wqttjk rdt|\}}YqtXn t|\}}|||r|dtkrt|\}}||||fS)Nrr) rr3r4rirr"rrr8)rZdot_atomr8rrr get_dot_atomEs        r9cCs|dtkrt|\}}nd}|s,td|ddkrFt|\}}n*|dtkrdtd|n t|\}}|dk r|g|dd<||fS)Nrz5Expected 'atom' or 'quoted-string' but found nothing.r z1Expected 'atom' or 'quoted-string' but found '{}')r3r4rrr5SPECIALSr,r7)rleaderr8rrrget_word^s"    r<cCst}zt|\}}||Wn(tjk rH|jtdYnX|r|dtkr|ddkr|t|jt d|dd}qJzt|\}}WnDtjk r|dt krt |\}}|jt dnYnX||qJ||fS)Nzphrase does not start with wordrrzperiod in 'phrase'rzcomment found without atom) rVr<rirrrr PHRASE_ENDSrObsoleteHeaderDefectr3r4)rrWr8rrr get_phrases4           r?c Csvt}d}|dtkr"t|\}}|s6td|zt|\}}Wn^tjk rzt|\}}Wn6tjk r|ddkr|dtkrt }YnXYnX|dk r|g|dd<| ||r4|ddks|dtkr4t t ||\}}|j dkr|j tdn|j td||d<z|jdWn(tk rl|j tdYnX||fS) Nrz"expected local-part but found '{}'r invalid-obs-local-partzrencoderZNonASCIILocalPartDefect)rrr;r8obs_local_partrrrget_local_partsJ         rEcCst}d}|r(|ddks*|dtkr(|ddkrj|rL|jtd|td}|dd}q nD|ddkr|t|dd|dd}|jtd d}q |r|d jd kr|jtd zt |\}}d}Wn4tj k r|dt kr t |\}}YnX||q |djd ksX|djd krj|djd krj|jtd|d jd ks|d jd kr|djd kr|jtd|jrd|_||fS)NFrr rzinvalid repeated '.'Trmisplaced-specialz/'\' character outside of quoted-string/ccontentrrzmissing '.' between wordsrZz!Invalid leading '.' in local partr#z"Invalid trailing '.' in local partr@) rr=rrirrrrrEr<rr3r4)rrDZlast_non_ws_was_dotr8rrrrBsj                  rBcCs@t|d\}}}t|d}|r0|jtdt|||fS)Nz[]rz(quoted printable found in domain-literal)rrrrirr>r )rrrrrr get_dtexts   rGcCs,|rdS|td|tdddS)NFz"end of input inside domain-literal]domain-literal-endT)rirrr)rdomain_literalrrr_check_for_early_dl_endsrKcCsjt}|dtkr(t|\}}|||s6td|ddkrRtd||dd}t||rp||fS|tdd|dt krt |\}}||t |\}}||t||r||fS|dt krt |\}}||t||r||fS|ddkrtd||tdd |dd}|rb|dtkrbt|\}}||||fS) Nrzexpected domain-literal[z6expected '[' at start of domain-literal but found '{}'rzdomain-literal-startrHz4expected ']' at end of domain-literal but found '{}'rI) rr3r4rirrr,rKrrrrG)rrJr8rrrget_domain_literalsH                    rMcCsrt}d}|dtkr"t|\}}|s6td||ddkrvt|\}}|dk rd|g|dd<||||fSzt|\}}Wn"tjk rt |\}}YnX|r|ddkrtd|dk r|g|dd<|||rj|ddkrj|j t d|dj dkr*|d|dd<|rj|ddkrj|t t |d d\}}||q*||fS) Nrzexpected domain but found '{}'rLrzInvalid Domainrz(domain is not a dot-atom (contains CFWS)rr)rr3r4rrr,rMrir9r7rr>rEr)rrr;r8rrr get_domain?sD         rNcCs|t}t|\}}|||r,|ddkrF|jtd||fS|tddt|dd\}}||||fS)Nrrz#addr-spec local part with no domainaddress-at-symbolr)rrErirrrrrN)rrr8rrr get_addr_speces    rPcCst}|rj|ddks"|dtkrj|dtkrFt|\}}||q|ddkr|t|dd}q|rz|ddkrtd||tt |dd\}}|||r>|ddkr>|t|dd}|sq>|dtkrt|\}}|||ddkr|tt |dd\}}||q|sNtd|ddkrltd||t dd ||ddfS) Nrrrrz(expected obs-route domain but found '{}'z%end of header while parsing obs-route:z4expected ':' marking end of obs-route but found '{}'zend-of-obs-route-marker) rr3r4ri ListSeparatorrrr,RouteComponentMarkerrNr)rZ obs_router8rrr get_obs_routeusF               rTc Cst}|dtkr(t|\}}|||r8|ddkrHtd||tdd|dd}|ddkr|tdd|jt d|dd}||fSzt |\}}Wnztjk r0z"t |\}}|jt d Wn(tjk rtd |YnX||t |\}}YnX|||r^|ddkr^|dd}n|jt d |tdd|r|dtkrt|\}}||||fS) Nrzangle-addr-endznull addr-spec in angle-addrz*obsolete route specification in angle-addrz.expected addr-spec or obs-route but found '{}'z"missing trailing '>' on angle-addr) rr3r4rirrr,rrrrPrTr>)rZ angle_addrr8rrrget_angle_addrsT                rWcCs<t}t|\}}||dd|jdd|_||fSr)rr?r6r)rrr8rrrget_display_names  rXcCst}d}|dtkr6t|\}}|s6td||ddkr|dtkr^td|t|\}}|s~td||dk r|g|ddd<d}||t |\}}|dk r|g|dd<||||fS)Nrz!expected name-addr but found '{}'rU) rr3r4rrr,r=rXrirW)rZ name_addrr;r8rrr get_name_addrs6        rYc Cst}zt|\}}WnNtjk rdzt|\}}Wn&tjk r^td|YnXYnXtdd|jDrd|_| |||fS)Nzexpected mailbox but found '{}'css|]}t|tjVqdSr)rrrr"rrrr%szget_mailbox..r) rrYrrrPr,anyr/rEri)rrr8rrr get_mailboxs  r[cCsdt}|r\|d|kr\|dtkrD|t|dd|dd}qt|\}}||q||fS)NrrFr)rr=rirr?)rrZinvalid_mailboxr8rrrget_invalid_mailboxs    r\cCst}|r|ddkrzt|\}}||Wntjk r<d}|dtkrt|\}}|rv|ddkr|||jtdn@t |d\}}|dk r|g|dd<|||jt dnb|ddkr|jtdnBt |d\}}|dk r|g|dd<|||jt dYnX|r|ddkr|d}d|_ t |d\}}| ||jt d|r|ddkr|t |d d}q||fS) Nr;z,;zempty element in mailbox-listzinvalid mailbox in mailbox-listrrrr)rr[rirrr3r4rr>r\rrEr6rR)rZ mailbox_listr8r;rrrrget_mailbox_list sX                 r^cCst}|s$|jtd||fSd}|r|dtkrt|\}}|sl|jtd||||fS|ddkr||||fSt|\}}t|j dkr|dk r||| ||jt d||fS|dk r|g|dd<||||fS)Nzend of header before group-listrzend of header in group-listr]zgroup-list with empty entries) rrrirrr3r4r^rr{r6r>)rZ group_listr;r8rrrget_group_listYs>           r_cCs t}t|\}}|r"|ddkr2td||||tdd|dd}|r|ddkr|tdd||ddfSt|\}}|||s|jt dn|ddkrtd ||tdd|dd}|r|dt krt |\}}||||fS) NrrQz8expected ':' at end of group display name but found '{}'zgroup-display-name-terminatorrr]zgroup-terminatorzend of header in groupz)expected ';' at end of group but found {}) rrXrrr,rirr_rrr3r4)rr}r8rrr get_group~s8          r`c Csxt}zt|\}}WnNtjk rdzt|\}}Wn&tjk r^td|YnXYnX||||fS)Nzexpected address but found '{}')r|r`rrr[r,ri)rrsr8rrr get_addresss rac Cst}|rzt|\}}||Wn tjk rH}zd}|dtkrt|\}}|rj|ddkr|||jtdnFt |d\}}|dk r|g|dd<|t |g|jt dnh|ddkr|jtdnHt |d\}}|dk r|g|dd<|t |g|jt dW5d}~XYnX|r|ddkr|dd}d|_ t |d\}}| ||jt d|r|tdd|d d}q||fS) Nrrz"address-list entry with no contentzinvalid address in address-listzempty element in address-listrrrr)rrrarirrr3r4rr>r\r|rrEr6r)rZ address_listr8errr;rrrrget_address_listsX              rccCst}|std||ddkr6td||tdd|dd}t|\}}|||rx|ddkrtd||tdd ||ddfS) Nz'expected no-fold-literal but found '{}'rrLz;expected '[' at the start of no-fold-literal but found '{}'zno-fold-literal-startrrHz9expected ']' at the end of no-fold-literal but found '{}'zno-fold-literal-end)rrrr,rirrG)rZno_fold_literalr8rrrget_no_fold_literals.    rdcCst}|r,|dtkr,t|\}}|||r<|ddkrLtd||tdd|dd}zt|\}}Wn`tjk rz"t |\}}|j t dWn&tjk rtd|YnXYnX|||r|ddkr@|j t d |r8|dd kr8|td d |dd}||fS|tdd |dd}zt|\}}Wntjk rzt |\}}Wnrtjk r}zPz"t|\}}|j t d Wn(tjk rtd|YnXW5d}~XYnXYnX|||r6|dd kr6|dd}n|j t d|td d |r|dtkrt|\}}||||fS)NrrUzexpected msg-id but found '{}'z msg-id-startrzobsolete id-left in msg-idz4expected dot-atom-text or obs-id-left but found '{}'rzmsg-id with no id-rightrVz msg-id-endrOzobsolete id-right in msg-idzFexpected dot-atom-text, no-fold-literal or obs-id-right but found '{}'zmissing trailing '>' on msg-id)rr3r4rirrr,rr8rBrr>rrdrN)rZmsg_idr8errr get_msg_ids~             "    rfc Cst}zt|\}}||WnLtjk rl}z,t|}t|}|jtd |W5d}~XYnX|r|jtd ||S)NzInvalid msg-id: {!r}zUnexpected {!r}) rrfrirrr(rrrr,)rZ message_idr8Zexrrrparse_message_idKs  rgcCst}|s |jtd|S|dtkrXt|\}}|||sX|jtdd}|r|ddkr|dtkr||d7}|dd}q\|s|jtd ||t |dnt ||_ |t |d |r|dtkrt|\}}|||r|ddkrT|j dk r:|jtd |rP|t |d|S|t dd |dd}|r|dtkrt|\}}|||s|j dk r|jtd |Sd}|r|dtkr||d7}|dd}q|s*|jtd ||t |dnt ||_ |t |d |rn|dtkrnt|\}}|||r|jtd |t |d|S)Nz%Missing MIME version number (eg: 1.0)rz0Expected MIME version number but found only CFWSr rrz1Expected MIME major version number but found {!r}r digitsz0Incomplete MIME version; found only major numberzversion-separatorz1Expected MIME minor version number but found {!r}z'Excess non-CFWS text after MIME version)rrrirHeaderMissingRequiredValuer3r4isdigitrr,rintrr)rZ mime_versionr8rhrrrparse_mime_versiongs                        rlcCsdt}|r\|ddkr\|dtkrD|t|dd|dd}qt|\}}||q||fS)Nrr]rFr)rr=rirr?)rZinvalid_parameterr8rrrget_invalid_parameters    rmcCsNt|}|std||}|t|d}t|d}t|||fS)Nzexpected ttext but found '{}'ttext)_non_token_end_matcherrrr,r}rrr )rr/rnrrr get_ttexts  rpcCst}|r,|dtkr,t|\}}|||rL|dtkrLtd|t|\}}|||r|dtkrt|\}}||||fSNrzexpected token but found '{}') r]r3r4ri TOKEN_ENDSrrr,rp)rZmtokenr8rrr get_tokens       rscCsNt|}|std||}|t|d}t|d}t|||fS)Nz expected attrtext but found {!r}r)_non_attribute_end_matcherrrr,r}rrr rr/rrrr get_attrtexts  rvcCst}|r,|dtkr,t|\}}|||rL|dtkrLtd|t|\}}|||r|dtkrt|\}}||||fSrq) rr3r4riATTRIBUTE_ENDSrrr,rvrrr8rrr get_attributes       rycCsNt|}|std||}|t|d}t|d}t|||fS)Nz)expected extended attrtext but found {!r}extended-attrtext)#_non_extended_attribute_end_matcherrrr,r}rrr rurrrget_extended_attrtext s r|cCst}|r,|dtkr,t|\}}|||rL|dtkrLtd|t|\}}|||r|dtkrt|\}}||||fSrq) rr3r4riEXTENDED_ATTRIBUTE_ENDSrrr,r|rxrrrget_extended_attribute# s      r~cCst}|r|ddkr&td||tdd|dd}|rR|dsbtd|d}|r|dr||d7}|dd}qf|ddkr|dkr|jtd t ||_ |t|d ||fS) Nr*zExpected section but found {}zsection-markerrz$Expected section number but found {}r 0z'section number has an invalid leading 0rh) rrrr,rirrjrZInvalidHeaderErrorrkr)rrrhrrr get_section9 s,     rcCst}|stdd}|dtkr0t|\}}|sDtd||ddkr^t|\}}n t|\}}|dk r|g|dd<||||fS)Nz&Expected value but found end of stringrz Expected value but found only {}r ) rrrr3r4r,r5r~ri)rvr;r8rrr get_valueW s"      rc Cst}t|\}}|||r,|ddkrL|jtd|||fS|ddkrz t|\}}d|_||Wntj k rYnX|st d|ddkr|t dd|dd}d|_ |dd krt d |t d d |dd}d}|r,|dt kr,t |\}}||d}|}|j rF|rF|dd krFt|\}}|j}d }|jdkr|r|ddkrd}n$t|\}} | r| ddkrd}n(zt|\}} Wn Yn X| sd}|r0|jtd|||D](} | jdkrg| dd<| }q*q|}nd}|jtd|r`|ddkr`d}n t|\}}|j r|jdkr|r|ddkr|||dk r|}||fS|jtd|s|jtd|||dkr||fSn|dk r@|D]} | jdkr q$q | jdk|| | j|_|ddkr^t d||t dd|dd}|r|ddkrt|\}}|||j|_|r|ddkrt d||t dd|dd}|dk rdt} |r^|dtkrt|\}}n2|dd krDt d d}|dd}n t|\}}| |q| }n t|\}}|||dk r|}||fS)Nrr]z)Parameter contains name ({}) but no valuerTzIncomplete parameterzextended-parameter-markerr=zParameter not followed by '='parameter-separatorr F'z5Quoted string value for extended parameter is invalidrfzZParameter marked as extended but appears to have a quoted string value that is non-encodedzcApparent initial-extended-value but attribute was not marked as extended or was not initial sectionz(Missing required charset/lang delimitersrzrz=Expected RFC2231 char/lang encoding delimiter, but found {!r}zRFC2231-delimiterz;Expected RFC2231 char/lang encoding delimiter, but found {}ZDQUOTE)rryrirrrr,rrrrrr3r4r5rmrrvr|rErrrarbrrrr,) rrr8r;rZappendtoZqstringZ inner_valueZ semi_validr trrrr get_parameterm s                                             rc Csjt}|rfzt|\}}||Wntjk r}zd}|dtkrVt|\}}|sp|||WYxS|ddkr|dk r|||jtdn@t |\}}|r|g|dd<|||jtd |W5d}~XYnX|rD|ddkrD|d}d|_ t |\}}| ||jtd ||r|t dd|d d}q|S) Nrr]zparameter entry with no contentzinvalid parameter {!r}rrz)parameter with invalid trailing text {!r}rr)rrrirrr3r4rrrmr,rEr6r)rZmime_parametersr8rbr;rrrrparse_mime_parameters sJ               rcCs|rV|ddkrV|dtkr>|t|dd|dd}qt|\}}||q|s^dS|tdd|t|dddS)Nrr]rFrr)r=rirr?r)Z tokenlistrr8rrr_find_mime_parameters/ s   rc Cst}d}|s$|jtd|Szt|\}}Wn<tjk rp|jtd|t |||YSX|||r|ddkr|jtd|rt |||S|j |_ |tdd|dd}zt|\}}Wn>tjk r*|jtd |t |||YSX|||j |_|sP|S|dd kr|jtd ||` |`t |||S|td d |t|dd|S) NFz"Missing content type specificationz(Expected content maintype but found {!r}rrzInvalid content typezcontent-type-separatorrz'Expected content subtype but found {!r}r]zt| } |s| jdkrt |  }n t |  }z| ||} Wn6t k rtd d | jDrd } nd} d }YnX| jd krt| |||q>|r|s| js~d}d}| jr~| j|ddt|j } |j| kr~t| |t|dkrlt|}|||d| 7<q>t| dst| | } nt| |||| j| }d}q>t| |t|dkr|d| 7<q>| jr$t| d|kr$t|}|s| r$||| d}q>t| ds\t| }| jsR|d7}|||| } q>| jr||s|| d| d }q>t|}|s| r||| q>|d| 7<q>|j||jS)Nutf-8rr rFwrap_as_ew_blockedrrcss|]}t|tjVqdSr)rrrr"rrrr% sz%_refold_parse_tree.. unknown-8bitTrr9rrC)Zmax_line_lengthsysmaxsizeutf8rrrrrE SPECIALSNL isdisjointNLSETrCrrZr/_fold_mime_parametersr3rIr=rrrrirF _fold_as_ewrJr2insertr')Z parse_treer:maxlenrrlast_ewrZ want_encodingZend_ew_not_allowedrr4tstrraZ encoded_partnewlineZnewpartsrrrr; s                r;cCs|dk r<|rFs0           C  "   !*$ V +         1C+ "&'/'&).9%7ED49/kA