o
    @BiN                     @   s   d dl mZ d dlmZ d dlZd dlmZ ejsd dlZn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 )    )absolute_import)publicN)urllib)parsewswss)
create_url	parse_urlFc           	      C   s   t |tksJ | dkrd| }n*|du s%t |tjv r#|tddv s%J |dur0d| |f }n|r7d|  }nd|  }|r@d	}nd
}|durMtj|}nd}|durZtj|}nd}tj	|||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sixinteger_typesranger   r   quote	urlencode
urlunparse)	hostnameportisSecurepathparamsnetlocschemeppathquery r   W/var/www/html/Trade-python/venv/lib/python3.10/site-packages/autobahn/websocket/util.pyr   =   s&   
(
r   c           	      C   sl  t  | }|jdvrtd|j|jr|jdkrtd|jdur/|jdkr/td|j |jdurC|jdkrC|j}tj	|}nd}|}|j
du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u s|jdkr|jdkrd}nd}nt|j}|dk s|dkrtd||jdk|j||||f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 {})urlparser   	Exceptionformatr   fragmentr   r   r   unquoter   parse_qsr   splitr   int)	urlparsedr   r   resourcer   fpuds_pathtcp_portr   r   r   r	   |   s:   




r	   )NFNN)
__future__r   autobahn.utilr   r   	six.movesr   PY3r%   r   	wsschemesuses_relativeextenduses_netlocuses_params
uses_queryuses_fragment__all__r   r	   r   r   r   r   <module>   s$   	
>