
     iO$                         S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	  \R                  r " S S5      r " S S\5      r " S S\5      r " S	 S
\5      rS rSS jrSS jrS rS rS rS rS rg)    N)utilc                   F    \ rS rSrSS jrS rS rSS jrS rS r	S	 r
S
rg)
BaseSocket   Nc                 H   X0l         X l        Xl        Uc2  [        R                  " U R                  [        R
                  5      nSnOG[        R                  " X@R                  [        R
                  5      n[        R                  " U5        SnU R                  XVS9U l
        g )NFTbound)logconfcfg_addrsocketFAMILYSOCK_STREAMfromfdoscloseset_optionssock)selfaddressr   r
   fdr   r	   s          ?/var/www/ias/venv/lib/python3.13/site-packages/gunicorn/sock.py__init__BaseSocket.__init__   st    	:==f.@.@ADE==[[&2D2DEDHHRLE$$T$7	    c                 <    SU R                   R                  5       -  $ )Nz<socket %d>)r   filenor   s    r   __str__BaseSocket.__str__$   s    tyy//111r   c                 .    [        U R                  U5      $ N)getattrr   )r   names     r   __getattr__BaseSocket.__getattr__'   s    tyy$''r   c                    UR                  [        R                  [        R                  S5        U R                  R
                  (       aE  [        [        S5      (       a0   UR                  [        R                  [        R                  S5        U(       d  U R                  U5        UR                  S5        [        US5      (       a  UR                  S5        UR                  U R                  R                   5        U$ ! [         a9  nUR                  [        R                  [        R                  4;  a  e  S nANS nAff = f)N   SO_REUSEPORTr   set_inheritableT)
setsockoptr   
SOL_SOCKETSO_REUSEADDRr   
reuse_porthasattrr)   OSErrorerrnoENOPROTOOPTEINVALbindsetblockingr*   listenbacklog)r   r   r	   errs       r   r   BaseSocket.set_options*   s    ))6+>+>BII  FN33 1 163F3FJ IIdO 4*++  &DII%%&  99U%6%6$EE Fs   !/D 
E/E  Ec                 :    UR                  U R                  5        g r"   )r4   r   )r   r   s     r   r4   BaseSocket.bind>   s    		$-- r   c                     U R                   c  g  U R                   R                  5         S U l         g ! [         a/  nU R                  R	                  S[        U5      5         S nAN<S nAff = f)NzError while closing socket %s)r   r   r0   r
   infostr)r   es     r   r   BaseSocket.closeA   sZ    99	CIIOO 	  	CHHMM93q6BB	Cs   2 
A+%A&&A+c                     gN r   s    r   get_backlogBaseSocket.get_backlogL   s    r   )r   r   r
   r   r"   F)__name__
__module____qualname____firstlineno__r   r   r%   r   r4   r   rE   __static_attributes__rD   r   r   r   r      s%    82((!	r   r   c                   n   ^  \ rS rSr\R
                  rS rSU 4S jjr\	S:X  a	  S r
SrU =r$ S r
SrU =r$ )		TCPSocketP   c                     U R                   R                  (       a  SnOSnU R                  R                  5       nSXS   US   4-  $ )Nhttpshttpz
%s://%s:%dr   r(   )r   is_sslr   getsockname)r   schemeaddrs      r   r   TCPSocket.__str__T   sC    99FFyy$$&vAwQ888r   c                 |   > UR                  [        R                  [        R                  S5        [        TU ]  XS9$ )Nr(   r   )r+   r   IPPROTO_TCPTCP_NODELAYsuperr   )r   r   r	   	__class__s      r   r   TCPSocket.set_options]   s2    **F,>,>Bw"4"55r   linuxc                     U R                   (       aU  Sn U R                   R                  [        R                  [        R                  S5      n[
        R                  " X5      S   $ g! [        [        4 a     gf = f)N BBBBBBBBIIIIIIIIIIIIIIIIIIIIIIIIh      r   )	r   
getsockoptr   rY   TCP_INFOstructunpackAttributeErrorr0   )r   fmttcp_info_structs      r   rE   TCPSocket.get_backlogb   sp    yy(&*ii&:&:6;M;M;A??C'QO "==>rBB  '0 s   AA( (A;:A;c                     grB   rD   r   s    r   rE   rj   o   s    r   rD   rG   )rH   rI   rJ   rK   r   AF_INETr   r   r   PLATFORMrE   rL   __classcell__r\   s   @r   rN   rN   P   s4    ^^F96 7	 		 	r   rN   c                   2    \ rS rSr\R
                  rS rSrg)
TCP6Sockets   c                 J    U R                   R                  5       u  p  nSX4-  $ )Nzhttp://[%s]:%d)r   rT   )r   hostport_s       r   r   TCP6Socket.__str__w   s(    !YY224Q4,..r   rD   N)	rH   rI   rJ   rK   r   AF_INET6r   r   rL   rD   r   r   rq   rq   s   s    __F/r   rq   c                   P   ^  \ rS rSr\R
                  rSU 4S jjrS rS r	Sr
U =r$ )
UnixSocket|   c                 \  > Uca   [         R                  " U5      n[        R                  " UR                  5      (       a  [         R                  " U5        O[        SU-  5      e[        TU ]-  XX4S9  g ! [         a,  nUR                  S   [        R                  :w  a  e  S nAN@S nAff = f)Nz%r is not a socketr   r   )r   statS_ISSOCKst_moderemove
ValueErrorr0   argsr1   ENOENTr[   r   )r   rV   r   r
   r   str?   r\   s          r   r   UnixSocket.__init__   s    :	BWWT]
 ==,,IIdO$%9D%@AAS0  66!9, -s   A5 5
B+?"B&&B+c                      SU R                   -  $ )Nzunix:%s)r   r   s    r   r   UnixSocket.__str__   s    4==((r   c                 N   [         R                  " U R                  R                  5      nUR                  U R                  5        [
        R                  " U R                  U R                  R                  U R                  R                  5        [         R                  " U5        g r"   )	r   umaskr   r4   r   r   chownuidgid)r   r   	old_umasks      r   r4   UnixSocket.bind   sX    HHTYY__-			$-- 

4==$))--?
r   rD   r"   )rH   rI   rJ   rK   r   AF_UNIXr   r   r   r4   rL   rn   ro   s   @r   rz   rz   |   s     ^^F1) r   rz   c                     [        U [        5      (       a/  [        R                  " U S   5      (       a  [        nU$ [
        n U$ [        U [        [        45      (       a  [        nU$ [        SU -  5      e)Nr   z Unable to create socket from: %r)

isinstancetupler   is_ipv6rq   rN   r>   bytesrz   	TypeError)rV   	sock_types     r   
_sock_typer      sq    $<<Q  "I  "I
 	 
D3,	'	'	  :TABBr   c                 0   / nU R                   nU Vs/ s H  n[        U[        5      (       d  M  UPM     nnU(       a  U[        U5      -  nU Vs/ s H  n[        U[        5      (       a  M  UPM     nnU R                  (       aF  [
        R                  R                  U R                  5      (       d  [        SU R                  -  5      eU R                  (       aF  [
        R                  R                  U R                  5      (       d  [        SU R                  -  5      eU(       ar  U Hj  n[        R                  " U[        R                  [        R                  5      n	U	R                  5       n
[        U
5      nU" XXS9nUR!                  U5        Ml     U$ U Hq  n[        U5      nSn	[#        S5       H  n U" X@U5      n	  O   U	c1  UR-                  S[/        U5      5        [:        R<                  " S5        UR!                  U	5        Ms     U$ s  snf s  snf ! [$         a  nUR&                  S   [(        R*                  :X  a  UR-                  S[/        U5      5        UR&                  S   [(        R0                  :X  a  UR-                  S[/        U5      5        S	nUR-                  UR3                  [/        U5      [/        U5      S
95        US:  a.  UR5                  S5        [6        R8                  " S5         SnAGMO   SnAGMV  SnAff = f)z
Create a new socket for the configured addresses or file descriptors.

If a configured address is a tuple then a TCP socket is created.
If it is a string, a Unix socket is created. Otherwise, a TypeError is
raised.
zcertfile "%s" does not existzkeyfile "%s" does not existr}   N   r   zConnection in use: %szInvalid address: %sz$connection to {addr} failed: {error})rV   errorzRetrying in 1 second.r(   zCan't connect to %s)r   r   intlistcertfiler   pathexistsr   keyfiler   r   r   r   rT   r   appendranger0   r   r1   
EADDRINUSEr   r>   EADDRNOTAVAILformatdebugtimesleepsysexit)r   r
   fds	listenersrV   r4   fdaddrladdrr   r   	sock_namer   listenerir?   msgs                   r   create_socketsr      s`    I <<D#=ttz$'<dtF=
$s)"@dd*T3*?TdE@ }}RWW^^DMM::7$--GHH||BGGNN4<<886EFF B==V^^V5G5GHD((*I"9-I #=HX&   t$	qA S1    <II+SY7HHQK/ 2 e > A8  	"66!9 0 00II5s4yA66!9 3 33II3SY?<		#**#d)3q6*BCq5II56JJqMM 	"s/   HHH.H>	H  
L*CLLc                     U  HV  nUR                  5       nUR                  5         U(       d  M,  [        U5      [        L d  M@  [        R
                  " U5        MX     g r"   )rT   r   r   rz   r   unlink)r   r   r   r   s       r   close_socketsr      s@    $$&	

6j+z9IIi 	 r   c                     SSK Jn  U R                  nU(       d  / $ SU;  a  / $ SSKJn  U" 5       (       d  / $ / nU H  nXQ;   d  M
  UR                  X   5        M     U$ )zGet ALPN protocol list from configuration.

Returns list of ALPN protocol identifiers based on http_protocols setting.
Returns empty list if HTTP/2 is not configured or available.
r   )ALPN_PROTOCOL_MAPh2)is_http2_available)gunicorn.configr   http_protocolsgunicorn.http2r   r   )r   r   r   r   alpn_protocolsprotos         r   _get_alpn_protocolsr      sm     2((N	 >!	 2	 N%!!"3":;   r   c                 4   ^  U 4S jnT R                  T U5      $ )Nc                  ~  > [         R                  " [         R                  R                  TR                  S9n U R                  TR                  TR                  S9  TR                  U l	        TR                  (       a  U R                  TR                  5        [        T5      nU(       a  U R                  U5        U $ )N)cafile)r   r   )sslcreate_default_contextPurposeCLIENT_AUTHca_certsload_cert_chainr   r   	cert_reqsverify_modeciphersset_ciphersr   set_alpn_protocols)contextr   r   s     r   default_ssl_context_factory0ssl_context.<locals>.default_ssl_context_factory  s    ,,S[[-D-DT]][M"nn<<- -T2&&~6r   )ssl_context)r   r   s   ` r   r   r     s     D"=>>r   c                 `    [        U5      R                  U SUR                  UR                  S9$ )NT)server_sidesuppress_ragged_eofsdo_handshake_on_connect)r   wrap_socketr   r   )r   r   s     r   ssl_wrap_socketr     s8    t((59>B>W>WAEA]A] ) _ _r   c                     [        U [        R                  5      (       d  g U R                  5       $ ! [        [        R
                  4 a     gf = f)zGet the negotiated ALPN protocol from an SSL socket.

Returns:
    str: The negotiated protocol name ('h2', 'http/1.1', etc.)
         or None if no protocol was negotiated.
N)r   r   	SSLSocketselected_alpn_protocolrg   SSLError)
ssl_sockets    r   get_negotiated_protocolr   $  sG     j#--000022CLL) s   2 AAc                 "    [        U 5      nUS:H  $ )zmCheck if HTTP/2 was negotiated on an SSL socket.

Returns:
    bool: True if HTTP/2 was negotiated via ALPN.
r   )r   )r   protocols     r   is_http2_negotiatedr   4  s     'z2Htr   r"   )T)r1   r   r   r   r~   re   r   r   gunicornr   platformrm   r   rN   rq   rz   r   r   r   r   r   r   r   r   rD   r   r   <module>r      s   
  	  
   
  <<: :z 
  F/ / 8
>B!:?$_ r   