
    h                         d dl mZ d dlZddlmZmZ ddlmZmZ  e	 e
dd            Z ej                  d      Zd ad	 Zd
 Z G d de      Z G d de      Z G d de      Zy)    )print_functionN   )get_bitsset_bits)BufferBufferError!      z\\([0-9][0-9][0-9])c                      da y Nr   )	avahi_379     R/jellyfin/media/venv/lib/python3.12/site-packages/copyparty/stolen/dnslib/label.pyset_avahi_379r      s    Ir   c                 :    t         dk(  ry da d}t        || z        )N   zInvalid pointer in DNSLabel [offset=%d,pointer=%d,length=%d];
[35m  NOTE: this is probably avahi-bug #379, packet corruption in Avahi's mDNS-reflection feature. Copyparty has a workaround and is OK, but other devices need either --zm4 or --zm6)r   r   )argsts     r   log_avahi_379r      s(    A~I 	CA
a$h
r   c                       e Zd Zy)DNSLabelErrorN)__name__
__module____qualname__r   r   r   r   r      s    r   r   c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)DNSLabelc                 j   t        |      t        k(  r|j                  | _        y t        |      t        t        fv rt	        |      | _        y |r|dv rd| _        y t        |      t
        urlt        d      t        d      k7  rt        j                  d |      }t	        |j                  d      j                  d      j                  d            | _        y t        d      t        d      k(  rt        j                  d |      }t	        |j                  d      j                  d            | _        y )	N)   ..r    r   c                 0    t        t        | d               S r   )chrintms    r   <lambda>z#DNSLabel.__init__.<locals>.<lambda>/   s    S1Y r   idnar   c                 L    t        t        | j                         d               S )Nr   )r#   r$   groupsr%   s    r   r'   z#DNSLabel.__init__.<locals>.<lambda>4   s    SA5G1H r   )typer   labellisttuplebytesESCAPEsubencoderstripsplit)selfr,   s     r   __init__zDNSLabel.__init__$   s    ;("DJ%[T5M)uDJE[0
eE)8tCy("JJ'?GE"5<<#7#>#>t#D#J#J4#PQ
8tCy("JJ'H%PE"5<<#5#;#;D#AB
r   c                 r    t        |      }| j                  r|xj                  | j                  z  c_        |S N)r   r,   )r5   namenews      r   addzDNSLabel.add7   s)    tn::II#I
r   c                     dj                  | j                  D cg c]  }|j                  d       c}      dz   S c c}w )Nr    r(   )joinr,   decoder5   ss     r   r(   zDNSLabel.idna=   s1    xx4::>a&)>?#EE>s   <c                     t        |      j                  t              r|j                         S dj	                  |D cg c]  }|t        v rt        |      nd|z   c}      S c c}w )Nr!   z\%03d)setissubsetLDHr>   r=   r#   )r5   r@   cs      r   _decodezDNSLabel._decode@   sP    q6??388: 77aPSSVx!|CPQQPs   A$c           
          dj                  | j                  D cg c]  }| j                  t        |             c}      dz   S c c}w )Nr    )r=   r,   rF   	bytearrayr?   s     r   __str__zDNSLabel.__str__H   s5    xxTZZHil3HICOOHs   !Ac                     dt        |       z  S )Nz<DNSLabel: '%s'>)strr5   s    r   __repr__zDNSLabel.__repr__K   s    !CI--r   c                 T    t        t        t        d | j                                    S )Nc                 "    | j                         S r8   )lower)xs    r   r'   z#DNSLabel.__hash__.<locals>.<lambda>O   s    	 r   )hashr.   mapr,   rL   s    r   __hash__zDNSLabel.__hash__N   s    E#14::>?@@r   c                     | |k(   S r8   r   )r5   others     r   __ne__zDNSLabel.__ne__Q   s    5=  r   c                    t        |      t        k7  r| j                  t        |            S | j                  D cg c]  }|j	                          c}|j                  D cg c]  }|j	                          c}k(  S c c}w c c}w r8   )r+   r   __eq__r,   rP   )r5   rV   ls      r   rY   zDNSLabel.__eq__T   s\    ;(";;x//'+zz2!AGGI2%++6VQqwwy6VVV26Vs   A>"Bc                 J    t        dj                  | j                              S )Nr   )lenr=   r,   rL   s    r   __len__zDNSLabel.__len__Z   s    499TZZ())r   N)r   r   r   r6   r;   r(   rF   rI   rM   rT   rW   rY   r]   r   r   r   r   r   #   s:    C&FRP.A!W*r   r   c                   4     e Zd Zd fd	ZddZd Zd Z xZS )	DNSBufferc                 :    t         t        |   |       i | _        y r8   )superr_   r6   names)r5   data	__class__s     r   r6   zDNSBuffer.__init___   s    i'-
r   c                    g }d}|s| j                  d      \  }t        |dd      dk(  r:| xj                  dz  c_        t        | j                  d      d   dd	      }| j                  }||k(  r.t        d
| j                  |t	        | j
                        fz        || j                  k  r|| _        n|t        rHt        | j                  |t	        | j
                        f       |j                  d       	 t        |      S t        d| j                  |t	        | j
                        fz        |j                  | j                  |      j                         || _        d}n;|dkD  r4| j                  |      }	 |j                          |j                  |       nd}|st        |      S # t        $ r t        d|z        w xY w)NF!B   r      r   !Hr      z>Recursive pointer in DNSLabel [offset=%d,pointer=%d,length=%d]   az<Invalid pointer in DNSLabel [offset=%d,pointer=%d,length=%d]TzInvalid label <%s>)unpackr   offsetr   r\   rc   r   r   extenddecode_namer,   getr>   UnicodeDecodeErrorappendr   )r5   lastr,   donelengthpointersaverZ   s           r   ro   zDNSBuffer.decode_namec   s   D)IV1%*q "4;;t#4Q#7B?{{4<%X;;TYY@A  T[[(")DK!4;;TYY"HILL&& # &V;;TYY@A  T--d399:"A:(AD
 LLODG H  . D)*>*BCCDs   =F0 0Gc                 ^   t        |t              st        |      }t        |      dkD  rt        d|z        t	        |j
                        }|rt        |      | j                  v r9| j                  t        |         }t        |ddd      }| j                  d|       y | j                  | j                  t        |      <   |j                  d      }t        |      dkD  rt        d	|z        | j                  d
t        |             | j                  |       |r| j                  d       y )N   Domain label too long: %rrh   rj   r   ri   r   ?   Label component too long: %rrf       )
isinstancer   r\   r   r-   r,   r.   rb   r   packrm   poprr   )r5   r9   rv   elements       r   encode_namezDNSBuffer.encode_name   s    $)D>Dt9s? ;d BCCDJJT{djj(**U4[1"7Ar15		$(*.++

5;'((1+w<"$'(F(PQQ		$G-G$  	Gr   c                 z   t        |t              st        |      }t        |      dkD  rt        d|z        t	        |j
                        }|r\|j                  d      }t        |      dkD  rt        d|z        | j                  dt        |             | j                  |       |r\| j                  d       y )Nry   rz   r   r{   r|   rf   r}   )	r~   r   r\   r   r-   r,   r   r   rr   )r5   r9   r   s      r   encode_name_nocompressz DNSBuffer.encode_name_nocompress   s    $)D>Dt9s? ;d BCCDJJhhqkG7|b #$BW$LMMIIdCL)KK   	Gr   )r   ))r   r   r   r6   ro   r   r   __classcell__)rd   s   @r   r_   r_   ^   s    'R,r   r_   )
__future__r   rebitr   r   bufferr   r   rB   rangerD   compiler0   r   r   r   	Exceptionr   objectr   r_   r   r   r   <module>r      sl    & 	 # '	%C.	*	+ 	
 	I 	8*v 8*vP Pr   