ó a˜Qc @sQdZddlZddlZejeƒZyddlZejeZ WnAe k rddl Z ddl Z e e deƒZ eZnXy ejZWnek r·d„ZnXeråejZejZejZejZnRde jfd„ƒYZdZdZd ZdZddeeedeed „Zd efd „ƒYZdS( sÅAbstraction to simplify socket use for Python < 2.6 This will attempt to use the ssl module and the new socket.create_connection method, but fall back to the old methods if those are unavailable. iÿÿÿÿNt HTTPSHandlerc Csñ|\}}d}d}xºtj||dtjƒD]}|\}}}} } y9tj|||ƒ}tjd||ƒ|j| ƒWnEtjk rÏ}tjd||ƒ|rÃ|jƒnd}q4nXPq4W|sítj|ƒ‚n|S(Ns!getaddrinfo returns an empty listisconnect: (%s, %s)sconnect fail: %s %s( tNonetsockett getaddrinfot SOCK_STREAMtloggertinfotconnectterrortclose( taddressthosttporttmsgtsocktrestaftsocktypetprotot _canonnametsa((sC/sys/lib/python2.7/site-packages/mercurial/httpclient/socketutil.pytcreate_connection6s(  t FakeSocketcBseZdZddd„ZRS(s*Socket wrapper that supports SSL. iicCs‚|dkr"td|jƒ‚nxYtr}y|jj|ƒSWq%tjk ry}|jdtjkrpq%qz|‚q%Xq%WdS(s1ssl-aware wrapper around socket.recv is3non-zero flags not allowed in calls to recv() on %sN( t ValueErrort __class__tTruet_ssltreadRtsslerrortargstSSL_ERROR_WANT_READ(tselftbuflentflagstx((sC/sys/lib/python2.7/site-packages/mercurial/httpclient/socketutil.pytrecvXs  (t__name__t __module__t__doc__R#(((sC/sys/lib/python2.7/site-packages/mercurial/httpclient/socketutil.pyRRsiiic CsC|tkr!|r!tdƒ‚ntj|ƒ} t|| ƒ}|S(NsUSSL certificate validation requires the ssl module(included in Python 2.6 and later.)(t CERT_NONEt CertificateValidationUnsupportedRtsslR( Rtkeyfiletcertfilet server_sidet cert_reqst ssl_versiontca_certstdo_handshake_on_connecttsuppress_ragged_eofstsslob((sC/sys/lib/python2.7/site-packages/mercurial/httpclient/socketutil.pyt wrap_socketns  R(cBseZdZRS(sCException raised when cert validation is requested but unavailable.(R$R%R&(((sC/sys/lib/python2.7/site-packages/mercurial/httpclient/socketutil.pyR(}s(R&tloggingRt getLoggerR$RR)R3Rthave_sslt ImportErrorthttplibturllib2tgetattrtFalseRtAttributeErrorR't CERT_OPTIONALt CERT_REQUIREDRt_PROTOCOL_SSLv23Rt ExceptionR((((sC/sys/lib/python2.7/site-packages/mercurial/httpclient/socketutil.pyt"s@