U
    •uÄc	  ã                   @   s~   d dl mZ d dlmZ ddgZej e¡ ej e¡ ej	 e¡ ej
 e¡ ej e¡ dZeddd	„ƒZed
d„ ƒZdS )é    )Úpublic)ÚparseÚwsÚwss)Ú
create_urlÚ	parse_urlNFc           	      C   sÈ   t |ƒtkst‚| dkr"d| }nR|dksHt |ƒtkrD|tddƒksHt‚|dk	r^d| |f }n|rld|  }nd|  }|r~d	}nd
}|dk	r–t |¡}nd}|dk	r®t |¡}nd}t |||d|df¡S )aê  
    Create a WebSocket URL from components.

    :param hostname: WebSocket server hostname (for TCP/IP sockets) or
        filesystem path (for Unix domain sockets).
    :type hostname: str

    :param port: For TCP/IP sockets, WebSocket service port or ``None`` (to select default
        ports ``80`` or ``443`` depending on ``isSecure``. When ``hostname=="unix"``,
        this defines the path to the Unix domain socket instead of a TCP/IP network socket.
    :type port: int or str

    :param isSecure: Set ``True`` for secure WebSocket (``wss`` scheme).
    :type isSecure: bool

    :param path: WebSocket URL path of addressed resource (will be
        properly URL escaped). Ignored for RawSocket.
    :type path: str

    :param params: A dictionary of key-values to construct the query
        component of the addressed WebSocket resource (will be properly URL
        escaped). Ignored for RawSocket.
    :type params: dict

    :returns: Constructed WebSocket URL.
    :rtype: str
    Úunixzunix:%sNr   éÿÿ  z%s:%dz%s:443z%s:80r   r   ú/)	ÚtypeÚboolÚAssertionErrorÚintÚrangeÚurlparseÚquoteÚ	urlencodeÚ
urlunparse)	ÚhostnameÚportZisSecureÚpathÚparamsÚnetlocÚschemeÚppathÚquery© r   úZ/var/www/html/VPFITNESS/school/venv/lib/python3.8/site-packages/autobahn/websocket/util.pyr   1   s&    
&
r   c           	      C   sz  t   | ¡}|jdkr$td |j¡ƒ‚|jr4|jdkr<tdƒ‚|jdk	r^|jdkr^td|j ƒ‚|jdk	r„|jdkr„|j}t  |¡}nd}|}|jdk	r¼|jdkr¼|d |j }t  	|j¡}n|}i }|jd	k�r|j
|j }| d
¡d }|jdk|j||||fS |jdk�s|jdk�r2|jdk�r,d}nd}n
t|jƒ}|dk �sP|dk�r^td |¡ƒ‚|jdk|j||||fS dS )a'  
    Parses as WebSocket URL into it's components and returns a tuple:

     - ``isSecure`` is a flag which is ``True`` for ``wss`` URLs.
     - ``host`` is the hostname or IP from the URL.

    and for TCP/IP sockets:

     - ``tcp_port`` is the port from the URL or standard port derived from
       scheme (``rs`` => ``80``, ``rss`` => ``443``).

    or for Unix domain sockets:

     - ``uds_path`` is the path on the local host filesystem.

    :param url: A valid WebSocket URL, i.e. ``ws://localhost:9000`` for TCP/IP sockets or
        ``ws://unix:/tmp/file.sock`` for Unix domain sockets (UDS).
    :type url: str

    :returns: A 6-tuple ``(isSecure, host, tcp_port, resource, path, params)`` (TCP/IP) or
        ``(isSecure, host, uds_path, resource, path, params)`` (UDS).
    :rtype: tuple
    )r   r   z@invalid WebSocket URL: protocol scheme '{}' is not for WebSocketÚ z'invalid WebSocket URL: missing hostnameNz-invalid WebSocket URL: non-empty fragment '%sr
   ú?r   ú:é   r   r   éP   i»  r	   zinvalid port {})r   r   Ú
ValueErrorÚformatr   Úfragmentr   Úunquoter   Úparse_qsr   Úsplitr   r   )	ÚurlÚparsedr   r   Úresourcer   ÚfpZuds_pathZtcp_portr   r   r   r   p   s:    


r   )NFNN)Zautobahn.utilr   Úurllibr   r   Z	wsschemesÚuses_relativeÚextendÚuses_netlocÚuses_paramsÚ
uses_queryÚuses_fragmentÚ__all__r   r   r   r   r   r   Ú<module>   s   >