
    kcv                         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   Z G d
 de      Z G d de
j                         Zy)    N)as_bytes)	as_string)encodestring)PY2)urlparse)asynchat_25      
c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)Listenerc                      y N )selfurlstatuss      8/usr/lib/python3/dist-packages/supervisor/http_client.pyr   zListener.status           c                 N    t         j                  j                  |d|d       y )N 
)sysstderrwrite)r   r   errors      r   r   zListener.error   s    

c512r   c                      y r   r   )r   r   namevalues       r   response_headerzListener.response_header   r   r   c                      y r   r   r   r   s     r   donezListener.done   r   r   c                 z   	 t        |      }	 t        j                  j	                  |       t        j                  j                          y # t        $ r d|z  }Y Ow xY w# t
        $ rQ t        r t        j                  j	                  |       n(dt        j                  j                  z  }t        |      Y w xY w)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ss        r   feedzListener.feed   s    	-dOE
	$JJU# 	

! " 	-%,E	- " 		$ 

  &#%(ZZ%8%89 m#	 '		$s#   A A  AA AB:9B:c                      y r   r   r"   s     r   closezListener.close4   r   r   N)	__name__
__module____qualname__r   r   r    r#   r.   r0   r   r   r   r   r      s     3*r   r   c                       e Zd Z	 	 	 	 ddZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)HTTPHandlerNc                 H   t         j                  j                  | ||       || _        d| _        d| _        | j                  t               d| _        | j                  | _
        d| _        d| _        d| _        d| _        d | _        || _        || _        d | _        d| _        y )NzSupervisor HTTP Clientr   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   r:   rF   rG   connmaps         r   r9   zHTTPHandler.__init__8   s     	$$T45 2D!$$	  "r   c                 \   | j                   t        d      ||z   | _         t        j                  | j                         \  }}}}}}|dvrt        || _        d|v r!|j                  dd      \  }	}
t        |
      }
n|}	d}
|| _        |
| _        |dk(  rN|	}| j                  t        j                  t        j                         | j                  || j                  f       y |dk(  rE|dd  }| j                  t        j                  t        j                         | j                  |       y y )	NzAlready doing a get)httpunix:   P   rL   rM      )r   AssertionErrorr   NotImplementedErrorhostsplitintpathportcreate_socketsocketAF_INETSOCK_STREAMconnectAF_UNIX)r   	serverurlrW   schemerT   path_ignoredparamsqueryfragmenthostnamerX   ip
socketnames                r   getzHTTPHandler.getQ   s   88 !677t#>F>O>OHH?;lFE8))%%	$;!ZZQ/NHdt9DHD		VBv~~v/A/ABLL"dii)v"12Jv~~v/A/ABLL$ r   c                     | j                   j                  | j                         d| _        | j	                          | j
                  j                          d| _        y )Nr   CLOSED)r:   r0   r   r?   del_channelrZ   r   s    r   r0   zHTTPHandler.closem   sB    DHH%r   c                 Z    | j                  |d|       | j                  t               y )Nz: )pushr>   r   r   r   s      r   headerzHTTPHandler.headert   s    		dE*+		$r   c                    | j                   ry 	 t        j                         \  }}}d|d|d}| j                  j                  | j                  |       | j                  | _        | j                          d| _         ~~~y )NzCannot connect, error: z ()T)
rH   r?   r   exc_infor:   r   r   ignorerA   r0   )r   tvtbmsgs        r   handle_errorzHTTPHandler.handle_errorx   si    \\^FAa67;CMM#.DIJJL!%Dr   c                 d   d| _         d}d}| j                  |d| j                  d|       | j                  t               | j	                  d| j
                         | j	                  dd       | j	                  dd	       | j	                  d
| j                         | j                  r[| j                  d| j                  }t        t        t        |                  j                         }| j	                  dd|z         | j                  t               | j                  t               y )NrO   GETzHTTP/1.1r   HostzAccept-EncodingchunkedAcceptz*/*z
User-agentrN   AuthorizationzBasic %s)r?   rn   rW   r>   rp   rT   r;   rG   rF   r   r   r   strip)r   methodversionauths       r   handle_connectzHTTPHandler.handle_connect   s    				7;<		$FDII&%y1He$L$//2=="mmT]];D\(4.9:@@BDKKd):;		$		$r   c                 P    | j                   j                  | j                  |       y r   )r:   r.   r   )r   r+   s     r   r.   zHTTPHandler.feed   s    488T*r   c                     | j                   |z   | _         | j                  | j                  k(  r#| j                  | j                          d| _         y y Nr   )r<   rA   bodyr.   )r   bytess     r   collect_incoming_dataz!HTTPHandler.collect_incoming_data   s>    kkE)99diiIIdkk"DK  r   c                 2    | j                          d| _        y r   )rA   r<   rl   s    r   found_terminatorzHTTPHandler.found_terminator   s    		r   c                     d| _         y r   )r<   rl   s    r   rt   zHTTPHandler.ignore   s	    r   c                    | j                   }|j                  d d      \  }}}t        |      }|j                  d      st	        |      | j
                  j                  | j                  |       |dk(  r| j                  | _	        nL| j                  | _	        d|z  }| j
                  j                  | j                  |       | j                          |||fS )N   s   HTTP/   zCannot read, status code %s)r<   rU   rV   
startswithr)   r:   r   r   headersrA   rt   r   r0   )r   liner   r   reasonrx   s         r   r@   zHTTPHandler.status_line   s    {{"&**T1"5V!!(+T""TXXv.S=DIDI/&8CMM#.JJL&&r   c                    | j                   }|sN| j                  dk(  r| j                  | _        y | j                  | _        | j                  | j                         y |j                  dd      \  }}|rX|rU|j                         }|j                         }|dk(  r|| _        n|dk(  rt        |      | _        | j                  ||       y y y )Ns   chunked   :rO   s   transfer-encodings   content-length)r<   r(   chunked_sizerA   r   r=   rE   rU   lowerr   rV   r    )r   r   r   r   s       r   r   zHTTPHandler.headers   s    {{}}
* --	 II	##DKK0**T1-KD%zz|//$)DM.."%e*DK$$T51 tr   c                 R    | j                   j                  | j                  ||       y r   )r:   r    r   ro   s      r   r    zHTTPHandler.response_header   s    %%dhhe<r   c                 D    | j                          | j                          y r   )r#   r0   rl   s    r   r   zHTTPHandler.body   s    		

r   c                 N    | j                   j                  | j                         y r   )r:   r#   r   rl   s    r   r#   zHTTPHandler.done   s    488$r   c                     | j                   }|sy t        |j                         d   d      }|dk(  r| j                  | _        n"| j                  |       | j                  | _        | xj                  |z  c_        y )Nr      )r<   rV   rU   trailerrA   r=   chunked_bodyrE   )r   r   rB   s      r   r   zHTTPHandler.chunked_size   sb    {{a"-
q=DI
+))DIz!r   c                     | j                   }| j                  t               | j                  | _        | j                  |       y r   )r<   r=   r>   r   rA   r.   r   r   s     r   r   zHTTPHandler.chunked_body   s1    {{D!%%			$r   c                 p    | j                   }|t        k(  r!| j                          | j                          y y r   )r<   r>   r#   r0   r   s     r   r   zHTTPHandler.trailer   s+     {{4<IIKJJL r   ) NNN)r   )r1   r2   r3   r9   rh   r0   rp   ry   r   r.   r   r   rt   r@   r   r    r   r#   r   r   r   r   r   r   r5   r5   7   sj     #2%8&+'&2&=%
"r   r5   )r   rZ   supervisor.compatr   r   r   r   r   supervisor.medusar   r7   CRLFr>   objectr   r8   r5   r   r   r   <module>r      sS      & ' * ! & 5	"u$v $Lz(%% zr   