
    z%iTR                     $   	 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j2                  d       Z ej2                  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 !       yy)#    Nc                 2    	 t        j                  |       }|S N)marshalloads)mscos     ?/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/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        ||      }|j                  |        |j	                         S r   )ioBytesIOCodePicklerdumpgetvalue)objprotocolfps       r	   r   r   9   s3    4


AAx AFF3K::<r   c                   @    e Zd Zej                  eiej                  Zy)r   N)__name__
__module____qualname__typesCodeTyper   copyregdispatch_table r   r	   r   r   B   s    nnkLW5K5KLNr   r   i    z	127.0.0.1c                   ,    e Zd ZddZd Zd Zd Zd Zy)	RPCServerNc                 V    |t         }t        j                  j                  | ||       y r   )
RPCHandlersocketserver	TCPServer__init__)selfaddrhandlerclasss      r	   r(   zRPCServer.__init__K   s%    %L''dLAr   c                      	 y r   r!   r)   s    r	   server_bindzRPCServer.server_bindP   s    Jr   c                 P    	 | j                   j                  | j                         y r   )socketconnectserver_addressr-   s    r	   server_activatezRPCServer.server_activateT   s!    	 	D//0r   c                 4    	 | 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 y 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!9!;!@!@@sK$n3?+tG}37S)8sC&s#HHQKs
    CCr   )r   r   r   r(   r.   r3   r5   rH   r!   r   r	   r#   r#   I   s    B
1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!y)!SocketIOr   Nc                     t        j                         | _        ||| _        || _        |t
        }|| _        i | _        i | _        y r   )	r=   r>   
sockthread	debuggingsockobjecttableobjtable	responsescvars)r)   rN   rP   rM   s       r	   r(   zSocketIO.__init__   sF    #224 &DN	"H 
r   c                 P    | j                   }d | _         ||j                          y y r   )rN   close)r)   rN   s     r	   rT   zSocketIO.close   s&    yy	JJL r   c                 0    	 t        j                  d       y Nr   )rC   rD   r-   s    r	   exithookzSocketIO.exithook   s    +
r   c                     | j                   sy | j                  dz   t        t        j                         j
                        z   }|D ]  }|dz   t        |      z   } t        |t        j                         y )N r7   )	rM   locationstrr=   r>   r?   r<   r:   r;   )r)   argssas       r	   debugzSocketIO.debug   sb    ~~MMC#i&>&>&@&E&E"FF 	!AC#a& A	!acnn%r   c                 "    || j                   |<   y r   )rP   )r)   oidobjects      r	   registerzSocketIO.register   s    #cr   c                 >    	 | j                   |= y # t        $ r Y y w xY wr   )rP   KeyErrorr)   ra   s     r	   
unregisterzSocketIO.unregister   s%    	c" 		s    	c                    | j                  d|       	 |\  }\  }}}}|| 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(  r' ||i |}t        |t              rt        |      }d|fS |d
k(  rt        j                  ||||ff       ydd|z  fS # t        $ r Y yw xY w# 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 y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   s   

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

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

-sJ?ooc:tV<$$r   c                    d||||ff}| j                         }t        j                         | j                  k7  r#t        j                         }|| j
                  |<   | j                  d|z  ||||       | j                  ||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:;kkm##%8&&(D"DJJsO

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

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

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

/#5A""8,,r   c                 0   |\  }}|dk(  r|S |dk(  ry |dk(  r| j                  d       y |dk(  r"| j                  d       | j                          y |dk(  r| j                  d|       t        |      |d	k(  r| j                  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(?+JJ23%<JJ,-%%''>JJ8$?t$$)JJ8$?J#t$$r   c                     	 t         r   )EOFErrorr-   s    r	   r   zSocketIO.decode_interrupthook  s
    
r   c                 n    	 	 | j                  d d       y # t        $ r | j                  d       Y y w xY w)Nr   )myseqr   zmainloop:return)r   r   r_   r-   s    r	   mainloopzSocketIO.mainloop  s>    		4d3 	JJ()	s    44c                 h    | j                  ||      }||\  }}|dk(  r|| j                  |      f}|S )Nrk   )_getresponse_proxify)r)   r   r   r   r   r   s         r	   r   zSocketIO.getresponse"  sB    $$UD1 ICd{d 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*  sB    c;'D#''**c4 DMM3/00
r   c                    | j                  d|       t        j                         | j                  u r	 | j	                  ||      }||S | j
                  |   }|j                          || j                  vr|j                          || j                  vr| j                  |   }| j                  d|d|       | j                  |= | j
                  |= |j                          |S )Nz_getresponse:myseq:z_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##%8,,UD9'#O  ::e$DLLNt~~-		 t~~-~~e,HJJx) *u%

5!LLNOr   c                 2    | j                   dz   x| _         }|S )N   )nextseq)r)   r   s     r	   r   zSocketIO.newseqH  s    !\\A--s
r   c                    | j                  d|d   z         	 t        |      }t        j                  dt        |            |z   }t        |      dkD  r^	 t        j                  g | j                  gg       \  }}}| j                  j                  |d t               }||d  }t        |      dkD  r]y y # t        j                  $ r' t	        dt        |      t        j                          w xY w# t        t         f$ r t#        d      w xY w)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  s    

#gaj01	gA KKc!f%)!fqj9 --TYYK<1aIINN1Xg;/ !"A !fqj	 ## 	"DMG	 #I. 97889s   B3 AC0 3:C-0Dr      c                    | j                          t        | j                        | j                  k  rt	        j                  | j
                  j                         gg g |      \  }}}t        |      dk(  ry 	 | j
                  j                  t              }t        |      dk(  rt        | xj                  |z  c_        | j                          | j                         S # t        $ r t        w xY wrV   )_stage0r   buffbufneedr   rN   filenorecvr   r}   r   _stage1)r)   r   r   r   r   r]   s         r	   
pollpacketzSocketIO.pollpacket`  s    tyy>DLL(mmTYY%5%5%7$8"b$GGAq!1v{IINN7+ 1v{IINILLN||~  s   8C   C0c                     | j                   dk(  rbt        | j                        dk\  rI| j                  d d }| j                  dd  | _        t        j                  d|      d   | _        d| _         y y y )Nr   r   r      )bufstater   r   r   unpackr   )r)   r]   s     r	   r   zSocketIO._stage0p  sc    ==A#dii.A"5		"1A		!"DI!==q1!4DLDM	 #6r   c                     | j                   dk(  rjt        | j                        | j                  k\  rG| j                  d | j                   }| j                  | j                  d  | _        d| _        d| _         |S y y )Nr   r   r   )r   r   r   r   )r)   packets     r	   r   zSocketIO._stage1w  sg    ==A#dii.DLL"@YY}-F		$,,-0DIDLDMM #Ar   c                    | j                  |      }|y 	 t        j                  |      }|S # t        j                  $ r t	        dt
        j                         t	        dt        |      t
        j                         t        j                  t
        j                         t	        dt
        j                          w xY w)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    &>	ll6*G  %% 	+#..A+T&\O!!s~~6+#..A	s
   - BCc                    	 	 	 t         j                  d      }|\  }}|d|ff}| j                  |       	 | j                  |      }|y 	 |\  }}|d   }| j                  d||fz         |dv r\| j                  d|z         | j                  ||      }| j                  d||fz         |dk(  r| j                  ||f       n|dk(  r	 ||k(  r|S | j                  j                  |d       }	|	?|	j                          || j                  |<   |	j                          |	j                          /# t        j                  $ r Y w xY w# t        $ r | j                          Y y t        $ r Y y w xY w)	Nr   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   	, )%))!, !%Xx 01(**40? #  ICq'CJJ1S%L@A''

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

B!8_- .&=OOS(O4G^ ZZ^^C. >JJL*.DNN3'IIKJJLY ;;   !! s(   D1 E 1EEE1&E10E1c                 &   	 | j                          | j                  d       | j                  D ]P  }| j                  |   }|j                          d| j                  |<   |j                          |j                          R | j                          y )Nr   )r   N)EOFhookr_   rR   r   rQ   r   r   rW   )r)   keyr   s      r	   r   zSocketIO.handle_EOF  sn    5

< :: 	CCBJJL"/DNN3IIKJJL	 	r   c                      	 y 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Rr   rJ   c                       e Zd Zy)rx   N)r   r   r   r!   r   r	   rx   rx     s    r   rx   c                 @    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y)r   c                     || _         y 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y)r%   Fz#Sc                     | |_         t        j                  | |       t        j                  j                  | |||       y r   )current_handlerrJ   r(   r&   BaseRequestHandler)r)   rN   r*   svrs       r	   r(   zRPCHandler.__init__  s4    "$%''00tT3Gr   c                 &    	 | j                          y 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%     s    IHH
#r   r%   c                   X    e Zd ZdZdZdZej                  ej                  fdZ	d Z
d Zy)	RPCClientFz#Cr   c                     t        j                   ||      | _        | j                  j                  |       | j                  j                  d       y Nr   )r0   listening_sockbindlisten)r)   addressfamilytypes       r	   r(   zRPCClient.__init__  s=    $mmFD9  )""1%r   c                    | j                   j                         \  }}| j                  rt        d|t        j
                         |d   t        k(  rt        j                  | |       y 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  se     $ 3 3 : : <g>>3W3>>R1:"dL1%wS^^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<N &
#r   r   c                   ,    e Zd ZdZdZd Zd Zd Zd Zy)r   Nc                      || _         || _        y r   )sockiora   )r)   r  ra   s      r	   r(   zRPCProxy.__init__+  s    r   c                 r   | j                   | j                          | j                   j                  |      r!t        | j                  | j
                  |      S | j                  | j                          || j                  v r+| j                  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{{DHHd;;$  "4$$$KK**4885G,07B8EL &&r   c                 ^    | j                   j                  | j                  ddi       | _        y )Nrl   r!   )r  r   ra   r  r-   s    r	   __getattributeszRPCProxy.__getattributes=  s'     KK224880@"bJr   c                 ^    | j                   j                  | j                  ddi       | _        y )Nrj   r!   )r  r   ra   r  r-   s    r	   __getmethodszRPCProxy.__getmethodsA  s&    //0=r2Gr   )	r   r   r   r  r  r(   r  r  r  r!   r   r	   r   r   &  s"    IL'JGr   r   c                     t        |       D ]  }t        | |      }t        |      sd||<   ! t        | t              r| j
                  D ]  }t        ||        y y r   )dirrv   callablerw   r  	__bases__rs   )r   r   r?   attrsupers        r	   rs   rs   E  sa     C sD!D>GDM #t]] 	(Ew'	( r   c                 ^    t        |       D ]  }t        | |      }t        |      rd||<   ! y r   )r  rv   r  )r   r   r?   r   s       r	   rt   rt   P  s2    C !sD!~ Jt!r   c                       e Zd Zd Zd Zy)r  c                 .    || _         || _        || _        y r   )r  ra   r?   )r)   r  ra   r?   s       r	   r(   zMethodProxy.__init__Y  s    	r   c                j    | j                   j                  | j                  | j                  ||      }|S r   )r  r   ra   r?   )r)   r\   r   r  s       r	   __call__zMethodProxy.__call__^  s)    &&txxD&Ir   N)r   r   r   r(   r&  r!   r   r	   r  r  W  s    
r   r  c                 t   	 | y d t         _        t        |       }	 t        j                  j                  |       t        j                  j                  d       | t         _        y # t        $ rH d}|j                  |d      }|j                  |d      }t        j                  j                  |       Y {w xY w)Nasciibackslashreplacestrict
)	builtins_r@   r:   stdoutwriteUnicodeEncodeErrorencodedecode)r  textencodingbytess       r	   displayhookr6  f  s    C}HJ;D

 JJTHJ  H&89||Hh/

s   A& &AB76B7__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 	.&& .d AQe eR	 	
 #00( #$# #4G G>	(!	 	& z	%4 r   