B YI~d�R�@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZdd�Zdd�Zd)dd�ZGdd �d ej�Zd Zd ZGd d �d e j�ZiZe�d�Ze�d�ZGdd�de�ZGdd�de�Zdd�ZGdd�de�Z Gdd�de j!e�Z"Gdd�de�Z#Gdd�de�Z$dd�Z%dd�Z&Gd d!�d!e�Z'd"d#�Z(e)d$k�r�dd%l*m+Z+e+d&d'd(�dS)*�NcCst�|�}|S)N)�marshal�loads)�ms�co�r�0/opt/alt/python37/lib64/python3.7/idlelib/rpc.py� unpickle_code-s rcCst�|�}t|ffS)N)r�dumpsr)rrrrr� pickle_code3s r cCs$t��}t||�}|�|�|��S)N)�io�BytesIO� CodePickler�dump�getvalue)�objZprotocol�f�prrrr 9s  r c@s"eZdZejeiZe�ej�dS)r N) �__name__� __module__� __qualname__�types�CodeTyper �dispatch_table�update�copyregrrrrr Bs r i z 127.0.0.1c@s6eZdZd dd�Zdd�Zdd�Zdd �Zd d �ZdS) � RPCServerNcCs |dkr t}tj�|||�dS)N)� RPCHandler� socketserver� TCPServer�__init__)�self�addrZ handlerclassrrrrLszRPCServer.__init__cCsdS)Nr)r rrr� server_bindQszRPCServer.server_bindcCs|j�|j�dS)N)�socketZconnect�server_address)r rrr�server_activateUszRPCServer.server_activatecCs |j|jfS)N)r#r$)r rrr� get_request^szRPCServer.get_requestcCs�y�Wn�tk r�Yn�tj}td|d�td|d�tdt��j|d�td||d�tdt|�|d�tj |d�td|d�td|d�t � d �YnXdS) Nz) ----------------------------------------)�filezUnhandled server exception!z Thread: %szClient Address: z Request: z# *** Unrecoverable, server exiting!z(----------------------------------------r) � SystemExit�sys� __stderr__�print� threading�current_thread�name�repr� traceback� print_exc�os�_exit)r �requestZclient_addressZerfrrr� handle_errorbs     zRPCServer.handle_error)N)rrrrr"r%r&r5rrrrrJs   rc@s�eZdZdZd;dd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dd�Z dd�Z dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+Zd,ZdZd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Z d9d:�Z!dS)<�SocketIOrNcCs@t��|_|dk r||_||_|dkr*t}||_i|_i|_dS)N) r,r-� sockthread� debugging�sock� objecttable�objtable� responses�cvars)r r9r;r8rrrr�s zSocketIO.__init__cCs |j}d|_|dk r|��dS)N)r9�close)r r9rrrr>�szSocketIO.closecCst�d�dS)Nr)r2r3)r rrr�exithook�szSocketIO.exithookcGsR|js dS|jdtt��j�}x|D]}|dt|�}q(Wt|tjd�dS)N� )r') r8�location�strr,r-r.r+r)r*)r �args�s�arrr�debug�s  zSocketIO.debugcCs||j|<dS)N)r;)r �oid�objectrrr�register�szSocketIO.registercCs&y |j|=Wntk r YnXdS)N)r;�KeyError)r rGrrr� unregister�s zSocketIO.unregisterc Cs�|�d|�y|\}\}}}}Wntk r4dSX||jkrNdd|ffS|j|}|dkrvi} t|| �d| fS|dkr�i} t|| �d| fSt||�s�dd|ffSt||�} y^|d kr�| ||�} t| t�r�t | �} d| fS|d k�rt � || ||ff�d Sdd |fSWn�t k �r,�Yn�t k �rB�Ynptk �rX�YnZtk �r~} zd | fSd} ~ XYn4d}t||| |ftjd�tjtjd�dSdS)Nz localcall:)�ERRORzBad request formatrLzUnknown object id: %r� __methods__�OK�__attributes__zUnsupported method name: %r�CALL�QUEUE)�QUEUEDNzUnsupported message type: %s�CALLEXCzU*** Internal Error: rpc.py:SocketIO.localcall() Object: %s Method: %s Args: %s )r')� EXCEPTIONN)rF� TypeErrorr;� _getmethods�_getattributes�hasattr�getattr� isinstance� RemoteObject� remoteref� request_queueZputr(�KeyboardInterrupt�OSError� Exceptionr+r)r*r0r1)r �seqr4�howrG� methodnamerC�kwargsr�methods� attributes�method�retZex�msgrrr� localcall�sT          zSocketIO.localcallcCs(|�d||�|�||||�}|�|�S)Nzremotecall:asynccall: )rF� asynccall� asyncreturn)r rGrcrCrdrarrr� remotecall�szSocketIO.remotecallcCs(|�d||�|�||||�}|�|�S)Nzremotequeue:asyncqueue: )rF� asyncqueuerl)r rGrcrCrdrarrr� remotequeue�szSocketIO.remotequeuecCs`d||||ff}|��}t��|jkr8t��}||j|<|�d|||||�|�||f�|S)NrPz asynccall:%d:)�newseqr,r-r7� Conditionr=rF� putmessage)r rGrcrCrdr4ra�cvarrrrrk�s zSocketIO.asynccallcCs`d||||ff}|��}t��|jkr8t��}||j|<|�d|||||�|�||f�|S)NrQzasyncqueue:%d:)rpr,r-r7rqr=rFrr)r rGrcrCrdr4rarsrrrrn�s zSocketIO.asyncqueuecCs6|�d|�|j|dd�}|�d||�|�|�S)Nz#asyncreturn:%d:call getresponse(): g�������?)�waitzasyncreturn:%d:response: )rF� getresponse�decoderesponse)r ra�responserrrrl�szSocketIO.asyncreturncCs�|\}}|dkr|S|dkr dS|dkr6|�d�dS|dkrT|�d�|��dS|dkrp|�d|�t|��|d kr�|�d |�|�t||��dS) NrNrRrTzdecoderesponse: EXCEPTION�EOFzdecoderesponse: EOFrLzdecoderesponse: Internal ERROR:rSzdecoderesponse: Call Exception:)rF�decode_interrupthook� RuntimeError� SystemError)r rwrb�whatrrrrv�s&    zSocketIO.decoderesponsecCst�dS)N)�EOFError)r rrrryszSocketIO.decode_interrupthookcCs6y|jddd�Wntk r0|�d�dSXdS)Ng�������?)�myseqrtzmainloop:return)rur}rF)r rrr�mainloops  zSocketIO.mainloopcCs6|�||�}|dk r2|\}}|dkr2||�|�f}|S)NrN)� _getresponse�_proxify)r r~rtrwrbr|rrrru#s  zSocketIO.getresponsecCs4t|t�rt||j�St|t�r0tt|j|��S|S)N)rZ� RemoteProxy�RPCProxyrG�list�mapr�)r rrrrr�+s    zSocketIO._proxifycCs�|�d|�t��|jkr:x�|�||�}|dk r|SqWnb|j|}|��x||jkrb|��qNW|j|}|�d||f�|j|=|j|=|� �|SdS)Nz_getresponse:myseq:z-_getresponse:%s: thread woke up: response: %s) rFr,r-r7� pollresponser=�acquirer<rt�release)r r~rtrwrsrrrr�3s"        zSocketIO._getresponsecCs|jd|_}|S)N�)�nextseq)r rarrrrpIszSocketIO.newseqc Cs�|�d|d�y t|�}Wn,tjk rJtdt|�tjd��YnXt� dt |��|}xnt |�dkr�y0t � g|j gg�\}}}|j � |dt��}Wn ttfk r�td��YnX||d�}qbWdS)Nzputmessage:%d:rzCannot pickle:)r'zr?rFrIrKrjrmrorkrnrlrvryrrur�r�rprrr�r�r�r�r�r�r�r�r�r�rrrrr6�s> .   I r6c@s eZdZdS)r[N)rrrrrrrr[�sr[cCst|�}|t|<t|�S)N)�idr:r�)rrGrrrr\�sr\c@seZdZdd�ZdS)r�cCs ||_dS)N)rG)r rGrrrr�szRemoteProxy.__init__N)rrrrrrrrr��sr�c@s,eZdZdZdZdd�Zdd�Zdd�Zd S) rFz#ScCs(||_t�||�tj�||||�dS)N)Zcurrent_handlerr6rr�BaseRequestHandler)r r9r!Zsvrrrrrs zRPCHandler.__init__cCs |��dS)N)r)r rrr�handleszRPCHandler.handlecCs t||�S)N)r�)r rGrrr�get_remote_proxy szRPCHandler.get_remote_proxyN)rrrr8rArr�r�rrrrr�s rc@s:eZdZdZdZdZejejfdd�Z dd�Z dd �Z d S) � RPCClientFz#Cr�cCs*t�||�|_|j�|�|j�d�dS)Nr�)r#�listening_sockZbindZlisten)r �addressZfamily�typerrrrs zRPCClient.__init__cCsV|j��\}}|jr$td|tjd�|dtkr>t�||�ntd|tjd�t �dS)Nz****** Connection request from )r'rz** Invalid host: ) r��acceptr8r+r)r*� LOCALHOSTr6rr_)r Z working_sockr�rrrr�s zRPCClient.acceptcCs t||�S)N)r�)r rGrrrr�#szRPCClient.get_remote_proxyN) rrrr8rAr�r#ZAF_INETZ SOCK_STREAMrr�r�rrrrr� s  r�c@s4eZdZdZdZdd�Zdd�Zdd�Zdd �ZdS) r�NcCs||_||_dS)N)�sockiorG)r r�rGrrrr,szRPCProxy.__init__cCsp|jdkr|��|j�|�r.t|j|j|�S|jdkr@|��||jkrd|j�|jd|fi�}|St |��dS)N�__getattribute__) �_RPCProxy__methods�_RPCProxy__getmethodsr�� MethodProxyr�rG�_RPCProxy__attributes�_RPCProxy__getattributesrmr�)r r.�valuerrr� __getattr__0s      zRPCProxy.__getattr__cCs|j�|jddi�|_dS)NrOr)r�rmrGr�)r rrrZ__getattributes>s zRPCProxy.__getattributescCs|j�|jddi�|_dS)NrMr)r�rmrGr�)r rrrZ __getmethodsBs zRPCProxy.__getmethods) rrrr�r�rr�r�r�rrrrr�'s r�cCsTx*t|�D]}t||�}t|�r d||<q Wt|t�rPx|jD]}t||�q>WdS)Nr�)�dirrY�callablerZr�� __bases__rV)rrer.�attr�superrrrrVFs    rVcCs0x*t|�D]}t||�}t|�s d||<q WdS)Nr�)r�rYr�)rrfr.r�rrrrWQs rWc@seZdZdd�Zdd�ZdS)r�cCs||_||_||_dS)N)r�rGr.)r r�rGr.rrrrZszMethodProxy.__init__cOs|j�|j|j||�}|S)N)r�rmrGr.)r rCrdr�rrr�__call___szMethodProxy.__call__N)rrrrr�rrrrr�Xsr�cCs~|dkr dSdt_t|�}ytj�|�Wn<tk rfd}|�|d�}|�|d�}tj�|�YnXtj�d�|t_dS)N�ascii�backslashreplace�strict� ) �builtins�_r/r)�stdout�write�UnicodeEncodeError�encode�decode)r��text�encoding�bytesrrr� displayhookgs   r��__main__)�mainzidlelib.idle_test.test_rpcr�)� verbosity)N),r�rr rr2r�r�r�r#rr�r)r,r0rrr r ZPicklerr r�r�rrr:ZQueuer]r�rHr6r[r\r�r�rr�r�rVrWr�r�rZunittestr�rrrr�sP 2  k