o
    BŠ]c  ã                   @   s,   d dl mZ d dlmZ G dd„ deƒZdS )é    )Úerror)Únextidc                   @   sh   e Zd Ze d¡Ze 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dd„ ZdS )ÚCacheiÿÿÿ c                 C   s"   i | _ i | _i | _i | _d| _d S )Nr   )Ú_Cache__msgIdIndexÚ_Cache__stateReferenceIndexÚ_Cache__sendPduHandleIdxÚ_Cache__expirationQueueÚ_Cache__expirationTimer©Úself© r   ú:/usr/lib/python3/dist-packages/pysnmp/proto/mpmod/cache.pyÚ__init__   s
   
zCache.__init__c                 C   ó   |   ¡ S ©N)Ú_Cache__stateReferencer
   r   r   r   ÚnewStateReference   ó   zCache.newStateReferencec                 K   sz   || j v rt d|| f ¡‚| jd }||f| j |< || jvr$i | j|< d| j| vr2i | j| d< d| j| d |< d S )Nz%Cache dup for stateReference=%s at %séX  ÚstateReferenceé   )r   r   ÚProtocolErrorr	   r   )r   r   ÚmsgInfoÚexpireAtr   r   r   ÚpushByStateRef   s   



zCache.pushByStateRefc                 C   sL   || j v r| j | }n	t d|| f ¡‚| j |= |\}}| j| d |= |S )Nz&Cache miss for stateReference=%s at %sr   )r   r   r   r   )r   r   Ú	cacheInfoÚ
cacheEntryr   r   r   r   ÚpopByStateRef)   s   
zCache.popByStateRefc                 C   r   r   )Ú_Cache__msgIDr
   r   r   r   ÚnewMsgID5   r   zCache.newMsgIDc                 K   sˆ   || j v rt d|| f ¡‚| jd }||f| j |< || j|d < || jvr+i | j|< d| j| vr9i | j| d< d| j| d |< d S )NzCache dup for msgId=%s at %sr   ÚsendPduHandleÚmsgIdr   )r   r   r   r	   r   r   )r   r!   r   r   r   r   r   ÚpushByMsgId8   s   

ÿ


zCache.pushByMsgIdc                 C   s`   || j v r| j | }n	t d|| f ¡‚|\}}| j|d = | j |= |\}}| j| d |= |S )NzCache miss for msgId=%s at %sr    r!   )r   r   r   r   r   )r   r!   r   r   r   r   r   r   r   Ú
popByMsgIdI   s   

ÿzCache.popByMsgIdc                 C   s"   || j v r|  | j | ¡ d S d S r   )r   r#   )r   r    r   r   r   ÚpopBySendPduHandleW   s   
ÿzCache.popBySendPduHandlec                 C   sp   | j | jv r/| j| j  }d|v r|d D ]}| j|= qd|v r*|d D ]}| j|= q#| j| j = |  j d7  _ d S )Nr   r!   r   )r	   r   r   r   )r   r   r   r!   r   r   r   ÚexpireCaches[   s   


zCache.expireCachesN)Ú__name__Ú
__module__Ú__qualname__r   ZIntegerr   r   r   r   r   r   r   r"   r#   r$   r%   r   r   r   r   r      s    


r   N)Zpysnmp.protor   Zpysnmpr   Úobjectr   r   r   r   r   Ú<module>   s   