3 2aR@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddZddZd*ddZGdd d ejZd+Zd ZGd dde jZiZejdZejdZGdddeZGdddeZddZGdddeZ Gddde j!eZ"GdddeZ#GdddeZ$ddZ%dd Z&Gd!d"d"eZ'd#d$Z(e)d%krdd&l*m+Z+e+d'd(d)dS),NcCstj|}|S)N)marshalloads)mscor(/opt/alt/python36/lib64/python3.6/rpc.py unpickle_code-s rcCstj|}t|ffS)N)rdumpsr)rrrrr pickle_code3s r cCs$tj}t||}|j||jS)N)ioBytesIO CodePicklerdumpgetvalue)objZprotocolfprrrr 9s  r c@s"eZdZejeiZejejdS)r N) __name__ __module__ __qualname__typesCodeTyper dispatch_tableupdatecopyregrrrrr Bs r iz 127.0.0.1c@s6eZdZd ddZddZddZdd Zd d ZdS) RPCServerNcCs |dkr t}tjj|||dS)N) RPCHandler socketserver TCPServer__init__)selfaddrZ handlerclassrrrr LszRPCServer.__init__cCsdS)Nr)r!rrr server_bindQszRPCServer.server_bindcCs|jj|jdS)N)socketZconnectserver_address)r!rrrserver_activateUszRPCServer.server_activatecCs |j|jfS)N)r$r%)r!rrr get_request^szRPCServer.get_requestc CsyWntk rYntj}tddd|dtd|dtdtjj|dtd||dtdt||dtj |dtd |dtdd|dt j d YnXdS) N -()filezUnhandled server exception!z Thread: %szClient Address: z Request: z# *** Unrecoverable, server exiting!r) SystemExitsys __stderr__print threadingcurrent_threadnamerepr traceback print_excos_exit)r!requestZclient_addressZerfrrr handle_errorbs   zRPCServer.handle_error)N)rrrr r#r&r'r9rrrrrJs   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@tj|_|dk r||_||_|dkr*t}||_i|_i|_dS)N) r0r1 sockthread debuggingsock objecttableobjtable responsescvars)r!r=r?r<rrrr s zSocketIO.__init__cCs |j}d|_|dk r|jdS)N)r=close)r!r=rrrrBszSocketIO.closecCstjddS)Nr)r6r7)r!rrrexithookszSocketIO.exithookcGsR|js dS|jdttjj}x|D]}|dt|}q(Wt|tjddS)N )r+) r<locationstrr0r1r2r/r-r.)r!argssarrrdebugs  zSocketIO.debugcCs||j|<dS)N)r?)r!oidobjectrrrregisterszSocketIO.registerc Cs&y |j|=Wntk r YnXdS)N)r?KeyError)r!rKrrr unregisters zSocketIO.unregistercCs|jd|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 j || ||ffdSdd |fSWnt k r,Ynt k rBYnntk rXYnXtk r|} zd | fSd} ~ Xn4d}t||| |ftjdtjtjddSdS)Nz localcall:ERRORBad request formatzUnknown object id: %r __methods__OK__attributes__zUnsupported method name: %rCALLQUEUEQUEUEDzUnsupported message type: %sCALLEXCzU*** Internal Error: rpc.py:SocketIO.localcall() Object: %s Method: %s Args: %s )r+ EXCEPTION)rPrQ)rWN)rYN)rJ TypeErrorr? _getmethods_getattributeshasattrgetattr isinstance RemoteObject remoteref request_queueZputr,KeyboardInterruptOSError Exceptionr/r-r.r4r5)r!seqr8howrK methodnamerGkwargsrmethods attributesmethodretZexmsgrrr localcallsT          zSocketIO.localcallcCs(|jd|||j||||}|j|S)Nzremotecall:asynccall: )rJ asynccall asyncreturn)r!rKrhrGrirfrrr remotecallszSocketIO.remotecallcCs(|jd|||j||||}|j|S)Nzremotequeue:asyncqueue: )rJ asyncqueuerq)r!rKrhrGrirfrrr remotequeueszSocketIO.remotequeuecCs`d||||ff}|j}tj|jkr8tj}||j|<|jd||||||j||f|S)NrUz asynccall:%d:)newseqr0r1r; ConditionrArJ putmessage)r!rKrhrGrir8rfcvarrrrrps zSocketIO.asynccallcCs`d||||ff}|j}tj|jkr8tj}||j|<|jd||||||j||f|S)NrVzasyncqueue:%d:)rur0r1r;rvrArJrw)r!rKrhrGrir8rfrxrrrrss zSocketIO.asyncqueuecCs6|jd||j|dd}|jd|||j|S)Nz#asyncreturn:%d:call getresponse(): g?)waitzasyncreturn:%d:response: )rJ getresponsedecoderesponse)r!rfresponserrrrqszSocketIO.asyncreturncCs|\}}|dkr|S|dkr dS|dkr6|jddS|dkrT|jd|jdS|dkrp|jd|t||d kr|jd ||t||dS) NrSrWrYzdecoderesponse: EXCEPTIONEOFzdecoderesponse: EOFrPzdecoderesponse: Internal ERROR:rXzdecoderesponse: Call Exception:)rJdecode_interrupthook RuntimeError SystemError)r!r|rgwhatrrrr{s&    zSocketIO.decoderesponsecCstdS)N)EOFError)r!rrrr~szSocketIO.decode_interrupthookc Cs6y|jdddWntk r0|jddSXdS)Ng?)myseqryzmainloop:return)rzrrJ)r!rrrmainloops  zSocketIO.mainloopcCs6|j||}|dk r2|\}}|dkr2||j|f}|S)NrS) _getresponse_proxify)r!rryr|rgrrrrrz#s  zSocketIO.getresponsecCs4t|trt||jSt|tr0tt|j|S|S)N)r_ RemoteProxyRPCProxyrKlistmapr)r!rrrrr+s    zSocketIO._proxifycCs|jd|tj|jkr:x|j||}|dk r|SqWnb|j|}|jx||jkrb|jqNW|j|}|jd||f|j|=|j|=|j |SdS)Nz_getresponse:myseq:z-_getresponse:%s: thread woke up: response: %s) rJr0r1r; pollresponserAacquirer@ryrelease)r!rryr|rxrrrr3s"        zSocketIO._getresponsecCs|jd|_}|S)N)nextseq)r!rfrrrruIszSocketIO.newseqcCs|jd|dy t|}Wn,tjk rJtdt|tjdYnXtj dt ||}xnt |dkry0t j g|j gg\}}}|j j |dt}Wn ttfk rtdYnX||d}qbWdS)Nzputmessage:%d:rzCannot pickle:)r+z .   I r:c@s eZdZdS)r`N)rrrrrrrr`sr`cCst|}|t|<t|S)N)idr>r)rrKrrrrasrac@seZdZddZdS)rcCs ||_dS)N)rK)r!rKrrrr szRemoteProxy.__init__N)rrrr rrrrrsrc@s,eZdZdZdZddZddZddZd S) rFz#ScCs(||_tj||tjj||||dS)N)Zcurrent_handlerr:r rBaseRequestHandler)r!r=r"Zsvrrrrr s zRPCHandler.__init__cCs |jdS)N)r)r!rrrhandleszRPCHandler.handlecCs t||S)N)r)r!rKrrrget_remote_proxy szRPCHandler.get_remote_proxyN)rrrr<rEr rrrrrrrs rc@s:eZdZdZdZdZejejfddZ ddZ dd Z d S) RPCClientFz#CrcCs*tj|||_|jj||jjddS)Nr)r$listening_sockZbindZlisten)r!addressZfamilytyperrrr s zRPCClient.__init__cCsV|jj\}}|jr$td|tjd|dtkr>tj||ntd|tjdt dS)Nz****** Connection request from )r+rz** Invalid host: ) racceptr<r/r-r. LOCALHOSTr:r rd)r!Z working_sockrrrrrs zRPCClient.acceptcCs t||S)N)r)r!rKrrrr#szRPCClient.get_remote_proxyN) rrrr<rErr$ZAF_INETZ SOCK_STREAMr rrrrrrr s  rc@s4eZdZdZdZddZddZddZdd ZdS) rNcCs||_||_dS)N)sockiorK)r!rrKrrrr ,szRPCProxy.__init__cCsp|jdkr|j|jj|r.t|j|j|S|jdkr@|j||jkrd|jj|jd|fi}|St |dS)N__getattribute__) _RPCProxy__methods_RPCProxy__getmethodsr MethodProxyrrK_RPCProxy__attributes_RPCProxy__getattributesrrr)r!r2valuerrr __getattr__0s      zRPCProxy.__getattr__cCs|jj|jdfi|_dS)NrT)rrrrKr)r!rrrZ__getattributes>s zRPCProxy.__getattributescCs|jj|jdfi|_dS)NrR)rrrrKr)r!rrrZ __getmethodsBs zRPCProxy.__getmethods) rrrrrr rrrrrrrr's rcCsTx*t|D]}t||}t|r d||<q Wt|trPx|jD]}t||q>WdS)Nr)dirr^callabler_r __bases__r[)rrjr2attrsuperrrrr[Fs    r[cCs0x*t|D]}t||}t|s d||<q WdS)Nr)rr^r)rrkr2rrrrr\Qs r\c@seZdZddZddZdS)rcCs||_||_||_dS)N)rrKr2)r!rrKr2rrrr ZszMethodProxy.__init__cOs|jj|j|j||}|S)N)rrrrKr2)r!rGrirrrr__call___szMethodProxy.__call__N)rrrr rrrrrrXsrc Cs~|dkr dSdt_t|}ytjj|Wn<tk rfd}|j|d}|j|d}tjj|YnXtjjd|t_dS)Nasciibackslashreplacestrictr() builtins_r3r-stdoutwriteUnicodeEncodeErrorencodedecode)rtextencodingbytesrrr displayhookgs   r__main__)mainzidlelib.idle_test.test_rpcr) verbosity)Ni ),rrr rr6rrrr$rrr-r0r4rrr r ZPicklerr rrrrr>ZQueuerbrrLr:r`rarrrrrr[r\rrrZunittestrrrrrsP 2  k