summaryrefslogtreecommitdiff
path: root/examples/v1arch
diff options
context:
space:
mode:
authorelie <elie>2006-05-21 11:33:05 +0000
committerelie <elie>2006-05-21 11:33:05 +0000
commit069b4cacbfb3ac72f070cce291bd3dcafb500050 (patch)
treee2ec6dc3214215b004b2cad5550fe75e27367c1a /examples/v1arch
parent5302b7a1aac9499b0da4c1682b189ec1010de65f (diff)
downloadpysnmp-069b4cacbfb3ac72f070cce291bd3dcafb500050.tar.gz
fix to setting errors while building PDU
Diffstat (limited to 'examples/v1arch')
-rw-r--r--examples/v1arch/agent/cmdrsp.py22
1 files changed, 14 insertions, 8 deletions
diff --git a/examples/v1arch/agent/cmdrsp.py b/examples/v1arch/agent/cmdrsp.py
index 2ba3452..d7a9956 100644
--- a/examples/v1arch/agent/cmdrsp.py
+++ b/examples/v1arch/agent/cmdrsp.py
@@ -44,18 +44,21 @@ def cbFun(transportDispatcher, transportDomain, transportAddress, wholeMsg):
rspMsg = pMod.apiMessage.getResponse(reqMsg)
rspPDU = pMod.apiMessage.getPDU(rspMsg)
reqPDU = pMod.apiMessage.getPDU(reqMsg)
- varBinds = []; errorIndex = -1
+ varBinds = []; pendingErrors = []
+ errorIndex = 0
# GETNEXT PDU
if reqPDU.isSameTypeWith(pMod.GetNextRequestPDU()):
# Produce response var-binds
- errorIndex = -1
for oid, val in pMod.apiPDU.getVarBinds(reqPDU):
errorIndex = errorIndex + 1
# Search next OID to report
nextIdx = bisect.bisect(mibInstr, oid)
if nextIdx == len(mibInstr):
# Out of MIB
- pMod.apiPDU.setEndOfMibError(rspPDU, errorIndex)
+ varBinds.append((oid, val))
+ pendingErrors.append(
+ (pMod.apiPDU.setEndOfMibError, errorIndex)
+ )
else:
# Report value if OID is found
varBinds.append(
@@ -64,18 +67,21 @@ def cbFun(transportDispatcher, transportDomain, transportAddress, wholeMsg):
elif reqPDU.isSameTypeWith(pMod.GetRequestPDU()):
for oid, val in pMod.apiPDU.getVarBinds(reqPDU):
if mibInstrIdx.has_key(oid):
- varBinds.append(
- (oid, mibInstrIdx[oid](msgVer))
- )
+ varBinds.append((oid, mibInstrIdx[oid](msgVer)))
else:
# No such instance
- pMod.apiPDU.setNoSuchInstanceError(rspPDU, errorIndex)
- varBinds = pMod.apiPDU.getVarBinds(reqPDU)
+ varBinds.append((oid, val))
+ pendingErrors.append(
+ (pMod.apiPDU.setNoSuchInstanceError, errorIndex)
+ )
break
else:
# Report unsupported request type
pMod.apiPDU.setErrorStatus(rspPDU, 'genErr')
pMod.apiPDU.setVarBinds(rspPDU, varBinds)
+ # Commit possible error indices to response PDU
+ for f, i in pendingErrors:
+ f(rspPDU, i)
transportDispatcher.sendMessage(
encoder.encode(rspMsg), transportDomain, transportAddress
)