o
    BŠ]p  ã                   @   sâ   d dl Z d dlmZ e jdd… dk rdd„ Zdd„ ZdS d dlZd dlZd dlZd d	l	m
Z
 d d
l	mZ ejZeZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZdd„ Zdd„ ZdS )é    N)Údebugé   )é   r   c                 C   ó
   t  d¡‚©NzOsendmsg()/recvmsg() interface is not supported by this OS and/or Python version©ÚerrorZCarrierError©ÚaddressType© r   ú8/usr/lib/python3/dist-packages/pysnmp/carrier/sockmsg.pyÚgetRecvFrom   ó   
r   c                 C   r   r   r   r	   r   r   r   Ú	getSendTo   r   r   )Úsockfix)r   c                   @   ó   e Zd ZdefgZdS )Úin_addrZs_addrN)Ú__name__Ú
__module__Ú__qualname__Ú	in_addr_tÚ_fields_r   r   r   r   r   )   s    r   c                   @   s4   e Zd Zdejd fdejd fdejd fgZdS )Ú
in6_addr_UZ
__u6_addr8é   Z__u6_addr16é   Z__u6_addr32é   N)r   r   r   ÚctypesZc_uint8Zc_uint16Úc_uint32r   r   r   r   r   r   -   s
    ýr   c                   @   r   )Úin6_addrZ__in6_uN)r   r   r   r   r   r   r   r   r   r   5   s    ÿr   c                   @   s$   e Zd ZdejfdefdefgZdS )Ú
in_pktinfoZipi_ifindexÚipi_spec_dstÚipi_addrN)r   r   r   r   Zc_intr   r   r   r   r   r   r   ;   s
    ýr   c                   @   s   e Zd ZdefdejfgZdS )Úin6_pktinfoÚ	ipi6_addrZipi6_ifindexN)r   r   r   r   r   Zc_uintr   r   r   r   r   r"   C   s    þr"   c                    ó   ‡ fdd„}|S )Nc           	         s   d }|   |t |¡¡\}}}}|D ]X}|d tjkr>|d tjkr>t |d ¡}t t	|j
ƒ ¡ ¡}t|ƒ|  ¡ d f} n,|d tjkri|d tjkrit |d ¡}t t	|jƒ ¡ ¡}t|ƒ|  ¡ d f} nqtjtj@ o†t dt|ƒ|||f ¡ |ˆ |ƒ |¡fS  |ˆ |ƒ |¡fS )Nr   é   r   z7recvfrom: received %d octets from %s to %s; iov blob %r)ZrecvmsgÚsocketZCMSG_LENÚSOL_IPÚ
IP_PKTINFOr   Úfrom_buffer_copyÚ	ipaddressÚIPv4AddressÚ
memoryviewr!   ÚtobytesÚstrÚgetsocknameÚSOL_IPV6ÚIPV6_PKTINFOr"   Ú
ip_addressr#   r   ÚloggerÚflagIOÚlenZsetLocalAddress)	ÚsZszÚ_toÚdataÚancdataZ	msg_flagsZ_fromZancÚaddrr	   r   r   ÚrecvfromL   s,   €ÿÿüzgetRecvFrom.<locals>.recvfromr   )r
   r;   r   r	   r   r   J   ó   c                    r$   )Nc                    s  g }t |ƒˆ krt | ¡ d ¡}n	t |  ¡ d ¡}t |ƒtjkr9tƒ }t |j	¡|_
tjtjt|ƒ ¡ fg}n#| jtjkr\t |ƒtjkr\tƒ }t |j	¡|_tjtjt|ƒ ¡ fg}tjtj@ oxt dt|ƒ|||f ¡ |  |g|d|¡S  |  |g|d|¡S )Nr   z8sendto: sending %d octets to %s; address %r; iov blob %r)Útyper*   r2   ZgetLocalAddressr/   r+   r   r   r)   Zpackedr    r&   r'   r(   r,   r-   ZfamilyZAF_INET6ZIPv6Addressr"   r   r#   r0   r1   r   r3   r4   r5   Zsendmsg)r6   Ú_datar7   r9   r:   Z_fr	   r   r   Úsendtoi   s(   ÿÿüzgetSendTo.<locals>.sendtor   )r
   r?   r   r	   r   r   g   r<   )ÚsysZpysnmpr   Úversion_infor   r   r   r*   r&   Zpysnmp.carrierr   r   r   Zuint32_tr   Z	Structurer   ZUnionr   r   r   r"   r   r   r   r   Ú<module>   s&   