o
    šh  ã                   @   sF   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„ dƒZ	dS )é    N)ÚIteratorÚOptionalÚTuplec                   @   s  e Zd Zd)dedefdd„Zdefdd„Zd	edefd
d„Zd*dedefdd„Zdefdd„Z	defdd„Z
defdd„Zdefdd„Zdefdd„Zdedefdd„Zd+ded ddfd d!„Zd"eddfd#d$„Zejd	edefd%d&„ƒZejdefd'd(„ƒZdS ),ÚParserr   ÚwireÚcurrentc                 C   s0   || _ d| _t| j ƒ| _|r|  |¡ || _d S ©Nr   )r   r   ÚlenÚendÚseekÚfurthest)Úselfr   r   © r   ú;/var/www/html/venv/lib/python3.10/site-packages/dns/wire.pyÚ__init__   s   

zParser.__init__Úreturnc                 C   s   | j | j S ©N)r
   r   ©r   r   r   r   Ú	remaining   s   zParser.remainingÚsizec                 C   sX   |dksJ ‚||   ¡ krtjj‚| j| j| j| … }|  j|7  _t| j| jƒ| _|S r   )r   ÚdnsÚ	exceptionÚ	FormErrorr   r   Úmaxr   )r   r   Úoutputr   r   r   Ú	get_bytes   s   zParser.get_bytesé   Úlength_sizec                 C   s   t  |  |¡d¡}|  |¡S )NÚbig©ÚintÚ
from_bytesr   )r   r   Úlengthr   r   r   Úget_counted_bytes    s   
zParser.get_counted_bytesc                 C   s   |   |  ¡ ¡S r   )r   r   r   r   r   r   Úget_remaining$   s   zParser.get_remainingc                 C   ó   t  d|  d¡¡d S )Nz!Br   r   ©ÚstructÚunpackr   r   r   r   r   Ú	get_uint8'   ó   zParser.get_uint8c                 C   r%   )Nz!Hé   r   r&   r   r   r   r   Ú
get_uint16*   r*   zParser.get_uint16c                 C   r%   )Nz!Ié   r   r&   r   r   r   r   Ú
get_uint32-   r*   zParser.get_uint32c                 C   s   t  |  d¡d¡S )Né   r   r   r   r   r   r   Ú
get_uint480   s   zParser.get_uint48Úformatc                 C   s   t  ||  t  |¡¡¡S r   )r'   r(   r   Úcalcsize)r   r1   r   r   r   Ú
get_struct3   s   zParser.get_structNÚoriginzdns.name.Namec                 C   s   t j | ¡}|r| |¡}|S r   )r   ÚnameZfrom_wire_parserZ
relativize)r   r4   r5   r   r   r   Úget_name6   s   
zParser.get_nameÚwherec                 C   s$   |dk s	|| j krtjj‚|| _d S r   )r
   r   r   r   r   )r   r7   r   r   r   r   <   s   
zParser.seekc                 c   sd    |dksJ ‚||   ¡ krtjj‚| j}z| j| | _d V  | j| jkr(tjj‚W || _d S || _w r   )r   r   r   r   r
   r   )r   r   Z	saved_endr   r   r   Úrestrict_toC   s   €ÿzParser.restrict_toc                 c   s"    z
d V  W | j | _d S | j | _w r   )r   r   r   r   r   r   Úrestore_furthestT   s   €zParser.restore_furthest)r   )r   r   )Ú__name__Ú
__module__Ú__qualname__Úbytesr    r   r   r   r#   r$   r)   r,   r.   r0   Ústrr   r3   r   r6   r   Ú
contextlibÚcontextmanagerr   r8   r9   r   r   r   r   r      s"    	r   )
r?   r'   Útypingr   r   r   Zdns.exceptionr   Zdns.namer   r   r   r   r   Ú<module>   s   