
    afk2                        d dl Z d dlZd dlmZmZmZ d dlmZ d dlm	Z	 d dl
mZmZmZ d dlmZ d dlmZmZ d dlmZmZmZ d	Z G d
 de          Z ej        e           dedeee         ee         f         f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"dS )    N)OptionalDictTuple)hlval)protocol)ConnectionDenyConnectionRequestConnectionResponse)TransportDetails)
ITransportISession)ProtocolErrorSerializationErrorTransportLost)WampWebSocketServerProtocolWampWebSocketClientProtocolWampWebSocketServerFactoryWampWebSocketClientFactoryc                       e Zd ZU dZdZee         ed<   dZee	         ed<   dde
dee         fdZd Zd	ede
dee         fd
ZdedefdZd Zd Zedee	         fd            Zd Zd ZdS )WampWebSocketProtocolz>
    Base class for WAMP-over-WebSocket transport mixins.
    N_session_transport_detailscodereasonc                 l    | j                             d||           |                     ||           d S )NzEFailing WAMP-over-WebSocket transport: code={code}, reason="{reason}")r   r   )logdebug_fail_connection)selfr   r   s      I/var/www/html/env/lib/python3.11/site-packages/autobahn/wamp/websocket.py_bailoutzWampWebSocketProtocol._bailout5   sD    ^ei$ 	 	& 	& 	&dF+++++    c                    	 | j                                         | _        | | j        _        | j                            |            dS # t
          $ rs}| j                            dt          j	                               d
                    |          }|                     t          j        j        |           Y d}~dS d}~ww xY w)z^
        Callback from :func:`autobahn.websocket.interfaces.IWebSocketChannel.onOpen`
        {tb}tbWAMP Internal Error ({0})r   N)factory_factoryr   
_transportonOpen	Exceptionr   critical	traceback
format_excformatr!   r   WebSocketProtocol CLOSE_STATUS_CODE_INTERNAL_ERROR)r   er   s      r    r,   zWampWebSocketProtocol.onOpen:   s    	f L1133DM'+DM$M  &&&&& 	f 	f 	fHf)=)?)?@@@077::FMM(4U^dMeeeeeeeee	fs   AA 
CA(C  CwasCleanc                 "   || _         | j        	 | j                            d|||           | j                            |           n=# t
          $ r0 | j                            dt          j                               Y nw xY wd| _        dS dS )z_
        Callback from :func:`autobahn.websocket.interfaces.IWebSocketChannel.onClose`
        NzWWAMP-over-WebSocket transport lost: wasClean={wasClean}, code={code}, reason="{reason}")r5   r   r   r$   r%   )	_onclose_reasonr   r   r   onCloser-   r.   r/   r0   )r   r5   r   r   s       r    r8   zWampWebSocketProtocol.onCloseJ   s    
  &=$Em%D  A A A %%h//// E E E!!&Y-A-C-C!DDDDDE DMMM %$s   8A	 	7BBpayloadisBinaryc                    	 | j                             ||          D ]}| j                            dt	          ddd          | j        j        rt	          | j        j        dd          nd| j        j        rt	          | j        j        dd          ndt	          ddd          t	          d	dd          |
           | j                            |           dS # t          $ rs}| j        
                    dt          j                               d                    |          }|                     t          j        j        |           Y d}~dS d}~wt$          $ rs}| j        
                    dt          j                               d                    |          }|                     t          j        j        |           Y d}~dS d}~ww xY w)za
        Callback from :func:`autobahn.websocket.interfaces.IWebSocketChannel.onMessage`
        <
{action1}{session}, {authid}{action2}
  {message}
{action3}zWAMP-Receive(greenTcolorboldF-z) <<z<<action1authidsessionaction2action3messager$   r%   zWAMP Protocol Error ({0})r(   Nr'   )_serializerunserializer   tracer   r   _authid_session_id	onMessager   r.   r/   r0   r1   r!   r   r2    CLOSE_STATUS_CODE_PROTOCOL_ERRORr-   r3   )r   r9   r:   msgr4   r   s         r    rN   zWampWebSocketProtocol.onMessage]   s   	f'33GXFF - -`',_GRV'W'W'Waeanav&eDM,AW\&]&]&]&]|fjfsf  (IuT]-Fg\a'b'b'b'b  FI',V7'N'N'N',Tt'L'L'L'*  , , , '',,,,- -  	f 	f 	fHf)=)?)?@@@077::FMM(4U^dMeeeeeeeee 	f 	f 	fHf)=)?)?@@@077::FMM(4U^dMeeeeeeeee	fs&   CC 
G'A(EG"A(GGc                    |                                  r8	 | j                            dt          ddd          | j        j        rt          | j        j        dd          nd| j        j        rt          | j        j        dd          ndt          ddd          t          d	dd          |
           | j                            |          \  }}| 	                    ||           dS # t          $ rT}| j                            d                    |                     t          d                    |                    d}~ww xY wt                      )zM
        Implements :func:`autobahn.wamp.interfaces.ITransport.send`
        r<   zWAMP-Transmit(redTr>   FrA   z) >>z>>rB   z$WAMP message serialization error: {}z%WAMP message serialization error: {0}N)isOpenr   rK   r   r   rL   rM   rI   	serializesendMessager-   errorr1   r   r   )r   rP   r9   r:   r4   s        r    sendzWampWebSocketProtocol.sendv   sz    ;;== 	"4`',-=UQU'V'V'V_c_l_t&}eDM,AUZ&[&[&[&[z}dhdqd}  (GuT]-FeZ_'`'`'`'`  DG',V5t'L'L'L',TT'J'J'J'*  , , , %)$4$>$>s$C$C!   (33333  \ \ \ELLQOOPPP()P)W)WXY)Z)Z[[[\  //!s   B>C- -
E7AEEc                     | j         duS )zO
        Implements :func:`autobahn.wamp.interfaces.ITransport.isOpen`
        N)r   r   s    r    rS   zWampWebSocketProtocol.isOpen   s     }D((r"   returnc                     | j         S )zZ
        Implements :func:`autobahn.wamp.interfaces.ITransport.transport_details`
        )r   rY   s    r    transport_detailsz'WampWebSocketProtocol.transport_details   s    
 &&r"   c                     |                                  r&|                     t          j        j                   dS t                      )zN
        Implements :func:`autobahn.wamp.interfaces.ITransport.close`
        N)rS   	sendCloser   r2   CLOSE_STATUS_CODE_NORMALr   rY   s    r    closezWampWebSocketProtocol.close   s<     ;;== 	"NN85NOOOOO//!r"   c                     |                                  r&|                     t          j        j                   dS t                      )zN
        Implements :func:`autobahn.wamp.interfaces.ITransport.abort`
        N)rS   r!   r   r2   CLOSE_STATUS_CODE_GOING_AWAYr   rY   s    r    abortzWampWebSocketProtocol.abort   s<     ;;== 	"MM(4QRRRRR//!r"   N)__name__
__module____qualname____doc__r   r   r   __annotations__r   r   intstrr!   r,   boolr8   bytesrN   rW   rS   propertyr\   r`   rc    r"   r    r   r   -   sI          $(Hhx '''59!12999, ,S ,(3- , , , ,
f f f ! !C !# ! ! ! !&f f$ f f f f2" " ".) ) ) '8,<#= ' ' ' X'" " "" " " " "r"   r   subprotocolrZ   c                    	 |                      d          }|d         dk    r(t          d                    |d                             t          |d                   }d                    |dd                    }||fS #  Y dS xY w)N.r   wampzFWAMP WebSocket subprotocol identifier must start with "wamp", not "{}"      )NN)splitr-   r1   rj   join)rp   sversionserializer_ids       r    parseSubprotocolIdentifierr{      s    c""Q46>>dkklmnolpqqrrrad))122%%zzs   A>B Bc                   R    e Zd ZdZdZdedeee         e	eef         f         fdZ
dS )r   z:
    Mixin for WAMP-over-WebSocket server transports.
    TrequestrZ   c                    i }|j         D ]i}t          |          \  }}|dk    rO|| j        j                                        v r/t          j        | j        j        |                   | _        ||fc S j| j        rJt          t          j	        d
                    d                    | j        j                                       t          j        | j        j        d                   | _        d|fS )a
        Callback from :func:`autobahn.websocket.interfaces.IWebSocketChannel.onConnect`
        ru   z1This server only speaks WebSocket subprotocols {}, jsonN)	protocolsr{   r)   _serializerskeyscopyrI   STRICT_PROTOCOL_NEGOTIATIONr   BAD_REQUESTr1   rw   )r   r}   headersrp   ry   serializerIds         r    	onConnectz%WampWebSocketServerProtocol.onConnect   s     ", 	, 	,K$>{$K$K!G\!||0I0N0N0P0P P P#'9T\-F|-T#U#U "G+++++ 	! !;=p=w=w		$,011>3 >3 4 4 4  $y)B6)JKKD= r"   N)re   rf   rg   rh   r   r	   r   r   rk   r   r   ro   r"   r    r   r      sb          #'!!2 !uXc]DQTVYQYN=Z7[ ! ! ! ! ! !r"   r   c                   "    e Zd ZdZdZdefdZdS )r   z:
    Mixin for WAMP-over-WebSocket client transports.
    Tresponsec                 >   |j         | j        j        vrI| j        r?t	          d                    d                    | j        j                                      d}nt          |j                   \  }}t          j        | j        j	        |                   | _
        dS )r   zLThe server does not speak any of the WebSocket subprotocols {} we requested.r   r   N)r   r)   r   r   r-   r1   rw   r{   r   r   rI   )r   r   rz   ry   s       r    r   z%WampWebSocketClientProtocol.onConnect   s     DL$:::/ ' n u uIIdl455!7 !7 8 8 8 !'%?@Q%R%R"G]  9T\%>}%MNNr"   N)re   rf   rg   rh   r   r
   r   ro   r"   r    r   r      sI          #'O"4 O O O O O Or"   r   c                       e Zd ZdZddZdS )WampWebSocketFactoryzF
    Base class for WAMP-over-WebSocket transport factory mixins.
    Nc                 n   t                    r| _        n
fd| _        |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 |D             | _        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 default
           serializers). Serializers must implement
           :class:`autobahn.wamp.interfaces.ISerializer`.
        :type serializers: list
        c                       S rd   ro   )r)   s   r    <lambda>z/WampWebSocketFactory.__init__.<locals>.<lambda>  s    G r"   Nr   )CBORSerializerT)batched)MsgPackSerializer)UBJSONSerializer)JsonSerializerz$Could not import any WAMP serializerc                 B    g | ]}d                      |j                  S )z	wamp.2.{})r1   SERIALIZER_ID).0sers     r    
<listcomp>z1WampWebSocketFactory.__init__.<locals>.<listcomp>2  s)    XXXS;--c.?@@XXXr"   )callabler*   autobahn.wamp.serializerr   appendImportErrorr   r   r   r-   r   r   
_protocols)r   r)   serializersr   r   r   r   r   s    `      r    __init__zWampWebSocketFactory.__init__   sw    G 	,#DMM+OOODM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     H FGGG 	7 	7C36Dc/00XXKXXXsK   AA, ,
A98A9=AC   
CCAD 
D! D!%AE( (
E54E5rd   )re   rf   rg   rh   r   ro   r"   r    r   r      s8         ;Y ;Y ;Y ;Y ;Y ;Yr"   r   c                       e Zd ZdZdS )r   zC
    Mixin for WAMP-over-WebSocket server transport factories.
    Nre   rf   rg   rh   ro   r"   r    r   r   5             r"   r   c                       e Zd ZdZdS )r   zC
    Mixin for WAMP-over-WebSocket client transport factories.
    Nr   ro   r"   r    r   r   ;  r   r"   r   )#r   r/   typingr   r   r   autobahn.utilr   autobahn.websocketr   autobahn.websocket.typesr   r	   r
   autobahn.wamp.typesr   autobahn.wamp.interfacesr   r   autobahn.wamp.exceptionr   r   r   __all__objectr   registerrk   rj   r{   r   r   r   r   r   ro   r"   r    <module>r      sB  6      ( ( ( ( ( ( ( ( ( (       ' ' ' ' ' ' Z Z Z Z Z Z Z Z Z Z 0 0 0 0 0 0 9 9 9 9 9 9 9 9 T T T T T T T T T T)}" }" }" }" }"F }" }" }"@ 
 ) * * *	C 	E(3-RU:V4W 	 	 	 	! ! ! ! !"7 ! ! !:O O O O O"7 O O O2@Y @Y @Y @Y @Y6 @Y @Y @YF    !5       !5     r"   