From 7ecfd4110a6b169bd96629f81dc43f0a352a0cfa Mon Sep 17 00:00:00 2001 From: Alex Stapleton Date: Sun, 10 Jul 2011 12:20:17 +0100 Subject: [PATCH] Added slave ID check for response messages --- src/modbus.c | 8 ++++++++ src/modbus.h | 1 + 2 files changed, 9 insertions(+), 0 deletions(-) diff --git a/src/modbus.c b/src/modbus.c index 5fd422a..684be1f 100644 --- a/src/modbus.c +++ b/src/modbus.c @@ -80,6 +80,8 @@ const char *modbus_strerror(int errnum) { return "Invalid exception code"; case EMBMDATA: return "Too many data"; + case EMBBADSLAVE: + return "Response not from requested slave"; default: return strerror(errnum); } @@ -492,6 +494,12 @@ static int check_confirmation(modbus_t *ctx, uint8_t *req, } } + /* Check responding slave is the slave we requested */ + if(req[0] != 0 && rsp[0] != req[0]) { + errno = EMBBADSLAVE; + return -1; + } + rsp_length_computed = compute_response_length_from_request(ctx, req); /* Check length */ diff --git a/src/modbus.h b/src/modbus.h index ed6dabb..f729ac7 100644 --- a/src/modbus.h +++ b/src/modbus.h @@ -117,6 +117,7 @@ enum { #define EMBBADEXC (EMBXGTAR + 3) #define EMBUNKEXC (EMBXGTAR + 4) #define EMBMDATA (EMBXGTAR + 5) +#define EMBBADSLAVE (EMBXGTAR + 6) extern const unsigned int libmodbus_version_major; extern const unsigned int libmodbus_version_minor; -- libgit2 0.21.4