o
    þâfv  ã                   @   sŽ   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z
 dZd	Zee ZG d
d„ deƒZG dd„ de
jƒZdS )é    N)Úas_bytes)Ú	as_string)Úencodestring)ÚPY2)Úurlparse)Úasynchat_25ó   ó   
c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚListenerc                 C   ó   d S ©N© )ÚselfÚurlÚstatusr   r   úI/var/www/html/venv/lib/python3.10/site-packages/supervisor/http_client.pyr      ó   zListener.statusc                 C   s   t j d||f ¡ d S )Nz%s %s
)ÚsysÚstderrÚwrite)r   r   Úerrorr   r   r   r      s   zListener.errorc                 C   r   r   r   )r   r   ÚnameÚvaluer   r   r   Úresponse_header   r   zListener.response_headerc                 C   r   r   r   ©r   r   r   r   r   Údone   r   zListener.donec                 C   s€   zt |ƒ}W n ty   d| }Y nw ztj |¡ W n ty8   tr,tj |¡ n
dtjj }t|ƒ‚Y nw tj 	¡  d S )NzUndecodable: %rz<Unable to write Unicode to stdout because it has encoding %s)
r   ÚUnicodeDecodeErrorr   Ústdoutr   ÚUnicodeEncodeErrorr   ÚencodingÚ
ValueErrorÚflush)r   r   ÚdataÚsdataÚsr   r   r   Úfeed   s"   ÿÿüû
zListener.feedc                 C   r   r   r   r   r   r   r   Úclose4   r   zListener.closeN)	Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r%   r&   r   r   r   r   r
      s    r
   c                   @   s¨   e Zd Z				d'dd„Zd(dd„Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ ZdS ))ÚHTTPHandlerÚ Nc                 C   st   t j | ||¡ || _d| _d| _|  t¡ d| _| j	| _
d| _d| _d| _d| _d | _|| _|| _d | _d| _d S )NzSupervisor HTTP Clientó    r   F)ÚasynchatÚ
async_chatÚ__init__ÚlistenerÚ
user_agentÚbufferÚset_terminatorÚCRLFÚ	connectedÚstatus_lineÚpartÚ
chunk_sizeÚ
chunk_readÚlength_readÚlengthr   ÚusernameÚpasswordr   Úerror_handled)r   r0   r<   r=   ÚconnÚmapr   r   r   r/   8   s    

zHTTPHandler.__init__c                 C   sâ   | j d ur	tdƒ‚|| | _ t | j ¡\}}}}}}|dvr t‚|| _d|v r4| dd¡\}	}
t|
ƒ}
n|}	d}
|| _|
| _|dkrV|	}|  	t
jt
j¡ |  || jf¡ d S |dkro|dd … }|  	t
jt
j¡ |  |¡ d S d S )	NzAlready doing a get)ÚhttpÚunixú:é   éP   rA   rB   é   )r   ÚAssertionErrorr   ÚNotImplementedErrorÚhostÚsplitÚintÚpathÚportÚcreate_socketÚsocketÚAF_INETÚSOCK_STREAMÚconnectÚAF_UNIX)r   Ú	serverurlrL   ÚschemerI   Úpath_ignoredÚparamsÚqueryÚfragmentÚhostnamerM   ÚipÚ
socketnamer   r   r   ÚgetQ   s2   

ÿ
ýzHTTPHandler.getc                 C   s0   | j  | j¡ d| _|  ¡  | j ¡  d| _d S )Nr   ÚCLOSED)r0   r&   r   r5   Údel_channelrO   ©r   r   r   r   r&   m   s
   

zHTTPHandler.closec                 C   s    |   d||f ¡ |   t¡ d S )Nz%s: %s)Úpushr4   ©r   r   r   r   r   r   Úheadert   s   zHTTPHandler.headerc                 C   sV   | j rd S 	 t ¡ \}}}d||f }| j | j|¡ | j| _|  	¡  d| _ ~~~d S )NrD   zCannot connect, error: %s (%s)T)
r>   r5   r   Úexc_infor0   r   r   Úignorer7   r&   )r   ÚtÚvÚtbÚmsgr   r   r   Úhandle_errorx   s   zHTTPHandler.handle_errorc                 C   s´   d| _ d}d}|  d|| j|f ¡ |  t¡ |  d| j¡ |  dd¡ |  dd	¡ |  d
| j¡ | jrNd| j| jf }t	t
t|ƒƒƒ ¡ }|  dd| ¡ |  t¡ |  t¡ d S )NrD   ÚGETzHTTP/1.1z%s %s %sÚHostzAccept-EncodingÚchunkedÚAcceptz*/*z
User-agentz%s:%sÚAuthorizationzBasic %s)r5   ra   rL   r4   rc   rI   r1   r=   r<   r   r   r   Ústrip)r   ÚmethodÚversionÚauthr   r   r   Úhandle_connect†   s   

zHTTPHandler.handle_connectc                 C   s   | j  | j|¡ d S r   )r0   r%   r   )r   r"   r   r   r   r%   ™   s   zHTTPHandler.feedc                 C   s2   | j | | _ | j| jkr|  | j ¡ d| _ d S d S ©Nr,   )r2   r7   Úbodyr%   )r   Úbytesr   r   r   Úcollect_incoming_dataœ   s
   
þz!HTTPHandler.collect_incoming_datac                 C   s   |   ¡  d| _d S ru   )r7   r2   r`   r   r   r   Úfound_terminator¢   s   
zHTTPHandler.found_terminatorc                 C   s
   d| _ d S ru   )r2   r`   r   r   r   re   ¦   s   
zHTTPHandler.ignorec                 C   s†   | j }| d d¡\}}}t|ƒ}| d¡st|ƒ‚| j | j|¡ |dkr*| j| _	n| j
| _	d| }| j | j|¡ |  ¡  |||fS )Né   s   HTTP/éÈ   zCannot read, status code %s)r2   rJ   rK   Ú
startswithr    r0   r   r   Úheadersr7   re   r   r&   )r   Úlinerr   r   Úreasonri   r   r   r   r6   ©   s   


zHTTPHandler.status_linec                 C   sš   | j }|s| jdkr| j| _d S | j| _|  | j¡ d S | dd¡\}}|rI|rK| ¡ }| 	¡ }|dkr8|| _n	|dkrAt
|ƒ| _|  ||¡ d S d S d S )Ns   chunkedó   :rD   s   transfer-encodings   content-length)r2   r   Úchunked_sizer7   rv   r3   r;   rJ   Úlowerrp   rK   r   )r   r~   r   r   r   r   r   r}   ¼   s    

ùzHTTPHandler.headersc                 C   s   | j  | j||¡ d S r   )r0   r   r   rb   r   r   r   r   Ï   s   zHTTPHandler.response_headerc                 C   s   |   ¡  |  ¡  d S r   )r   r&   r`   r   r   r   rv   Ò   s   zHTTPHandler.bodyc                 C   s   | j  | j¡ d S r   )r0   r   r   r`   r   r   r   r   Ö   s   zHTTPHandler.donec                 C   sV   | j }|sd S t| ¡ d dƒ}|dkr| j| _n	|  |¡ | j| _|  j|7  _d S )Nr   é   )r2   rK   rJ   Útrailerr7   r3   Úchunked_bodyr;   )r   r~   r8   r   r   r   r   Ù   s   

zHTTPHandler.chunked_sizec                 C   s&   | j }|  t¡ | j| _|  |¡ d S r   )r2   r3   r4   r   r7   r%   ©r   r~   r   r   r   r…   å   s   
zHTTPHandler.chunked_bodyc                 C   s&   | j }|tkr|  ¡  |  ¡  d S d S r   )r2   r4   r   r&   r†   r   r   r   r„   ë   s
   þzHTTPHandler.trailer)r+   NNN)r+   )r'   r(   r)   r/   r]   r&   rc   rj   rt   r%   rx   ry   re   r6   r}   r   rv   r   r   r…   r„   r   r   r   r   r*   7   s.    
ú
r*   )r   rO   Úsupervisor.compatr   r   r   r   r   Úsupervisor.medusar   r-   ÚCRÚLFr4   Úobjectr
   r.   r*   r   r   r   r   Ú<module>   s   &