o
    ҷh                     @  s
  d dl mZ d dlmZ d dlmZmZmZ d dlZd dl	Z	d dl
Z
d dlZ
d dlmZmZmZ ddlmZmZmZ dd	lmZmZ erdd d
lmZmZ d dlmZ d dlmZ ddlmZ ddl m!Z! dddZ"ej#ddG dd de
j$j%Z&d ddZ'd!ddZ(dS )"    )annotations)partial)TYPE_CHECKINGNoReturncastN)AF_INETIPPROTO_TCPSOCK_STREAM   )open_ssl_over_tcp_listenersopen_ssl_over_tcp_streamserve_ssl_over_tcp   )
SERVER_CTX
client_ctx)AddressFamily
SocketKind)
SSLContext)Stream)SocketListener)SSLListenerstreamr   returnNonec              	     s   | 4 I d H 9 z	 |  dI d H }|sn	| |I d H  q
W n
 tjy)   Y nw W d   I d H  d S W d   I d H  d S 1 I d H sFw   Y  d S )NTi'  )receive_somesend_alltrioBrokenResourceError)r   data r   Y/var/www/html/venv/lib/python3.10/site-packages/trio/_tests/test_highlevel_ssl_helpers.pyecho_handler    s"   .r!   F)slotsc                   @  s4   e Zd ZU ded< 				ddddZdddZdS )FakeHostnameResolverz?tuple[str, int] | tuple[str, int, int, int] | tuple[int, bytes]sockaddrr   hostbytes | Noneportbytes | str | int | Nonefamilyinttypeprotoflagsr   qlist[tuple[AddressFamily, SocketKind, int, str, tuple[str, int] | tuple[str, int, int, int] | tuple[int, bytes]]]c                   s   t ttd| jfgS )N )r   r	   r   r$   )selfr%   r'   r)   r+   r,   r-   r   r   r    getaddrinfo2   s   z FakeHostnameResolver.getaddrinfo+tuple[str, int] | tuple[str, int, int, int]r   c                   s   t )N)NotImplementedError)r0   r$   r-   r   r   r    getnameinfoE   s   z FakeHostnameResolver.getnameinfoN)r   r   r   r   )r%   r&   r'   r(   r)   r*   r+   r*   r,   r*   r-   r*   r   r.   )r$   r2   r-   r*   r   r   )__name__
__module____qualname____annotations__r1   r4   r   r   r   r    r#   .   s   
 r#   r   r   c           	        s  t  4 I d H b}|tttdtddI d H }t|ts!J t	d|}|\}|4 I d H % |j
}|j }t|}t j| tddI d H }|4 I d H ( tt j | I d H  W d    n1 sjw   Y  W d   I d H  n1 I d H sw   Y  tdd| dI d H }|4 I d H ( tt j | I d H  W d    n1 sw   Y  W d   I d H  n1 I d H sw   Y  tdd| dI d H }|4 I d H . t|t jsJ |jdksJ |d	I d H  |d
I d H d	ksJ W d   I d H  n1 I d H sw   Y  |jrJ tdd| dd
dI d H }|4 I d H  |js0J W d   I d H  n1 I d H sAw   Y  |j  W d   I d H  n1 I d H s\w   Y  W d   I d H  d S 1 I d H ssw   Y  d S )Nr   	127.0.0.1r%   z!list[SSLListener[SocketListener]]ztrio-test-1.example.orgP   zxyzzy.example.org)ssl_context   xr   T)r<   https_compatiblehappy_eyeballs_delay)r   open_nurserystartr   r   r!   r   
isinstancelistr   transport_listenersocketgetsocknamer#   set_custom_hostname_resolverr   pytestraisesr   do_handshake	SSLStreamserver_hostnamer   r   _https_compatiblecancel_scopecancel)	r   nurseryvaluereslistenertp_listenerr$   hostname_resolverr   r   r   r    1test_open_ssl_over_tcp_stream_and_everything_elseO   sx   
	

((**,0rV   c               	     s   t dtddI d H \} | 4 I d H . t| tjsJ | j}t|tjs&J |j d dks1J | j	r6J W d   I d H  n1 I d H sFw   Y  t dtdddI d H \} | 4 I d H  | j	scJ W d   I d H  d S 1 I d H stw   Y  d S )Nr   r9   r:   T)r%   r>   )
r   r   rB   r   r   rD   r   rE   rF   rM   )rS   tlr   r   r     test_open_ssl_over_tcp_listeners   s$   (.rX   )r   r   r   r   )r   r   r   r   )r   r   ))
__future__r   	functoolsr   typingr   r   r   attrsrH   r   trio.testingtrio.socketr   r   r	   _highlevel_ssl_helpersr   r   r   test_sslr   r   rE   r   r   sslr   trio.abcr   _highlevel_socketr   _sslr   r!   defineabcHostnameResolverr#   rV   rX   r   r   r   r    <module>   s*    


 J