diff options
Diffstat (limited to 'pysnmp/entity/rfc3413/oneliner/ntforg.py')
-rw-r--r-- | pysnmp/entity/rfc3413/oneliner/ntforg.py | 78 |
1 files changed, 52 insertions, 26 deletions
diff --git a/pysnmp/entity/rfc3413/oneliner/ntforg.py b/pysnmp/entity/rfc3413/oneliner/ntforg.py index 8fc20d0..6ff9215 100644 --- a/pysnmp/entity/rfc3413/oneliner/ntforg.py +++ b/pysnmp/entity/rfc3413/oneliner/ntforg.py @@ -23,6 +23,7 @@ usmAesCfb192Protocol = config.usmAesCfb192Protocol usmAesCfb256Protocol = config.usmAesCfb256Protocol usmNoPrivProtocol = config.usmNoPrivProtocol +SnmpEngine = engine.SnmpEngine ContextData = cmdgen.ContextData nextID = nextid.Integer(0xffffffff) @@ -177,6 +178,47 @@ class AsyncNotificationOriginator: return ntforg.NotificationOriginator().sendVarBinds(snmpEngine, notifyName, contextData.contextEngineId, contextData.contextName, self.makeVarBinds(snmpEngine, varBinds), __cbFun, (lookupNames, lookupValues, cbFun, cbCtx)) +# +# Synchronous one-liner Notification Originator application +# + +def sendNotification(snmpEngine, authData, transportTarget, contextData, + notifyType, notificationType, **kwargs): + + def cbFun(snmpEngine, sendRequestHandle, + errorIndication, errorStatus, errorIndex, + varBinds, cbCtx): + cbCtx['errorIndication'] = errorIndication + cbCtx['errorStatus'] = errorStatus + cbCtx['errorIndex'] = errorIndex + cbCtx['varBinds'] = varBinds + + cbCtx = {} + + AsyncNotificationOriginator().sendNotification( + snmpEngine, + authData, + transportTarget, + contextData, + notifyType, + notificationType, + (cbFun, cbCtx), + kwargs.get('lookupNames'), + kwargs.get('lookupValues') + ) + + snmpEngine.transportDispatcher.runDispatcher() + + if cbCtx: + yield cbCtx['errorIndication'], \ + cbCtx['errorStatus'], cbCtx['errorIndex'], \ + cbCtx['varBinds'] + +# +# The rest of code in this file belongs to obsolete, compatibility wrappers. +# Never use interfaces below for new applications! +# + # substitute sendNotification return object for backward compatibility class ErrorIndicationReturn: def __init__(self, *vars): self.__vars = vars @@ -185,9 +227,6 @@ class ErrorIndicationReturn: def __bool__(self): return bool(self.__vars[0]) def __str__(self): return str(self.__vars[0]) -# -# Compatibility implementation, never use this class for new applications -# class AsynNotificationOriginator: def __init__(self, snmpEngine=None, snmpContext=None): if snmpEngine is None: @@ -274,31 +313,18 @@ class AsynNotificationOriginator: class NotificationOriginator: def __init__(self, snmpEngine=None, snmpContext=None, asynNtfOrg=None): - if asynNtfOrg is None: - self.__asynNtfOrg = AsynNotificationOriginator( - snmpEngine, snmpContext - ) - else: - self.__asynNtfOrg = asynNtfOrg + # compatibility attributes + self.snmpEngine = snmpEngine or SnmpEngine() + self.mibViewController = AsyncNotificationOriginator().getMibViewController(self.snmpEngine) # the varBinds parameter is legacy, use NotificationType instead def sendNotification(self, authData, transportTarget, notifyType, notificationType, *varBinds, **kwargs): - def __cbFun(sendRequestHandle, errorIndication, - errorStatus, errorIndex, varBinds, appReturn): - appReturn[0] = ErrorIndicationReturn( - errorIndication, errorStatus, errorIndex, varBinds - ) - - appReturn = { 0: ErrorIndicationReturn(None, 0, 0, ()) } - self.__asynNtfOrg.sendNotification( - authData, transportTarget, notifyType, notificationType, - varBinds, (__cbFun, appReturn), - kwargs.get('lookupNames', False), - kwargs.get('lookupValues', False), - kwargs.get('contextEngineId'), - kwargs.get('contextName', null) - ) - self.__asynNtfOrg.snmpEngine.transportDispatcher.runDispatcher() - return appReturn[0] + for x in sendNotification(self.snmpEngine, authData, transportTarget, + ContextData(kwargs.get('contextEngineId'), + kwargs.get('contextName', null)), + notifyType, + notificationType.addVarBinds(*varBinds), + **kwargs): + return x |