
    8'hC                     $   d dl mZ 	 d dlZd dlZd dlZd dlZd dlm	Z	m
Z
 d dlmZmZmZ d dlmZmZ d dlZdZ ej(                          d ZdZdZd	Z G d
 dej2                        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)y# e$ r d dlZY w xY w)(    )absolute_importN)public_LazyHexFormatter)ProtocolErrorSerializationErrorTransportLost)peer2strget_serializers)WampRawSocketServerProtocolWampRawSocketClientProtocolWampRawSocketServerFactoryWampRawSocketClientFactory         c                       e Zd ZdZ ej
                  e      ZdZeZ e	j                         Zd Zed        Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zy)PrefixProtocolz!L   c                     || _         |j                  d      }t        |      | _        | j                  j                  d| j                         d| _        d | _        t        j                         | _
        y )Npeernamez3RawSocker Asyncio: Connection made with peer {peer})peer    )	transportget_extra_infor	   r   logdebug_buffer_headertxaiocreate_future_wait_closed)selfr   r   s      V/var/www/html/trade_iq/venv/lib/python3.12/site-packages/autobahn/asyncio/rawsocket.pyconnection_madezPrefixProtocol.connection_madeC   s_    "''
3TN	LSWS\S\]!//1r   c                     t        | d      r| j                  S t        j                         }|j	                  d       |S )Nr!   T)hasattrr!   r   r    
set_result)r"   fs     r#   	is_closedzPrefixProtocol.is_closedL   s7    4($$$##%ALLHr   c                     | j                   j                  d       d | _        | j                  j	                  d       | j                  |       y )Nz"RawSocker Asyncio: Connection lostT)r   r   r   r!   r'   _on_connection_lostr"   excs     r#   connection_lostzPrefixProtocol.connection_lostU   s<    ;<$$T*  %r   c                      y N r,   s     r#   r+   z"PrefixProtocol._on_connection_lost[   s    r   c                 n    | j                   j                  |       | j                  j                          y r0   )r   errorr   close)r"   msgs     r#   protocol_errorzPrefixProtocol.protocol_error^   s"    sr   c                    t        |      }|| j                  kD  rt        d      t        j                  | j
                  t        |            }| j                  j                  |       | j                  j                  |       y )NzData too big)lenmax_length_send
ValueErrorstructpackprefix_formatr   write)r"   datalheaders       r#   
sendStringzPrefixProtocol.sendStringb   sb    It###^,,T//T;V$T"r   c                     t               r0   NotImplementedErrorr"   r?   s     r#   pingzPrefixProtocol.pingj       !##r   c                     t               r0   rD   rF   s     r#   pongzPrefixProtocol.pongm   rH   r   c                 ~   | xj                   |z  c_         d}t        | j                         }|| j                  k\  rm| j                  r| j                  \  }}n| j                   ||| j                  z    }t	        |dd       dz  }|t
        kD  r| j                  d       y t        j                  | j                  d|dd  z         d   }|| j                  kD  r| j                  d       y || j                  z
  |k\  rd | _        || j                  z  }|| j                  z  }| j                   |||z    }||z  }||z  }|t        k(  r| j                  |       n@|t        k(  r| j                  |       n%|t
        k(  r| j                  |       n
||f| _        n|| j                  k\  rm| j                   |d  | _         y )Nr   r      zInvalid frame type    zFrame too big)r   r8   prefix_lengthr   ordFRAME_TYPE_PONGr6   r;   unpackr=   
max_lengthFRAME_TYPE_DATAstringReceivedFRAME_TYPE_PINGrG   rJ   )r"   r?   pos	remaining
frame_typeframe_lengthrA   s          r#   data_receivedzPrefixProtocol.data_receivedp   s   %	4---||+/<<(
Lc#0B0B*BC !-
:
/''(<=%}}T-?-?PQPRASTUVW$//1''84---=#t)))T///	||Cl(:;|#\)	0''-?2IIdO?2IIdO  *<7A 4---D ||CD)r   c                     t               r0   rD   rF   s     r#   rT   zPrefixProtocol.stringReceived   rH   r   N)__name__
__module____qualname__r=   r;   calcsizerN   rR   r9   r   make_loggerr   r$   propertyr)   r.   r+   r6   rB   rG   rJ   rZ   rT   r1   r   r#   r   r   ;   ss    M#FOOM2M!J O
%


C2  &#$$&*P$r   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)RawSocketProtocolc                     d }|rZt        t        j                  t        j                  |d                  dz
  }|dkD  rt	        d      d|dz   z  | _        || _        y d| _        d| _        y )Nr   	      zMaximum length is 16Mr   )intmathceilr   r:   rR   _length_exp)r"   max_sizeexps      r#   __init__zRawSocketProtocol.__init__   sf    dii1 567!;CRx !899#'lDO"D!D#DOr   c                 >    t         j                  | |       d| _        y )NF)r   r$   _handshake_done)r"   r   s     r#   r$   z!RawSocketProtocol.connection_made   s    &&tY7$r   c                     t               r0   rD   r"   s    r#   _on_handshake_completez(RawSocketProtocol._on_handshake_complete   rH   r   c                     t        | j                  d d       }|d   t        k7  rt        d      |d   dz  }|d   dz	  }d|dz   z  | _        |d   dk7  s|d   dk7  rt        d	      ||fS )
N   r   zInvalid magic byte in handshaker   rf   r   re      zReserved bytes must be zero)	bytearrayr   
MAGIC_BYTEHandshakeErrorr9   )r"   bufserlexps       r#   parse_handshakez!RawSocketProtocol.parse_handshake   s    Ra()q6Z !BCC!ftm1v{ 4!8}q6Q;#a&A+ !>??Dyr   c                     t               r0   rD   rq   s    r#   process_handshakez#RawSocketProtocol.process_handshake   rH   r   c                    | j                   j                  dt        |             | j                  rt        j                  | |      S | xj                  |z  c_        t        | j                        dk\  rX	 | j                          d| _        | j                          | j                  dd  }d| _        |rt        j                  | |       y y y # t        $ r+}| j                  dj                  |             Y d }~y d }~ww xY w)Nz'RawSocker Asyncio: data received {data})r?   rt   zHandshake error : {err}errTr   )r   r   r   ro   r   rZ   r   r8   r~   rx   r6   formatrr   )r"   r?   es      r#   rZ   zRawSocketProtocol.data_received   s    @GXY]G^_!//d;;LLD L4<< A%**, (,$++-||AB'""00t<  & & ''(A(H(HQ(H(OPs   7C 	D!C>>DN)	r\   r]   r^   rm   r$   rr   r|   r~   rZ   r1   r   r#   rc   rc      s     
$%$
$=r   rc   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   ru   rt   c                       e Zd ZddZy)rx   c                 t    t         j                  | |s|       y |dt        j                  |      z  z          y )Nz : %s)	Exceptionrm   ERRMAPget)r"   r5   codes      r#   rm   zHandshakeError.__init__   s-    4DWcGfjjQUFV<V6VWr   N)r   )r\   r]   r^   rm   r1   r   r#   rx   rx      s    Xr   rx   c                   .    e Zd Zd Zd Zed        Zd Zy)RawSocketClientProtocolc                      y)NTr1   r"   ser_ids     r#   check_serializerz(RawSocketClientProtocol.check_serializer   s    r   c                     | j                         \  }}|dk(  rt        d|      | j                  |k7  r%t        dj                  || j                              y )Nr   zServer returned handshake errorz;Server returned different serializer {0} then requested {1})r|   rx   serializer_idr   )r"   r   r   s      r#   r~   z)RawSocketClientProtocol.process_handshake   s`    **,Q; !BCHH' !^"(&1C1C"DF F (r   c                     t               r0   rD   rq   s    r#   r   z%RawSocketClientProtocol.serializer_id   s    !##r   c                     t         j                  | |       t        t        t        | j
                  dz  | j                  z  ddg            }|j                  |       | j                  j                  d       y )Nrt   r   z(RawSocket Asyncio: Client handshake sent)
rc   r$   bytesrv   rw   rj   r   r>   r   r   )r"   r   hss      r#   r$   z'RawSocketClientProtocol.connection_made   sg    ))$	:9j"..!3d6H6HH$ % & 	ABr   N)r\   r]   r^   r   r~   ra   r   r$   r1   r   r#   r   r      s'    F $ $Cr   r   c                       e Zd Zd Zd Zy)RawSocketServerProtocolc                     t               r0   rD   r   s     r#   supports_serializerz+RawSocketServerProtocol.supports_serializer  rH   r   c                       fd} j                         \  }} j                  |      s( |t        d       t        dj	                  |             | j
                  |       y )Nc           
          | dz  |dz  z  }j                   j                  t        t        t        |ddg                   y )Nrt   rf   r   )r   r>   r   rv   rw   )r{   r   b2r"   s      r#   send_responsez@RawSocketServerProtocol.process_handshake.<locals>.send_response  s:    ftm,BNN  y*b!Q1G'H!IJr   r   z!Serializer unsupported : {ser_id})r   )r|   r   ERR_SERIALIZER_UNSUPPORTEDrx   r   rj   )r"   r   r   _lexps   `   r#   r~   z)RawSocketServerProtocol.process_handshake  sa    	K ,,.''/4a8 !D!K!KSY!K!Z[[d&&/r   N)r\   r]   r^   r   r~   r1   r   r#   r   r      s    $0r   r   c                   $    e Zd Zd Zd Zd Zd Zy)WampRawSocketMixinGeneralc                 l   | j                   j                  d       	 | j                  j                         | _        | j                  j                  |        | j                   j                  d       y # t        $ r7}| j                   j                  d|       | j                          Y d }~y d }~ww xY w)Nz)WampRawSocketProtocol: Handshake completezApplicationSession started.zMWampRawSocketProtocol: ApplicationSession constructor / onOpen raised ({err})r   )
r   r   factory_factory_sessiononOpeninfor   warnabort)r"   r   s     r#   rr   z0WampRawSocketMixinGeneral._on_handshake_complete  s    BC	9 LL113DMMM  & HHMM78  	HHMMiopMqJJLL	s   :A3 3	B3<-B..B3c                    | j                   j                  dt        |             	 | j                  j	                  |      D ]:  }| j                   j                  d|       | j
                  j                  |       < y # t        $ r7}| j                   j                  d|       | j                          Y d }~y d }~wt        $ r7}| j                   j                  d|       | j                          Y d }~y d }~ww xY w)Nz*WampRawSocketProtocol: RX octets: {octets}octetsz-WampRawSocketProtocol: RX WAMP message: {msg}r5   zHWampRawSocketProtocol: WAMP Protocol Error ({err}) - aborting connectionr   zHWampRawSocketProtocol: WAMP Internal Error ({err}) - aborting connection)r   r   r   _serializerunserializer   	onMessager   r   r   r   )r"   payloadr5   r   s       r#   rT   z(WampRawSocketMixinGeneral.stringReceived  s    CL]^eLfg	''33G< -NTWX'',-  	HHMMdjkMlJJLL 	HHMMdjkMlJJLL	s$   AB 	C?
-B<<C?-C::C?c                 t   | j                         rt| j                  j                  d|       	 | j                  j	                  |      \  }}| j                  |       | j                  j                  dt        |             yt               # t        $ r}t        dj                  |            d}~ww xY w)zM
        Implements :func:`autobahn.wamp.interfaces.ITransport.send`
        z-WampRawSocketProtocol: TX WAMP message: {msg}r   z*WampRawSocketProtocol: TX octets: {octets}r   zIWampRawSocketProtocol: unable to serialize WAMP application payload ({0})N)isOpenr   r   r   	serializerB   r   r   r   r   r   )r"   r5   r   _r   s        r#   sendzWampRawSocketMixinGeneral.send-  s     ;;=HHNNJPSNTp!--77<
 (KTefmTno/!  5()t*0&)5 55s   B 	B7B22B7c                 :    t        | d      xr | j                  duS )zO
        Implements :func:`autobahn.wamp.interfaces.ITransport.isOpen`
        r   N)r&   r   rq   s    r#   r   z WampRawSocketMixinGeneral.isOpen?  s     tZ(FT]]$-FFr   N)r\   r]   r^   rr   rT   r   r   r1   r   r#   r   r     s    
9"$Gr   r   c                   "    e Zd ZdZd Zd Zd Zy)WampRawSocketMixinAsynciozE
    Base class for asyncio-based WAMP-over-RawSocket protocols.
    c                     	 |d u }| j                   j                  |       d | _         y # t        $ r.}| j                  j	                  d|       Y d }~d | _         y d }~ww xY w)Nz@WampRawSocketProtocol: ApplicationSession.onClose raised ({err})r   )r   onCloser   r   r   )r"   r-   wasCleanr   s       r#   r+   z-WampRawSocketMixinAsyncio._on_connection_lostL  s`    	ed{HMM!!(+   	eHHMM\bcMdd	es   ) 	A AA c                 l    | j                         r| j                  j                          yt               )zN
        Implements :func:`autobahn.wamp.interfaces.ITransport.close`
        N)r   r   r4   r   rq   s    r#   r4   zWampRawSocketMixinAsyncio.closeU  s%     ;;=NN  "/!r   c                     | j                         rLt        | j                  d      r| j                  j                          y| j                  j	                          yt               )zN
        Implements :func:`autobahn.wamp.interfaces.ITransport.abort`
        r   N)r   r&   r   r   r4   r   rq   s    r#   r   zWampRawSocketMixinAsyncio.abort^  sC     ;;=t~~w/$$&$$&/!r   N)r\   r]   r^   __doc__r+   r4   r   r1   r   r#   r   r   G  s    ""r   r   c                       e Zd ZdZd ZddZy)r   z
    asyncio-based WAMP-over-RawSocket server protocol.

    Implements:

        * :class:`autobahn.wamp.interfaces.ITransport`
    c                 r   || j                   j                  v rOt        j                  | j                   j                  |         | _        | j                  j                  d|       y| j                  j                  d|| j                   j                  j                                | j                          y)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_serializerv  s    T\\...#yy)B)B6)JKDHHNNV!   HHNN T! LL55::<  
 JJLr   c                      yzW
        Implements :func:`autobahn.wamp.interfaces.ITransport.get_channel_id`
        Nr1   r"   channel_id_types     r#   get_channel_idz*WampRawSocketServerProtocol.get_channel_id       r   Nz
tls-unique)r\   r]   r^   r   r   r   r1   r   r#   r   r   l  s    "r   r   c                   (    e Zd ZdZed        ZddZy)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   )r&   r   r   r   RAWSOCKET_SERIALIZER_IDrq   s    r#   r   z)WampRawSocketClientProtocol.serializer_id  s9    t]+#yy)A)ABD777r   c                      yr   r1   r   s     r#   r   z*WampRawSocketClientProtocol.get_channel_id  r   r   Nr   )r\   r]   r^   r   ra   r   r   r1   r   r#   r   r     s      8 8
r   r   c                   B    e Zd ZdZ ej
                         Zed        Zy)WampRawSocketFactoryzm
    Adapter class for asyncio-based WebSocket client and server factories.def dataReceived(self, data):
    c                 4    | j                         }| |_        |S r0   )protocolr   )r"   protos     r#   __call__zWampRawSocketFactory.__call__  s    r   N)	r\   r]   r^   r   r   r`   r   r   r   r1   r   r#   r   r     s+     %


C r   r   c                       e Zd ZdZeZddZy)r   zD
    asyncio-based WAMP-over-RawSocket server protocol factory.
    Nc                     t              r| _        n
fd| _        |t               }|st        d      |D ci c]  }|j                  | c}| _        yc c}w )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 r0   r1   r   s   r#   <lambda>z5WampRawSocketServerFactory.__init__.<locals>.<lambda>      G r   Nz%could not import any WAMP serializers)callabler   r
   r   r   r   )r"   r   r   rz   s    `  r#   rm   z#WampRawSocketServerFactory.__init__  s[     G#DM+DM )+K GHHITU#S88#=UUs   Ar0   )r\   r]   r^   r   r   r   rm   r1   r   r#   r   r     s     +HVr   r   c                       e Zd ZdZeZddZy)r   z;
    asyncio-based WAMP-over-RawSocket client factory.
    Nc                     t              r| _        n
fd| _        |t               }|r
 |d          }|t        d      || _        y)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 r0   r1   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#   rm   z#WampRawSocketClientFactory.__init__  sV     G#DM+DM )+K+[^-
BCC%r   r0   )r\   r]   r^   r   r   r   rm   r1   r   r#   r   r     s     +H&r   r   )*
__future__r   asyncioImportErrortrolliusr;   rh   r   autobahn.utilr   r   autobahn.wamp.exceptionr   r   r   autobahn.asyncio.utilr	   r
   r   __all__use_asynciorS   rU   rP   rw   Protocolr   rc   r   r   r   rx   r   r   objectr   r   r   r   r   r   r   r1   r   r#   <module>r      s  6 '    3 T T ;     
^$W%% ^$B5= 5=p   $,3)
XY X
C/ C60/ 0"3G 3Gn"" ""J ";=VXo  D ";=VXo  .6  V!5 V VD !&!5 !& !&u  s   D 	DD