summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelie <elie>2011-01-21 13:56:03 +0000
committerelie <elie>2011-01-21 13:56:03 +0000
commitf0c9881f8bac74e2c4cd998c5aee1ee78828477a (patch)
tree12f5eafcd28d52963d975646548b1758c587cdd1
parent81dcff539f9a33b83fb491b6c4bac7f1dbf1d47c (diff)
downloadpysnmp-f0c9881f8bac74e2c4cd998c5aee1ee78828477a.tar.gz
re-use some of ASN.1 structures used in message processing for efficiency
-rw-r--r--pysnmp/proto/mpmod/base.py2
-rw-r--r--pysnmp/proto/mpmod/rfc2576.py10
-rw-r--r--pysnmp/proto/mpmod/rfc3412.py15
-rw-r--r--pysnmp/proto/secmod/rfc3414/service.py2
4 files changed, 16 insertions, 13 deletions
diff --git a/pysnmp/proto/mpmod/base.py b/pysnmp/proto/mpmod/base.py
index 7951273..ff357f8 100644
--- a/pysnmp/proto/mpmod/base.py
+++ b/pysnmp/proto/mpmod/base.py
@@ -3,8 +3,10 @@ from pysnmp.proto import error
class AbstractMessageProcessingModel:
messageProcessingModelID = None
+ snmpMsgSpec = None
__stateReference = __msgID = 0L
def __init__(self):
+ self.snmpMsgSpec = self.snmpMsgSpec() # local copy
self.__msgIdIndex = {}
self.__stateReferenceIndex = {}
self.__sendPduHandleIdx = {}
diff --git a/pysnmp/proto/mpmod/rfc2576.py b/pysnmp/proto/mpmod/rfc2576.py
index 393ade4..f6922b0 100644
--- a/pysnmp/proto/mpmod/rfc2576.py
+++ b/pysnmp/proto/mpmod/rfc2576.py
@@ -14,7 +14,7 @@ from pysnmp import debug
class SnmpV1MessageProcessingModel(AbstractMessageProcessingModel):
messageProcessingModelID = 0 # SNMPv1
- _snmpMsgSpec = v1.Message()
+ snmpMsgSpec = v1.Message
# rfc3412: 7.1
def prepareOutgoingMessage(
self,
@@ -55,7 +55,7 @@ class SnmpV1MessageProcessingModel(AbstractMessageProcessingModel):
# rfc3412: 7.1.6
scopedPDU = ( contextEngineId, contextName, pdu )
- msg = self._snmpMsgSpec.clone()
+ msg = self.snmpMsgSpec
msg.setComponentByPosition(0, self.messageProcessingModelID)
msg.setComponentByPosition(2)
msg.getComponentByPosition(2).setComponentByType(pdu.tagSet, pdu)
@@ -166,7 +166,7 @@ class SnmpV1MessageProcessingModel(AbstractMessageProcessingModel):
debug.logger & debug.flagMP and debug.logger('prepareResponseMessage: using contextEngineId %s contextName %s' % (repr(contextEngineId), contextName))
- msg = self._snmpMsgSpec.clone()
+ msg = self._snmpMsgSpec
msg.setComponentByPosition(0, messageProcessingModel)
msg.setComponentByPosition(2)
msg.getComponentByPosition(2).setComponentByType(pdu.tagSet, pdu)
@@ -215,7 +215,7 @@ class SnmpV1MessageProcessingModel(AbstractMessageProcessingModel):
# rfc3412: 7.2.2
try:
msg, restOfwholeMsg = decoder.decode(
- wholeMsg, asn1Spec=self._snmpMsgSpec
+ wholeMsg, asn1Spec=self.snmpMsgSpec
)
except PyAsn1Error:
snmpInASNParseErrs, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('__SNMPv2-MIB', 'snmpInASNParseErrs')
@@ -408,4 +408,4 @@ class SnmpV1MessageProcessingModel(AbstractMessageProcessingModel):
class SnmpV2cMessageProcessingModel(SnmpV1MessageProcessingModel):
messageProcessingModelID = 1 # SNMPv2c
- _snmpMsgSpec = v2c.Message()
+ snmpMsgSpec = v2c.Message
diff --git a/pysnmp/proto/mpmod/rfc3412.py b/pysnmp/proto/mpmod/rfc3412.py
index 950badb..35c0844 100644
--- a/pysnmp/proto/mpmod/rfc3412.py
+++ b/pysnmp/proto/mpmod/rfc3412.py
@@ -53,7 +53,8 @@ _snmpErrors = {
class SnmpV3MessageProcessingModel(AbstractMessageProcessingModel):
messageProcessingModelID = 3 # SNMPv3
- _snmpMsgSpec = SNMPv3Message()
+ snmpMsgSpec = SNMPv3Message
+ _scopedPDU = ScopedPDU()
def __init__(self):
AbstractMessageProcessingModel.__init__(self)
self.__engineIDs = {}
@@ -111,7 +112,7 @@ class SnmpV3MessageProcessingModel(AbstractMessageProcessingModel):
debug.logger & debug.flagMP and debug.logger('prepareOutgoingMessage: using contextEngineId %s, contextName %s' % (repr(contextEngineId), contextName))
# 7.1.6
- scopedPDU = ScopedPDU()
+ scopedPDU = self._scopedPDU
scopedPDU.setComponentByPosition(0, contextEngineId)
scopedPDU.setComponentByPosition(1, contextName)
scopedPDU.setComponentByPosition(2)
@@ -120,7 +121,7 @@ class SnmpV3MessageProcessingModel(AbstractMessageProcessingModel):
)
# 7.1.7
- msg = SNMPv3Message()
+ msg = self.snmpMsgSpec
# 7.1.7a
msg.setComponentByPosition(0, 3) # version
@@ -178,7 +179,7 @@ class SnmpV3MessageProcessingModel(AbstractMessageProcessingModel):
# Clear possible auth&priv flags
headerData.setComponentByPosition(2, chr(msgFlags & 0xfc))
# XXX
- scopedPDU = ScopedPDU()
+ scopedPDU = self._scopedPDU
scopedPDU.setComponentByPosition(0, '')
scopedPDU.setComponentByPosition(1, contextName)
scopedPDU.setComponentByPosition(2)
@@ -332,7 +333,7 @@ class SnmpV3MessageProcessingModel(AbstractMessageProcessingModel):
debug.logger & debug.flagMP and debug.logger('prepareResponseMessage: using contextEngineId %s, contextName %s' % (repr(contextEngineId), contextName))
# 7.1.6
- scopedPDU = ScopedPDU()
+ scopedPDU = self._scopedPDU
scopedPDU.setComponentByPosition(0, contextEngineId)
scopedPDU.setComponentByPosition(1, contextName)
scopedPDU.setComponentByPosition(2)
@@ -341,7 +342,7 @@ class SnmpV3MessageProcessingModel(AbstractMessageProcessingModel):
)
# 7.1.7
- msg = SNMPv3Message()
+ msg = self.snmpMsgSpec
# 7.1.7a
msg.setComponentByPosition(0, 3) # version
@@ -426,7 +427,7 @@ class SnmpV3MessageProcessingModel(AbstractMessageProcessingModel):
# 7.2.2
try:
msg, restOfwholeMsg = decoder.decode(
- wholeMsg, asn1Spec=self._snmpMsgSpec
+ wholeMsg, asn1Spec=self.snmpMsgSpec
)
except PyAsn1Error:
snmpInASNParseErrs, = snmpEngine.msgAndPduDsp.mibInstrumController.mibBuilder.importSymbols('__SNMPv2-MIB', 'snmpInASNParseErrs')
diff --git a/pysnmp/proto/secmod/rfc3414/service.py b/pysnmp/proto/secmod/rfc3414/service.py
index 1eda407..c052537 100644
--- a/pysnmp/proto/secmod/rfc3414/service.py
+++ b/pysnmp/proto/secmod/rfc3414/service.py
@@ -276,7 +276,7 @@ class SnmpUSMSecurityModel(AbstractSecurityModel):
errorIndication = errind.unsupportedSecurityLevel
)
- securityParameters = UsmSecurityParameters()
+ securityParameters = self._securityParametersSpec
scopedPDUData = msg.setComponentByPosition(3).getComponentByPosition(3)
scopedPDUData.setComponentByPosition(0, scopedPDU)