o
    ¹iü  ã                   @   s   d dl Z d dlZd dlZddlT ddlT ddlT 	 ejejdfgZe	edƒr0e 
ejejdf¡ e	edƒr?e 
ejejdf¡ e	edƒrNe 
ejejdf¡ e	ed	ƒr]e 
ejejd
f¡ dag d¢ZG dd„ dƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )é    Né   )Ú*ÚSO_KEEPALIVEÚTCP_KEEPIDLEé   ÚTCP_KEEPINTVLé
   ÚTCP_KEEPCNTé   )ÚDEFAULT_SOCKET_OPTIONÚsock_optÚsetdefaulttimeoutÚgetdefaulttimeoutÚrecvÚ	recv_lineÚsendc                   @   s   e Zd Zdd„ ZdS )r   c                 C   s.   |d u rg }|d u ri }|| _ || _d | _d S ©N)ÚsockoptÚssloptÚtimeout)Úselfr   r   © r   úL/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/websocket/_socket.pyÚ__init__.   s   
zsock_opt.__init__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   ,   s    r   c                 C   s   | a dS )zž
    Set the global timeout setting to connect.

    Parameters
    ----------
    timeout: int or float
        default socket timeout time (in seconds)
    N©Ú_default_timeout)r   r   r   r   r   8   s   
r   c                   C   s   t S )zŸ
    Get default timeout

    Returns
    ----------
    _default_timeout: int or float
        Return the global timeout setting (in seconds) to connect.
    r   r   r   r   r   r   E   s   	r   c              
      sÆ   ˆst dƒ‚‡ ‡fdd„}zˆ ¡ dkrˆ ˆ ¡}n|ƒ }W n< ty)   tdƒ‚ tjy= } zt|ƒ}t|ƒ‚d }~w tyZ } zt|ƒ}t	|t
ƒrUd|v rUt|ƒ‚‚ d }~ww |sat dƒ‚|S )Núsocket is already closed.c               
      s    zˆ  ˆ ¡W S  ty   Y n" tjy0 }  zt| ƒ}|tjkr&|tjkr&‚ W Y d } ~ nd } ~ ww t 	¡ }| 
ˆtj¡ | ˆ ¡ ¡}| ¡  |rNˆ  ˆ ¡S d S r   )r   ÚSSLWantReadErrorÚsocketÚerrorÚextract_error_codeÚerrnoÚEAGAINÚEWOULDBLOCKÚ	selectorsÚDefaultSelectorÚregisterÚ
EVENT_READÚselectÚ
gettimeoutÚclose)ÚexcÚ
error_codeÚselÚr©ÚbufsizeÚsockr   r   Ú_recvU   s"   €ý
ÿzrecv.<locals>._recvr   zConnection timed outú	timed outz#Connection to remote host was lost.)Ú"WebSocketConnectionClosedExceptionr,   r   ÚTimeoutErrorÚWebSocketTimeoutExceptionr!   r   Úextract_err_messageÚSSLErrorÚ
isinstanceÚstr)r4   r3   r5   Úbytes_ÚeÚmessager   r2   r   r   Q   s4   €€€ûÿr   c                 C   s0   g }	 t | dƒ}| |¡ |dkrnqd |¡S )NTr   ó   
ó    )r   ÚappendÚjoin)r4   ÚlineÚcr   r   r   r   €   s   

ü
r   c              
      s´   t ˆ tƒr
ˆ  d¡‰ ˆstdƒ‚‡ ‡fdd„}zˆ ¡ dkr$ˆ ˆ ¡W S |ƒ W S  tjy< } zt|ƒ}t	|ƒ‚d }~w t
yY } zt|ƒ}t |tƒrTd|v rTt	|ƒ‚‚ d }~ww )Nzutf-8r   c               
      sª   zˆ  ˆ ¡W S  ty   Y n' tjy5 }  zt| ƒ}|d u r ‚ |tjkr+|tjkr+‚ W Y d } ~ nd } ~ ww t 	¡ }| 
ˆtj¡ | ˆ ¡ ¡}| ¡  |rSˆ  ˆ ¡S d S r   )r   ÚSSLWantWriteErrorr!   r"   r#   r$   r%   r&   r'   r(   r)   ÚEVENT_WRITEr+   r,   r-   )r.   r/   r0   Úw©Údatar4   r   r   Ú_send‘   s&   €û
ÿzsend.<locals>._sendr   r6   )r<   r=   Úencoder7   r,   r   r!   r   r:   r9   Ú	Exception)r4   rK   rL   r?   r@   r   rJ   r   r   Š   s(   

€€ûr   )r$   r'   r!   Ú_exceptionsÚ_ssl_compatÚ_utilsÚSOL_TCPÚTCP_NODELAYr   ÚhasattrrC   Ú
SOL_SOCKETr   r   r   r	   r   Ú__all__r   r   r   r   r   r   r   r   r   r   Ú<module>   s0    



/
