
    )j3                        d dl Z d dlZd dlZd dlZd dlZd dlmZ  eej                            dd                    Z	 eej                            dd                    Z
 ej        e          Ze                    ej                    G d d          Z G d	 d
          Z G d d          Z G d d          Zd Z G d d          ZddZedk    r e             dS dS )    N)webWSLINK_MAX_MSG_SIZE4194304WSLINK_HEART_BEAT30c                   J    e Zd Zd
dZd Zed             Zd Zd Zd Z	d Z
d	S )WsClientConnectionTc                     d | _         d | _        d | _        d| _        d | _        t          j                                                    | _        || _	        d S Nr   )
_url_session_ws
_connected_destinationasyncioget_running_loopcreate_future_readypropagate_disconnectselfr   s     W/DATA/AppData/hermes/venv/lib/python3.11/site-packages/wslink/backends/aiohttp/relay.py__init__zWsClientConnection.__init__   sP    	 .00>>@@$8!!!    c                     || _         d S Nr   r   values     r   bindzWsClientConnection.bind"       !r   c                     | j         S r   )r   r   s    r   readyzWsClientConnection.ready%   s
    {r   c                   K   t                               d|           || _        | j        t	          j                    4 d {V }t                               d           || _        	 |                    | j                  4 d {V }t                               d           || _        | xj        dz  c_        | j	        
                    d           |2 3 d {V }t                               d           | j        dk     rt                               d            n^| j        r;t                               d           | j                            |           d {V  t                               d	           6 |                                  | j        j        s| j                                         d {V  d | _        d | _        d d d           d {V  n# 1 d {V swxY w Y   | j	        
                    d
           n# | j	        
                    d
           w xY w	 d d d           d {V  n# 1 d {V swxY w Y   t                               d           d S )Nzclient::connect::%szclient::connect::sessionzclient::connect::ws   Tzclient::connect::ws::msgz$client::connect::ws::msg::disconnectzclient::connect::ws::msg::sendz%ws-client: No destination for messageFzclient::connect::exit)loggerdebugr   r   aiohttpClientSession
ws_connectr   r   r   
set_resultr   senderror
disconnectclosedclose)r   urlsessionwsmsgs        r   connectzWsClientConnection.connect)   s{     *C000	= ,.. 2 2 2 2 2 2 2'7888 '2&11$)<< - - - - - - -%:;;;#%1,..t444)+ 
V 
V 
V 
V 
V 
V 
V#"LL)CDDD#22 &-S T T T %#0 V &-M N N N&*&7&<&<S&A&A A A A A A A A A &-T U U U U *, )))  $x 3"&(.."2"22222222#'(,1- - - - - - - - - - - - - - - - - - - - - - - - - - -4 K**51111DK**511111=2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2@ 	,-----s\   "H:) H	AGE<C-G
H
G&	&H)G&	*H-H:H$$H::
IIc                   K   | j         dk    r| j        j        sut                              d           |j        t          j        j        k    r'| j        	                    |j
                   d {V  d S |j        t          j        j        k    r'| j                            |j
                   d {V  d S |j        t          j        j        k    r'| j                            |j
                   d {V  d S |j        t          j        j        k    r'| j                            |j
                   d {V  d S |j        t          j        j        k    r!| j                                         d {V  d S t                              d           d S t                              d           t                              d| j         | j        j                   t                              d           d S )Nr   zclient::sendInvalid message to forwardzclient::send - NO SEND%s - %s<------------------------------------------------------------r   r   r0   r'   r(   typer)   	WSMsgTypeTEXTsend_strdataBINARY
send_bytesPINGpingPONGpongCLOSEr1   r.   r   r5   s     r   r-   zWsClientConnection.sendO        ?QtxLL(((x7,111h''11111111111W.555h))#(33333333333W.333hmmCH-----------W.333hmmCH-----------W.444hnn&&&&&&&&&&&9:::::LL1222LLDOTX_EEELL"""""r   c                     t                               d| j                   | j        dk    r0d| _        | j        r$| j        r| j                                         d S d S d S d S )Nzclient::disconnect %sr   r'   r(   r   r   r   r/   r#   s    r   r/   zWsClientConnection.disconnectc   y    ,do>>>?Q DO  /T%> /!,,..... / / / /r   c                 Z   K   | j         !| j                                          d {V  d S d S r   r   r1   r#   s    r   r1   zWsClientConnection.closej   @      8(.."""""""""""  r   NT)__name__
__module____qualname__r   r    propertyr$   r6   r-   r/   r1    r   r   r	   r	      s        9 9 9 9" " "   X$. $. $.L# # #(/ / /# # # # #r   r	   c                   4    e Zd Zd	dZd Zd Zd Zd Zd ZdS )
WsServerConnectionTc                 >    d | _         d | _        d| _        || _        d S r   )r   r   r   r   r   s     r   r   zWsServerConnection.__init__s   s&     $8!!!r   c                     || _         d S r   r   r   s     r   r    zWsServerConnection.bindy   r!   r   c                 L  K   t                               d           t          j        t          t
                    | _        | j                            |           d {V  t                               d           | xj        dz  c_        | j        dk    r| j        2 3 d {V }t                               d           | j        dk     r nx| j	        rUt                               d           | j	        
                    |           d {V  t                               d           t                               d	           6 |                                  | j        j        s| j                                         d {V  d | _        t                               d
           d S )Nzserver::connect)max_msg_size	heartbeatzserver::connect::preparer&   r   zserver::connect::ws::msgz$server::connect::ws::msg::send-beginz"server::connect::ws::msg::send-endz%ws-server: No destination for messagezserver::connect::exit)r'   r(   r   WebSocketResponseMAX_MSG_SIZE
HEART_BEATr   preparer   r   r-   r.   r/   r0   r1   )r   requestr5   s      r   r6   zWsServerConnection.connect|   s     &'''(%
 
 
 hw'''''''''/0001?Q!X 
J 
J 
J 
J 
J 
J 
Jc7888?Q&&E$ JLL!GHHH+00555555555LL!EFFFFLL!HIIII & 	 x 	#(..""""""""",-----s   Ec                   K   | j         dk    r| j        j        sut                              d           |j        t          j        j        k    r'| j        	                    |j
                   d {V  d S |j        t          j        j        k    r'| j                            |j
                   d {V  d S |j        t          j        j        k    r'| j                            |j
                   d {V  d S |j        t          j        j        k    r'| j                            |j
                   d {V  d S |j        t          j        j        k    r!| j                                         d {V  d S t                              d           d S t                              d           t                              d| j         | j        j                   t                              d           d S )Nr   zserver::sendr8   zserver::send - NO SENDr9   r:   r;   rH   s     r   r-   zWsServerConnection.send   rI   r   c                     t                               d| j                   | j        dk    r0d| _        | j        r$| j        r| j                                         d S d S d S d S )Nzserver::disconnect %sr   rK   rL   r#   s    r   r/   zWsServerConnection.disconnect   rM   r   c                 Z   K   | j         !| j                                          d {V  d S d S r   rO   r#   s    r   r1   zWsServerConnection.close   rP   r   NrQ   )	rR   rS   rT   r   r    r6   r-   r/   r1   rV   r   r   rX   rX   r   st        9 9 9 9" " ". . .@# # #(/ / /# # # # #r   rX   c                        e Zd Zd Zd Zd ZdS )ForwardConnectionc                     || _         || _        t                      | _        t	                      | _        | j                            | j                   | j                            | j                   d S r   )_reqr   r	   
_ws_clientrX   
_ws_serverr    )r   rb   r2   s      r   r   zForwardConnection.__init__   s`    		,..,..T_---T_-----r   c                    K   t          j         j                             j                            }|                     fd            j        j         d {V   j                             j                   d {V  d S )Nc                  6    j                                         S r   )rk   r/   )_r   s    r   <lambda>z+ForwardConnection.connect.<locals>.<lambda>   s    $/*D*D*F*F r   )	r   create_taskrj   r6   r   add_done_callbackr$   rk   ri   )r   tasks   ` r   r6   zForwardConnection.connect   s      "4?#:#:49#E#EFFFFFFGGGo########o%%di00000000000r   c                 j    | j                                          | j                                         d S r   )rj   r/   rk   r#   s    r   r/   zForwardConnection.disconnect   s0    ""$$$""$$$$$r   N)rR   rS   rT   r   r6   r/   rV   r   r   rg   rg      sA        . . .1 1 1% % % % %r   rg   c                        e Zd Zd Zd Zd ZdS )SinkConnectionc                 >    || _         d | _        d | _        d | _        d S r   )_process_req_client_req_process_ws
_client_wsr   rb   s     r   r   zSinkConnection.__init__   s%    #r   c                 H    | j         |k    rdS | j        |k    rdS | j        d u S )NT)rw   rx   rz   r{   s     r   
can_handlezSinkConnection.can_handle   s5    ''4w&&4$&&r   c                 \  K   | j         |k    r[t                      | _        | j                            |           d {V  | j        | j                                         d {V  dS | j        || _        t          d          | _        | j                            | j                   | j                            | j                   | j                            |           d {V  | j                            d            | j                            d            d | _        d | _        dS )NTF)r   )rw   rX   ry   r6   rz   r1   rx   r    r{   s     r   r6   zSinkConnection.connect   s<     ''133D"**7333333333*o++---------4#&D0eLLLDOO  !1222!!$/222/))'222222222O  &&&!!$'''#D"DOur   N)rR   rS   rT   r   r}   r6   rV   r   r   ru   ru      sA          ' ' '    r   ru   c                 t   K   | j         rt          j        d| j                    S t          j        d          S )Nzindex.html?z
index.html)query_stringr   	HTTPFound)rb   s    r   _root_handlerr     s>       C}A7+?AABBB=&&&r   c                   (    e Zd Zd ZddZd Zd ZdS )	WsHandlerc                 "    i | _         i | _        d S r   )_forward_map
_relay_mapr#   s    r   r   zWsHandler.__init__  s    r   forwardc                     t                               d|           |dk    r| j        S |dk    r| j        S t                               d           d S )Nzget_handler %sr   relayzNo handler !!!)r'   infoforward_connectrelay_connectr.   )r   modes     r   get_handlerzWsHandler.get_handler  sU    $d+++9''7??%%%&&&tr   c                   K   |j                             dd          }t          |j                             dd                    }|j                             dd          }d| d| d	| }t                              d
|           || j        v rt          j                    t          ||          }|| j        |<   |	                                 d {V  | j        
                    |           d S )Nhost	localhostport1234pathr4   zws://:/z=> %s)
match_infogetintr'   r   r   r   HTTPForbiddenrg   r6   pop)r   rb   r   r   r   
target_url	forwarders          r   r   zWsHandler.forward_connect  s     !%%fk::7%))&&99::!%%fd331T11D11411
GZ(((***#%%%%gz::	(1*%!!!!!!!!!j)))))r   c                 4  K   |j         }|| j        vrt          |          }|| j        |<   | j        |         }|                    |          st	          j                    |                    |           d {V r| j                            |           d S d S r   )r   r   ru   r}   r   r   r6   r   )r   rb   idhandlers       r   r   zWsHandler.relay_connect0  s      \T_$$$W--G")DOB/"%!!'** 	&#%%%)))))))) 	$O#####	$ 	$r   N)r   )rR   rS   rT   r   r   r   r   rV   r   r   r   r     sU             * * *&$ $ $ $ $r   r   c                 l   t                      }t          j        dt          j                  }|                    dt
          ddd           |                    dd	t          d
dd           |                    dt
          dd           |                    dt
          dd           |                    dt
          ddd           |                                \  }}| |j        } ||j	        }||j
        }||j        }||j        }g }	|Vt                              d|           |	                    t!          j        ||                    |                               |pt                              d|           |	                    t!          j        dt&                               |	                    t!          j        d|                     t                              d| |           t!          j                    }
|
                    |	           t!          j        |
| |           d S )Nz+Start ws relay with static content delivery)descriptionformatter_classz--hostr   z@the interface for the web-server to listen on (default: 0.0.0.0)r   )r<   defaulthelpdestz-pz--porti  z;port number for the web-server to listen on (default: 8080)r   z--moder   z0Working mode [forward, relay] (default: forward))r<   r   r   z--wwwzDirectory to servewww_path)r<   r   r   z--proxy-routezeProxy URL pattern (default: /proxy/{port}) mode::forward(ws://{host=localhost}:{port=1234}/{path=ws})z/proxy/{port}proxy_route)r<   r   r   r   zProxy route: %szWWW: %sr   zStarting relay server: %s %s)r   r   )r   argparseArgumentParserRawDescriptionHelpFormatteradd_argumentstrr   parse_known_argsr   r   r   r   r   r'   r   appendr   r   r   r   staticApplication
add_routesrun_app)r   r   r   r   r   wsRelayparserargsrn   routesweb_apps              r   mainr   E  sX   kkG $A <  F O     J     ?	     c0D:VVV
t     %%''GD!|y|y|y=& F %{333cgk7+>+>t+D+DEEFFF Ix(((cgc=11222cjh//000 KK.d;;;oGvKd......r   __main__)NNNNN)r   r   loggingosr)   r   r   environr   r_   r`   	getLoggerrR   r'   setLevelINFOr	   rX   rg   ru   r   r   r   rV   r   r   <module>r      s      				        s2:>>"7CCDDS 3T::;;
		8	$	$    T# T# T# T# T# T# T# T#tG# G# G# G# G# G# G# G#Z% % % % % % % %(' ' ' ' ' ' ' '^' ' '2$ 2$ 2$ 2$ 2$ 2$ 2$ 2$tH/ H/ H/ H/^ zDFFFFF r   