
    h                         S r SSKrSSKrSSKJrJr  SSKJrJrJ	r	J
r
  SSKJr   " S S\R                  5      rS rS	 rg)
z
Domain Name Server
    N)internetservice)	authoritydns	secondaryserver)usagec                       \ rS rSr/ SQ/ SQ/ SQ/ SQ/r/ SQ/ SQ/ SQ/r\R                  " S	\R                  " 5       0S
9r	Sr
SrS rS rS rS rS rS rSrg)Options   )	interfacei zThe interface to which to bind)portp53zThe port on which to listen)resolv-confNNz6Override location of resolv.conf (implies --recursive))
hosts-fileNNz!Perform lookups with a hosts file)cacheczEnable record caching)	recursiverzPerform recursive lookups)verbosevzLog verboselyr   )
optActionsNc                 v    [         R                  R                  U 5        SU S'   / U l        / U l        / U l        g )Nr   r   )r	   r   __init__	bindfiles	zonefilessecondariesselfs    X/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/twisted/names/tap.pyr   Options.__init__+   s3    t$Y    c                     [         R                  R                  U5      (       d  [        R                  " US-   5      eU R
                  R                  U5        g)z7Specify the filename of a Python syntax zone definition: No such fileN)ospathexistsr	   
UsageErrorr   appendr"   filenames     r#   
opt_pyzoneOptions.opt_pyzone2   >    ww~~h''""8.>#>??h'r%   c                     [         R                  R                  U5      (       d  [        R                  " US-   5      eU R
                  R                  U5        g)z6Specify the filename of a BIND9 syntax zone definitionr'   N)r(   r)   r*   r	   r+   r   r,   r-   s     r#   opt_bindzoneOptions.opt_bindzone8   r1   r%   c                    UR                  SS5      n[        U5      S:w  a  [        R                  " S5      eUS   R                  S5      n[        U5      S:X  a  US   [        R
                  4nO [        US   5      nUS   U4nU R                  R                  X2S   /45        g! [         a    [        R                  " SUS   < 35      ef = f)	zgAct as secondary for the specified domain, performing
zone transfers from the specified IP (IP/domain)
/      z-Argument must be of the form IP[:port]/domainr   :z$Specify an integer port number, not N)
splitlenr	   r+   r   PORTint
ValueErrorr    r,   )r"   	ip_domainargsaddressr   s        r#   opt_secondaryOptions.opt_secondary>   s     sA&t9>""#RSSq'--$w<1qz388,G71:
 qz4(G7) 45  &&:71:.I s   2B( ((Cc                     U S==   S-  ss'   g)zIncrement verbosity levelr   r7   N r!   s    r#   opt_verboseOptions.opt_verboseR   s    Y1r%   c                    U S   (       a  SU S'   / U l         / U l        U R                   H3  n U R                  R                  [        R
                  " U5      5        M5     U R                   H3  n U R                  R                  [        R                  " U5      5        M5     U R                   Hq  n[        R                  R                   " U6 nU R                   R                  U5        U R                  R                  U R                   S   R#                  5       5        Ms      [%        U S   5      U S'   g ! [         a/    [        R                  " 5         [        R                  " SU-   5      ef = f! [         a/    [        R                  " 5         [        R                  " SU-   5      ef = f! [&         a)    [        R                  " SR)                  U S   5      5      ef = f)Nr   Tr   zInvalid syntax in r   zInvalid port: {!r})svcszonesr   r,   r   PySourceAuthority	Exception	traceback	print_excr	   r+   r   BindAuthorityr    r   SecondaryAuthorityServicefromServerAddressAndDomainsgetAuthorityr=   r>   format)r"   fsvcs      r#   postOptionsOptions.postOptionsV   s    $D	
AA

!!)"="=a"@A   AA

!!)"9"9!"<=   !!A55QQSTUCIIS!JJdiim88:; "	NtF|,DL  A##%&&';a'?@@A  A##%&&';a'?@@A  	N""#7#>#>tF|#LMM	Ns#   /D81/E4&F0 89E149F-03G#)r   r    rJ   r   rK   )__name__
__module____qualname____firstlineno__optParametersoptFlagsr	   CompletionsCompleteNetInterfacescompDatarK   r   r   r/   r3   rB   rF   rW   __static_attributes__rE   r%   r#   r   r      sz    @:	
 	H
M 	07)H   !<!<!>?H EI((6(Nr%   r   c                 $   SSK JnJnJn  / / pTU S   (       a!  UR	                  UR                  U S   S95        U S   (       a!  UR	                  UR                  U S   S95        U S   (       a!  UR	                  UR                  U S	   S
95        XE4$ )a	  
Build DNS resolver instances in an order which leaves recursive
resolving as a last resort.

@type config: L{Options} instance
@param config: Parsed command-line configuration

@return: Two-item tuple of a list of cache resovers and a list of client
    resolvers
r   )r   clienthostsr   r   )r   r   )filer   r   )
resolvconf)twisted.namesr   rd   re   r,   CacheResolverResolvercreateResolver)configr   rd   re   cacls         r#   _buildResolversro   r   s     32g
		%%%fY.?%@Al
		%..f\&:.;<k
		&''6-3H'IJ6Mr%   c                    [        U 5      u  p[        R                  " U R                  XU S   5      n[        R
                  " U5      nSUl        [        R                  " 5       n[        R                  U4[        R                  U44 H#  u  pgU" U S   XpS   S9nUR                  U5        M%     U R                   H  n	U	R                  U5        M     U$ )Nr   r   r   r   )r   )ro   r   DNSServerFactoryrK   r   DNSDatagramProtocolnoisyr   MultiServicer   	TCPServer	UDPServersetServiceParentrJ   )
rl   rm   rn   rU   r   retklassargsrV   s
             r#   makeServicer|      s    V$FBbfY6GHA"AAG



 C **A.1C1CQ0GH
&.#1DE	3 I {{S! Jr%   )__doc__r(   rN   twisted.applicationr   r   rh   r   r   r   r   twisted.pythonr	   r   ro   r|   rE   r%   r#   <module>r      s=   
 
  1 ; ;  ^Nemm ^NB.r%   