diff options
author | elie <elie> | 2013-06-21 06:34:22 +0000 |
---|---|---|
committer | elie <elie> | 2013-06-21 06:34:22 +0000 |
commit | 20a21e04fdb09ff2e36822ac539c24ad80628e6c (patch) | |
tree | e477171f68edc73f5a59e1391806bc61efae3d5a | |
parent | 42a93341a465b3905dee0cbcb342fc1eb4f1b483 (diff) | |
download | pysnmp-20a21e04fdb09ff2e36822ac539c24ad80628e6c.tar.gz |
disptacher vs transport compatibiilty verification moved into
base transport class
-rw-r--r-- | pysnmp/carrier/asynsock/base.py | 3 | ||||
-rw-r--r-- | pysnmp/carrier/base.py | 7 | ||||
-rw-r--r-- | pysnmp/carrier/twisted/base.py | 3 | ||||
-rw-r--r-- | pysnmp/entity/config.py | 3 | ||||
-rw-r--r-- | pysnmp/entity/rfc3413/oneliner/cmdgen.py | 1 | ||||
-rw-r--r-- | pysnmp/entity/rfc3413/oneliner/target.py | 4 |
6 files changed, 17 insertions, 4 deletions
diff --git a/pysnmp/carrier/asynsock/base.py b/pysnmp/carrier/asynsock/base.py index 30d9137..83de36c 100644 --- a/pysnmp/carrier/asynsock/base.py +++ b/pysnmp/carrier/asynsock/base.py @@ -2,10 +2,11 @@ import socket, sys import asyncore from pysnmp.carrier import error +from pysnmp.carrier.base import AbstractTransport from pysnmp.carrier.asynsock.dispatch import AsynsockDispatcher from pysnmp import debug -class AbstractSocketTransport(asyncore.dispatcher): +class AbstractSocketTransport(asyncore.dispatcher, AbstractTransport): protoTransportDispatcher = AsynsockDispatcher sockFamily = sockType = None retryCount = 0; retryInterval = 0 diff --git a/pysnmp/carrier/base.py b/pysnmp/carrier/base.py index bb2424e..238da25 100644 --- a/pysnmp/carrier/base.py +++ b/pysnmp/carrier/base.py @@ -156,3 +156,10 @@ class AbstractTransportDispatcher: self.unregisterTransport(tDomain) self.unregisterRecvCbFun() self.unregisterTimerCbFun() + + +class AbstractTransport: + protoTransportDispatcher = None + @classmethod + def isCompatibleWithDispatcher(cls, transportDispatcher): + return isinstance(transportDispatcher, cls.protoTransportDispatcher) diff --git a/pysnmp/carrier/twisted/base.py b/pysnmp/carrier/twisted/base.py index fba21da..fa1da90 100644 --- a/pysnmp/carrier/twisted/base.py +++ b/pysnmp/carrier/twisted/base.py @@ -9,8 +9,9 @@ # Description: twisted DatagramProtocol UDP transport # from pysnmp.carrier.twisted.dispatch import TwistedDispatcher +from pysnmp.carrier.base import AbstractTransport -class AbstractTwistedTransport: +class AbstractTwistedTransport(AbstractTransport): protoTransportDispatcher = TwistedDispatcher """Base Twisted Transport, to be used with TwistedDispatcher""" def __init__(self): diff --git a/pysnmp/entity/config.py b/pysnmp/entity/config.py index b433583..55e0e67 100644 --- a/pysnmp/entity/config.py +++ b/pysnmp/entity/config.py @@ -309,8 +309,7 @@ def delTargetAddr(snmpEngine, addrName): def addTransport(snmpEngine, transportDomain, transport): if snmpEngine.transportDispatcher: - if not isinstance(snmpEngine.transportDispatcher, - transport.protoTransportDispatcher): + if not transport.isCompatibleWithDispatcher(snmpEngine.transportDispatcher): raise error.PySnmpError('Transport %r is not compatible with dispatcher %r' % (transport, snmpEngine.transportDispatcher)) else: snmpEngine.registerTransportDispatcher( diff --git a/pysnmp/entity/rfc3413/oneliner/cmdgen.py b/pysnmp/entity/rfc3413/oneliner/cmdgen.py index c3565ed..829312a 100644 --- a/pysnmp/entity/rfc3413/oneliner/cmdgen.py +++ b/pysnmp/entity/rfc3413/oneliner/cmdgen.py @@ -85,6 +85,7 @@ class AsynCommandGenerator: self.__knownParams[paramsKey] = paramsName, 1 if transportTarget.transportDomain in self.__knownTransports: + transportTarget.verifyDispatcherCompatibility(self.snmpEngine) transport, useCount = self.__knownTransports[transportTarget.transportDomain] self.__knownTransports[transportTarget.transportDomain] = transport, useCount + 1 else: diff --git a/pysnmp/entity/rfc3413/oneliner/target.py b/pysnmp/entity/rfc3413/oneliner/target.py index 04d268a..3273dfc 100644 --- a/pysnmp/entity/rfc3413/oneliner/target.py +++ b/pysnmp/entity/rfc3413/oneliner/target.py @@ -25,6 +25,10 @@ class _AbstractTransportTarget: self.transport = self.protoTransport().openClientMode() return self.transport + def verifyDispatcherCompatibility(self, snmpEngine): + if not self.protoTransport.isCompatibleWithDispatcher(snmpEngine.transportDispatcher): + raise error.PySnmpError('Transport %r is not compatible with dispatcher %r' % (self.protoTransport, snmpEngine.transportDispatcher)) + def _resolveAddr(self, transportAddr): raise NotImplementedError() class UdpTransportTarget(_AbstractTransportTarget): |