
    Eqg                         d dl Z d dlZ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ej                            d          Z G d d          Zd Zd Zd ZdS )	    N)urlparsez_dns.resolver.arpac                   .    e Zd Zd Zd Zd Zd ZddZdS )	_SVCBInfoc                 >    || _         || _        || _        || _        d S N)bootstrap_addressporthostnamenameservers)selfr   r	   r
   r   s        :/var/www/html/env/lib/python3.11/site-packages/dns/_ddr.py__init__z_SVCBInfo.__init__   s&    !2	 &    c                 J    |d         D ]\  }}|dk    r|| j         k    r dS dS )zIVerify that the _SVCBInfo's address is in the cert's subjectAltName (SAN)subjectAltNamez
IP AddressTF)r   )r   certnamevalues       r   ddr_check_certificatez_SVCBInfo.ddr_check_certificate!   s@     01 	 	KD%|##1G(G(Gttur   c                 r    t           j        j        }|                                }|j        j        |_        |S r   )dnsquerysslcreate_default_context
TLSVersionTLSv1_2minimum_version)r   r   ctxs      r   make_tls_contextz_SVCBInfo.make_tls_context(   s.    im((**!n4
r   c                 .   |                                  }t          j                    |z   }t          j        | j        | j        f|          5 }|                    || j                  5 }|                    t          j
                            |                     |                                 |                                }|                     |          cd d d            cd d d            S # 1 swxY w Y   	 d d d            d S # 1 swxY w Y   d S )N)server_hostname)r   timesocketcreate_connectionr   r	   wrap_socketr
   
settimeoutr   r   
_remainingdo_handshakegetpeercertr   )r   lifetimer   
expirationstsr   s          r   ddr_tls_check_syncz_SVCBInfo.ddr_tls_check_sync.   s   ##%%Y[[8+
%#TY/
 
 	8DMBB 8bci22:>>???!!!~~''11$77	8 8 8 8 8 8 8	8 	8 	8 	8 	8 	8 	8 	88 8 8 8 8 8 8 8 8	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s7   D
)A/C1D
1C5	5D
8C5	9D

DDNc           
      L  K   |t           j                                        }|                                 }t	          j                    |z   }|                    t           j                            | j                  t          j
        dd | j        | j        f||| j                   d {V 4 d {V 	 }|                    t           j                            |                     d {V }|                     |          cd d d           d {V  S # 1 d {V swxY w Y   d S )Nr   )r   asyncbackendget_default_backendr   r"   make_socketinetaf_for_addressr   r#   SOCK_STREAMr	   r
   r)   r   r'   r   )r   r*   backendr   r+   r-   r   s          r   ddr_tls_check_asyncz_SVCBInfo.ddr_tls_check_async:   s     ?&::<<G##%%Y[[8+
 ,,H##D$:;;#TY/M	
 	
 	
 	
 	
 	
 	
 	
 	4 	4 	4 	4 	4 	4 	4 	4 	(<(<Z(H(HIIIIIIIID--d33	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   3AD
D Dr   )__name__
__module____qualname__r   r   r   r.   r7    r   r   r   r      sd        ' ' '    
8 
8 
84 4 4 4 4 4r   r   c           	      $   | j         }t          j                            |          sg S g }| j                                        D ]J}g }|j                            t          j        j	        j
        j                  }|;t          |j                  }|j                            d          }d }|j                            t          j        j	        j
        j                  }||j        }d|v r|j                            t          j        j	        j
        j                  }||j                            d          s|j        d d                                         }	|	                    d          sd|	z   }	|d}d| d	| |	 }
	 t/          |
           |                    t          j                             |
|                     n# t4          $ r Y nw xY wd
|v r8|d}|                    t          j                             |||                     d|v r9|d}|                    t          j                             ||d|                     t;          |          dk    r%|                    t=          ||||                     L|S )NT)omit_final_dots   h2s   {?dns}i/i  zhttps://:s   dotiU  s   doqr   )
nameserverr   r3   
is_addressrrsetprocessing_orderparamsgetrdtypessvcbbaseParamKeyALPNsetidstargetto_textPORTr	   DOHPATHr   endswithdecode
startswithr   appendDoHNameserver	ExceptionDoTNameserverDoQNameserverlenr   )answerr   infosrrr   paramalpnshostr	   pathurls              r   _extract_nameservers_from_svcbra   M   s   )8011 	El++-- +P +P	ck2;@AA=EIy   55	ck2;@AA:D E>>IMM#+"6"?"GHHE}EK$8$8$C$C};ss#**,,D??3'' "Tz|0T00D0$00C""3>#?#?EV#W#WXXXX    U??|,,->dKK   U??|,,->dDQQ   {aLL#4dD+NNOOOLs   
AG
GGc                     g }t          |           }|D ]B}	 |                    |          r|                    |j                   3# t          $ r Y ?w xY w|S )VReturn a list of TLS-validated resolver nameservers extracted from an SVCB
    answer.)ra   r.   extendr   rU   rY   r*   r   rZ   infos        r   _get_nameservers_syncrg      s~     K*622E  	&&x00 5""4#3444 	 	 	D	s   /A
AAc                    K   g }t          |           }|D ]H}	 |                    |           d{V r|                    |j                   9# t          $ r Y Ew xY w|S )rc   N)ra   r7   rd   r   rU   re   s        r   _get_nameservers_asyncri      s       K*622E  	--h77777777 5""4#3444 	 	 	D	s   5A
AA)r#   r"   urllib.parser   dns.asyncbackendr   dns.inetdns.namedns.nameserver	dns.querydns.rdtypes.svcbbaser   	from_text_local_resolver_namer   ra   rg   ri   r;   r   r   <module>rs      s   
   ! ! ! ! ! !                   x))*>?? 04 04 04 04 04 04 04 04f1 1 1h      r   