o
    Òó·i¿  ã                   @   sn   d Z ddlZddlZddlmZmZ ddlmZmZm	Z	m
Z
 ddlmZ G dd„ dejƒZdd	„ Zd
d„ ZdS )z
Domain Name Server
é    N)ÚinternetÚservice)Ú	authorityÚdnsÚ	secondaryÚserver)Úusagec                   @   sŠ   e Zd Zg d¢g d¢g d¢g d¢gZg d¢g d¢g d¢gZejde ¡ id	�Zd
Z	d
Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd
S )ÚOptions)Ú	interfaceÚiÚ zThe interface to which to bind)ÚportÚpZ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
   )Z
optActionsNc                 C   s*   t j | ¡ d| d< g | _g | _g | _d S )Nr   r   )r   r	   Ú__init__Ú	bindfilesÚ	zonefilesÚsecondaries©Úself© r   úWC:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\twisted/names/tap.pyr   +   s
   
zOptions.__init__c                 C   ó*   t j |¡st |d ¡‚| j |¡ dS )z7Specify the filename of a Python syntax zone definitionú: No such fileN)ÚosÚpathÚexistsr   Ú
UsageErrorr   Úappend©r   Úfilenamer   r   r   Ú
opt_pyzone2   ó   zOptions.opt_pyzonec                 C   r   )z6Specify the filename of a BIND9 syntax zone definitionr    N)r!   r"   r#   r   r$   r   r%   r&   r   r   r   Úopt_bindzone8   r)   zOptions.opt_bindzonec                 C   s¦   |  dd¡}t|ƒdkrt d¡‚|d   d¡}t|ƒdkr&|d tjf}n zt|d ƒ}W n ty?   t d|d ›�¡‚w |d |f}| j 	||d gf¡ dS )	zwAct 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   ZPORTÚintÚ
ValueErrorr   r%   )r   Z	ip_domainÚargsÚaddressr   r   r   r   Úopt_secondary>   s   
ÿÿzOptions.opt_secondaryc                 C   s   | d  d7  < dS )zIncrement verbosity levelr   r,   Nr   r   r   r   r   Úopt_verboseR   s   zOptions.opt_verbosec              	   C   s  | d rd| d< g | _ g | _| jD ]}z| j t |¡¡ W q ty0   t ¡  t	 
d| ¡‚w | jD ]}z| j t |¡¡ W q4 tyS   t ¡  t	 
d| ¡‚w | jD ]}tjj|Ž }| j  |¡ | j | j d  ¡ ¡ qWzt| d ƒ| d< W d S  ty�   t	 
d | d ¡¡‚w )Nr   Tr   zInvalid syntax in éÿÿÿÿr   zInvalid port: {!r})ÚsvcsÚzonesr   r%   r   ZPySourceAuthorityÚ	ExceptionÚ	tracebackÚ	print_excr   r$   r   ZBindAuthorityr   r   ZSecondaryAuthorityServiceZfromServerAddressAndDomainsZgetAuthorityr1   r2   Úformat)r   ÚfÚsvcr   r   r   ÚpostOptionsV   s6   
þ
þ
ÿzOptions.postOptions)Ú__name__Ú
__module__Ú__qualname__ZoptParametersZoptFlagsr   ZCompletionsZCompleteNetInterfacesZcompDatar9   r   r   r(   r*   r5   r6   r@   r   r   r   r   r	      s*    ÷ý
ÿr	   c                 C   s€   ddl m}m}m} g g }}| d r| |j| d d�¡ | d r-| |j| d d�¡ | d r<| |j| d	 d
�¡ ||fS )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   )Z
resolvconfN)Útwisted.namesr   rD   rE   r%   ZCacheResolverÚResolverZcreateResolver)Úconfigr   rD   rE   ÚcaÚclr   r   r   Ú_buildResolversr   s   
rL   c           
      C   s’   t | ƒ\}}t | j||| d ¡}t |¡}d|_t ¡ }t	j
|ft	j|ffD ]\}}|| d || d d�}| |¡ q'| jD ]}	|	 |¡ q?|S )Nr   r   r   r
   )r
   )rL   r   ZDNSServerFactoryr9   r   ZDNSDatagramProtocolZnoisyr   ZMultiServicer   Ú	TCPServerÚ	UDPServerZsetServiceParentr8   )
rI   rJ   rK   r>   r   ÚretÚklassÚargÚsr?   r   r   r   ÚmakeService‰   s   

rS   )Ú__doc__r!   r;   Ztwisted.applicationr   r   rG   r   r   r   r   Ztwisted.pythonr   r	   rL   rS   r   r   r   r   Ú<module>   s   a