ó
    úÞ jµ  ã                   ó˜   • S r SSKrSSKrSSKrSSKrSSKJr  SSKJr  SSKJr  SSK	J
r   " S S	\R                  5      r " S
 S\5      rg)z/The implementation of the SocketOptionsAdapter.é    N)Úadaptersé   )Ú
connection)Úpoolmanager)Ú
exceptionsc                   óÚ   ^ • \ rS rSrSr\b-  \" \R                  S\R                  \R                  S4/5      rO/ r\R                  " \R                  S5        U 4S jrS	U 4S jjrSrU =r$ )
ÚSocketOptionsAdapteré   a(  An adapter for requests that allows users to specify socket options.

Since version 2.4.0 of requests, it is possible to specify a custom list
of socket options that need to be set before establishing the connection.

Example usage::

    >>> import socket
    >>> import requests
    >>> from requests_toolbelt.adapters import socket_options
    >>> s = requests.Session()
    >>> opts = [(socket.IPPROTO_TCP, socket.TCP_NODELAY, 0)]
    >>> adapter = socket_options.SocketOptionsAdapter(socket_options=opts)
    >>> s.mount('http://', adapter)

You can also take advantage of the list of default options on this class
to keep using the original options in addition to your custom options. In
that case, ``opts`` might look like::

    >>> opts = socket_options.SocketOptionsAdapter.default_options + opts

Údefault_socket_optionsé   z¤This version of Requests is only compatible with a version of urllib3 which is too old to support setting options on a socket. This adapter is functionally useless.c                 óp   >• UR                  SU R                  5      U l        [        [        U ]  " S0 UD6  g )NÚsocket_options© )ÚpopÚdefault_optionsr   Úsuperr	   Ú__init__)ÚselfÚkwargsÚ	__class__s     €Úc/var/www/html/gaurav/venv/lib/python3.13/site-packages/requests_toolbelt/adapters/socket_options.pyr   ÚSocketOptionsAdapter.__init__5   s5   ø€ Ø$Ÿj™jÐ)9Ø)-×)=Ñ)=ó?ˆÔô 	Ô" DÒ2Ñ<°VÓ<ó    c                 ó¤   >• [         R                  S:¼  a'  [        R                  " UUUU R                  S9U l        g [
        [        U ]  XU5        g )Ni  )Ú	num_poolsÚmaxsizeÚblockr   )ÚrequestsÚ	__build__r   ÚPoolManagerr   r   r	   Úinit_poolmanager)r   Úconnectionsr   r   r   s       €r   r!   Ú%SocketOptionsAdapter.init_poolmanager;   sM   ø€ Ü×Ñ Ó)ä*×6Ò6Ø%ØØØ#×2Ñ2ñ	 ˆDÕô Ô&¨Ñ>Ø eõr   )r   r   )F)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   ÚgetattrÚHTTPConnectionÚsocketÚIPPROTO_TCPÚTCP_NODELAYr   ÚwarningsÚwarnÚexcÚRequestsVersionTooOldr   r!   Ú__static_attributes__Ú__classcell__©r   s   @r   r	   r	      sn   ø† ñð. ÑÙ!Ø×%Ñ%Ø$Ø× Ñ  &×"4Ñ"4°aÐ8Ð9ó
‰ð ˆØ�Š�c×/Ñ/ð.ô	/õ=÷õ r   r	   c                   ó,   ^ • \ rS rSrSrU 4S jrSrU =r$ )ÚTCPKeepAliveAdapteréJ   a
  An adapter for requests that turns on TCP Keep-Alive by default.

The adapter sets 4 socket options:

- ``SOL_SOCKET`` ``SO_KEEPALIVE`` - This turns on TCP Keep-Alive
- ``IPPROTO_TCP`` ``TCP_KEEPINTVL`` 20 - Sets the keep alive interval
- ``IPPROTO_TCP`` ``TCP_KEEPCNT`` 5 - Sets the number of keep alive probes
- ``IPPROTO_TCP`` ``TCP_KEEPIDLE`` 60 - Sets the keep alive time if the
  socket library has the ``TCP_KEEPIDLE`` constant

The latter three can be overridden by keyword arguments (respectively):

- ``interval``
- ``count``
- ``idle``

You can use this adapter like so::

   >>> from requests_toolbelt.adapters import socket_options
   >>> tcp = socket_options.TCPKeepAliveAdapter(idle=120, interval=10)
   >>> s = requests.Session()
   >>> s.mount('http://', tcp)

c                 óê  >• UR                  S[        R                  5      nUR                  SS5      nUR                  SS5      nUR                  SS5      nU[        R                  [        R
                  S4/-   n[        [        S	S 5      b&  U[        R                  [        R                  U4/-  nO;[        R                  S
:X  a'  [        [        SS5      nU[        R                  Xd4/-  n[        [        SS 5      b%  U[        R                  [        R                  U4/-  n[        [        SS 5      b%  U[        R                  [        R                  U4/-  n[        [        U ]>  " SSU0UD6  g )Nr   Úidleé<   Úintervalé   Úcounté   r   ÚTCP_KEEPINTVLÚdarwinÚTCP_KEEPALIVEé   ÚTCP_KEEPCNTÚTCP_KEEPIDLEr   )r   r	   r   r+   Ú
SOL_SOCKETÚSO_KEEPALIVEr)   r,   r?   ÚsysÚplatformrC   rD   r   r6   r   )r   r   r   r9   r;   r=   rA   r   s          €r   r   ÚTCPKeepAliveAdapter.__init__d   s]  ø€ ØŸ™Ð$4Ü$8×$HÑ$HóJˆà�z‰z˜& "Ó%ˆØ—:‘:˜j¨"Ó-ˆØ—
‘
˜7 AÓ&ˆØ'Ü×Ñ¤× 3Ñ 3°QÐ7ð+
ñ 
ˆô ”6˜?¨DÓ1Ñ=Ø¤× 2Ñ 2´F×4HÑ4HØ (ð *ð +ñ +‰Nä�\‰\˜XÓ%ô $¤F¨O¸TÓBˆMØ¤× 2Ñ 2°MÐLÐMÑMˆNä”6˜=¨$Ó/Ñ;Ø¤× 2Ñ 2´F×4FÑ4FÈÐNÐOÑOˆNä”6˜>¨4Ó0Ñ<Ø¤× 2Ñ 2´F×4GÑ4GÈÐNÐOÑOˆNäÔ! 4Ò1ñ 	
Ø)ð	
Ø-3ó	
r   r   )r$   r%   r&   r'   r(   r   r2   r3   r4   s   @r   r6   r6   J   s   ø† ñ÷2
ó 
r   r6   )r(   r+   r.   rG   r   r   Ú_compatr   r   Ú r   r0   ÚHTTPAdapterr	   r6   r   r   r   Ú<module>rM      s@   ðá 5Û Û Û 
ã Ý å  Ý !Ý  ô8˜8×/Ñ/ô 8ôv7
Ð.õ 7
r   