3 �Xj4.� @s:ddlZddlZddlZddlZddlZddlZddlmZddlm Z ddlm Z ddlm Z ddl m Z y$ddlZddlZddlZddlZWn<ek r�ddljZddljZddljZddljZYnXddlZejddd �Zeed �s�eje_ejZd d �ZGd d�de j �Z!Gdd�d�Z"ddd�Z#dd�Z$dS)�N)�config)� up2dateLog)� up2dateErrors)� up2dateUtils)�rpclibzrhn-client-toolsT)Zfallback�ugettextcCs t|�dS)N)�print)�msg�r �/usr/lib/python3.6/rpcServer.py�stdoutMsgCallback%sr cs0eZdZiZdd�Z�fdd�Zdd�Z�ZS)� RetryServercCs ||_dS)N)� serverList)�selfrr r r � addServerList-szRetryServer.addServerListc s�tj�|_�x�yt�j||�}W�n�tjk r<�Y�njtjk rt|jj d�t t d��t j d�Y�n2|jj�}|dkr�|jj�|jr�djdd�|jj�D��}t t d��t |��d|j}dt j�d t j�df}||j|j<||}|d |jj�}|jj |�tj|jj��}|d } |d|_|d |_| j�} | dk�rptjd| ��|j|_| |_|jj�|_|j�s�d|_d|_ wYnXPqW|S)Nz,Error: Server Unavailable. Please try later.�� cSsg|]\}}d||f�qS)z%s: %sr )�.0�host�errorr r r � Isz)RetryServer._request1..z>Errors occurred while trying to connect to the remote servers.z!An error occurred talking to %s: z%s %s rzTrying the next serverURL: %s ��http�httpsz%Redirected to unsupported protocol %sz/RPC2�����)rr)!r�initLog�log�superZ_ServerProxy__request� xmlrpclibZFault�httplibZ BadStatusLine�log_mer �_�sys�exitr�next�resetServerIndex�_error_messages�join�itemsZ_host�exc_info�server�urlparseZurlsplitZ_handler�lowerrZInvalidRedirectionErrorZ _orig_handlerZ_typeZ_uriZ_allow_redirect) rZ methodnameZparams�retr*Zerror_combined_msgr Z exception_msgZ parse_res�typ)� __class__r r � _request10sT             zRetryServer._request1cCstjj|j|�S)N)�xmlrpc�clientZ_Methodr0)r�namer r r � __getattr__pszRetryServer.__getattr__)�__name__� __module__� __qualname__r&rr0r4� __classcell__r r )r/r r )s @r c@s0eZdZgfdd�Zdd�Zdd�Zdd�Zd S) � ServerListcCs||_d|_dS)Nr)r�index)rZ serverlistr r r �__init__wszServerList.__init__cCs|j|j|_|jS)N)rr:Z serverurl)rr r r r*{szServerList.servercCs(|jd|_|jt|j�kr dS|j�S)Nr)r:�lenrr*)rr r r r$s zServerList.nextcCs d|_dS)Nr)r:)rr r r r%�szServerList.resetServerIndexN)r5r6r7r;r*r$r%r r r r r9vs r9FcCs\tj�}tj�}tjtjj�|d}t|t �r:t j d��|p@d}|drTtj �}nd}|s�tj |d�}tj|d�} | r�x$| D]} | |kr~|j| �q~Wn|}t|�} d} d} |dr�|dp�d} |dp�d} t| j�|| | |d �}|j| �|jd tj��d d �|jjD�}|�rXtj|tj��sNd td�|f}|jd|�t j|��|j|�|S)NZ sslCACertz SSL certificate must be a stringz'/usr/share/rhn/CLN-ORG-TRUSTED-SSL-CERTZ enableProxy)� registrationZenableProxyAuth� proxyUser� proxyPassword)�proxyZusernameZpassword�timeoutzX-Up2date-VersioncSs"g|]}tj|�ddkrd�qS)rrT)r+)r�ir r r r�szgetServer..z%s: %sz ERROR: can not find RHNS CA filez%s)rrr�initUp2dateConfig�urllib3Zdisable_warnings� exceptionsZSubjectAltNameWarning� isinstance�listrZValidationErrorZgetProxySettingZ getServerURLZgetFallbackServerURL�appendr9r r*rZ add_headerr�versionr�os�access�R_OKr!r ZSSLCertificateFileNotFoundZset_trusted_cert)ZserverOverriderAr=r�cfgZcaZ rhns_ca_certZ proxyHostZ serverUrlsZ fallbackURL�urlrr>r?�sZneed_car r r r � getServer�sR           rPcOs�tj�}|jd|jd�tj�}d}d}yt|d�}Wntk rTd}YnX|dkrbd}�xLd}d}y|||�}W�n�tk r�t j t d���Y�n�t j k �rH} z�|jdtj�d|f�||k�r2tj�d} t| j�dk�r t j t| jd���n$t j | j�r&t| jd�nt| ���nd}WYdd} ~ X�n*tjk �rrtd�t j d��Y�ntjk �r�tj�d} d } | d | j} | d | j} | d | j} |j| �t j | ��Y�n�tjk �rPtj�d} |jd | j|f�| jdk�r0|jd| j �|jd�t!j"| j#�\} } d} t$| �dk�rt|jd| �ddl%m&}|j'�t$| �dk�r�|jt d��t j | j��t$| �dk�r*t(|d�t(g�k�r�|d}n|d}t(|�t(g�k�rd|d|d|d|df}n|}d|| f} |j| �t j)| ��| �sL||k�rHt j | j��nd}Yn"tj*k �rpt j d��YnX|dk�r�Pnd}|�r�t+j,d�|d}||krft j d��qfW|S)NzrpcServer: Calling XMLRPC %sZ _Method__namerZnetworkRetriesrzConnection aborted by the userz(A socket error occurred: %s, attempt #%szhttplib.IncompleteReadz An HTTP error occurred: zURL: %s zStatus Code: %s zError Message: %s z,A protocol error occurred: %s , attempt #%s,i�zCould not find URL, %sz)Check server name and/or URL, then retry �"z'Auth token timeout occurred errmsg: %s)� up2dateAuth�3z.Server has refused connection due to high load�z %s-%s-%s.%sr�zFile Not Found: %s %sz Broken response from the server.�z0The data returned from the server was incomplete)-rrZ log_debug�__dict__rrC�int� ValueError�KeyboardInterruptrZCommunicationErrorr!�socketrr r"r)r<�args�strrZIncompleteReadr�urllib2Z HTTPError�filename�coder rZ ProtocolError�errmsgZerrcoderNrZ reportErrorZheaders�abs�up2date_clientrRZupdateLoginInfo�type�FileNotFoundErrorZ ResponseError�timeZsleep)�methodr\�kwargsrrMr-Z attempt_countZattemptsZfailure�er ZerrCodeZerrMsg�resetrRZpkgZpkgNamer r r �doCall�s�   "        "      rk)NNF)%rJr"r[rfZ xmlrpc.clientr1rDrcrrrrZrhnrrr^r+r� ImportErrorZ http.clientr2Zurllib.requestZrequestZ urllib.parse�parse�gettextZ translation�t�hasattrrr!r ZServerr r9rPrkr r r r �s@          M C