dbfdg 3 whK@sfddlmZddlmZddlmZddlmZddlmZGdddeZeZdd Z d d Z d S) )config) http_utils) log_utils)utils)serveridc@s4eZdZddZddZeddZeddZd S) IPProtoSelectorcCs d|_dS)N)_cached_result)selfr 2/usr/libexec/kcare/python/kcarectl/ipv6_support.py__init__szIPProtoSelector.__init__cCstjrtjddStjjds.tjddStjrBtjddS|jdk rR|jS|jtj sntjdd}np|jtjstjdd}nTt j rtjd d}n<|j dd rtjd d}n |j dd rtjd d}nd}||_|S) ak Choose ipv6 if it is more suitable. Checks order: - check config values (it is faster) - eportal setup and FORCE_IPVx - then check each proto availability using HEAD requests - then check if we have server_id, it means we don't expect an ip license - and finally we need to check if there is an ip license z,decided to use ipv4 because of config valuesFzkernelcare.comz,decided to use ipv6 because of config valuesTNz1decided to use ipv4 because ipv6 is not availablez1decided to use ipv6 because ipv4 is not availablez/decided to use ipv4 because server id was found)ipv6z2decided to use ipv4 because ipv4 license was foundz2decided to use ipv6 because ipv6 license was found) r FORCE_IPV4rlogdebug PATCH_SERVERendswith FORCE_IPV6r_is_url_reachablePATCH_SERVER_IPV6r get_serverid_has_ip_license)r resultr r r is_ipv6_preferreds:               z!IPProtoSelector.is_ipv6_preferredcCsbtj|ddd}ytj|dddddStk r\}ztjdj|t|dSd}~XnXdS) NHEAD)method auth_string F)timeout retry_on_500 retry_countTz%error during HEAD request to {0}: {1})r http_requesturlopen Exceptionrrformatstr)urlrequester r r rCsz!IPProtoSelector._is_url_reachablecCsn|r tjntj}|d}tjtj|ddj}tj|}| sL|j d rbt j j dj |dS|ddkS) Nz /check.plainF)rcodezUnexpected CLN response: {0}01)r*r+)rREGISTRATION_URL_IPV6REGISTRATION_URLrnstrrr"read data_as_dictgetrkcarelogerrorr$)r Zbase_urlr&contentinfor r r rNs zIPProtoSelector._has_ip_licenseN)__name__ __module__ __qualname__r r staticmethodrrr r r r rs/ rcCstjrtjStjS)N)ip_proto_selectorrrrrr r r r get_patch_servercsr;cCstjrtjStjS)N)r:rrr,r-r r r r get_registration_urlhsr<N) rrrrrobjectrr:r;r<r r r r s     Q