B X<˳H@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddZddZd)ddZGdd d ejZd Zd ZGd d d e jZiZedZedZGdddeZGdddeZddZGdddeZ Gddde j!eZ"GdddeZ#GdddeZ$ddZ%ddZ&Gd d!d!eZ'd"d#Z(e)d$krdd%l*m+Z+e+d&d'd(dS)*NcCst|}|S)N)marshalloads)mscor./opt/alt/python37/lib/python3.7/idlelib/rpc.py unpickle_code-s rcCst|}t|ffS)N)rdumpsr)rrrrr pickle_code3s r cCs$t}t||}|||S)N)ioBytesIO CodePicklerdumpgetvalue)objZprotocolfprrrr 9s  r c@s"eZdZejeiZeejdS)r N) __name__ __module__ __qualname__typesCodeTyper dispatch_tableupdatecopyregrrrrr Bs r i z 127.0.0.1c@s6eZdZd ddZddZddZdd Zd d ZdS) RPCServerNcCs |dkr t}tj|||dS)N) RPCHandler socketserver TCPServer__init__)selfaddrZ handlerclassrrrrLszRPCServer.__init__cCsdS)Nr)r rrr server_bindQszRPCServer.server_bindcCs|j|jdS)N)socketZconnectserver_address)r rrrserver_activateUszRPCServer.server_activatecCs |j|jfS)N)r#r$)r rrr get_request^szRPCServer.get_requestcCsyWntk rYntj}td|dtd|dtdtj|dtd||dtdt||dtj |dtd|dtd|dt d YnXdS) Nz) ----------------------------------------)filezUnhandled server exception!z Thread: %szClient Address: z Request: z# *** Unrecoverable, server exiting!z(----------------------------------------r) SystemExitsys __stderr__print threadingcurrent_threadnamerepr traceback print_excos_exit)r requestZclient_addressZerfrrr handle_errorbs     zRPCServer.handle_error)N)rrrrr"r%r&r5rrrrrJs   rc@seZdZdZd;ddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+Zd,ZdZd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7d8Z d9d:Z!dS)<SocketIOrNcCs@t|_|dk r||_||_|dkr*t}||_i|_i|_dS)N) r,r- sockthread debuggingsock objecttableobjtable responsescvars)r r9r;r8rrrrs zSocketIO.__init__cCs |j}d|_|dk r|dS)N)r9close)r r9rrrr>szSocketIO.closecCstddS)Nr)r2r3)r rrrexithookszSocketIO.exithookcGsR|js dS|jdttj}x|D]}|dt|}q(Wt|tjddS)N )r') r8locationstrr,r-r.r+r)r*)r argssarrrdebugs  zSocketIO.debugcCs||j|<dS)N)r;)r oidobjectrrrregisterszSocketIO.registercCs&y |j|=Wntk r YnXdS)N)r;KeyError)r rGrrr unregisters zSocketIO.unregisterc Cs|d|y|\}\}}}}Wntk r4dSX||jkrNdd|ffS|j|}|dkrvi} t|| d| fS|dkri} t|| d| fSt||sdd|ffSt||} y^|d kr| ||} t| trt | } d| fS|d krt || ||ffd Sdd |fSWnt k r,Ynt k rBYnptk rXYnZtk r~} zd | fSd} ~ XYn4d}t||| |ftjdtjtjddSdS)Nz localcall:)ERRORzBad request formatrLzUnknown object id: %r __methods__OK__attributes__zUnsupported method name: %rCALLQUEUE)QUEUEDNzUnsupported message type: %sCALLEXCzU*** Internal Error: rpc.py:SocketIO.localcall() Object: %s Method: %s Args: %s )r') EXCEPTIONN)rF TypeErrorr; _getmethods_getattributeshasattrgetattr isinstance RemoteObject remoteref request_queueZputr(KeyboardInterruptOSError Exceptionr+r)r*r0r1)r seqr4howrG methodnamerCkwargsrmethods attributesmethodretZexmsgrrr localcallsT          zSocketIO.localcallcCs(|d|||||||}||S)Nzremotecall:asynccall: )rF asynccall asyncreturn)r rGrcrCrdrarrr remotecallszSocketIO.remotecallcCs(|d|||||||}||S)Nzremotequeue:asyncqueue: )rF asyncqueuerl)r rGrcrCrdrarrr remotequeueszSocketIO.remotequeuecCs`d||||ff}|}t|jkr8t}||j|<|d||||||||f|S)NrPz asynccall:%d:)newseqr,r-r7 Conditionr=rF putmessage)r rGrcrCrdr4racvarrrrrks zSocketIO.asynccallcCs`d||||ff}|}t|jkr8t}||j|<|d||||||||f|S)NrQzasyncqueue:%d:)rpr,r-r7rqr=rFrr)r rGrcrCrdr4rarsrrrrns zSocketIO.asyncqueuecCs6|d||j|dd}|d||||S)Nz#asyncreturn:%d:call getresponse(): g?)waitzasyncreturn:%d:response: )rF getresponsedecoderesponse)r raresponserrrrlszSocketIO.asyncreturncCs|\}}|dkr|S|dkr dS|dkr6|ddS|dkrT|d|dS|dkrp|d|t||d kr|d ||t||dS) NrNrRrTzdecoderesponse: EXCEPTIONEOFzdecoderesponse: EOFrLzdecoderesponse: Internal ERROR:rSzdecoderesponse: Call Exception:)rFdecode_interrupthook RuntimeError SystemError)r rwrbwhatrrrrvs&    zSocketIO.decoderesponsecCstdS)N)EOFError)r rrrryszSocketIO.decode_interrupthookcCs6y|jdddWntk r0|ddSXdS)Ng?)myseqrtzmainloop:return)rur}rF)r rrrmainloops  zSocketIO.mainloopcCs6|||}|dk r2|\}}|dkr2|||f}|S)NrN) _getresponse_proxify)r r~rtrwrbr|rrrru#s  zSocketIO.getresponsecCs4t|trt||jSt|tr0tt|j|S|S)N)rZ RemoteProxyRPCProxyrGlistmapr)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<rtrelease)r r~rtrwrsrrrr3s"        zSocketIO._getresponsecCs|jd|_}|S)N)nextseq)r rarrrrpIszSocketIO.newseqc Cs|d|dy t|}Wn,tjk rJtdt|tjdYnXt dt ||}xnt |dkry0t g|j gg\}}}|j |dt}Wn ttfk rtdYnX||d}qbWdS)Nzputmessage:%d:rzCannot pickle:)r'zr?rFrIrKrjrmrorkrnrlrvryrrurrrprrrrrrrrrrrrrrrrr6s> .   I r6c@s eZdZdS)r[N)rrrrrrrr[sr[cCst|}|t|<t|S)N)idr:r)rrGrrrr\sr\c@seZdZddZdS)rcCs ||_dS)N)rG)r rGrrrrszRemoteProxy.__init__N)rrrrrrrrrsrc@s,eZdZdZdZddZddZddZd S) rFz#ScCs(||_t||tj||||dS)N)Zcurrent_handlerr6rrBaseRequestHandler)r r9r!Zsvrrrrrs zRPCHandler.__init__cCs |dS)N)r)r rrrhandleszRPCHandler.handlecCs t||S)N)r)r rGrrrget_remote_proxy szRPCHandler.get_remote_proxyN)rrrr8rArrrrrrrrs rc@s:eZdZdZdZdZejejfddZ ddZ dd Z d S) RPCClientFz#CrcCs*t|||_|j||jddS)Nr)r#listening_sockZbindZlisten)r addressZfamilytyperrrrs zRPCClient.__init__cCsV|j\}}|jr$td|tjd|dtkr>t||ntd|tjdt dS)Nz****** Connection request from )r'rz** Invalid host: ) racceptr8r+r)r* LOCALHOSTr6rr_)r Z working_sockrrrrrs zRPCClient.acceptcCs t||S)N)r)r rGrrrr#szRPCClient.get_remote_proxyN) rrrr8rArr#ZAF_INETZ SOCK_STREAMrrrrrrrr s  rc@s4eZdZdZdZddZddZddZdd ZdS) rNcCs||_||_dS)N)sockiorG)r rrGrrrr,szRPCProxy.__init__cCsp|jdkr||j|r.t|j|j|S|jdkr@|||jkrd|j|jd|fi}|St |dS)N__getattribute__) _RPCProxy__methods_RPCProxy__getmethodsr MethodProxyrrG_RPCProxy__attributes_RPCProxy__getattributesrmr)r r.valuerrr __getattr__0s      zRPCProxy.__getattr__cCs|j|jddi|_dS)NrOr)rrmrGr)r rrrZ__getattributes>s zRPCProxy.__getattributescCs|j|jddi|_dS)NrMr)rrmrGr)r rrrZ __getmethodsBs zRPCProxy.__getmethods) rrrrrrrrrrrrrr's rcCsTx*t|D]}t||}t|r d||<q Wt|trPx|jD]}t||q>WdS)Nr)dirrYcallablerZr __bases__rV)rrer.attrsuperrrrrVFs    rVcCs0x*t|D]}t||}t|s d||<q WdS)Nr)rrYr)rrfr.rrrrrWQs rWc@seZdZddZddZdS)rcCs||_||_||_dS)N)rrGr.)r rrGr.rrrrZszMethodProxy.__init__cOs|j|j|j||}|S)N)rrmrGr.)r rCrdrrrr__call___szMethodProxy.__call__N)rrrrrrrrrrXsrcCs~|dkr dSdt_t|}ytj|Wn<tk rfd}||d}||d}tj|YnXtjd|t_dS)Nasciibackslashreplacestrict ) builtins_r/r)stdoutwriteUnicodeEncodeErrorencodedecode)rtextencodingbytesrrr displayhookgs   r__main__)mainzidlelib.idle_test.test_rpcr) verbosity)N),rrr rr2rrrr#rrr)r,r0rrr r ZPicklerr rrrrr:ZQueuer]rrHr6r[r\rrrrrrVrWrrrZunittestrrrrrsP 2  k