ó ¶ÓòKc@s’ddlZddljZddljjZddljjj Z yddl Z Wne e fk rkn XddlZdefd„ƒYZdS(iÿÿÿÿNtMirrorDetectorcBsDeZdZd„Zd„Zd„Zd„Zd„Zd„ZRS(svThis class uses mDNS and DNS-SD to find link-local content mirrors that may be present on the client's subnet.cCsg|_d|_d|_dS(Nis _pkg5._tcp(t_mirrorst_MirrorDetector__timeoutt_MirrorDetector__service(tself((sB/usr/lib/python2.7/vendor-packages/pkg/client/transport/mdetect.pyt__init__-s  cCs ||jkS(N(R(Rtkey((sB/usr/lib/python2.7/vendor-packages/pkg/client/transport/mdetect.pyt __contains__2scCs |j|S(N(R(Rtpos((sB/usr/lib/python2.7/vendor-packages/pkg/client/transport/mdetect.pyt __getitem__5sccsQt|jƒ}tjt|ƒt|dƒƒ}x|D]}|j|Vq7WdS(suEach time iterator is invoked, randomly select up to five mirrors from the list of available mirrors.iN(tlenRtrandomtsampletxrangetmin(Rtlistlentiterlsttv((sB/usr/lib/python2.7/vendor-packages/pkg/client/transport/mdetect.pyt__iter__8s! csmgˆ_dtƒkrdSt}ˆj}‡fd†}ytjdˆjd|ƒ}Wn7tjk r’}d|dd}tj |ƒ‚nXzÈyXxQ|sìt j |ggg|ƒ}||dkrãtj |ƒd}qœt }qœWWnit j k r#}d |d}tj |ƒ‚n7tjk rY}d |dd}tj |ƒ‚nXWd|jƒXdS( s‚When invoked, this populates the MirrorDetector object with URLs that name dynamically discovered content mirrors.t pybonjourNcsA|tjkrdS|tj@s$dSˆj|||||ƒdS(N(RtkDNSServiceErr_NoErrortkDNSServiceFlagsAddt_resolve_server(tsd_hdltflagst interface_idxt error_codet service_nametregtypet reply_domain(R(sB/usr/lib/python2.7/vendor-packages/pkg/client/transport/mdetect.pyt browse_cbOs   RtcallBacksmDNS Service Browse Failed: %s iisSelect failed: %s smDNS Process Result failed: %s (RtglobalstFalseRRtDNSServiceBrowseRt BonjourErrorttxt mDNSExceptiontselecttDNSServiceProcessResulttTrueterrortclose(RttimedoutttvalRRteterrstrtavail((RsB/usr/lib/python2.7/vendor-packages/pkg/client/transport/mdetect.pytlocateBs8      c sTt}ˆj}‡fd†}y"tjd|||||ƒ} Wn7tjk ry} d| dd} tj| ƒ‚nXzÈyXxQ|sÓtj| ggg|ƒ} | | dkrÊtj| ƒd}qƒt }qƒWWnitj k r } d| d} tj| ƒ‚n7tjk r@} d| dd} tj| ƒ‚nXWd| j ƒXdS(siInvoked to resolve mDNS information about a service that was discovered by a Browse call.c sn|tjkrdStjj|ƒ}d|krj|d} tj| ƒsNdSˆjjtj | ƒƒndS(Nturl( RRt TXTRecordtparsetmisct valid_pub_urlRtappendtpubt RepositoryURI( RRRRt full_namet host_targettportt txt_recordttrR1(R(sB/usr/lib/python2.7/vendor-packages/pkg/client/transport/mdetect.pyt resolve_cb|s  is mDNS Service Resolve Failed: %s isSelect failed; %s smDNS Process Result Failed: %s N( R!RRtDNSServiceResolveR#R$R%R&R'R(R)R*( Rtif_idxtecRRRR+R,R>RR-R.R/((RsB/usr/lib/python2.7/vendor-packages/pkg/client/transport/mdetect.pyRts2     ( t__name__t __module__t__doc__RRR RR0R(((sB/usr/lib/python2.7/vendor-packages/pkg/client/transport/mdetect.pyR)s    2(R tpkg.miscR4tpkg.client.publishertclientt publisherR7tpkg.client.transport.exceptiont transportt exceptionR$RtOSErrort ImportErrorR&tobjectR(((sB/usr/lib/python2.7/vendor-packages/pkg/client/transport/mdetect.pyts