diff options
author | elie <elie> | 2011-01-21 13:56:03 +0000 |
---|---|---|
committer | elie <elie> | 2011-01-21 13:56:03 +0000 |
commit | f0c9881f8bac74e2c4cd998c5aee1ee78828477a (patch) | |
tree | 12f5eafcd28d52963d975646548b1758c587cdd1 | |
parent | 81dcff539f9a33b83fb491b6c4bac7f1dbf1d47c (diff) | |
download | pysnmp-f0c9881f8bac74e2c4cd998c5aee1ee78828477a.tar.gz |
re-use some of ASN.1 structures used in message processing for efficiency
-rw-r--r-- | pysnmp/proto/mpmod/base.py | 2 | ||||
-rw-r--r-- | pysnmp/proto/mpmod/rfc2576.py | 10 | ||||
-rw-r--r-- | pysnmp/proto/mpmod/rfc3412.py | 15 | ||||
-rw-r--r-- | pysnmp/proto/secmod/rfc3414/service.py | 2 |
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) |