
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
UZ
*                 @   sP  d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dl
mZ d d	lmZ y$d dlZd dlZd dlZd dlZW n< ek
r   d dljZd dljZd dljZd dljZY nX d dlZejd
ddZeedseje_ejZ dd Z!G dd dej"Z#G dd dZ$dddZ%dd Z&dS )    N)config)
clientCaps)
up2dateLog)up2dateErrors)up2dateUtils)SSL)rpclib)raise_with_tbzrhn-client-toolsT)Zfallbackugettextc             C   s   t |  d S )N)print)msg r   /usr/lib/python3.6/rpcServer.pystdoutMsgCallback$   s    r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )RetryServerc             C   s
   || _ d S )N)
serverList)selfr   r   r   r   addServerList)   s    zRetryServer.addServerListc             C   s  t j | _xry| j||}W nX tjk
r:    Y n@ tjk
rR    Y n( tj	k
r   | jj
d ttd tjd Y n   | jj }|d kr| jj   d| j }|dtj d tj d f  }|d| jj   }| jj
| tj| jj }|d }|d | _|d | _|j }|dkrDttjd
|  | j| _|| _| jj | _| jsld| _d| _wY nX P qW |S )Nz,Error: Server Unavailable. Please try later.   z!An error occurred talking to %s:
z%s
%s
r   zTrying the next serverURL: %s
   httphttpsz%Redirected to unsupported protocol %sz/RPC2)r   r   )r   initLoglogZ_requestr   ZInvalidRedirectionError	xmlrpclibZFaulthttplibZBadStatusLinelog_mer   _sysexitr   nextresetServerIndexZ_hostexc_infoserverurlparseZurlsplitZ_handlerlowerr	   Z_orig_handlerZ_typeZ_uriZ_allow_redirect)r   Z
methodnameZparamsretr$   r   Z	parse_restypr   r   r   	_request1,   sN    




 


zRetryServer._request1c             C   s   t jj| j|S )N)r   r   Z_Methodr)   )r   namer   r   r   __getattr__^   s    zRetryServer.__getattr__N)__name__
__module____qualname__r   r)   r+   r   r   r   r   r   (   s   2r   c               @   s0   e Zd Zg fddZdd Zdd Zdd Zd	S )

ServerListc             C   s   || _ d| _d S )Nr   )r   index)r   Z
serverlistr   r   r   __init__e   s    zServerList.__init__c             C   s   | j | j | _| jS )N)r   r0   Z	serverurl)r   r   r   r   r$   i   s    zServerList.serverc             C   s(   | j d | _ | j t| jkr d S | j S )Nr   )r0   lenr   r$   )r   r   r   r   r!   n   s    zServerList.nextc             C   s
   d| _ d S )Nr   )r0   )r   r   r   r   r"   t   s    zServerList.resetServerIndexN)r,   r-   r.   r1   r$   r!   r"   r   r   r   r   r/   d   s   r/   c             C   s  t j }tj }|d }t|ts(|g}|p0dg}|d rDtj }nd }|sVtj }n|}t|}	d }
d }|d r|d p|d }
|d pd }d }xFdD ]>}|t	j
krt	j
| sqt	j
| jdd }|jdd }P qW t|	j | ||
||d}|j|	 |jdtj  |r|j| dd |jjD }|rxP|D ]H}t	j|t	jsrdtd|f }|jd|  tj||j| q6W tj  tjj }x|D ]\}}|j|| qW |S )NZ	sslCACertz/usr/share/rhn/RHNS-CA-CERTZenableProxyZenableProxyAuth	proxyUserproxyPasswordLANGUAGELC_ALLLC_MESSAGESLANG:r   .)refreshCallbackproxyZusernameZpasswordtimeoutzX-Up2date-Versionc             S   s"   g | ]}t j |d  dkrdqS )r   r   T)r%   ).0ir   r   r   
<listcomp>   s    zgetServer.<locals>.<listcomp>z%s: %sz ERROR: can not find RHNS CA filez%s)r5   r6   r7   r8   )r   r   r   initUp2dateConfig
isinstancelistZgetProxySettingZgetServerlURLr/   osenvironsplitr   r$   r   Z
add_headerr   versionZsetlangr   accessR_OKr   r   r   ZSSLCertificateFileNotFoundZadd_trusted_certr   ZloadLocalCapsZcapsZheaderFormat)r;   ZserverOverrider=   r   cfgZcaZrhns_ca_certsZ	proxyHostZ
serverUrlsr   r3   r4   ZlangenvsZneed_caZrhns_ca_certr   Z
headerlistZ
headerNamevaluer   r   r   	getServerx   sd    











rN   c             O   s  t j }|jd| jd   tj }d }d}yt|d }W n tk
rT   d}Y nX |dkrbd}xPd}d }y| ||}W n tk
r   t	t
jtd Y n tjtjfk
r4   |jdtj d |f  ||kr*tj d }	t|	jdkrt	t
j|	jd  nt	t
j|	jd  nd}Y nB tjk
rb   td t	t
jd Y n tjk
r   tj d }	d	}
|
d
|	j  }
|
d|	j  }
|
d|	j  }
|j|
 t	t
j|
 Y n tjk
rP   tj d }	|jd|	j |f  |	j!dkr$|jd|	j"  |jd t#j$|	j%\}}d}t&|dkrh|jd|  ddl'm(} |j)  t&|dkr|jtd t	t
j|	j  t&|dkr&t*|d t*g kr|d }n|d }t*|t*g krd|d |d |d |d f }n|}d||f }
|j|
 t	t
j+|
 |sL||krHt	t
j|	j  nd}Y n& tj,k
rt   t	t
jd Y nX |d krP nd}|rt-j.d |d }||krft
jdqfW |S )NzrpcServer: Calling XMLRPC %sZ_Method__namer   ZnetworkRetriesr   zConnection aborted by the userz(A socket error occurred: %s, attempt #%szhttplib.IncompleteReadz
An HTTP error occurred:
zURL: %s
zStatus Code: %s
zError Message: %s
z,A protocol error occurred: %s , attempt #%s,i  zCould not find URL, %sz)Check server name and/or URL, then retry
"   z'Auth token timeout occurred
 errmsg: %s)up2dateAuth3   z.Server has refused connection due to high load   z%s-%s-%s.%sr      zFile Not Found: %s
%sz Broken response from the server.   z0The data returned from the server was incomplete)/r   r   Z	log_debug__dict__r   rA   int
ValueErrorKeyboardInterruptr	   r   ZCommunicationErrorr   socketerrorr   Zsocket_errorr   r   r#   r2   argsr   ZIncompleteReadr   urllib2Z	HTTPErrorfilenamecoder   r   ZProtocolErrorerrmsgZerrcodeZurlr   ZreportErrorZheadersabsup2date_clientrP   ZupdateLoginInfotypeFileNotFoundErrorZResponseErrortimeZsleep)methodr[   kwargsr   rJ   r'   Zattempt_countZattemptsZfailureer   ZerrCodeZerrMsgresetrP   ZpkgZpkgNamer   r   r   doCall   s    





"



ri   )NNN)'rD   r   rY   rd   ra   r   r   r   r   r   Zrhnr   r   Zrhn.tbr	   r   r\   r%   r   ImportErrorZhttp.clientZclientZurllib.requestZrequestZurllib.parseparseZxmlrpc.clientgettextZtranslationthasattrr
   r   r   ZServerr   r/   rN   ri   r   r   r   r   <module>   s>   


<
L