
    8'hY                     T   d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZmZmZmZ d dlmZ dZ G d de      Ze G d de             Ze G d de             Z G d de      Ze G d de             Ze G d de             Z y)    )absolute_importN)Factory)Int32StringReceiver)ConnectionDone)CancelledError)public)peer2strtransport_channel_id)_LazyHexFormatter)ProtocolErrorSerializationErrorTransportLostInvalidUriError)PayloadExceededError)WampRawSocketServerProtocolWampRawSocketClientProtocolWampRawSocketServerFactoryWampRawSocketClientFactoryc                   n    e Zd ZdZ ej
                         Zd Zd Zd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zy)WampRawSocketProtocolzE
    Base class for Twisted-based WAMP-over-RawSocket protocols.
    c                     d| _         y N   _max_message_sizeselfs    V/var/www/html/trade_iq/venv/lib/python3.12/site-packages/autobahn/twisted/rawsocket.py__init__zWampRawSocketProtocol.__init__:   s
    !&    c                 P    dj                  || j                        }t        |      )NzqRawSocket connection: length of received message exceeded (message was {} bytes, but current maximum is {} bytes))format
MAX_LENGTHr   )r   lengthemsgs      r   lengthLimitExceededz)WampRawSocketProtocol.lengthLimitExceeded>   sC     C  J  J  KQ  SW  Sb  Sb  c"4((r    c                 `   | j                   j                  d| j                  j                         	 | j                  j                         }t        |      | _        t        j                         | _        d | _        d | _        d| _        d| _        d | _        y # t        $ r
 d| _        Y Ow xY w)Nz{klass}.connectionMade())klass?Fr    )logdebug	__class____name__	transportgetPeerr	   peerAttributeErrortxaiocreate_future	is_closed_session_serializer_handshake_complete_handshake_bytes_max_len_send)r   r0   s     r   connectionMadez$WampRawSocketProtocol.connectionMadeD   s    19P9PQ	'>>))+D
 !DI ,,.    $)  !$ ";  	DI	s   B B-,B-c                 `   	 | j                   j                         | _        | j                  j                  |        | j                  j                  d       y # t        $ rL}| j                  j                  d| j                  j                  |       | j                          Y d }~y d }~ww xY w)NzApplicationSession started.zX{klass}._on_handshake_complete(): ApplicationSession constructor / onOpen raised ({err})r(   err)factory_factoryr5   onOpenr*   r+   	Exceptionwarnr,   r-   abort)r   es     r   _on_handshake_completez,WampRawSocketProtocol._on_handshake_completej   s    		: LL113DMMM  & HHNN89  	HHMMt $ 7 7Q  @JJLL		s   :A 	B-!AB((B-c                    | j                   j                  d| j                  j                  |       t	        j
                  | j                  |        	 t        |j                  t              }| j                  r| j                  j                  |       d | _
        y # t        $ rC}| j                   j                  d| j                  j                  |       Y d }~d | _
        y d }~ww xY w)Nz({klass}.connectionLost(reason="{reason}")r(   reasonzC{klass}.connectionLost(): ApplicationSession.onClose raised "{err}"r<   )r*   r+   r,   r-   r2   resolver4   
isinstancevaluer   r5   onCloserA   rB   )r   rG   wasCleanrD   s       r   connectionLostz$WampRawSocketProtocol.connectionLostv   s    AI`I`iopdnnd+	@!&,,?H}}%%h/
 	  	@HHMM_ $ 7 7Q  @ @		@s   AB 	C)&2C$$C)c                 $   | j                   j                  d| j                  j                  t	        |             	 | j
                  j                  |      D ]O  }| j                   j                  d| j                  j                  |       | j                  j                  |       Q y # t        $ r<}| j                   j                  d| j                  j                  |       Y d }~y d }~wt        $ rL}| j                   j                  d| j                  j                  |       | j                          Y d }~y d }~wt        $ rL}| j                   j                  d| j                  j                  |       | j                          Y d }~y d }~wt        $ rL}| j                   j                  d	| j                  j                  |       | j                          Y d }~y d }~wt         $ rL}| j                   j                  d
| j                  j                  |       | j                          Y d }~y d }~wt"        $ rL}| j                   j                  d| j                  j                  |       | j                          Y d }~y d }~ww xY w)Nz,{klass}.stringReceived(): RX {octets} octetsr(   octetsz.{klass}.stringReceived: RX WAMP message: {msg})r(   msgzM{klass}.stringReceived: WAMP CancelledError - connection will continue!
{err}r<   zI{klass}.stringReceived: WAMP InvalidUriError - aborting connection!
{err}zG{klass}.stringReceived: WAMP ProtocolError - aborting connection!
{err}zN{klass}.stringReceived: WAMP PayloadExceededError - aborting connection!
{err}zL{klass}.stringReceived: WAMP SerializationError - aborting connection!
{err}zC{klass}.stringReceived: WAMP Exception - aborting connection!
{err})r*   tracer,   r-   r   r6   unserializer5   	onMessager   r+   r   rB   rC   r   r   r   rA   )r   payloadrQ   rD   s       r   stringReceivedz$WampRawSocketProtocol.stringReceived   s   E!^^44=Nw=W 	 	Y'	''33G< -O%)^^%<%<#  G'',-
  	"HHNNk!%!8!8   " "  	HHMMf $ 7 7  ! JJLL 	HHMMd $ 7 7  ! JJLL# 	HHMMk $ 7 7  ! JJLL! 	HHMMi $ 7 7  ! JJLL 	HHMM` $ 7 7  ! JJLL		sY   A-B+ +	J42C++J7AD>>J
AFJAG$$J0AH77JAJ

Jc                    | j                         r| j                  j                  d| j                  j                  || j
                         	 | j
                  j                  |      \  }}t        |      }d| j                  cxk  r|k  rEn nBdj                  || j                        }| j                  j                  |       t        |      | j                  |       | j                  j                  d| j                  j                  t        |             yt               # t        $ r}t        dj                  |            d}~ww xY w)	zM
        Implements :func:`autobahn.wamp.interfaces.ITransport.send`
        zB{klass}.send() (serializer={serializer}): TX WAMP message: "{msg}")r(   rQ   
serializerr   zQtried to send RawSocket message with size {} exceeding payload limit of {} octetsz"{klass}.send(): TX {octets} octetsrO   zIWampRawSocketProtocol: unable to serialize WAMP application payload ({0})N)isOpenr*   rR   r,   r-   r6   	serializelenr9   r"   rB   r   
sendStringr   r   r   )r   rQ   rU   _payload_lenr%   rD   s          r   sendzWampRawSocketProtocol.send   s"    ;;=HHNN_!%!8!8cdN^N^  `e!--77<

 "'lt))7K7ovv#T%7%79DHHMM$'.t44OOG,HHNN#G)-)@)@IZ[bIc # e  /! & @()t){){|})~@s   D* *	E3EEc                     | j                   duS )zO
        Implements :func:`autobahn.wamp.interfaces.ITransport.isOpen`
        N)r5   r   s    r   rY   zWampRawSocketProtocol.isOpen   s     }}D((r    c                 l    | j                         r| j                  j                          yt               )zN
        Implements :func:`autobahn.wamp.interfaces.ITransport.close`
        N)rY   r.   loseConnectionr   r   s    r   closezWampRawSocketProtocol.close   s%     ;;=NN))+/!r    c                     | j                         rLt        | j                  d      r| j                  j                          y| j                  j	                          yt               )zN
        Implements :func:`autobahn.wamp.interfaces.ITransport.abort`
        abortConnectionN)rY   hasattrr.   re   rb   r   r   s    r   rC   zWampRawSocketProtocol.abort   sD     ;;=t~~'89..0--//!r    N)r-   
__module____qualname____doc__r2   make_loggerr*   r   r&   r:   rE   rM   rV   r_   rY   rc   rC    r    r   r   r   4   sM     %


C')$"L
:*X"4)""r    r   c                       e Zd ZdZd ZddZy)r   z
    Twisted-based WAMP-over-RawSocket server protocol.

    Implements:

        * :class:`autobahn.wamp.interfaces.ITransport`
    c                 v   | j                   rt        j                  | |       y dt        | j                        z
  }| xj                  |d | z  c_        t        | j                        dk(  r| j
                  j                  dt        | j                               t        | j                  dd       dk7  rC| j
                  j                  dt        | j                  d                | j                          d	d
t        | j                  dd	       dz	  z   z  | _        | j
                  j                  d| j                         t        | j                  dd	       dz  }|| j                  j                  v rOt        j                  | j                  j                  |         | _        | j
                  j                  d|       nP| j
                  j                  d|| j                  j                  j!                                | j                          t#        t%        j&                  t%        j
                  | j(                  d	                  }d	|z  | _        t-        t/        |d
z
  dz  | j                  j0                  z  g            }| j2                  j5                  d       | j2                  j5                  |       | j2                  j5                  d       d| _         | j7                          | j
                  j                  d| j                         ||d  }|r| j                  |       y y )N   zBWampRawSocketServerProtocol: opening handshake received - {octets})rP   r         zpWampRawSocketServerProtocol: invalid magic byte (octet 1) in opening handshake: was 0x{magic}, but expected 0x7fmagic   	   z^WampRawSocketServerProtocol: client requests us to send out most {max_bytes} bytes per message)	max_bytes   zJWampRawSocketServerProtocol: client wants to use serializer '{serializer}'rX   zWampRawSocketServerProtocol: opening handshake - no suitable serializer found (client requested {serializer}, and we have {serializers}rX   serializers        TzFWampRawSocketServerProtocol: opening handshake completed: {serializer})r7   r   dataReceivedr[   r8   r*   r+   r   ordrB   rC   r9   r>   _serializerscopyr6   keysintmathceilr   r#   bytes	bytearrayRAWSOCKET_SERIALIZER_IDr.   writerE   )r   data	remainingser_idreply_max_len_expreply_octet2s         r   r|   z(WampRawSocketServerProtocol.dataReceived   s   ##!..tT:C 5 566I!!T*9%55!4(()Q.X,T-B-BC  
 t,,Qq12d:HHMMO/0E0Ea0HI " 
 JJL &'1D4I4I!A4N0OST0T+U%V"t"00   T221Q784?T\\666'+yy1J1J61R'SD$HHNNd#) # 
 HHMM b#)$(LL$=$=$B$B$D " 
 JJL %(		$((4;Q;QST2U(V$W! #$%6"6  %Y'!+1T5E5E5]5]]0_ &`  a$$W-$$\2$$[1+/(++-\#//   	
#D!!$' r    c                 2    t        | j                  d|      S )W
        Implements :func:`autobahn.wamp.interfaces.ITransport.get_channel_id`
        T	is_serverchannel_id_typer
   r.   r   r   s     r   get_channel_idz*WampRawSocketServerProtocol.get_channel_id?  s     $DNNdTcddr    Nz
tls-unique)r-   rg   rh   ri   r|   r   rk   r    r   r   r      s    M(^er    r   c                   $    e Zd ZdZd Zd ZddZy)r   z
    Twisted-based WAMP-over-RawSocket client protocol.

    Implements:

        * :class:`autobahn.wamp.interfaces.ITransport`
    c                    t         j                  |        t        j                  | j                  j                        | _        t        t        j                  t        j                  | j                  d                  }d|z  | _
        t        t        |dz
  dz  | j                  j                  z  g            }| j                  j                  d       | j                  j                  |       | j                  j                  d       y )Nrs   rt   rn   rz   r{   )r   r:   r   r>   r6   r   r   r   r*   r   r#   r   r   r   r.   r   )r   request_max_len_exprequest_octet2s      r   r:   z*WampRawSocketClientProtocol.connectionMadeP  s    ,,T299T\\%=%=> "$))DHHT5K5KQ,O"PQ 00 y!A%!+t/?/?/W/WW*Y  Z [W%^,[)r    c                 ,   | j                   rt        j                  | |       y dt        | j                        z
  }| xj                  |d | z  c_        t        | j                        dk(  r| j
                  j                  dt        | j                               t        | j                  dd       dk7  rC| j
                  j                  dt        | j                  d                | j                          d	d
t        | j                  dd	       dz	  z   z  | _
        | j
                  j                  d| j                         t        | j                  dd	       dz  }|| j                  j                  k7  rB| j
                  j                  d|| j                  j                         | j                          d| _         | j                          | j
                  j                  d| j                         ||d  }|r| j                  |       y y )Nrn   zEWampRawSocketClientProtocol: opening handshake received - {handshake})	handshaker   ro   rp   zpWampRawSocketClientProtocol: invalid magic byte (octet 1) in opening handshake: was 0x{magic}, but expected 0x7frq   rs   rt   zXWampRawSocketClientProtocol: server requests us to send out most {max} bytes per message)maxrv   zWampRawSocketClientProtocol: opening handshake - no suitable serializer found (server replied {serializer}, and we requested {serializers})rx   TzXWampRawSocketClientProtocol: opening handshake completed (using serializer {serializer})rw   )r7   r   r|   r[   r8   r*   r+   r   r}   rC   r9   r6   r   errorrE   )r   r   r   r   s       r   r|   z(WampRawSocketClientProtocol.dataReceivedc  s   ##!..tT:C 5 566I!!T*9%55!4(()Q.[/0E0EF  
 t,,Qq12d:HHNN K/0E0Ea0HI #  JJL &'1D4I4I!A4N0OST0T+U%V"n**   T221Q784?T--EEEHHNN f#)$($4$4$L$L # 
 JJL+/(++-n#//   	
#D!!$' r    c                 2    t        | j                  d|      S )r   Fr   r   r   s     r   r   z*WampRawSocketClientProtocol.get_channel_id  s     $DNNeUdeer    Nr   )r-   rg   rh   ri   r:   r|   r   rk   r    r   r   r   F  s    *&6(pfr    r   c                   L    e Zd ZdZ ej
                         Zd Zd ZddZ	d Z
y)WampRawSocketFactoryzE
    Base class for Twisted-based WAMP-over-RawSocket factories.
    c                 \    t              r| _        d| _        yfd| _        d| _        y)z

        :param factory: A callable that produces instances that implement
            :class:`autobahn.wamp.interfaces.ITransportHandler`
        :type factory: callable
        c                       S Nrk   )r>   s   r   <lambda>z/WampRawSocketFactory.__init__.<locals>.<lambda>  s    G r    r   N)callabler?   r   )r   r>   s    `r   r   zWampRawSocketFactory.__init__  s1     G#DM
 "' ,DM "'r    c                     d| _         y r   r   r   s    r   resetProtocolOptionsz)WampRawSocketFactory.resetProtocolOptions  s
    !&r    Nc                     | j                   j                  d| j                  j                  |       |t	        |      t
        k(  r
|dk\  r|dk  sJ ||| j                  k7  r|| _        y y y )NzI{klass}.setProtocolOptions(maxMessagePayloadSize={maxMessagePayloadSize}))r(   maxMessagePayloadSizei   r   )r*   r+   r,   r-   typer   r   )r   r   s     r   setProtocolOptionsz'WampRawSocketFactory.setProtocolOptions  s    b!^^44La 	 	c$,6K1LPS1SXmqtXt  zO  SX  zX  	Y  Y ,1F$J`J`1`%:D" 2a,r    c                 l   | j                   j                  d| j                  j                  |       | j	                         }| |_        | j                  |_        | j                  |_        | j                   j                  d| j                  j                  ||j                  |j                         |S )Nz"{klass}.buildProtocol(addr={addr}))r(   addrzf{klass}.buildProtocol() -> proto={proto}, max_message_size={max_message_size}, MAX_LENGTH={MAX_LENGTH})r(   protomax_message_sizer#   )r*   r+   r,   r-   protocolr>   r   r#   )r   r   ps      r   buildProtocolz"WampRawSocketFactory.buildProtocol  s    ;4>>CZCZaefMMO	--"44!^^44APQPcPcpqp|p| 	 	~r    r   )r-   rg   rh   ri   r2   rj   r*   r   r   r   r   rk   r    r   r   r     s-     %


C'';r    r   c                       e Zd ZdZeZddZy)r   zD
    Twisted-based WAMP-over-RawSocket server protocol factory.
    Nc                    t         j                  | |       |g }	 ddlm} |j	                   |d             |j	                   |              	 ddlm} |j	                   |d             |j	                   |              	 ddlm} |j	                   |d             |j	                   |              	 ddlm} |j	                   |d             |j	                   |              |st        d	      i | _
        |D ]  }|| j                  |j                  <    y# t
        $ r Y w xY w# t
        $ r Y w xY w# t
        $ r Y w xY w# t
        $ r Y mw xY 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`
        Nr   CBORSerializerT)batchedMsgPackSerializerUBJSONSerializerJsonSerializerz%could not import any WAMP serializers)r   r   autobahn.wamp.serializerr   appendImportErrorr   r   r   rA   r~   r   )r   r>   ry   r   r   r   r   sers           r   r   z#WampRawSocketServerFactory.__init__  s`    	%%dG4KC"">$#?@"">#34
F""#4T#BC""#4#67
E""#3D#AB""#3#56
C"">$#?@"">#34  GHH 	AC=@Dc99:	A?        sG   4D$ 4D3 4E ;4E $	D0/D03	D?>D?	EE	EEr   )r-   rg   rh   ri   r   r   r   rk   r    r   r   r     s     +H6Ar    r   c                       e Zd ZdZeZddZy)r   zD
    Twisted-based WAMP-over-RawSocket client protocol factory.
    Nc                 P   t         j                  | |       |	 ddlm}  |       }|	 ddlm}  |       }|	 ddlm}  |       }|	 ddlm}  |       }|t        d      || _	        y# t        $ r Y Pw xY w# t        $ r Y Ow xY w# t        $ r Y Nw xY w# t        $ r Y Mw xY w)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`
        Nr   r   r   r   r   z$could not import any WAMP serializer)
r   r   r   r   r   r   r   r   rA   r6   )r   r>   rX   r   r   r   r   s          r   r   z#WampRawSocketClientFactory.__init__  s     	%%dG4C+-
 F.0
 E-/
 C+-
 BCC%A        sE   A, A; B
 
B ,	A87A8;	BB
	BB	B%$B%r   )r-   rg   rh   ri   r   r   r   rk   r    r   r   r     s     +H4&r    r   )!
__future__r   r   r   r2   twisted.internet.protocolr   twisted.protocols.basicr   twisted.internet.errorr   twisted.internet.deferr   autobahn.utilr   autobahn.twisted.utilr	   r
   r   autobahn.wamp.exceptionr   r   r   r   autobahn.exceptionr   __all__r   r   r   r   r   r   rk   r    r   <module>r      s   6 '    - 7 1 1   @ + e e 3o"/ o"d \e"7 \e \e~ Xf"7 Xf Xfv'7 'T =A!5 =A =A@ ;&!5 ;& ;&r    