o
    ˜»áf  ã                   @   st   d Z ddlZddlmZ ddlmZ g d¢ZG dd„ deƒZG dd	„ d	eƒZ	d
d„ Z
G dd„ dƒZG dd„ dƒZdS )zRImplements (a subset of) Sun XDR -- eXternal Data Representation.

See: RFC 1014

é    N)ÚBytesIO©Úwraps)ÚErrorÚPackerÚUnpackerÚConversionErrorc                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	r   zºException class for this module. Use:

    except xdrlib.Error as var:
        # var has the Error instance for the exception

    Public ivars:
        msg -- contains the message

    c                 C   ó
   || _ d S ©N)Úmsg)Úselfr   © r   ú/usr/lib/python3.10/xdrlib.pyÚ__init__   ó   
zError.__init__c                 C   ó
   t | jƒS r
   )Úreprr   ©r   r   r   r   Ú__repr__   r   zError.__repr__c                 C   r   r
   )Ústrr   r   r   r   r   Ú__str__   r   zError.__str__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r      s
    	r   c                   @   s   e Zd ZdS )r   N)r   r   r   r   r   r   r   r       s    r   c                    s   t ˆ ƒ‡ fdd„ƒ}|S )z5 Wrap any raised struct.errors in a ConversionError. c              
      s8   zˆ | |ƒW S  t jy } zt|jd ƒd ‚d }~ww ©Nr   )ÚstructÚerrorr   Úargs)r   ÚvalueÚe©Úfunctionr   r   Úresult&   s   €ÿz&raise_conversion_error.<locals>.resultr   )r"   r#   r   r!   r   Úraise_conversion_error#   s   r$   c                   @   s¨   e Zd ZdZdd„ Zdd„ Zdd„ ZeZedd	„ ƒZ	ed
d„ ƒZ
e
Zdd„ Zdd„ ZeZedd„ ƒZedd„ ƒZdd„ ZeZdd„ ZeZeZdd„ Zdd„ Zdd„ ZdS )r   z0Pack various data representations into a buffer.c                 C   s   |   ¡  d S r
   ©Úresetr   r   r   r   r   2   ó   zPacker.__init__c                 C   s   t ƒ | _d S r
   )r   Ú_Packer__bufr   r   r   r   r&   5   r'   zPacker.resetc                 C   s
   | j  ¡ S r
   )r(   Úgetvaluer   r   r   r   Ú
get_buffer8   r   zPacker.get_bufferc                 C   ó   | j  t d|¡¡ d S )Nú>L©r(   Úwriter   Úpack©r   Úxr   r   r   Ú	pack_uint=   ó   zPacker.pack_uintc                 C   r+   )Nú>lr-   r0   r   r   r   Úpack_intA   r3   zPacker.pack_intc                 C   s$   |r
| j  d¡ d S | j  d¡ d S )Ns      s       )r(   r.   r0   r   r   r   Ú	pack_boolG   s   zPacker.pack_boolc              
   C   sŠ   z|   |d? d@ ¡ W n ttjfy" } zt|jd ƒd ‚d }~ww z
|   |d@ ¡ W d S  ttjfyD } zt|jd ƒd ‚d }~ww )Né    l   ÿÿ r   )r2   Ú	TypeErrorr   r   r   r   )r   r1   r    r   r   r   Úpack_uhyperK   s   €ÿ€ÿzPacker.pack_uhyperc                 C   r+   )Nú>fr-   r0   r   r   r   Ú
pack_floatW   r3   zPacker.pack_floatc                 C   r+   )Nú>dr-   r0   r   r   r   Úpack_double[   r3   zPacker.pack_doublec                 C   sP   |dk rt dƒ‚|d |… }|d d d }||t|ƒ d  }| j |¡ d S )Nr   ú fstring size must be nonnegativeé   é   ó    )Ú
ValueErrorÚlenr(   r.   )r   ÚnÚsÚdatar   r   r   Úpack_fstring_   s   zPacker.pack_fstringc                 C   s"   t |ƒ}|  |¡ |  ||¡ d S r
   )rC   r2   rG   )r   rE   rD   r   r   r   Úpack_stringi   s   
zPacker.pack_stringc                 C   s*   |D ]}|   d¡ ||ƒ q|   d¡ d S )Né   r   )r2   )r   ÚlistÚ	pack_itemÚitemr   r   r   Ú	pack_listq   s   

zPacker.pack_listc                 C   s*   t |ƒ|kr
tdƒ‚|D ]}||ƒ qd S )Nzwrong array size)rC   rB   )r   rD   rJ   rK   rL   r   r   r   Úpack_farrayw   s
   
ÿzPacker.pack_farrayc                 C   s$   t |ƒ}|  |¡ |  |||¡ d S r
   )rC   r2   rN   )r   rJ   rK   rD   r   r   r   Ú
pack_array}   s   
zPacker.pack_arrayN)r   r   r   r   r   r&   r*   Úget_bufr$   r2   r5   Ú	pack_enumr6   r9   Ú
pack_hyperr;   r=   rG   Úpack_fopaquerH   Úpack_opaqueÚ
pack_bytesrM   rN   rO   r   r   r   r   r   /   s4    




r   c                   @   s°   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ ZeZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZeZdd„ ZeZeZd d!„ Zd"d#„ Zd$d%„ Zd&S )'r   z;Unpacks various data representations from the given buffer.c                 C   s   |   |¡ d S r
   r%   ©r   rF   r   r   r   r   ‡   s   zUnpacker.__init__c                 C   s   || _ d| _d S r   )Ú_Unpacker__bufÚ_Unpacker__posrV   r   r   r   r&   Š   s   
zUnpacker.resetc                 C   ó   | j S r
   ©rX   r   r   r   r   Úget_positionŽ   ó   zUnpacker.get_positionc                 C   r	   r
   rZ   )r   Úpositionr   r   r   Úset_position‘   r   zUnpacker.set_positionc                 C   rY   r
   )rW   r   r   r   r   r*   ”   r\   zUnpacker.get_bufferc                 C   s   | j t| jƒk rtdƒ‚d S )Nzunextracted data remains)rX   rC   rW   r   r   r   r   r   Údone—   s   ÿzUnpacker.donec                 C   óB   | j }|d  | _ }| j||… }t|ƒdk rt‚t d|¡d S )Nr@   r,   r   ©rX   rW   rC   ÚEOFErrorr   Úunpack©r   ÚiÚjrF   r   r   r   Úunpack_uint›   ó   zUnpacker.unpack_uintc                 C   r`   )Nr@   r4   r   ra   rd   r   r   r   Ú
unpack_int£   rh   zUnpacker.unpack_intc                 C   s   t |  ¡ ƒS r
   )Úboolri   r   r   r   r   Úunpack_bool­   r'   zUnpacker.unpack_boolc                 C   s    |   ¡ }|   ¡ }t|ƒd> |B S )Nr7   )rg   Úint)r   ÚhiÚlor   r   r   Úunpack_uhyper°   s   zUnpacker.unpack_uhyperc                 C   s   |   ¡ }|dkr|d }|S )Nl            l            )ro   r0   r   r   r   Úunpack_hyperµ   s   zUnpacker.unpack_hyperc                 C   r`   )Nr@   r:   r   ra   rd   r   r   r   Úunpack_float»   rh   zUnpacker.unpack_floatc                 C   r`   )Né   r<   r   ra   rd   r   r   r   Úunpack_doubleÃ   rh   zUnpacker.unpack_doublec                 C   sT   |dk rt dƒ‚| j}||d d d  }|t| jƒkrt‚|| _| j||| … S )Nr   r>   r?   r@   )rB   rX   rC   rW   rb   )r   rD   re   rf   r   r   r   Úunpack_fstringË   s   zUnpacker.unpack_fstringc                 C   s   |   ¡ }|  |¡S r
   )rg   rt   )r   rD   r   r   r   Úunpack_string×   s   
zUnpacker.unpack_stringc                 C   sB   g }	 |   ¡ }|dkr|S |dkrtd|f ƒ‚|ƒ }| |¡ q)NrI   r   z0 or 1 expected, got %r)rg   r   Úappend)r   Úunpack_itemrJ   r1   rL   r   r   r   Úunpack_listÞ   s   ü
úzUnpacker.unpack_listc                 C   s"   g }t |ƒD ]}| |ƒ ¡ q|S r
   )Úrangerv   )r   rD   rw   rJ   re   r   r   r   Úunpack_farrayé   s   zUnpacker.unpack_farrayc                 C   s   |   ¡ }|  ||¡S r
   )rg   rz   )r   rw   rD   r   r   r   Úunpack_arrayï   s   zUnpacker.unpack_arrayN)r   r   r   r   r   r&   r[   r^   r*   r_   rg   ri   Úunpack_enumrk   ro   rp   rq   rs   rt   Úunpack_fopaqueru   Úunpack_opaqueÚunpack_bytesrx   rz   r{   r   r   r   r   r   „   s0    
r   )r   r   Úior   Ú	functoolsr   Ú__all__Ú	Exceptionr   r   r$   r   r   r   r   r   r   Ú<module>   s    U