<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
2aR                 @   s  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Z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Zd dlZdd Zdd Zd*ddZG dd	 d	ejZd+ZdZG dd de	jZi Zejd Zejd ZG dd deZG dd deZdd ZG dd deZ G dd de	j!eZ"G dd deZ#G dd deZ$dd Z%dd  Z&G d!d" d"eZ'd#d$ Z(e)d%krd d&l*m+Z+ e+d'd(d) dS ),    Nc             C   s   t j| }|S )N)marshalloads)msco r   (/opt/alt/python36/lib64/python3.6/rpc.pyunpickle_code-   s    
r   c             C   s   t j| }t|ffS )N)r   dumpsr   )r   r   r   r   r   pickle_code3   s    
r
   c             C   s$   t j }t||}|j|  |j S )N)ioBytesIOCodePicklerdumpgetvalue)objZprotocolfpr   r   r   r	   9   s    

r	   c               @   s"   e Zd ZejeiZejej dS )r   N)	__name__
__module____qualname__typesCodeTyper
   dispatch_tableupdatecopyregr   r   r   r   r   B   s   
r      i   z	127.0.0.1c               @   s6   e Zd ZdddZdd Zdd Zdd	 Zd
d ZdS )	RPCServerNc             C   s    |d krt }tjj| || d S )N)
RPCHandlersocketserver	TCPServer__init__)selfaddrZhandlerclassr   r   r   r    L   s    zRPCServer.__init__c             C   s   d S )Nr   )r!   r   r   r   server_bindQ   s    zRPCServer.server_bindc             C   s   | j j| j d S )N)socketZconnectserver_address)r!   r   r   r   server_activateU   s    zRPCServer.server_activatec             C   s   | j | jfS )N)r$   r%   )r!   r   r   r   get_request^   s    zRPCServer.get_requestc             C   s   y W n t k
r    Y n   tj}tddd  |d td|d tdtj j |d td||d tdt||d tj	|d td	|d tdd |d t
jd
 Y nX d S )N
-(   )filezUnhandled server exception!z
Thread: %szClient Address: z	Request: z#
*** Unrecoverable, server exiting!r   )
SystemExitsys
__stderr__print	threadingcurrent_threadnamerepr	traceback	print_excos_exit)r!   requestZclient_addressZerfr   r   r   handle_errorb   s    zRPCServer.handle_error)N)r   r   r   r    r#   r&   r'   r9   r   r   r   r   r   J   s
   
	r   c               @   s   e Zd ZdZd;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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+Zd,ZdZd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Z d9d: Z!dS )<SocketIOr   Nc             C   s@   t j | _|d k	r|| _|| _|d kr*t}|| _i | _i | _d S )N)	r0   r1   
sockthread	debuggingsockobjecttableobjtable	responsescvars)r!   r=   r?   r<   r   r   r   r       s    
zSocketIO.__init__c             C   s    | j }d | _ |d k	r|j  d S )N)r=   close)r!   r=   r   r   r   rB      s    zSocketIO.closec             C   s   t jd d S )Nr   )r6   r7   )r!   r   r   r   exithook   s    zSocketIO.exithookc             G   sR   | j s
d S | jd ttj j }x|D ]}|d t| }q(W t|tjd d S )N )r+   )	r<   locationstrr0   r1   r2   r/   r-   r.   )r!   argssar   r   r   debug   s    
zSocketIO.debugc             C   s   || j |< d S )N)r?   )r!   oidobjectr   r   r   register   s    zSocketIO.registerc             C   s&   y| j |= W n tk
r    Y nX d S )N)r?   KeyError)r!   rK   r   r   r   
unregister   s    zSocketIO.unregisterc             C   s  | j d| y|\}\}}}}W n tk
r4   dS X || jkrNdd|f fS | j| }|dkrvi }	t||	 d|	fS |dkri }
t||
 d|
fS t||sdd|f fS t||}y^|d	kr|||}t|trt	|}d|fS |d
krt
j||||ff dS dd| fS W n tk
r,    Y n tk
rB    Y nn tk
rX    Y nX tk
r| } zd|fS d }~X n4   d}t||||f tjd tjtjd dS d S )Nz
localcall:ERRORBad request formatzUnknown object id: %r__methods__OK__attributes__zUnsupported method name: %rCALLQUEUEQUEUEDzUnsupported message type: %sCALLEXCzU*** Internal Error: rpc.py:SocketIO.localcall()

 Object: %s 
 Method: %s 
 Args: %s
)r+   	EXCEPTION)rP   rQ   )rW   N)rY   N)rJ   	TypeErrorr?   _getmethods_getattributeshasattrgetattr
isinstanceRemoteObject	remoterefrequest_queueZputr,   KeyboardInterruptOSError	Exceptionr/   r-   r.   r4   r5   )r!   seqr8   howrK   
methodnamerG   kwargsr   methods
attributesmethodretZexmsgr   r   r   	localcall   sT    








zSocketIO.localcallc             C   s(   | j d|| | j||||}| j|S )Nzremotecall:asynccall: )rJ   	asynccallasyncreturn)r!   rK   rh   rG   ri   rf   r   r   r   
remotecall   s    zSocketIO.remotecallc             C   s(   | j d|| | j||||}| j|S )Nzremotequeue:asyncqueue: )rJ   
asyncqueuerq   )r!   rK   rh   rG   ri   rf   r   r   r   remotequeue   s    zSocketIO.remotequeuec             C   s`   d||||ff}| j  }tj | jkr8tj }|| j|< | jd| |||| | j||f |S )NrU   zasynccall:%d:)newseqr0   r1   r;   	ConditionrA   rJ   
putmessage)r!   rK   rh   rG   ri   r8   rf   cvarr   r   r   rp      s    
zSocketIO.asynccallc             C   s`   d||||ff}| j  }tj | jkr8tj }|| j|< | jd| |||| | j||f |S )NrV   zasyncqueue:%d:)ru   r0   r1   r;   rv   rA   rJ   rw   )r!   rK   rh   rG   ri   r8   rf   rx   r   r   r   rs      s    
zSocketIO.asyncqueuec             C   s6   | j d|  | j|dd}| j d| | | j|S )Nz#asyncreturn:%d:call getresponse(): g?)waitzasyncreturn:%d:response: )rJ   getresponsedecoderesponse)r!   rf   responser   r   r   rq      s    zSocketIO.asyncreturnc             C   s   |\}}|dkr|S |dkr d S |dkr6| j d d S |dkrT| j d | j  d S |dkrp| j d| t||d	kr| j d
| |t||d S )NrS   rW   rY   zdecoderesponse: EXCEPTIONEOFzdecoderesponse: EOFrP   zdecoderesponse: Internal ERROR:rX   zdecoderesponse: Call Exception:)rJ   decode_interrupthookRuntimeErrorSystemError)r!   r|   rg   whatr   r   r   r{      s&    

zSocketIO.decoderesponsec             C   s   t d S )N)EOFError)r!   r   r   r   r~     s    zSocketIO.decode_interrupthookc             C   s6   y| j d dd W n tk
r0   | jd d S X d S )Ng?)myseqry   zmainloop:return)rz   r   rJ   )r!   r   r   r   mainloop  s
    
zSocketIO.mainloopc             C   s6   | j ||}|d k	r2|\}}|dkr2|| j|f}|S )NrS   )_getresponse_proxify)r!   r   ry   r|   rg   r   r   r   r   rz   #  s    zSocketIO.getresponsec             C   s4   t |trt| |jS t |tr0tt| j|S |S )N)r_   RemoteProxyRPCProxyrK   listmapr   )r!   r   r   r   r   r   +  s
    

zSocketIO._proxifyc             C   s   | j d| tj | jkr:x| j||}|d k	r|S qW nb| j| }|j  x|| jkrb|j  qNW | j| }| j d||f  | j|= | j|= |j	  |S d S )Nz_getresponse:myseq:z-_getresponse:%s: thread woke up: response: %s)
rJ   r0   r1   r;   pollresponserA   acquirer@   ry   release)r!   r   ry   r|   rx   r   r   r   r   3  s"    


zSocketIO._getresponsec             C   s   | j d  | _ }|S )N   )nextseq)r!   rf   r   r   r   ru   I  s    zSocketIO.newseqc             C   s   | j d|d   yt|}W n, tjk
rJ   tdt|tjd  Y nX tj	dt
|| }xnt
|dkry0tjg | jgg \}}}| jj|d t }W n  ttfk
r   tdY nX ||d  }qbW d S )Nzputmessage:%d:r   zCannot pickle:)r+   z<izsocket no longer exists)rJ   r	   pickleZPicklingErrorr/   r3   r-   r.   structpacklenselectr=   sendBUFSIZEAttributeErrorrZ   rd   )r!   messagerH   rwxnr   r   r   rw   M  s    zSocketIO.putmessage       c             C   s   | j   t| j| jk rtj| jj gg g |\}}}t|dkrFd S y| jjt}W n t	k
rn   t
Y nX t|dkrt
|  j|7  _| j   | j S )Nr   )_stage0r   buffbufneedr   r=   filenoZrecvr   rd   r   _stage1)r!   ry   r   r   r   rH   r   r   r   
pollpacketa  s    
zSocketIO.pollpacketc             C   sR   | j dkrNt| jdkrN| jd d }| jdd  | _tjd|d | _d| _ d S )Nr   r   z<i   )bufstater   r   r   unpackr   )r!   rH   r   r   r   r   q  s
    zSocketIO._stage0c             C   sP   | j dkrLt| j| jkrL| jd | j }| j| jd  | _d| _d| _ |S d S )Nr   r   r   )r   r   r   r   )r!   packetr   r   r   r   x  s    zSocketIO._stage1c             C   s   | j |}|d krd S ytj|}W nV tjk
rz   tdtjd tdt|tjd tj	tjd tdtjd  Y nX |S )Nz-----------------------)r+   zcannot unpickle packet:)
r   r   r   ZUnpicklingErrorr/   r-   r.   r3   r4   print_stack)r!   ry   r   r   r   r   r   pollmessage  s    
zSocketIO.pollmessagec       
      C   s`  xXyt jd}W n tjk
r(   Y n X |\}}|d|ff}| j| y| j|}|d kr`d S W n. tk
r~   | j  d S  tk
r   d S X |\}}|d }| j	d||f  |dkr| j	d|  | j
||}| j	d||f  |dkr| j||f q|dkrqq||kr|S | jj|d }	|	d k	r|	j  || j|< |	j  |	j  qqW d S )	Nr   rS   zpollresponse:%d:myseq:%srU   rV   zpollresponse:%d:localcall:call:z%pollresponse:%d:localcall:response:%s)rU   rV   )response_queuegetqueueZEmptyrw   r   r   
handle_EOFr   rJ   ro   rA   r   r@   notifyr   )
r!   r   ry   Zqmsgrf   r|   r   Zresqrg   cvr   r   r   r     sL    





zSocketIO.pollresponsec             C   sZ   | j   | jd x:| jD ]0}| j| }|j  d| j|< |j  |j  qW | j  d S )Nr   r}   )r}   N)EOFhookrJ   rA   r   r@   r   r   rC   )r!   keyr   r   r   r   r     s    


zSocketIO.handle_EOFc             C   s   d S )Nr   )r!   r   r   r   r     s    zSocketIO.EOFhook)NN)"r   r   r   r   r    rB   rC   rJ   rM   rO   ro   rr   rt   rp   rs   rq   r{   r~   r   rz   r   r   ru   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r:      s>   
.

Ir:   c               @   s   e Zd ZdS )r`   N)r   r   r   r   r   r   r   r`     s   r`   c             C   s   t | }| t|< t|S )N)idr>   r   )r   rK   r   r   r   ra     s    ra   c               @   s   e Zd Zdd ZdS )r   c             C   s
   || _ d S )N)rK   )r!   rK   r   r   r   r      s    zRemoteProxy.__init__N)r   r   r   r    r   r   r   r   r     s   r   c               @   s,   e Zd ZdZdZdd Zdd Zdd Zd	S )
r   Fz#Sc             C   s(   | |_ tj| | tjj| ||| d S )N)Zcurrent_handlerr:   r    r   BaseRequestHandler)r!   r=   r"   Zsvrr   r   r   r       s    zRPCHandler.__init__c             C   s   | j   d S )N)r   )r!   r   r   r   handle  s    zRPCHandler.handlec             C   s
   t | |S )N)r   )r!   rK   r   r   r   get_remote_proxy	  s    zRPCHandler.get_remote_proxyN)r   r   r   r<   rE   r    r   r   r   r   r   r   r     s
   r   c               @   s:   e Zd ZdZdZdZejejfddZ	dd Z
dd	 Zd
S )	RPCClientFz#Cr   c             C   s*   t j ||| _| jj| | jjd d S )Nr   )r$   listening_sockZbindZlisten)r!   addressZfamilytyper   r   r   r      s    zRPCClient.__init__c             C   sV   | j j \}}| jr$td|tjd |d tkr>tj| | ntd|tjd t	d S )Nz****** Connection request from )r+   r   z** Invalid host: )
r   acceptr<   r/   r-   r.   	LOCALHOSTr:   r    rd   )r!   Zworking_sockr   r   r   r   r     s    zRPCClient.acceptc             C   s
   t | |S )N)r   )r!   rK   r   r   r   r   #  s    zRPCClient.get_remote_proxyN)r   r   r   r<   rE   r   r$   ZAF_INETZSOCK_STREAMr    r   r   r   r   r   r   r     s   
r   c               @   s4   e Zd ZdZdZdd Zdd Zdd Zdd	 ZdS )
r   Nc             C   s   || _ || _d S )N)sockiorK   )r!   r   rK   r   r   r   r    ,  s    zRPCProxy.__init__c             C   sp   | j d kr| j  | j j|r.t| j| j|S | jd kr@| j  || jkrd| jj| jd|fi }|S t	|d S )N__getattribute__)
_RPCProxy__methods_RPCProxy__getmethodsr   MethodProxyr   rK   _RPCProxy__attributes_RPCProxy__getattributesrr   r   )r!   r2   valuer   r   r   __getattr__0  s    



zRPCProxy.__getattr__c             C   s   | j j| jdf i | _d S )NrT   )r   rr   rK   r   )r!   r   r   r   Z__getattributes>  s    
zRPCProxy.__getattributesc             C   s   | j j| jdf i | _d S )NrR   )r   rr   rK   r   )r!   r   r   r   Z__getmethodsB  s    
zRPCProxy.__getmethods)	r   r   r   r   r   r    r   r   r   r   r   r   r   r   '  s   r   c             C   sT   x*t | D ]}t| |}t|r
d||< q
W t| trPx| jD ]}t|| q>W d S )Nr   )dirr^   callabler_   r   	__bases__r[   )r   rj   r2   attrsuperr   r   r   r[   F  s    

r[   c             C   s0   x*t | D ]}t| |}t|s
d||< q
W d S )Nr   )r   r^   r   )r   rk   r2   r   r   r   r   r\   Q  s    
r\   c               @   s   e Zd Zdd Zdd ZdS )r   c             C   s   || _ || _|| _d S )N)r   rK   r2   )r!   r   rK   r2   r   r   r   r    Z  s    zMethodProxy.__init__c             O   s   | j j| j| j||}|S )N)r   rr   rK   r2   )r!   rG   ri   r   r   r   r   __call___  s    zMethodProxy.__call__N)r   r   r   r    r   r   r   r   r   r   X  s   r   c             C   s~   | d krd S d t _t| }ytjj| W n< tk
rf   d}|j|d}|j|d}tjj| Y nX tjjd | t _d S )Nasciibackslashreplacestrictr(   )	builtins_r3   r-   stdoutwriteUnicodeEncodeErrorencodedecode)r   textencodingbytesr   r   r   displayhookg  s    r   __main__)mainzidlelib.idle_test.test_rpcr   )	verbosity)Ni    ),r   r   r   r   r6   r   r   r   r$   r   r   r-   r0   r4   r   r   r
   r	   ZPicklerr   r   r   r   r   r>   ZQueuerb   r   rL   r:   r`   ra   r   r   r   r   r   r[   r\   r   r   r   Zunittestr   r   r   r   r   <module>   sP   
	2

  k
