diff options
author | elie <elie> | 2012-06-25 23:26:30 +0000 |
---|---|---|
committer | elie <elie> | 2012-06-25 23:26:30 +0000 |
commit | 013d3b798db3d305c4c5ff41febb192d37e12ee2 (patch) | |
tree | d4d8ca70330111a5b3f3181ea6d4d6bb357d8520 /pysnmp/carrier | |
parent | 39735b07625783eb9c7ffaf5e4a8623d543ebb1b (diff) | |
download | pysnmp-git-013d3b798db3d305c4c5ff41febb192d37e12ee2.tar.gz |
socket transports may now deal not only with their native addresses,
but also with a special-purpose container object which can hold
some additional transport-specific details while still acting as
native address objects.
Diffstat (limited to 'pysnmp/carrier')
-rw-r--r-- | pysnmp/carrier/asyncore/dgram/base.py | 14 | ||||
-rw-r--r-- | pysnmp/carrier/twisted/dgram/base.py | 13 |
2 files changed, 20 insertions, 7 deletions
diff --git a/pysnmp/carrier/asyncore/dgram/base.py b/pysnmp/carrier/asyncore/dgram/base.py index dc280e57..9d200f88 100644 --- a/pysnmp/carrier/asyncore/dgram/base.py +++ b/pysnmp/carrier/asyncore/dgram/base.py @@ -1,6 +1,7 @@ -"""Implements asyncore-based generic DGRAM transport""" +# Implements asyncore-based generic DGRAM transport import socket, errno, sys from pysnmp.carrier.asynsock.base import AbstractSocketTransport +from pysnmp.carrier.address import TransportAddressPair from pysnmp.carrier import error from pysnmp import debug @@ -39,7 +40,6 @@ class DgramSocketTransport(AbstractSocketTransport): self.socket.bind(iface) except socket.error: raise error.CarrierError('bind() failed: %s' % (sys.exc_info()[1],)) - self._iface = iface return self def sendMessage(self, outgoingMessage, transportAddress): @@ -52,7 +52,9 @@ class DgramSocketTransport(AbstractSocketTransport): def writable(self): return self.__outQueue def handle_write(self): outgoingMessage, transportAddress = self.__outQueue.pop() - debug.logger & debug.flagIO and debug.logger('handle_write: transportAddress %r outgoingMessage %r' % (transportAddress, outgoingMessage)) + if isinstance(transportAddress, TransportAddressPair): + transportAddress = transportAddress.getRemoteAddr() + debug.logger & debug.flagIO and debug.logger('handle_write: transportAddress %r -> %r outgoingMessage %r' % (self.socket.getsockname(), transportAddress, outgoingMessage)) try: self.socket.sendto(outgoingMessage, transportAddress) except socket.error: @@ -65,7 +67,11 @@ class DgramSocketTransport(AbstractSocketTransport): def handle_read(self): try: incomingMessage, transportAddress = self.socket.recvfrom(65535) - debug.logger & debug.flagIO and debug.logger('handle_read: transportAddress %r incomingMessage %r' % (transportAddress, incomingMessage)) + debug.logger & debug.flagIO and debug.logger('handle_read: transportAddress %r -> %r incomingMessage %r' % (transportAddress, self.socket.getsockname(), incomingMessage)) + transportAddress = TransportAddressPair( + self.socket.getsockname(), + transportAddress + ) if not incomingMessage: self.handle_close() return diff --git a/pysnmp/carrier/twisted/dgram/base.py b/pysnmp/carrier/twisted/dgram/base.py index 6a5a9b7e..5d512088 100644 --- a/pysnmp/carrier/twisted/dgram/base.py +++ b/pysnmp/carrier/twisted/dgram/base.py @@ -1,8 +1,9 @@ -"""Implements twisted-based generic DGRAM transport""" +# Implements twisted-based generic DGRAM transport import sys from twisted.internet.protocol import DatagramProtocol from twisted.internet import reactor from pysnmp.carrier.twisted.base import AbstractTwistedTransport +from pysnmp.carrier.address import TransportAddressPair from pysnmp.carrier import error from pysnmp import debug @@ -11,18 +12,22 @@ class DgramTwistedTransport(DatagramProtocol, AbstractTwistedTransport): # Twisted Datagram API - def datagramReceived(self, datagram, address): + def datagramReceived(self, datagram, transportAddress): if self._cbFun is None: raise error.CarrierError('Unable to call cbFun') else: + # XXX fetch local endpoint from Twisted + transportAddress = TransportAddressPair(None, transportAddress) # Callback fun is called through callLater() in attempt # to make Twisted timed calls work under high load. - reactor.callLater(0, self._cbFun, self, address, datagram) + reactor.callLater(0, self._cbFun, self, transportAddress, datagram) def startProtocol(self): debug.logger & debug.flagIO and debug.logger('startProtocol: invoked') while self._writeQ: outgoingMessage, transportAddress = self._writeQ.pop(0) + if isinstance(transportAddress, TransportAddressPair): + transportAddress = transportAddress.getRemoteAddr() debug.logger & debug.flagIO and debug.logger('startProtocol: transportAddress %r outgoingMessage %r' % (transportAddress, outgoingMessage)) try: self.transport.write(outgoingMessage, transportAddress) @@ -38,6 +43,8 @@ class DgramTwistedTransport(DatagramProtocol, AbstractTwistedTransport): if self.transport is None: self._writeQ.append((outgoingMessage, transportAddress)) else: + if isinstance(transportAddress, TransportAddressPair): + transportAddress = transportAddress.getRemoteAddr() try: self.transport.write(outgoingMessage, transportAddress) except Exception: |