
=\•jQ  ã               @   s­   d  Z  d d l Z d d l Z d d l Z d d l m Z d d g Z d d „  Z d d g Z d	 d
 „  Z	 d d „  Z
 d d „  Z d d „  Z d d d d d d d „ Z d S)z

é    N)ÚurlparseÚ	parse_urlÚget_proxy_infoc             C   s  d |  k r t  d ƒ ‚ |  j d d ƒ \ } }  t |  d d ƒ} | j rW | j } n t  d ƒ ‚ d } | j r{ | j } d } | d	 k rœ | sÍ d
 } n1 | d k r½ d } | sÍ d } n t  d | ƒ ‚ | j râ | j } n d } | j r| d | j 7} | | | | f S)z®
    parse url and the result is tuple of
    (hostname, port, resource path and the flag of secure mode)

    Parameters
    ----------
    url: str
        url string.
    ú:zurl is invalidé   ÚschemeÚhttpzhostname is invalidr   FÚwséP   ÚwssTi»  zscheme %s is invalidú/ú?)Ú
ValueErrorÚsplitr   ÚhostnameÚportÚpathÚquery)Úurlr   Úparsedr   r   Ú	is_secureÚresource© r   ú:/tmp/pip-build-jxowagp5/websocket-client/websocket/_url.pyr   #   s2    
							Ú	localhostz	127.0.0.1c             C   s5   y t  j |  ƒ Wn t  j k
 r, d SYn Xd Sd  S)NFT)ÚsocketÚ	inet_atonÚerror)Úaddrr   r   r   Ú_is_ip_addressT   s
    	r   c             C   s`   yC |  j  d ƒ \ } } t | ƒ oA d t | ƒ k o? d k  SSWn t k
 r[ d SYn Xd  S)Nr   r   é    F)r   r   Úintr   )r   r   Únetmaskr   r   r   Ú_is_subnet_address]   s
    .r#   c             C   sy   t  j d t j |  ƒ ƒ d } | j d ƒ \ } } t  j d t j | ƒ ƒ d } d d t | ƒ >d @} | | @| k S)Nz!Ir   r   l   ÿÿ r    )ÚstructÚunpackr   r   r   r!   )ÚipÚnetÚipaddrÚnetaddrr"   r   r   r   Ú_is_address_in_networke   s
    r*   c                sÆ   | s< t  j j d d ƒ j d d ƒ } | r< | j d ƒ } | sH t } d | k rX d Sˆ  | k rh d St ˆ  ƒ r‘ t ‡  f d d †  | Dƒ ƒ Sx. d	 d „  | Dƒ D] } ˆ  j | ƒ r¥ d Sq¥ Wd
 S)NÚno_proxyÚ ú ú,Ú*Tc                s+   g  |  ]! } t  | ƒ r t ˆ  | ƒ ‘ q Sr   )r#   r*   )Ú.0Zsubnet)r   r   r   ú
<listcomp>{   s   	 z%_is_no_proxy_host.<locals>.<listcomp>c             S   s%   g  |  ] } | j  d  ƒ r | ‘ q S)Ú.)Ú
startswith)r0   Údomainr   r   r   r1   |   s   	 F)	ÚosÚenvironÚgetÚreplacer   ÚDEFAULT_NO_PROXY_HOSTr   ÚanyÚendswith)r   r+   Úvr4   r   )r   r   Ú_is_no_proxy_hostn   s     !r=   r   c             C   sÁ   t  |  | ƒ r d S| r2 | } | } | | | f Sd g }	 | rQ |	 j d d ƒ xi |	 D]a }
 t j j |
 d ƒ } | rX t | ƒ } | j r  | j | j f n d } | j | j	 | f SqX Wd S)a°  
    Try to retrieve proxy host and port from environment
    if not provided in options.
    Result is (proxy_host, proxy_port, proxy_auth).
    proxy_auth is tuple of username and password
    of proxy authentication information.

    Parameters
    ----------
    hostname: <type>
        websocket server name.
    is_secure: <type>
        is the connection secure? (wss) looks for "https_proxy" in env
        before falling back to "http_proxy"
    options: <type>
        - http_proxy_host: <type>
            http proxy host name.
        - http_proxy_port: <type>
            http proxy port.
        - http_no_proxy: <type>
            host names, which doesn't use proxy.
        - http_proxy_auth: <type>
            http proxy auth information. tuple of username and password. default is None
        - proxy_type: <type>
            if set to "socks5" PySocks wrapper will be used in place of a http proxy. default is "http"
    Nr   Z
http_proxyZhttps_proxy)Nr   N)Nr   N)
r=   Úinsertr5   r6   r7   r   ÚusernameÚpasswordr   r   )r   r   Z
proxy_hostZ
proxy_portÚ
proxy_authr+   Ú
proxy_typer   ÚauthZenv_keysÚkeyÚvalueÚproxyr   r   r   r   ‚   s     	!)Ú__doc__r5   r   r$   Úsix.moves.urllib.parser   Ú__all__r   r9   r   r#   r*   r=   r   r   r   r   r   Ú<module>   s   .			