§
    sŠtjµ  ã                   óœ   — d 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  G d„ d	ej        ¦  «        Z G d
„ de¦  «        ZdS )z/The implementation of the SocketOptionsAdapter.é    N)Úadaptersé   )Ú
connection)Úpoolmanager)Ú
exceptionsc                   ó¤   ‡ — e Zd ZdZe�! eej        dej        ej	        dfg¦  «        Z
ng Z
 ej        ej        d¦  «         ˆ fd„Zd	ˆ fd„	Zˆ xZS )
ÚSocketOptionsAdapterad  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

    NÚ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                 óˆ   •— |                      d| j        ¦  «        | _         t          t          | ¦  «        j        di |¤Ž d S )NÚsocket_options© )ÚpopÚdefault_optionsr   Úsuperr	   Ú__init__)ÚselfÚkwargsÚ	__class__s     €úg/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/requests_toolbelt/adapters/socket_options.pyr   zSocketOptionsAdapter.__init__5   sN   ø€ Ø$ŸjšjÐ)9Ø)-Ô)=ñ?ô ?ˆÔð 	3�Õ" DÑ)Ô)Ô2Ð<Ð<°VÐ<Ð<Ð<Ð<Ð<ó    Fc                 óÄ   •— t           j        dk    r$t          j        |||| j        ¬¦  «        | _        d S t          t          | ¦  «                             |||¦  «         d S )Ni  )Ú	num_poolsÚmaxsizeÚblockr   )ÚrequestsÚ	__build__r   ÚPoolManagerr   r   r	   Úinit_poolmanager)r   Úconnectionsr   r   r   s       €r   r   z%SocketOptionsAdapter.init_poolmanager;   sv   ø€ ÝÔ Ò)Ð)å*Ô6Ø%ØØØ#Ô2ð	 ñ  ô  ˆDÔÐÐõ Õ&¨Ñ-Ô-×>Ò>Ø˜W eñô ð ð ð r   )F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚgetattrÚHTTPConnectionÚsocketÚIPPROTO_TCPÚTCP_NODELAYr   ÚwarningsÚwarnÚexcÚRequestsVersionTooOldr   r   Ú__classcell__©r   s   @r   r	   r	      s¾   ø€ € € € € ðð ð. ÐØ!˜'ØÔ%Ø$ØÔ  &Ô"4°aÐ8Ð9ñ
ô 
ˆˆð ˆØˆŒ�cÔ/ð.ñ	/ô 	/ð 	/ð=ð =ð =ð =ð =ðð ð ð ð ð ð ð ð ð r   r	   c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )ÚTCPKeepAliveAdapteraJ  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                 óð  •— |                      dt          j        ¦  «        }|                      dd¦  «        }|                      dd¦  «        }|                      dd¦  «        }|t          j        t          j        dfgz   }t          t          d	d ¦  «        �|t          j        t          j        |fgz  }n9t          j
        d
k    r)t          t          dd¦  «        }|t          j        ||fgz  }t          t          dd ¦  «        �|t          j        t          j        |fgz  }t          t          dd ¦  «        �|t          j        t          j        |fgz  } t          t          | ¦  «        j        dd|i|¤Ž d S )Nr   Úidleé<   Úintervalé   Úcounté   r   ÚTCP_KEEPINTVLÚdarwinÚTCP_KEEPALIVEé   ÚTCP_KEEPCNTÚTCP_KEEPIDLEr   )r   r	   r   r'   Ú
SOL_SOCKETÚSO_KEEPALIVEr%   r(   r9   ÚsysÚplatformr=   r>   r   r1   r   )r   r   r   r3   r5   r7   r;   r   s          €r   r   zTCPKeepAliveAdapter.__init__d   s€  ø€ ØŸšÐ$4Ý$8Ô$HñJô Jˆà�zŠz˜& "Ñ%Ô%ˆØ—:’:˜j¨"Ñ-Ô-ˆØ—
’
˜7 AÑ&Ô&ˆØ'ÝÔ¥Ô 3°QÐ7ð+
ñ 
ˆõ •6˜?¨DÑ1Ô1Ð=Ø¥Ô 2µFÔ4HØ (ð *ð +ñ +ˆNˆNåŒ\˜XÒ%Ð%õ $¥F¨O¸TÑBÔBˆMØ¥Ô 2°MÀ8ÐLÐMÑMˆNå•6˜=¨$Ñ/Ô/Ð;Ø¥Ô 2µFÔ4FÈÐNÐOÑOˆNå•6˜>¨4Ñ0Ô0Ð<Ø¥Ô 2µFÔ4GÈÐNÐOÑOˆNà1�Õ! 4Ñ(Ô(Ô1ð 	
ð 	
Ø)ð	
Ø-3ð	
ð 	
ð 	
ð 	
ð 	
r   )r!   r"   r#   r$   r   r.   r/   s   @r   r1   r1   J   sB   ø€ € € € € ðð ð2
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r   r1   )r$   r'   r*   rA   r   r   Ú_compatr   r   Ú r   r,   ÚHTTPAdapterr	   r1   r   r   r   ú<module>rF      sÚ   ðà 5Ð 5Ø €€€Ø €€€Ø 
€
€
€
à €€€Ø Ð Ð Ð Ð Ð à  Ð  Ð  Ð  Ð  Ð  Ø !Ð !Ð !Ð !Ð !Ð !Ø  Ð  Ð  Ð  Ð  Ð  ð8ð 8ð 8ð 8ð 8˜8Ô/ñ 8ô 8ð 8ðv7
ð 7
ð 7
ð 7
ð 7
Ð.ñ 7
ô 7
ð 7
ð 7
ð 7
r   