
    h                         S SK rS SKrS SKrS SKrSSKJrJr  SSKJ	r	J
r
JrJrJrJr  \R                  " \5      r " S S\5      rg)    N   )AsyncChannelChannelError)
JsonObjectget_dictget_int
get_objectget_strtypecheckedc                   z   \ rS rSrSr\S\R                  R                  S\	S\
4S j5       r\S\
S\R                  R                  4S j5       r\S	\R                  R                  S
SSS4S j5       r\S	\R                  R                  S\S\SSS\S\R                  R                  4S j5       rS\
SS4S jrSrg)HttpChannel   zhttp-stream2responsebinaryreturnc                    SS1nU(       d  UR                  SS15        U R                  5        VVs0 s H  u  p4X2;  d  M  X4_M     snn$ s  snnf )N
ConnectionzTransfer-EncodingzContent-LengthRange)update
getheaders)r   r   removekeyvalues        ?/usr/lib/python3/dist-packages/cockpit/channels/http_channel.pyget_headersHttpChannel.get_headers    sR      34MM+W56-5-@-@-BX-BzscFW

-BXXXs   AAoptionsc                    [        U SS5      n[        U SS 5      n[        U SS 5      n[        U SS 5      nUb  Ub
  [        SSS9eUc  Uc
  [        SS	S9eUb  Ub
  [        SS
S9eUb  [        USS 5      nUbD  [        USS 5      nUb  [        R
                  " US9nO4[        R
                  " [        US5      S9nO[        R
                  " 5       nSU;   a0  US   (       d&  SUl        [        R                  R                  Ul	        [        R                  R                  XUS9$ [        R                  R                  XS9$ )Naddress	localhosttlsunixportprotocol-errorz#TLS on Unix socket is not supportedmessagez&no "port" or "unix" option for channelz-cannot specify both "port" and "unix" options	authoritydata)cadatafile)cafilevalidateF)r#   context)r#   )r
   r   r   r   sslcreate_default_contextcheck_hostname
VerifyMode	CERT_NONEverify_modehttpclientHTTPSConnectionHTTPConnection)r   opt_addressopt_tlsopt_unixopt_portr'   r(   r-   s           r   create_clientHttpChannel.create_client+   sL   gy+>7E407FD17FD18#7/9^__ 0/9abbH$8/9hii +t<I$y&$7#!88EG!88	SY@Z[G446W$WZ-@).&&)nn&>&># ;;..{SZ.[[ ;;--k-II    
connectionr:   z
str | NoneNc                     U(       aE  [         R                   " [         R                  5      U l        U R                  R                  U5        g U R                  5         g N)socketAF_UNIXsockconnect)r?   r:   s     r   rE   HttpChannel.connectN   s;     $mmFNN;JOOO##H-  r>   methodpathheaderszdict[str, str]bodyc                 V    U R                  XU=(       d    0 US9  U R                  5       $ )N)rI   rJ   )requestgetresponse)r?   rG   rH   rI   rJ   s        r   rL   HttpChannel.requestY   s,    
 	6BTJ%%''r>   c           
        #    [         R                  SU5        [        US5      n[        US5      n[        USS S 5      nSU;   a
  [	        SSS	9eU R                  U5      nU R                  5         S
n U R                  5       I S h  vN nUc  OXg-  nM"   U R                  U R                  U[        USS 5      5      I S h  vN    U R                  U R                  XRX4=(       d    0 U5      I S h  vN n	U R'                  SU	R(                  U	R*                  U R-                  XR.                  S9S9    U R                  U	R0                  U R2                  5      I S h  vN n
U
(       d  OU R5                  U
5      I S h  vN   MQ  [         R                  S5        U	R                  5       n
U
S
:X  d   eU R                  UR6                  5      I S h  vN   U R9                  5         g  GNa GN)! [        R                   a  n[	        S[        U5      S	9UeS nAf[        [        4 a  n[	        S[        U5      S	9UeS nAff = f GNS! [         R"                  R$                  [        4 a  n[	        S[        U5      S	9UeS nAff = f GN) GN N! [         R"                  R$                  [        4 a  n[	        S[        U5      S	9UeS nAff = f7f)Nzopen %srG   rH   rI   c           	      v    U R                  5        VVs0 s H  u  pU[        U[        5      _M     snn$ s  snnf rA   )itemsr   str)dkvs      r   <lambda>!HttpChannel.run.<locals>.<lambda>f   s2    _`_f_f_h;i_hW[WXA{1c?R<R_h;i;is   5r?   r$   z4connection sharing is not implemented on this bridger%   r>   r"   zunknown-hostkeyz	not-found
terminatedr   )r   )commandstatusreasonrI   zreading response done)loggerdebugr
   r	   r   r<   readyread	in_threadrE   r.   SSLCertVerificationErrorrR   OSErrorIOErrorrL   r4   r5   HTTPExceptionsend_controlrZ   r[   r   	is_binaryread1
BLOCK_SIZEwriteclosedone)selfr   rG   rH   rI   r?   rJ   r(   excr   blocks              r   runHttpChannel.runa   s    Y((+w'Wi1ikop7"/9opp''0


$D|LD	 	G..z77FTX;YZZZ	H!^^DLL*dTa_acghhH 	*!)!)"&"2"28NN"2"S 	 	U	H"nnX^^T__MMjj'''	  LL01 MMOEC<<..!1!1222 			U % [++ 	M0#c(CL! 	G{CH=3F	G
 i))73 	H|SX>CG	H N ( 3))73 	H|SX>CG	Hs   BKG(K+G. G+G. *I 2I3I 7=K5*J J  J  JAJ JJ K+G. .IHI)H==IKI $J,J  JKJ J J $K4KKK )__name__
__module____qualname____firstlineno__payloadstaticmethodr4   r5   HTTPResponseboolr   r   r7   r<   rE   rR   bytesrL   ro   __static_attributes__rq   r>   r   r   r      s   GYdkk66 Y4 YJ Y Y  Jz  Jdkk.H.H  J  JD !DKK66 !, !SW ! ! (KK..(8;(CF(Qa(in(		!	!( (: : :r>   r   )http.clientr4   loggingrB   r.   channelr   r   jsonutilr   r   r   r	   r
   r   	getLoggerrr   r\   r   rq   r>   r   <module>r      s:   $    
 0 V V			8	$~, ~r>   