a Mer@sddlZddlZddlZddlZddlZddlmZmZddlZ ddl Z ddl Z dZ dZedZGdddeZGdd d ZGd d d ZGd d d ZGdddeZGdddZGdddeZdS)N)AnyOptionalic@s eZdZdS) UnexpectedEOFN)__name__ __module__ __qualname__r r 4/usr/lib/python3.9/site-packages/dns/quic/_common.pyrsrc@s4eZdZddZddZddZddZd d Zd S) BuffercCsd|_d|_dS)NF)_buffer _seen_endselfr r r __init__szBuffer.__init__cCs&|jr dS|j|7_|r"d|_dS)NT)rrrdataZis_endr r r puts z Buffer.putcCs t|j|krdS|jrtdS)NTF)lenrrr)ramountr r r have&s z Buffer.havecCs|jSN)rrr r r seen_end-szBuffer.seen_endcCs0||sJ|jd|}|j|d|_|Sr)rr)rrrr r r get0sz Buffer.getN)rrr rrrrrr r r r r s r c@sDeZdZddZddZddZddZd d Zd d Zd dZ dS)BaseQuicStreamcCs||_||_t|_d|_dSNr) _connection _stream_idr r _expecting)r connection stream_idr r r r8szBaseQuicStream.__init__cCs|jSr)rrr r r id>szBaseQuicStream.idcCs|durt|}nd}|Sr)time)rtimeout expirationr r r _expiration_from_timeoutAsz'BaseQuicStream._expiration_from_timeoutcCs$|durt|td}nd}|S)Ng)maxr$)rr&r%r r r _timeout_from_expirationHsz'BaseQuicStream._timeout_from_expirationcCst|}td||S)Nz!H)rstructpack)rZdatagramlr r r _encapsulateRszBaseQuicStream._encapsulatecCsB|j||z|jdko&|j|jWSty<YdS0dS)NrT)rrr rrrr r r _common_add_inputVs  z BaseQuicStream._common_add_inputcCs |j|j|jdddS)Nr T)r close_streamrrrrr r r _close]szBaseQuicStream._closeN) rrr rr#r'r)r-r.r0r r r r r7s rc@s0eZdZd ddZddZd dd Zd d ZdS)BaseQuicConnectionNrcCsd|_||_||_||_d|_||_i|_tj ||_ tj ||f|_ |dur|dkr|j t jkrld}n|j t jkr~d}nt|r||f|_nd|_dS)NFrz0.0.0.0z::)Z_donerZ_addressZ_port_closedZ_manager_streamsdnsinetZaf_for_addressZ_aflow_level_address_tupleZ_peersocketZAF_INETZAF_INET6NotImplementedError_source)rr!addressportsource source_portZmanagerr r r rcs$   zBaseQuicConnection.__init__cCs |j|=dSr)r3)rr"r r r r/{szBaseQuicConnection.close_streamTcCsLt}|j}|dur"|d}t||d}|jrD|rDt|d}||fS)Nirg?)r$rZ get_timerr(r2min)rZclosed_is_specialnowr&intervalr r r _get_timer_values~s   z$BaseQuicConnection._get_timer_valuescCs t}||kr|j|dSr)r$rZ handle_timer)rr&r?r r r _handle_timersz BaseQuicConnection._handle_timer)NrN)T)rrr rr/rArBr r r r r1bs   r1c@s"eZdZdeeedddZdS)AsyncQuicConnectionN)r%returncsdSrr )rr%r r r make_streamszAsyncQuicConnection.make_stream)N)rrr rfloatrrEr r r r rCsrCc@s0eZdZd ddZdddZd d Zd d ZdS)BaseQuicManagerNcCsdi|_||_i|_|durZd}t|tr0|}d}tjjjddg||d}|durZ| |||_ dS)NTZdoqzdoq-i03)Zalpn_protocols verify_mode server_name) _connections_connection_factory_session_tickets isinstancestraioquicquic configurationZQuicConfigurationZload_verify_locations_conf)rconfrHZconnection_factoryrIZ verify_pathr r r rs   zBaseQuicManager.__init__UrTc Cs|j||f}|dur |dfS|j}|rtz$|j||f}t|}||_Wnty`Yn0t |j ||} nd} t j j j|| d} tj||f} | | t|| |||||}||j||f<|dfS)NF)rQsession_ticket_handlerT)rJrrRrLpopcopysession_ticketKeyError functoolspartialsave_session_ticketrOrPr!ZQuicConnectionr4r5r6connectr$rK) rr:r;r<r=Zwant_session_ticketr!rSrXrUZqconnZ lladdressr r r _connects4    zBaseQuicManager._connectcCs(z|j||f=Wnty"Yn0dSr)rJrY)rr:r;r r r closeds zBaseQuicManager.closedcCsLt|j}|tkr:t|jdt}|D] }|j|=q,||j||f<dSr)rrLMAX_SESSION_TICKETSlistkeysSESSIONS_TO_DELETE)rr:r;Zticketr,Zkeys_to_deletekeyr r r r\s   z#BaseQuicManager.save_session_ticket)N)rTNrT)rrr rr^r_r\r r r r rGs   #rGc@seZdZdddZdS)AsyncQuicManagerrTNrcCstdSr)r8)rr:r;r<r=r r r r]szAsyncQuicManager.connect)rTNr)rrr r]r r r r resre)rWrZr7r*r$typingrrZaioquic.quic.configurationrOZaioquic.quic.connectionZdns.inetr4ZQUIC_MAX_DATAGRAMr`rc Exceptionrr rr1rCrGrer r r r s$+/H