o
    IAf,O                     @   sv  	 d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZ ejdedd ee
eeeeehZze W n eyX   i ZY nw dd ZG dd	 d	eZeeefZd
d Z dd Z!dd Z"dd Z#d(ddZ$d(ddZ%e%Z&d)ddZ'G dd dZ(G dd de(Z)dd  Z*d*d!d"Z+ej,d#krG d$d% d%Z-G d&d' d'e(Z.dS dS )+    N)EALREADYEINPROGRESSEWOULDBLOCK
ECONNRESETEINVALENOTCONN	ESHUTDOWNEISCONNEBADFECONNABORTEDEPIPEEAGAIN	errorcodezlThe asyncore module is deprecated and will be removed in Python 3.12. The recommended replacement is asyncio   )
stacklevelc              
   C   sB   zt | W S  tttfy    | tv rt|   Y S d|   Y S w )NzUnknown error %s)osstrerror
ValueErrorOverflowError	NameErrorr   )err r   /usr/lib/python3.10/asyncore.py	_strerrorK   s   r   c                   @   s   e Zd ZdS )ExitNowN)__name__
__module____qualname__r   r   r   r   r   S   s    r   c                 C   2   z|    W d S  ty       |   Y d S N)handle_read_event_reraised_exceptionshandle_errorobjr   r   r   readX      r%   c                 C   r   r   )handle_write_eventr!   r"   r#   r   r   r   write`   r&   r(   c                 C   r   r   )handle_expt_eventr!   r"   r#   r   r   r   
_exceptionh   r&   r*   c              
   C   s   z0|t j@ r
|   |t j@ r|   |t j@ r|   |t jt jB t j	B @ r.| 
  W d S W d S  tyX } z|jtvrB|   n| 
  W Y d }~d S W Y d }~d S d }~w ty_       |   Y d S r   )selectPOLLINr    POLLOUTr'   POLLPRIr)   POLLHUPPOLLERRPOLLNVALhandle_closeOSErrorerrno_DISCONNECTEDr"   r!   )r$   flagser   r   r   	readwritep   s(   




r8           c           	      C   s6  |d u rt }|rg }g }g }t| D ]&\}}| }| }|r'|| |r1|js1|| |s5|r:|| qg |  krJ|  krJ|krSn nt|  d S t		|||| \}}}|D ]}|
|}|d u rlq`t| q`|D ]}|
|}|d u rqst| qs|D ]}|
|}|d u rqt| qd S d S r   )
socket_maplistitemsreadablewritableappend	acceptingtimesleepr+   getr%   r(   r*   )	timeoutmaprwr7   fdr$   Zis_rZis_wr   r   r   poll   sF   



"






rI   c                 C   s   |d u rt }| d urt| d } t }|r^t| D ]&\}}d}| r.|tjtjB O }|	 r:|j
s:|tjO }|rB||| q|| }|D ]\}}||}|d u rXqJt|| qJd S d S )Ni  r   )r:   intr+   rI   r;   r<   r=   r,   r.   r>   r@   r-   registerrC   r8   )rD   rE   ZpollsterrH   r$   r6   rF   r   r   r   poll2   s.   


rL         >@Fc                 C   s   |d u rt }|rttdrt}nt}|d u r#|r!|| | |sd S d S |r:|dkr>|| | |d }|r<|dks)d S d S d S d S )NrI   r      )r:   hasattrr+   rL   rI   )rD   Zuse_pollrE   countZpoll_funr   r   r   loop   s   

rQ   c                   @   s2  e Zd ZdZdZdZdZdZdZe	dhZ
dAddZdd ZdBdd	ZdBd
dZejejfddZdBddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% ZdCd'd(Zd)d* Z d+d, Z!d-d. Z"d/d0 Z#d1d2 Z$d3d4 Z%d5d6 Z&d7d8 Z'd9d: Z(d;d< Z)d=d> Z*d?d@ Z+dS )D
dispatcherFNwarningc              
   C   s   |d u rt | _n|| _d | _|rK|d | || d| _z| | _W d S  tyJ } z|j	t
tfv r9d| _n| |  W Y d }~d S d }~ww d | _d S )NFT)r:   _map_filenosetblocking
set_socket	connectedgetpeernameaddrr3   r4   r   r   del_channelsocket)selfsockrE   r   r   r   r   __init__   s&   


zdispatcher.__init__c                 C   s   | j jd | j j g}| jr| jr|d n| jr|d | jd ur@z
|d| j  W n ty?   |t| j Y nw dd	|t
| f S )N.Z	listeningrX   z%s:%dz<%s at %#x> )	__class__r   r   r@   rZ   r?   rX   	TypeErrorreprjoinid)r]   statusr   r   r   __repr__  s   

zdispatcher.__repr__c                 C   s   |d u r| j }| || j< d S r   )rT   rU   )r]   rE   r   r   r   add_channel  s   zdispatcher.add_channelc                 C   s,   | j }|d u r
| j}||v r||= d | _ d S r   )rU   rT   )r]   rE   rH   r   r   r   r[     s   
zdispatcher.del_channelc                 C   s.   ||f| _ t||}|d | | d S NF)Zfamily_and_typer\   rV   rW   )r]   familytyper^   r   r   r   create_socket  s   

zdispatcher.create_socketc                 C   s   || _ | | _| | d S r   )r\   filenorU   ri   r]   r^   rE   r   r   r   rW   %  s   
zdispatcher.set_socketc                 C   sB   z| j t jt j| j t jt jdB  W d S  ty    Y d S w )NrN   )r\   
setsockopt
SOL_SOCKETSO_REUSEADDR
getsockoptr3   r]   r   r   r   set_reuse_addr*  s   

zdispatcher.set_reuse_addrc                 C      dS NTr   rt   r   r   r   r=   ;     zdispatcher.readablec                 C   rv   rw   r   rt   r   r   r   r>   >  rx   zdispatcher.writablec                 C   s(   d| _ tjdkr|dkrd}| j|S )NTnt   )r@   r   namer\   listen)r]   numr   r   r   r|   E  s   zdispatcher.listenc                 C   s   || _ | j|S r   )rZ   r\   bind)r]   rZ   r   r   r   r~   K  s   zdispatcher.bindc                 C   sn   d| _ d| _| j|}|tttfv s|tkr!tj	dkr!|| _
d S |dtfv r0|| _
|   d S t|t| )NFTry   r   )rX   
connectingr\   
connect_exr   r   r   r   r   r{   rZ   r	   handle_connect_eventr3   r   )r]   addressr   r   r   r   connectO  s   zdispatcher.connectc              
   C   sd   z| j  \}}W ||fS  ty   Y d S  ty1 } z|jtttfv r,W Y d }~d S  d }~ww r   )r\   acceptrc   r3   r4   r   r   r   )r]   connrZ   whyr   r   r   r   ]  s   	zdispatcher.acceptc              
   C   sf   z	| j |}|W S  ty2 } z|jtkrW Y d }~dS |jtv r-|   W Y d }~dS  d }~ww Nr   )r\   sendr3   r4   r   r5   r2   )r]   dataresultr   r   r   r   r   k  s   

zdispatcher.sendc              
   C   s`   z| j |}|s|   W dS |W S  ty/ } z|jtv r*|   W Y d }~dS  d }~ww N    )r\   recvr2   r3   r4   r5   )r]   Zbuffer_sizer   r   r   r   r   r   x  s   
zdispatcher.recvc              
   C   sp   d| _ d| _d| _|   | jd ur6z| j  W d S  ty5 } z|jtt	fvr* W Y d }~d S d }~ww d S rj   )
rX   r@   r   r[   r\   closer3   r4   r   r
   )r]   r   r   r   r   r     s   
zdispatcher.closec                 C   s   t jdt|  d S )Nzlog: %s
)sysstderrr(   str)r]   messager   r   r   log  s   zdispatcher.loginfoc                 C   s"   || j vrtd||f  d S d S )Nz%s: %s)ignore_log_typesprint)r]   r   rl   r   r   r   log_info  s   
zdispatcher.log_infoc                 C   s>   | j r	|   d S | js| jr|   |   d S |   d S r   )r@   handle_acceptrX   r   r   handle_readrt   r   r   r   r      s   zdispatcher.handle_read_eventc                 C   s@   | j t jt j}|dkrt|t||   d| _d| _d S )Nr   TF)	r\   rs   rq   SO_ERRORr3   r   handle_connectrX   r   r]   r   r   r   r   r     s   
zdispatcher.handle_connect_eventc                 C   s*   | j rd S | js| jr|   |   d S r   )r@   rX   r   r   handle_writert   r   r   r   r'     s   zdispatcher.handle_write_eventc                 C   s2   | j t jt j}|dkr|   d S |   d S r   )r\   rs   rq   r   r2   handle_exptr   r   r   r   r)     s   zdispatcher.handle_expt_eventc                 C   sT   t  \}}}}zt| }W n
   dt|  }Y | d||||f d |   d S )Nz)<__repr__(self) failed for object at %0x>z:uncaptured python exception, closing channel %s (%s:%s %s)error)compact_tracebackrd   rf   r   r2   )r]   niltvtbinfoZ	self_reprr   r   r   r"     s   	zdispatcher.handle_errorc                 C      |  dd d S )Nz!unhandled incoming priority eventrS   r   rt   r   r   r   r        zdispatcher.handle_exptc                 C   r   )Nzunhandled read eventrS   r   rt   r   r   r   r     r   zdispatcher.handle_readc                 C   r   )Nzunhandled write eventrS   r   rt   r   r   r   r     r   zdispatcher.handle_writec                 C   r   )Nzunhandled connect eventrS   r   rt   r   r   r   r     r   zdispatcher.handle_connectc                 C   s"   |   }|d ur| j|  d S d S r   )r   handle_accepted)r]   Zpairr   r   r   r     s   zdispatcher.handle_acceptc                 C   s   |   | dd d S )Nzunhandled accepted eventrS   )r   r   )r]   r^   rZ   r   r   r   r     s   zdispatcher.handle_acceptedc                 C   s   |  dd |   d S )Nzunhandled close eventrS   )r   r   rt   r   r   r   r2     s   zdispatcher.handle_closeNNr   )r   ),r   r   r   debugrX   r@   r   closingrZ   	frozensetr   r_   rh   ri   r[   r\   AF_INETSOCK_STREAMrm   rW   ru   r=   r>   r|   r~   r   r   r   r   r   r   r   r    r   r'   r)   r"   r   r   r   r   r   r   r2   r   r   r   r   rR      sL    

 

	

rR   c                   @   s6   e Zd ZdddZdd Zdd Zdd	 Zd
d ZdS )dispatcher_with_sendNc                 C   s   t | || d| _d S r   )rR   r_   
out_bufferro   r   r   r   r_     s   
zdispatcher_with_send.__init__c                 C   s.   d}t | | jd d }| j|d  | _d S )Nr   i   )rR   r   r   )r]   Znum_sentr   r   r   initiate_send  s   z"dispatcher_with_send.initiate_sendc                 C   s   |    d S r   )r   rt   r   r   r   r     s   z!dispatcher_with_send.handle_writec                 C   s   | j  pt| jS r   )rX   lenr   rt   r   r   r   r>     s   zdispatcher_with_send.writablec                 C   s0   | j r| dt|  | j| | _|   d S )Nz
sending %s)r   r   rd   r   r   )r]   r   r   r   r   r     s   zdispatcher_with_send.sendr   )r   r   r   r_   r   r   r>   r   r   r   r   r   r     s    
r   c                  C   s   t  \} }}g }|std|r'||jjj|jjjt|j	f |j
}|s~|d \}}}ddd |D }|||f| ||fS )Nztraceback does not existra   c                 S   s   g | ]}d | qS )z
[%s|%s|%s]r   ).0xr   r   r   
<listcomp>-  s    z%compact_traceback.<locals>.<listcomp>)r   exc_infoAssertionErrorr?   tb_framef_codeco_filenameco_namer   	tb_linenotb_nextre   )r   r   tbr   filefunctionliner   r   r   r   r     s    	r   c                 C   s   | d u rt } t|  D ]1}z|  W q ty/ } z|jtkr"n|s% W Y d }~qd }~w ty6       |s< Y q|   d S r   )	r:   r;   valuesr   r3   r4   r
   r!   clear)rE   Z
ignore_allr   r   r   r   	close_all0  s$   
r   posixc                   @   sN   e Zd Zdd Zdd Zdd Zdd Zdd
dZeZeZ	dd Z
dd Zd	S )file_wrapperc                 C   s   t || _d S r   )r   duprH   r]   rH   r   r   r   r_   U  r   zfile_wrapper.__init__c                 C   s*   | j dkrtjd|  t| d |   d S )Nr   zunclosed file %r)source)rH   warningswarnResourceWarningr   rt   r   r   r   __del__X  s
   
zfile_wrapper.__del__c                 G      t j| jg|R  S r   )r   r%   rH   r]   argsr   r   r   r   ^     zfile_wrapper.recvc                 G   r   r   )r   r(   rH   r   r   r   r   r   a  r   zfile_wrapper.sendNc                 C   s$   |t jkr|t jkr|sdS td)Nr   z-Only asyncore specific behaviour implemented.)r\   rq   r   NotImplementedError)r]   levelZoptnamebuflenr   r   r   rs   d  s   

zfile_wrapper.getsockoptc                 C   s(   | j dk rd S | j }d| _ t| d S )Nr   r   )rH   r   r   r   r   r   r   r   o  s
   
zfile_wrapper.closec                 C   s   | j S r   )rH   rt   r   r   r   rn   v  s   zfile_wrapper.filenor   )r   r   r   r_   r   r   r   rs   r%   r(   r   rn   r   r   r   r   r   P  s    
r   c                   @   s   e Zd ZdddZdd ZdS )file_dispatcherNc                 C   sN   t | d | d| _z| }W n	 ty   Y nw | | t|d d S )NTF)rR   r_   rX   rn   AttributeErrorset_filer   set_blocking)r]   rH   rE   r   r   r   r_   {  s   
zfile_dispatcher.__init__c                 C   s"   t || _| j | _|   d S r   )r   r\   rn   rU   ri   r   r   r   r   r     s   
zfile_dispatcher.set_filer   )r   r   r   r_   r   r   r   r   r   r   y  s    
r   )r9   N)rM   FNNrj   )/r+   r\   r   rA   r   r   r4   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   DeprecationWarningr   r5   r:   r   r   	Exceptionr   KeyboardInterrupt
SystemExitr!   r%   r(   r*   r8   rI   rL   Zpoll3rQ   rR   r   r   r   r{   r   r   r   r   r   r   <module>   sT   <


'
  *

)