o
    &gN                     @   st   d Z ddlZddlmZmZ ddlmZmZmZ G dd deZ	G dd dZ
G d	d
 d
e
eZG dd deZdS )z
Python WebSocket server base
Copyright 2011 Joel Martin
Copyright 2016-2018 Pierre Ossman
Licensed under LGPL version 3 (see docs/LICENSE.LGPL-3)
    N)BaseHTTPRequestHandler
HTTPServer)	WebSocketWebSocketWantReadErrorWebSocketWantWriteErrorc                       s:   e Zd ZdZ fddZdddZdd Zd	d
 Z  ZS )HttpWebSocketz?Class to glue websocket and http request functionality togetherc                    s   t    || _d S N)super__init__request_handler)selfr   	__class__ Y/root/parts/websockify/install/lib/python3.10/site-packages/websockify/websocketserver.pyr
      s   

zHttpWebSocket.__init__Nc                 C      | j || d S r   )r   send_response)r   codemessager   r   r   r         zHttpWebSocket.send_responsec                 C   r   r   )r   send_header)r   keywordvaluer   r   r   r      r   zHttpWebSocket.send_headerc                 C   s   | j   d S r   )r   end_headersr   r   r   r   r      s   zHttpWebSocket.end_headersr   )	__name__
__module____qualname____doc__r
   r   r   r   __classcell__r   r   r   r   r      s    
r   c                       s<   e Zd ZdZeZ fddZdd Zdd Zdd	 Z	  Z
S )
WebSocketRequestHandlerMixIna  WebSocket request handler mix-in class

    This class modifies and existing request handler to handle
    WebSocket requests. The request handler will continue to function
    as before, except that WebSocket requests are intercepted and the
    methods handle_upgrade() and handle_websocket() are called. The
    standard do_GET() will be called for normal requests.

    The class instance SocketClass can be overridden with the class to
    use for the WebSocket connection.
    c                    s4   | j | _| j| _ zt   W | j| _ dS | j| _ w )zExtended request handler

        This is where WebSocketRequestHandler redirects requests to the
        new methods. Any sub-classes must call this method in order for
        the calls to function.
        N)do_GET_real_do_GET_websocket_do_GETr	   handle_one_requestr   r   r   r   r$   /   s
   z/WebSocketRequestHandlerMixIn.handle_one_requestc                 C   s@   | j | _| jdr| jd dkr|   d S |   d S )Nupgrade	websocket)r"   r!   headersgetlowerhandle_upgrader   r   r   r   r#   =   s
   z.WebSocketRequestHandlerMixIn._websocket_do_GETc                 C   sh   |  | }z
|| j| j W n ty'   t d }| dt| Y dS w || _d| _	| 
  dS )a1  Initial handler for a WebSocket request

        This method is called when a WebSocket is requested. By default
        it will create a WebSocket object and perform the negotiation.
        The WebSocket object will then replace the request object and
        handle_websocket() will be called.
           i  NT)SocketClassacceptrequestr'   	Exceptionsysexc_info
send_errorstrclose_connectionhandle_websocket)r   r&   excr   r   r   r*   G   s   
z+WebSocketRequestHandlerMixIn.handle_upgradec                 C   s   dS )zHandle a WebSocket connection.
        
        This is called when the WebSocket is ready to be used. A
        sub-class should perform the necessary communication here and
        return once done.
        Nr   r   r   r   r   r5   ^   s   z-WebSocketRequestHandlerMixIn.handle_websocket)r   r   r   r   r   r,   r$   r#   r*   r5   r   r   r   r   r   r        s    
r    c                   @      e Zd ZdS )WebSocketRequestHandlerNr   r   r   r   r   r   r   r8   i   s    r8   c                   @   r7   )WebSocketServerNr9   r   r   r   r   r:   m   s    r:   )r   r0   http.serverr   r   websockify.websocketr   r   r   r   r    r8   r:   r   r   r   r   <module>   s   I