
    3\hVR                     @   	 d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd Zd Zd"dZ G d dej                  ZdZdZ G d	 d
e	j                  Zi Z ej        d           Z ej        d           Z G d d          Z G d d          Zd Z G d d          Z G d de	j         e          Z! G d de          Z" G d d          Z#d Z$d Z% G d d          Z&d Z'e(dk    rd dl)m*Z*  e*dd !           dS dS )#    Nc                 0    	 t          j        |           }|S N)marshalloads)mscos     5/opt/python-3.11.14/usr/lib/python3.11/idlelib/rpc.pyunpickle_coder
   -   s    0	r		BI    c                 @    	 t          j        |           }t          |ffS r   )r   dumpsr
   )r   r   s     r	   pickle_coder   3   s!    H	r		B2%r   c                     	 t          j                    }t          ||          }|                    |            |                                S r   )ioBytesIOCodePicklerdumpgetvalue)objprotocolfps       r	   r   r   9   s<    4

AAx  AFF3KKK::<<r   c                   .    e Zd Zej        eiej        ZdS )r   N)__name__
__module____qualname__typesCodeTyper   copyregdispatch_table r   r	   r   r   B   s"        nkLW5KLNNNr   r   i    z	127.0.0.1c                   .    e Zd ZddZd Zd Zd Zd ZdS )	RPCServerNc                 Z    |t           }t          j                            | ||           d S r   )
RPCHandlersocketserver	TCPServer__init__)selfaddrhandlerclasss      r	   r(   zRPCServer.__init__K   s.    %L''dLAAAAAr   c                     	 d S r   r!   r)   s    r	   server_bindzRPCServer.server_bindP   s
    Jr   c                 F    	 | j                             | j                   d S r   )socketconnectserver_addressr-   s    r	   server_activatezRPCServer.server_activateT   s(    	 	D/00000r   c                      	 | j         | j        fS r   )r0   r2   r-   s    r	   get_requestzRPCServer.get_request]   s    D{D///r   c                    	 	  # t           $ r   t          j        }t          d|           t          d|           t          dt	          j                    j        z  |           t          d||           t          dt          |          |           t          j	        |           t          d|           t          d|           t          j        d	           Y d S xY w)
Nz)
----------------------------------------filezUnhandled server exception!z
Thread: %szClient Address: z	Request: z#
*** Unrecoverable, server exiting!z(----------------------------------------r   )
SystemExitsys
__stderr__print	threadingcurrent_threadnamerepr	traceback	print_excos_exit)r)   requestclient_addresserfs       r	   handle_errorzRPCServer.handle_errora   s    		 	 	 	
	.C-c****/c::::,!9!;!;!@@sKKKK$n3????+tG}}37777S))))8sCCCC&s####HQKKKKKKs
    C C'r   )r   r   r   r(   r.   r3   r5   rH   r!   r   r	   r#   r#   I   sh        B B B B
  1 1 10 0 0    r   r#   c                       e Zd ZdZd dZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdZdZdZd Zd Zd Zd Zd Zd Z d Z!dS )!SocketIOr   Nc                     t          j                    | _        ||| _        || _        |t
          }|| _        i | _        i | _        d S r   )	r=   r>   
sockthread	debuggingsockobjecttableobjtable	responsescvars)r)   rN   rP   rM   s       r	   r(   zSocketIO.__init__   sJ    #244 &DN	"H 


r   c                 R    | j         }d | _         ||                                 d S d S r   )rN   close)r)   rN   s     r	   rT   zSocketIO.close   s/    y	JJLLLLL r   c                 0    	 t          j        d           d S Nr   )rC   rD   r-   s    r	   exithookzSocketIO.exithook   s    +
r   c                     | j         sd S | j        dz   t          t          j                    j                  z   }|D ]}|dz   t          |          z   }t          |t          j                   d S )N r7   )	rM   locationstrr=   r>   r?   r<   r:   r;   )r)   argssas       r	   debugzSocketIO.debug   sv    ~ 	FMC#i&>&@&@&E"F"FF 	! 	!AC#a&& AAacn%%%%%%r   c                     || j         |<   d S r   )rP   )r)   oidobject_s      r	   registerzSocketIO.register   s    $cr   c                 :    	 | j         |= d S # t          $ r Y d S w xY wr   )rP   KeyErrorr)   ra   s     r	   
unregisterzSocketIO.unregister   s9    	c""" 	 	 	DD	s    
c                 &   |                      d|           	 |\  }\  }}}}n# t          $ r Y dS w xY w|| j        vrdd|fS | j        |         }|dk    ri }	t          ||	           d|	fS |dk    ri }
t	          ||
           d|
fS t          ||          sdd|fS t          ||          }	 |d	k    r0 ||i |}t          |t                    rt          |          }d|fS |d
k    r!t                              ||||ff           dS dd|z  fS # t          $ r  t          $ r  t          $ r  t          $ r}d|fcY d }~S d }~w d}t!          ||||fz  t"          j                   t'          j        t"          j                   Y dS xY w)Nz
localcall:)ERRORzBad request formatri   zUnknown object id: __methods__OK__attributes__zUnsupported method name: CALLQUEUE)QUEUEDNzUnsupported message type: %sCALLEXCzU*** Internal Error: rpc.py:SocketIO.localcall()

 Object: %s 
 Method: %s 
 Args: %s
r7   )	EXCEPTIONN)r_   	TypeErrorrP   _getmethods_getattributeshasattrgetattr
isinstanceRemoteObject	remoterefrequest_queueputr9   KeyboardInterruptOSError	Exceptionr<   r:   r;   rA   rB   )r)   seqrE   howra   
methodnamer\   kwargsr   methods
attributesmethodretexmsgs                  r	   	localcallzSocketIO.localcall   sT   

<)))	33:0C0#z4 	3 	3 	3222	3dm##:3::;;mC &&GW%%%'?")))J3
+++*%%sJ'' 	IGGGHHj))	'f}}fd-f--c<00 )#C..Cc{"!!3v(>"?@@@&&!?#!EFF 	 	 	  	 	 	 	 	 	 	# 	# 	#r?""""""	'<C#fd++#.AAAAS^4444&&&s7   
# 
1115D '%D D (F=E FAFc                     |                      d||           |                     ||||          }|                     |          S )Nzremotecall:asynccall: )r_   	asynccallasyncreturnr)   ra   r   r\   r   r   s         r	   
remotecallzSocketIO.remotecall   sD    

+S*===nnS*dF;;$$$r   c                     |                      d||           |                     ||||          }|                     |          S )Nzremotequeue:asyncqueue: )r_   
asyncqueuer   r   s         r	   remotequeuezSocketIO.remotequeue   sD    

-sJ???ooc:tV<<$$$r   c                    d||||ff}|                                  }t          j                    | j        k    rt          j                    }|| j        |<   |                     d|z  ||||           |                     ||f           |S )Nrm   zasynccall:%d:newseqr=   r>   rL   	ConditionrR   r_   
putmessager)   ra   r   r\   r   rE   r   cvars           r	   r   zSocketIO.asynccall   s    CT6:;kkmm#%%88&((D"DJsO

Oc)CT6JJJg'''
r   c                    d||||ff}|                                  }t          j                    | j        k    rt          j                    }|| j        |<   |                     d|z  ||||           |                     ||f           |S )Nrn   zasyncqueue:%d:r   r   s           r	   r   zSocketIO.asyncqueue   s    S*dF;<kkmm#%%88&((D"DJsO

$s*S*dFKKKg'''
r   c                     |                      d|z             |                     |d          }|                      d|z  |           |                     |          S )Nz#asyncreturn:%d:call getresponse(): 皙?)waitzasyncreturn:%d:response: )r_   getresponsedecoderesponse)r)   r   responses      r	   r   zSocketIO.asyncreturn   s`    

83>???##Cd#33

/#5AAA""8,,,r   c                 z   |\  }}|dk    r|S |dk    rd S |dk    r|                      d           d S |dk    r+|                      d           |                                  d S |dk    r%|                      d|           t          |          |d	k    r|                      d
|           |t          ||          )Nrk   ro   rq   zdecoderesponse: EXCEPTIONEOFzdecoderesponse: EOFri   zdecoderesponse: Internal ERROR:rp   zdecoderesponse: Call Exception:)r_   decode_interrupthookRuntimeErrorSystemError)r)   r   r   whats       r	   r   zSocketIO.decoderesponse   s    	T$;;K(??4+JJ23334%<<JJ,---%%'''4'>>JJ8$???t$$$)JJ8$???J#t$$$r   c                     	 t           r   )EOFErrorr-   s    r	   r   zSocketIO.decode_interrupthook  s
    
r   c                     	 	 |                      d d           d S # t          $ r |                     d           Y d S w xY w)Nr   )myseqr   zmainloop:return)r   r   r_   r-   s    r	   mainloopzSocketIO.mainloop  s`    		4d33333 	 	 	JJ()))FF	s    ??c                 z    |                      ||          }|"|\  }}|dk    r||                     |          f}|S )Nrk   )_getresponse_proxify)r)   r   r   r   r   r   s         r	   r   zSocketIO.getresponse"  sJ    $$UD11 ICd{{d 3 33r   c                     t          |t                    rt          | |j                  S t          |t                    r"t	          t          | j        |                    S |S r   )rw   RemoteProxyRPCProxyra   listmapr   )r)   r   s     r	   r   zSocketIO._proxify*  sW    c;'' 	+D#'***c4   	1DM3//000
r   c                    |                      d|           t          j                    | j        u r	 |                     ||          }||S | j        |         }|                                 || j        vr|                                 || j        v| j        |         }|                      d|d|           | j        |= | j        |= |	                                 |S )Nz_getresponse:myseq:Tz_getresponse:z: thread woke up: response: )
r_   r=   r>   rL   pollresponserR   acquirerQ   r   release)r)   r   r   r   r   s        r	   r   zSocketIO._getresponse2  s    

(%000#%%88$,,UD99'#O$ :e$DLLNNNt~--		 t~--~e,HJJJxx) * * *u%
5!LLNNNOr   c                 (    | j         dz   x| _         }|S )N   )nextseq)r)   r   s     r	   r   zSocketIO.newseqH  s    !\A--s
r   c                 f   |                      d|d         z             	 t          |          }n=# t          j        $ r+ t	          dt          |          t          j                    w xY wt          j	        dt          |                    |z   }t          |          dk    r	 t          j        g | j        gg           \  }}}| j                            |d t                             }n$# t          t           f$ r t#          d          w xY w||d          }t          |          dk    d S d S )Nzputmessage:%d:r   zCannot pickle:r7   <izsocket no longer exists)r_   r   picklePicklingErrorr<   r@   r:   r;   structpacklenselectrN   sendBUFSIZEAttributeErrorrr   r}   )r)   messager]   rwxns          r	   r   zSocketIO.putmessageL  s0   

#gaj0111	gAA# 	 	 	"DMMGGGG	 Kc!ff%%)!ffqjj9 -TYK<<1aINN1XgX;//"I. 9 9 978889!""A !ffqjjjjjjs   0 :A*&AC. .!Dr      c                    |                                   t          | j                  | j        k     rt	          j        | j                                        gg g |          \  }}}t          |          dk    rd S 	 | j                            t                    }n# t          $ r t          w xY wt          |          dk    rt          | xj        |z  c_        |                                   |                                 S rV   )_stage0r   buffbufneedr   rN   filenorecvr   r}   r   _stage1)r)   r   r   r   r   r]   s         r	   
pollpacketzSocketIO.pollpacket`  s    ty>>DL((mTY%5%5%7%7$8"b$GGGAq!1vv{{tINN7++   1vv{{IINIILLNNN||~~s   ;B B-c                     | j         dk    rdt          | j                  dk    rN| j        d d         }| j        dd          | _        t          j        d|          d         | _        d| _         d S d S d S )Nr   r   r      )bufstater   r   r   unpackr   )r)   r]   s     r	   r   zSocketIO._stage0p  sr    =A#di..A"5"5	"1"A	!""DI!=q11!4DLDMMM	 "5"5r   c                     | j         dk    rZt          | j                  | j        k    r?| j        d | j                 }| j        | j        d          | _        d| _        d| _         |S d S d S )Nr   r   r   )r   r   r   r   )r)   packets     r	   r   zSocketIO._stage1w  sj    =A#di..DL"@"@Y}}-F	$,--0DIDLDMM "@"@r   c                    |                      |          }|d S 	 t          j        |          }n# t          j        $ r t	          dt
          j                   t	          dt          |          t
          j                   t          j	        t
          j                   t	          dt
          j                    w xY w|S )Nz-----------------------r7   zcannot unpickle packet:)
r   r   r   UnpicklingErrorr<   r:   r;   r@   rA   print_stack)r)   r   r   r   s       r	   pollmessagezSocketIO.pollmessage  s    &&>4	l6**GG% 	 	 	+#.AAAA+T&\\OOOO!s~6666+#.AAAA	 s
   0 BB?c                 N   	 	 	 t                               d          }|\  }}|d|ff}|                     |           n# t          j        $ r Y nw xY w	 |                     |          }|d S n1# t          $ r |                                  Y d S t          $ r Y d S w xY w|\  }}|d         }| 	                    d||fz             |dv ro| 	                    d|z             | 
                    ||          }| 	                    d||fz             |dk    r|                     ||f           n|d	k    r	 8||k    r|S | j                            |d           }	|	F|	                                 || j        |<   |	                                 |	                                 )
NTr   rk   zpollresponse:%d:myseq:%s)rm   rn   zpollresponse:%d:localcall:call:z%pollresponse:%d:localcall:response:%srm   rn   )response_queuegetr   queueEmptyr   r   
handle_EOFr   r_   r   rR   r   rQ   notifyr   )
r)   r   r   qmsgr   r   r   resqr   cvs
             r	   r   zSocketIO.pollresponse  s   	,0	)%))!,, !%Xx 01(((( ;   **400?4 #   !!!tt!   ttICq'CJJ1S%L@AAA'''

<sBCCC>>#t44

B!8_- . . .&==OOS(O4444G^^ Z^^C.. >JJLLL*.DN3'IIKKKJJLLLs'   ? AAA/ /B	BBc                 <   	 |                                   |                     d           | j        D ]U}| j        |         }|                                 d| j        |<   |                                 |                                 V|                                  d S )Nr   )r   N)EOFhookr_   rR   r   rQ   r   r   rW   )r)   keyr   s      r	   r   zSocketIO.handle_EOF  s    5

<   : 	 	CCBJJLLL"/DN3IIKKKJJLLLLr   c                     	 d S r   r!   r-   s    r	   r   zSocketIO.EOFhook  s
    Lr   )NN)"r   r   r   r   r(   rT   rW   r_   rc   rg   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r   r	   rJ   rJ      s       G	 	 	 	    & & &% % %  ,' ,' ,'\% % %
% % %
    - - -% % %*          ,      DGH         G G GR      r   rJ   c                       e Zd ZdS )rx   N)r   r   r   r!   r   r	   rx   rx     s        Dr   rx   c                 R    t          |           }| t          |<   t          |          S r   )idrO   r   )r   ra   s     r	   ry   ry     s%    
S''CKsr   c                       e Zd Zd ZdS )r   c                     || _         d S r   )ra   rf   s     r	   r(   zRemoteProxy.__init__  s    r   N)r   r   r   r(   r!   r   r	   r   r     s#            r   r   c                   (    e Zd ZdZdZd Zd Zd ZdS )r%   Fz#Sc                     | |_         t                              | |           t          j                            | |||           d S r   )current_handlerrJ   r(   r&   BaseRequestHandler)r)   rN   r*   svrs       r	   r(   zRPCHandler.__init__  sC    "$%%%'00tT3GGGGGr   c                 0    	 |                                   d S r   )r   r-   s    r	   handlezRPCHandler.handle  s    2r   c                 "    t          | |          S r   r   rf   s     r	   get_remote_proxyzRPCHandler.get_remote_proxy      c"""r   N)r   r   r   rM   rZ   r(   r   r   r!   r   r	   r%   r%     sN        IHH H H
  # # # # #r   r%   c                   F    e Zd ZdZdZdZej        ej        fdZ	d Z
d ZdS )	RPCClientFz#Cr   c                     t          j         ||          | _        | j                            |           | j                            d           d S Nr   )r0   listening_sockbindlisten)r)   addressfamilytypes       r	   r(   zRPCClient.__init__  sJ    $mFD99  )))""1%%%%%r   c                 "   | j                                         \  }}| j        rt          d|t          j                   |d         t          k    rt                              | |           d S t          d|t          j                   t          )Nz****** Connection request from r7   r   z** Invalid host: )
r   acceptrM   r<   r:   r;   	LOCALHOSTrJ   r(   r}   )r)   working_sockr  s      r	   r  zRPCClient.accept  s     $ 3 : : < <g> 	S3W3>RRRR1:""dL11111%wS^DDDDMr   c                 "    t          | |          S r   r   rf   s     r	   r   zRPCClient.get_remote_proxy"  r   r   N)r   r   r   rM   rZ   r   r0   AF_INETSOCK_STREAMr(   r  r   r!   r   r	   r   r     s_        IHG'-~F<N & & & &
  # # # # #r   r   c                   .    e Zd ZdZdZd Zd Zd Zd ZdS )r   Nc                 "    || _         || _        d S r   )sockiora   )r)   r  ra   s      r	   r(   zRPCProxy.__init__+  s    r   c                 R   | j         |                                  | j                             |          rt          | j        | j        |          S | j        |                                  || j        v r%| j                            | j        d|fi           }|S t          |          )N__getattribute__)
_RPCProxy__methods_RPCProxy__getmethodsr   MethodProxyr  ra   _RPCProxy__attributes_RPCProxy__getattributesr   r   )r)   r?   values      r	   __getattr__zRPCProxy.__getattr__/  s    >!>d## 	<t{DHd;;;$  """4$$$K**485G,07B8 8EL &&&r   c                 T    | j                             | j        ddi           | _        d S )Nrl   r!   )r  r   ra   r  r-   s    r	   __getattributeszRPCProxy.__getattributes=  s/     K22480@"bJ Jr   c                 T    | j                             | j        ddi           | _        d S )Nrj   r!   )r  r   ra   r  r-   s    r	   __getmethodszRPCProxy.__getmethodsA  s,    //0=r2G Gr   )	r   r   r   r  r  r(   r  r  r  r!   r   r	   r   r   &  sb        IL  ' ' 'J J JG G G G Gr   r   c                     t          |           D ]&}t          | |          }t          |          rd||<   't          | t                    r| j        D ]}t          ||           d S d S r   )dirrv   callablerw   r  	__bases__rs   )r   r   r?   attrsupers        r	   rs   rs   E  s     C  sD!!D>> 	GDM#t (] 	( 	(Ew''''( (	( 	(r   c                 r    t          |           D ]&}t          | |          }t          |          sd||<   'd S r   )r  rv   r  )r   r   r?   r   s       r	   rt   rt   P  sI    C ! !sD!!~~ 	! Jt! !r   c                       e Zd Zd Zd ZdS )r  c                 0    || _         || _        || _        d S r   )r  ra   r?   )r)   r  ra   r?   s       r	   r(   zMethodProxy.__init__Y  s    			r   c                T    | j                             | j        | j        ||          }|S r   )r  r   ra   r?   )r)   r\   r   r  s       r	   __call__zMethodProxy.__call__^  s&    &&txD&IIr   N)r   r   r   r(   r&  r!   r   r	   r  r  W  s2          
    r   r  c                    	 | d S d t           _        t          |           }	 t          j                            |           n]# t          $ rP d}|                    |d          }|                    |d          }t          j                            |           Y nw xY wt          j                            d           | t           _        d S )Nasciibackslashreplacestrict
)	builtins_r@   r:   stdoutwriteUnicodeEncodeErrorencodedecode)r  textencodingbytess       r	   displayhookr6  f  s    C}HJ;;D
   H&899||Hh//
 JTHJJJs   A ABB__main__)mainzidlelib.idle_test.test_rpcr   )	verbosityr   )+r,  r   r   r   rC   r   r   r   r0   r&   r   r:   r=   rA   r   r
   r   r   Picklerr   r   r  r'   r#   rO   Queuerz   r   rJ   rx   ry   r   r   r%   r   r   rs   rt   r  r6  r   unittestr8  r!   r   r	   <module>r=     s  8   				  				          



                   M M M M M&. M M M 	. . . . .& . . .d AQe e e e e e e eR	 	 	 	 	 	 	 	
         # # # # #0( # # #$# # # # # # # #4G G G G G G G G>	( 	( 	(! ! !	 	 	 	 	 	 	 	  & zD	%444444 r   