
    af^                        d dl Z d dlZd dlm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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"dS )    N)Optional)Factory)Int32StringReceiver)ConnectionDone)CancelledError)public_LazyHexFormatter)create_transport_detailstransport_channel_id)TransportDetails)ProtocolErrorSerializationErrorTransportLostInvalidUriError)PayloadExceededError)WampRawSocketServerProtocolWampRawSocketClientProtocolWampRawSocketServerFactoryWampRawSocketClientFactoryc                       e Zd ZU dZ ej                    ZdZee	         e
d<   dZee         e
d<   d Zedee         fd            Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd ZdS )WampRawSocketProtocolzE
    Base class for Twisted-based WAMP-over-RawSocket protocols.
    Npeer	is_serverc                 "    d| _         d | _        d S N   )_max_message_size_transport_detailsselfs    L/var/www/html/env/lib/python3.11/site-packages/autobahn/twisted/rawsocket.py__init__zWampRawSocketProtocol.__init__=   s    !&"&    returnc                     | j         S )zZ
        Implements :func:`autobahn.wamp.interfaces.ITransport.transport_details`
        )r   r   s    r!   transport_detailsz'WampRawSocketProtocol.transport_detailsB   s    
 &&r#   c                 V    d                     || 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.lengthLimitExceededI   sE     C  J  J  KQ  SW  Sb  c  c"4(((r#   c                    t          | j        | j                  | _        t          j        | j        _        | j        j        | _        t          j	                    | _
        d | _        d | _        d| _        d| _        d | _        d S )NFr#   )r
   	transportr   r   r   CHANNEL_FRAMING_RAWSOCKETchannel_framingr   txaiocreate_future	is_closed_session_serializer_handshake_complete_handshake_bytes_max_len_sendr   s    r!   connectionMadez$WampRawSocketProtocol.connectionMadeO   s    
 #;4>4>"Z"Z2B2\/ +0	 ,..    $)  !$ "r#   c                 Z   	 | j         j        r.dt          | j        | j         j        d          i}|| j         _        | j                                        | _        | j	        
                    d| j        | j        j        | j        j                   | j                            |           }| j	        
                    d| j        j        | j        |           d S # t          $ rF}| j	                            d| j        j        |           |                                  Y d }~d S d }~ww xY w)Nz
tls-uniquez2{klass}._on_handshake_complete(): calling {method})sessionklassmethodz@{klass}._on_handshake_complete(): {session} started (res={res}).)r<   r;   reszX{klass}._on_handshake_complete(): ApplicationSession constructor / onOpen raised ({err})r<   err)r   	is_securer   r.   r   
channel_idfactory_factoryr4   logdebug	__class____name__onOpen	Exceptionwarnabort)r    rB   r>   es       r!   _on_handshake_completez,WampRawSocketProtocol._on_handshake_completes   sM   	;&0 @ !"6t~tG^Ghjv"w"w
 6@'2 L1133DMHNNOY]Yf!%!8AU  W W W-&&t,,C HNN]eiese|#'=c  ; ; ; ; ;  	 	 	HMMt $ 7Q  @ @ @JJLLLLLLLLL		s   B)C 
D*$;D%%D*c                    | j                             d| j        j        |           t	          j        | j        |            	 t          |j        t                    }| j
        r| j
                            |           n># t          $ r1}| j                             d| j        j        |           Y d }~nd }~ww xY wd | _
        d S )Nz({klass}.connectionLost(reason="{reason}")r<   reasonzC{klass}.connectionLost(): ApplicationSession.onClose raised "{err}"r?   )rE   rF   rG   rH   r1   resolver3   
isinstancevaluer   r4   onCloserJ   rK   )r    rP   wasCleanrM   s       r!   connectionLostz$WampRawSocketProtocol.connectionLost   s    AI`iopppdnd+++	@!&,??H} 0%%h/// 	@ 	@ 	@HMM_ $ 7Q  @ @ @ @ @ @ @ @	@ s   ;A? ?
B:	'B55B:c                    | j                             d| j        j        t	          |                     	 | j                            |          D ]C}| j                             d| j        j        |           | j                            |           Dd S # t          $ r2}| j         
                    d| j        j        |           Y d }~d S d }~wt          $ rF}| j                             d| j        j        |           |                                  Y d }~d S d }~wt          $ rF}| j                             d| j        j        |           |                                  Y d }~d S d }~wt          $ rF}| j                             d	| j        j        |           |                                  Y d }~d S d }~wt           $ rF}| j                             d
| j        j        |           |                                  Y d }~d S d }~wt"          $ r_}| j                                          | j                             d| j        j        |           |                                  Y d }~d S 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})rE   tracerG   rH   r	   r5   unserializer4   	onMessager   rF   r   rK   rL   r   r   r   rJ   failure)r    payloadrZ   rM   s       r!   stringReceivedz$WampRawSocketProtocol.stringReceived   s   E!^4=Nw=W=W 	 	Y 	Y 	Y(	'33G<< - -O%)^%<#  G G G'',,,,- -
  	" 	" 	"HNNk!%!8   " " " " " " " " "  	 	 	HMMf $ 7  ! ! ! JJLLLLLLLLL 	 	 	HMMd $ 7  ! ! ! JJLLLLLLLLL# 	 	 	HMMk $ 7  ! ! ! JJLLLLLLLLL! 	 	 	HMMi $ 7  ! ! ! JJLLLLLLLLL 	 	 	HHMM` $ 7  ! ! ! JJLLLLLLLLL	sU   AB 
I1 'CI1;DI1(;E))I16;F77I1;HI1AI,,I1c                    |                                  r2| j                            d| j        j        || j                   	 | j                            |          \  }}t          |          }d| j        cxk     r|k     rGn nDd	                    || j                  }| j        
                    |           t          |          |                     |           | j                            d| j        j        t          |                     dS # t          $ r'}t          d	                    |                    d}~ww xY wt                      )	zM
        Implements :func:`autobahn.wamp.interfaces.ITransport.send`
        zB{klass}.send() (serializer={serializer}): TX WAMP message: "{msg}")r<   rZ   
serializerr   zQtried to send RawSocket message with size {} exceeding payload limit of {} octetsz"{klass}.send(): TX {octets} octetsrX   zIWampRawSocketProtocol: unable to serialize WAMP application payload ({0})N)isOpenrE   r[   rG   rH   r5   	serializelenr8   r(   rK   r   
sendStringr	   r   r   )r    rZ   r_   _payload_lenr+   rM   s          r!   sendzWampRawSocketProtocol.send   s{    ;;== 	"HNN_!%!8cdN^  ` ` `e!-77<<

 "'llt)7777K77777nuu#T%79 9DHMM$'''.t444OOG,,,HNN#G)-)@IZ[bIcIc # e e e e e & @ @ @()t){){|})~)~@  //!s   D 
E"E  Ec                     | j         duS )zO
        Implements :func:`autobahn.wamp.interfaces.ITransport.isOpen`
        N)r4   r   s    r!   rc   zWampRawSocketProtocol.isOpen   s     }D((r#   c                 |    |                                  r| j                                         dS t                      )zN
        Implements :func:`autobahn.wamp.interfaces.ITransport.close`
        N)rc   r.   loseConnectionr   r   s    r!   closezWampRawSocketProtocol.close   s8     ;;== 	"N))+++++//!r#   c                     |                                  rKt          | j        d          r| j                                         dS | j                                         dS t                      )zN
        Implements :func:`autobahn.wamp.interfaces.ITransport.abort`
        abortConnectionN)rc   hasattrr.   ro   rl   r   r   s    r!   rL   zWampRawSocketProtocol.abort   sg     ;;== 	"t~'899 0..00000--///////!r#   )rH   
__module____qualname____doc__r1   make_loggerrE   r   r   str__annotations__r   boolr"   propertyr   r&   r,   r9   rN   rV   r`   ri   rc   rm   rL    r#   r!   r   r   4   s          %


CD(3- $Ix~$$$' ' '
 '8,<#= ' ' ' X') ) )"" "" ""H; ; ;2  + + +Z" " "4) ) )" " "" " " " "r#   r   c                       e Zd ZdZd ZdS )r   z
    Twisted-based WAMP-over-RawSocket server protocol.

    Implements:

        * :class:`autobahn.wamp.interfaces.ITransport`
    c                 j   | j         rt                              | |           d S dt          | j                  z
  }| xj        |d |         z  c_        t          | j                  dk    r| j                            dt          | j                             t          | j        dd                   }|dk    r1| j        	                    d|           | 
                                 n| j                            d	           d
dt          | j        dd
                   dz	  z   z  | _        | j                            d| j                   t          | j        dd
                   dz  }|| j        j        v rFt          j        | j        j        |                   | _        | j                            d|           nM| j        	                    d|| j        j                                                   | 
                                 t#          t%          j        t%          j        | j        d
                              }d
|z  | _        t-          t/          |dz
  dz  | j        j        z  g                    }| j                            d           | j                            |           | j                            d           d| _         |                                  | j                            d| j                   ||d          }|r|                     |           d S d S )N   zDWampRawSocketServerProtocol: opening handshake received - 0x{octets})rY   r         zmWampRawSocketServerProtocol: invalid magic byte (octet 1) in opening handshake: was {magic}, but expected 127magicz8WampRawSocketServerProtocol: correct magic byte received   	   z^WampRawSocketServerProtocol: client requests us to send out most {max_bytes} bytes per message)	max_bytes   zJWampRawSocketServerProtocol: client wants to use serializer '{serializer}'rb   zWampRawSocketServerProtocol: opening handshake - no suitable serializer found (client requested {serializer}, and we have {serializers}rb   serializers        TzFWampRawSocketServerProtocol: opening handshake completed: {serializer})r6   r   dataReceivedre   r7   rE   rF   r	   ordrK   rL   r8   rC   _serializerscopyr5   keysintmathceilr   r)   bytes	bytearrayRAWSOCKET_SERIALIZER_IDr.   writerN   )r    data	remaining_magicser_idreply_max_len_expreply_octet2s          r!   r   z(WampRawSocketServerProtocol.dataReceived  sY   # P	(!..tT:::::C 5666I!!T*9*%55!!4())Q..Z,T-BCC     T21Q3788S==HMML$ "   
 JJLLLLHNN#]^^^ &'1D4I!A#4N0O0OST0T+U%V"t"0     T21Q37884?T\666'+y1J61R'S'SD$HNNd#) #    
 HMM b#)$(L$=$B$B$D$D "   
 JJLLL %(	$(4;QST2U2U(V(V$W$W! #$%6"6  %Y'!+1T5E5]]0_ &` &`  a  a$$W---$$\222$$[111+/(++---\#/     	

#D (!!$'''''( (r#   N)rH   rq   rr   rs   r   ry   r#   r!   r   r      s2         R( R( R( R( R(r#   r   c                       e Zd ZdZd Zd ZdS )r   z
    Twisted-based WAMP-over-RawSocket client protocol.

    Implements:

        * :class:`autobahn.wamp.interfaces.ITransport`
    c                    t                               |            t          j        | j        j                  | _        t          t          j        t          j        | j	        d                              }d|z  | _
        t          t          |dz
  dz  | j        j        z  g                    }| j                            d           | j                            |           | j                            d           d S )Nr   r   r|   r   r   )r   r9   r   rC   r5   r   r   r   rE   r   r)   r   r   r   r.   r   )r    request_max_len_exprequest_octet2s      r!   r9   z*WampRawSocketClientProtocol.connectionMadef  s    ,,T2229T\%=>> "$)DHT5KQ,O,O"P"PQQ 00 y!A%!+t/?/WW*Y  Z  Z [ [W%%%^,,,[)))))r#   c                 2   | j         rt                              | |           d S dt          | j                  z
  }| xj        |d |         z  c_        t          | j                  dk    r| j                            dt          | j                             t          | j        dd                   dk    rH| j                            dt          | j        d                              | 	                                 d	d
t          | j        dd	                   dz	  z   z  | _
        | j                            d| j
                   t          | j        dd	                   dz  }|| j        j        k    r;| j                            d|| j        j                   | 	                                 d| _         |                                  | j                            d| j                   ||d          }|r|                     |           d S d S )Nr|   zEWampRawSocketClientProtocol: opening handshake received - {handshake})	handshaker   r}   r~   zpWampRawSocketClientProtocol: invalid magic byte (octet 1) in opening handshake: was 0x{magic}, but expected 0x7fr   r   r   zXWampRawSocketClientProtocol: server requests us to send out most {max} bytes per message)maxr   zWampRawSocketClientProtocol: opening handshake - no suitable serializer found (server replied {serializer}, and we requested {serializers})r   TzXWampRawSocketClientProtocol: opening handshake completed (using serializer {serializer})r   )r6   r   r   re   r7   rE   rF   r	   r   rL   r8   r5   r   errorrN   )r    r   r   r   s       r!   r   z(WampRawSocketClientProtocol.dataReceivedy  sD   # 4	(!..tT:::::C 5666I!!T*9*%55!!4())Q..[/0EFF    
 t,QqS122d::HNN K/0Ea0HII #    JJLLL &'1D4I!A#4N0O0OST0T+U%V"n*     T21Q37884?T-EEEHNN f#)$($4$L #   
 JJLLL+/(++---n#/     	

#D (!!$'''''( (r#   N)rH   rq   rr   rs   r9   r   ry   r#   r!   r   r   \  s<         * * *&6( 6( 6( 6( 6(r#   r   c                   J    e Zd ZdZ ej                    Zd Zd ZddZ	d Z
dS )WampRawSocketFactoryzE
    Base class for Twisted-based WAMP-over-RawSocket factories.
    c                 X    t                    r| _        n
fd| _        d| _        dS )z

        :param factory: A callable that produces instances that implement
            :class:`autobahn.wamp.interfaces.ITransportHandler`
        :type factory: callable
        c                       S Nry   )rC   s   r!   <lambda>z/WampRawSocketFactory.__init__.<locals>.<lambda>  s    G r#   r   N)callablerD   r   )r    rC   s    `r!   r"   zWampRawSocketFactory.__init__  s;     G 	,#DMM+OOODM "'r#   c                     d| _         d S r   )r   r   s    r!   resetProtocolOptionsz)WampRawSocketFactory.resetProtocolOptions  s    !&r#   Nc                     | j                             d| j        j        |           |&t	          |          t
          k    r|dk    r|dk    sJ ||| j        k    r|| _        d S d S d S )NzI{klass}.setProtocolOptions(maxMessagePayloadSize={maxMessagePayloadSize}))r<   maxMessagePayloadSizei   r   )rE   rF   rG   rH   typer   r   )r    r   s     r!   setProtocolOptionsz'WampRawSocketFactory.setProtocolOptions  s    b!^4La 	 	c 	c 	c$,6K1L1LPS1S1SXmqtXtXt  zO  SX  zX  zX  zX  Y ,1F$J`1`1`%:D""" -,1`1`r#   c                     | j                             d| 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)   )rE   rF   rG   rH   protocolrC   r   r)   )r    r   ps      r!   buildProtocolz"WampRawSocketFactory.buildProtocol  s    ;4>CZaefffMMOO	-"4!^4APQPcpqp| 	 	~ 	~ 	~r#   r   )rH   rq   rr   rs   r1   rt   rE   r"   r   r   r   ry   r#   r!   r   r     sq          %


C' ' '' ' '; ; ; ;    r#   r   c                       e Zd ZdZeZddZdS )r   zD
    Twisted-based WAMP-over-RawSocket server protocol factory.
    Nc                 >   t                               | |           |cg }	 ddlm} |                     |d                     |                     |                       n# t
          $ r Y nw xY w	 ddlm} |                     |d                     |                     |                       n# t
          $ r Y nw xY w	 ddlm} |                     |d                     |                     |                       n# t
          $ r Y nw xY w	 ddlm} |                     |d                     |                     |                       n# t
          $ r Y nw xY w|st          d	          i | _
        |D ]}|| j
        |j        <   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`
        Nr   CBORSerializerT)batchedMsgPackSerializerUBJSONSerializerJsonSerializerz%could not import any WAMP serializers)r   r"   autobahn.wamp.serializerr   appendImportErrorr   r   r   rJ   r   r   )r    rC   r   r   r   r   r   sers           r!   r"   z#WampRawSocketServerFactory.__init__  s[    	%%dG444KCCCCCC"">>$#?#?#?@@@"">>#3#34444   FFFFFF""#4#4T#B#B#BCCC""#4#4#6#67777   EEEEEE""#3#3D#A#A#ABBB""#3#3#5#56666   CCCCCC"">>$#?#?#?@@@"">>#3#34444     I GHHH 	A 	AC=@Dc9::	A 	AsK   AA% %
A21A26AB9 9
CC
AD 
DDAE! !
E.-E.r   )rH   rq   rr   rs   r   r   r"   ry   r#   r!   r   r     s?          +H6A 6A 6A 6A 6A 6Ar#   r   c                       e Zd ZdZeZddZdS )r   zD
    Twisted-based WAMP-over-RawSocket client protocol factory.
    Nc                    t                               | |           d| _        |"	 ddlm}  |            }n# t
          $ r Y nw xY w|"	 ddlm}  |            }n# t
          $ r Y nw xY w|"	 ddlm}  |            }n# t
          $ r Y nw xY w|"	 ddlm}  |            }n# t
          $ r Y nw xY w|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`
        FNr   r   r   r   r   z$could not import any WAMP serializer)r   r"   noisyr   r   r   r   r   r   rJ   r5   )r    rC   rb   r   r   r   r   s          r!   r"   z#WampRawSocketClientFactory.__init__%  s    	%%dG444 
CCCCCC+^--

    FFFFFF..00

    EEEEEE--//

    CCCCCC+^--

    BCCC%sE   7 
AA
A 
A('A(.A? ?
BBB# #
B0/B0r   )rH   rq   rr   rs   r   r   r"   ry   r#   r!   r   r     s9          +H7& 7& 7& 7& 7& 7&r#   r   )#r   r   typingr   r1   twisted.internet.protocolr   twisted.protocols.basicr   twisted.internet.errorr   twisted.internet.deferr   autobahn.utilr   r	   autobahn.twisted.utilr
   r   autobahn.wamp.typesr   autobahn.wamp.exceptionr   r   r   r   autobahn.exceptionr   __all__r   r   r   r   r   r   ry   r#   r!   <module>r      s[  6          - - - - - - 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 P P P P P P P P 0 0 0 0 0 0 e e e e e e e e e e e e 3 3 3 3 3 3F" F" F" F" F"/ F" F" F"R [( [( [( [( [("7 [( [( [(| R( R( R( R( R("7 R( R( R(j' ' ' ' '7 ' ' 'T =A =A =A =A =A!5 =A =A =A@ >& >& >& >& >&!5 >& >& >& >& >&r#   