a ÖâÏh”ã@s ddlmZddlmZddlZddlZddlZddlZddlZddl m Z m Z ddl Z ddl ZddlZddlZddlTddlmZddlTddlmZmZddlTgd¢Ze d ¡Ze d ¡Ze d ¡Zed d ƒZdAdd„Zdd„Z dd„Z!dd„Z"dd„Z#dd„Z$dd„Z%dd„Z&dd„Z'Gd d!„d!e j ƒZ(e  )e(¡Gd"d#„d#e*ƒZ+e+d$e,ƒe+d%e-ƒe+d&e,ƒgZ.Gd'd(„d(e*ƒZ/Gd)d*„d*e*ƒZ0e0ƒZ1d+d,„Z2d-d.„Z3d/d0„Z4d1d2„Z5Gd3d4„d4e*ƒZ6Gd5d6„d6e*ƒZ7Gd7d8„d8e7ƒZ8Gd9d:„d:ƒZ9Gd;d<„d„d>e7e:ƒZ;Gd?d@„d@e*ƒZ %s) ÚreÚcompileÚ log_debugÚsplitÚsearchÚgroupÚlowerrÚ map_familyÚSocketÚAF_INETÚappend) Ú addr_stringÚ default_portÚsocket_addressesZ family_reÚaddrsZcfg_addrÚmatchZ family_tagÚaddressÚfamilyÚsocket_address©r.ú6/usr/lib/python3.9/site-packages/setroubleshoot/rpc.pyrEs.        rcCstddtƒ}|S)NZ connectionr')rÚint)r'r.r.r/rds rcCst|dƒ}t|ƒ}|S)NZ address_list)rr)Z cfg_sectionr&r(r.r.r/ris rcCs tdƒ}t|ƒdkrdS|dS)NZclient_connect_tor)rÚlen)Z addr_listr.r.r/ros rcCsŽg}|tj@r| d¡|tj@r,| d¡|tj@r@| d¡|tj@rT| d¡|tj@rh| d¡|tj@r|| d¡d|d |¡fS) NÚINZOUTZPRIZERRÚHUPZNVALz(%d)[%s]ú,) rÚIO_INr%ZIO_OUTZIO_PRIÚIO_ERRÚIO_HUPÚIO_NVALÚjoin)Ú io_conditionÚnamesr.r.r/Úio_condition_to_stringvs            r<cKs>dt|ƒ}t| ¡ƒD]\}}|d||f7}q|d7}|S)Nzcontent-length: %d z%s: %s z )r1ÚlistÚitems)ÚbodyÚkwdsÚhdrÚkeyÚvaluer.r.r/Ú rpc_header‰s  rDcCst|||d}||S)N)Úrpc_idÚtype)rD)rErFr?rAr.r.r/Ú rpc_message‘srGc Csþd}}}}zÐt |¡}| ¡}| d¡}| d¡}t ||¡}t|dƒ}tt|ƒƒ}|D]n}| d¡}| d¡} t | d¡ƒ} |j | } | j dur¾| dkr°| j ||d} qÄ|   |j ¡} n|j } | || <q^W|durô|  ¡n|durò|  ¡0|||fS) NÚ interfaceÚmethodÚargÚnamerFÚpositionÚxml)Zobj_name)Úlibxml2ZparseDocZgetRootElementZproprÚ get_rpc_defr Úpreextend_listr1r0Úpositional_argsÚobj_typeZcontentÚfreeDoc) ÚcmdrHrIÚargsÚdocÚrpc_defZ arg_nodesÚarg_nodeÚarg_nameZarg_typeZ arg_positionÚrpc_argÚ arg_valuer.r.r/Úconvert_rpc_xml_to_args–s2           ÿ r\c GsXd}}z4|j}|j}t d¡}t d¡}| d|¡| d|¡| |¡d}|jD]²} | j} ||} t d¡} |  | ¡|  d| ¡|  dt |ƒ¡t | tj ƒr¾|  d d ¡|   | ¡nDt | d ƒrè|  d d ¡|   |  || ¡¡n|  d d ¡|  t | ƒ¡|d 7}qX| dt |ƒ¡|jtd d}W|durT| ¡n|durR| ¡0|S)Nz1.0rTrHrIrrJrKrLrFrMÚ get_xml_nodesÚstringrÚ arg_count)ÚencodingÚformat)rHrIrNZnewDocZnewNodeZsetPropZsetRootElementrQrKZaddChildÚstrÚ isinstanceZxmlNodeÚhasattrr]Z addContentZ serializerrS) rErWrUZtext_docrVrHrIÚrootrLrZrYr[rXr.r.r/Úconvert_rpc_to_xml¿sB                  ÿ  rfc@sîeZdZdZdZdZdZdZdZdZ eeBeBeBeBeBe BZ eeBZ eeBeBe BZ eded ed ed ed ed e diZ eeeeeee gZdejjdejejejffiZdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zd#d!d"„ZdS)$rréééé é@é€Ú CONNECTINGÚOPENÚ AUTHENTICATEDr3ÚERRORÚTIMEOUTÚRETRYÚchangedNcCs*tj |¡d|_d|_d|_| ¡dS©Nr)rÚ__init__ÚflagsÚ result_codeÚ result_msgÚ clear_result©Úselfr.r.r/rus  zConnectionState.__init__cCsd| |j¡|j|jfS)Nz'flags=%s, result_code=%d, result_msg=%s)Úflags_to_stringrvrwrxrzr.r.r/Ú__str__ sÿzConnectionState.__str__cCs| d|j¡dSrt)ÚupdateÚ ALL_FLAGSrzr.r.r/ÚclearszConnectionState.clearcCs>|dur d}g}tjD]}||@r| tj|¡qd |¡S)Nrr4)rÚconnection_statesr%Úmap_connection_enum_to_stringr9)r{Úvalr;Ústater.r.r/r|s zConnectionState.flags_to_stringcCsd|_d|_dS)NrÚ©rwrxrzr.r.r/ryszConnectionState.clear_resultcCs||_||_dS©Nr†)r{rwrxr.r.r/Ú set_result!szConnectionState.set_resultcCs |j|jfSr‡r†rzr.r.r/Ú get_result%szConnectionState.get_resultrr…c Csf|j}|j|O_|j|M_||_||_||jA}|j|@}||@}|rb| d|j||¡dS)Nrs)rvrwrxÚemit) r{Ú add_flagsÚ remove_flagsrwrxZprevious_flagsÚ differenceZ flags_addedZ flags_removedr.r.r/r~(s  zConnectionState.update)rrrr…)Ú__name__Ú __module__Ú __qualname__rmrnror3rprqrrrÚ GOOD_FLAGSÚ PROBLEM_FLAGSr‚rrZ SignalFlagsZRUN_LASTZTYPE_INTZ __gsignals__rur}r€r|ryrˆr‰r~r.r.r.r/rès<ù þ rc@seZdZddd„Zdd„ZdS)ÚRpcArgNcCs||_||_dSr‡©rKrR)r{rKrRr.r.r/ru@szRpcArg.__init__cCs6|jdurd}n|j}|jdur$|Sd||jfSdS)NZname_undefinedú%s:%sr”)r{rKr.r.r/r}Ds   zRpcArg.__str__)NN)rŽrrrur}r.r.r.r/r“>s r“rIÚerr_codeÚerr_msgc@sLeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dS)Ú RpcDefinitioncCs2||_||_||_d|_|dur(g|_n||_dSr‡)rFrHrIÚcallbackrQ)r{rFrHrIZrpc_argsr.r.r/ruUszRpcDefinition.__init__cCs€g}|jdurH|jD]2}|jdur:| d|j|jf¡q| |j¡qd|j|j|jd |¡f}|jdkr||d|j7}|S)Nr•z[%s] %s:%s (%s)r4rIz callback=%s) rQrRr%rKrFrHrIr9r™)r{rUrZÚtextr.r.r/r}_s    zRpcDefinition.__str__cCs ||_dSr‡)rF)r{rFr.r.r/Úset_typelszRpcDefinition.set_typecCs(|jdurt |j¡}||j=||_dSr‡)r™rÚ get_interfacerH)r{r™Úinterface_dictr.r.r/Ú set_callbackos  zRpcDefinition.set_callbackcCsf|jdkrtd|jƒ‚|jdurVd|j}td|j|dƒ}t |j||¡||_|St |j|j¡S)NrIz"%s rpc types do not have callbacksz%s_default_callbackÚ method_return) rFÚ ValueErrorr™rIr˜rHrÚregister_rpc_defrO)r{Z callback_nameZ callback_defr.r.r/Úget_callback_defus   zRpcDefinition.get_callback_defcCsF|durBtt|ƒ|jtƒ|_d}|D]}|j|}||_|d7}q$dS©Nrr)rPr1rQr“rK)r{Ú arg_namesrLrYrZr.r.r/Úset_positional_args€s z!RpcDefinition.set_positional_argscGsF|durBtt|ƒ|jtƒ|_d}|D]}|j|}||_|d7}q$dSr£)rPr1rQr“rR)r{Z obj_typesrLrRrZr.r.r/Úset_arg_obj_types‰s zRpcDefinition.set_arg_obj_typescCsdd„|jDƒS)NcSsg|] }|j‘qSr.)rK)Ú.0rZr.r.r/Ú “óz:RpcDefinition.get_positional_arg_names..)rQrzr.r.r/Úget_positional_arg_names’sz&RpcDefinition.get_positional_arg_namesN) rŽrrrur}r›ržr¢r¥r¦rªr.r.r.r/r˜Ss     r˜c@sLeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dS)ÚInterfaceRegistrycCs i|_dSr‡)Ú interfacesrzr.r.r/rušszInterfaceRegistry.__init__cCstd|dtƒ}d|iS)NÚ error_returnÚ _error_return)r˜Úerror_positional_args)r{rHZerror_return_defr.r.r/Ú new_interfaceszInterfaceRegistry.new_interfacecCs,|j |¡}|dur(| |¡}||j|<|Sr‡)r¬Úgetr°)r{Úinterface_namerHr.r.r/rœ¡s    zInterfaceRegistry.get_interfacecCsTddl}|j}t| |¡jƒ}|ddkr0|d=| ||¡}| |¡| |¡|S)Nrr{)ÚinspectrŽr=Z signatureÚ parametersrOr›r¥)r{rFrHÚ method_ptrr³rIrQrWr.r.r/Ú set_rpc_def¨s    zInterfaceRegistry.set_rpc_defcCsL| |¡}t|tƒr|j}| |¡}|durHtd||dƒ}| |||¡|Sr‡)rœrcÚ MethodTyperŽr±r˜r¡)r{rHrIrrWr.r.r/rO´s   zInterfaceRegistry.get_rpc_defcCs&| |¡}t|tƒr|j}|||<dSr‡)rœrcr·rŽ)r{rHrIrWrr.r.r/r¡¾s  z"InterfaceRegistry.register_rpc_defcCs| |¡}|dS)Nr®)rœ)r{rHrr.r.r/Úget_error_rpc_defÄs z#InterfaceRegistry.get_error_rpc_defcCspt|j ¡ƒ}| ¡|D]P}|j|}td|ƒt| ¡ƒ}| ¡|D]}||}tdt|ƒƒqLqdS)Nz Interface: %sz %s)r=r¬ÚkeysÚsortÚprintrb)r{Zinterface_namesr²rHZ method_namesZ method_namerIr.r.r/Údump_interfacesÈs   z!InterfaceRegistry.dump_interfacesN) rŽrrrur°rœr¶rOr¡r¸r¼r.r.r.r/r«˜s  r«cs‡fdd„}|S)Ncs,t dˆ|¡}|j‰‡‡fdd„}d|_|S)NrIcsB| ¡}t ˆˆ¡}t||ƒ}||j|<|j|d|g|¢RŽ|S)NrI)Ú new_rpc_idrrOÚAsyncRpcÚasync_rpc_cacheÚemit_rpc)r{rUrErWÚ async_rpc©rHrIr.r/Úrpc_funcÞs    z/rpc_method..decorator..rpc_funcT©rr¶rŽÚ_rpc_definition©rµrWrérH©rIr/Ú decoratorÚs zrpc_method..decoratorr.©rHrÉr.rÇr/r Ùs r cs‡‡fdd„}|S)Ncs |j}t ˆ|¡}|jˆŽ|Sr‡)rŽrrOr¦)rµrIrW©Ú arg_typesrHr.r/rÉës  zrpc_arg_type..decoratorr.)rHrÌrÉr.rËr/r êsr cs‡‡fdd„}|S)Ncs0t dˆ|¡}t ˆˆ¡}| |j¡d|_|S)NrŸT)rr¶rOržrIrÅ)rµÚrpc_callback_defrWrÂr.r/rÉôs   zrpc_callback..decoratorr.)rHrIrÉr.rÂr/r ósr cs‡fdd„}|S)Ncs,t dˆ|¡}|j‰‡‡fdd„}d|_|S)NÚsignalcs.| ¡}t ˆˆ¡}|j|d|g|¢RŽdS)NrÎ)r½rrOrÀ)r{rUrErWrÂr.r/rÃs z/rpc_signal..decorator..rpc_funcTrÄrÆrÇrÈr/rÉþs zrpc_signal..decoratorr.rÊr.rÇr/r ýs r c@sdeZdZddeƒdfdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z e dd„ƒZ dd„Z dd„Z dS)rNcCsLt |¡|_||_||_||_tj|_d|_ ||_ |durH|  |j|¡dSr‡) rr"r,r+Úportr'r#Z SOCK_STREAMrFÚsocketÚ friendly_nameÚparse)r{r,r+r'rÑr.r.r/rus zSocketAddress.__init__cCsbt ddt|jƒ¡}|jdur"dS|jtjur$z\1ÚNonez{unix}%s socket=%sz{inet}%s:%s socket=%sÚunknown) rÚsubÚreprrÐr,r#ÚAF_UNIXr+r$rÏ)r{Z socket_reprr.r.r/r}s   zSocketAddress.__str__cCsL|jdurdS|jtjur$d|jS|jtjur@d|j|jfStdƒSdS)NrÓz%sr•ZUnknown)r,r#r×r+r$rÏÚ_rzr.r.r/Ú_get_default_friendly_name&s    z(SocketAddress._get_default_friendly_namecCs|jdur| ¡S|jSr‡)rÑrÙrzr.r.r/Úget_friendly_name0s zSocketAddress.get_friendly_namecCsddl}| |¡Srt)Úcopy)r{rÛr.r.r/rÛ5szSocketAddress.copycCs2|jtjur|jS|jtjur*|j|jfSdSdSr‡)r,r#r×r+r$rÏrzr.r.r/Úget_py_address9s    zSocketAddress.get_py_addresscCs0t|tjƒr,| ¡}tjtjdœ |¡}|S|S)N)ZunixZinet)rcÚsixZ string_typesr!r#r×r$r±)r,r.r.r/r"As  zSocketAddress.map_familycCs6||_|tjur||_d|_n|tjur2| |¡dSr‡)r,r#r×r+rÏr$Úparse_inet_addr)r{r,Úaddrr.r.r/rÒIs   zSocketAddress.parsecCs^t d|¡}|rN| d¡}| d¡}|dur2|j}|dkr@tƒ}||_||_n d|_d|_dS)Nz^\s*([^:\s]+)\s*(:\s*([^\s]+))?réÚhostname)rrr r'Z get_hostnamer+rÏ)r{rßr*rÏr.r.r/rÞQs   zSocketAddress.parse_inet_addr)rŽrrrrur}rÙrÚrÛrÜÚ staticmethodr"rÒrÞr.r.r.r/r s    rc@sNeZdZejejBejBejBZdde ƒfdd„Z dd„Z dd„Z dd „Z dS) Ú ConnectionIONcCs$tƒ|_||_||_||_d|_dSr‡)rÚconnection_stater-Ú channel_typeÚ channel_nameÚ io_watch_id)r{rårær-r.r.r/ruhs zConnectionIO.__init__cCs&| ¡t |jjtj|j|¡|_dS)z-callback signature: (io_object, io_condition)N)Úio_watch_removerZ io_add_watchr-rÐZPRIORITY_DEFAULTÚio_input_conditionsrç©r{r™r.r.r/Ú io_watch_addos  þzConnectionIO.io_watch_addcCs |jdurt |j¡d|_dSr‡)rçrZ source_removerzr.r.r/rèvs  zConnectionIO.io_watch_removecCsš|tjtjBtjB@r’|tj@r>t}t|ƒ}| tjd||¡|tj@rft }t|ƒ}| tj d||¡|tj@rŽt }t|ƒ}| tj d||¡dSdSdS)NrFT) rr7r6r8ÚERR_SOCKET_HUPZ get_strerrorÚclose_connectionrr3ZERR_SOCKET_ERRORrpZERR_IO_INVALID)r{r:ÚerrnoÚstrerrorr.r.r/Úvalid_io_condition{s   zConnectionIO.valid_io_condition)rŽrrrr5r7r6r8rérrurërèrðr.r.r.r/rães rãc@s4eZdZdZdZdd„Zdd„Zdd„Zd d „Zd S) rFécCstj|dd|d||_dS)NZ listeningZserver_listening©rårær-)rãruÚclient_connection_handler_class)r{r-rór.r.r/ru˜szListeningServer.__init__cCsð||_|jjtjkrXtj |jj¡r4t |jj¡n$tj  |j¡}tj |¡sXt  |¡t  |jj|jj ¡|j_ t   |jj  ¡t jt j¡|jr¦|jj  tjtjd¡|jj  |j ¡¡|jjtjkrØt |jjd¡|jj  |j¡|jj S)Nri¶)r-r,r#r×ÚosÚpathÚexistsr+ÚremoveÚdirnameÚmakedirsrÐrFÚfcntlÚfilenoÚF_SETFDÚ FD_CLOEXECÚallow_reuse_addressZ setsockoptZ SOL_SOCKETZ SO_REUSEADDRZbindrÜÚchmodZlistenÚrequest_queue_size)r{r-rõr.r.r/Únew_listening_socketœs   z$ListeningServer.new_listening_socketc Csfz | |j¡|j_| |j¡Wn@ty`}z(|j tj tj dt |ƒ¡WYd}~dSd}~00dS)NéÿÿÿÿFT) rr-rÐrëÚhandle_client_connectÚ Exceptionrär~rrprnrb)r{Úer.r.r/Úopen²szListeningServer.openc CsXzâ| |¡sWdS|tj@ràzN| ¡\}}t | ¡tjtj¡| |j ¡}|  ||¡|j   dt j¡WnttjyÞ}zZt|ƒ\}}t tjd|j |f¡|tjkr²t j} nt j} |j   | d||¡WYd}~n d}~00WnptyR}zVt tjd|jjt|ƒf¡ddl} t|  ¡ƒ|j   t jddt|ƒ¡WYd}~n d}~00dS)NFrz5closing client connection due to socket error(%s): %súexception %s: %srT)rðrr5Zacceptrúrûrürýrór-rrär~rr’r#ÚerrorÚget_error_from_socket_exceptionÚsyslogÚLOG_ERRÚErrnoÚEPIPEr3rprÚ __class__rŽrbÚ tracebackÚ syslog_traceÚ format_exc) r{rÐr:Z client_socketZclient_addressZclient_handlerrrîrïr‹rr.r.r/r»s.       , .z%ListeningServer.handle_client_connectN) rŽrrrþrrurrrr.r.r.r/r“s  rc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) ÚRequestReceivercCs||_| ¡dSr‡)Ú dispatchFuncÚreset)r{rr.r.r/ruÞszRequestReceiver.__init__cCs"d|_d|_d|_d|_d|_dS)Nrrr…)Ú headerLenÚbodyLenÚheaderr?Úfeed_bufrzr.r.r/râs zRequestReceiver.resetcCs²t|jƒdkrdS|jdkrDt |j¡}|r®| ¡|_| ¡qnq®t|jƒ|j|jkr®|j}|j|j}|j||…|_|j|d…|_d|_d|_|  |j |j¡qq®qdS)Nrr) r1rrÚ header_end_rerÚendÚ parse_headerrr?rr)r{r*Z bodyBeginZbodyEndr.r.r/Úprocessés&    zRequestReceiver.processcCs|j|7_| ¡dSr‡)rr)r{Údatar.r.r/ÚfeedszRequestReceiver.feedcCshi|_d}t |j||jd¡}|rT| d¡}| d¡ ¡}||j|<| ¡}q qTq t|jdƒ|_ dS)Nrrrzcontent-length) rÚheader_field_rerrrr Ústriprr0r)r{Zbeginr*rBrCr.r.r/r s   zRequestReceiver.parse_headerN)rŽrrrurrrrr.r.r.r/rÜs rc@sDeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dS)rcCsi|_i|_d|_dSrt)r¿Ú rpc_handlersrErzr.r.r/ruszRpcManage.__init__cCs|jd7_t|jƒS)Nr)rErbrzr.r.r/r½#szRpcManage.new_rpc_idcCsRtdt|jƒ|jfƒt|j ¡ƒ}| ¡|D]}td||j|fƒq2dS)Nz*async_rpc_cache: %d entries, cur rpc_id=%sz%s: %s)rr1r¿rEr=r¹rº)r{Zrpc_idsrEr.r.r/Údump_async_rpc_cache's zRpcManage.dump_async_rpc_cachecCs|j ¡dSr‡)r¿r€rzr.r.r/Úflush_async_rpc_cache.szRpcManage.flush_async_rpc_cachecCst tjd|||f¡dS)Nz [%s] %d %s)r r )r{rIr–r—r.r.r/Údefault_errback1szRpcManage.default_errbackcCs€|durt tjdt¡dS|jdkr@|jD]}||jŽq.n<|jdkr|t|jƒdkrp|jD]}||jŽq^n |j|jŽdS)Nz8process_async_return(): rpc_id=%s not in async_rpc_cacherŸr­r) r r rEÚ return_typeÚ callbacksÚ return_argsr1Úerrbacksr$)r{rÁr™r.r.r/Úprocess_async_return4s    zRpcManage.process_async_returncCs||j|<dSr‡)r!)r{rHZhandlerr.r.r/Úconnect_rpc_interfaceBszRpcManage.connect_rpc_interfaceN) rŽrrrur½r"r#r$r)r*r.r.r.r/rsrc@seZdZeddeƒZeddeƒZd!dd„Zdd„Zd d „Z d d „Z d d„Z dd„Z d"dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd „ZdS)#rrÐZbuf_sizeÚtimeoutNcCs6tj|||ddt |¡t ¡|_t|jƒ|_dS)Nrò) rãrurÚ threadingÚLockÚ write_lockrÚdefault_request_handlerÚreceiver)r{rårær.r.r/ruLs  zRpcChannel.__init__cCsd|j|j|jfS)Nz channel: name=%s addr=%s type=%s)rær-rårzr.r.r/r}RszRpcChannel.__str__cCs|j ¡dSr‡)r.Úacquirerzr.r.r/Úacquire_write_lockUszRpcChannel.acquire_write_lockcCs|j ¡dSr‡)r.Úreleaserzr.r.r/Úrelease_write_lockXszRpcChannel.release_write_lockcCs ||_dSr‡©rå)r{rår.r.r/Úset_channel_type[szRpcChannel.set_channel_typecCs|jSr‡r5rzr.r.r/Úget_channel_type^szRpcChannel.get_channel_typerr…c Cs®td|jƒ| ¡|jjdur&dS|jjdurŠz(|jj tj¡|jj ¡d|j_Wn.tjyˆ}zd|j_WYd}~n d}~00|j   ||t j B||¡|  ¡dS)Nzclose_connection: %s)rr-r#rÐZshutdownr#Z SHUT_RDWRÚcloserrär~rr‘rè)r{r‹rŒrwrxrr.r.r/rías    ÿzRpcChannel.close_connectioncCs*|j |d¡}|durdSt||dƒ}|Sr‡)r!r±Úgetattr)r{rHrIZ handler_objrµr.r.r/Úget_method_implementationrs  z$RpcChannel.get_method_implementationcGs\t|jƒt|ƒkr0t tjdt|ƒ|f¡dSt||g|¢RŽ}t|||ƒ}| |¡dS)Nz3emit_rpc() arg length=%s does not match rpc_def(%s))r1rQr r rfrGÚ send_data)r{rErFrWrUZrpc_xmlZrpc_datar.r.r/rÀys  zRpcChannel.emit_rpcc Csd|jjtj@sdS| ¡z\d}|t|ƒkrt|jj t ||d…dƒ¡}|dkrj|  tj ¡t t |jd‚||}q WnÐtjyÈ}z8t tjd|j¡| ¡|j tj¡WYd}~dSd}~0tjyF}zdt|ƒ\}}t tjd|j|f¡| ¡|tjkrtj }ntj}|  |d||¡WYd}~dSd}~00|j dtj¡| ¡dS)NrzUTF-8)Zdetailzsocket timeout: (%s)z&could not send data on socket (%s): %s)rärvrrnr2r1r-rÐÚsendÚbytesrír3Ú ProgramErrorrìr#r+r r r4r~rqrr r r rpr’)r{rZ totalSentÚsentrrîrïr‹r.r.r/r;s6    zRpcChannel.send_datac Csbzì| |¡sWdS|tj@rêz:| |j¡}| d¡}t|ƒdkrT| tj ¡WWdSWnvt j yÌ}z\t |ƒ\}}t   t jd|j|f¡|tjkržtj }ntj}| |d||¡WYd}~WdSd}~00|j dtj¡|j |¡Wnpty\}zVt   t jd|jjt|ƒf¡ddl}t| ¡ƒ| tjddt|ƒ¡WYd}~dSd}~00dS)NFzutf-8rzsocket error (%s): %srrT)rðrr5ZrecvÚsocket_buf_sizeÚdecoder1rírr3r#rr r r r-r r rprär~r’r0rrrrŽrbrrr) r{rÐr:rrrîrïr‹rr.r.r/Úhandle_client_ioŸs6          zRpcChannel.handle_client_iocCsx|j |d¡}|dur,t tjd|¡dStd|jj|||jj|jj |fƒt |ƒ\}}}||_ ||_ |  |¡dS)Nz1handle_return(): rpc_id=%s not in async_rpc_cachez/%s.handle_return: rpc_id=%s type=%s %s.%s, {%s})r¿Úpopr r rrrŽrWrHrIr\r%r'r))r{rFrEr?rÁrHrIrUr.r.r/Ú handle_returnÁs$zRpcChannel.handle_returnc Csö| dd¡}| dd¡}td|jj|||fƒ|dks@|dkrR| |||¡n |dkr@t|ƒ\}}}| ||¡}|r zB||Ž} | dur’g} t ||¡} |   ¡} |j |d| g| ¢RŽWnHt y} z.t  |¡} |  |d| || j | j¡WYd} ~ n d} ~ 00n4tj}d||jjf}t  |¡} |  |d| |||¡n²|d kràt|ƒ\}}}| ||¡}|rªz ||ŽWn0t y¦} zt  |¡} WYd} ~ n d} ~ 00n4tj}d||jjf}t  |¡} |  |d| |||¡ntd |||fƒ‚dS) NrErrFz2%s.default_request_handler: rpc_id=%s type=%s {%s}r­rŸrIz,method '%s' is not implemented in class '%s'rÎzunknown type(%s) for %s:%s)r±rrrŽrDr\r:rrOr¢rÀr>r¸rîrïr ZENOSYSr )r{rr?rErFrHrIrUrµr'Zrpc_method_defrÍrZ rpc_error_defr–r—r.r.r/r/ÎsH      0    " z"RpcChannel.default_request_handler)NN)rrrr…)rŽrrrr0r@Zsocket_timeoutrur}r2r4r6r7rír:rÀr;rBrDr/r.r.r.r/rHs    " rc@s$eZdZdd„Zdd„Zdd„ZdS)r¾cCs(||_||_d|_d|_g|_g|_dSr‡)rWrEr'r%r&r()r{rWrEr.r.r/ruþs zAsyncRpc.__init__cCs|j |¡dSr‡)r&r%rêr.r.r/Ú add_callbackszAsyncRpc.add_callbackcCs|j |¡dSr‡)r(r%)r{Zerrbackr.r.r/Ú add_errback szAsyncRpc.add_errbackN)rŽrrrurErFr.r.r.r/r¾üsr¾)N)=Z __future__rrrÝrNrr rîr Z gi.repositoryrrrôrÐr#rúr,ÚtypesZsetroubleshoot.configrZsetroubleshoot.errcodeZsetroubleshoot.xml_serializerr Zsetroubleshoot.utilÚ__all__rZcontent_length_rerrrrrrrr<rDrGr\rfrZ type_registerÚobjectr“rbr0r¯r˜r«rr r r r rrãrrrrr¾r.r.r.r/Úsb        ))Q E<  X.I@,5