summaryrefslogtreecommitdiff
path: root/pysnmp/entity/rfc3413/twisted/ntforg.py
blob: cc796b6ec27794a1cb5b00f64032901c98ec1c8a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
from twisted.internet import defer
from pysnmp.entity.rfc3413 import ntforg
from pyasn1.compat.octets import null

def __cbFun(snmpEngine, sendRequestHandle, errorIndication,
           errorStatus, errorIndex, varBinds, cbCtx):
    cbCtx.callback(
        (snmpEngine, errorIndication, errorStatus, errorIndex, varBinds)
    )

class NotificationOriginator:
    def __init__(self, snmpContext=None):
        self.snmpContext = snmpContext  # this is deprecated
        self.notificationOriginator = ntforg.NotificationOriginator()

    def sendVarBinds(self,
                     snmpEngine,
                     notificationTarget,
                     snmpContext,
                     contextName,
                     notificationName,
                     instanceIndex,
                     additionalVarBinds=()):
        df = defer.Deferred()
        self.notificationOriginator.sendVarBinds(
            snmpEngine,
            notificationTarget,
            snmpContext,
            contextName,
            notificationName,
            instanceIndex,
            additionalVarBinds,
            __cbFun,
            df
        )
        return df

#
# Obsolete, compatibility interfaces.
#

def __sendReqCbFun(response, outerDf):
    ( snmpEngine,
      errorIndication,
      errorStatus,
      errorIndex,
      varBinds) = response
    outerDf.callback((errorIndication, errorStatus, errorIndex, varBinds))
    # Callback function may return another deferred to indicate
    # it wishes to continue MIB walk.
    if isinstance(outerDf.result, defer.Deferred):
        innerDf = defer.Deferred()
        innerDf.addCallback(__sendReqCbFun, outerDf.result)
        return innerDf

def _sendNotification(self,
                      snmpEngine,
                      notificationTarget,
                      notificationName,
                      additionalVarBinds=None,
                      contextName=null):

    innerDf = self.sendVarBinds(snmpEngine,
                                notificationTarget,
                                self.snmpContext,
                                contextName,
                                notificationName,
                                None,
                                additionalVarBinds)
    outerDf = defer.Deferred()
    innerDf.addCallback(__sendReqCbFun, outerDf)
    return outerDf

# install compatibility wrappers
NotificationOriginator.sendNotification = _sendNotification