Skip to content

Commit 8681db9

Browse files
committed
#60 Check for slave unit id before processing the request for serial servers
1 parent 576b61a commit 8681db9

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

pymodbus/server/async.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,9 @@ def dataReceived(self, data):
5858
if _logger.isEnabledFor(logging.DEBUG):
5959
_logger.debug(' '.join([hex(byte2int(x)) for x in data]))
6060
if not self.factory.control.ListenOnly:
61-
self.framer.processIncomingPacket(data, self._execute)
61+
unit_address = byte2int(data[0])
62+
if unit_address in self.factory.store:
63+
self.framer.processIncomingPacket(data, self._execute)
6264

6365
def _execute(self, request):
6466
''' Executes the request and returns the result

pymodbus/server/sync.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,9 @@ def handle(self):
102102
if data:
103103
if _logger.isEnabledFor(logging.DEBUG):
104104
_logger.debug(" ".join([hex(byte2int(x)) for x in data]))
105-
self.framer.processIncomingPacket(data, self.execute)
105+
unit_address = byte2int(data[0])
106+
if unit_address in self.server.context:
107+
self.framer.processIncomingPacket(data, self.execute)
106108
except Exception as msg:
107109
# since we only have a single socket, we cannot exit
108110
# Clear frame buffer
@@ -198,14 +200,15 @@ class ModbusDisconnectedRequestHandler(ModbusBaseRequestHandler):
198200
only difference is that we have to specify who to send the
199201
resulting packet data to.
200202
'''
203+
socket = None
201204

202205
def handle(self):
203206
''' Callback when we receive any data
204207
'''
205208
reset_frame = False
206209
while self.running:
207210
try:
208-
data, self.request = self.request
211+
data, self.socket = self.request
209212
if not data:
210213
self.running = False
211214
if _logger.isEnabledFor(logging.DEBUG):
@@ -236,7 +239,7 @@ def send(self, message):
236239
pdu = self.framer.buildPacket(message)
237240
if _logger.isEnabledFor(logging.DEBUG):
238241
_logger.debug('send: %s' % b2a_hex(pdu))
239-
return self.request.sendto(pdu, self.client_address)
242+
return self.socket.sendto(pdu, self.client_address)
240243

241244

242245
#---------------------------------------------------------------------------#

0 commit comments

Comments
 (0)