a  zeTR@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddZddZd)ddZGdd d ejZd Zd ZGd d d e jZiZedZedZGdddZGdddZddZGdddZGddde j eZ!GdddeZ"GdddZ#ddZ$ddZ%Gd d!d!Z&d"d#Z'e(d$krdd%l)m*Z*e*d&d'd(dS)*NcCst|}|SN)marshalloads)mscor?/opt/bitninja-python-dojo/embedded/lib/python3.9/idlelib/rpc.py unpickle_code-s r cCst|}t|ffSr)rdumpsr )rrrrr pickle_code3s r cCs$t}t||}|||Sr)ioBytesIO CodePicklerdumpgetvalue)objprotocolfprrrr 9s  r c@seZdZejeiejZdS)rN)__name__ __module__ __qualname__typesCodeTyper copyregdispatch_tablerrrrrBsri z 127.0.0.1c@s6eZdZd ddZddZddZdd Zd d ZdS) RPCServerNcCs |dur t}tj|||dSr) RPCHandler socketserver TCPServer__init__)selfaddrZ handlerclassrrrr KszRPCServer.__init__cCsdSrrr!rrr server_bindPszRPCServer.server_bindcCs|j|jdSr)socketconnectserver_addressr#rrrserver_activateTszRPCServer.server_activatecCs |j|jfSr)r%r'r#rrr get_request]szRPCServer.get_requestcCszWntyYntj}td|dtd|dtdtj|dtd||dtdt||dtj |dtd|dtd|dt d Yn0dS) 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_addresserfrrr handle_erroras      zRPCServer.handle_error)N)rrrr r$r(r)r:rrrrrIs   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|_|dur||_||_|dur*t}||_i|_i|_dSr) r0r1 sockthread debuggingsock objecttableobjtable responsescvars)r!r>r@r=rrrr s zSocketIO.__init__cCs |j}d|_|dur|dSr)r>close)r!r>rrrrCszSocketIO.closecCstddSNr)r6r7r#rrrexithookszSocketIO.exithookcGsN|js dS|jdttj}|D]}|dt|}q&t|tjddS)N r*) r=locationstrr0r1r2r/r-r.)r!argssarrrdebugs zSocketIO.debugcCs||j|<dSr)r@)r!oidobjectrrrregisterszSocketIO.registercCs$z |j|=WntyYn0dSr)r@KeyErrorr!rMrrr unregisters  zSocketIO.unregisterc Cs|d|z|\}\}}}}Wnty4YdS0||jvrNdd|ffS|j|}|dkrvi} t|| d| fS|dkri} t|| d| fSt||sdd|ffSt||} zh|d kr| |i|} t| trt | } d| fWS|d krt || ||ffWd Sdd |fWSWnt y4Ynt yHYnxty\Yndty} zd | fWYd} ~ Sd} ~ 0d}t||| |ftjdtjtjdYdS0dS)Nz localcall:)ERRORzBad request formatrSzUnknown 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)rL TypeErrorr@ _getmethods_getattributeshasattrgetattr isinstance RemoteObject remoteref request_queueputr,KeyboardInterruptOSError Exceptionr/r-r.r4r5)r!seqr8howrM methodnamerIkwargsrmethods attributesmethodretexmsgrrr localcallsT           zSocketIO.localcallcCs(|d|||||||}||S)Nzremotecall:asynccall: )rL asynccall asyncreturnr!rMrkrIrlrirrr remotecallszSocketIO.remotecallcCs(|d|||||||}||S)Nzremotequeue:asyncqueue: )rL asyncqueuerurvrrr remotequeueszSocketIO.remotequeuecCs`d||||ff}|}t|jkr8t}||j|<|d||||||||f|S)NrWz asynccall:%d:newseqr0r1r< ConditionrBrL putmessager!rMrkrIrlr8ricvarrrrrts zSocketIO.asynccallcCs`d||||ff}|}t|jkr8t}||j|<|d||||||||f|S)NrXzasyncqueue:%d:rzr~rrrrxs zSocketIO.asyncqueuecCs6|d||j|dd}|d||||S)Nz#asyncreturn:%d:call getresponse(): 皙?)waitzasyncreturn:%d:response: )rL getresponsedecoderesponse)r!riresponserrrruszSocketIO.asyncreturncCs|\}}|dkr|S|dkr dS|dkr6|ddS|dkrT|d|dS|dkrp|d|t||d kr|d ||t||dS) NrUrYr[zdecoderesponse: EXCEPTIONEOFzdecoderesponse: EOFrSzdecoderesponse: Internal ERROR:rZzdecoderesponse: Call Exception:)rLdecode_interrupthook RuntimeError SystemError)r!rrjwhatrrrrs&    zSocketIO.decoderesponsecCstdSr)EOFErrorr#rrrrszSocketIO.decode_interrupthookcCs6z|jdddWnty0|dYdS0dS)Nr)myseqrzmainloop:return)rrrLr#rrrmainloops   zSocketIO.mainloopcCs6|||}|dur2|\}}|dkr2|||f}|S)NrU) _getresponse_proxify)r!rrrrjrrrrr"s  zSocketIO.getresponsecCs4t|trt||jSt|tr0tt|j|S|Sr)ra RemoteProxyRPCProxyrMlistmapr)r!rrrrr*s    zSocketIO._proxifycCs|d|t|jur6|||}|dur|Sqn^|j|}|||jvr\|qH|j|}|d||f|j|=|j|=| |SdS)Nz_getresponse:myseq:z-_getresponse:%s: thread woke up: response: %s) rLr0r1r< pollresponserBacquirerArrelease)r!rrrrrrrr2s"      zSocketIO._getresponsecCs|jd|_}|S)N)nextseq)r!rirrrr{HszSocketIO.newseqc Cs|d|dz t|}Wn*tjyHtdt|tjdYn0t dt ||}t |dkrz0t g|j gg\}}}|j |dt}WnttfytdYn0||d}q^dS)Nzputmessage:%d:rzCannot pickle:r*sendBUFSIZEAttributeErrorr\rg)r!messagerJrwxnrrrr}Ls  zSocketIO.putmessagecCs|t|j|jkrt|jggg|\}}}t|dkrFdSz|jt}Wnt ylt Yn0t|dkr~t |j|7_|| SrD) _stage0rbuffbufneedrr>filenorecvrrgr_stage1)r!rrrrrJrrr pollpacket`s    zSocketIO.pollpacketcCsR|jdkrNt|jdkrN|jdd}|jdd|_td|d|_d|_dS)Nrrr)bufstaterrrunpackr)r!rJrrrrps zSocketIO._stage0cCsP|jdkrLt|j|jkrL|jd|j}|j|jd|_d|_d|_|SdS)Nrrr)rrrr)r!packetrrrrws zSocketIO._stage1cCs~||}|durdSzt|}WnTtjyxtdtjdtdt|tjdtj tjdtdtjdYn0|S)Nz-----------------------r*zcannot unpickle packet:) rrrUnpicklingErrorr/r-r.r3r4 print_stack)r!rrrrrr pollmessages zSocketIO.pollmessagec CsZztd}Wntjy"Yn 0|\}}|d|ff}||z||}|dur\WdSWn.tyz|YdStyYdS0|\}}|d}| d||f|dvr | d|| ||}| d||f|dkr|||fq|dkrqq||kr|S|j |d} | dur| ||j |<| | qqdS) NrrUzpollresponse:%d:myseq:%s)rWrXzpollresponse:%d:localcall:call:z%pollresponse:%d:localcall:response:%srWrX)response_queuegetqueueEmptyr}rr handle_EOFrrLrsrBrrAnotifyr) r!rrZqmsgrirrZresqrjcvrrrrsL           zSocketIO.pollresponsecCsV||d|jD]0}|j|}|d|j|<||q|dS)Nr)rN)EOFhookrLrBrrArrrE)r!keyrrrrrs     zSocketIO.handle_EOFcCsdSrrr#rrrrszSocketIO.EOFhook)NN)"rrrrr rCrErLrOrRrsrwryrtrxrurrrrrrr{r}rrrrrrrrrrrrrrr;s> .   I r;c@s eZdZdS)rbN)rrrrrrrrbsrbcCst|}|t|<t|Sr)idr?r)rrMrrrrcsrcc@seZdZddZdS)rcCs ||_dSr)rMrQrrrr szRemoteProxy.__init__N)rrrr rrrrrsrc@s,eZdZdZdZddZddZddZd S) rFz#ScCs(||_t||tj||||dSr)Zcurrent_handlerr;r rBaseRequestHandler)r!r>r"Zsvrrrrr s zRPCHandler.__init__cCs |dSr)rr#rrrhandleszRPCHandler.handlecCs t||SrrrQrrrget_remote_proxyszRPCHandler.get_remote_proxyN)rrrr=rGr rrrrrrrs rc@s:eZdZdZdZdZejejfddZ ddZ dd Z d S) RPCClientFz#CrcCs*t|||_|j||jddSNr)r%listening_sockbindlisten)r!addressfamilytyperrrr s zRPCClient.__init__cCsV|j\}}|jr$td|tjd|dtkr>t||ntd|tjdt dS)Nz****** Connection request from r*rz** Invalid host: ) racceptr=r/r-r. LOCALHOSTr;r rg)r!Z working_sockrrrrrs zRPCClient.acceptcCs t||SrrrQrrrr"szRPCClient.get_remote_proxyN) rrrr=rGrr%AF_INET SOCK_STREAMr rrrrrrr s  rc@s4eZdZdZdZddZddZddZdd ZdS) rNcCs||_||_dSr)sockiorM)r!rrMrrrr +szRPCProxy.__init__cCsp|jdur||j|r.t|j|j|S|jdur@|||jvrd|j|jd|fi}|St |dS)N__getattribute__) _RPCProxy__methods_RPCProxy__getmethodsr MethodProxyrrM_RPCProxy__attributes_RPCProxy__getattributesrwr)r!r2valuerrr __getattr__/s     zRPCProxy.__getattr__cCs|j|jddi|_dS)NrVr)rrwrMrr#rrrZ__getattributes=s zRPCProxy.__getattributescCs|j|jddi|_dS)NrTr)rrwrMrr#rrrZ __getmethodsAs zRPCProxy.__getmethods) rrrrrr rrrrrrrr&s rcCsLt|D]}t||}t|rd||<qt|trH|jD]}t||q8dSr)dirr`callablerar __bases__r])rrmr2attrsuperrrrr]Es     r]cCs,t|D]}t||}t|sd||<qdSr)rr`r)rrnr2rrrrr^Ps  r^c@seZdZddZddZdS)rcCs||_||_||_dSr)rrMr2)r!rrMr2rrrr YszMethodProxy.__init__cOs|j|j|j||}|Sr)rrwrMr2)r!rIrlrrrr__call__^szMethodProxy.__call__N)rrrr rrrrrrWsrcCs||dur dSdt_t|}ztj|Wn:tydd}||d}||d}tj|Yn0tjd|t_dS)Nasciibackslashreplacestrict ) builtins_r3r-stdoutwriteUnicodeEncodeErrorencodedecode)rtextencodingbytesrrr displayhookfs    r__main__)mainzidlelib.idle_test.test_rpcr) verbosity)N)+rrr rr6rrrr%rrr-r0r4rr r r Picklerrrrrrr?Queuerdrr;rbrcrrrrrr]r^rrrZunittestrrrrrsP 2  k