a
    sd_                     @   sp   d Z ddlZddlZG dd dejjZe ej	 G dd dej
jZdd Zd	d
 Zdd ZdddZdS )zDNS Result Codes.    Nc                   @   sx   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZedd Zedd ZdS )Rcoder                           	   
                              c                 C   s   dS )N   clsr   r   +/usr/lib/python3/dist-packages/dns/rcode.py_maximumC   s    zRcode._maximumc                 C   s   t S )N)UnknownRcoder   r   r   r   _unknown_exception_classG   s    zRcode._unknown_exception_classN)__name__
__module____qualname__ZNOERRORZFORMERRZSERVFAILZNXDOMAINZNOTIMPZREFUSEDZYXDOMAINZYXRRSETZNXRRSETZNOTAUTHZNOTZONEZ	DSOTYPENIBADVERSBADSIGZBADKEYZBADTIMEZBADMODEZBADNAMEZBADALGZBADTRUNCZ	BADCOOKIEclassmethodr   r   r   r   r   r   r      s2   
r   c                   @   s   e Zd ZdZdS )r   zA DNS rcode is unknown.N)r   r   r    __doc__r   r   r   r   r   M   s   r   c                 C   s
   t | S )zConvert text into an rcode.

    *text*, a ``str``, the textual rcode or an integer in textual form.

    Raises ``dns.rcode.UnknownRcode`` if the rcode mnemonic is unknown.

    Returns an ``int``.
    )r   	from_text)textr   r   r   r%   Q   s    
r%   c                 C   s0   | d@ |d? d@ B }|dk s$|dkr,t d|S )zReturn the rcode value encoded by flags and ednsflags.

    *flags*, an ``int``, the DNS flags field.

    *ednsflags*, an ``int``, the EDNS flags field.

    Raises ``ValueError`` if rcode is < 0 or > 4095

    Returns an ``int``.
       r     r   r   rcode must be >= 0 and <= 4095
ValueError)flagsZ	ednsflagsvaluer   r   r   
from_flags^   s    r.   c                 C   s4   | dk s| dkrt d| d@ }| d@ d> }||fS )zReturn a (flags, ednsflags) tuple which encodes the rcode.

    *value*, an ``int``, the rcode.

    Raises ``ValueError`` if rcode is < 0 or > 4095.

    Returns an ``(int, int)`` tuple.
    r   r   r)   r'   r(   r   r*   )r-   vZevr   r   r   to_flagsp   s
    
r0   Fc                 C   s   |r| t jkrdS t | S )zConvert rcode into text.

    *value*, an ``int``, the rcode.

    Raises ``ValueError`` if rcode is < 0 or > 4095.

    Returns a ``str``.
    r"   )r   r!   to_text)r-   Ztsigr   r   r   r1      s    
r1   )F)r$   Zdns.enumZdnsZdns.exceptionenumIntEnumr   globalsupdate__members__Z	exceptionZDNSExceptionr   r%   r.   r0   r1   r   r   r   r   <module>   s   4