
    hKF                        d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlmZm	Z	m
Z
 d dlmZmZmZ d dlmZ d dlmZmZmZ dZd ZdZd	Zd
Z G d de j4                        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))    N)Optional)public_LazyHexFormatterhltype)ProtocolErrorSerializationErrorTransportLost)TransportDetails)get_serializerscreate_transport_detailstransport_channel_id)WampRawSocketServerProtocolWampRawSocketClientProtocolWampRawSocketServerFactoryWampRawSocketClientFactory         c                       e Zd ZU dZ ej
                  e      ZdZeZ e	j                         ZdZee   ed<   dZee   ed<   edee   fd       Zd Zed	        Zd
 Zd Zd Zd Zd Zd Zd Zd Zy)PrefixProtocolz!L   Npeer	is_serverreturnc                     | j                   S )zZ
        Implements :func:`autobahn.wamp.interfaces.ITransport.transport_details`
        )_transport_detailsselfs    V/var/www/Befach/backend/env/lib/python3.12/site-packages/autobahn/asyncio/rawsocket.pytransport_detailsz PrefixProtocol.transport_details?   s    
 &&&    c                 l   | j                   j                  d| j                         || _        t	        | j                  | j
                        | _        t        j                  | j                  _	        | j                  j                  | _        d| _
        d | _        t        j                         | _        y )Nz3RawSocker Asyncio: Connection made with peer {peer})r   r!   )logdebugr   	transportr   r   r   r
   CHANNEL_FRAMING_RAWSOCKETchannel_framing_buffer_headertxaiocreate_future_wait_closedr   r%   s     r   connection_madezPrefixProtocol.connection_madeF   s     	LSWS\S\]" #;4>>4>>"Z2B2\2\/ ++00	!//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_closedX   s7    4($$$##%ALLHr!   c                     | j                   j                  d       d | _        | j                  j	                  d       | j                  |       y )Nz"RawSocker Asyncio: Connection lostT)r#   r$   r%   r,   r1   _on_connection_lostr   excs     r   connection_lostzPrefixProtocol.connection_losta   s<    ;<$$T*  %r!   c                      y N r6   s     r   r5   z"PrefixProtocol._on_connection_lostg   s    r!   c                 n    | j                   j                  |       | j                  j                          y r:   )r#   errorr%   close)r   msgs     r   protocol_errorzPrefixProtocol.protocol_errorj   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.sendStringn   sb    It###^,,T//T;V$T"r!   c                     t               r:   NotImplementedErrorr   rI   s     r   pingzPrefixProtocol.pingv       !##r!   c                     t               r:   rN   rP   s     r   pongzPrefixProtocol.pongy   rR   r!   c                 ~   | 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(   rB   prefix_lengthr)   ordFRAME_TYPE_PONGr@   rE   unpackrG   
max_lengthFRAME_TYPE_DATAstringReceivedFRAME_TYPE_PINGrQ   rT   )r   rI   pos	remaining
frame_typeframe_lengthrK   s          r   data_receivedzPrefixProtocol.data_received|   s   %	4---||+/<<(
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               r:   rN   rP   s     r   r^   zPrefixProtocol.stringReceived   rR   r!   )__name__
__module____qualname__rG   rE   calcsizerX   r\   rC   r*   make_loggerr#   r   r   str__annotations__r   boolpropertyr
   r    r.   r3   r8   r5   r@   rL   rQ   rT   rd   r^   r;   r!   r   r   r   5   s    M#FOOM2M!J O
%


CD(3- $Ix~$'8,<#= ' '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#   rD   r\   _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_doner-   s     r   r.   z!RawSocketProtocol.connection_made   s    &&tY7$r!   c                     t               r:   rN   r   s    r   _on_handshake_completez(RawSocketProtocol._on_handshake_complete   rR   r!   c                     t        | j                  d d       }|d   t        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   rs   r   rr      zReserved bytes must be zero)	bytearrayr(   
MAGIC_BYTEHandshakeErrorrC   )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               r:   rN   r   s    r   process_handshakez#RawSocketProtocol.process_handshake   rR   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})rI   r   zHandshake error : {err}errTr!   )r#   r$   r   r|   r   rd   r(   rB   r   r   r@   formatr~   )r   rI   es      r   rd   zRawSocketProtocol.data_received   s    @GXY]G^_!//d;;LLD L4<< A%**, (,$++-||AB'""00t<  & & ''(A(H(HQ(H(OPs   7C 	D!C>>DN)	rf   rg   rh   rz   r.   r~   r   r   rd   r;   r!   r   rp   rp      s     
$%$	$=r!   rp   zillegal (must not be used)zserializer unsupportedz#maximum message length unacceptablez*use of reserved bits (unsupported feature)z maximum connection count reached)r   r   r   r   r   c                       e Zd ZddZy)r   c                 t    t         j                  | |s|       y |dt        j                  |      z  z          y )Nz : %s)	Exceptionrz   ERRMAPget)r   r?   codes      r   rz   zHandshakeError.__init__   s-    4DWcGfjjQUFV<V6VWr!   N)r   )rf   rg   rh   rz   r;   r!   r   r   r      s    Xr!   r   c                   2    e Zd ZdZd Zd Zed        Zd Zy)RawSocketClientProtocolFc                      y)NTr;   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   r   serializer_idr   )r   r   r   s      r   r   z)RawSocketClientProtocol.process_handshake   s`    **,Q; !BCHH' !^"(&1C1C"DF F (r!   c                     t               r:   rN   r   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 )Nr   r   z(RawSocket Asyncio: Client handshake sent)
rp   r.   bytesr   r   rw   r   rH   r#   r$   )r   r%   hss      r   r.   z'RawSocketClientProtocol.connection_made  sg    ))$	:9j"..!3d6H6HH$ % & 	ABr!   N)	rf   rg   rh   r   r   r   rn   r   r.   r;   r!   r   r   r      s,    IF $ $Cr!   r   c                       e Zd ZdZd Zd Zy)RawSocketServerProtocolTc                     t               r:   rN   r   s     r   supports_serializerz+RawSocketServerProtocol.supports_serializer  rR   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 )Nr   rs   r   )r%   rH   r   r   r   )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_UNSUPPORTEDr   r   rw   )r   r   r   _lexps   `   r   r   z)RawSocketServerProtocol.process_handshake  sa    	K ,,.''/4a8 !D!K!KSY!K!Z[[d&&/r!   N)rf   rg   rh   r   r   r   r;   r!   r   r   r     s    I$0r!   r   c                   $    e Zd Zd Zd Zd Zd Zy)WampRawSocketMixinGeneralc                    | j                   j                  d       	 | j                  j                  r>dt	        | j
                  | j                  j                  d      i}|| j                  _        | 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
tls-uniquezApplicationSession started.zMWampRawSocketProtocol: ApplicationSession constructor / onOpen raised ({err})r   )r#   r$   r   	is_securer   r%   r   
channel_idfactory_factory_sessiononOpeninfor   warnabort)r   r   r   s      r   r~   z0WampRawSocketMixinGeneral._on_handshake_complete!  s    BC	9&&00 !"6t~~tG^G^GhGhjv"w
 6@''2 LL113DMMM  & HHMM78  	HHMMiopMqJJLL	s   BC 	D-DD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})r?   zHWampRawSocketProtocol: WAMP Protocol Error ({err}) - aborting connectionr   zHWampRawSocketProtocol: WAMP Internal Error ({err}) - aborting connection)r#   r$   r   _serializerunserializer   	onMessager   r   r   r   )r   payloadr?   r   s       r   r^   z(WampRawSocketMixinGeneral.stringReceived7  s    CL]^eLfg	''33G<NTWX'', =  	HHMMdjkMlJJLL 	HHMMdjkMlJJLL	s$   AB 	C?
-B<<C?-C::C?c                    | j                         r| j                  j                  dt        | j                        |       	 | 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{func}: TX WAMP message: {msg})funcr?   z*WampRawSocketProtocol: TX octets: {octets}r   zIWampRawSocketProtocol: unable to serialize WAMP application payload ({0})N)isOpenr#   r$   r   sendr   	serializerL   r   r   r   r   r	   )r   r?   r   _r   s        r   r   zWampRawSocketMixinGeneral.sendF  s     ;;=HHNN;&BSY\N]p!--77<
 (KTefmTno/!  5()t*0&)5 55s   B# #	C,CCc                 :    t        | d      xr | j                  duS )zO
        Implements :func:`autobahn.wamp.interfaces.ITransport.isOpen`
        r   N)r0   r   r   s    r   r   z WampRawSocketMixinGeneral.isOpenX  s     tZ(FT]]$-FFr!   N)rf   rg   rh   r~   r^   r   r   r;   r!   r   r   r     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   r7   wasCleanr   s       r   r5   z-WampRawSocketMixinAsyncio._on_connection_loste  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%   r>   r	   r   s    r   r>   zWampRawSocketMixinAsyncio.closen  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   r0   r%   r   r>   r	   r   s    r   r   zWampRawSocketMixinAsyncio.abortw  sC     ;;=t~~w/$$&$$&/!r!   N)rf   rg   rh   __doc__r5   r>   r   r;   r!   r   r   r   `  s    ""r!   r   c                       e Zd ZdZ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_serializer  s    T\\...#yy)B)B6)JKDHHNNV!   HHNN T! LL55::<  
 JJLr!   N)rf   rg   rh   r   r   r;   r!   r   r   r     s    r!   r   c                        e Zd ZdZe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   )r0   r   r   r   RAWSOCKET_SERIALIZER_IDr   s    r   r   z)WampRawSocketClientProtocol.serializer_id  s9    t]+#yy)A)ABD777r!   N)rf   rg   rh   r   rn   r   r;   r!   r   r   r     s     8 8r!   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 r:   )protocolr   )r   protos     r   __call__zWampRawSocketFactory.__call__  s    r!   N)	rf   rg   rh   r   r*   rj   r#   r   r   r;   r!   r   r   r     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               D cg c]	  } |        }}|st        d      |D ci c]  }|j                  | c}| _        yc c}w 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 r:   r;   r   s   r   <lambda>z5WampRawSocketServerFactory.__init__.<locals>.<lambda>      Gr!   Nz%could not import any WAMP serializers)callabler   r   r   r   r   )r   r   r   r   r   s    `   r   rz   z#WampRawSocketServerFactory.__init__  st     G#DM+DM :I:KLJ:<LKL GHHITU#S88#=U M
 Vs   A+A0r:   )rf   rg   rh   r   r   r   rz   r;   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 r:   r;   r   s   r   r   z5WampRawSocketClientFactory.__init__.<locals>.<lambda>  r   r!   Nr   z$could not import any WAMP serializer)r   r   r   r   r   )r   r   r   r   s    `  r   rz   z#WampRawSocketClientFactory.__init__  sV     G#DM+DM )+K+[^-
BCC%r!   r:   )rf   rg   rh   r   r   r   rz   r;   r!   r   r   r     s     +H&r!   r   )+asynciorE   ru   r   typingr   r*   autobahn.utilr   r   r   autobahn.wamp.exceptionr   r   r	   autobahn.wamp.typesr
   autobahn.asyncio.utilr   r   r   __all__r]   r_   rZ   r   Protocolr   rp   r   r   r   r   r   r   objectr   r   r   r   r   r   r   r;   r!   r   <module>r      s_  6       ; ; T T 0 a a 
p$W%% p$f4= 4=n   $,3)
XY X
C/ C:0/ 0&=G =GB"" ""J ";=VXo  6 8";=VXo 8 8 6  V!5 V VD !&!5 !& !&r!   