
    h^                     X   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"y)    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y)WampRawSocketProtocolzE
    Base class for Twisted-based WAMP-over-RawSocket protocols.
    Npeer	is_serverc                      d| _         d | _        y N   )_max_message_size_transport_detailsselfs    V/var/www/Befach/backend/env/lib/python3.12/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                 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.lengthLimitExceededI   sC     C  J  J  KQ  SW  Sb  Sb  c"4((r#   c                 :   t        | j                  | j                        | _        t        j
                  | j                  _        | j                  j                  | _        t        j                         | _
        d | _        d | _        d| _        d| _        d | _        y )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2B2\2\/ ++00	 ,,.    $)  !$ "r#   c                    	 | j                   j                  r>dt        | j                  | j                   j                  d      i}|| j                   _        | j                  j                         | _        | j                  j                  d| j                  | j                  j                  | j                  j                         | j                  j                  |       }| j                  j                  d| j                  j                  | j                  |       y # t        $ rL}| j                  j                  d| j                  j                  |       | j!                          Y d }~y 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   s*   	;&&00 !"6t~~tG^G^GhGhjv"w
 6@''2 LL113DMHHNNOY]YfYf!%!8!8AUAU  W--&&t,C HHNN]eiesese|e|#'==c  ;  	HHMMt $ 7 7Q  @JJLL		s   CD 	E4(AE//E4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?   )rE   rF   rG   rH   r1   resolver3   
isinstancevaluer   r4   onCloserJ   rK   )r    rP   wasCleanrM   s       r!   connectionLostz$WampRawSocketProtocol.connectionLost   s    AI`I`iopdnnd+	@!&,,?H}}%%h/
 	  	@HHMM_ $ 7 7Q  @ @		@s   AB 	C)&2C$$C)c                 X   | 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"        $ rf}| j                   j%                          | 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})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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 	HH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<   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"    ;;=HHNN_!%!8!8cdN^N^  `e!--77<

 "'lt))7K7nuu#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)r4   r   s    r!   rc   zWampRawSocketProtocol.isOpen   s     }}D((r#   c                 l    | j                         r| j                  j                          yt               )zN
        Implements :func:`autobahn.wamp.interfaces.ITransport.close`
        N)rc   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)rc   hasattrr.   ro   rl   r   r   s    r!   rL   zWampRawSocketProtocol.abort   sD     ;;=t~~'89..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,<#= ' ')""H;2+Z"4)""r#   r   c                       e Zd ZdZd Zy)r   z
    Twisted-based WAMP-over-RawSocket server protocol.

    Implements:

        * :class:`autobahn.wamp.interfaces.ITransport`
    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  r.| j
                  j                  d|       | j                          n| j
                  j                  d	       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   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  s   ##!..tT:C 5 566I!!T*9%55!4(()Q.Z,T-B-BC   T221Q78S=HHMML$ " 
 JJLHHNN#]^ &'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#   N)rH   rq   rr   rs   r   ry   r#   r!   r   r      s    R(r#   r   c                       e Zd ZdZd Z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 )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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 )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  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#   N)rH   rq   rr   rs   r9   r   ry   r#   r!   r   r   \  s    *&6(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 Nry   )rC   s   r!   <lambda>z/WampRawSocketFactory.__init__.<locals>.<lambda>  s    Gr#   r   N)callablerD   r   )r    rC   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   )rE   rF   rG   rH   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)   )rE   rF   rG   rH   protocolrC   r   r)   )r    r   ps      r!   buildProtocolz"WampRawSocketFactory.buildProtocol  s    ;4>>CZCZaefMMO	--"44!^^44APQPcPcpqp|p| 	 	~r#   r   )rH   rq   rr   rs   r1   rt   rE   r"   r   r   r   ry   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   rJ   r   r   )r    rC   r   r   r   r   r   sers           r!   r"   z#WampRawSocketServerFactory.__init__  sY    	%%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C=@Dc99: ?        sG   4D$ 4D3 4E ;4E $	D0/D03	D?>D?	EE	EEr   )rH   rq   rr   rs   r   r   r"   ry   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                 ^   t         j                  | |       d| _        |	 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`
        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 
C+-
 F.0
 E-/
 C+-
 BCC%A        sF   A3 B B B  3	A?>A?	BB	BB 	B,+B,r   )rH   rq   rr   rs   r   r   r"   ry   r#   r!   r   r     s     +H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 1 1 3 P 0 e e 3F"/ F"R [("7 [( [(| R("7 R( R(j'7 'T =A!5 =A =A@ >&!5 >& >&r#   