
    iS                     T    d dl Z d dlZd dlmZmZmZ d dlZd dlZ G d d          Z	dS )    N)IteratorOptionalTuplec                      e Zd ZdZddedefdZdefdZdedefd	ZddedefdZ	defdZ
defdZdefdZdefdZdefdZdedefdZdded         ddfdZdeddfdZej        dedefd            Zej        defd            ZdS )Parserz)Helper class for parsing DNS wire format.r   wirecurrentc                     || _         d| _        t          | j                   | _        |r|                     |           || _        dS )a  Initialize a Parser

        *wire*, a ``bytes`` contains the data to be parsed, and possibly other data.
        Typically it is the whole message or a slice of it.

        *current*, an `int`, the offset within *wire* where parsing should begin.
        r   N)r   r	   lenendseekfurthest)selfr   r	   s      X/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/dns/wire.py__init__zParser.__init__   sF     	ty>> 	IIg    returnc                      | j         | j        z
  S N)r   r	   r   s    r   	remainingzParser.remaining   s    x$,&&r   sizec                     |dk    sJ ||                                  k    rt          j        j        | j        | j        | j        |z            }| xj        |z  c_        t          | j        | j                  | _        |S Nr   )r   dns	exception	FormErrorr   r	   maxr   )r   r   outputs      r   	get_byteszParser.get_bytes    ss    qyyyy$..""""-))4<$,*==>DM4<88r      length_sizec                     t                               |                     |          d          }|                     |          S )Nbigint
from_bytesr    )r   r"   lengths      r   get_counted_byteszParser.get_counted_bytes)   s3    { ; ;UCC~~f%%%r   c                 P    |                      |                                           S r   )r    r   r   s    r   get_remainingzParser.get_remaining-   s    ~~dnn..///r   c                 ^    t          j        d|                     d                    d         S )Nz!Br!   r   structunpackr    r   s    r   	get_uint8zParser.get_uint80   %    }T4>>!#4#455a88r   c                 ^    t          j        d|                     d                    d         S )Nz!H   r   r-   r   s    r   
get_uint16zParser.get_uint163   r1   r   c                 ^    t          j        d|                     d                    d         S )Nz!I   r   r-   r   s    r   
get_uint32zParser.get_uint326   r1   r   c                 ^    t                               |                     d          d          S )N   r$   r%   r   s    r   
get_uint48zParser.get_uint489   s"    ~~dnnQ//777r   formatc                 v    t          j        ||                     t          j        |                              S r   )r.   r/   r    calcsize)r   r;   s     r   
get_structzParser.get_struct<   s*    }VT^^FOF4K4K%L%LMMMr   Noriginzdns.name.Namec                 r    t           j                            |           }|r|                    |          }|S r   )r   namefrom_wire_parser
relativize)r   r?   rA   s      r   get_namezParser.get_name?   s5    x((.. 	+??6**Dr   wherec                 X    |dk     s|| j         k    rt          j        j        || _        d S r   )r   r   r   r   r	   )r   rE   s     r   r   zParser.seekE   s/     199((-))r   c              #     K   |dk    sJ ||                                  k    rt          j        j        | j        }	 | j        |z   | _        d V  | j        | j        k    rt          j        j        	 || _        d S # || _        w xY wr   )r   r   r   r   r   r	   )r   r   	saved_ends      r   restrict_tozParser.restrict_toL   s      qyyyy$..""""-))H			!|d*DHEEE |tx''m-- ( !DHHHyDH    s   4A: :	Bc              #   N   K   	 d V  | j         | _        d S # | j         | _        w xY wr   )r   r	   r   s    r   restore_furthestzParser.restore_furthest]   s6      	)JJJ=DLLL4=DL((((s    $)r   )r!   r   )__name__
__module____qualname____doc__bytesr&   r   r   r    r)   r+   r0   r4   r7   r:   strr   r>   r   rD   r   
contextlibcontextmanagerr   rI   rK    r   r   r   r      s       33   U  S        '3 ' ' ' 'c e    & &S & & & & &0u 0 0 0 093 9 9 9 99C 9 9 9 99C 9 9 9 98C 8 8 8 8N N N N N N x8 O    # $     ! ! ! ! ! !  )( ) ) ) ) ) )r   r   )
rR   r.   typingr   r   r   dns.exceptionr   dns.namer   rT   r   r   <module>rX      s         , , , , , , , , , ,     W) W) W) W) W) W) W) W) W) W)r   