
    tniD                       d dl m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
mZmZ d dlmZ d dlmZmZmZmZmZ d dlZddlmZ ddlmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d	Z'd
Z( ed          Z)dZ* ej+        e,          Z-ej.        ej/        ej0        ej1        ej2        ej3        ej4        ej5        ej6        ej7        ej8        ej9        dZ:ej;        ej<        ej=        ej>        ej?        dZ@ G d d          ZAdS )    )annotationsN)CallableIterableSequence)TracebackType)TYPE_CHECKINGAnyLiteralTypeVaroverload   )error)AresHostResultAresQueryAAAAResultAresQueryAResultAresQueryCAAResultAresQueryCNAMEResultAresQueryMXResultAresQueryNAPTRResultAresQueryNSResultAresQueryPTRResultAresQuerySOAResultAresQuerySRVResultAresQueryTXTResultQueryResultconvert_resultz4.0.0)DNSResolverr   _Tzpaiodns needs a SelectorEventLoop on Windows. See more: https://github.com/aio-libs/aiodns#note-for-windows-users)AAAAAANYCAACNAMEMXNAPTRNSPTRSOASRVTXT)INCHAOSHSNONEr!   c                  T   e Zd Z	 	 dsdtd
ZdudZedvd            Zej        dwd            ZdxdZdydZ	dzdZ
d{d!Ze	 d|d}d)            Ze	 d|d~d,            Ze	 d|dd/            Ze	 d|dd2            Ze	 d|dd5            Ze	 d|dd8            Ze	 d|dd;            Ze	 d|dd>            Ze	 d|ddA            Ze	 d|ddD            Ze	 d|ddG            Z	 dddIZ	 dddKZddNZddQZej        ddRdRdRfddXZ	 ddd\Zdd_Zdd`ZddeZddfZddgZddhZddiZddjZddqZddrZdS )r   NnameserversSequence[str] | Noneloop asyncio.AbstractEventLoop | Nonekwargsr	   returnNonec                |   d| _         |pt          j                    | _        t          r	| j        J |                    dd            |                    dd           }|| _         | j        di |\  | _        | _	        |r|| _
        t                      | _        t                      | _        d | _        d| _         d S )NTsock_state_cbtimeoutF )_closedasyncioget_event_loopr2   r   pop_timeout_make_channel_event_thread_channelr0   set	_read_fds
_write_fds_timer)selfr0   r2   r4   r9   s        L/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/aiodns/__init__.py__init__zDNSResolver.__init__K   s     4G244	 	)9(((

?D)))**Y--,>D,>,H,H,H,H)DM 	+*D#&55$'EE26    tuple[bool, pycares.Channel]c                ~   	 dt          j        dd| j        i|fS # t           j        $ rQ}t          j        dk    rt                              d|           nt                              d|           Y d }~nd }~ww xY wt          j        dk    rzt          | j	        t          j                  s[	 dd l}t          | j	        |j                  st          t                    n'# t           $ r}t          t                    |d }~ww xY wt#          j        |           dfd}dt          j        d|| j        d|fS )NTr9   linuxzFailed to create DNS resolver channel with automatic monitoring of resolver configuration changes. This usually means the system ran out of inotify watches. Falling back to socket state callback. Consider increasing the system inotify watch limit: %szFailed to create DNS resolver channel with automatic monitoring of resolver configuration changes. Falling back to socket state callback: %swin32r   fdintreadableboolwritabler5   r6   c                R                 }||                     | ||           d S d S N)_sock_state_cb)rO   rQ   rS   this	weak_selfs       rH   sock_state_cb_wrapperz8DNSResolver._make_channel.<locals>.sock_state_cb_wrapper   s<     9;;D##B(;;;;;  rJ   F)r8   r9   r:   rO   rP   rQ   rR   rS   rR   r5   r6   )pycaresChannelr?   	AresErrorsysplatform_LOGGERwarning
isinstancer2   r<   SelectorEventLoopwinloopLoopRuntimeErrorWINDOWS_SELECTOR_ERR_MSGModuleNotFoundErrorweakrefref)rG   r4   erd   exrY   rX   s         @rH   r@   zDNSResolver._make_channel`   s   	III&IIII  	 	 	|w&&D
     @ 	  	$ <7"":Iw0,
 ,
"E!$)W\:: A&'?@@@A& E E E"#;<<"DE K%%		< 	< 	< 	< 	< 	< go 
/M
 
 
 
 
 	
s-    A=AA88A=02C# #
D-DDSequence[str]c                .    d | j         j        D             S )Nc                F    g | ]}|                     d d          d         S ):r   r   )rsplit).0ss     rH   
<listcomp>z+DNSResolver.nameservers.<locals>.<listcomp>   s+    CCCa  #CCCrJ   rB   serversrG   s    rH   r0   zDNSResolver.nameservers   s     DCT]-BCCCCrJ   valueIterable[str | bytes]c                    || j         _        d S rU   ru   )rG   rx   s     rH   r0   zDNSResolver.nameservers   s     %rJ   futasyncio.Future[_T]resultr   errorno
int | Nonec                    |                                 rd S |G|                    t          j        |t          j                            |                               d S |                    |           d S rU   )	cancelledset_exceptionr   DNSErrorr[   errnostrerror
set_result)rG   r{   r}   r~   s       rH   	_callbackzDNSResolver._callback   sz     ==?? 	Fw(>(>w(G(GHH     NN6"""""rJ   ;tuple[asyncio.Future[_T], Callable[[_T, int | None], None]]c                    | j                                         }| j        r&t          j        | j         j        | j        |          }nt          j        | j        |          }||fS )z?Return a future and a callback to set the result of the future.)r2   create_futurerA   	functoolspartialcall_soon_threadsafer   )rG   futurecbs      rH   _get_future_callbackz DNSResolver._get_future_callback   sf    
 &*Y%<%<%>%> 	;"	. BB "4>6::BrzrJ   asyncio.Future[QueryResult]qtyperP   pycares.DNSResultc                
   |                                 rdS |G|                    t          j        |t          j                            |                               dS |                    t          ||                     dS )z>Callback for query that converts results to compatible format.N)	r   r   r   r   r[   r   r   r   r   )rG   r{   r   r}   r~   s        rH   _query_callbackzDNSResolver._query_callback   s     ==?? 	Fw(>(>w(G(GHH     NN>&%8899999rJ   7tuple[asyncio.Future[QueryResult], Callable[..., None]]c                    | j                                         }| j        r't          j        | j         j        | j        ||          }nt          j        | j        ||          }||fS )z>Return a future and callback for query with result conversion.)r2   r   rA   r   r   r   r   )rG   r   r   r   s       rH   _get_query_future_callbackz&DNSResolver._get_query_future_callback   sn     /3i.E.E.G.G 	H"	.$	 BB "4#7GGBrzrJ   .hoststrLiteral['A']qclass
str | None&asyncio.Future[list[AresQueryAResult]]c                    d S rU   r:   rG   r   r   r   s       rH   queryzDNSResolver.query   s	     25rJ   Literal['AAAA'])asyncio.Future[list[AresQueryAAAAResult]]c                    d S rU   r:   r   s       rH   r   zDNSResolver.query   s	     58CrJ   Literal['CAA'](asyncio.Future[list[AresQueryCAAResult]]c                    d S rU   r:   r   s       rH   r   zDNSResolver.query   	     473rJ   Literal['CNAME']$asyncio.Future[AresQueryCNAMEResult]c                    d S rU   r:   r   s       rH   r   zDNSResolver.query   s	     03srJ   Literal['MX']'asyncio.Future[list[AresQueryMXResult]]c                    d S rU   r:   r   s       rH   r   zDNSResolver.query   	     36#rJ   Literal['NAPTR']*asyncio.Future[list[AresQueryNAPTRResult]]c                    d S rU   r:   r   s       rH   r   zDNSResolver.query   s	     69SrJ   Literal['NS']'asyncio.Future[list[AresQueryNSResult]]c                    d S rU   r:   r   s       rH   r   zDNSResolver.query   r   rJ   Literal['PTR']"asyncio.Future[AresQueryPTRResult]c                    d S rU   r:   r   s       rH   r   zDNSResolver.query   	     .1SrJ   Literal['SOA']"asyncio.Future[AresQuerySOAResult]c                    d S rU   r:   r   s       rH   r   zDNSResolver.query   r   rJ   Literal['SRV'](asyncio.Future[list[AresQuerySRVResult]]c                    d S rU   r:   r   s       rH   r   zDNSResolver.query   r   rJ   Literal['TXT'](asyncio.Future[list[AresQueryTXTResult]]c                    d S rU   r:   r   s       rH   r   zDNSResolver.query  r   rJ   /asyncio.Future[list[Any]] | asyncio.Future[Any]c                   t          j        dt          d           	 t          |         }n%# t          $ r}t          d|           |d}~ww xY wd}|4	 t          |         }n%# t          $ r}t          d|           |d}~ww xY w|                     |          \  }}|| j        	                    ||||           n| j        	                    |||           |S )	z6Query DNS records (deprecated, use query_dns instead).z.query() is deprecated, use query_dns() instead   
stacklevelinvalid query type: Ninvalid query class: query_classcallbackr   )
warningswarnDeprecationWarningquery_type_mapKeyError
ValueErrorquery_class_mapr   rB   r   	rG   r   r   r   	qtype_intrk   
qclass_intr{   r   s	            rH   r   zDNSResolver.query	  s=    	<	
 	
 	
 	

	D&u-II 	D 	D 	D;E;;<<!C	D!%
J,V4

 J J J !A!A!ABBIJ 11)<<R!MiZ"       Mi"===
s,   , 
AA		AA$ $
B.BB!asyncio.Future[pycares.DNSResult]c                   	 t           |         }n%# t          $ r}t          d|           |d}~ww xY wd}|4	 t          |         }n%# t          $ r}t          d|           |d}~ww xY w|                                 \  }}|| j                            ||||           n| j                            |||           |S )z:Query DNS records, returning native pycares 5.x DNSResult.r   Nr   r   r   )r   r   r   r   r   rB   r   r   s	            rH   	query_dnszDNSResolver.query_dns&  s   	D&u-II 	D 	D 	D;E;;<<!C	D!%
J,V4

 J J J !A!A!ABBIJ ++--R!MiZ"       Mi"===
s'    
2-2A 
A*A%%A*asyncio.Future[AresHostResult]pycares.AddrInfoResult | Nonec                n   |                                 rdS |G|                    t          j        |t          j                            |                               dS |J d |j        D             }|j        r|j        d         j	        n|}|
                    t          |g |                     dS )z8Callback for gethostbyname that converts AddrInfoResult.Nc                L    g | ]!}|j         d                                          "S r   )addrdecode)rr   nodes     rH   rt   z7DNSResolver._gethostbyname_callback.<locals>.<listcomp>P  s*    HHH41,,..HHHrJ   r   )namealiases	addresses)r   r   r   r   r[   r   r   nodescnamesr   r   r   )rG   r{   r   r}   r~   r   r   s          rH   _gethostbyname_callbackz#DNSResolver._gethostbyname_callback?  s     ==?? 	Fw(>(>w(G(GHH     %%%HH6<HHHI,2MC6=#((tDNND"	JJJ    rJ   familysocket.AddressFamilyc                >   t          j        dt          d           | j                                        }| j        r't          j        | j        j        | j	        ||          }nt          j        | j	        ||          }| j
                            |d||           |S )z
        Resolve hostname to addresses.

        Deprecated: Use getaddrinfo() instead. This is implemented using
        getaddrinfo as pycares 5.x removed the gethostbyname method.
        z8gethostbyname() is deprecated, use getaddrinfo() insteadr   r   N)r   r   )r   r   r   r2   r   rA   r   r   r   r   rB   getaddrinfo)rG   r   r   r{   r   s        rH   gethostbynamezDNSResolver.gethostbynameW  s     	F	
 	
 	
 	

 /3i.E.E.G.G 	L"	.,	 BB "4#?dKKB!!$Vb!III
rJ   r   portprototypeflags&asyncio.Future[pycares.AddrInfoResult]c           	     v    |                                  \  }}| j                            |||||||           |S )N)r   r   r   r   r   )r   rB   r   )	rG   r   r   r   r   r   r   r{   r   s	            rH   r   zDNSResolver.getaddrinfos  sT     ++--R!! 	" 	
 	
 	
 
rJ   sockaddr+tuple[str, int] | tuple[str, int, int, int]&asyncio.Future[pycares.NameInfoResult]c                n    |                                  \  }}| j                            |||           |S Nr   )r   rB   getnameinfo)rG   r   r   r{   r   s        rH   r   zDNSResolver.getnameinfo  s;     ++--R!!(EB!???
rJ   r   "asyncio.Future[pycares.HostResult]c                l    |                                  \  }}| j                            ||           |S r   )r   rB   gethostbyaddr)rG   r   r{   r   s       rH   r   zDNSResolver.gethostbyaddr  s7    ++--R##D2#666
rJ   c                8    | j                                          d S rU   )rB   cancelrw   s    rH   r   zDNSResolver.cancel  s    rJ   rO   rQ   rR   rS   c                   |s|r|rK| j                             || j        j        |t          j                   | j                            |           |rK| j                             || j        j        t          j        |           | j	                            |           | j
        |                                  d S d S || j        v r4| j                            |           | j                             |           || j	        v r4| j	                            |           | j                             |           | j        s0| j	        s+| j
        &| j
                                         d | _
        d S d S d S d S rU   )r2   
add_readerrB   
process_fdr[   ARES_SOCKET_BADrD   add
add_writerrE   rF   _start_timerdiscardremove_readerremove_writerr   )rG   rO   rQ   rS   s       rH   rV   zDNSResolver._sock_state_cb  s    	#x 	# '	$$0"g6M   ""2&&& (	$$0'2I2   ##B'''{"!!##### #" T^##&&r***	''+++T_$$''+++	''+++ N## K+""$$$"# # # # ,+rJ   c                    | j         s| j        rE| j                            t          j        t          j                   |                                  d S d | _        d S rU   )rD   rE   rB   r  r[   r  r  rF   rw   s    rH   	_timer_cbzDNSResolver._timer_cb  s_    > 	T_ 	M$$')@   DKKKrJ   c                    | j         }||dk     s|dk    rd}n|dk    rd}| j                            || j                  | _        d S )Nr   r   g?)r?   r2   
call_laterr
  rF   )rG   r9   s     rH   r  zDNSResolver._start_timer  sR    -?gkkWq[[GG\\Gi**7DNCCrJ   c                   | j         rdS d| _         | j         | j                                         d| _        | j        D ]}| j                            |           | j        D ]}| j                            |           | j                                         | j                                         | j	        
                                 dS )z:Cleanup timers and file descriptors when closing resolver.NT)r;   rF   r   rD   r2   r  rE   r  clearrB   close)rG   rO   s     rH   _cleanupzDNSResolver._cleanup  s    < 	F;"K   DK . 	( 	(BI##B''''/ 	( 	(BI##B''''rJ   c                r   K   | j         s| j                                         |                                  dS )z
        Cleanly close the DNS resolver.

        This should be called to ensure all resources are properly released.
        After calling close(), the resolver should not be used again.
        N)r;   rB   r   r  rw   s    rH   r  zDNSResolver.close  s7       | 	#M  """rJ   c                
   K   | S )z Enter the async context manager.r:   rw   s    rH   
__aenter__zDNSResolver.__aenter__  s      rJ   exc_typetype[BaseException] | Noneexc_valBaseException | Noneexc_tbTracebackType | Nonec                >   K   |                                   d{V  dS )zExit the async context manager.N)r  )rG   r  r  r  s       rH   	__aexit__zDNSResolver.__aexit__  s.       jjllrJ   c                R    t          | d          r|                                  dS dS )z6Handle cleanup when the resolver is garbage collected.rB   N)hasattrr  rw   s    rH   __del__zDNSResolver.__del__  s1     4$$ 	MMOOOOO	 	rJ   )NN)r0   r1   r2   r3   r4   r	   r5   r6   )r4   r	   r5   rK   )r5   rm   )rx   ry   r5   r6   )r{   r|   r}   r   r~   r   r5   r6   )r5   r   )
r{   r   r   rP   r}   r   r~   r   r5   r6   )r   rP   r5   r   ).)r   r   r   r   r   r   r5   r   )r   r   r   r   r   r   r5   r   )r   r   r   r   r   r   r5   r   )r   r   r   r   r   r   r5   r   )r   r   r   r   r   r   r5   r   )r   r   r   r   r   r   r5   r   )r   r   r   r   r   r   r5   r   )r   r   r   r   r   r   r5   r   )r   r   r   r   r   r   r5   r   )r   r   r   r   r   r   r5   r   )r   r   r   r   r   r   r5   r   rU   )r   r   r   r   r   r   r5   r   )r   r   r   r   r   r   r5   r   )
r{   r   r   r   r}   r   r~   r   r5   r6   )r   r   r   r   r5   r   )r   r   r   r   r   r   r   rP   r   rP   r   rP   r5   r   r   )r   r   r   rP   r5   r   )r   r   r5   r   )r5   r6   rZ   )r5   r   )r  r  r  r  r  r  r5   r6   )__name__
__module____qualname__rI   r@   propertyr0   setterr   r   r   r   r   r   r   r   r   socket	AF_UNSPECr   r   r   r   rV   r
  r  r  r  r  r  r  r:   rJ   rH   r   r   J   s        -115    *2
 2
 2
 2
h D D D XD
 & & & &
# 
# 
# 
#    : : : :"   " CF5 5 5 5 X5 FI8 8 8 8 X8 EH7 7 7 7 X7 GJ3 3 3 3 X3 DG6 6 6 6 X6 GJ9 9 9 9 X9 DG6 6 6 6 X6 EH1 1 1 1 X1 EH1 1 1 1 X1 EH7 7 7 7 X7 EH7 7 7 7 X7
 ;?    < ;?    2   0   > (.'7    2           # # # #@   D D D D   *	 	 	 	           rJ   r   )B
__future__r   r<   r   loggingr$  r^   r   ri   collections.abcr   r   r   typesr   typingr   r	   r
   r   r   r[    r   compatr   r   r   r   r   r   r   r   r   r   r   r   r   r   __version____all__r   rg   	getLoggerr  r`   QUERY_TYPE_AQUERY_TYPE_AAAAQUERY_TYPE_ANYQUERY_TYPE_CAAQUERY_TYPE_CNAMEQUERY_TYPE_MXQUERY_TYPE_NAPTRQUERY_TYPE_NSQUERY_TYPE_PTRQUERY_TYPE_SOAQUERY_TYPE_SRVQUERY_TYPE_TXTr   QUERY_CLASS_INQUERY_CLASS_CHAOSQUERY_CLASS_HSQUERY_CLASS_NONEQUERY_CLASS_ANYr   r   r:   rJ   rH   <module>rA     sh   " " " " " "        



   8 8 8 8 8 8 8 8 8 8       A A A A A A A A A A A A A A                                      " 
 WT]]@ 
 '
H
%
% 
	#!!%

%

!!!!   
 &

 $" x x x x x x x x x xrJ   