1
0
mirror of https://github.com/JoelBender/bacpypes synced 2025-09-28 22:15:23 +08:00

handle no broadcast available in interface (loopback)

This commit is contained in:
Joel Bender 2017-03-10 00:41:06 -05:00
parent ec01d22eae
commit 54d0f4430b
3 changed files with 40 additions and 6 deletions

View File

@ -72,10 +72,15 @@ class UDPMultiplexer:
else:
self.address = Address(addr)
# check for a special broadcast address
# promote the normal and broadcast tuples
self.addrTuple = self.address.addrTuple
self.addrBroadcastTuple = self.address.addrBroadcastTuple
if (self.addrTuple == self.addrBroadcastTuple):
# check for no broadcasting (loopback interface)
if not self.addrBroadcastTuple:
noBroadcast = True
elif (self.addrTuple == self.addrBroadcastTuple):
# old school broadcast address
self.addrBroadcastTuple = ('255.255.255.255', self.addrTuple[1])
else:
specialBroadcast = True
@ -117,9 +122,15 @@ class UDPMultiplexer:
if pdu.pduDestination.addrType == Address.localBroadcastAddr:
dest = self.addrBroadcastTuple
if _debug: UDPMultiplexer._debug(" - requesting local broadcast: %r", dest)
# interface might not support broadcasts
if not dest:
return
elif pdu.pduDestination.addrType == Address.localStationAddr:
dest = unpack_ip_addr(pdu.pduDestination.addrAddr)
if _debug: UDPMultiplexer._debug(" - requesting local station: %r", dest)
else:
raise RuntimeError("invalid destination address type")

View File

@ -73,10 +73,15 @@ class UDPMultiplexer:
else:
self.address = Address(addr)
# check for a special broadcast address
# promote the normal and broadcast tuples
self.addrTuple = self.address.addrTuple
self.addrBroadcastTuple = self.address.addrBroadcastTuple
if (self.addrTuple == self.addrBroadcastTuple):
# check for no broadcasting (loopback interface)
if not self.addrBroadcastTuple:
noBroadcast = True
elif (self.addrTuple == self.addrBroadcastTuple):
# old school broadcast address
self.addrBroadcastTuple = ('255.255.255.255', self.addrTuple[1])
else:
specialBroadcast = True
@ -118,9 +123,15 @@ class UDPMultiplexer:
if pdu.pduDestination.addrType == Address.localBroadcastAddr:
dest = self.addrBroadcastTuple
if _debug: UDPMultiplexer._debug(" - requesting local broadcast: %r", dest)
# interface might not support broadcasts
if not dest:
return
elif pdu.pduDestination.addrType == Address.localStationAddr:
dest = unpack_ip_addr(pdu.pduDestination.addrAddr)
if _debug: UDPMultiplexer._debug(" - requesting local station: %r", dest)
else:
raise RuntimeError("invalid destination address type")

View File

@ -73,10 +73,15 @@ class UDPMultiplexer:
else:
self.address = Address(addr)
# check for a special broadcast address
# promote the normal and broadcast tuples
self.addrTuple = self.address.addrTuple
self.addrBroadcastTuple = self.address.addrBroadcastTuple
if (self.addrTuple == self.addrBroadcastTuple):
# check for no broadcasting (loopback interface)
if not self.addrBroadcastTuple:
noBroadcast = True
elif (self.addrTuple == self.addrBroadcastTuple):
# old school broadcast address
self.addrBroadcastTuple = ('255.255.255.255', self.addrTuple[1])
else:
specialBroadcast = True
@ -98,6 +103,7 @@ class UDPMultiplexer:
bind(self.direct, self.broadcastPort)
else:
self.broadcast = None
# create and bind the Annex H and J servers
self.annexH = _MultiplexServer(self)
self.annexJ = _MultiplexServer(self)
@ -117,9 +123,15 @@ class UDPMultiplexer:
if pdu.pduDestination.addrType == Address.localBroadcastAddr:
dest = self.addrBroadcastTuple
if _debug: UDPMultiplexer._debug(" - requesting local broadcast: %r", dest)
# interface might not support broadcasts
if not dest:
return
elif pdu.pduDestination.addrType == Address.localStationAddr:
dest = pdu.pduDestination.addrTuple
if _debug: UDPMultiplexer._debug(" - requesting local station: %r", dest)
else:
raise RuntimeError("invalid destination address type")