
    _?iS                     L    S SK r S SKrS SKJrJrJr  S SKrS SKr " S S5      r	g)    N)IteratorOptionalTuplec                   F   \ rS rSrSrSS\S\4S jjrS\4S jrS\S\4S	 jr	SS
\S\4S jjr
S\4S jrS\4S jrS\4S jrS\4S jrS\4S jrS\S\4S jrSS\S   SS4S jjrS\SS4S jr\R.                  S\S\4S j5       r\R.                  S\4S j5       rSrg)Parser   z)Helper class for parsing DNS wire format.wirecurrentc                     Xl         SU l        [        U R                   5      U l        U(       a  U R	                  U5        X l        g)zInitialize 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      L/var/www/html/livechat/backend/venv/lib/python3.13/site-packages/dns/wire.py__init__Parser.__init__   s3     	tyy>IIg    returnc                 4    U R                   U R                  -
  $ N)r   r
   r   s    r   	remainingParser.remaining   s    xx$,,&&r   sizec                 0   US:  d   eXR                  5       :  a  [        R                  R                  eU R                  U R
                  U R
                  U-    nU =R
                  U-  sl        [        U R                  U R
                  5      U l        U$ Nr   )r   dns	exception	FormErrorr	   r
   maxr   )r   r   outputs      r   	get_bytesParser.get_bytes    sq    qyy..""--)))4<<$,,*=>DMM4<<8r   length_sizec                 n    [         R                  U R                  U5      S5      nU R                  U5      $ )Nbigint
from_bytesr#   )r   r%   lengths      r   get_counted_bytesParser.get_counted_bytes)   s*    { ;UC~~f%%r   c                 @    U R                  U R                  5       5      $ r   )r#   r   r   s    r   get_remainingParser.get_remaining-   s    ~~dnn.//r   c                 T    [         R                  " SU R                  S5      5      S   $ )Nz!B   r   structunpackr#   r   s    r   	get_uint8Parser.get_uint80   !    }}T4>>!#45a88r   c                 T    [         R                  " SU R                  S5      5      S   $ )Nz!H   r   r3   r   s    r   
get_uint16Parser.get_uint163   r8   r   c                 T    [         R                  " SU R                  S5      5      S   $ )Nz!I   r   r3   r   s    r   
get_uint32Parser.get_uint326   r8   r   c                 L    [         R                  U R                  S5      S5      $ )N   r'   r(   r   s    r   
get_uint48Parser.get_uint489   s    ~~dnnQ/77r   formatc                 t    [         R                  " XR                  [         R                  " U5      5      5      $ r   )r4   r5   r#   calcsize)r   rE   s     r   
get_structParser.get_struct<   s#    }}V^^FOOF4K%LMMr   Noriginzdns.name.Namec                 t    [         R                  R                  U 5      nU(       a  UR                  U5      nU$ r   )r   namefrom_wire_parser
relativize)r   rJ   rL   s      r   get_nameParser.get_name?   s,    xx((.??6*Dr   wherec                 n    US:  d  XR                   :  a  [        R                  R                  eXl        g r   )r   r   r   r    r
   )r   rQ   s     r   r   Parser.seekE   s)     19(--)))r   c              #   L  #    US:  d   eXR                  5       :  a  [        R                  R                  eU R                  n U R
                  U-   U l        S v   U R
                  U R                  :w  a  [        R                  R                  e X l        g ! X l        f = f7fr   )r   r   r   r    r   r
   )r   r   	saved_ends      r   restrict_toParser.restrict_toL   s     qyy..""--)))HH			!||d*DH ||txx'mm--- ( !HyHs   AB$AB B$B!!B$c              #   d   #     S v   U R                   U l        g ! U R                   U l        f = f7fr   )r   r
   r   s    r   restore_furthestParser.restore_furthest]   s%     	)J==DL4==DLs   0 0-0)r
   r   r   r	   )r   )r2   r   )__name__
__module____qualname____firstlineno____doc__bytesr)   r   r   r#   r,   r/   r6   r;   r?   rC   strr   rH   r   rO   r   
contextlibcontextmanagerr   rV   rY   __static_attributes__ r   r   r   r      s   3 U  S  '3 'c e &S & &0u 093 99C 99C 98C 8N N Nx8 O # $  ! ! ! !  )( ) )r   r   )
rb   r4   typingr   r   r   dns.exceptionr   dns.namer   re   r   r   <module>ri      s%      , ,  W) W)r   