o
    .j&                     @  s   d dl mZ d dlZd dlZejr+ddlmZmZ ddlm	Z	 ddl
mZ ddlmZ dd	lmZ d*ddZeddejfd+ddZd,d!d"Zd-d$d%ZG d&d' d'ejZd.d(d)Ze ZdS )/    )annotationsN   )_TYPE_SOCKET_OPTIONS_TYPE_TIMEOUT_INTERNAL)HTTPConnection)AsyncHTTPConnection)AsyncSocket   )_DEFAULT_TIMEOUTconn$HTTPConnection | AsyncHTTPConnectionreturnboolc                 C  s   | j  S )z
    Returns True if the connection is dropped and should be closed.
    :param conn: :class:`urllib3.connection.HTTPConnection` object.
    )is_connected)r    r   L/home/thesage/.local/lib/python3.10/site-packages/urllib3/util/connection.pyis_connection_dropped   s   r   addresstuple[str, int]timeoutr   source_addresstuple[str, int] | Nonesocket_options_TYPE_SOCKET_OPTIONS | Nonesocket_kindsocket.SocketKindsocket.socketc                 C  s*   ddl m} |d j| ||||dS )ak  Connect to *address* and return the socket object.

    Convenience function.  Connect to *address* (a 2-tuple ``(host,
    port)``) and return the socket object.  Passing the optional
    *timeout* parameter will set the timeout on the socket instance
    before attempting to connect.  If no *timeout* is supplied, the
    global default timeout setting returned by :func:`socket.getdefaulttimeout`
    is used.  If *source_address* is set it must be a tuple of (host, port)
    for the socket to bind as a source address before making the connection.
    An host of '' or port 0 tells the OS to use the default.
    r   )ResolverDescriptionz	system://)r   r   r   r   )contrib.resolverr   from_urlnewcreate_connection)r   r   r   r   r   r   r   r   r   r!      s   r!   socksocket.socket | AsyncSocketoptionsNonec                 C  s   |d u rd S |D ]G}t |dkr| jtjkr| j|  qt |dkrO|d  }|dkr<| jtjkr<| j|d d   q|dkrO| jtjkrO| j|d d   qd S )N      tcpudp)lentypesocketSOCK_STREAM
setsockoptlower
SOCK_DGRAM)r"   r$   optprotocolr   r   r   _set_socket_options;   s   r3   socket.AddressFamilyc                  C  s   t j} trt j} | S )zThis function is designed to work in the context of
    getaddrinfo, where family=socket.AF_UNSPEC is the default and
    will perform a DNS search for both IPv6 and IPv4 records.)r,   AF_INETHAS_IPV6	AF_UNSPEC)familyr   r   r   allowed_gai_familyL   s   r9   c                      s"   e Zd ZdZd fddZ  ZS )_with_attr_sockz<socket.socket subclass that carries extra protocol metadata.r   r%   c                   s   d | _ t j|i | d S )N)_ech_configsuper__init__)selfargskwargs	__class__r   r   r=   Z   s   z_with_attr_sock.__init__)r   r%   )__name__
__module____qualname____doc__r=   __classcell__r   r   rA   r   r:   W   s    r:   c                  C  sN   d} d}t jrztt j} | d d}W n	 ty   Y nw | r%|   |S )z4Returns True if the system can bind an IPv6 address.NF)z::1r   T)r,   has_ipv6r:   AF_INET6bind	Exceptionclose)r"   rH   r   r   r   	_has_ipv6_   s   

rM   )r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   )r"   r#   r$   r   r   r%   )r   r4   )r   r   )
__future__r   r,   typingTYPE_CHECKING_typingr   r   
connectionr   _async.connectionr   contrib.ssar   r   r
   r   r-   r!   r3   r9   r:   rM   r6   r   r   r   r   <module>   s(    

!


