ó
—¤Ø[c           @   s,  d  d l  Z  d  d l Z d  d l Z d  d l Z 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 m Z m Z d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ d e f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d „  Z d S(   iÿÿÿÿN(   t   python_version(   t   _CS_REQ_SENTt   _CS_IDLEt   ResponseNotReadyt   HTTPResponsec           B   s   e  Z d  „  Z RS(   c         C   sM   t  |  j t j ƒ s- t j |  j ƒ |  _ n  |  j j | | | | | ƒ d  S(   N(   t
   isinstancet   fpt   nonblockingt   NonBlockingFilet   set_callback(   t   selft   rst   wst   ext	   user_datat   callback(    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyR	      s    (   t   __name__t
   __module__R	   (    (    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyR      s   t   HTTPConnectionc           B   sD   e  Z e Z d e j d  „ Z d „  Z d „  Z	 d „  Z
 d „  Z RS(   c         C   s‡   t  ƒ  d k r. t j j |  | | d | ƒn t j j |  | | ƒ g  |  _ g  |  _ g  |  _ d  |  _ d  |  _	 d |  _
 | |  _ d  S(   Ns   2.6.1t   timeouts#   rhn.connections $Revision$ (python)(   R    t   httplibR   t   __init__t   _cb_rst   _cb_wst   _cb_ext   Nonet   _cb_user_datat   _cb_callbackt   _user_agentR   (   R
   t   hostt   portR   (    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyR       s    						c         C   s1   | |  _  | |  _ | |  _ | |  _ | |  _ d  S(   N(   R   R   R   R   R   (   R
   R   R   R   R   R   (    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyR	   -   s
    				c         C   s   | |  _  d  S(   N(   R   (   R
   t
   user_agent(    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyt   set_user_agent5   s    c         C   sî   |  j  r$ |  j  j ƒ  r$ d |  _  n  |  j t k s< |  j  rH t ƒ  ‚ n  |  j d k rr |  j |  j |  j ƒ } n |  j |  j ƒ } |  j	 r¸ | j
 |  j |  j |  j |  j |  j	 ƒ n  | j ƒ  t |  _ | j rá |  j ƒ  n	 | |  _  | S(   s!   Get the response from the server.i    N(   t   _HTTPConnection__responset   isclosedR   t   _HTTPConnection__stateR   R   t
   debuglevelt   response_classt   sockR   R	   R   R   R   R   t   beginR   t
   will_closet   close(   R
   t   response(    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyt   getresponse:   s     	
			c         C   s'   t  j j |  ƒ |  j j |  j ƒ d  S(   N(   R   R   t   connectR&   t
   settimeoutR   (   R
   (    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyR,   k   s    N(   R   R   R   R%   R   t   SSLt   DEFAULT_TIMEOUTR   R	   R    R+   R,   (    (    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyR      s   			1t   HTTPProxyConnectionc           B   s>   e  Z d d d e j d  „ Z d „  Z d d „ Z d „  Z RS(   c         C   sn   t  j |  | d | ƒ|  j |  j |  _ |  _ |  j | | ƒ |  j |  j |  _ |  _ | |  _	 | |  _
 d  S(   NR   (   R   R   R   R   t   _HTTPProxyConnection__proxyt    _HTTPProxyConnection__proxy_portt   _set_hostportt   _hostt   _portt   _HTTPProxyConnection__usernamet   _HTTPProxyConnection__password(   R
   t   proxyR   R   t   usernamet   passwordR   (    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyR   q   s    	c         C   s=   |  j  |  j |  j ƒ t j |  ƒ |  j  |  j |  j ƒ d  S(   N(   R3   R1   R2   R   R,   R4   R5   (   R
   (    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyR,      s    i    c         C   sl   |  j  } |  j |  j k r5 | d t |  j ƒ } n  d | | f } t j |  | | d | ƒ|  j ƒ  d  S(   Nt   :s   http://%s%st	   skip_host(   R4   R5   t   default_portt   strR   t
   putrequestt   _add_proxy_headers(   R
   t   methodt   urlR<   t   hostnamet   newurl(    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyR?   †   s    	c         C   sV   |  j  s d  Sd |  j  |  j f } t j | ƒ j d d ƒ } |  j d d | ƒ d  S(   Ns   %s:%ss   
t    s   Proxy-Authorizations   Basic %s(   R6   R7   t   base64t   encodestringt   replacet	   putheader(   R
   t   userpasst   enc_userpass(    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyR@   ‘   s
    	N(	   R   R   R   R.   R/   R   R,   R?   R@   (    (    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyR0   p   s
   		t   HTTPSConnectionc           B   s8   e  Z e Z e j j Z d d e j	 d  „ Z
 d „  Z RS(   c         C   s2   t  j |  | | d | ƒ| p" g  } | |  _ d  S(   NR   (   R   R   t   trusted_certs(   R
   R   R   RM   R   (    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyR      s    c         C   s&  t  j |  j |  j t  j t  j ƒ } x¸ | D]° } | \ } } } } } y t  j  | | | ƒ } Wn t  j k
 r€ }	 d } q+ n Xy- | j |  j |  j f ƒ | j	 |  j
 ƒ Wn) t  j k
 rÙ }
 | j ƒ  d } q+ n XPq+ W| d k rý t  j d ƒ ‚ n  t j | |  j ƒ |  _ |  j j ƒ  d S(   s'   Connect to a host on a given (SSL) ports0   Unable to connect to the host and port specifiedN(   t   sockett   getaddrinfoR   R   t	   AF_UNSPECt   SOCK_STREAMt   errorR   R,   R-   R   R)   R.   t	   SSLSocketRM   R&   t   init_ssl(   R
   t   resultst   rt   aft   socktypet   protot	   canonnamet   saR&   t   msgt   e(    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyR,   £   s*    
N(   R   R   R   R%   R   RL   R=   R   R.   R/   R   R,   (    (    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyRL   ™   s
   t   HTTPSProxyResponsec           B   s   e  Z d  „  Z RS(   c         C   s   t  j |  ƒ d |  _ d  S(   Ni    (   R   R'   R(   (   R
   (    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyR'   À   s    (   R   R   R'   (    (    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyR^   ¿   s   t   HTTPSProxyConnectionc           B   sJ   e  Z e j Z d d d d e j d  „ Z d „  Z d d „ Z	 d „  Z
 RS(   c      	   C   s;   t  j |  | | | | | d | ƒ| p+ g  } | |  _ d  S(   NR   (   R0   R   RM   (   R
   R8   R   R   R9   R:   RM   R   (    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyR   Ç   s    c         C   sê   t  j |  ƒ d |  j |  j f } t j |  d | ƒ |  j ƒ  t j |  ƒ |  j } t	 |  _ t j
 |  ƒ } | |  _ | j ƒ  | j d k r¾ |  j ƒ  t j | | j | j | j ƒ ‚ n  t j |  j |  j ƒ |  _ |  j j ƒ  d  S(   Ns   %s:%st   CONNECTiÈ   (   R0   R,   R4   R5   R   R?   R@   t
   endheadersR%   R^   R+   R)   t   statust	   xmlrpclibt   ProtocolErrort   reasonR\   R.   RS   R&   RM   RT   (   R
   R   R%   R*   (    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyR,   Î   s     
			

	i    c         C   s   t  j |  | | d | ƒS(   NR<   (   R   R?   (   R
   RA   RB   R<   (    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyR?   ê   s    c         C   s$   t  j |  ƒ |  j d |  j ƒ d  S(   Ns
   User-Agent(   R0   R@   RI   R   (   R
   (    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyR@   í   s    N(   R   R   RL   R=   R   R.   R/   R   R,   R?   R@   (    (    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyR_   Ä   s   			c         C   s!   |  d k r d S|  j d ƒ Sd S(   sE    Convert Internationalized domain name from Pune encoding to Unicode t   idnaN(   R   t   decode(   RC   (    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyt   idn_pune_to_unicodeò   s    c         C   sB   |  d k r d St |  t ƒ s1 t |  d ƒ }  n  |  j d ƒ Sd S(   sU    Convert domain name to Pune encoding. Hostname can be instance of string or Unicode s   utf-8Rf   N(   R   R   t   unicodet   encode(   RC   (    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyt   idn_ascii_to_puneù   s
    (   t   sysRF   R.   R   R   Rc   t   encodings.idnat	   encodingsRN   t   platformR    R   R   R   R   R   R0   RL   R^   R_   Rh   Rk   (    (    (    s3   /usr/lib/python2.7/site-packages/rhn/connections.pyt   <module>
   s"   S)&.	