a àMÒeÅã@sÀddlZddlZddlZddlZddlZddlZddlZddlZddl Zddl Z ddl Z ddl mZmZmZmZmZeedƒr†ejZnejZGdd„deƒZGdd„deƒZGdd „d eƒZdS) éN)ÚQUIC_MAX_DATAGRAMÚBaseQuicConnectionÚBaseQuicManagerÚBaseQuicStreamÚ UnexpectedEOFÚ PollSelectorcsXeZdZ‡fdd„Zdd„Zddd„Zdd d „Zd d „Zd d„Zdd„Z dd„Z ‡Z S)ÚSyncQuicStreamcs&tƒ ||¡t ¡|_t ¡|_dS©N)ÚsuperÚ__init__Ú threadingÚ ConditionÚ_wake_upÚLockÚ_lock)ÚselfÚ connectionÚ stream_id©Ú __class__©ú2/usr/lib/python3.9/site-packages/dns/quic/_sync.pyr s zSyncQuicStream.__init__cCs˜| |¡}|j2|j |¡r.WdƒdS||_Wdƒn1sH0Y|j$|j |¡sntjj ‚Wdƒn1s‚0Yd|_qdS)Nr) Z_timeout_from_expirationrÚ_bufferZhaveZ _expectingrÚwaitÚdnsÚ exceptionÚTimeout)rÚamountÚ expirationÚtimeoutrrrÚwait_for%s  $ &zSyncQuicStream.wait_forNcCs”| |¡}| d|¡|j&t d|j d¡¡\}Wdƒn1sH0Y| ||¡|j|j |¡WdƒS1s†0YdS)Néz!H)Z_expiration_from_timeoutr rÚstructÚunpackrÚget)rrrÚsizerrrÚreceive1s  4 zSyncQuicStream.receiveFcCs | |¡}|j |j||¡dSr )Z _encapsulateÚ _connectionÚwriteZ _stream_id)rÚdatagramÚis_endÚdatarrrÚsend:s zSyncQuicStream.sendcCs@| ||¡r<|j|j ¡Wdƒn1s20YdSr )Z_common_add_inputrÚnotify)rr+r*rrrÚ _add_input>s zSyncQuicStream._add_inputcCs2|j| ¡Wdƒn1s$0YdSr )rZ_close©rrrrÚcloseCszSyncQuicStream.closecCs|Sr rr/rrrÚ __enter__GszSyncQuicStream.__enter__cCs<| ¡|j|j ¡Wdƒn1s.0YdS©NF)r0rr-)rÚexc_typeÚexc_valÚexc_tbrrrÚ__exit__Js(zSyncQuicStream.__exit__)N)F) Ú__name__Ú __module__Ú __qualname__r r r&r,r.r0r1r6Ú __classcell__rrrrrs  rcsleZdZ‡fdd„Zdd„Zdd„Zdd„Zd d „Zdd d „Zdd„Z ddd„Z ‡fdd„Z dd„Z ‡Z S)ÚSyncQuicConnectioncsÆtƒ ||||||¡t |jtjd¡|_|jdurrz|j tj   |j|j¡¡Wnt yp|j  ¡‚Yn0|j  |j¡t ¡\|_|_|j d¡|j d¡t ¡|_d|_t ¡|_dS)NrF)r r ÚsocketZ_afZ SOCK_DGRAMÚ_socketÚ_sourceZbindrZinetZlow_level_address_tupleÚ Exceptionr0ÚconnectÚ_peerZ socketpairÚ _send_wakeupÚ_receive_wakeupZ setblockingr ÚEventÚ_handshake_completeÚ_worker_threadrr)rrÚaddressÚportÚsourceÚ source_portZmanagerrrrr Rs" ÿ     zSyncQuicConnection.__init__cCs|d}|dkrx|d7}z|j t¡}Wnty8YdS0|j&|j ||jt ¡¡Wdƒq1sl0YqdS)Nré é) r=ÚrecvrÚBlockingIOErrorrr'Zreceive_datagramrAÚtime)rÚcountr)rrrÚ_reades zSyncQuicConnection._readcCs,z|j d¡Wqty$YdS0qdS)Né )rCrMrNr/rrrÚ _drain_wakeupps z SyncQuicConnection._drain_wakeupc Cs†zDtƒ}| |jtj|j¡| |jtj|j¡|js |  d¡\}}|  |¡}|D]\}}|  ¡qV|j |  |¡Wdƒn1sŽ0Y| ¡|j |j t ¡¡}Wdƒn1sÌ0Y|D].\}}z|j |¡WqÚtyYqÚ0qÚq2W|j d|_Wdƒn1s20Y|j ¡n:|j d|_Wdƒn1sl0Y|j ¡0dS)NFT)Ú_selector_classÚregisterr=Ú selectorsZ EVENT_READrQrCrSÚ_doneZ_get_timer_valuesZselectr+rZ _handle_timerÚ_handle_eventsr'Zdatagrams_to_sendrOr,rNrEÚset) rZselrÚintervalÚitemsÚkeyÚ_Z datagramsr)rrrÚ_workerws2   (.  & ý&zSyncQuicConnection._workercCsL|j|j ¡}Wdƒn1s&0Y|durs" 2|