
†Kðh%  ã               @   sº   d  d l  m 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
 m Z d	 d
 „  Z e j d d d d „ Z d d „  Z d d „  Z d d „  Z e d ƒ Z d S)é    )Úabsolute_importNé   )Ú_appengine_environ)ÚLocationParseError)Úsixé   )ÚNoWayToWaitForSocketErrorÚwait_for_readc             C   sc   t  |  d d ƒ } | d k r" d S| d k r2 d Sy t | d d ƒSWn t k
 r^ d SYn Xd S)a$  
    Returns True if the connection is dropped and should be closed.

    :param conn:
        :class:`http.client.HTTPConnection` object.

    Note: For platforms like AppEngine, this will always return ``False`` to
    let the platform handle connection recycling transparently for us.
    ÚsockFNTÚtimeoutg        )Úgetattrr	   r   )Úconnr
   © r   úS/mod/web/acousticsspace/venv/lib/python3.5/site-packages/urllib3/util/connection.pyÚis_connection_dropped   s    
r   c             C   s’  |  \ } } | j  d ƒ r* | j d ƒ } d } t ƒ  } y | j d ƒ Wn, t k
 rx t j t d | ƒ d ƒ SYn Xxñ t j	 | | | t j
 ƒ D]Ô } | \ }	 }
 } } } d } yf t j |	 |
 | ƒ } t | | ƒ | t j k	 r÷ | j | ƒ | r
| j | ƒ | j | ƒ | SWq• t j k
 rh} z' | } | d k	 rV| j ƒ  d } WYd d } ~ Xq• Xq• W| d k	 r| ‚ t j d ƒ ‚ 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.
    ú[z[]NÚidnaz'%s', label empty or too longz!getaddrinfo returns an empty list)Ú
startswithÚstripÚallowed_gai_familyÚencodeÚUnicodeErrorr   Ú
raise_fromr   ÚsocketÚgetaddrinfoÚSOCK_STREAMÚ_set_socket_optionsÚ_GLOBAL_DEFAULT_TIMEOUTÚ
settimeoutÚbindÚconnectÚerrorÚclose)Úaddressr   Úsource_addressÚsocket_optionsÚhostÚportÚerrÚfamilyÚresÚafÚsocktypeÚprotoÚ	canonnameÚsar
   Úer   r   r   Úcreate_connection%   s<    	"
r1   c             C   s2   | d  k r d  Sx | D] } |  j  | Œ  q Wd  S)N)Ú
setsockopt)r
   ÚoptionsÚoptr   r   r   r   d   s    r   c              C   s   t  j }  t r t  j }  |  S)z³This 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)r)   r   r   r   r   l   s    		r   c             C   s}   d } d } t  j ƒ  r d St j ri y/ t j t j ƒ } | j |  d f ƒ d } Wn t k
 rh Yn X| ry | j ƒ  | S)z4Returns True if the system can bind an IPv6 address.NFr   T)r   Úis_appengine_sandboxr   Úhas_ipv6ÚAF_INET6r   Ú	Exceptionr"   )r&   r
   r9   r   r   r   Ú	_has_ipv6w   s    	

r<   z::1)Ú
__future__r   r   Úcontribr   Ú
exceptionsr   Úpackagesr   Úwaitr   r	   r   r   r1   r   r   r<   r6   r   r   r   r   Ú<module>   s   ;