
    ,h(                         d dl Z d dlZd dlZd dlZd dlZd dlZd dl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mZmZ ej                  Z G d de      Z G d de      Z G d de      Zy)	    N)QUIC_MAX_DATAGRAMBaseQuicConnectionBaseQuicManagerBaseQuicStreamUnexpectedEOFc                   R     e Zd Z fdZd Zd Zd
dZddZd Zd Z	d Z
d	 Z xZS )SyncQuicStreamc                     t         |   ||       t        j                         | _        t        j
                         | _        y N)super__init__	threading	Condition_wake_upLock_lock)self
connection	stream_id	__class__s      P/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/dns/quic/_sync.pyr   zSyncQuicStream.__init__   s0    Y/!++-^^%
    c                 ~   	 | j                  |      }| j                  5  | j                  j                  |      r
	 d d d        y || _        d d d        | j
                  5  | j
                  j                  |      st        j                  j                  	 d d d        d| _        # 1 sw Y   \xY w# 1 sw Y   xY w)Nr   )
_timeout_from_expirationr   _bufferhave
_expectingr   waitdns	exceptionTimeout)r   amount
expirationtimeouts       r   wait_forzSyncQuicStream.wait_for#   s    33J?G )<<$$V,) ) #))  0}}))'2--/// 30  DO ) )0 0s   B'B' 6B3'B03B<c                 b   	 | j                  |      }| j                  5  | j                  j                         r
	 d d d        y 	 d d d        | j                  5  | j                  j                  |      st        j                  j                  	 d d d        # 1 sw Y   UxY w# 1 sw Y   xY wr   )	r   r   r   seen_endr   r   r   r    r!   )r   r#   r$   s      r   wait_for_endzSyncQuicStream.wait_for_end/   s    33J?G <<((* *  0}}))'2--/// 30  0 0s   B6B%B"%B.c                 X   | j                  |      }| j                  j                         rA| j                  |       | j                  5  | j
                  j                         cd d d        S | j                  d|       | j                  5  t        j                  d| j
                  j                  d            \  }d d d        | j                  |       | j                  5  | j
                  j                  |      cd d d        S # 1 sw Y   y xY w# 1 sw Y   XxY w# 1 sw Y   y xY w)N   z!H)_expiration_from_timeout_connectionis_h3r(   r   r   get_allr%   structunpackget)r   r$   r#   sizes       r   receivezSyncQuicStream.receive9   s    227;
!!#j) .||++-. . MM!Z( C --dll.>.>q.ABCMM$
+ .||''-. .. .C C. .s$   	D2D#D DD D)c                 t    | j                  |      }| j                  j                  | j                  ||       y r   )_encapsulater,   write
_stream_id)r   datagramis_enddatas       r   sendzSyncQuicStream.sendG   s.      *tf=r   c                     | j                  ||      r0| j                  5  | j                  j                          d d d        y y # 1 sw Y   y xY wr   )_common_add_inputr   notify)r   r:   r9   s      r   
_add_inputzSyncQuicStream._add_inputK   sH    !!$/ '$$&' ' 0' 's   AAc                 f    | j                   5  | j                          d d d        y # 1 sw Y   y xY wr   )r   _closer   s    r   closezSyncQuicStream.closeP   s'    ZZ 	KKM	 	 	s   '0c                     | S r    rB   s    r   	__enter__zSyncQuicStream.__enter__T       r   c                     | j                          | j                  5  | j                  j                          d d d        y# 1 sw Y   yxY wNF)rC   r   r>   )r   exc_typeexc_valexc_tbs       r   __exit__zSyncQuicStream.__exit__W   s8    

]] 	#MM  "	#	#s   AA
r   F)__name__
__module____qualname__r   r%   r(   r3   r;   r?   rC   rF   rM   __classcell__r   s   @r   r	   r	      s0    &

 0.>'
r   r	   c                   t     e Zd Z fdZd Zd Zd Zd ZddZd fd	Z	d fd	Z
d	 Zdd
Z fdZd Z xZS )SyncQuicConnectionc                    t         |   ||||||       t        | j                  t        j
                  d      | _        | j                  N	 | j                  j                  t        j                  j                  | j                  | j                               | j                  j                  | j                         t	        j                          \  | _        | _        | j$                  j'                  d       | j                  j'                  d       t)        j*                         | _        d | _        t)        j0                         | _        y # t        $ r | j                  j                           w xY w)Nr   F)r   r   socket_factory_afsocket
SOCK_DGRAM_socket_sourcebindr   inetlow_level_address_tuple	ExceptionrC   connect_peer
socketpair_send_wakeup_receive_wakeupsetblockingr   Event_handshake_complete_worker_threadr   r   )r   r   addressportsourcesource_portmanagerr   s          r   r   zSyncQuicConnection.__init___   s   WdFKQ%dhh0A0A1E<<#!!HH44T\\488L 	TZZ(4:4E4E4G1	D0((/  '#,??#4 "^^%
  ""$s   AE %E5c                 <   d}|dk  rz|dz  }	 | j                   j                  t              }| j                  5  | j
                  j                  || j                  t        j                                d d d        |dk  ryy y # t        $ r Y y w xY w# 1 sw Y    xY w)Nr   
      )	r[   recvr   BlockingIOErrorr   r,   receive_datagramrb   time)r   countr8   s      r   _readzSyncQuicConnection._readr   s    bjQJE<<,,->?  U  11(DJJ		TU bj # U Us   B :B	BBBc                 \    	 	 | j                   j                  d       # t        $ r Y y w xY w)N    )re   rr   rs   rB   s    r   _drain_wakeupz SyncQuicConnection._drain_wakeup}   s7    $$))"-  # s    	++c                    	 t        j                         }|j                  | j                  t         j                  | j
                         |j                  | j                  t         j                  | j                         | j                  s| j                  d      \  }}|j                  |      }|D ]  \  }}|j                           | j                  5  | j                  |       d d d        | j                          | j                  5  | j                  j!                  t#        j"                               }d d d        D ]!  \  }}	 | j                  j%                  |       # | j                  s| j                  5  d| _        d d d        | j                  j)                          | j*                  j-                          y # 1 sw Y   xY w# 1 sw Y   xY w# t&        $ r Y w xY w# 1 sw Y   exY w# | j                  5  d| _        d d d        n# 1 sw Y   nxY w| j                  j)                          | j*                  j-                          w xY w)NFT)	selectorsDefaultSelectorregisterr[   
EVENT_READrw   re   rz   _done_get_timer_valuesselectr:   r   _handle_timer_handle_eventsr,   datagrams_to_sendru   r;   rs   rC   rh   set)	r   selr#   intervalitemskey_	datagramsr8   s	            r   _workerzSyncQuicConnection._worker   s   	+++-CLLy';';TZZHLL--y/C/CTEWEWXjj)-)?)?)F&X

8,# FCHHJZZ 3&&z23##%ZZ P $ 0 0 B B499; OIP#, KHa))(3 jj"  "!
"LL $$((*!3 3P P
 + " " "!
" " "LL $$((*s   CG: G)$G: .G;G: G'G: G.GG: GG: 	G+(G: *G++G: .G7:IH	IH!<Ic                 l   	 | j                   5  | j                  j                         }d d d        y t        |t        j
                  j                  j                        r| j                         r| j                  j                  |      }|D ]\  }t        |t        j                  j                  j                        r| j                   5  | j                  j                  |j                        }d d d        so|j                   |j"                  |_        n|j$                  |j"                  |_        |j&                  s|j)                  dd       t        |t        j                  j                  j*                        s| j                   5  | j                  j                  |j                        }d d d        s7|j)                  |j,                  |j&                         _ nu| j                   5  | j                  j                  |j                        }d d d        r8|j)                  |j,                  |j.                         nt        |t        j
                  j                  j0                        r| j2                  j5                          nt        |t        j
                  j                  j6                        r| j                   5  d| _        d d d        n|t        |t        j
                  j                  j:                        rN| j                   5  | j                  j                  |j                        }d d d        r|j)                  dd       h# 1 sw Y   CxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   nxY w# 1 sw Y   ?xY w# 1 sw Y   _xY w)NTr   )r   r,   
next_event
isinstanceaioquicquiceventsStreamDataReceivedr-   _h3_connhandle_eventh3HeadersReceived_streamsr1   r   _headersheaders	_trailersstream_endedr?   DataReceivedr:   
end_streamHandshakeCompletedrh   r   ConnectionTerminatedr   StreamReset)r   event	h3_eventsh3_eventstreams        r   r   z!SyncQuicConnection._handle_events   s    6((3356}%!4!4!G!GH::< $ : :5 AI$- X%h

0A0A0Q0QR!% L)-):):5??)KL%#)??#:6>6F6FFO%+%5%5%=7?7G7GF$4#+#8#8$*$5$5c4$@''**2C2C2P2PQ!% L)-):):5??)KL% & 1 1(--AVAV WX"  D!%!2!25??!CD))%**e6F6FGE7<<#6#6#I#IJ((,,.E7<<#6#6#K#KLZZ &!%DJ& &E7<<#6#6#B#BCZZ @!]]..u?F@%%c40M 6 6L LL L
D D& &@ @sG   M*&M7&N?&NN&&N**M47N	N	NN'*N3c                     | j                   5  | j                  j                  |||       d d d        | j                  j	                  d       y # 1 sw Y   %xY wN   )r   r,   send_stream_datard   r;   )r   r   r:   r9   s       r   r6   zSyncQuicConnection.write   sN    ZZ 	D--fdFC	Dw'	D 	Ds   AAc                     | j                   5  t        | 	  |||       d d d        |r| j                  j	                  d       y y # 1 sw Y   (xY wr   )r   r   send_headersrd   r;   )r   r   r   r9   r   s       r   r   zSyncQuicConnection.send_headers   sL    ZZ 	=G GV<	=""7+ 	= 	=   AAc                     | j                   5  t        | 	  |||       d d d        |r| j                  j	                  d       y y # 1 sw Y   (xY wr   )r   r   	send_datard   r;   )r   r   r:   r9   r   s       r   r   zSyncQuicConnection.send_data   sL    ZZ 	7Giv6	7""7+ 	7 	7r   c                     | j                   ry t        j                  | j                        | _        | j                  j                          y )N)target)_closedr   Threadr   ri   startrB   s    r   runzSyncQuicConnection.run   s5    <<'..dllC!!#r   c                 D   | j                   j                  |      st        j                  j                  | j
                  5  | j                  rt        | j                  j                  d      }t        | |      }|| j                  |<   d d d        |S # 1 sw Y   S xY wrI   )rh   r   r   r    r!   r   r   r   r,   get_next_available_stream_idr	   r   )r   r$   r   r   s       r   make_streamzSyncQuicConnection.make_stream   s    '',,W5--'''ZZ 	.zz##((EEeLI#D)4F'-DMM)$	. 	. s   A	BBc                 f    | j                   5  t        | 	  |       d d d        y # 1 sw Y   y xY wr   )r   r   close_stream)r   r   r   s     r   r   zSyncQuicConnection.close_stream   s,    ZZ 	,G +	, 	, 	,s   '0c                    | j                   5  | j                  r
	 d d d        y | j                  j                  | j                  d   | j                  d          d| _        | j
                  j                          | j                  j                  d       d d d        | j                  j                          y # 1 sw Y   $xY w)Nr   rq   Tr   )r   r   _managerclosedrb   r,   rC   rd   r;   ri   joinrB   s    r   rC   zSyncQuicConnection.close   s    ZZ 	,||	, 	, MM  A

1>DL""$""7+	, 	  "	, 	,s   B9A2B99CrN   r   )rO   rP   rQ   r   rw   rz   r   r   r6   r   r   r   r   r   rC   rR   rS   s   @r   rU   rU   ^   sA    &&	U+8'1R(
,,$	,#r   rU   c                   x     e Zd Zdej                  ddf fd	Z	 	 	 	 	 d
dZ fdZ fdZ fdZ	d Z
d	 Z xZS )SyncQuicManagerNFc                 f    t         |   ||t        ||       t        j                         | _        y r   )r   r   rU   r   r   r   )r   confverify_modeserver_namer   r   s        r   r   zSyncQuicManager.__init__   s)     	{,>RP^^%
r   c           	          | j                   5  | j                  ||||||      \  }}|r|j                          |cd d d        S # 1 sw Y   y xY wr   )r   _connectr   )	r   rj   rk   rl   rm   want_session_ticket
want_tokenr   r   s	            r   ra   zSyncQuicManager.connect  sS     ZZ 	"&--v{4G#Z  	 	 	s   -AAc                 h    | j                   5  t        | 	  ||       d d d        y # 1 sw Y   y xY wr   )r   r   r   )r   rj   rk   r   s      r   r   zSyncQuicManager.closed  s-    ZZ 	*GN7D)	* 	* 	*s   (1c                 j    | j                   5  t        | 	  |||       d d d        y # 1 sw Y   y xY wr   )r   r   save_session_ticket)r   rj   rk   ticketr   s       r   r   z#SyncQuicManager.save_session_ticket  s0    ZZ 	?G'v>	? 	? 	?   )2c                 j    | j                   5  t        | 	  |||       d d d        y # 1 sw Y   y xY wr   )r   r   
save_token)r   rj   rk   tokenr   s       r   r   zSyncQuicManager.save_token  s0    ZZ 	5Gwe4	5 	5 	5r   c                     | S r   rE   rB   s    r   rF   zSyncQuicManager.__enter__  rG   r   c                 x    t        | j                  j                               }|D ]  }|j                           yrI   )list_connectionsvaluesrC   )r   rJ   rK   rL   connectionsr   s         r   rM   zSyncQuicManager.__exit__!  s;     4,,3356% 	J	r   )iU  Nr   TT)rO   rP   rQ   sslCERT_REQUIREDr   ra   r   r   r   rF   rM   rR   rS   s   @r   r   r      sF    S%6%6DU&  "*?5r   r   )r|   rY   r   r/   r   ru   aioquic.quic.configurationr   aioquic.quic.connectionaioquic.quic.eventsdns.exceptionr   dns.inetdns.quic._commonr   r   r   r   r   rW   r	   rU   r   rE   r   r   <module>r      sf      
    !      >^ >BY#+ Y#x-o -r   