a
    sd_™	  ã                   @   s2   d dl Z d dlZd dlZd dlZG dd„ dƒZdS )é    Nc                   @   s†   e Zd Zddd„Zdd„ Zdd„ Zdd	d
„Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zd dd„Zdd„ Zejdd„ ƒZejdd„ ƒZdS )!ÚParserr   c                 C   s0   || _ d| _t| j ƒ| _|r&|  |¡ || _d S ©Nr   )ÚwireÚcurrentÚlenÚendÚseekÚfurthest)Úselfr   r   © r   ú*/usr/lib/python3/dist-packages/dns/wire.pyÚ__init__
   s    
zParser.__init__c                 C   s   | j | j S ©N)r   r   ©r
   r   r   r   Ú	remaining   s    zParser.remainingc                 C   sL   ||   ¡ krtjj‚| j| j| j| … }|  j|7  _t| j| jƒ| _|S r   )r   ÚdnsÚ	exceptionÚ	FormErrorr   r   Úmaxr	   )r
   ÚsizeÚoutputr   r   r   Ú	get_bytes   s    zParser.get_bytesé   c                 C   s   t  |  |¡d¡}|  |¡S )NZbig)ÚintÚ
from_bytesr   )r
   Zlength_sizeZ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  ||  t  |¡¡¡S r   )r   r   r   Zcalcsize)r
   Úformatr   r   r   Ú
get_struct-   s    zParser.get_structNc                 C   s   t j | ¡}|r| |¡}|S r   )r   ÚnameZfrom_wire_parserZ
relativize)r
   Úoriginr'   r   r   r   Úget_name0   s    
zParser.get_namec                 C   s$   |dk s|| j krtjj‚|| _d S r   )r   r   r   r   r   )r
   Úwherer   r   r   r   6   s    zParser.seekc                 c   sX   ||   ¡ krtjj‚| j}z0| j| | _d V  | j| jkrBtjj‚W || _n|| _0 d S r   )r   r   r   r   r   r   )r
   r   Z	saved_endr   r   r   Úrestrict_to=   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_furthestM   s    zParser.restore_furthest)r   )r   )N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r    r"   r$   r&   r)   r   Ú
contextlibÚcontextmanagerr+   r,   r   r   r   r   r   	   s   



r   )r0   r   Zdns.exceptionr   Zdns.namer   r   r   r   r   Ú<module>   s   