
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
UˆŠZ
*  ã               @   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 pˆd }d }xFdD ]>}|t	j
kr”t	j
| s®q”t	j
| jdƒd }|jdƒd }P q”W t|	jƒ | ||
||d�}|j|	ƒ |jdtjƒ ƒ |�r|j|ƒ dd„ |jjD ƒ}|�r‚xP|D ]H}t	j|t	jƒ�srdtdƒ|f }|jd| ƒ tj|ƒ‚|j|ƒ �q6W tjƒ  tjjƒ }x|D ]\}}|j||ƒ �qšW |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�rþd|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�r„P nd}|�r t-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)Úup2dateAuthé3   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