o
    B]H                     @   sD  d dl Z d dlmZ d dlmZmZ d dlmZ d dlm	Z	 d dl
mZmZmZ d dlmZ d dlmZ ed	Zed
Zd!ddZG dd deZeZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZdd Z 	
d"ddZ!		
d"dd Z"e!e_#e!e_#e!e_#e!e_#e"e_#e"e_#dS )#    N)config)rfc1905errind)v2c)rfc2576)errornextiddebug)StatusInformation)univi c                 C   s   d }t |  }}g }|rO|d8 }| | d jtjjtjjtjjfv r'|d8 }n|d urAt|| d  | | d  krAt	j
}|d| | d tf |s|sSg }||fS )N   r   )lenZtagSetr   ZNoSuchObjectZNoSuchInstanceZEndOfMibViewr   ZObjectIdentifierZasTupler   ZoidNotIncreasinginsert__null)varBindsZorigVarBindserrorIndicationidxZnonNullsZrspVarBinds r   >/usr/lib/python3/dist-packages/pysnmp/entity/rfc3413/cmdgen.pygetNextVarBinds   s$   
&r   c                   @   s.   e Zd ZedZdd Zdd Zdd ZdS )	CommandGeneratorr   c                 K   s   || _ i | _d S N)_CommandGenerator__options_CommandGenerator__pendingReqs)selfoptionsr   r   r   __init__.   s   
zCommandGenerator.__init__c                 C   s(  |\}}}|| j vrtd| | j |\}}}}}}}}}}}}}}|jt|  |
rtjtj	@ o>td||
f  |
d }|t
jt
jfv rR|d7 }d}nd}|d7 }||kse|| jddkrtjtj	@ o~td||f  ||||d | d S  ||||d | d S |dkrt|}d}n|}d}z6|j|||||||||||d	|| j|||f}|jt|  ||||||||||||||f| j |< W d S  ty   t d }
tjtj	@ otd
||
f  ||||
d d | Y d S  ||||
d d | Y d S w ||ks,||ks,||ks,|r||ks,|r'||ks,||krOtjtj	@ oDtd|  |||dd | d S  |||dd | d S |dkrZt|	|}	tj|	tj|krtjtj	@ otd|  |||dd | d S  |||dd | d S |||d |	| d S )NzMissing sendPduHandle %sz:processResponsePdu: sendPduHandle %s, statusInformation %sr   r   r   ZdiscoveryRetries   z=processResponsePdu: sendPduHandle %s, retry count %d exceededTzGprocessResponsePdu: origSendRequestHandle %s, _sendPdu() failed with %rzDprocessResponsePdu: sendPduHandle %s, request/response data mismatchZbadResponsezEprocessResponsePdu: sendPduHandle %s, request-id/response-id mismatch)r   r   ZPySnmpErrorpoptransportDispatcherZjobFinishedidr	   loggerflagAppr   ZnotInTimeWindowZunknownEngineIDr   getr   v2ToV1msgAndPduDspsendPduprocessResponsePdu
jobStartedr
   sysexc_infoZv1ToV2r   apiPDUZgetRequestID)r   
snmpEnginemessageProcessingModelsecurityModelsecurityNamesecurityLevelcontextEngineIdcontextName
pduVersionPDUstatusInformationsendPduHandlecbCtxZorigSendRequestHandlecbFunZorigTransportDomainZorigTransportAddressZorigMessageProcessingModelZorigSecurityModelZorigSecurityNameZorigSecurityLevelZorigContextEngineIdZorigContextNameZorigPduVersionZorigPduZorigTimeoutZorigRetryCountZorigRetriesZorigDiscoveryRetriesr   reqPDUr   r   r   r(   2   s   









z#CommandGenerator.processResponsePduc                 C   s  t ||\}}	}
}}}}}t|
d |j  }|jjjddd\}}|r+||}||}|}|dkr=t	
|}d}nd}t }|j|||	||||||||d|| j|||f}|jt|  ||	||||||||||ddf| j|< tjtj@ otd||
||f  |S  |S )	Nd   zSNMP-FRAMEWORK-MIBSnmpEngineIDSnmpAdminStringr   r   TzCsendPdu: sendPduHandle %s, timeout %d*10 ms/%d ticks, retry 0 of %d)r   ZgetTargetInfofloatr    ZgetTimerResolutionr&   ZmibInstrumControllerZ
mibBuilderZimportSymbolsr   r%   getNextHandler'   r(   r)   r!   r   r	   r"   r#   )r   r-   
targetNamer2   r3   r5   r9   r8   ZtransportDomainZtransportAddressZtimeoutZ
retryCountr.   r/   r0   r1   ZtimeoutInTicksr<   r=   ZorigPDUr4   sendRequestHandler7   r   r   r   r'      sN   



zCommandGenerator.sendPduN)	__name__
__module____qualname__r   NullZ_nullr   r(   r'   r   r   r   r   r   +   s
    
hr   c                   @       e Zd Zdd Z	dddZdS )GetCommandGeneratorc              	   C   T   |\}}|||||rt j|pd|rt jj|ddpd|r$t j|p%d| d S Nr   TZ
muteErrorsr   r   r,   getErrorStatusgetErrorIndexgetVarBindsr   r-   rA   r   r5   r8   r9   r   r   r   processResponseVarBinds      z+GetCommandGenerator.processResponseVarBindsNc           	   
   C   >   t  }t j| t j|| | |||||| j||fS r   )r   ZGetRequestPDUr,   setDefaultssetVarBindsr'   rP   	r   r-   r@   r2   r3   r   r9   r8   r:   r   r   r   sendVarBinds   s   
z GetCommandGenerator.sendVarBindsr   rB   rC   rD   rP   rV   r   r   r   r   rG          
rG   c                   @   rF   )SetCommandGeneratorc              	   C   rH   rI   rK   rO   r   r   r   rP      rQ   z+SetCommandGenerator.processResponseVarBindsNc           	   
   C   rR   r   )r   ZSetRequestPDUr,   rS   rT   r'   rP   rU   r   r   r   rV      s   

z SetCommandGenerator.sendVarBindsr   rW   r   r   r   r   rY      rX   rY   c                   @   rF   )NextCommandGeneratorSingleRunc              	   C   s\   |\}}}}	}
}|
||||rt j|pd|rt jj|ddp d|r(t j|p)d| d S rI   rK   )r   r-   rA   r   r5   r8   r@   r2   r3   r:   r9   r   r   r   rP     s   z5NextCommandGeneratorSingleRun.processResponseVarBindsNc           	      C   sF   t  }t j| t j|| | |||||| j||||||fS r   )r   ZGetNextRequestPDUr,   rS   rT   r'   rP   rU   r   r   r   rV   
  s   
z*NextCommandGeneratorSingleRun.sendVarBindsr   rW   r   r   r   r   rZ      rX   rZ   c                   @      e Zd Zdd ZdS )NextCommandGeneratorc                 C   s  |\}}}}	}
}|r|
|||ddd| d S t j|	|}t j|r(d\}}n|s1tjd}}nt|d t j|	\}}|
|||t j|t jj|dd||sdt	j
t	j@ oat	
d|  d S  d S |shd S t j|	t   t j|	| z| |||||	| j||||	|
|f W d S  ty   t d }t	j
t	j@ ot	
d	||f  |
|||d
 ddd| Y d S  |
|||d
 ddd| Y d S w )Nr   r   Nr   TrJ   GprocessResponseVarBinds: sendRequestHandle %s, app says to stop walkingr   z8sendVarBinds: sendPduHandle %s: sendPdu() failed with %rr   )r   r,   getVarBindTablerL   r   emptyResponser   rN   rM   r	   r"   r#   setRequestIDgetNextRequestIDrT   r'   rP   r
   r*   r+   )r   r-   rA   r   r5   r8   r@   r2   r3   r:   r9   varBindTabler   r6   r   r   r   rP     sh   






z,NextCommandGenerator.processResponseVarBindsNrB   rC   rD   rP   r   r   r   r   r\         r\   c                   @   rF   )BulkCommandGeneratorSingleRunc              	   C   s`   |\}}}}	}
}}}|||||rt j|pd|r!t jj|ddp"d|r*t j|p+d| d S rI   rK   )r   r-   rA   r   r5   r8   r@   nonRepeatersmaxRepetitionsr2   r3   r:   r9   r   r   r   rP   K  s   
z5BulkCommandGeneratorSingleRun.processResponseVarBindsNc
                 C   sf   t  }
t j|
 t j|
| t j|
| t j|
| | |||||
| j||||||
||	fS r   )	r   ZGetBulkRequestPDU
apiBulkPDUrS   ZsetNonRepeatersZsetMaxRepetitionsrT   r'   rP   )r   r-   r@   r2   r3   rh   ri   r   r9   r8   r:   r   r   r   rV   U  s   
z*BulkCommandGeneratorSingleRun.sendVarBindsr   rW   r   r   r   r   rg   J  s    rg   c                   @   r[   )BulkCommandGeneratorc                 C   s  |\}}}}	}
}}}|r||||ddd| d S t j||}t j|r*d\}}n2|s3tjd}}n)t|d t j|\}}t j	|}|r\t j|d t
| |t
|d   }||||t j|t jj|dd||stjtj@ otd|  d S  d S |sd S t j|t   t j|| z| |||	|
|| j||||	|
|||f W d S  ty   t d }tjtj@ otd	||f  ||||d
 ddd| Y d S  ||||d
 ddd| Y d S w )Nr   r   r]   r^   TrJ   r_   r   zDprocessResponseVarBinds: sendPduHandle %s: _sendPdu() failed with %rr   )r   rj   r`   rL   r   ra   r   r,   rN   ZgetNonRepeatersintrM   r	   r"   r#   rb   rc   rT   r'   rP   r
   r*   r+   )r   r-   rA   r   r5   r8   r@   rh   ri   r2   r3   r:   r9   rd   r   r6   r   r   r   rP   i  sr   

(





z,BulkCommandGenerator.processResponseVarBindsNre   r   r   r   r   rk   h  rf   rk   c                 C   s   |\}}|||||||S r   r   )r-   rA   r   ZerrorStatusZ
errorIndexr   r8   r9   r   r   r   __sendReqCbFun  s   rm   c              
   C   s   |  |||||t||fS r   rV   rm   )r   r-   r@   r   r9   r8   r2   r3   r   r   r   _sendReq  s   
ro   c
           
      C   s   |  ||||	|||t||f	S r   rn   )
r   r-   r@   rh   ri   r   r9   r8   r2   r3   r   r   r   _sendBulkReq  s   

rp   r   )NNr   )$r*   Zpysnmp.entity.rfc3413r   Zpysnmp.protor   r   Zpysnmp.proto.apir   Zpysnmp.proto.proxyr   Zpysnmpr   r   r	   Zpysnmp.proto.errorr
   Zpyasn1.typer   ZIntegerr?   rE   r   r   objectr   ZCommandGeneratorBaserG   rY   rZ   r\   rg   rk   rm   ro   rp   ZsendReqr   r   r   r   <module>   s@   


 '3;

	
