o
    g                     @   s   d Z ddlZdadadd ZG dd dZG dd dZdd	d
ZejdfddZ	dd Z
dd Zdd Zdd Zdd Zdd ZejZejZejZejZejZejZdZdZeedraejZdS dS )z8Mock socket module used by the smtpd and smtplib tests.
    Nc                 C      | a d S N)_reply_data)line r   F/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/mock_socket.py
reply_with      r   c                   @   s*   e Zd ZdZdd Zd
ddZdd Zd	S )MockFilez8Mock file object returned by MockSocket.makefile().
    c                 C   s
   || _ d S r   )lines)selfr   r   r   r   __init__   s   
zMockFile.__init__c                 C   s>   | j dd }|dkr| j d||d  |d | }|S )Nr      
)r   popinsert)r   limitresultr   r   r   readline   s
   zMockFile.readlinec                 C      d S r   r   r   r   r   r   close      zMockFile.closeN)r   )__name__
__module____qualname____doc__r   r   r   r   r   r   r   r
      s
    
r
   c                   @   s   e Zd ZdZd+ddZdd Zd+ddZd	d
 Zdd Zdd Z	dd Z
d+ddZdd Zdd Zdd Zdd Zdd Zd,dd Zd+d!d"Zd+d#d$Zd%d& Zd'd( Zd)d* ZdS )-
MockSocketz8Mock socket object used by smtpd and smtplib tests.
    Nc                 C   s6   || _ g | _g | _tr| jt d ad | _d | _d S r   )familyoutputr   r   appendconntimeout)r   r   r   r   r   r   &   s   
zMockSocket.__init__c                 C   s   | j | d S r   )r   r!   )r   r   r   r   r   
queue_recv1      zMockSocket.queue_recvc                 C   s   | j dd }|S )Nr   r   )r   r   )r   bufsizeflagsdatar   r   r   recv4   s   zMockSocket.recvc                 C      dS Nr   r   r   r   r   r   fileno8   r   zMockSocket.filenoc                 C   s   |d u r	t | _d S || _d S r   )_defaulttimeoutr#   )r   r#   r   r   r   
settimeout;   s   

zMockSocket.settimeoutc                 C   s   | j S r   r#   r   r   r   r   
gettimeoutA   s   zMockSocket.gettimeoutc                 C   r   r   r   )r   leveloptnamevaluer   r   r   
setsockoptD   r   zMockSocket.setsockoptc                 C   r*   r+   r   )r   r1   r2   Zbuflenr   r   r   
getsockoptG   r   zMockSocket.getsockoptc                 C   r   r   r   )r   addressr   r   r   bindJ   r   zMockSocket.bindc                 C   s   t  | _| jdfS )Nc)r   r"   r   r   r   r   acceptM   s   
zMockSocket.acceptc                 C   r*   )N)z0.0.0.0r   r   r   r   r   r   getsocknameQ   r   zMockSocket.getsocknamec                 C   r   r   r   )r   flagr   r   r   setblockingT   r   zMockSocket.setblockingc                 C   r   r   r   )r   backlogr   r   r   listenW   r   zMockSocket.listenrr   c                 C   s   t | j}|S r   )r
   r   )r   moder&   handler   r   r   makefileZ   s   
zMockSocket.makefilec                 C      || _ | j| t|S r   Zlastr    r!   lenr   r(   r'   r   r   r   sendall^      zMockSocket.sendallc                 C   rC   r   rD   rF   r   r   r   sendc   rH   zMockSocket.sendc                 C   r*   )N)zpeer-addressz	peer-portr   r   r   r   r   getpeernameh   r   zMockSocket.getpeernamec                 C   r   r   r   r   r   r   r   r   k   r   zMockSocket.closec                 C   r   r   r   )r   hostr   r   r   connectn   r   zMockSocket.connectr   )r?   r   )r   r   r   r   r   r$   r)   r,   r.   r0   r4   r5   r7   r9   r:   r<   r>   rB   rG   rI   rJ   r   rL   r   r   r   r   r   #   s*    





r   c                 C   s   t | S r   )r   )r   typeprotor   r   r   socketr   s   rO   c                 C   sH   zt | d }W n	 ty   tw t }|tju rt }|| |S )N   )int
ValueErrorerrorr   socket_module_GLOBAL_DEFAULT_TIMEOUTgetdefaulttimeoutr.   )r6   r#   source_addressZint_portZmsr   r   r   create_connectionu   s   

rX   c                 C   r   r   r-   r/   r   r   r   setdefaulttimeout   r	   rZ   c                   C   s   t S r   rY   r   r   r   r   rV      r   rV   c                   C   r*   N r   r   r   r   r   getfqdn   r   r]   c                   C   r   r   r   r   r   r   r   gethostname   r   r^   c                 C   r*   r[   r   )namer   r   r   gethostbyname   r   r`   c                  O   s   t j| i |S r   )rT   getaddrinfo)argskwr   r   r   ra      r%   ra   AF_UNIX)NNN)r   rO   rT   r-   r   r   r
   r   rU   rX   rZ   rV   r]   r^   r`   ra   gaierrorrS   AF_INETAF_INET6SOCK_STREAM
SOL_SOCKETSO_REUSEADDRhasattrrd   r   r   r   r   <module>   s8    
O


