
    Vh                        d dl Z d dlmZ d dlmZ d dlmZ dZdZdZ	da
dad	ad	ad	ad	ad	ad	ad	ad	ad	a	 d
Zg dZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ# G d dejH                        Z%dZ&d Z'd Z(d Z)e*dk(  r e)        yy)     N)reactor)Factory)basictesttwistediL  TFs(   +OK POP3 localhost v2003.83 server ready)s   TOPs   LOGIN-DELAY 180   USERs
   SASL LOGIN   STLS   UIDLs   -ERR Unknown requests   +OK Command Completeds   -ERR LOGIN faileds   +OK Mailbox open, 0 messagess*   -ERR server side error start TLS handshakes   +OK quit completeds'   -ERR Unknown AUHORIZATION state commands   +OK 0 0s    +OK Unique-ID listing follows
.s#   +OK Mailbox scan listing follows
.s   +OK Capability list follows:c                   J    e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zy)POP3TestServerNc                 <    d| _         d | _        d | _        || _        y )NF)loggedIncapstmpUserctx)selfcontextFactorys     P/home/dcms/DCMS/lib/python3.12/site-packages/twisted/mail/test/pop3testserver.py__init__zPOP3TestServer.__init__6   s    	!    c                 .    | j                  t               y N)sendLineSTATr   reqs     r   sendSTATRespzPOP3TestServer.sendSTATResp<       dr   c                 .    | j                  t               y r   )r   UIDLr   s     r   sendUIDLRespzPOP3TestServer.sendUIDLResp?   r   r   c                 .    | j                  t               y r   )r   LISTr   s     r   sendLISTRespzPOP3TestServer.sendLISTRespB   r   r   c                 v   | j                   t        g| _         t        r| j                   j                  t               t
        r| j                   j                  t               t        D ]  }| j                   j                  |        dj                  | j                         }|dz  }| j                  |       y )Ns   
s   
.)
r   	CAP_STARTUIDL_SUPPORTappendCAPABILITIES_UIDLSSL_SUPPORTCAPABILITIES_SSLCAPABILITIESjoinr   )r   capresps      r   sendCapabilitieszPOP3TestServer.sendCapabilitiesE   s    99"DIII./II-. 	"CIIS!	"||DII&dr   c                     t         r| j                          y t        r!t        j                  d| j
                         y | j                          y )N   )DENY_CONNECTION
disconnectSLOW_GREETINGr   	callLatersendGreetingr   s    r   connectionMadezPOP3TestServer.connectionMadeV   s9    OOb$"3"34 r   c                 .    | j                  t               y r   )r   CONNECTION_MADEr8   s    r   r7   zPOP3TestServer.sendGreetinga   s    o&r   c                 @   |j                         fd}t        ryt        r| j                          y |d      r-t        r| j                  t               y| j                          y |d      rt        r| j                          y |d      rPt        r| j                  t               yd}	 |j                  d      d   | _        t        }| j                  |       y |d      rnd}	 |j                  d      d   }| j                  |t        }n0| j                  t         k(  r|t"        k(  rt$        }d	| _        nt        }| j                  |       y |d
      r-d| _        | j                  t(               | j                          yt*        r| j                  t               y| j&                  s| j                  t,               y |d      r| j                  t               y |d      rt.        ry| j                  t0               y |d      rt.        ry| j                  t2               y |d      r9t.        ryt4        s| j                  t               y| j                  t6               yy# t        $ r
 t        }Y w xY w# t        $ r
 t        }Y Ww xY w)zError Conditionsc                 ,    j                  |       dk7  S )N)find)sulines    r   <lambda>z-POP3TestServer.lineReceived.<locals>.<lambda>h   s    A", r   Ns   CAPAr	   r       s   PASSTs   QUITFs   NOOPs   STATs   LISTr
   )upperTIMEOUT_RESPONSEDROP_CONNECTIONr4   INVALID_CAPABILITY_RESPONSEr   INVALID_RESPONSEr0   r*   startTLSINVALID_LOGIN_RESPONSEsplitr   VALID_RESPONSEBaseExceptionAUTH_DECLINEDUSERPASSAUTH_ACCEPTEDr   LOGOUT_COMPLETEINVALID_SERVER_RESPONSENOT_LOGGED_INTIMEOUT_DEFERREDr   r#   r'   r    )r   liner?   r/   pwdrA   s        @r   lineReceivedzPOP3TestServer.lineReceivedd   s    

,OO']*./%%'']{MMO']%./D%#zz#q1% MM$']D%jjoa(<<'3;(D\\T)cTk(D$(DM(D MM$']!DMMM/*OO$MM*+MM-(']MM.)']MM$']MM$']!./MM$ ] ! %$%" ! %$%s%   0I4 ,AJ
 4JJ
JJc                     t         rC| j                  7| j                  d       | j                  j	                  | j                         y | j                  d       y )Ns   +OK Begin TLS negotiation nows   -ERR TLS not available)r*   r   r   	transportrJ   r8   s    r   rJ   zPOP3TestServer.startTLS   s>    488/MM:;NN##DHH-MM34r   c                 8    | j                   j                          y r   )r[   loseConnectionr8   s    r   r4   zPOP3TestServer.disconnect   s    %%'r   r   )__name__
__module____qualname__r   r   r!   r$   r0   r9   r7   rY   rJ   r4    r   r   r   r   5   s6    ""	 'U n5(r   r   a  popServer.py [arg] (default is Standard POP Server with no messages)
no_ssl  - Start with no SSL support
no_uidl - Start with no UIDL support
bad_resp - Send a non-RFC compliant response to the Client
bad_cap_resp - send a non-RFC compliant response when the Client sends a 'CAPABILITY' request
bad_login_resp - send a non-RFC compliant response when the Client sends a 'LOGIN' request
deny - Deny the connection
drop - Drop the connection after sending the greeting
bad_tls - Send a bad response to a STARTTLS
timeout - Do not return a response to a Client request
to_deferred - Do not return a response on a 'Select' request. This
              will test Deferred callback handling
slow - Wait 20 seconds after the connection is made to return a Server Greeting
c                      t        d| z         y )NzServer Starting in %s mode)print)msgs    r   printMessagere      s    	
&
,-r   c                    | j                         dk(  rdat        d       y | j                         dk(  rdat        d       y | j                         dk(  rdat        d       y | j                         d	k(  rdat        d
       y | j                         dk(  rdat        d
       y | j                         dk(  rdat        d       y | j                         dk(  rdat        d       y | j                         dk(  rda	t        d       y | j                         dk(  rda
t        d       y | j                         dk(  rdat        d       y | j                         dk(  rdat        d       y | j                         dk(  r$t        t               t        j                           y t        t               t        j                           y )Nno_sslFzNON-SSLno_uidlzNON-UIDLbad_respTzInvalid Server Responsebad_cap_respzInvalid Capability Responsebad_login_respdenyzDeny ConnectiondropzDrop Connectionbad_tlszBad TLS ResponsetimeoutzTimeout Responseto_deferredzTimeout Deferred ResponseslowzSlow Greetingz--help)lowerr*   re   r'   rT   rH   rK   r3   rG   BAD_TLS_RESPONSErF   rV   r5   rc   usagesysexit)args    r   
processArgrx      sj   
yy{hY			!Z 	
	""&./		&&*#23	(	(!%23		&'		&'			!'(			!'(		%01		_%		 e
 	e
r   c                  $   t        t        j                        dk  rt        d       n%t        j                  dd  } | D ]  }t	        |        t               }t        |_        t        j                  t        |       t        j                          y )N   zPOP3 with no messagesrD   )lenru   argvre   rx   r   r   protocolr   	listenTCPPORTrun)argsrw   fs      r   mainr     si    
388}q,-xx| 	CsO	 		AAJdAKKMr   __main__)+ru   twisted.internetr   twisted.internet.protocolr   twisted.protocolsr   rP   rQ   r   r*   r'   rT   rH   rK   r3   rG   rs   rF   rV   r5   r;   r,   r+   r)   rI   rM   rO   rR   	TLS_ERRORrS   rU   r   r    r#   r&   LineReceiverr   rt   re   rx   r   r^   ra   r   r   <module>r      s     $ - # #      =C   + )$/9	':,/+	N(U'' N(b	 .>B zF r   