
    5bh                     `   	 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 g dZdZdZdZdZdZd	Z e       j+                  ej,                  j.                         ej,                  j.                  j1                         D  ci c]  } | | j2                   c} Zd
ZdZ ej:                  d      j<                  Z ej:                  d      j@                  Z! ej:                  d      Z" ej:                  d      Z#h dZ$d=dZ%de&de&fdZ' G d dejP                  jR                        Z*d Z+e*fdZ,e*fdZ- G d dej\                        Z/d Z0 G d d      Z1	 d dl2Z2 G d d e1      Z3eji                  d         G d! d"e6      Z7 G d# d$e7      Z8 G d% d&e7      Z9 G d' d(e7      Z: G d) d*e7      Z; G d+ d,e7      Z< G d- d.e7      Z= G d/ d0e7      Z> G d1 d2e>      Z? G d3 d4e>      Z@ G d5 d6e>      ZA G d7 d8e7      ZB G d9 d:e7      ZC G d; d<eDeB      ZEe7ZFyc c} w # e5$ r Y w xY w)>    N)urlsplit)HTTPResponseHTTPConnectionHTTPExceptionNotConnectedUnknownProtocolUnknownTransferEncodingUnimplementedFileModeIncompleteRead
InvalidURLImproperConnectionStateCannotSendRequestCannotSendHeaderResponseNotReadyBadStatusLineLineTooLongRemoteDisconnectederror	responsesP   i  UNKNOWNIdlezRequest-startedzRequest-senti   d   s   [^:\s][^:\r\n]*s   \n(?![ \t])|\r(?![ \t\n])z[ - ]z[ -]>   PUTPOSTPATCHc                    	 	 | j                  d      S # t        $ rl}t        |j                  |j                  |j                  |j
                  |j                         d| |j                  |j
                   dd|d      d d }~ww xY w)Nlatin-1z (z.20z) is not valid Latin-1. Use z9.encode('utf-8') if you want to send it encoded in UTF-8.)encodeUnicodeEncodeErrorencodingobjectstartendtitle)datanameerrs      5/opt/python-3.12.12/usr/lib/python3.12/http/client.py_encoder*      s    F
E{{9%% E LLJJIIGG ZZ\4		#''2D:; AE	EEs    	B	A'BB	enc_namereturnc                 @    	 | j                  d      \  } }}|r| dz  } | S )N   %   ])	partition)r+   percent_s      r)   _strip_ipv6_ifacer3      s.    3#--d3HgqDO    c                       e Zd Zd Zy)HTTPMessagec                     	 |j                         dz   }t        |      }g }d}| j                         D ]D  }|d | j                         |k(  rd}n|d d j                         sd}|s4|j	                  |       F |S )N:r      )lowerlenkeysisspaceappend)selfr'   nlsthitlines         r)   getallmatchingheadersz!HTTPMessage.getallmatchingheaders   s    	 zz|c!IIIKDBQx~~4'"1X%%'

4    
r4   N)__name__
__module____qualname__rD    r4   r)   r6   r6      s    r4   r6   c                     	 g }	 | j                  t        dz         }t        |      t        kD  rt        d      |j	                  |       t        |      t
        kD  rt        dt
        z        |dv r	 |S r)Nr9   zheader linezgot more than %d headers   
   
r4   )readline_MAXLINEr;   r   r>   _MAXHEADERSr   )fpheadersrC   s      r)   _read_headersrR      sy    
 G
{{8a<(t9xm,,tw<+% :[ HII((N r4   c                     	 dj                  |       j                  d      }t        j                  j	                  |      j                  |      S )Nr4   
iso-8859-1)_class)joindecodeemailparserParserparsestr)header_linesrU   hstrings      r)   _parse_header_linesr^      sE    	 hh|$++L9G<<f-66w??r4   c                 2    	 t        |       }t        ||      S N)rR   r^   )rP   rU   rQ   s      r)   parse_headersra      s    :BGw//r4   c                        e Zd ZddZd Zd Zd Zd Z fdZ fdZ	d Z
d	 Zd d
Zd Zd Zd Zd Zd dZd Zd Zd Zd!dZd!dZd! fd	Zd Zd Zd Zd dZd Zd Zd Zd Zd Z  xZ!S )"r   c                    |j                  d      | _        || _        || _        d x| _        | _        t        | _        t        | _        t        | _	        t        | _
        t        | _        t        | _        t        | _        y )Nrb)makefilerP   
debuglevel_methodrQ   msg_UNKNOWNversionstatusreasonchunked
chunk_leftlength
will_close)r?   sockrf   methodurls        r)   __init__zHTTPResponse.__init__  se     --%$ #'&tx  ""r4   c                 l   t        | j                  j                  t        dz         d      }t	        |      t        kD  rt        d      | j                  dkD  rt        dt        |             |st        d      	 |j                  d d      \  }}}|j                  d	      s| j                          t        |      	 t              }|d
k  s|dkD  rt        |      	 ||fS # t        $ r- 	 |j                  d d      \  }}d}n# t        $ r d}Y nw xY wY w xY w# t        $ r t        |      w xY w)Nr9   rT   zstatus liner   zreply:z-Remote end closed connection without response    zHTTP/r   i  )strrP   rM   rN   r;   r   rf   printreprr   split
ValueError
startswith_close_connr   int)r?   rC   rj   rk   rl   s        r)   _read_statuszHTTPResponse._read_status#  sD   477##HqL1<@t9xm,,??Q(DJ' % &1 2 2	&*jjq&9#GVV !!'*%%	&[F|v|#D))  , &&%  	"&**T1"5 		   	&%%	&sB   <C% ? D %	D/DDDDDDDD3c                    | j                   y 	 | j                         \  }}}|t        k7  rn2t        | j                        }| j
                  dkD  rt        d|       ~P|x| _        | _        |j                         | _
        |dv rd| _        n$|j                  d      rd| _        nt        |      t        | j                        x| _         | _        | j
                  dkD  r2| j                   j!                         D ]  \  }}t        d|d	z   |        | j                   j#                  d
      }|r"|j%                         dk(  rd| _        d | _        nd| _        | j+                         | _        d | _        | j                   j#                  d      }|r4| j&                  s(	 t1        |      | _        | j.                  dk  rd | _        nd | _        |t4        k(  s%|t6        k(  sd|cxk  rdk  sn | j8                  dk(  rd| _        | j,                  s"| j&                  s| j.                  d| _        y y y y # t2        $ r
 d | _        Y vw xY w)NTr   zheaders:)zHTTP/1.0zHTTP/0.9
   zHTTP/1.   header:r8   transfer-encodingrm   Fcontent-lengthr      HEAD)rQ   r   CONTINUErR   rP   rf   ry   coderk   striprl   rj   r}   r   ra   rh   itemsgetr:   rm   rn   _check_closerp   ro   r   r|   
NO_CONTENTNOT_MODIFIEDrg   )	r?   rj   rk   rl   skipped_headershdrvaltr_encro   s	            r)   beginzHTTPResponse.beginD  s   <<# &*&7&7&9#GVV!+DGG4O"j/2  #)(	DKlln..DL	*DL!'**"/"88tx??Q LL..0SisC0 1 !!"56flln	1DL"DO DL ++- !!"23$,,'!&k ;;?"&DKDK j Fl$:6CLLF"DK
 KK"DO     #  #"#s    H2 2IIc                 F   | j                   j                  d      }| j                  dk(  r|rd|j                         v ryy| j                   j                  d      ry|rd|j                         v ry| j                   j                  d      }|rd|j                         v ryy)N
connectionr   closeTFz
keep-alivezproxy-connection)rQ   r   rj   r:   )r?   connpconns      r)   r   zHTTPResponse._check_close  s    ||-<<2 4::</ <<L) LDJJL0   !34\U[[]2 r4   c                 J    | j                   }d | _         |j                          y r`   )rP   r   )r?   rP   s     r)   r~   zHTTPResponse._close_conn  s    WW

r4   c                     	 t         |           | j                  r| j                          y y # | j                  r| j                          w w xY wr`   )superr   rP   r~   r?   	__class__s    r)   r   zHTTPResponse.close  sB    	#GMOww  " tww  " s	   / Ac                 p    t         |           | j                  r| j                  j                          y y r`   )r   flushrP   r   s    r)   r   zHTTPResponse.flush  s%    77GGMMO r4   c                      	 y)NTrH   r?   s    r)   readablezHTTPResponse.readable  s    !r4   c                      	 | j                   d u S r`   )rP   r   s    r)   isclosedzHTTPResponse.isclosed  s    / ww$r4   c                    	 | j                   y| j                  dk(  r| j                          y| j                  r| j	                  |      S ||dk\  r| j
                  || j
                  kD  r| j
                  }| j                   j                  |      }|s|r| j                          |S | j
                  :| xj
                  t        |      z  c_        | j
                  s| j                          |S | j
                  | j                   j                         }n#	 | j                  | j
                        }d| _        | j                          |S # t        $ r | j                           w xY w)Nr4   r   r   )
rP   rg   r~   rm   _read_chunkedro   readr;   
_safe_readr   )r?   amtss      r)   r   zHTTPResponse.read  s;   M77?<<6!<<%%c**?sax{{&3+<kkS!A   "
 H	 (s1v%{{$$&H {{"GGLLN4A  H & $$&s   E E*c                    	 | j                   y| j                  dk(  r| j                          y| j                  r| j	                  |      S | j
                  0t        |      | j
                  kD  rt        |      d| j
                   }| j                   j                  |      }|s|r| j                          |S | j
                  1| xj
                  |z  c_        | j
                  s| j                          |S )Nr   r   )	rP   rg   r~   rm   _readinto_chunkedro   r;   
memoryviewreadinto)r?   br@   s      r)   r   zHTTPResponse.readinto  s    	 77?<<6!<<))!,,;;"1v#qM!DKK0
 GGQQ 
 	 [[$KK1K;;  "r4   c                    | j                   j                  t        dz         }t        |      t        kD  rt	        d      |j                  d      }|dk\  r|d | }	 t        |d      S # t        $ r | j                           w xY w)Nr9   z
chunk size   ;r      )	rP   rM   rN   r;   r   findr   r|   r~   )r?   rC   is      r)   _read_next_chunk_sizez"HTTPResponse._read_next_chunk_size  s    ww1-t9xl++IIdO68D	tR=  	 		s   A( (Bc                     	 | j                   j                  t        dz         }t        |      t        kD  rt	        d      |sy |dv ry H)Nr9   ztrailer linerJ   )rP   rM   rN   r;   r   r?   rC   s     r)   _read_and_discard_trailerz&HTTPResponse._read_and_discard_trailer)  sO     77##HqL1D4y8#!.11 ,, r4   c                     | j                   }|sR|| j                  d       	 | j                         }|dk(  r"| j                          | j                          d }|| _         |S # t        $ r t	        d      w xY w)Nrv   r4   r   )rn   r   r   r|   r   r   r~   )r?   rn   s     r)   _get_chunk_leftzHTTPResponse._get_chunk_left7  s     __
%"*!779
 Q..0  "!
(DO  *$S))*s   A# #A8c                    ||dk  rd }g }	 | j                         x}s|0||k  r+|j                  | j                  |             ||z
  | _        nA|j                  | j                  |             |||z  }d| _        | j                         x}sdj	                  |      S # t
        $ r }t        dj	                  |            |d }~ww xY wNr   r4   )r   r>   r   rn   rV   r   )r?   r   valuern   excs        r)   r   zHTTPResponse._read_chunkedO  s    ?sQwC	;!%!5!5!77:D?sj'8LL!56&03&6DOT__Z89?:%C"# "&!5!5!77:D 88E?" 	; %1s:	;s   BB# B# #	C,CCc                 <   d}t        |      }	 	 | j                         }||S t        |      |k  r | j                  |      }||z
  | _        ||z   S |d | }| j                  |      }||d  }||z  }d| _        j# t
        $ r t        t        |d|             w xY w)Nr   )r   r   r;   _safe_readintorn   r   bytes)r?   r   total_bytesmvbrn   r@   temp_mvbs          r)   r   zHTTPResponse._readinto_chunkedc  s    m	:!113
%&&s8z)++C0A&01nDO&?*{
+''1!"gq "#    	: q;'7!899	:s   A: -A: (A: :!Bc                     	 | j                   j                  |      }t        |      |k  rt        ||t        |      z
        |S r`   )rP   r   r;   r   )r?   r   r&   s      r)   r   zHTTPResponse._safe_read{  s@    	 ww||C t9s? s3t9}55r4   c                     	 t        |      }| j                  j                  |      }||k  rt        t	        |d |       ||z
        |S r`   )r;   rP   r   r   r   )r?   r   r   r@   s       r)   r   zHTTPResponse._safe_readinto  sI    @!fGGQs7 q!us1u55r4   c                    	 | j                   | j                  dk(  ry| j                  r| j                  |      S | j                   |dk  s|| j                  kD  r| j                  }| j                   j                  |      }|s|r| j                          |S | j                  :| xj                  t        |      z  c_        | j                  s| j                          |S Nr   r4   r   )rP   rg   rm   _read1_chunkedro   read1r~   r;   )r?   r@   results      r)   r   zHTTPResponse.read1  s    	 77?dllf4<<&&q));;"AT[[Aq!!
 	 [[$KK3v;&K;;  "r4   c                     | j                   | j                  dk(  ry| j                  r| j                  |      S | j                   j	                  |      S )Nr   r4   )rP   rg   rm   _peek_chunkedpeek)r?   r@   s     r)   r   zHTTPResponse.peek  sE     77?dllf4<<%%a((ww||Ar4   c                    | j                   | j                  dk(  ry| j                  rt        |   |      S | j
                   |dk  s|| j
                  kD  r| j
                  }| j                   j	                  |      }|s|r| j                          |S | j
                  :| xj
                  t        |      z  c_        | j
                  s| j                          |S r   )rP   rg   rm   r   rM   ro   r~   r;   )r?   limitr   r   s      r)   rM   zHTTPResponse.readline  s    77?dllf4<<7#E**;;"	UT[[5HKKE!!%(%
 	 [[$KK3v;&K;;  "r4   c                     | j                         }||dk(  ryd|cxk  r|k  sn |}| j                  j                  |      }| xj                  t	        |      z  c_        |st        d      |S r   )r   rP   r   rn   r;   r   )r?   r@   rn   r   s       r)   r   zHTTPResponse._read1_chunked  sj     ))+
aQ$*$Aww}}Q3t9$ %%r4   c                     	 | j                         }|y| j                  j                  |      d | S # t        $ r Y yw xY w)Nr4   )r   r   rP   r   )r?   r@   rn   s      r)   r   zHTTPResponse._peek_chunked  sP    	--/J  ww||J'44  		s   3 	??c                 6    | j                   j                         S r`   )rP   filenor   s    r)   r   zHTTPResponse.fileno  s    ww~~r4   c                     	 | j                   
t               | j                   j                  |      xs |}t        |t              st        |d      s|S dj                  |      S )N__iter__z, )rQ   r   get_all
isinstancerx   hasattrrV   )r?   r'   defaultrQ   s       r)   	getheaderzHTTPResponse.getheader  s\    
	 <<"$$,,&&t,7gs#77J+GN99W%%r4   c                 v    	 | j                   
t               t        | j                   j                               S r`   )rQ   r   listr   r   s    r)   
getheaderszHTTPResponse.getheaders  s0    4<<"$$DLL&&())r4   c                     | S r`   rH   r   s    r)   r   zHTTPResponse.__iter__  s    r4   c                     	 | j                   S r`   )rQ   r   s    r)   infozHTTPResponse.info  s    	( ||r4   c                     	 | j                   S r`   )rs   r   s    r)   geturlzHTTPResponse.geturl  s    	 xxr4   c                     	 | j                   S r`   )rk   r   s    r)   getcodezHTTPResponse.getcode  s    	 {{r4   )r   NNr`   ))"rE   rF   rG   rt   r   r   r   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rM   r   r   r   r   r   r   r   r   r   __classcell__r   s   @r)   r   r      s    #<'BF#P:
#
&P D 0;(:0
&"5 &(*
.
r4   r   c                     t        j                         }| dk(  r|j                  dg       |j                  d|_        |S )Nr   zhttp/1.1T)ssl_create_default_https_contextset_alpn_protocolspost_handshake_auth)http_versioncontexts     r)   _create_https_contextr   &  sC     //1Gr""J<0"".&*#Nr4   c                   
   e Zd ZdZdZeZeZdZ	dZ
ed        Zed        Zdej                  ddf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#dZ	 	 d$dZd Zd Zd Z d Z!d Z"d%dddZ#di fdddZ$d  Z%d! Z&y)&r   r   zHTTP/1.1r9   r   c                 8    	 t        | t        j                        S r`   )r   io
TextIOBase)streams    r)   
_is_textIOzHTTPConnection._is_textIO=  s    	&"--00r4   c                     	 | |j                         t        v ryy t        | d      ry 	 t        |       }|j                  S # t
        $ r Y nw xY wt        | t              rt        |       S y )Nr   r   )	upper_METHODS_EXPECTING_BODYr   r   nbytes	TypeErrorr   rx   r;   )bodyrr   mvs      r)   _get_content_lengthz"HTTPConnection._get_content_lengthC  sv    	 < ||~!884 	D!B99 		 dC t9s   A 	AAN    c                 R   || _         || _        || _        d | _        g | _        d | _        t        | _        d | _        d | _	        d | _
        i | _        d | _        | j                  ||      \  | _        | _        | j!                  | j                         t"        j$                  | _        y r`   )timeoutsource_address	blocksizerq   _buffer_HTTPConnection__response_CS_IDLE_HTTPConnection__staterg   _tunnel_host_tunnel_port_tunnel_headers_raw_proxy_headers_get_hostporthostport_validate_hostsocketcreate_connection_create_connection)r?   r  r  r  r  r  s         r)   rt   zHTTPConnection.__init__c  s    ,"	  !"&!%!3!3D$!?DIDII& #)":":r4   c                    	 | j                   rt        d      | j                  ||      \  | _        | _        |r|j                         | _        n| j                  j                          t        d | j                  D              sI| j                  j                  d      j                  d      }d|| j                  fz  | j                  d<   y y )Nz.Can't set up tunnel for established connectionc              3   B   K   | ]  }|j                         d k(    yw)r  Nr:   ).0headers     r)   	<genexpr>z,HTTPConnection.set_tunnel.<locals>.<genexpr>  s     O:N6<<>V+:Ns   idnaasciiz%s:%dHost)rq   RuntimeErrorr  r
  r  copyr  clearanyr   rW   )r?   r  r  rQ   encoded_hosts        r)   
set_tunnelzHTTPConnection.set_tunnelz  s    	* 99OPP/3/A/A$/M,4,#*<<>D   &&(O$:N:NOO,,33F;BB7KL+2d//61 ,1D  ( Pr4   c                 H   |K|j                  d      }|j                  d      }||kD  r	 t        ||dz   d        }|d | }n| j                  }|r|d   dk(  r|d   dk(  r|dd }||fS # t        $ r/ ||dz   d  dk(  r| j                  }nt	        d||dz   d  z        Y dw xY w)	Nr8   ]r9   rw   znonnumeric port: '%s'r   [r   )rfindr   r|   default_portr   )r?   r  r  r   js        r)   r  zHTTPConnection._get_hostport  s    <

3A

3A1uOtAaCDz?D BQx((DGsNtBx3":Dd| " OAaCDzR'#00()@4!:)MNN Os   A) )5B! B!c                     || _         y r`   )rf   )r?   levels     r)   set_debuglevelzHTTPConnection.set_debuglevel  s	    r4   c                 .    d|v r|d   dk7  rd|z   dz   S |S )N   :r   [      [r/   rH   )r?   ips     r)   
_wrap_ipv6zHTTPConnection._wrap_ipv6  s(    2:"Q%7*"9t##	r4   c                    d| j                  | j                  j                  d            | j                  | j                  j                  d      fz  }|g}| j
                  j                         D ]+  \  }}|j                  | d| dj                  d             - |j                  d       | j                  dj                  |             ~| j                  | j                  | j                  	      }	 |j                         \  }}}t        |j                        | _        | j"                  d
kD  r+| j                   D ]  }t%        d|j'                                 |t(        j*                  j,                  k7  r/| j/                          t1        d| d|j3                                	 |j/                          y # |j/                          w xY w)Ns   CONNECT %s:%d %s
r  r  z: 
r   rK   r4   rr   r   r   zTunnel connection failed:  )r2  r
  r   r  _http_vsn_strr  r   r>   sendrV   response_classrq   rg   r   rR   rP   r  rf   ry   rW   http
HTTPStatusOKr   OSErrorr   )	r?   connectrQ   r  r   responserj   r   messages	            r)   _tunnelzHTTPConnection._tunnel  s   )OOD--44V<=%%g.-0 0 )!11779MFENNfXRwd3::9EF :w 			#((7#$&&tyy&F	'/'<'<'>$WdG&3HKK&@D#""55F)V]]_5 6 t)))

 :4&'--/ARSTT *
 NNHNNs   9B4F? ?Gc                 J    	 | j                   t        | j                         S d S r`   )r  r^   r   s    r)   get_proxy_response_headersz)HTTPConnection.get_proxy_response_headers  s4    	 &&2   7 78	
 	
r4   c                    	 t        j                  d| | j                  | j                         | j	                  | j                  | j                  f| j
                  | j                        | _        	 | j                  j                  t        j                  t        j                  d       | j                  r| j!                          y y # t        $ r(}|j                  t        j                  k7  r Y d }~Jd }~ww xY w)Nzhttp.client.connectr9   )sysauditr  r  r  r  r  rq   
setsockoptr  IPPROTO_TCPTCP_NODELAYr=  errnoENOPROTOOPTr
  rA  r?   es     r)   r>  zHTTPConnection.connect  s    A		'tyy$))D++YYtyy!4<<1D1DF		II  !3!3V5G5GK
 LLN 	  	ww%+++ ,	s   19C 	C9C44C9c                 
   	 t         | _        	 | j                  }|rd | _        |j                          | j                  }|rd | _        |j                          y y # | j                  }|rd | _        |j                          w w xY wr`   )r  r	  rq   r   r  )r?   rq   r?  s      r)   r   zHTTPConnection.close  su    6		!99D 	

H"&   H"&  s   %A (Bc                    	 | j                   '| j                  r| j                          n
t               | j                  dkD  rt        dt        |             t        |d      r| j                  dkD  rt        d       | j                  |      }|r| j                  dkD  rt        d       |j                  | j                        x}rc|r|j                  d      }t        j                  d| |       | j                   j                  |       |j                  | j                        x}rcy t        j                  d| |       	 | j                   j                  |       y # t        $ r` t!        |t"        j$                  j&                        r$|D ]  }| j                   j                  |        Y y t        dt)        |      z        w xY w)	Nr   zsend:r   zsending a readableencoding file using iso-8859-1rT   zhttp.client.sendz9data should be a bytes-like object or an iterable, got %r)rq   	auto_openr>  r   rf   ry   rz   r   r   r   r  r   rE  rF  sendallr   r   collectionsabcIterabletype)r?   r&   r   	datablockds        r)   r8  zHTTPConnection.send  s   	
 99~~"n$??Q'4:&4 "*+__T*F$//A-67#yy88)8 ) 0 0 >I		,dI>		!!),	  $yy88)8
 		$dD1	GIId# 	G$ 8 89AII%%a(    !9;?:!F G G	Gs   E! !AG
2G
c                 <    	 | j                   j                  |       y r`   )r  r>   )r?   r   s     r)   _outputzHTTPConnection._output*  s    	 	Ar4   c              #   @  K   | j                   dkD  rt        d       | j                  |      }|r| j                   dkD  rt        d       |j                  | j                        x}r6|r|j                  d      }| |j                  | j                        x}r5y y w)Nr   zreading a readablerP  rT   )rf   ry   r   r   r  r   )r?   r   r   rW  s       r)   _read_readablezHTTPConnection._read_readable1  s     ??Q&'*doo)23#==88i8%,,\:	O $==88i8s   BBBFc                    	 | j                   j                  d       dj                  | j                         }| j                   d d = | j                  |       |t	        |d      r| j                  |      }n	 t        |       |f}|D ]e  }|s| j                  dkD  rt        d        |r3| j                  dk(  r$t        |      dd	j                  d
      |z   dz   }| j                  |       g |r"| j                  dk(  r| j                  d       y y y y # t        $ r4 	 t        |      }n$# t        $ r t        dt        |      z        w xY wY w xY w)N)r4   r4   rK   r   zAmessage_body should be a bytes-like object or an iterable, got %rr   zZero length chunk ignoredr   Xr4  r  s   0

)r  extendrV   r8  r   r\  r   r   iterrV  rf   ry   	_http_vsnr;   r   )r?   message_bodyencode_chunkedrh   chunkschunks         r)   _send_outputzHTTPConnection._send_output<  se   	
 	J'll4<<(LLO		## |V, ,,\:-
 |, +_F*9:!dnn&:"5z!nD188AEI!"E		%    $..B"6		,' #7~O $ ! >>!%l!3$ >' )H*.|*<)= > >> >s*   9D 	E!D-,E-!EEEc                 |   	 | j                   r!| j                   j                         rd | _         | j                  t        k(  rt        | _        nt        | j                        | j                  |       || _        |xs d}| j                  |       |d|d| j                  }| j                  | j                  |             | j                  dk(  r&|sd}|j                  d      rt        |      \  }}}}}|r.	 |j                  d      }| j#                  dt%        |             n| j&                  r| j&                  }	| j(                  }
n| j*                  }	| j,                  }
	 |	j                  d      }| j/                  |      }d	|	v rt%        |      }|
| j0                  k(  r| j#                  d|       n(|j3                  d      }| j#                  d|d	|
       |s| j#                  d
d       y y y # t         $ r |j                  d      }Y 	w xY w# t         $ r |	j                  d      }Y w xY w)N/r6  r   rw   r:  r  r  r  r8   zAccept-Encodingidentity)r  r   r	  r  _CS_REQ_STARTEDr   _validate_methodrg   _validate_pathr7  rZ  _encode_requestra  r}   r   r   r    	putheaderr3   r
  r  r  r  r2  r(  rW   )r?   rr   rs   	skip_hostskip_accept_encodingrequestnetlocnil
netloc_encr  r  host_encs               r)   
putrequestzHTTPConnection.putrequestr  s   	 ??t779"DO* <<8#*DL#DLL11f% jSC  &T-?-?@T))'23>>R  >>&)19#.Cc3;%+]]7%;
 NN6+<Z+HI((#00#00#yy#yy7#';;w#7  $x8Hd{#4X#>t000vx8#+??7#;v(D/IJ (0*= ( c . ;%+]]6%:
; . 7#';;v#67s$    G= +H =HHH;:H;c                 $    |j                  d      S )Nr  )r   )r?   rq  s     r)   rm  zHTTPConnection._encode_request  s    ~~g&&r4   c                 t    	 t         j                  |      }|r t        d|d|j                         d      y )Nz)method can't contain control characters.  (found at least ))$_contains_disallowed_method_pchar_researchr|   group)r?   rr   matchs      r)   rk  zHTTPConnection._validate_method  sJ    44;;FC?z J'',{{}&7q:; ; r4   c                 t    	 t         j                  |      }|r t        d|d|j                         d      y Nz&URL can't contain control characters. ry  rz  !_contains_disallowed_url_pchar_rer|  r   r}  )r?   rs   r~  s      r)   rl  zHTTPConnection._validate_path  sM    ,188=EcW M005/@C D D r4   c                 t    	 t         j                  |      }|r t        d|d|j                         d      y r  r  )r?   r  r~  s      r)   r  zHTTPConnection._validate_host  sM    G188>EdX N005/@C D D r4   c                    	 | j                   t        k7  r
t               t        |d      r|j	                  d      }t        |      st        d|      t        |      }t        |      D ]r  \  }}t        |d      r|j	                  d      ||<   n-t        |t              rt        |      j	                  d      ||<   t        ||         sct        d||          dj                  |      }|dz   |z   }| j                  |       y )Nr   r  zInvalid header name r   zInvalid header value s   
	s   : )r	  rj  r   r   r   _is_legal_header_namer|   r   	enumerater   r   rx   _is_illegal_header_valuerV   rZ  )r?   r  valuesr   	one_valuer   s         r)   rn  zHTTPConnection.putheader  s    	 <<?*"$$68$]]7+F$V,ABBf%f-LAyy(+%,,Y7q	Is+	N11':q	'q	2 fQi!IJJ . v&%%'Vr4   rc  c                ~    	 | j                   t        k(  rt        | _         n
t               | j	                  ||       y )Nr  )r	  rj  _CS_REQ_SENTr   rf  )r?   rb  rc  s      r)   
endheaderszHTTPConnection.endheaders*  s8    	 <<?*'DL"$$,~Fr4   c                0    	 | j                  |||||       y r`   )_send_request)r?   rr   rs   r   rQ   rc  s         r)   rq  zHTTPConnection.request7  s    463g~Fr4   c                 
   t        d |D              }i }d|v rd|d<   d|v rd|d<    | j                  ||fi | d|vrjd|vrhd	}| j                  ||      }|4|P| j                  d
kD  rt	        d|z         d}| j                  dd       n| j                  dt        |             nd	}|j                         D ]  \  }	}
| j                  |	|
        t        |t              rt        |d      }| j                  ||       y )Nc              3   <   K   | ]  }|j                           y wr`   r  )r  ks     r)   r  z/HTTPConnection._send_request.<locals>.<genexpr>>  s      <GqGs   r  r9   ro  zaccept-encodingrp  r   r   Fr   zUnable to determine size of %rTzTransfer-Encodingrm   zContent-Lengthr   r  )	frozensetrv  r   rf   ry   rn  rx   r   r   r*   r  )r?   rr   rs   r   rQ   rc  header_namesskipscontent_lengthr   r   s              r)   r  zHTTPConnection._send_request<  s     <G <<\!!"E+,,-E()-u- </ #,6 "'!%!9!9$!G!)'??Q.!"BT"IJ)-':IFNN#3S5HI"N!--/JCNN3& *dC  4(D^<r4   c                    	 | j                   r!| j                   j                         rd | _         | j                  t        k7  s| j                   rt	        | j                        | j
                  dkD  r3| j                  | j                  | j
                  | j                        }n'| j                  | j                  | j                        }	 	 |j                          t        | _        |j                  r| j                          |S || _         |S # t        $ r | j                           w xY w#  |j                           xY w)Nr   r5  )r  r   r	  r  r   rf   r9  rq   rg   r   ConnectionErrorr   r  rp   )r?   r?  s     r)   getresponsezHTTPConnection.getresponsej  s   	 ??t779"DO" <<<'4??"4<<00??Q**499doo26,, + @H **499T\\*JH	 
 $DL""


 O #+O # 

	NNs$   D (D. D. D++D. .E)NN)NF)FFr`   )'rE   rF   rG   ra  r7  r   r9  	HTTP_PORTr(  rQ  rf   staticmethodr   r   r  _GLOBAL_DEFAULT_TIMEOUTrt   r#  r  r,  r2  rA  rC  r>  r   r8  rZ  r\  rf  rv  rm  rk  rl  r  rn  r  rq  r  r  rH   r4   r)   r   r   3  s    IM!NLIJ1 1
  > #'0N0N $;."1H( 
@
!#GJ	4(l 16(-}~';DD8Ge G )-b G$G
,=\=r4   r   c                   P     e Zd Z	 eZdej                  dddd fdZ fdZ xZ	S )HTTPSConnectionNr  )r  r  r   r  c                r    t         t        |   |||||       |t        | j                        }|| _        y )N)r  )r   r  rt   r   ra  _context)r?   r  r  r  r  r   r  r   s          r)   rt   zHTTPSConnection.__init__  sB     /41$g2@<E 2 G /?#DMr4   c                     	 t         |           | j                  r| j                  }n| j                  }| j                  j                  | j                  |      | _        y )N)server_hostname)r   r>  r
  r  r  wrap_socketrq   )r?   r  r   s     r)   r>  zHTTPSConnection.connect  sR    6GO  "&"3"3"&))11$))BQ 2 SDIr4   r`   )
rE   rF   rG   
HTTPS_PORTr(  r  r  rt   r>  r   r   s   @r)   r  r    s1    2!	$ & > >$($$	$	S 	Sr4   r  c                       e Zd Zy)r   NrE   rF   rG   rH   r4   r)   r   r     s     	r4   r   c                       e Zd Zy)r   Nr  rH   r4   r)   r   r         r4   r   c                       e Zd Zy)r   Nr  rH   r4   r)   r   r     r  r4   r   c                       e Zd Zd Zy)r   c                 "    |f| _         || _        y r`   )argsrj   )r?   rj   s     r)   rt   zUnknownProtocol.__init__  s    H	r4   NrE   rF   rG   rt   rH   r4   r)   r   r     s    r4   r   c                       e Zd Zy)r	   Nr  rH   r4   r)   r	   r	     r  r4   r	   c                       e Zd Zy)r
   Nr  rH   r4   r)   r
   r
     r  r4   r
   c                   2    e Zd ZddZd Zej                  Zy)r   Nc                 0    |f| _         || _        || _        y r`   )r  partialexpected)r?   r  r  s      r)   rt   zIncompleteRead.__init__  s    H	 r4   c                     | j                   d| j                   z  }nd}d| j                  j                  t        | j                        |fz  S )Nz, %i more expectedrw   z%s(%i bytes read%s))r  r   rE   r;   r  rL  s     r)   __repr__zIncompleteRead.__repr__  sK    ==$$t}}4AA$(?(?(+DLL(91(> > 	>r4   r`   )rE   rF   rG   rt   r  r"   __str__rH   r4   r)   r   r     s    !> nnGr4   r   c                       e Zd Zy)r   Nr  rH   r4   r)   r   r     r  r4   r   c                       e Zd Zy)r   Nr  rH   r4   r)   r   r     r  r4   r   c                       e Zd Zy)r   Nr  rH   r4   r)   r   r     r  r4   r   c                       e Zd Zy)r   Nr  rH   r4   r)   r   r     r  r4   r   c                       e Zd Zd Zy)r   c                 <    |st        |      }|f| _        || _        y r`   )rz   r  rC   r   s     r)   rt   zBadStatusLine.__init__  s    :DE		r4   Nr  rH   r4   r)   r   r     s    r4   r   c                       e Zd Zd Zy)r   c                 B    t         j                  | dt        |fz         y )Nz&got more than %d bytes when reading %s)r   rt   rN   )r?   	line_types     r)   rt   zLineTooLong.__init__  s"    t%M(0)'<&= 	>r4   Nr  rH   r4   r)   r   r     s    >r4   r   c                       e Zd Zd Zy)r   c                 b    t         j                  | d       t        j                  | g|i | y )Nrw   )r   rt   ConnectionResetError)r?   poskws      r)   rt   zRemoteDisconnected.__init__	  s*    tR(%%d7S7B7r4   Nr  rH   r4   r)   r   r     s    8r4   r   )r&   )Gemail.parserrX   email.messagerJ  r:  r   rer  rE  collections.abcrS  urllib.parser   __all__r  r  ri   r  rj  r  globalsupdater;  __members__r  phraser   rN   rO   compile	fullmatchr  r|  r  r  r{  r   r*   r   r3   r@  Messager6   rR   r^   ra   BufferedIOBaser   r   r   r   r  r>   ImportError	Exceptionr   r   r   r   r	   r
   r   r   r   r   r   r   r   r  r   r   )vs   0r)   <module>r     sw  DL     	 	  
  ! 	
 # 	  ,, - #'//"="="D"D"FG"FQQ["FG	 6 #

#67AA %2::&CDKK  %/BJJ/@$A ! (2rzz-'@ $ 3 E % %--'' <$ .9 @ ) 0g2$$ gT
t	 t	l!&S. S8 NN$%	I 	
	= 		 	m 
	m 		M 	] 	m 		/ 		. 		. 	M >- >
8-} 8 	E- H~)  		s   H "H% %H-,H-