+
    jX                     R    R t ^ RIHt ^ RIHt  ! R R4      t ! R R4      tRR.tR# )zV
HTTP/2 request wrapper.

Provides a Request-compatible interface for HTTP/2 streams.
)BytesIO)split_request_uric                   Z   a  ] tR t^t o RtR tRR ltRR ltRR ltR t	R t
R	 tR
tV tR# )	HTTP2BodyzBody wrapper for HTTP/2 request data.

Provides a file-like interface to the request body,
compatible with gunicorn's Body class expectations.
c                F    \        V4      V n        \        V4      V n        R# )zNInitialize with body data.

Args:
    data: bytes containing the request body
N)r   _datalen_len)selfdatas   &&K/var/www/idalgo/venv/lib/python3.14/site-packages/gunicorn/http2/request.py__init__HTTP2Body.__init__   s     T]
I	    Nc                t    Vf   V P                   P                  4       # V P                   P                  V4      # )zRead data from the body.

Args:
    size: Number of bytes to read, or None for all remaining

Returns:
    bytes: The requested data
)r   readr
   sizes   &&r   r   HTTP2Body.read!   s-     <::??$$zzt$$r   c                t    Vf   V P                   P                  4       # V P                   P                  V4      # )zfRead a line from the body.

Args:
    size: Maximum bytes to read

Returns:
    bytes: A line of data
)r   readliner   s   &&r   r   HTTP2Body.readline.   s1     <::&&((zz""4((r   c                8    V P                   P                  V4      # )zmRead all lines from the body.

Args:
    hint: Approximate byte count hint

Returns:
    list: List of lines
)r   	readlines)r
   hints   &&r   r   HTTP2Body.readlines;   s     zz##D))r   c                ,    \        V P                  4      # )zIterate over lines in the body.)iterr   r
   s   &r   __iter__HTTP2Body.__iter__F   s    DJJr   c                    V P                   # )zReturn the content length.)r	   r   s   &r   __len__HTTP2Body.__len__J   s    yyr   c                :    V P                   P                  4        R# )zClose the body stream.N)r   closer   s   &r   r%   HTTP2Body.closeN   s    

r   )r   r	   )N)__name__
__module____qualname____firstlineno____doc__r   r   r   r   r   r"   r%   __static_attributes____classdictcell____classdict__s   @r   r   r      s2     %)	*  r   r   c                   b   a  ] tR t^St o RtR tR tR tR t]	R 4       t
]	R 4       tR tR	tV tR
# )HTTP2RequestzHTTP/2 request wrapper compatible with gunicorn Request interface.

Wraps an HTTP2Stream to provide the same interface as the HTTP/1.x
Request class, allowing workers to handle HTTP/2 requests using
existing code paths.
c                   Wn         W n        W0n        W0n        RV n        VP                  4       pVP                  RR4      V n        VP                  RR4      V n        VP                  RR4      pVP                  RR4      pW`n	         \        V4      pVP                  ;'       g    RV n        VP                  ;'       g    RV n        VP                  ;'       g    RV n        WPn        . V n        VP#                  4        F0  w  rV P                   P%                  VP'                  4       V	34       K2  	  V'       dM   V P                    U
Uu. uF  w  rV
R	8w  g   K  W3NK  	  upp
V n        V P                   P%                  R	V34       . V n        VP(                  '       d6   VP(                   UU	u. uF  w  rVP'                  4       V	3NK  	  up	pV n        VP+                  4       p\-        V4      V n        R
V n        R
V n        VP4                  V n        RV n        VP:                  V n        VP<                  V n        R#   \         d    Y`n        RT n        RT n         ELi ; iu upp
i u up	pi )zInitialize from an HTTP/2 stream.

Args:
    stream: HTTP2Stream instance with received headers/body
    cfg: Gunicorn configuration object
    peer_addr: Client address tuple (host, port)
z:methodGETz:schemehttpsz
:authority z:path/HOSTFN)       )streamcfg	peer_addrremote_addrversionget_pseudo_headersgetmethodschemeurir   pathqueryfragment
ValueError
_authorityheadersget_regular_headersappenduppertrailersget_request_bodyr   body
must_close_expected_100_continue	stream_id
req_numberproxy_protocol_infopriority_weightpriority_depends_on)r
   r:   r;   r<   pseudo	authorityrD   partsnamevaluenv	body_datas   &&&&         r   r   HTTP2Request.__init__[   s     "$  **,jjE2jjG4JJ|R0	zz'3' 	%d+E

((bDI**DJ!NN00bDM $ !557KDLLu 56 8 /3||K|tqqF{FQF|KDLLL 34 ??? $*??#2KD u%#2DM ++-	i(	  &+# !** $(   &55#)#=#= [  	IDJDM	$ Ls0   	8I I I I(I(2I.I%$I%c                    RV n         R# )z1Force the connection to close after this request.TNrP   r   s   &r   force_closeHTTP2Request.force_close   s	    r   c                .    V P                   '       d   R# R# )zCheck if connection should close after this request.

HTTP/2 connections are persistent by design, but we may still
need to close if explicitly requested.

Returns:
    bool: True if connection should close
TFra   r   s   &r   should_closeHTTP2Request.should_close   s     ???r   c                d    VP                  4       pV P                   F  w  r#W!8X  g   K  Vu # 	  R# )zGet a header value by name.

Args:
    name: Header name (case-insensitive)

Returns:
    str: Header value, or None if not found
N)rL   rI   )r
   rZ   h_nameh_values   &&  r   
get_headerHTTP2Request.get_header   s.     zz|#||OF~  , r   c                l    V P                  R4      pVe    \        V4      # R#   \         d     R# i ; i)z[Get the Content-Length header value.

Returns:
    int: Content length, or None if not set
zCONTENT-LENGTHN)rj   intrG   )r
   cls   & r   content_lengthHTTP2Request.content_length   sB     __-.>2w   s   
$ 33c                $    V P                  R4      # )zWGet the Content-Type header value.

Returns:
    str: Content type, or None if not set
zCONTENT-TYPE)rj   r   s   &r   content_typeHTTP2Request.content_type   s     ~..r   c                j    R V P                    RV P                   RV P                  P                   R2# )z<HTTP2Request method=z path=z stream_id=>)rA   rD   r:   rR   r   s   &r   __repr__HTTP2Request.__repr__   s?    kk] #II; ../q2	
r   )rH   rQ   rO   r;   rF   rI   rA   rP   rD   r<   rV   rU   rT   rE   r=   rS   rB   r:   rM   rC   r>   N)r'   r(   r)   r*   r+   r   rb   re   rj   propertyro   rr   rv   r,   r-   r.   s   @r   r1   r1   S   sR     K>Z   / /
 
r   r1   N)r+   ior   gunicorn.utilr   r   r1   __all__ r   r   <module>r}      s6     +? ?DT
 T
n ;
'r   