HEX
Server: Apache
System: Linux 185.122.168.184.host.secureserver.net 5.14.0-570.52.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Oct 15 06:39:08 EDT 2025 x86_64
User: barbeatleanalyti (1024)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //lib/python3.9/site-packages/setroubleshoot/__pycache__/rpc.cpython-39.pyc
a

U+e��@s ddlmZddlmZddlZddlZddlZddlZddlZddl	m
Z
mZddl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<e*�Z:Gd=d>�d>e7e:�Z;Gd?d@�d@e*�Z<dS)B�)�absolute_import)�print_functionN)�GObject�GLib)�*)�
get_config)�xml_child_elements�xml_get_child_elements_by_name)�
rpc_method�rpc_arg_type�rpc_callback�
rpc_signal�interface_registry�parse_socket_address_list�get_default_port�get_socket_list_from_config�get_local_server_socket_address�ConnectionState�	RpcManage�
RpcChannel�ListeningServer�
SocketAddresszcontent-length:(\d+)z

z([a-zA-Z0-9_-]+):(.*)
Zgeneral�
i18n_encodingcCs�g}t�d�}td|�|s"|St�d|�}|D]v}|s<q2|�|�}|r�|�d���}|�d�}t�|�}	|	dur�td||f�q2n
t	j
}	|}t|	||�}
|�|
�q2td||
f�|S)Nz\s*{(unix|inet)}(.+)z%parse_socket_address_list: input='%s'z[\s,]+��z(unknown socket family - %s in address %sz$parse_socket_address_list: %s --> %s)�re�compile�	log_debug�split�search�group�lowerr�
map_family�Socket�AF_INET�append)�addr_string�default_port�socket_addressesZ	family_reZaddrsZcfg_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)Zcfg_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
)r0�list�items)�body�kwds�hdr�key�valuer-r-r.�
rpc_header�s
rCcCst|||d�}||S)N)�rpc_id�type)rC)rDrEr>r@r-r-r.�rpc_message�srFc
Cs�d}}}}z�t�|�}|��}|�d�}|�d�}t�||�}t|d�}tt|��}|D]n}|�d�}|�d�}	t	|�d��}
|j
|
}|jdur�|	dkr�|j||d�}q�|�|j�}n|j}|||
<q^W|dur�|�
�n|dur�|�
�0|||fS)	N�	interface�method�arg�namerE�position�xml)Zobj_name)�libxml2ZparseDocZgetRootElementZpropr�get_rpc_defr	�preextend_listr0r/�positional_args�obj_typeZcontent�freeDoc)
�cmdrGrH�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|du�rT|��n|du�rR|��0|S)Nz1.0rSrGrHrrIrJrKrErL�
get_xml_nodes�stringr�	arg_count)�encoding�format)rGrHrMZnewDocZnewNodeZsetPropZsetRootElementrPrJZaddChild�str�
isinstanceZxmlNode�hasattrr\Z
addContentZ	serializerrR)
rDrVrTZtext_docrUrGrH�rootrKrYrXrZrWr-r-r.�convert_rpc_to_xml�sB









�

rec@s�eZdZdZdZdZdZdZdZdZ	eeBeBeBeBeBe	BZ
eeBZeeBeBe	BZeded	ed
ededed
e	diZ
eeeeeee	gZdejjdejejejffiZdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd#d!d"�ZdS)$rr���� �@��
CONNECTING�OPEN�
AUTHENTICATEDr2�ERROR�TIMEOUT�RETRY�changedNcCs*tj�|�d|_d|_d|_|��dS�Nr)r�__init__�flags�result_code�
result_msg�clear_result��selfr-r-r.rts
zConnectionState.__init__cCsd|�|j�|j|jfS)Nz'flags=%s, result_code=%d, result_msg=%s)�flags_to_stringrurvrwryr-r-r.�__str__
s�zConnectionState.__str__cCs|�d|j�dSrs)�update�	ALL_FLAGSryr-r-r.�clearszConnectionState.clearcCs>|durd}g}tjD]}||@r|�tj|�qd�|�S)Nrr3)r�connection_statesr%�map_connection_enum_to_stringr8)rz�valr:�stater-r-r.r{s
zConnectionState.flags_to_stringcCsd|_d|_dS)Nr��rvrwryr-r-r.rxszConnectionState.clear_resultcCs||_||_dS�Nr�)rzrvrwr-r-r.�
set_result!szConnectionState.set_resultcCs|j|jfSr�r�ryr-r-r.�
get_result%szConnectionState.get_resultrr�c	Csf|j}|j|O_|j|M_||_||_||jA}|j|@}||@}|rb|�d|j||�dS)Nrr)rurvrw�emit)	rz�	add_flags�remove_flagsrvrwZprevious_flags�
differenceZflags_addedZ
flags_removedr-r-r.r}(s

zConnectionState.update)rrrr�)�__name__�
__module__�__qualname__rlrmrnr2rorprqr~�
GOOD_FLAGS�
PROBLEM_FLAGSr�r�rZSignalFlagsZRUN_LASTZTYPE_INTZ__gsignals__rtr|rr{rxr�r�r}r-r-r-r.r�s<�
�	rc@seZdZddd�Zdd�ZdS)�RpcArgNcCs||_||_dSr��rJrQ)rzrJrQr-r-r.rt@szRpcArg.__init__cCs6|jdurd}n|j}|jdur$|Sd||jfSdS)NZname_undefined�%s:%sr�)rzrJr-r-r.r|Ds

zRpcArg.__str__)NN)r�r�r�rtr|r-r-r-r.r�>s
r�rH�err_code�err_msgc@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)�
RpcDefinitioncCs2||_||_||_d|_|dur(g|_n||_dSr�)rErGrH�callbackrP)rzrErGrHZrpc_argsr-r-r.rtUszRpcDefinition.__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)r3rHz callback=%s)	rPrQr%rJrErGrHr8r�)rzrTrY�textr-r-r.r|_s



zRpcDefinition.__str__cCs
||_dSr�)rE)rzrEr-r-r.�set_typelszRpcDefinition.set_typecCs(|jdurt�|j�}||j=||_dSr�)r�r�
get_interfacerG)rzr��interface_dictr-r-r.�set_callbackos
zRpcDefinition.set_callbackcCsf|jdkrtd|j��|jdurVd|j}td|j|d�}t�|j||�||_|St�|j|j�S)NrHz"%s rpc types do not have callbacksz%s_default_callback�
method_return)	rE�
ValueErrorr�rHr�rGr�register_rpc_defrN)rzZ
callback_nameZcallback_defr-r-r.�get_callback_defus


zRpcDefinition.get_callback_defcCsF|durBtt|�|jt�|_d}|D]}|j|}||_|d7}q$dS�Nrr)rOr0rPr�rJ)rz�	arg_namesrKrXrYr-r-r.�set_positional_args�s
z!RpcDefinition.set_positional_argscGsF|durBtt|�|jt�|_d}|D]}|j|}||_|d7}q$dSr�)rOr0rPr�rQ)rzZ	obj_typesrKrQrYr-r-r.�set_arg_obj_types�s
zRpcDefinition.set_arg_obj_typescCsdd�|jD�S)NcSsg|]
}|j�qSr-)rJ)�.0rYr-r-r.�
<listcomp>��z:RpcDefinition.get_positional_arg_names.<locals>.<listcomp>)rPryr-r-r.�get_positional_arg_names�sz&RpcDefinition.get_positional_arg_namesN)r�r�r�rtr|r�r�r�r�r�r�r-r-r-r.r�Ss

		r�c@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)�InterfaceRegistrycCs
i|_dSr�)�
interfacesryr-r-r.rt�szInterfaceRegistry.__init__cCstd|dt�}d|iS)N�error_return�
_error_return)r��error_positional_args)rzrGZerror_return_defr-r-r.�
new_interface�szInterfaceRegistry.new_interfacecCs,|j�|�}|dur(|�|�}||j|<|Sr�)r��getr�)rz�interface_namerGr-r-r.r��s


zInterfaceRegistry.get_interfacecCsTddl}|j}t|�|�j�}|ddkr0|d=|�||�}|�|�|�|�|S)Nrrz)�inspectr�r<Z	signature�
parametersrNr�r�)rzrErG�
method_ptrr�rHrPrVr-r-r.�set_rpc_def�s

zInterfaceRegistry.set_rpc_defcCsL|�|�}t|t�r|j}|�|�}|durHtd||d�}|�|||�|Sr�)r�rb�
MethodTyper�r�r�r�)rzrGrHr�rVr-r-r.rN�s


zInterfaceRegistry.get_rpc_defcCs&|�|�}t|t�r|j}|||<dSr�)r�rbr�r�)rzrGrHrVr�r-r-r.r��s

z"InterfaceRegistry.register_rpc_defcCs|�|�}|dS)Nr�)r�)rzrGr�r-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�printra)rzZinterface_namesr�rGZmethod_namesZmethod_namerHr-r-r.�dump_interfaces�s
z!InterfaceRegistry.dump_interfacesN)r�r�r�rtr�r�r�rNr�r�r�r-r-r-r.r��s
r�cs�fdd�}|S)Ncs,t�d�|�}|j���fdd�}d|_|S)NrHcsB|��}t����}t||�}||j|<|j|d|g|�R�|S)NrH)�
new_rpc_idrrN�AsyncRpc�async_rpc_cache�emit_rpc)rzrTrDrV�	async_rpc�rGrHr-r.�rpc_func�s

z/rpc_method.<locals>.decorator.<locals>.rpc_funcT�rr�r��_rpc_definition�r�rVr��rG�rHr.�	decorator�s
zrpc_method.<locals>.decoratorr-�rGr�r-r�r.r
�s
r
cs��fdd�}|S)Ncs |j}t��|�}|j��|Sr�)r�rrNr�)r�rHrV��	arg_typesrGr-r.r��s
zrpc_arg_type.<locals>.decoratorr-)rGr�r�r-r�r.r�srcs��fdd�}|S)Ncs0t�d�|�}t����}|�|j�d|_|S)Nr�T)rr�rNr�rHr�)r��rpc_callback_defrVr�r-r.r��s
zrpc_callback.<locals>.decoratorr-)rGrHr�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�rrNr�)rzrTrDrVr�r-r.r�sz/rpc_signal.<locals>.decorator.<locals>.rpc_funcTr�r�r�r�r.r��s
zrpc_signal.<locals>.decoratorr-r�r-r�r.r
�s
r
c@sdeZdZdde�dfdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	e
dd��Zdd�Zdd�Z
dS)rNcCsLt�|�|_||_||_||_tj|_d|_	||_
|durH|�|j|�dSr�)rr"r+r*�portr'r#ZSOCK_STREAMrE�socket�
friendly_name�parse)rzr+r*r'r�r-r-r.rtszSocketAddress.__init__cCsbt�ddt|j��}|jdur"dS|jtjur<d|j|fS|jtjurZd|j|j	|fSdSdS)Nz^.+ at (0x[0-9A-Fa-f]+)>$z\1�Nonez{unix}%s socket=%sz{inet}%s:%s socket=%s�unknown)
r�sub�reprr�r+r#�AF_UNIXr*r$r�)rzZsocket_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��_ryr-r-r.�_get_default_friendly_name&s

z(SocketAddress._get_default_friendly_namecCs|jdur|��S|jSr�)r�r�ryr-r-r.�get_friendly_name0s
zSocketAddress.get_friendly_namecCsddl}|�|�Srs)�copy)rzr�r-r-r.r�5szSocketAddress.copycCs2|jtjur|jS|jtjur*|j|jfSdSdSr�)r+r#r�r*r$r�ryr-r-r.�get_py_address9s
zSocketAddress.get_py_addresscCs0t|tj�r,|��}tjtjd��|�}|S|S)N)ZunixZinet)rb�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)rzr+�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�)rzr�r)r�r-r-r.r�Qs

zSocketAddress.parse_inet_addr)r�r�r�rrtr|r�r�r�r��staticmethodr"r�r�r-r-r-r.r
s

rc@sNeZdZejejBejBejBZdde	�fdd�Z
dd�Zdd�Zdd	�Z
dS)
�ConnectionIONcCs$t�|_||_||_||_d|_dSr�)r�connection_stater,�channel_type�channel_name�io_watch_id)rzr�r�r,r-r-r.rths
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��rzr�r-r-r.�io_watch_addos

�zConnectionIO.io_watch_addcCs |jdurt�|j�d|_dSr�)r�rZ
source_removeryr-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)rr6r5r7�ERR_SOCKET_HUPZget_strerror�close_connectionrr2ZERR_SOCKET_ERRORroZERR_IO_INVALID)rzr9�errno�strerrorr-r-r.�valid_io_condition{s


zConnectionIO.valid_io_condition)r�r�r�rr4r6r5r7r�rrtr�r�r�r-r-r-r.r�es
r�c@s4eZdZdZdZdd�Zdd�Zdd�Zd	d
�ZdS)rF�cCstj|dd|d�||_dS)NZ	listeningZserver_listening�r�r�r,)r�rt�client_connection_handler_class)rzr,r�r-r-r.rt�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�|jjS)Nri�)r,r+r#r��os�path�existsr*�remove�dirname�makedirsr�rE�fcntl�fileno�F_SETFD�
FD_CLOEXEC�allow_reuse_addressZ
setsockoptZ
SOL_SOCKETZSO_REUSEADDRZbindr��chmodZlisten�request_queue_size)rzr,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}rrormra)rz�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}~00Wnpt�yR}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�rr4Zacceptr�r�r�r�r�r,rr�r}rr�r#�error�get_error_from_socket_exception�syslog�LOG_ERR�Errno�EPIPEr2ror�	__class__r�ra�	traceback�syslog_trace�
format_exc)rzr�r9Z
client_socketZclient_addressZclient_handlerrr�r�r�rr-r-r.r�s.


,.z%ListeningServer.handle_client_connectN)	r�r�r�r�r�rtrrrr-r-r-r.r�s	rc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�RequestReceivercCs||_|��dSr�)�dispatchFunc�reset)rzrr-r-r.rt�szRequestReceiver.__init__cCs"d|_d|_d|_d|_d|_dS)Nrrr�)�	headerLen�bodyLen�headerr>�feed_bufryr-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)r0rr�
header_end_rer�end�parse_headerrr>rr)rzr)Z	bodyBeginZbodyEndr-r-r.�process�s&

zRequestReceiver.processcCs|j|7_|��dSr�)rr)rz�datar-r-r.�feedszRequestReceiver.feedcCshi|_d}t�|j||jd�}|rT|�d�}|�d���}||j|<|��}q
qTq
t|jd�|_	dS)Nrrrzcontent-length)
r�header_field_rerrrr �striprr/r)rzZbeginr)rArBr-r-r.rs


zRequestReceiver.parse_headerN)r�r�r�rtrrrrr-r-r-r.r�s
rc@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)rcCsi|_i|_d|_dSrs)r��rpc_handlersrDryr-r-r.rtszRpcManage.__init__cCs|jd7_t|j�S)Nr)rDraryr-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)rr0r�rDr<r�r�)rzZrpc_idsrDr-r-r.�dump_async_rpc_cache's
zRpcManage.dump_async_rpc_cachecCs|j��dSr�)r�rryr-r-r.�flush_async_rpc_cache.szRpcManage.flush_async_rpc_cachecCst�tjd|||f�dS)Nz
[%s] %d %s)r	r
)rzrHr�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
rD�return_type�	callbacks�return_argsr0�errbacksr#)rzr�r�r-r-r.�process_async_return4s



zRpcManage.process_async_returncCs||j|<dSr�)r )rzrGZhandlerr-r-r.�connect_rpc_interfaceBszRpcManage.connect_rpc_interfaceN)
r�r�r�rtr�r!r"r#r(r)r-r-r-r.rsrc@s�eZdZedde�Zedde�Zd!dd�Zdd�Zd	d
�Z	dd�Z
d
d�Zdd�Zd"dd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd �ZdS)#rr�Zbuf_size�timeoutNcCs6tj|||dd�t�|�t��|_t|j�|_dS)Nr�)	r�rtr�	threading�Lock�
write_lockr�default_request_handler�receiver)rzr�r�r-r-r.rtLs

zRpcChannel.__init__cCsd|j|j|jfS)Nz channel: name=%s addr=%s type=%s)r�r,r�ryr-r-r.r|RszRpcChannel.__str__cCs|j��dSr�)r-�acquireryr-r-r.�acquire_write_lockUszRpcChannel.acquire_write_lockcCs|j��dSr�)r-�releaseryr-r-r.�release_write_lockXszRpcChannel.release_write_lockcCs
||_dSr��r�)rzr�r-r-r.�set_channel_type[szRpcChannel.set_channel_typecCs|jSr�r4ryr-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	�
||tjB||�|�
�dS)Nzclose_connection: %s)rr,r"r�Zshutdownr#Z	SHUT_RDWR�closerr�r}rr�r�)rzr�r�rvrwrr-r-r.r�as�zRpcChannel.close_connectioncCs*|j�|d�}|durdSt||d�}|Sr�)r r��getattr)rzrGrHZhandler_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))r0rPr	r
rerF�	send_data)rzrDrErVrTZrpc_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}~0tj�yF}zdt|�\}}t�tjd|j|f�|��|tjk�rtj}ntj}|�
|d||�WYd}~dSd}~00|j�dtj�|��dS)NrzUTF-8)Zdetailzsocket timeout: (%s)z&could not send data on socket (%s): %s)r�rurrmr1r0r,r��send�bytesr�r2�ProgramErrorr�r#r*r	r
r3r}rprrrrror�)rzrZ	totalSent�sentrr�r�r�r-r-r.r:�s6zRpcChannel.send_datac	
Csbz�|�|�sWdS|tj@r�z:|�|j�}|�d�}t|�dkrT|�tj	�WWdSWnvt
jy�}z\t|�\}}t
�
t
jd|j|f�|tjkr�tj	}ntj}|�|d||�WYd}~WdSd}~00|j�dtj�|j�|�Wnpt�y\}zVt
�
t
jd|jjt|�f�ddl}t|���|�tjddt|��WYd}~dSd}~00dS)NFzutf-8rzsocket error (%s): %srrT)r�rr4Zrecv�socket_buf_size�decoder0r�rr2r#rrr	r
r,rrror�r}r�r/rrr
r�rarrr)	rzr�r9rrr�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
rr
r�rVrGrHr[r$r&r()rzrErDr>r�rGrHrTr-r-r.�
handle_return�s$zRpcChannel.handle_returncCs�|�dd�}|�dd�}td|jj|||f�|dks@|dkrR|�|||��n�|dk�r@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	k�r�t|�\}}}|�||�}|�r�z||�Wn0t�y�}zt�|�}
WYd}~n
d}~00n4tj}d||jjf}t�|�}
|�
|d|
|||�ntd
|||f��dS)NrDrrEz2%s.default_request_handler: rpc_id=%s type=%s {%s}r�r�rHz,method '%s' is not implemented in class '%s'r�zunknown type(%s) for %s:%s)r�rr
r�rCr[r9rrNr�r�r=r�r�r�rZENOSYSr�)rzrr>rDrErGrHrTr�r&Zrpc_method_defr�rZ
rpc_error_defr�r�r-r-r.r.�sH

0

"
z"RpcChannel.default_request_handler)NN)rrrr�)r�r�r�rr/r?Zsocket_timeoutrtr|r1r3r5r6r�r9r�r:rArCr.r-r-r-r.rHs

"
rc@s$eZdZdd�Zdd�Zdd�ZdS)r�cCs(||_||_d|_d|_g|_g|_dSr�)rVrDr&r$r%r')rzrVrDr-r-r.rt�szAsyncRpc.__init__cCs|j�|�dSr�)r%r%r�r-r-r.�add_callbackszAsyncRpc.add_callbackcCs|j�|�dSr�)r'r%)rzZerrbackr-r-r.�add_errback	szAsyncRpc.add_errbackN)r�r�r�rtrDrEr-r-r-r.r��sr�)N)=Z
__future__rrr�rMrr	r�rZ
gi.repositoryrrr�r�r#r�r+�typesZsetroubleshoot.configrZsetroubleshoot.errcodeZsetroubleshoot.xml_serializerr	Zsetroubleshoot.util�__all__rZcontent_length_rerrrrrrrr;rCrFr[rerZ
type_register�objectr�rar/r�r�r�rr
rrr
rr�rrrrr�r-r-r-r.�<module>sb




))Q
E<	
X.I@,5