
     ke                        d dl Z d dlZd dlZd dlmZ ddl ddl ddl 	 ej                  ej                  dfgZ
 eed      r(e
j                  ej                  ej                  df        eed      r(e
j                  ej                  ej                  df        eed      r(e
j                  ej                  ej                   d	f        eed
      r(e
j                  ej                  ej"                  df       dag dZ G d d      Zdeeedf   ddfdZdeeedf   fdZdej                  dedefdZdej                  defdZdej                  deeef   defdZy)    N)Union   )*SO_KEEPALIVETCP_KEEPIDLE   TCP_KEEPINTVL
   TCP_KEEPCNT   )DEFAULT_SOCKET_OPTIONsock_optsetdefaulttimeoutgetdefaulttimeoutrecv	recv_linesendc                        e Zd ZdededdfdZy)r   sockoptssloptreturnNc                 >    |g }|i }|| _         || _        d | _        y N)r   r   timeout)selfr   r   s      3/usr/lib/python3/dist-packages/websocket/_socket.py__init__zsock_opt.__init__5   s+    ?G>F    )__name__
__module____qualname__listdictr    r   r   r   r   4   s     d t r   r   r   r   c                     | a y)z
    Set the global timeout setting to connect.

    Parameters
    ----------
    timeout: int or float
        default socket timeout time (in seconds)
    N_default_timeout)r   s    r   r   r   ?   s
     r   c                      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   L   s
     r   sockbufsizec                      st        d       fd}	  j                         dk(  r j                        }n |       }|st        d      |S # t        $ r t	        d      t
        j                  $ r}t        |      }t	        |      d }~wt        $ r0}t        |      }t        |t              rd|v rt	        |       d }~ww xY w)Nsocket is already closed.c                     	 j                        S # t        $ r Y nMt        j                  $ r8} t	        |       }|t
        j                  t
        j                  fvr Y d } ~ nd } ~ ww xY wt        j                         }|j                  t        j                         |j                  j                               }|j                          |rj                        S y r   )r   SSLWantReadErrorsocketerrorextract_error_codeerrnoEAGAINEWOULDBLOCK	selectorsDefaultSelectorregister
EVENT_READselect
gettimeoutclose)exc
error_codeselrr*   r)   s       r   _recvzrecv.<locals>._recv\   s    	99W%% 	|| 	+C0J%,,0A0A!BB C	
 '')T9//0JJt()		99W%% s    	A)A).A$$A)r   zConnection timed out	timed outz#Connection to remote host was lost.)"WebSocketConnectionClosedExceptionr:   r   TimeoutErrorWebSocketTimeoutExceptionr/   r   extract_err_messageSSLError
isinstancestr)r)   r*   r@   bytes_emessages   ``    r   r   r   X   s    01LMM&&??!YYw'FWF 01VWWM  @'(>??>> 1%a('00 %a(gs#w(>+G44s#   ,A &C
8BC
+CC
c                 r    g }	 t        | d      }|j                  |       |dk(  rn$dj                  |      S )Nr      
r   )r   appendjoin)r)   linecs      r   r   r      s?    D
qMA:	 
 88D>r   datac                     t        t              rj                  d       st        d       fd}	  j	                         dk(  r j                        S  |       S # t        j                  $ r}t        |      }t        |      d }~wt        $ r0}t        |      }t        |t              rd|v rt        |       d }~ww xY w)Nzutf-8r,   c                     	 j                        S # t        $ r Y nPt        j                  $ r;} t	        |       }| |t
        j                  t
        j                  fvr Y d } ~ nd } ~ ww xY wt        j                         }|j                  t        j                         |j                  j                               }|j                          |rj                        S y r   )r   SSLWantWriteErrorr/   r0   r1   r2   r3   r4   r5   r6   r7   EVENT_WRITEr9   r:   r;   )r<   r=   r>   wrR   r)   s       r   _sendzsend.<locals>._send   s    		99T?"  	|| 	+C0J!%,,0A0A!BB C		 '')T9001JJt()		99T?" s    	A,A,1A''A,r   rA   )rG   rH   encoderB   r:   r   r/   r   rE   rD   	Exception)r)   rR   rX   rJ   rK   s   ``   r   r   r      s    ${{7#01LMM#*??!99T?"7N>> 1%a('00 %a(gs#w(>+G44s)   #A# A# #C6BC+CC)r2   r5   r/   typingr   _exceptions_ssl_compat_utilsSOL_TCPTCP_NODELAYr   hasattrrN   
SOL_SOCKETr   r   r	   r   r'   __all__r   intfloatr   r   bytesr   r   rH   r   r$   r   r   <module>rg      s         & !..&*<*<a@A 
6>"  &"3"3V5H5H!!LM
6>"  &..&2E2Er!JK
6?#  &..&2F2F!KL
6=!  &..&2D2Da!HI  
uS%%56 
4 
	5eT!12 	+v}} +s +u +\FMM e )v}} )E%*$5 )# )r   