o
    óT·j¯4  ã                   @  s   d dl m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	 d dl
Z
ddlmZ ddlmZmZmZmZmZ ddlmZmZmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZ e  d¡Z!e
je
j"B e
j#B Z$G dd„ dej%ƒZ&G dd„ deƒZ'G dd„ dƒZ(G dd„ deƒZ)dS )é    )ÚannotationsN)Ú	Generatoré   )ÚNetworkStream)ÚConnectionNotAvailableÚLocalProtocolErrorÚRemoteProtocolErrorÚ
WriteErrorÚmap_exceptions)ÚOriginÚRequestÚResponse)ÚLockÚShieldCancellation)ÚTrace)Úsafe_iterateé   )ÚConnectionInterfacezhttpcore2.http11c                   @  s   e Zd ZdZdZdZdZdS )ÚHTTPConnectionStater   r   r   é   N)Ú__name__Ú
__module__Ú__qualname__ÚNEWÚACTIVEÚIDLEÚCLOSED© r   r   úY/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/httpcore2/_sync/http11.pyr   "   s
    r   c                   @  sì   e Zd ZdZdZ	dEdFdd„ZdGdd„ZdHdd„ZdHdd„ZdEdIdd„Z	dJdd„Z
dKd d!„ZdEdLd#d$„ZdMd%d&„ZdMd'd(„ZdNd*d+„ZdOd,d-„ZdOd.d/„ZdOd0d1„ZdOd2d3„ZdOd4d5„ZdPd7d8„ZdPd9d:„ZdQd;d<„Z			dRdSdCdD„ZdS )TÚHTTP11Connectioni   i � NÚoriginr   Ústreamr   Úkeepalive_expiryúfloat | NoneÚreturnÚNonec                 C  sF   || _ || _|| _d | _tj| _tƒ | _d| _	t
jt
j| jd�| _d S )Nr   )Úour_roleÚmax_incomplete_event_size)Ú_originÚ_network_streamÚ_keepalive_expiryÚ
_expire_atr   r   Ú_stater   Ú_state_lockÚ_request_countÚh11Ú
ConnectionÚCLIENTÚMAX_INCOMPLETE_EVENT_SIZEÚ
_h11_state)Úselfr    r!   r"   r   r   r   Ú__init__-   s   þzHTTP11Connection.__init__Úrequestr   r   c                 C  s`  |   |jj¡std|jj› d| j› �ƒ‚| j�# | jtjtj	fv r0|  j
d7  _
tj| _d | _ntƒ ‚W d   ƒ n1 s=w   Y  z¦d|i}z@tdt||ƒ�}| jdi |¤Ž W d   ƒ n1 sbw   Y  tdt||ƒ�}| jdi |¤Ž W d   ƒ n1 s�w   Y  W n	 ty�   Y nw tdt||ƒ�}| jdi |¤Ž\}}}}}||||f|_W d   ƒ n1 s·w   Y  | j}	|dksÔ|jd	krÙd
|  krÒdk rÙn nt|	|ƒ}	t||t| |ƒ|||	dœd�W S  t�y/ }
 z:tƒ �, tdt|ƒ�}|  ¡  W d   ƒ n1 �sw   Y  W d   ƒ |
‚W d   ƒ |
‚1 �s$w   Y  |
‚d }
~
ww )NzAttempted to send request to z on connection to r   r6   Úsend_request_headersÚsend_request_bodyÚreceive_response_headersée   s   CONNECTéÈ   i,  )Úhttp_versionÚreason_phraseÚnetwork_stream)ÚstatusÚheadersÚcontentÚ
extensionsÚresponse_closedr   )Úcan_handle_requestÚurlr    ÚRuntimeErrorr(   r-   r,   r   r   r   r.   r   r+   r   r   ÚloggerÚ_send_request_headersÚ_send_request_bodyr	   Ú_receive_response_headersÚreturn_valuer)   ÚmethodÚHTTP11UpgradeStreamr   ÚHTTP11ConnectionByteStreamÚBaseExceptionr   Ú_response_closed)r4   r6   ÚkwargsÚtracer<   r?   r=   r@   Útrailing_datar>   Úexcr   r   r   Úhandle_request?   s~   þüÿÿ€úúüø*
ýü

 ÿ
ÿþ
ÿý€üzHTTP11Connection.handle_requestc                 C  sr   |j  di ¡}| dd ¡}ttjtiƒ� tj|j|jj|j	d�}W d   ƒ n1 s+w   Y  | j
||d� d S )NÚtimeoutÚwrite)rL   Útargetr@   ©rV   )rB   Úgetr
   r/   r   r   rL   rE   rX   r@   Ú_send_event©r4   r6   ÚtimeoutsrV   Úeventr   r   r   rH   �   s   ýÿz&HTTP11Connection._send_request_headersc                 C  s�   |j  di ¡}| dd ¡}t|jtjƒsJ ‚t|jƒ�}|D ]}tj|d�}| j	||d� qW d   ƒ n1 s8w   Y  | j	t 
¡ |d� d S )NrV   rW   )ÚdatarY   )rB   rZ   Ú
isinstancer!   ÚtypingÚIterabler   r/   ÚDatar[   ÚEndOfMessage)r4   r6   r]   rV   ÚiteratorÚchunkr^   r   r   r   rI   �   s   þÿz#HTTP11Connection._send_request_bodyr^   ú	h11.EventrV   c                 C  s,   | j  |¡}|d ur| jj||d� d S d S )NrY   )r3   Úsendr)   rW   )r4   r^   rV   Úbytes_to_sendr   r   r   r[   ™   s   ÿzHTTP11Connection._send_eventú:tuple[bytes, int, bytes, list[tuple[bytes, bytes]], bytes]c           	      C  s‚   |j  di ¡}| dd ¡}	 | j|d�}t|tjƒrnt|tjƒr'|jdkr'nqd|j }|j	 
¡ }| jj\}}||j|j||fS )NrV   ÚreadTrY   r:   s   HTTP/)rB   rZ   Ú_receive_eventr`   r/   r   ÚInformationalResponseÚstatus_coder<   r@   Ú	raw_itemsr3   rS   Úreason)	r4   r6   r]   rV   r^   r<   r@   rS   Ú_r   r   r   rJ       s   û

z*HTTP11Connection._receive_response_headersúGenerator[bytes]c                 c  s\   � |j  di ¡}| dd ¡}	 | j|d�}t|tjƒr"t|jƒV  nt|tjtj	fƒr-d S q)NrV   rk   TrY   )
rB   rZ   rl   r`   r/   rc   Úbytesr_   rd   ÚPAUSEDr\   r   r   r   Ú_receive_response_body·   s   €ûz'HTTP11Connection._receive_response_bodyúh11.Event | type[h11.PAUSED]c                 C  sŒ   	 t tjtiƒ� | j ¡ }W d   ƒ n1 sw   Y  |tju rC| jj| j|d�}|dkr<| jj	tj
kr<d}t|ƒ‚| j |¡ n|S q)NTrY   ó    z/Server disconnected without sending a response.)r
   r/   r   r3   Ú
next_eventÚ	NEED_DATAr)   rk   ÚREAD_NUM_BYTESÚtheir_stateÚSEND_RESPONSEÚreceive_data)r4   rV   r^   r_   Úmsgr   r   r   rl   Â   s   ÿ

êzHTTP11Connection._receive_eventc                 C  s’   | j �< | jjtju r+| jjtju r+tj| _| j 	¡  | j
d ur*t ¡ }|| j
 | _n|  ¡  W d   ƒ d S W d   ƒ d S 1 sBw   Y  d S ©N)r-   r3   Ú	our_stater/   ÚDONEr{   r   r   r,   Ústart_next_cycler*   ÚtimeÚ	monotonicr+   Úclose)r4   Únowr   r   r   rP   Û   s   

€
ø€" z!HTTP11Connection._response_closedc                 C  s   t j| _| j ¡  d S r   )r   r   r,   r)   r…   ©r4   r   r   r   r…   è   s   zHTTP11Connection.closeÚboolc                 C  s
   || j kS r   )r(   ©r4   r    r   r   r   rD   ò   ó   
z#HTTP11Connection.can_handle_requestc                 C  s
   |   ¡  S r   )Ú	is_closedr‡   r   r   r   Úis_connectedõ   rŠ   zHTTP11Connection.is_connectedc                 C  ó   | j tjkS r   ©r,   r   r   r‡   r   r   r   Úis_availableø   s   zHTTP11Connection.is_availablec                 C  s>   t  ¡ }| j}|d uo||k}| jtjko| j d¡}|p|S )NÚis_readable)rƒ   r„   r+   r,   r   r   r)   Úget_extra_info)r4   r†   Ú	expire_atÚkeepalive_expiredÚserver_disconnectedr   r   r   Úhas_expiredÿ   s   ÿzHTTP11Connection.has_expiredc                 C  r�   r   rŽ   r‡   r   r   r   Úis_idle  ó   zHTTP11Connection.is_idlec                 C  r�   r   )r,   r   r   r‡   r   r   r   r‹     r—   zHTTP11Connection.is_closedÚstrc                 C  s$   t | jƒ}|›d| jj› d| j› �S )Nz, HTTP/1.1, ú, Request Count: )r˜   r(   r,   Únamer.   r‰   r   r   r   Úinfo  s   
zHTTP11Connection.infoc              	   C  s6   | j j}t| jƒ}d|› d|›d| jj› d| j› d�	S )Nú<z [z, r™   z]>)Ú	__class__r   r˜   r(   r,   rš   r.   )r4   Ú
class_namer    r   r   r   Ú__repr__  s   
$zHTTP11Connection.__repr__c                 C  s   | S r   r   r‡   r   r   r   Ú	__enter__!  s   zHTTP11Connection.__enter__Úexc_typeútype[BaseException] | NoneÚ	exc_valueúBaseException | NoneÚ	tracebackútypes.TracebackType | Nonec                 C  s   |   ¡  d S r   )r…   )r4   r¡   r£   r¥   r   r   r   Ú__exit__$  s   zHTTP11Connection.__exit__r   )r    r   r!   r   r"   r#   r$   r%   )r6   r   r$   r   )r6   r   r$   r%   )r^   rg   rV   r#   r$   r%   )r6   r   r$   rj   )r6   r   r$   rr   )rV   r#   r$   rv   ©r$   r%   )r    r   r$   rˆ   )r$   rˆ   )r$   r˜   )r$   r   )NNN)r¡   r¢   r£   r¤   r¥   r¦   r$   r%   )r   r   r   rz   r2   r5   rU   rH   rI   r[   rJ   ru   rl   rP   r…   rD   rŒ   r�   r•   r–   r‹   r›   rŸ   r    r§   r   r   r   r   r   )   s6    ü

B














ür   c                   @  s*   e Zd Zddd„Zdd
d„Zddd„ZdS )rN   Ú
connectionr   r6   r   r$   r%   c                 C  s   || _ || _d| _d S )NF)Ú_connectionÚ_requestÚ_closed)r4   r©   r6   r   r   r   r5   .  s   
z#HTTP11ConnectionByteStream.__init__rr   c                 c  sì   � d| j i}zItdt| j |ƒ�6 t| jjdi |¤Žƒ�}|D ]}|V  qW d   ƒ n1 s.w   Y  W d   ƒ W d S W d   ƒ W d S 1 sHw   Y  W d S  tyu } ztƒ � |  ¡  W d   ƒ |‚1 sjw   Y  |‚d }~ww )Nr6   Úreceive_response_bodyr   )	r«   r   rG   r   rª   ru   rO   r   r…   )r4   rQ   re   rf   rT   r   r   r   Ú__iter__3  s*   €
ÿÿÿ&ÿ

ÿþ€úz#HTTP11ConnectionByteStream.__iter__c                 C  sN   | j s%d| _ tdt| jƒ� | j ¡  W d   ƒ d S 1 sw   Y  d S d S )NTrC   )r¬   r   rG   r«   rª   rP   r‡   r   r   r   r…   B  s   "ÿþz HTTP11ConnectionByteStream.closeN)r©   r   r6   r   r$   r%   )r$   rr   r¨   )r   r   r   r5   r®   r…   r   r   r   r   rN   -  s    

rN   c                   @  sR   e Zd Zd dd„Zd!d"dd„Zd!d#dd„Zd$dd„Z				d%d&dd„Zd'dd„Zd	S )(rM   r!   r   Úleading_datars   r$   r%   c                 C  s   || _ || _d S r   )Ú_streamÚ_leading_data)r4   r!   r¯   r   r   r   r5   J  s   
zHTTP11UpgradeStream.__init__NÚ	max_bytesÚintrV   r#   c                 C  s6   | j r| j d |… }| j |d … | _ |S | j ||¡S r   )r±   r°   rk   )r4   r²   rV   Úbufferr   r   r   rk   N  s
   zHTTP11UpgradeStream.readr´   c                 C  s   | j  ||¡ d S r   )r°   rW   )r4   r´   rV   r   r   r   rW   V  s   zHTTP11UpgradeStream.writec                 C  s   | j  ¡  d S r   )r°   r…   r‡   r   r   r   r…   Y  s   zHTTP11UpgradeStream.closeÚssl_contextússl.SSLContextÚserver_hostnameú
str | Nonec                 C  s   | j  |||¡S r   )r°   Ú	start_tls)r4   rµ   r·   rV   r   r   r   r¹   \  s   zHTTP11UpgradeStream.start_tlsr›   r˜   ú
typing.Anyc                 C  s   | j  |¡S r   )r°   r‘   )r4   r›   r   r   r   r‘   d  r—   z"HTTP11UpgradeStream.get_extra_info)r!   r   r¯   rs   r$   r%   r   )r²   r³   rV   r#   r$   rs   )r´   rs   rV   r#   r$   r%   r¨   )NN)rµ   r¶   r·   r¸   rV   r#   r$   r   )r›   r˜   r$   rº   )	r   r   r   r5   rk   rW   r…   r¹   r‘   r   r   r   r   rM   I  s    

ürM   )*Ú
__future__r   ÚenumÚloggingÚsslrƒ   Útypesra   Úcollections.abcr   r/   Ú_backends.baser   Ú_exceptionsr   r   r   r	   r
   Ú_modelsr   r   r   Ú_synchronizationr   r   Ú_tracer   Ú_utilsr   Ú
interfacesr   Ú	getLoggerrG   rc   rd   ÚH11SendEventÚIntEnumr   r   rN   rM   r   r   r   r   Ú<module>   s0    
  