
    tfKF                     L   d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlmZm	Z	m
Z
 d dlmZmZmZ d dlmZ d dlmZmZmZ dZd ZdZd	Zd
Z G d de j                  Z G d de          ZdZddddddZ G d de          Z  G d de          Z! G d de          Z" G d de#          Z$ G d de#          Z%e G d d e$e%e"                      Z&e G d! d"e$e%e!                      Z' G d# d$e#          Z(e G d% d&e(                      Z)e G d' d(e(                      Z*dS ))    N)Optional)public_LazyHexFormatterhltype)ProtocolErrorSerializationErrorTransportLost)TransportDetails)get_serializerscreate_transport_detailstransport_channel_id)WampRawSocketServerProtocolWampRawSocketClientProtocolWampRawSocketServerFactoryWampRawSocketClientFactory         c                      e Zd ZU dZ ej        e          ZdZeZ e	j
                    ZdZee         ed<   dZee         ed<   edee         fd            Zd Zed	             Zd
 Zd Zd Zd Zd Zd Zd Zd ZdS )PrefixProtocolz!L   Npeer	is_serverreturnc                     | j         S )zZ
        Implements :func:`autobahn.wamp.interfaces.ITransport.transport_details`
        )_transport_detailsselfs    Y/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/autobahn/asyncio/rawsocket.pytransport_detailsz PrefixProtocol.transport_details?   s    
 &&    c                 .   | j                             d| j                   || _        t	          | j        | j                  | _        t          j        | j        _	        | j        j        | _        d| _
        d | _        t          j                    | _        d S )Nz3RawSocker Asyncio: Connection made with peer {peer})r   r!   )logdebugr   	transportr   r   r   r
   CHANNEL_FRAMING_RAWSOCKETchannel_framing_buffer_headertxaiocreate_future_wait_closedr   r%   s     r   connection_madezPrefixProtocol.connection_madeF   s     	LSWS\]]]" #;4>4>"Z"Z2B2\/ +0	!/11r!   c                     t          | d          r| j        S t          j                    }|                    d           |S )Nr,   T)hasattrr,   r*   r+   
set_result)r   fs     r   	is_closedzPrefixProtocol.is_closedX   sB    4(( 	$$#%%ALLHr!   c                     | j                             d           d | _        | j                            d           |                     |           d S )Nz"RawSocker Asyncio: Connection lostT)r#   r$   r%   r,   r1   _on_connection_lostr   excs     r   connection_lostzPrefixProtocol.connection_losta   sO    ;<<<$$T***  %%%%%r!   c                     d S N r6   s     r   r5   z"PrefixProtocol._on_connection_lostg   s    r!   c                 l    | j                             |           | j                                         d S r:   )r#   errorr%   close)r   msgs     r   protocol_errorzPrefixProtocol.protocol_errorj   s0    sr!   c                    t          |          }|| j        k    rt          d          t          j        | j        t          |                    }| j                            |           | j                            |           d S )NzData too big)lenmax_length_send
ValueErrorstructpackprefix_formatr%   write)r   datalheaders       r   
sendStringzPrefixProtocol.sendStringn   su    IIt###^,,,T/T;;V$$$T"""""r!   c                     t                      r:   NotImplementedErrorr   rI   s     r   pingzPrefixProtocol.pingv       !###r!   c                     t                      r:   rN   rP   s     r   pongzPrefixProtocol.pongy   rR   r!   c                 r   | xj         |z  c_         d}t          | j                   }|| j        k    rp| j        r| j        \  }}n| j         ||| j        z            }t	          |dd                   dz  }|t
          k    r|                     d           d S t          j        | j	        d|dd          z             d         }|| j
        k    r|                     d           d S || j        z
  |k    rd | _        || j        z  }|| j        z  }| j         |||z            }||z  }||z  }|t          k    r|                     |           nL|t          k    r|                     |           n+|t
          k    r|                     |           n
||f| _        n|| j        k    p| j         |d          | _         d S )Nr   r      zInvalid frame type    zFrame too big)r(   rB   prefix_lengthr)   ordFRAME_TYPE_PONGr@   rE   unpackrG   
max_lengthFRAME_TYPE_DATAstringReceivedFRAME_TYPE_PINGrQ   rT   )r   rI   pos	remaining
frame_typeframe_lengthrK   s          r   data_receivedzPrefixProtocol.data_received|   s   %%	4---| +/<(
LLc#0B*B&BC !--
:
//''(<===F%}T-?PQPRPRASTTUVW$/11''888F4--==#t))T//	|Cl(:$:;|#\)	00''----?22IIdOOOO?22IIdOOO  *<7A 4---D |CDD)r!   c                     t                      r:   rN   rP   s     r   r^   zPrefixProtocol.stringReceived   rR   r!   )__name__
__module____qualname__rG   rE   calcsizerX   r\   rC   r*   make_loggerr#   r   r   str__annotations__r   boolpropertyr
   r    r.   r3   r8   r5   r@   rL   rQ   rT   rd   r^   r;   r!   r   r   r   5   s<        M#FOM22M!J O
%


CD(3- $Ix~$$$'8,<#= ' ' ' X'2 2 2$   X& & &    # # #$ $ $$ $ $&* &* &*P$ $ $ $ $r!   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )RawSocketProtocolc                     d }|rbt          t          j        t          j        |d                              dz
  }|dk    rt	          d          d|dz   z  | _        || _        d S d| _        d| _        d S )Nr   	      zMaximum length is 16Mr   )intmathceilr#   rD   r\   _length_exp)r   max_sizeexps      r   __init__zRawSocketProtocol.__init__   s     	$di1 5 56677!;CRxx !8999#'lDO"D!D#DOOOr!   c                 J    t                               | |           d| _        d S )NF)r   r.   _handshake_doner-   s     r   r.   z!RawSocketProtocol.connection_made   s&    &&tY777$r!   c                     t                      r:   rN   r   s    r   _on_handshake_completez(RawSocketProtocol._on_handshake_complete   rR   r!   c                    t          | j        d d                   }|d         t          k    rt          d          |d         dz  }|d         dz	  }d|dz   z  | _        |d         dk    s|d         dk    rt          d	          ||fS )
N   r   zInvalid magic byte in handshaker   rs   r   rr      zReserved bytes must be zero)	bytearrayr(   
MAGIC_BYTEHandshakeErrorrC   )r   bufserlexps       r   parse_handshakez!RawSocketProtocol.parse_handshake   s    RaR())q6Z !BCCC!ftm1v{ 4!8}q6Q;;#a&A++ !>???Dyr!   c                     t                      r:   rN   r   s    r   process_handshakez#RawSocketProtocol.process_handshake   rR   r!   c                 >   | j                             dt          |                     | j        rt                              | |          S | xj        |z  c_        t          | j                  dk    r	 |                                  nA# t          $ r4}| 
                    d                    |                     Y d }~d S d }~ww xY wd| _        |                                  | j        dd          }d| _        |rt                              | |           d S d S d S )Nz'RawSocker Asyncio: data received {data})rI   r   zHandshake error : {err}errTr!   )r#   r$   r   r|   r   rd   r(   rB   r   r   r@   formatr~   )r   rI   es      r   rd   zRawSocketProtocol.data_received   s@   @GXY]G^G^___ 	=!//d;;;LLD LL4<  A%%**,,,,%   ''(A(H(HQ(H(O(OPPPFFFFF (,$++---|ABB'" ="00t<<<<< &%= =s   5B
 

C)CCN)	rf   rg   rh   rz   r.   r~   r   r   rd   r;   r!   r   rp   rp      sn        
$ 
$ 
$% % %$ $ $	 	 	$ $ $= = = = =r!   rp   zillegal (must not be used)zserializer unsupportedz#maximum message length unacceptablez*use of reserved bits (unsupported feature)z maximum connection count reached)r   r   r   r   r   c                       e Zd ZddZdS )r   r   c                     t                               | |s|n|dt                              |          z  z              d S )Nz : %s)	Exceptionrz   ERRMAPget)r   r?   codes      r   rz   zHandshakeError.__init__   s>    4D!VcGfjjQUFVFV<V6VWWWWWr!   N)r   )rf   rg   rh   rz   r;   r!   r   r   r      s.        X X X X X Xr!   r   c                   :    e Zd ZdZd Zd Zed             Zd ZdS )RawSocketClientProtocolFc                     dS )NTr;   r   ser_ids     r   check_serializerz(RawSocketClientProtocol.check_serializer   s    tr!   c                     |                                  \  }}|dk    rt          d|          | j        |k    r(t          d                    || j                            d S )Nr   zServer returned handshake errorz;Server returned different serializer {0} then requested {1})r   r   serializer_idr   )r   r   r   s      r   r   z)RawSocketClientProtocol.process_handshake   sq    **,,Q;; !BCHHH'' !^"(&1C"D"DF F F ('r!   c                     t                      r:   rN   r   s    r   r   z%RawSocketClientProtocol.serializer_id   s    !###r!   c                    t                               | |           t          t          t          | j        dz  | j        z  ddg                    }|                    |           | j        	                    d           d S )Nr   r   z(RawSocket Asyncio: Client handshake sent)
rp   r.   bytesr   r   rw   r   rH   r#   r$   )r   r%   hss      r   r.   z'RawSocketClientProtocol.connection_made  s    ))$	:::9j".!3d6HH$ % % & & 	ABBBBBr!   N)	rf   rg   rh   r   r   r   rn   r   r.   r;   r!   r   r   r      si        I  F F F $ $ X$C C C C Cr!   r   c                       e Zd ZdZd Zd ZdS )RawSocketServerProtocolTc                     t                      r:   rN   r   s     r   supports_serializerz+RawSocketServerProtocol.supports_serializer  rR   r!   c                       fd}                                  \  }}                     |          s4 |t          d           t          d                    |                     | j        |           d S )Nc           
          | dz  |dz  z  }j                             t          t          t          |ddg                               d S )Nr   rs   r   )r%   rH   r   r   r   )r   r   b2r   s      r   send_responsez@RawSocketServerProtocol.process_handshake.<locals>.send_response  sJ    ftm,BN  y*b!Q1G'H'H!I!IJJJJJr!   r   z!Serializer unsupported : {ser_id})r   )r   r   ERR_SERIALIZER_UNSUPPORTEDr   r   rw   )r   r   r   _lexps   `   r   r   z)RawSocketServerProtocol.process_handshake  s    	K 	K 	K 	K 	K ,,..''// 	\M4a888 !D!K!KSY!K!Z!Z[[[d&/////r!   N)rf   rg   rh   r   r   r   r;   r!   r   r   r     s7        I$ $ $0 0 0 0 0r!   r   c                   &    e Zd Zd Zd Zd Zd ZdS )WampRawSocketMixinGeneralc                    | j                             d           	 | j        j        r.dt	          | j        | j        j        d          i}|| j        _        | j        	                                | _
        | j
                            |            | j                             d           d S # t          $ r;}| j                             d|           |                                  Y d }~d S d }~ww xY w)Nz)WampRawSocketProtocol: Handshake completez
tls-uniquezApplicationSession started.zMWampRawSocketProtocol: ApplicationSession constructor / onOpen raised ({err})r   )r#   r$   r   	is_securer   r%   r   
channel_idfactory_factory_sessiononOpeninfor   warnabort)r   r   r   s      r   r~   z0WampRawSocketMixinGeneral._on_handshake_complete!  s    BCCC	9&0 @ !"6t~tG^Ghjv"w"w
 6@'2 L1133DMM  &&& HMM788888  	 	 	HMMiopMqqqJJLLLLLLLLL	s   A2B* *
C/40C**C/c                    | j                             dt          |                     	 | j                            |          D ]8}| j                             d|           | j                            |           9d S # t          $ r;}| j                             d|           | 	                                 Y d }~d S d }~wt          $ r;}| j                             d|           | 	                                 Y d }~d S d }~ww xY w)Nz*WampRawSocketProtocol: RX octets: {octets}octetsz-WampRawSocketProtocol: RX WAMP message: {msg})r?   zHWampRawSocketProtocol: WAMP Protocol Error ({err}) - aborting connectionr   zHWampRawSocketProtocol: WAMP Internal Error ({err}) - aborting connection)r#   r$   r   _serializerunserializer   	onMessager   r   r   r   )r   payloadr?   r   s       r   r^   z(WampRawSocketMixinGeneral.stringReceived7  s$   CL]^eLfLfggg	'33G<< - -NTWXXX'',,,,- -  	 	 	HMMdjkMlllJJLLLLLLLLL 	 	 	HMMdjkMlllJJLLLLLLLLL	s$   AB   
D
0C  D0DDc                    |                                  r| j                            dt          | j                  |           	 | j                            |          \  }}|                     |           | j                            dt          |                     dS # t          $ r'}t          d                    |                    d}~ww xY wt                      )zM
        Implements :func:`autobahn.wamp.interfaces.ITransport.send`
        z{func}: TX WAMP message: {msg})funcr?   z*WampRawSocketProtocol: TX octets: {octets}r   zIWampRawSocketProtocol: unable to serialize WAMP application payload ({0})N)isOpenr#   r$   r   sendr   	serializerL   r   r   r   r   r	   )r   r?   r   _r   s        r   r   zWampRawSocketMixinGeneral.sendF  s     ;;== 	"HNN;&BSBSY\N]]]p!-77<<
 (((KTefmTnTnooooo  5 5 5()t*0&))5 5 55  //!s   B" "
C,"CCc                 4    t          | d          o| j        duS )zO
        Implements :func:`autobahn.wamp.interfaces.ITransport.isOpen`
        r   N)r0   r   r   s    r   r   z WampRawSocketMixinGeneral.isOpenX  s      tZ((FT]$-FFr!   N)rf   rg   rh   r~   r^   r   r   r;   r!   r   r   r     sU        9 9 9,  " " "$G G G G Gr!   r   c                   $    e Zd ZdZd Zd Zd ZdS )WampRawSocketMixinAsynciozE
    Base class for asyncio-based WAMP-over-RawSocket protocols.
    c                     	 |d u }| j                             |           n3# t          $ r&}| j                            d|           Y d }~nd }~ww xY wd | _         d S )Nz@WampRawSocketProtocol: ApplicationSession.onClose raised ({err})r   )r   onCloser   r#   r   )r   r7   wasCleanr   s       r   r5   z-WampRawSocketMixinAsyncio._on_connection_loste  s    	ed{HM!!(++++ 	e 	e 	eHMM\bcMdddddddd	e s   ! 
AAAc                 |    |                                  r| j                                         dS t                      )zN
        Implements :func:`autobahn.wamp.interfaces.ITransport.close`
        N)r   r%   r>   r	   r   s    r   r>   zWampRawSocketMixinAsyncio.closen  s8     ;;== 	"N  """""//!r!   c                     |                                  rKt          | j        d          r| j                                         dS | j                                         dS t                      )zN
        Implements :func:`autobahn.wamp.interfaces.ITransport.abort`
        r   N)r   r0   r%   r   r>   r	   r   s    r   r   zWampRawSocketMixinAsyncio.abortw  sf     ;;== 	"t~w// '$$&&&&&$$&&&&&//!r!   N)rf   rg   rh   __doc__r5   r>   r   r;   r!   r   r   r   `  sK           " " "" " " " "r!   r   c                       e Zd ZdZd ZdS )r   z
    asyncio-based WAMP-over-RawSocket server protocol.

    Implements:

        * :class:`autobahn.wamp.interfaces.ITransport`
    c                 J   || j         j        v rGt          j        | j         j        |                   | _        | j                            d|           dS | j                            d|| j         j                                                   |                                  dS )NzDWampRawSocketProtocol: client wants to use serializer '{serializer}')
serializerTzWampRawSocketProtocol: opening handshake - no suitable serializer found (client requested {serializer}, and we have {serializers})r   serializersF)r   _serializerscopyr   r#   r$   keysr   r   s     r   r   z/WampRawSocketServerProtocol.supports_serializer  s    T\...#y)B6)JKKDHNNV!     4HNN T! L5::<<    
 JJLLL5r!   N)rf   rg   rh   r   r   r;   r!   r   r   r     s-             r!   r   c                   (    e Zd ZdZed             ZdS )r   z
    asyncio-based WAMP-over-RawSocket client protocol.

    Implements:

        * :class:`autobahn.wamp.interfaces.ITransport`
    c                     t          | d          s#t          j        | j        j                  | _        | j        j        S )Nr   )r0   r   r   r   RAWSOCKET_SERIALIZER_IDr   s    r   r   z)WampRawSocketClientProtocol.serializer_id  s8    t]++ 	C#y)ABBD77r!   N)rf   rg   rh   r   rn   r   r;   r!   r   r   r     s9          8 8 X8 8 8r!   r   c                   F    e Zd ZdZ ej                    Zed             ZdS )WampRawSocketFactoryzm
    Adapter class for asyncio-based WebSocket client and server factories.def dataReceived(self, data):
    c                 <    |                                  }| |_        |S r:   )protocolr   )r   protos     r   __call__zWampRawSocketFactory.__call__  s    r!   N)	rf   rg   rh   r   r*   rj   r#   r   r   r;   r!   r   r   r     sI          %


C  V  r!   r   c                       e Zd ZdZeZddZdS )r   zD
    asyncio-based WAMP-over-RawSocket server protocol factory.
    Nc                     t                    r| _        n
fd| _        |)d t                      D             }|st          d          d |D             | _        dS )a  

        :param factory: A callable that produces instances that implement
            :class:`autobahn.wamp.interfaces.ITransportHandler`
        :type factory: callable

        :param serializers: A list of WAMP serializers to use (or ``None``
            for all available serializers).
        :type serializers: list of objects implementing
            :class:`autobahn.wamp.interfaces.ISerializer`
        c                       S r:   r;   r   s   r   <lambda>z5WampRawSocketServerFactory.__init__.<locals>.<lambda>      G r!   Nc                 "    g | ]} |            S r;   r;   ).0r   s     r   
<listcomp>z7WampRawSocketServerFactory.__init__.<locals>.<listcomp>  s    LLLJ::<<LLLr!   z%could not import any WAMP serializersc                     i | ]
}|j         |S r;   )r   )r   r   s     r   
<dictcomp>z7WampRawSocketServerFactory.__init__.<locals>.<dictcomp>  s    UUU#S8#UUUr!   )callabler   r   r   r   )r   r   r   s    ` r   rz   z#WampRawSocketServerFactory.__init__  s     G 	,#DMM+OOODM LL/:K:KLLLK I GHHHUUUUUr!   r:   )rf   rg   rh   r   r   r   rz   r;   r!   r   r   r     s?          +HV V V V V Vr!   r   c                       e Zd ZdZeZddZdS )r   z;
    asyncio-based WAMP-over-RawSocket client factory.
    Nc                     t                    r| _        n
fd| _        | t                      }|r |d                     }|t          d          || _        dS )a  

        :param factory: A callable that produces instances that implement
            :class:`autobahn.wamp.interfaces.ITransportHandler`
        :type factory: callable

        :param serializer: The WAMP serializer to use (or ``None`` for
           "best" serializer, chosen as the first serializer available from
           this list: CBOR, MessagePack, UBJSON, JSON).
        :type serializer: object implementing :class:`autobahn.wamp.interfaces.ISerializer`
        c                       S r:   r;   r   s   r   r   z5WampRawSocketClientFactory.__init__.<locals>.<lambda>  r   r!   Nr   z$could not import any WAMP serializer)r   r   r   r   r   )r   r   r   r   s    `  r   rz   z#WampRawSocketClientFactory.__init__  sz     G 	,#DMM+OOODM )++K .+[^--
BCCC%r!   r:   )rf   rg   rh   r   r   r   rz   r;   r!   r   r   r     s9          +H& & & & & &r!   r   )+asynciorE   ru   r   typingr   r*   autobahn.utilr   r   r   autobahn.wamp.exceptionr   r   r	   autobahn.wamp.typesr
   autobahn.asyncio.utilr   r   r   __all__r]   r_   rZ   r   Protocolr   rp   r   r   r   r   r   r   objectr   r   r   r   r   r   r   r;   r!   r   <module>r      sh  6            ; ; ; ; ; ; ; ; ; ; T T T T T T T T T T 0 0 0 0 0 0 a a a a a a a a a a 
p$ p$ p$ p$ p$W% p$ p$ p$f4= 4= 4= 4= 4= 4= 4= 4=n   $,3)
 
X X X X XY X X X
C C C C C/ C C C:0 0 0 0 0/ 0 0 0&=G =G =G =G =G =G =G =GB"" "" "" "" "" "" "" ""J     ";=VXo   6 8 8 8 8 8";=VXo 8 8 8     6    V V V V V!5 V V VD !& !& !& !& !&!5 !& !& !& !& !&r!   