a
    "h                     @   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rejZdS )z8Mock socket module used by the smtpd and smtplib tests.
    Nc                 C   s   | a d S N)_reply_data)line r   8/opt/python-3.9.21/usr/lib/python3.9/test/mock_socket.py
reply_with   s    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   s   d S r   r   r
   r   r   r   close   s    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d0d#d$Zd%d& Zd'd( Zd)d* ZdS )1
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   s    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   s   dS Nr   r   r   r   r   r   fileno8   s    zMockSocket.filenoc                 C   s   |d u rt | _n|| _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   s   d S r   r   )r
   leveloptnamevaluer   r   r   
setsockoptD   s    zMockSocket.setsockoptc                 C   s   dS r%   r   )r
   r+   r,   buflenr   r   r   
getsockoptG   s    zMockSocket.getsockoptc                 C   s   d S r   r   )r
   addressr   r   r   bindJ   s    zMockSocket.bindc                 C   s   t  | _| jdfS )Nc)r   r   r   r   r   r   acceptM   s    zMockSocket.acceptc                 C   s   dS )N)z0.0.0.0r   r   r   r   r   r   getsocknameQ   s    zMockSocket.getsocknamec                 C   s   d S r   r   )r
   flagr   r   r   setblockingT   s    zMockSocket.setblockingc                 C   s   d S r   r   )r
   backlogr   r   r   listenW   s    zMockSocket.listenrr   c                 C   s   t | j}|S r   )r   r	   )r
   moder!   handler   r   r   makefileZ   s    
zMockSocket.makefilec                 C   s   || _ | j| t|S r   lastr   r   lenr
   r#   r"   r   r   r   sendall^   s    zMockSocket.sendallc                 C   s   || _ | j| t|S r   r>   rA   r   r   r   sendc   s    zMockSocket.sendc                 C   s   dS )N)zpeer-addressz	peer-portr   r   r   r   r   getpeernameh   s    zMockSocket.getpeernamec                 C   s   d S r   r   r   r   r   r   r   k   s    zMockSocket.closec                 C   s   d S r   r   )r
   hostr   r   r   connectn   s    zMockSocket.connect)N)N)N)r:   r   )N)N)r   r   r   r   r   r    r$   r&   r(   r*   r.   r0   r2   r4   r5   r7   r9   r=   rB   rC   rD   r   rF   r   r   r   r   r   #   s(   





r   c                 C   s   t | S r   )r   )r   typeprotor   r   r   socketr   s    rI   c                 C   sL   zt | d }W n ty&   tY n0 t }|tju r>t }|| |S )N   )int
ValueErrorerrorr   socket_module_GLOBAL_DEFAULT_TIMEOUTgetdefaulttimeoutr(   )r1   r   source_addressZint_portmsr   r   r   create_connectionu   s    


rS   c                 C   s   | a d S r   r'   r)   r   r   r   setdefaulttimeout   s    rU   c                   C   s   t S r   rT   r   r   r   r   rP      s    rP   c                   C   s   dS N r   r   r   r   r   getfqdn   s    rX   c                   C   s   d S r   r   r   r   r   r   gethostname   s    rY   c                 C   s   dS rV   r   )namer   r   r   gethostbyname   s    r[   c                  O   s   t j| i |S r   )rN   getaddrinfo)argskwr   r   r   r\      s    r\   AF_UNIX)NNN)r   rI   rN   r'   r   r   r   r   rO   rS   rU   rP   rX   rY   r[   r\   gaierrorrM   AF_INETAF_INET6SOCK_STREAM
SOL_SOCKETSO_REUSEADDRhasattrr_   r   r   r   r   <module>   s4   O


