ronnie
2022-10-14 1504bb53e29d3d46222c0b3ea994fc494b48e153
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
[\¬Qc@sÖdZddlZddlZddlZddlZddlZddlZddlZddl    Z    ddl
Z
ddl Z ddl Z ddl Z ddlZd„Zd„Ze je jeeƒddZdZdejfd    „ƒYZiZe
j
d
ƒZe
j
d
ƒZd efd „ƒYZd efd„ƒYZd„Zdefd„ƒYZdejefd„ƒYZdefd„ƒYZ defd„ƒYZ!d„Z"d„Z#defd„ƒYZ$dS(sRPC Implemention, originally written for the Python Idle IDE
 
For security reasons, GvR requested that Idle's Python execution server process
connect to the Idle process, which listens for the connection.  Since Idle has
only one client per server, this was not a limitation.
 
   +---------------------------------+ +-------------+
   | SocketServer.BaseRequestHandler | | SocketIO    |
   +---------------------------------+ +-------------+
                   ^                   | register()  |
                   |                   | unregister()|
                   |                   +-------------+
                   |                      ^  ^
                   |                      |  |
                   | + -------------------+  |
                   | |                       |
   +-------------------------+        +-----------------+
   | RPCHandler              |        | RPCClient       |
   | [attribute of RPCServer]|        |                 |
   +-------------------------+        +-----------------+
 
The RPCServer handler class is expected to provide register/unregister methods.
RPCHandler inherits the mix-in class SocketIO, which provides these methods.
 
See the Idle run.main() docstring for further information on how this was
accomplished in Idle.
 
iÿÿÿÿNcCstj|ƒ}|S(N(tmarshaltloads(tmstco((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyt unpickle_code-scCstj|ƒ}t|ffS(N(RtdumpsR(RR((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyt pickle_code2siis    127.0.0.1t    RPCServercBs8eZdd„Zd„Zd„Zd„Zd„ZRS(cCs/|dkrt}ntjj|||ƒdS(N(tNonet
RPCHandlert SocketServert    TCPServert__init__(tselftaddrt handlerclass((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyR Gs     cCsdS(s@Override TCPServer method, no bind() phase for connecting entityN((R ((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyt server_bindLscCs|jj|jƒdS(sÎOverride TCPServer method, connect() instead of listen()
 
        Due to the reversed connection, self.server_address is actually the
        address of the Idle Client to which we are connecting.
 
        N(tsockettconnecttserver_address(R ((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pytserver_activatePscCs|j|jfS(s:Override TCPServer method, return already connected socket(RR(R ((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyt get_requestYscCsÂy‚Wn´tk
r‚n¡tj}|dddIJ|dIJ|dtjƒjƒIJ|dI|IJ|dIt|ƒIJtjd|ƒ|d    IJ|ddIJt    j
d
ƒnXd S( sÜOverride TCPServer method
 
        Error message goes to __stderr__.  No error message if exiting
        normally or socket raised EOF.  Other exceptions not handled in
        server code will cause os._exit.
 
        s
t-i(sUnhandled server exception!s
Thread: %ssClient Address: s    Request: tfiles#
*** Unrecoverable, server exiting!iN( t
SystemExittsyst
__stderr__t    threadingt currentThreadtgetNametreprt    tracebackt    print_exctost_exit(R trequesttclient_addressterf((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyt handle_error]s     
 
N(t__name__t
__module__RR RRRR&(((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyREs
                 itSocketIOcBseZdZddd„Zd„Zd„Zd„Zd„Zd„Z    d„Z
d„Z d    „Z d
„Z d „Zd „Zd „Zd„Zd„Zd„Zd„Zd„Zd„Zd„ZdZdZdZd„Zd„Zd„Zd„Zd„Zd„Z d„Z!RS(icCsdtjƒ|_|dk    r'||_n||_|dkrEt}n||_i|_i|_    dS(N(
RRt
sockthreadRt    debuggingtsockt objecttabletobjtablet    responsestcvars(R R,R.R+((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyR €s                   cCs/|j}d|_|dk    r+|jƒndS(N(R,Rtclose(R R,((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyR1‹s         cCstjdƒdS(s!override for specific exit actioniN(R!R"(R ((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pytexithook‘scGsf|js dS|jdttjƒjƒƒ}x"|D]}|dt|ƒ}q7Wtj|IJdS(Nt (R+tlocationtstrRRRRR(R targststa((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pytdebug•s     # cCs||j|<dS(N(R.(R toidtobject((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pytregisterscCs&y|j|=Wntk
r!nXdS(N(R.tKeyError(R R:((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyt
unregister s cCsÛ|jd|ƒy|\}\}}}}Wntk
r@dSX||jkradd|ffS|j|}|dkr—i}    t||    ƒd|    fS|dkrÀi}
t||
ƒd|
fSt||ƒsàdd|ffSt||ƒ} y|d    kr5| ||Ž} t| tƒr+t    | ƒ} nd| fS|d
krat
j || ||ffƒdSdd |fSWndt k
r†‚nQtjk
rœ‚n;d } tj| || |fIJtjdtjƒdSXdS(Ns
localcall:tERRORsBad request formatsUnknown object id: %rt __methods__tOKt__attributes__sUnsupported method name: %rtCALLtQUEUEtQUEUEDsUnsupported message type: %ssU*** Internal Error: rpc.py:SocketIO.localcall()
 
 Object: %s 
 Method: %s 
 Args: %s
Rt    EXCEPTION(R?sBad request format(REN(RFN(R9t    TypeErrorR.t _getmethodst_getattributesthasattrtgetattrt
isinstancet RemoteObjectt    remotereft request_queuetputRRRterrorRRRR (R tseqR#thowR:t
methodnameR6tkwargstobjtmethodst
attributestmethodtrettmsg((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyt    localcall¦sL    
 
 
  cCs8|jd||ƒ|j||||ƒ}|j|ƒS(Nsremotecall:asynccall: (R9t    asynccallt asyncreturn(R R:RTR6RURR((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyt
remotecallÐscCs8|jd||ƒ|j||||ƒ}|j|ƒS(Nsremotequeue:asyncqueue: (R9t
asyncqueueR^(R R:RTR6RURR((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyt remotequeueÕscCs‰d||||ff}|jƒ}tjƒ|jkrUtjƒ}||j|<n|jd|||||ƒ|j||fƒ|S(NRCs asynccall:%d:(tnewseqRRR*t    ConditionR0R9t
putmessage(R R:RTR6RUR#RRtcvar((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyR]Ús  cCs‰d||||ff}|jƒ}tjƒ|jkrUtjƒ}||j|<n|jd|||||ƒ|j||fƒ|S(NRDsasyncqueue:%d:(RbRRR*RcR0R9Rd(R R:RTR6RUR#RRRe((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyR`äs  cCsG|jd|ƒ|j|ddƒ}|jd||ƒ|j|ƒS(Ns#asyncreturn:%d:call getresponse(): twaitgš™™™™™©?sasyncreturn:%d:response: (R9t getresponsetdecoderesponse(R RRtresponse((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyR^îscCs«|\}}|dkr|S|dkr,dS|dkrI|jdƒdS|dkrp|jdƒ|jƒdS|dkr˜|jd|ƒt|‚nt||f‚dS(    NRARERFsdecoderesponse: EXCEPTIONtEOFsdecoderesponse: EOFR?sdecoderesponse: Internal ERROR:(RR9tdecode_interrupthookt RuntimeErrort SystemError(R RiRStwhat((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyRhôs        
  cCs
t‚dS(tN(tEOFError(R ((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyRkscCs@y|jddddƒWntk
r;|jdƒdSXdS(s¥Listen on socket until I/O not ready or EOF
 
        pollresponse() will loop looking for seq number None, which
        never comes, and exit on EOFError.
 
        tmyseqRfgš™™™™™©?smainloop:returnN(RgRRpR9(R ((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pytmainloop
s
  cCsU|j||ƒ}|dk    rQ|\}}|dkrQ||j|ƒf}qQn|S(NRA(t _getresponseRt_proxify(R RqRfRiRSRn((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyRgs    cCsEt|tƒrt||jƒSt|tjƒrAt|j|ƒS|S(N(RLt RemoteProxytRPCProxyR:ttypestListTypetmapRt(R RV((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyRts
cCsÑ|jd|ƒtjƒ|jkrPx¥|j||ƒ}|dk    r(|Sq(n}|j|}|jƒx||jkr†|j    ƒqjW|j|}|jd||fƒ|j|=|j|=|j
ƒ|SdS(Ns_getresponse:myseq:s-_getresponse:%s: thread woke up: response: %s( R9RRR*t pollresponseRR0tacquireR/Rftrelease(R RqRfRiRe((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyRs's" 
 
     
 
 
cCs|jd|_}|S(Ni(tnextseq(R RR((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyRb=scCs|jd|dƒytj|ƒ}Wn0tjk
rZtjdIt|ƒIJ‚nXtjdt    |ƒƒ|}x—t    |ƒdkry>t
j
g|j ggƒ\}}}|j j |t  ƒ}Wn6ttfk
rìtd‚qztjk
r‚qzX||}qzWdS(Nsputmessage:%d:isCannot pickle:s<issocket no longer exists(R9tpickleRt PicklingErrorRRRtstructtpacktlentselectR,tsendtBUFSIZEtAttributeErrorRGtIOErrorRRQ(R tmessageR7trtwtxtn((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyRdAs $ RoicCsÙ|jƒt|jƒ|jkrÏtj|jjƒggg|ƒ\}}}t|ƒdkredSy|jjt    ƒ}Wnt
j k
r—t ‚nXt|ƒdkr³t ‚n|j|7_|jƒn|j ƒS(Ni(t_stage0R‚tbuffertbufneedRƒR,tfilenoRtrecvR…RRQRpt_stage1(R RfR‰RŠR‹R7((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyt
pollpacketXs
-
     cCsj|jdkrft|jƒdkrf|jd }|jd|_tjd|ƒd|_d|_ndS(Niis<ii(tbufstateR‚RŽR€tunpackR(R R7((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyRhs
$ cCsd|jdkr`t|jƒ|jkr`|j|j }|j|j|_d|_d|_|SdS(Niii(R”R‚RŽR(R tpacket((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyR’os '        cCs–|j|ƒ}|dkrdSytj|ƒ}Wn]tjk
r‘tjdIJtjdIt|ƒIJtj    dtjƒtjdIJ‚nX|S(Ns-----------------------scannot unpickle packet:R(
R“RR~RtUnpicklingErrorRRRRt print_stack(R RfR–Rˆ((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyt pollmessagews   c
Cs¾x·ytjdƒ}Wntjk
r,n,X|\}}|d|ff}|j|ƒy#|j|ƒ}|dkrzdSWn-tk
r™|jƒdSt    k
rªdSX|\}}|d}|j
d||fƒ|d    krU|j
d|ƒ|j ||ƒ}|j
d||fƒ|dkr@|j||fƒq|dkrqqq||kre|S|j j|dƒ}    |    dk    r|    j ƒ||j|<|    jƒ|    jƒqqqdS(
sRHandle messages received on the socket.
 
        Some messages received may be asynchronous 'call' or 'queue' requests,
        and some may be responses for other threads.
 
        'call' requests are passed to self.localcall() with the expectation of
        immediate execution, during which time the socket is not serviced.
 
        'queue' requests are used for tasks (which may block or hang) to be
        processed in a different thread.  These requests are fed into
        request_queue by self.localcall().  Responses to queued requests are
        taken from response_queue and sent across the link with the associated
        sequence numbers.  Messages in the queues are (sequence_number,
        request/response) tuples and code using this module removing messages
        from the request_queue is responsible for returning the correct
        sequence number in the response_queue.
 
        pollresponse() will loop until a response message with the myseq
        sequence number is received, and will save other responses in
        self.responses and notify the owning thread.
 
        iRAspollresponse:%d:myseq:%sRCRDspollresponse:%d:localcall:call:s%pollresponse:%d:localcall:response:%sN(sCALLsQUEUE(tresponse_queuetgettQueuetEmptyRdR™RRpt
handle_EOFR†R9R\R0R{R/tnotifyR|(
R RqRftqmsgRRRiRˆtresqRStcv((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyRz…sN    
 
         
 
 cCsq|jƒ|jdƒxI|jD]>}|j|}|jƒd|j|<|jƒ|jƒq!W|jƒdS(s+action taken upon link being closed by peerRžRjN(sEOFN(    tEOFhookR9R0R{RR/RŸR|R2(R tkeyR¢((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyRžÎs
 
 
cCsdS(sBClasses using rpc client/server can override to augment EOF actionN((R ((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyR£ÛsN("R'R(R}RR R1R2R9R<R>R\R_RaR]R`R^RhRkRrRgRtRsRbRdRŽRR”R“RR’R™RzRžR£(((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyR)|s>                        *            
   
                                                       I     RMcBseZRS((R'R((((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyRMáscCs t|ƒ}|t|<t|ƒS(N(tidR-Ru(RVR:((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyRNås 
RucBseZd„ZRS(cCs ||_dS(N(R:(R R:((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyR ìs(R'R(R (((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyRuêsR    cBs/eZeZdZd„Zd„Zd„ZRS(s#ScCs6||_tj||ƒtjj||||ƒdS(N(tcurrent_handlerR)R R
tBaseRequestHandler(R R,Rtsvr((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyR ôs    cCs|jƒdS(s(handle() method required by SocketServerN(Rr(R ((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pythandleùscCs t||ƒS(N(Rv(R R:((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pytget_remote_proxyýs(R'R(tFalseR+R4R R©Rª(((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyR    ïs
        t    RPCClientcBsAeZeZdZdZejejd„Z    d„Z
d„Z RS(s#CicCs9tj||ƒ|_|jj|ƒ|jjdƒdS(Ni(Rtlistening_socktbindtlisten(R taddresstfamilyttype((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyR scCsw|jjƒ\}}|jr4tjdI|IJn|dtkrWtj||ƒntjdI|IJtj    ‚dS(Ns****** Connection request from is** Invalid host: (
R­tacceptR+RRt    LOCALHOSTR)R RRQ(R t working_sockR°((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyR³ s    cCs t||ƒS(N(Rv(R R:((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyRªs( R'R(R«R+R4R}RtAF_INETt SOCK_STREAMR R³Rª(((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyR¬s     
RvcBs8eZdZdZd„Zd„Zd„Zd„ZRS(cCs||_||_dS(N(tsockioR:(R R¸R:((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyR s    cCs¡|jdkr|jƒn|jj|ƒrDt|j|j|ƒS|jdkr`|jƒn||jkr”|jj    |jd|fiƒ}|St
|‚dS(Nt__getattribute__( t_RPCProxy__methodsRt_RPCProxy__getmethodsR›t MethodProxyR¸R:t_RPCProxy__attributest_RPCProxy__getattributesR_R†(R tnametvalue((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyt __getattr__"s  cCs%|jj|jddiƒ|_dS(NRB((R¸R_R:R½(R ((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyt__getattributes0scCs%|jj|jddiƒ|_dS(NR@((R¸R_R:Rº(R ((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyt __getmethods4sN(    R'R(RRºR½R RÁR¾R»(((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyRvs             cCs§x?t|ƒD]1}t||ƒ}t|dƒr d||<q q Wt|ƒtjkrjt|j|ƒnt|ƒtjkr£x!|j    D]}t||ƒq‰WndS(Nt__call__i(
tdirRKRJR²Rwt InstanceTypeRHt    __class__t    ClassTypet    __bases__(RVRWR¿tattrtsuper((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyRH8scCsFx?t|ƒD]1}t||ƒ}t|dƒs d||<q q WdS(NRÄi(RÅRKRJ(RVRXR¿RÊ((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyRIEsR¼cBseZd„Zd„ZRS(cCs||_||_||_dS(N(R¸R:R¿(R R¸R:R¿((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyR Ms        cOs%|jj|j|j||ƒ}|S(N(R¸R_R:R¿(R R6RURÀ((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyRÄRs!(R'R(R RÄ(((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyR¼Ks    (%t__doc__RR!RRƒR
R€tcPickleR~RRœRtcopy_regRwRRRtCodeTypeR…R´R RR-RORšR;R)RMRNRuR§R    R¬RvRHRIR¼(((sS/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/idlelib/rpc.pyt<module>sB                      
2ÿf