Ë
    ãÓñ^ä6  ã                   ó@  — d Z ddlZddlmZmZ ddlmZmZ ddl	m
Z
mZmZmZ ddlmZmZmZ i i i i dœZ G d„ d	ej&                  «      Z G d
„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Zd„ Zdd„Zd„ Zd„ Z e«        y)a  
Routines for accessing data published by IANA (Internet Assigned Numbers
Authority).

More details can be found at the following URLs :-

    - IANA Home Page - http://www.iana.org/
    - IEEE Protocols Information Home Page - http://www.iana.org/protocols/
é    N)Úmake_parserÚhandler)Ú	PublisherÚ
Subscriber)Ú	IPAddressÚ	IPNetworkÚIPRangeÚcidr_abbrev_to_verbose)Ú_dict_itemsÚ	_callableÚ_importlib_resources)ÚIPv4ÚIPv6ÚIPv6_unicastÚ	multicastc                   ó&   — e Zd Zdd„Zd„ Zd„ Zd„ Zy)ÚSaxRecordParserNc                 óf   — d| _         d| _        d | _        d | _        d | _        d | _        || _        y )Nr   F)Ú_levelÚ
_is_activeÚ_recordÚ
_tag_levelÚ_tag_payloadÚ_tag_feedingÚ	_callback)ÚselfÚcallbacks     ú1/usr/lib/python3/dist-packages/netaddr/ip/iana.pyÚ__init__zSaxRecordParser.__init__3   s5   € ØˆŒØˆŒØˆŒØˆŒØ ˆÔØ ˆÔØ!ˆ�ó    c                 ó®  — | xj                   dz  c_         | j                  du r=|dk(  r7d| _        | j                   | _        i | _        d|v r|d   | j                  d<   y y y | j                   | j                  dz   k(  rR|dk(  r<d|v rHd|v rC| j                  j	                  |d   g «      }|j                  |d   «       y g | _        d| _        y y y d| _        y )	Né   FÚrecordTÚdateÚxrefÚtypeÚdata)r   r   r   r   Ú
setdefaultÚappendr   r   )r   ÚnameÚattrsÚls       r   ÚstartElementzSaxRecordParser.startElement<   sÖ   € Ø�Š�qÑ�à�?‰?˜eÑ#Ø�xÒØ"&�”Ø"&§+¡+�”Ø!�”Ø˜U‘?Ø+0°©=�D—L‘L Ò(ð #ð	  ð �[‰[˜DŸO™O¨aÑ/Ò/Ø�vŠ~Ø˜U‘? v°¡ØŸ™×/Ñ/°°f±¸rÓB�AØ—H‘H˜U 6™]Õ+à$&�Ô!Ø$(�Õ!ð (7�?ð !&ˆDÕr    c                 óÀ  — | j                   du r»|dk(  r_| j                  | j                  k(  rFd| _         d | _        t        | j                  «      r| j	                  | j
                  «       d | _        nW| j                  | j                  dz   k(  r;|dk7  r6dj                  | j                  «      | j
                  |<   d | _        d| _        | xj                  dz  c_        y )NTr#   Fr"   r%   Ú )	r   r   r   r   r   r   Újoinr   r   )r   r*   s     r   Ú
endElementzSaxRecordParser.endElementQ   s­   € Ø�?‰?˜dÑ"Ø�xÒ D§O¡O°t·{±{Ò$BØ"'�”Ø"&�”Ü˜TŸ^™^Ô,Ø—N‘N 4§<¡<Ô0Ø#�•Ø—‘ §¡°!Ñ 3Ò3Ø˜6’>Ø)+¯©°×1BÑ1BÓ)C�D—L‘L Ñ&Ø(,�DÔ%Ø(-�DÔ%à�Š�qÑŽr    c                 óX   — | j                   du r| j                  j                  |«       y y )NT)r   r   r)   )r   Úcontents     r   Ú
characterszSaxRecordParser.charactersa   s)   € Ø×Ñ Ñ$Ø×Ñ×$Ñ$ WÕ-ð %r    ©N)Ú__name__Ú
__module__Ú__qualname__r   r-   r1   r4   © r    r   r   r   2   s   „ ó"ò&ò*ó .r    r   c                   ó4   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ Zˆ xZS )ÚXMLRecordParserzP
    A configurable Parser that understands how to parse XML based records.
    c                 óè   •— t         t        | �  «        t        «       | _        | j                  j                  t        | j                  «      «       || _        | j                  j                  |«       y)z`
        Constructor.

        fh - a valid, open file handle to XML based record data.
        N)Úsuperr;   r   r   Ú	xmlparserÚsetContentHandlerr   Úconsume_recordÚfhÚ__dict__Úupdate©r   rA   ÚkwargsÚ	__class__s      €r   r   zXMLRecordParser.__init__k   sQ   ø€ ô 	Œo˜tÑ-Ô/ä$›ˆŒØ�‰×(Ñ(¬¸×9LÑ9LÓ)MÔNàˆŒà�‰×Ñ˜VÕ$r    c                 ó   — |S )a  
        This is the callback method invoked for every record. It is usually
        over-ridden by base classes to provide specific record-based logic.

        Any record can be vetoed (not passed to registered Subscriber objects)
        by simply returning None.
        r9   )r   Úrecs     r   Úprocess_recordzXMLRecordParser.process_recordz   s	   € ð ˆ
r    c                 óN   — | j                  |«      }|�| j                  |«       y y r5   )rI   Únotify©r   rH   r#   s      r   r@   zXMLRecordParser.consume_record„   s)   € Ø×$Ñ$ SÓ)ˆØÐØ�K‰K˜Õð r    c                 óN   — | j                   j                  | j                  «       y)z
        Parse and normalises records, notifying registered subscribers with
        record data as it is encountered.
        N)r>   ÚparserA   )r   s    r   rN   zXMLRecordParser.parse‰   s   € ð
 	�‰×Ñ˜TŸW™WÕ%r    )	r6   r7   r8   Ú__doc__r   rI   r@   rN   Ú__classcell__©rF   s   @r   r;   r;   f   s   ø„ ñô%òò ö
&r    r;   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )Ú
IPv4Parserz÷
    A XMLRecordParser that understands how to parse and retrieve data records
    from the IANA IPv4 address space file.

    It can be found online here :-

        - http://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.xml
    c                 ó,   •— t         t        | �  |«       y)z—
        Constructor.

        fh - a valid, open file handle to an IANA IPv4 address space file.

        kwargs - additional parser options.
        N)r=   rS   r   rD   s      €r   r   zIPv4Parser.__init__›   ó   ø€ ô 	Œj˜$Ñ(¨Õ,r    c                 ó  — i }dD ].  }t        |j                  |d«      «      j                  «       ||<   Œ0 d|d   v r3|d   j                  d«      \  }}dt	        |«      t	        |«      fz  |d<   |d   j                  «       |d<   |S )úl
        Callback method invoked for every record.

        See base class method for more details.
        )ÚprefixÚdesignationr$   ÚwhoisÚstatusr/   ú/rX   z%d/%dr[   )ÚstrÚgetÚstripÚsplitÚintÚ
capitalize)r   rH   r#   ÚkeyÚoctetrX   s         r   rI   zIPv4Parser.process_record¥   s›   € ð ˆØGò 	8ˆCÜ˜cŸg™g c¨2Ó.Ó/×5Ñ5Ó7ˆF�3ŠKð	8ð �&˜Ñ"Ñ"Ø$ XÑ.×4Ñ4°SÓ9‰OˆU�FØ&¬#¨e«*´c¸&³kÐ)BÑBˆF�8Ñà! (Ñ+×6Ñ6Ó8ˆˆxÑàˆr    ©r6   r7   r8   rO   r   rI   rP   rQ   s   @r   rS   rS   ‘   s   ø„ ñô-ör    rS   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )Ú
IPv6Parserz÷
    A XMLRecordParser that understands how to parse and retrieve data records
    from the IANA IPv6 address space file.

    It can be found online here :-

        - http://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xml
    c                 ó,   •— t         t        | �  |«       y©z—
        Constructor.

        fh - a valid, open file handle to an IANA IPv6 address space file.

        kwargs - additional parser options.
        N)r=   rg   r   rD   s      €r   r   zIPv6Parser.__init__Ä   rU   r    c                 ó  — t        |j                  dd«      «      j                  «       t        |j                  dd«      «      j                  «       t        |j                  ddg«      d   «      j                  «       dœ}|S )rW   rX   r/   ÚdescriptionÚrfcéÿÿÿÿ)rX   Ú
allocationÚ	reference©r]   r^   r_   rL   s      r   rI   zIPv6Parser.process_recordÎ   so   € ô ˜#Ÿ'™' (¨BÓ/Ó0×6Ñ6Ó8Ü˜cŸg™g m°RÓ8Ó9×?Ñ?ÓAô ˜SŸW™W U¨R¨DÓ1°"Ñ5Ó6×<Ñ<Ó>ñ

ˆð ˆr    re   rQ   s   @r   rg   rg   º   s   ø„ ñô-ör    rg   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚIPv6UnicastParsera!  
    A XMLRecordParser that understands how to parse and retrieve data records
    from the IANA IPv6 unicast address assignments file.

    It can be found online here :-

        - http://www.iana.org/assignments/ipv6-unicast-address-assignments/ipv6-unicast-address-assignments.xml
    c                 ó,   •— t         t        | �  |«       yri   )r=   rr   r   rD   s      €r   r   zIPv6UnicastParser.__init__í   s   ø€ ô 	Ô Ñ/°Õ3r    c           
      óœ  — t        |j                  dd«      «      j                  «       t        |j                  dd«      «      j                  «       t        |j                  dd«      «      j                  «       t        |j                  dd«      «      j                  «       t        |j                  dd«      «      j                  «       dœ}|S )rW   r[   r/   rk   rX   r$   rZ   )r[   rk   rX   r$   rZ   rp   rL   s      r   rI   z IPv6UnicastParser.process_record÷   sž   € ô ˜#Ÿ'™' (¨BÓ/Ó0×6Ñ6Ó8Ü˜sŸw™w }°bÓ9Ó:×@Ñ@ÓBÜ˜#Ÿ'™' (¨BÓ/Ó0×6Ñ6Ó8Ü˜Ÿ™ ¨Ó+Ó,×2Ñ2Ó4Ü˜Ÿ™ ¨"Ó-Ó.×4Ñ4Ó6ñ
ˆð ˆr    re   rQ   s   @r   rr   rr   ä   s   ø„ ñô4ör    rr   c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )ÚMulticastParserzå
    A XMLRecordParser that knows how to process the IANA IPv4 multicast address
    allocation file.

    It can be found online here :-

        - http://www.iana.org/assignments/multicast-addresses/multicast-addresses.xml
    c                 ó,   •— t         t        | �  |«       y)z³
        Constructor.

        fh - a valid, open file handle to an IANA IPv4 multicast address
             allocation file.

        kwargs - additional parser options.
        N)r=   rv   r   rD   s      €r   r   zMulticastParser.__init__  s   ø€ ô 	Œo˜tÑ-¨bÕ1r    c                 ó6  — d|v r·|j                  d«      \  }}|j                  «       j                  d«      }|j                  «       j                  d«      }dj                  |D �cg c]  }t        t	        |«      «      ‘Œ c}«      ›ddj                  |D �cg c]  }t        t	        |«      «      ‘Œ c}«      ›�S |j                  «       j                  d«      }dj                  |D �cg c]  }t        t	        |«      «      ‘Œ c}«      S c c}w c c}w c c}w )zX
        Removes variations from address entries found in this particular file.
        ú-ú.)r`   r_   r0   r]   ra   )r   ÚaddrÚa1Úa2Úo1Úo2Úis          r   Únormalise_addrzMulticastParser.normalise_addr  sÚ   € ð �$‰;Ø—z‘z #“‰HˆR�Ø—‘“×!Ñ! #Ó&ˆBØ—‘“×!Ñ! #Ó&ˆBØ!Ÿh™h¸RÖ'@¸¬¬C°«F­Ò'@ÕAØ!Ÿh™h¸RÖ'@¸¬¬C°«F­Ò'@ÔAðCð Cð —‘“×#Ñ# CÓ(ˆBØ—8‘8°"Ö5¨QœS¤ Q£�[Ò5Ó6Ð6ùò	 (AùÚ'@ùò 6s   Á&DÂDÃ*Dc                 ó‚   — d|v r;| j                  t        |d   «      «      t        |j                  dd«      «      dœ}|S y)rW   r{   rk   r/   )ÚaddressÚdescrN)r�   r]   r^   rL   s      r   rI   zMulticastParser.process_record+  sH   € ð �S‰=à×.Ñ.¬s°3°v±;Ó/?Ó@Ü˜SŸW™W ]°BÓ7Ó8ñˆFð ˆMð r    )r6   r7   r8   rO   r   r�   rI   rP   rQ   s   @r   rv   rv     s   ø„ ñô	2ò7ör    rv   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚDictUpdaterzc
    Concrete Subscriber that inserts records received from a Publisher into a
    dictionary.
    c                 ó.   — || _         || _        || _        y)zñ
        Constructor.

        dct - lookup dict or dict like object to insert records into.

        topic - high-level category name of data to be processed.

        unique_key - key name in data dict that uniquely identifies it.
        N)ÚdctÚtopicÚ
unique_key)r   rˆ   r‰   rŠ   s       r   r   zDictUpdater.__init__@  s   € ð ˆŒØˆŒ
Ø$ˆ�r    c                 ó*  — || j                      }| j                  dk(  r$t        t        |«      «      }|| j                  |<   y| j                  dk(  r$t        t        |«      «      }|| j                  |<   y| j                  dk(  rt        |«      }|| j                  |<   y| j                  dk(  red}d|v rD|j                  d«      \  }}t        ||«      }|j                  «       }t        |«      dk(  r|d   }nt        |«      }|| j                  |<   yy)	z¶
        Callback function used by Publisher to notify this Subscriber about
        an update. Stores topic based information into dictionary passed to
        constructor.
        r   r   r   r   Nry   r"   r   )
rŠ   r‰   r   r
   rˆ   r`   r	   ÚcidrsÚlenr   )r   r'   Údata_idÚcidrÚiprangeÚfirstÚlastrŒ   s           r   rC   zDictUpdater.updateN  sù   € ð �t—‘Ñ'ˆà�:‰:˜ÒÜÔ3°GÓ<Ó=ˆDØ!ˆD�H‰H�TŠNØ�Z‰Z˜6Ò!ÜÔ3°GÓ<Ó=ˆDØ!ˆD�H‰H�TŠNØ�Z‰Z˜>Ò)Ü˜WÓ%ˆDØ!ˆD�H‰H�TŠNØ�Z‰Z˜;Ò&ØˆGØ�g‰~à '§¡¨cÓ 2‘�˜Ü! %¨Ó.�ØŸ™›�Ü�u“: ’?Ø# A™h‘Gä# GÓ,�Ø $ˆD�H‰H�WÒð 'r    N)r6   r7   r8   rO   r   rC   r9   r    r   r†   r†   :  s   „ ñò
%ó%r    r†   c                  ó´  — t        t        j                  t        d«      «      } | j	                  t        t        d   dd«      «       | j                  «        t        t        j                  t        d«      «      }|j	                  t        t        d   dd«      «       |j                  «        t        t        j                  t        d«      «      }|j	                  t        t        d   dd«      «       |j                  «        t        t        j                  t        d«      «      }|j	                  t        t        d	   d	d
«      «       |j                  «        y)zd
    Parse and load internal IANA data lookups with the latest information from
    data files.
    zipv4-address-space.xmlr   rX   zipv6-address-space.xmlr   z$ipv6-unicast-address-assignments.xmlr   zmulticast-addresses.xmlr   rƒ   N)rS   r   Úopen_binaryÚ__package__Úattachr†   Ú	IANA_INFOrN   rg   rr   rv   )Úipv4Úipv6Úipv6uaÚmcasts       r   Ú	load_inforœ   m  sø   € ô
 Ô*×6Ñ6´{ÐD\Ó]Ó^€DØ‡K�K”œI fÑ-¨v°xÓ@ÔAØ‡J�J„LäÔ*×6Ñ6´{ÐD\Ó]Ó^€DØ‡K�K”œI fÑ-¨v°xÓ@ÔAØ‡J�J„LäÜ×(Ñ(¬Ð6\Ó]ó€Fð ‡M�M”+œi¨Ñ7¸ÈÓRÔSØ
‡L�L„NäÔ0×<Ñ<¼[ÐJcÓdÓe€EØ	‡L�L”œY {Ñ3°[À)ÓLÔMØ	‡K�K…Mr    c                 óh  — | €t         j                  } t        t        «      D ]Ž  }| j	                  dt        |«      z  dz   «       | j	                  |dz   «       | j	                  dt        |«      z  dz   «       t        |   }t        |«      D ]!  }||   }| j	                  d|z  |z   dz   «       Œ# Œ� y)z7
    Pretty prints IANA information to filehandle.
    Nry   ú
z%-45r)Ú_sysÚstdoutÚsortedr—   Úwriter�   )rA   ÚcategoryÚiprangesr�   Údetailss        r   Úpprint_infor¦   …  s­   € ð 
€zÜ�[‰[ˆäœ9Ó%ò ;ˆØ
�‰�”s˜8“}Ñ$ tÑ+Ô,Ø
�‰�˜D‘Ô!Ø
�‰�”s˜8“}Ñ$ tÑ+Ô,Ü˜XÑ&ˆÜ˜hÓ'ò 	;ˆGØ˜wÑ'ˆGØ�H‰H�W Ñ(¨7Ñ2°TÑ9Õ:ñ	;ñ;r    c                 ób   — t        |d«      r| |v S t        |d«      r| |k(  S t        d|›d�«      ‚)Nr‘   Úvaluez!Unsupported IP range or address: ú!)ÚhasattrÚ	Exception)ÚipÚip_ranges     r   Ú_within_boundsr®   –  s8   € äˆx˜Ô!à�Xˆ~ÐÜ	�˜7Ô	#à�X‰~Ðå
ºhÐHÓ
IÐIr    c                 óÒ  — i }| j                   dk(  r¬t        t        d   «      D ]8  \  }}t        | |«      sŒ|j	                  dg «       |d   j                  |«       Œ: | j                  «       rMt        t        d   «      D ]8  \  }}t        | |«      sŒ|j	                  dg «       |d   j                  |«       Œ: |S | j                   dk(  ršt        t        d   «      D ]8  \  }}t        | |«      sŒ|j	                  dg «       |d   j                  |«       Œ: t        t        d   «      D ]8  \  }}t        | |«      sŒ|j	                  dg «       |d   j                  |«       Œ: |S )z7Returns informational data specific to this IP address.é   r   r   Ú	Multicasté   r   r   )Úversionr   r—   r®   r(   r)   Úis_multicast)Úip_addrÚinfor�   r#   r�   s        r   Úqueryr·   ¢  s]  € à€Dà‡�˜!ÒÜ'¬	°&Ñ(9Ó:ò 	,‰LˆD�&Ü˜g tÕ,Ø—‘ ¨Ô+Ø�V‘×#Ñ# FÕ+ð	,ð
 ×ÑÔ!Ü#.¬y¸Ñ/EÓ#Fò 5‘�˜Ü! '¨7Õ3Ø—O‘O K°Ô4Ø˜Ñ%×,Ñ,¨VÕ4ð5ð  €Kð 
�‰˜AÒ	Ü'¬	°&Ñ(9Ó:ò 	,‰LˆD�&Ü˜g tÕ,Ø—‘ ¨Ô+Ø�V‘×#Ñ# FÕ+ð	,ô
 (¬	°.Ñ(AÓBò 	4‰LˆD�&Ü˜g tÕ,Ø—‘ °Ô3Ø�^Ñ$×+Ñ+¨FÕ3ð	4ð
 €Kr    r5   )rO   ÚsysrŸ   Úxml.saxr   r   Únetaddr.corer   r   Ú
netaddr.ipr   r   r	   r
   Únetaddr.compatr   r   r   r—   ÚContentHandlerr   r;   rS   rg   rr   rv   r†   rœ   r¦   r®   r·   r9   r    r   ú<module>r¾      s³   ðñ,ó ß (ç .ß LÓ Lß GÑ Gð ØØØñ	€	ô1.�g×,Ñ,ô 1.ôh(&�iô (&ôV&�ô &ôR'�ô 'ôT!˜ô !ôH/�oô /ôd0%�*ô 0%òfó0;ò"	Jòñ< 
…r    