U
    <æ{f  ã                   @   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   úG/var/www/html/Darija-Ai-API/env/lib/python3.8/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t ‚||  ¡ kr tjj‚| j| j| j| … }|  j|7  _t| j| jƒ| _|S r   )	ÚAssertionErrorr   Ú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   r0   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   r3   r4   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   r6   r   r   r   r   <   s    zParser.seekc                 c   s^   |dkst ‚||  ¡ kr tjj‚| j}z*| j| | _d V  | j| jkrNtjj‚W 5 || _X d S r   )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 5 | j | _X 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   r2   r   r5   r   Ú
contextlibÚcontextmanagerr   r7   r8   r   r   r   r   r      s    	r   )
r>   r'   Útypingr   r   r   Zdns.exceptionr   Zdns.namer   r   r   r   r   Ú<module>   s
   