HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/env/lib/python3.10/site-packages/dns/quic/__pycache__/_trio.cpython-310.pyc
o

!we��@s�ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z
ddlZ
ddlm
Z
ddlmZmZmZmZmZGdd�de�ZGdd�de�ZGdd	�d	e�ZdS)
�N)�NullContext)�QUIC_MAX_DATAGRAM�AsyncQuicConnection�AsyncQuicManager�BaseQuicStream�
UnexpectedEOFcsXeZdZ�fdd�Zdd�Zddd�Zdd	d
�Zdd�Zd
d�Zdd�Z	dd�Z
�ZS)�TrioQuicStreamcst��||�t��|_dS�N)�super�__init__�trio�	Condition�_wake_up)�self�
connection�	stream_id��	__class__��G/home/arjun/projects/env/lib/python3.10/site-packages/dns/quic/_trio.pyrszTrioQuicStream.__init__c	�sl�	|j�|�r
dS||_|j4IdH�|j��IdHWd�IdHn1IdHs-wYd|_q)NTr)�_buffer�have�
_expectingr�wait)r�amountrrr�wait_fors�(��zTrioQuicStream.wait_forNc�s��|dur
td�}nt�|�}|�)|�d�IdHt�d|j�d��\}|�|�IdH|j�|�Wd�S1s=wYtj	j
�)N�z!H)rr�
move_on_afterr�struct�unpackr�get�dns�	exception�Timeout)r�timeout�context�sizerrr�receive's�


 �zTrioQuicStream.receiveFc�s(�|�|�}|j�|j||�IdHdSr	)�_encapsulate�_connection�write�
_stream_id)r�datagram�is_end�datarrr�send3s�
zTrioQuicStream.sendc	�s\�|�||�r,|j4IdH�|j��Wd�IdHdS1IdHs%wYdSdSr	)�_common_add_inputr�notify)rr.r-rrr�
_add_input7s�.��zTrioQuicStream._add_inputc�s�|��dSr	)�_close�rrrr�close<s�zTrioQuicStream.closec���|Sr	rr4rrr�
__aenter__A��zTrioQuicStream.__aenter__c	�sZ�|��IdH|j4IdH�|j��Wd�IdHdS1IdHs&wYdS�NF)r5rr1)r�exc_type�exc_val�exc_tbrrr�	__aexit__Ds���zTrioQuicStream.__aexit__r	�F)�__name__�
__module__�__qualname__rrr'r/r2r5r7r=�
__classcell__rrrrrs
	
rcsReZdZd�fdd�	Zdd�Zdd�Zdd	d
�Zdd�Zdd
d�Zdd�Z	�Z
S)�TrioQuicConnectionNcsjt��||||||�tj�|jtjd�|_|jr&tj�t	j
�|j|j��t��|_
t��|_d|_dS)Nr)r
rr�socket�_af�
SOCK_DGRAM�_socket�_source�bindr!�inet�low_level_address_tuple�Event�_handshake_complete�	_run_done�
_worker_scope)rr�address�port�source�source_port�managerrrrrLs


zTrioQuicConnection.__init__c�s �z�|j�|j�IdH|js||�d�\}}tjt��|d��|_|j�	t
�IdH}|j�||jdt
�
��Wd�n1sBwYd|_|�|�|j�t
�
��}|D]
\}}|j�|�IdHqY|��IdH|jrWd|_|j��dSWd|_|j��dSd|_|j��w)NF)�deadlinerT)rG�connect�_peer�_done�_get_timer_valuesr�CancelScope�current_timerO�recvrr)�receive_datagram�time�
_handle_timer�datagrams_to_sendr/�_handle_eventsrM�set)r�
expiration�intervalr,�	datagrams�_rrr�_workerUs8�
���
���zTrioQuicConnection._workerc�s��d}	|j��}|durdSt|tjjj�r,|j�|j	�}|r+|�
|j|j�IdHn&t|tjjj
�r:|j��nt|tjjj�sJt|tjjj�rRd|_|j��|d7}|dkrdd}t�d�IdHq)NrT��
)r)�
next_event�
isinstance�aioquic�quic�events�StreamDataReceived�_streamsr rr2r.�
end_stream�HandshakeCompletedrMrb�ConnectionTerminated�StreamResetrXrGr5r�sleep)r�count�event�streamrrrraks2�
�
��
�z!TrioQuicConnection._handle_eventsFc�s.�|j�|||�|jdur|j��dSdSr	)r)�send_stream_datarO�cancel)rrxr.r-rrrr*�s
�
�zTrioQuicConnection.writec	�sb�|jrdSt��4IdH�}|�|j�Wd�IdHn1IdHs%wY|j��dSr	)�_closedr�open_nursery�
start_soonrgrNrb)r�nurseryrrr�run�s�(�zTrioQuicConnection.runc�s��|dur
td�}nt�|�}|�'|j��IdH|jrt�|j�d�}t	||�}||j
|<|Wd�S1s;wYtjj
�r9)rrrrMrrXrr)�get_next_available_stream_idrrpr!r"r#)rr$r%rrxrrr�make_stream�s�



 �zTrioQuicConnection.make_streamc�s^�|js-|j�|jd|jd�d|_|j��|jdur#|j��|j�	�IdHdSdS)NrrhT)
r{�_manager�closedrWr)r5rOrzrNrr4rrrr5�s�


�zTrioQuicConnection.closer	r>)r?r@rArrgrar*rr�r5rBrrrrrCKs	

rCcs@eZdZdejdf�fdd�	Zddd�Zdd	�Zd
d�Z�Z	S)
�TrioQuicManagerNcst��||t|�||_dSr	)r
rrC�_nursery)rr~�conf�verify_mode�server_namerrrr�s
zTrioQuicManager.__init__�UrcCs*|�||||�\}}|r|j�|j�|Sr	)�_connectr�r}r)rrPrQrRrSr�startrrrrV�szTrioQuicManager.connectc�r6r	rr4rrrr7�r8zTrioQuicManager.__aenter__c�s,�t|j���}|D]	}|��IdHq
dSr9)�list�_connections�valuesr5)rr:r;r<�connectionsrrrrr=�s
�zTrioQuicManager.__aexit__)r�Nr)
r?r@rA�ssl�
CERT_REQUIREDrrVr7r=rBrrrrr��s�
r�)rDr�rr^�aioquic.quic.configurationrl�aioquic.quic.connection�aioquic.quic.eventsr�
dns.exceptionr!�dns.inet�dns._asyncbackendr�dns.quic._commonrrrrrrrCr�rrrr�<module>s	2\