a
    PÒš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(eedœdd„Zedœdd„Zeedœd	d
„Zd)eedœdd„Zedœdd„Z	edœdd„Z
edœdd„Zedœdd„Zedœdd„Zeedœdd„Zd*ed ddœdd „Zedd!œd"d#„Zejeedœd$d%„ƒZejedœ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   úC/wd/webapps/venvs/v2025_4um/lib/python3.9/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)Úsizer   c                 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_sizer   c                 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   s   t  d|  d¡¡d S )Nz!Br   r   ©ÚstructÚunpackr   r   r   r   r   Ú	get_uint8'   s    zParser.get_uint8c                 C   s   t  d|  d¡¡d S )Nz!Hé   r   r%   r   r   r   r   Ú
get_uint16*   s    zParser.get_uint16c                 C   s   t  d|  d¡¡d S )Nz!Ié   r   r%   r   r   r   r   Ú
get_uint32-   s    zParser.get_uint32c                 C   s   t  |  d¡d¡S )Né   r   r   r   r   r   r   Ú
get_uint480   s    zParser.get_uint48)Úformatr   c                 C   s   t  ||  t  |¡¡¡S r   )r&   r'   r   Úcalcsize)r   r/   r   r   r   Ú
get_struct3   s    zParser.get_structNzdns.name.Name)Úoriginr   c                 C   s   t j | ¡}|r| |¡}|S r   )r   ÚnameZfrom_wire_parserZ
relativize)r   r2   r3   r   r   r   Úget_name6   s    
zParser.get_name)Úwherer   c                 C   s$   |dk s|| j krtjj‚|| _d S r   )r
   r   r   r   r   )r   r5   r   r   r   r   <   s    zParser.seekc                 c   sd   |dksJ ‚||   ¡ kr tjj‚| j}z0| j| | _d V  | j| jkrNtjj‚W || _n|| _0 d S 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 | _n
| j | _0 d S r   )r   r   r   r   r   r   Úrestore_furthestT   s    zParser.restore_furthest)r   )r   )N)Ú__name__Ú
__module__Ú__qualname__Úbytesr    r   r   r   r#   r$   r(   r*   r,   r.   Ústrr   r1   r   r4   r   Ú
contextlibÚcontextmanagerr   r6   r7   r   r   r   r   r      s    	r   )
r=   r&   Útypingr   r   r   Zdns.exceptionr   Zdns.namer   r   r   r   r   Ú<module>   s
   