
    bf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mZ d dlm	Z
 d dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZ d dlZd dlZdd	lmZmZ dd
l m!Z! ddl"m#Z#m$Z$ ddlm%Z%m&Z&m'Z'm(Z(m)Z) ddl*m+Z+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9m:Z: dZ;erddl<m=Z= ee(e/dedge7f         Z>ee7gee:         f         Z? e(dde'i i dddd ej@        d          
  
        ZA G d deB          ZC G d deB          ZD ejE        ddd            G d! d"                      ZFeee(eFf         e/f         ZG G d# de!          ZHdS )$    N)deque)suppress)escape)
HTTPStatus)Logger)TYPE_CHECKINGAny	AwaitableCallableDequeOptionalSequenceTupleTypeUnioncast   )AbstractAccessLoggerAbstractStreamWriter)BaseProtocol)ceil_timeoutset_exception)HttpProcessingErrorHttpRequestParserHttpVersion10RawRequestMessageStreamWriter)access_loggerserver_logger)EMPTY_PAYLOADStreamReader)tcp_keepalive)HTTPException)AccessLogger)BaseRequest)ResponseStreamResponse)RequestHandlerRequestPayloadErrorPayloadAccessError)Serverr(   zasyncio.Task[None]UNKNOWN/TFc                       e Zd ZdZdS )r)   zPayload parsing error.N__name__
__module____qualname____doc__     N/var/www/html/Alfredo/env/lib/python3.11/site-packages/aiohttp/web_protocol.pyr)   r)   N   s            r5   r)   c                       e Zd ZdZdS )r*   z-Payload was accessed after response was sent.Nr/   r4   r5   r6   r*   r*   R   s        7777r5   r*   )auto_attribsfrozenslotsc                   .    e Zd ZU eed<   eed<   eed<   dS )_ErrInfostatusexcmessageN)r0   r1   r2   int__annotations__BaseExceptionstrr4   r5   r6   r<   r<   V   s.         KKK	LLLLLr5   r<   c            !           e Zd ZdZdZdZddeeeej	        ddddd	d
dddddde
j        dedededee         dedededededededededef  fdZdefd Zedefd!            ZdHd#ee         dd$fd%Zd&e
j        dd$f fd'Zd(ee         dd$f fd)Zd*edd$fd+ZdId,Zd-e dd$fd.Z!d/edd$fd0Z"dId1Z#dId2Z$d3e%d4e&d5edd$fd6Z'd7ed8edd$fd9Z(d7ed8edd$fd:Z)dId;Z*d3e%d<ed=e+e%ge,e&         f         de-e&ef         fd>Z.dId?Z/d3e%d@e&d<edefdAZ0	 	 	 dJd3e%dCed(ee         dDee         de&f
dEZ1dFe2de+e%ge,e&         f         fdGZ3 xZ4S )Kr(   aj  HTTP protocol implementation.

    RequestHandler handles incoming HTTP request. It reads request line,
    request headers and request payload and calls handle_request() method.
    By default it always returns with 404 response.

    RequestHandler handles errors in incoming request, like bad
    status line, bad headers or incomplete payload. If any error occurs,
    connection gets closed.

    keepalive_timeout -- number of seconds before closing
                         keep-alive connection

    tcp_keepalive -- TCP keep-alive is on, default is on

    debug -- enable debug mode

    logger -- custom logger object

    access_log_class -- custom class for access_logger

    access_log -- custom logging object

    access_log_format -- access log format string

    loop -- Optional event loop

    max_line_size -- Optional maximum header line size

    max_field_size -- Optional maximum header field size

    max_headers -- Optional maximum header size

    timeout_ceil_threshold -- Optional value to specify
                              threshold to ceil() timeout
                              values

    r   )_request_count
_keepalive_manager_request_handler_request_factory_tcp_keepalive_keepalive_time_keepalive_handle_keepalive_timeout_lingering_time	_messages_message_tail_waiter_task_handler_upgrade_payload_parser_request_parser_reading_pausedloggerdebug
access_logr   _close_force_close_current_request_timeout_ceil_thresholdg     R@TFi  i   g      $@i      )keepalive_timeoutr"   rW   access_log_classrY   access_log_formatrX   max_line_sizemax_headersmax_field_sizelingering_timeread_bufsizeauto_decompresstimeout_ceil_thresholdmanagerr+   loopr_   r"   rW   r`   rY   ra   rX   rb   rc   rd   re   rf   rg   rh   c          
         t                                          |           d| _        d| _        d | _        || _        |j        | _        |j        | _	        || _
        d| _        d | _        || _        t          |          | _        t!                      | _        d| _        d | _        d | _        d| _        d | _        t/          | |||
||t0          |          | _        d| _        	 t          |          | _        n# t6          t8          f$ r Y nw xY w|| _        |	| _        || _        |r |||          | _         nd | _         d| _!        d| _"        d S )Nr   Fg        r5   )rb   rd   rc   payload_exceptionrg   r^   )#super__init__rE   rF   r\   rG   request_handlerrH   request_factoryrI   rJ   rK   rL   rM   floatrN   r   rO   rP   rQ   rR   rS   rT   r   r)   rU   r]   	TypeError
ValueErrorrW   rX   rY   r   rZ   r[   )selfri   rj   r_   r"   rW   r`   rY   ra   rX   rb   rc   rd   re   rf   rg   rh   	__class__s                    r6   rn   zRequestHandler.__init__   s   ( 	7;*1;B;R;B;R+";?"3$^44*/'' 7;;?$(<M')#1+	=
 	=
 	=
 /0$	+01G+H+HD((:& 	 	 	D	 
$ 	&AQAQ-B BD "&D!s   &C; ;DDreturnc                 T    d                     | j        j        | j        dnd          S )Nz<{} {}>	connecteddisconnected)formatru   r0   	transportrt   s    r6   __repr__zRequestHandler.__repr__   s0    N#>5KK>
 
 	
r5   c                     | j         S N)rM   r|   s    r6   r_   z RequestHandler.keepalive_timeout   s    &&r5         .@timeoutNc                   K   d| _         | j        | j                                         | j        r| j                                         t	          t
          j        t
          j                  5  t          |          4 d{V  | j	        +| j	        
                    t          j                               | j        &| j                                        s| j         d{V  ddd          d{V  n# 1 d{V swxY w Y   ddd           n# 1 swxY w Y   | j        | j                                         | j        "| j                                         d| _        dS dS )zDo worker process exit preparations.

        We need to clean up everything and stop accepting requests.
        It is especially important for keep-alive connections.
        TN)r[   rL   cancelrQ   r   asyncioCancelledErrorTimeoutErrorr   r\   _cancelrR   doner{   close)rt   r   s     r6   shutdownzRequestHandler.shutdown   s&      !!-"))+++< 	"L!!! g,g.BCC 	- 	-#G,, - - - - - - - -(4)11'2H2J2JKKK%1$:L:Q:Q:S:S1,,,,,,,,- - - - - - - - - - - - - - - - - - - - - - - - - - -	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- )%%'''>%N  """!DNNN &%s7   .DA C6$D6
D 	 DD 	DDDr{   c                 T   t                                          |           t          t          j        |          }| j        rt          |           | j                            | 	                                          | _
        | j        J | j                            | |           d S r   )rm   connection_mader   r   	TransportrJ   r"   _loopcreate_taskstartrR   rG   )rt   r{   real_transportru   s      r6   r   zRequestHandler.connection_made  s    	***g/;; 	*.)))!Z33DJJLLAA}(((%%dN;;;;;r5   r>   c                 x   | j         d S | j                             | |           t                                          |           | j         j        }d | _         d| _        d | _        d | _        d | _        | j        | j        	                                 | j
        +|t          d          }| j
                            |           | j        | j        	                                 |r | j        | j        	                                 d | _        | j        "| j                                         d | _        d S d S )NTzConnection lost)rG   connection_lostrm   handler_cancellationr[   rI   rH   rU   rL   r   r\   ConnectionResetErrorr   rQ   rR   rT   feed_eof)rt   r>   r   ru   s      r6   r   zRequestHandler.connection_lost%  sB   = F%%dC000$$$  $}A  $ $#!-"))+++ ,{*+<==!))#...<#L!!! 	(D$6$B%%'''!+ ))+++#'D    ,+r5   parserc                     | j         J || _         | j        r(| j                             | j                   d| _        d S d S )Nr5   )rT   rP   	feed_data)rt   r   s     r6   
set_parserzRequestHandler.set_parserI  sV    #+++% 	% **4+=>>>!$D	% 	%r5   c                     d S r   r4   r|   s    r6   eof_receivedzRequestHandler.eof_receivedS  s    r5   datac                    | j         s| j        rd S | j        | j        s| j        J 	 | j                            |          \  }}}n:# t          $ r-}t          d||j                  t          fg}d}d}Y d }~nd }~ww xY w|pdD ]1\  }}| xj
        dz  c_
        | j                            ||f           2| j        }|r+|)|                                s|                    d            || _        |r|r|| _        d S d S d S | j        | j        r|r| xj        |z  c_        d S |r5| j                            |          \  }	}|	r|                                  d S d S d S )Ni  )r=   r>   r?   Fr5   r4   r   )r[   rZ   rT   rS   rU   r   r   r<   r?   r    rE   rO   appendrQ   r   
set_resultrP   r   )
rt   r   messagesupgradedtailr>   msgpayloadwaitereofs
             r6   data_receivedzRequestHandler.data_receivedV  s    	 	F '''333+/+?+I+I$+O+O((DD&   Sc3;GGGW ! !)B 6 6W##q(##%%sGn5555\F (F.v{{}}.!!$'''$DM *D *%)"""* * * * !)dm))$&  	,66t<<IC 

	 	 s   A 
A?#A::A?valc                 f    || _         | j        r"| j                                         d| _        dS dS )zMSet keep-alive connection mode.

        :param bool val: new state.
        N)rF   rL   r   )rt   r   s     r6   
keep_alivezRequestHandler.keep_alive}  sC    
 ! 	*"))+++%)D"""	* 	*r5   c                 X    d| _         | j        r| j                                         dS dS )zClose connection.

        Stop accepting new pipelining messages and close
        connection when handlers done processing messages.
        TN)rZ   rQ   r   r|   s    r6   r   zRequestHandler.close  s9     < 	"L!!!!!	" 	"r5   c                     d| _         | j        r| j                                         | j        "| j                                         d| _        dS dS )zForcefully close connection.TN)r[   rQ   r   r{   r   r|   s    r6   force_closezRequestHandler.force_close  sW     < 	"L!!!>%N  """!DNNN &%r5   requestresponsetimec                     | j         8| j                             ||| j                                        |z
             d S d S r   )r   logr   r   )rt   r   r   r   s       r6   
log_accesszRequestHandler.log_access  sG     )""7Hdjoo6G6G$6NOOOOO *)r5   argskwc                 <    | j         r | j        j         |i | d S d S r   )rX   rW   rt   r   r   s      r6   	log_debugzRequestHandler.log_debug  s6    : 	+DKt*r*****	+ 	+r5   c                 *     | j         j        |i | d S r   )rW   	exceptionr   s      r6   log_exceptionzRequestHandler.log_exception  s"    t*r*****r5   c                    | j         s| j        sd S | j        | j        z   }| j        r3| j                                        |k    r|                                  d S | j                            | j	        | j
                  | _        d S r   )r[   rF   rK   rM   rQ   r   r   r   
call_laterKEEPALIVE_RESCHEDULE_DELAY_process_keepaliverL   )rt   nexts     r6   r   z!RequestHandler._process_keepalive  s     	DO 	F#d&== < 	z  4''  """ "&!6!6+#"
 "
r5   
start_timero   c                   K   | j         J 	 	 || _         ||           d {V }d | _        n# d | _        w xY w	 t          |dd          rt          j        dt
                     |                     |||           d {V }n# t          $ r)}|}|                     |||           d {V }Y d }~nd }~wt          j	        $ r  t          j
        $ rT}|                     d|           |                     |d          }|                     |||           d {V }Y d }~nNd }~wt          $ r>}|                     |d|          }|                     |||           d {V }Y d }~nd }~ww xY w||fS )N__http_exception__Fzlreturning HTTPException object is deprecated (#2415) and will be removed, please raise the exception insteadzRequest handler timed out.exc_infoi    )rH   r\   getattrwarningswarnDeprecationWarningfinish_responser#   r   r   r   r   handle_error	Exception)rt   r   r   ro   respresetr>   s          r6   _handle_requestzRequestHandler._handle_request  s.      $000	J-(/%,_W55555555(,%%%,,,,% t1599 9 '	   ..wjIIIIIIIIEE-  	J 	J 	JD..wjIIIIIIIIEEEEEE% 	 	 	# 	J 	J 	JNN7#NFFF$$Wc22D..wjIIIIIIIIEEEEEE 	J 	J 	J$$Wc377D..wjIIIIIIIIEEEEEE	J U{s=   . B 	7B 
E-B22!E-A
D""E-/4E((E-c                   K   | j         }| j        }|J | j        }|J | j        }d}| j        J | j        J | j        s| j        sZ	 |                                | _	        | j	         d{V  n# t          j        $ r Y d| _	        n?w xY w	 d| _	        n# d| _	        w xY w| j                                        \  }}|                                }|xj        dz  c_        t          | |          }	t!          |t"                    r|                     |          }
t&          }n| j        }
|                     ||| |	|          }	 | j                             |                     |||
                    }	 | d{V \  }}n# t          j        t,          f$ r |                     d           Y | j        ||                     d           n| j        s^| j        rU| j        sN|J| j                                         }|| _        | j        #|                    ||z   | j                  | _        nnnw xY w~|r|                     d           	 | j        ||                     d           nW| j        s^| j        rU| j        sN|J| j                                         }|| _        | j        #|                    ||z   | j                  | _        nnnt?          |j                   | _        |!                                s_| j"        }| j        s|r	|                     d|           |                                }||z   }tG          t          j$        t          j                  5  |!                                s||k     rtK          ||z
            4 d{V  |&                                 d{V  ddd          d{V  n# 1 d{V swxY w Y   |                                }|!                                s||k     ddd           n# 1 swxY w Y   |!                                s0| j        s)|                     d           | '                                 tQ          |tS                                 n1# t          j        $ r |                     d           Y | j        ||                     d           n | j        s^| j        rU| j        sN|J| j                                         }|| _        | j        #|                    ||z   | j                  | _        nnntT          $ r<}| j+        r| ,                    d	|
           | -                                 Y d}~nEd}~wt\          $ r5}| ,                    d|
           | -                                 Y d}~nd}~ww xY w| j        ||                     d           n| j        s\| j        rT| j        sM|J| j                                         }|| _        | j        #|                    ||z   | j                  | _        nnn# | j        ||                     d           ne| j        s^| j        rT| j        sM|J| j                                         }|| _        | j        #|                    ||z   | j                  | _        n Y nw xY w| j        | j        s)d| _        | j        | j        '                                 dS dS dS )a_  Process incoming request.

        It reads request line, request headers and request payload, then
        calls handle_request() method. Subclass has to override
        handle_request(). start() handles various exceptions in request
        or response handling. Connection is being closed always unless
        keep_alive(True) specified.
        Nr   z&Ignored premature client disconnectionz'Ignored premature client disconnection.z(Ignored premature client disconnection 2z'Start lingering close timer for %s sec.zUncompleted request.z'Ignored premature client disconnection zUnhandled runtime exceptionr   zUnhandled exception)/r   rR   rG   rM   rI   rH   r[   rO   create_futurerQ   r   r   popleftr   requests_countr   
isinstancer<   _make_error_handlerERRORr   r   ConnectionErrorr   r{   rF   rZ   rK   rL   call_atr   boolr   is_eofrN   r   r   r   readanyr   r   r*   RuntimeErrorrX   r   r   r   )rt   rj   handlerri   r_   r   r?   r   r   writerro   r   taskr   nowre   end_tr>   s                     r6   r   zRequestHandler.start  s      z$"""-""" 3$000$000# ^	> ((#'#5#5#7#7DL,&&&&&&&&-   #'DLL ' $(DLL4DL''''#~5577GWIIKKE""a'""!$--F'8,, 8"&":":7"C"C"&"7++GWdFGTTGEz--((%II (,******KD%%.@   NN#KLLL^ >)d.>NN#LMMMM*  
t{ 
,8"&*//"3"3C36D0#5=9=$'*;$;T=T:" :" 6 g
  NN#MNNNR >)d.>NN#LMMMM*  
t{ 
,8"&*//"3"3C36D0#5=9=$'*;$;T=T:" :" 6 Q #'t"7"7 ~~'' %%)%9N, 2 2E~   #iikk #n 4%g&:G<RSS 2 2&-nn&6&6 23;;+7+D+D !< !< !< !< !< !< !< !<*1//*;*;$;$;$;$;$;$;$;!< !< !< !< !< !< !< !< !< !< !< !< !< !< !< !< !< !< !< !< !< !< !< !< !< !< !< '+iikk	 '.nn&6&6 23;;2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 #>>++ %D4E %'=>>>

g'9';';<<<<)   HIII >)d.>NN#LMMMM*  
t{ 
,8"&*//"3"3C36D0#5=9=$'*;$;T=T:" :" 6    # # #: T&&'Ds&SSS  """""""" # # #""#83"GGG  """"""""# >)d.>NN#LMMMM*  
t{ 
,8"&*//"3"3C36D0#5=9=$'*;$;T=T:" :" 6  >)d.>NN#LMMMM*  
t{ 
,8"&*//"3"3C36D0#5=9=$'*;$;T=T:" :" 6 } # ^	B   	'!%D~)$$&&&&&	' 	'))s   &A2 1B 2BB BB 	B!/R 7F R +H7.R 6H77R BR -3P O;P
O	PO	1PR PR P A#R X9 $V3)X9 1	V3:2U1,X9 1V3>+V.)X9 .V33X9 9BZ?>Z?r   c                   K   | j         N| j                             d           d| _        | j        r&| j                             | j                   d| _        	 |j        }nA# t          $ r4 |t          d          t          d                    |                    w xY w	  ||           d{V  |	                                 d{V  | 
                    |||           dS # t          $ r | 
                    |||           Y dS w xY w)a   Prepare the response and write_eof, then log access.

        This has to
        be called within the context of any exception so the access logger
        can get exception information. Returns True if the client disconnects
        prematurely.
        NFr5   z+Missing return statement on request handlerz7Web-handler should return a response instance, got {!r}T)rU   set_upgradedrS   rP   r   prepareAttributeErrorr   rz   	write_eofr   r   )rt   r   r   r   prepare_meths        r6   r   zRequestHandler.finish_responseZ  s[      + --e444!DM! )$..t/ABBB%("
	<LL 	 	 	|"#STTT"%vd||  			,w'''''''''.."""""""""
 OOGT:6665  	 	 	OOGT:66644	s   A! !>B#+C' '!DDr   r=   r?   c                    |                      d|           |j        j        dk    rt          d          d}|t          j        k    rd                    t          j                  }t          j        j        }d}| j        r?t          t                    5  t          j                    }ddd           n# 1 swxY w Y   d|j                            d	d
          v r1|rt          |          }d| d}d                    ||          }d}n|r|}|dz   |z   }t!          |||          }	|	                                 |	S )zHandle errors.

        Returns HTTP response with specific status code. Logs additional
        information. It always closes current connection.
        zError handling requestr   r   zMResponse is sent already, cannot send another response with the error messagez
text/plainz{0.value} {0.phrase}Nz	text/htmlAccept z<h2>Traceback:</h2>
<pre>z</pre>zV<html><head><title>{title}</title></head><body>
<h1>{title}</h1>
{msg}
</body></html>
)titler   z

)r=   textcontent_type)r   r   output_sizer   r   INTERNAL_SERVER_ERRORrz   descriptionrX   r   r   	traceback
format_excheadersgethtml_escaper&   r   )
rt   r   r=   r>   r?   ctr   r   tbr   s
             r6   r   zRequestHandler.handle_error  s    	3cBBB >%))!)  
 Z555*11*2RSSE2>CBz 0i(( 0 0"-//B0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 go11(B???? B$RBArAAAC0 &u#&..  ! C&.3.vG"EEEs   B66B:=B:err_infoc                 4     dt           dt          f fd}|S )Nr   rv   c                 V   K                        | j        j        j                  S r   )r   r=   r>   r?   )r   r   rt   s    r6   r   z3RequestHandler._make_error_handler.<locals>.handler  s/      $$(,8H  r5   )r%   r'   )rt   r   r   s   `` r6   r   z"RequestHandler._make_error_handler  s<    	; 	> 	 	 	 	 	 	 	
 r5   )r   )rv   N)r   NN)5r0   r1   r2   r3   r   	__slots__r   r$   r   
LOG_FORMATr   AbstractEventLooprq   r   r   r   r   rC   r@   rn   r}   propertyr_   r   r   BaseTransportr   rB   r   r	   r   r   bytesr   r   r   r   r%   r'   r   r   r   r   r   r
   r   r   r   r   r   r<   r   __classcell__)ru   s   @r6   r(   r(   `   s       % %N "#ID $("&7C*!-!8! " $! $()%H" H" H"H" '	H"
 !H" H" H" 34H" H" H" H" H" H" H" H"  !H"" #H"$ !&%H" H" H" H" H" H"T
# 
 
 
 
 '5 ' ' ' X'" "huo " " " " ">	<)> 	<4 	< 	< 	< 	< 	< 	<"(8M#: "(t "( "( "( "( "( "(H% % % % % %   %% %D % % % %N*d *t * * * *" " " "" " " "P"P.<PDIP	P P P P+s +# +$ + + + ++3 +c +d + + + +
 
 
 
&%% % ";->1J"JK	%
 
~t#	$% % % %Nw' w' w' w'r#"#*8#FK#	# # # #P '+!%1 11 1 m$	1
 #1 
1 1 1 1f 	;->!::	;       r5   )Ir   asyncio.streamsr   r   collectionsr   
contextlibr   htmlr   r   httpr   loggingr   typingr   r	   r
   r   r   r   r   r   r   r   r   attryarlabcr   r   base_protocolr   helpersr   r   r   r   r   r   r   r   r   r   streamsr    r!   tcp_helpersr"   web_exceptionsr#   web_logr$   web_requestr%   web_responser&   r'   __all__
web_serverr+   _RequestFactory_RequestHandlerURLr   r   r)   r*   sr<   _MsgTyper(   r4   r5   r6   <module>r     s                         & & & & & &                                        ; ; ; ; ; ; ; ; ' ' ' ' ' ' 0 0 0 0 0 0 0 0              . - - - - - - - 0 0 0 0 0 0 0 0 & & & & & & ) ) ) ) ) ) ! ! ! ! ! ! $ $ $ $ $ $ 2 2 2 2 2 2 2 2
I #""""""  	 K=)N*CCD		DHSMM	 	! ! ! ! !) ! ! !8 8 8 8 8 8 8 8 T$d333       43 ((23\ABZ	 Z	 Z	 Z	 Z	\ Z	 Z	 Z	 Z	 Z	r5   