From 1ae8869d7b86f8275bff79fd952ca8458ac017c2 Mon Sep 17 00:00:00 2001 From: Stefan Wahren Date: Sun, 16 Sep 2012 18:15:55 +0200 Subject: [PATCH 1/2] convert all control chars into spaces to be xml 1.0 conform --- mbus/mbus-protocol.c | 47 ++++++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/mbus/mbus-protocol.c b/mbus/mbus-protocol.c index 76ed529..4389e60 100755 --- a/mbus/mbus-protocol.c +++ b/mbus/mbus-protocol.c @@ -9,6 +9,7 @@ //------------------------------------------------------------------------------ #include +#include #include #include #include @@ -3226,26 +3227,34 @@ mbus_str_xml_encode(u_char *dst, const u_char *src, size_t max_len) { break; } - - switch (src[i]) - { - case '&': - len += snprintf(&dst[len], max_len - len, "&"); - break; - case '<': - len += snprintf(&dst[len], max_len - len, "<"); - break; - case '>': - len += snprintf(&dst[len], max_len - len, ">"); - break; - case '"': - len += snprintf(&dst[len], max_len - len, """); - break; - default: - dst[len++] = src[i]; - break; - } + if (iscntrl(src[i])) + { + // convert all control chars into spaces + dst[len++] = ' '; + } + else + { + switch (src[i]) + { + case '&': + len += snprintf(&dst[len], max_len - len, "&"); + break; + case '<': + len += snprintf(&dst[len], max_len - len, "<"); + break; + case '>': + len += snprintf(&dst[len], max_len - len, ">"); + break; + case '"': + len += snprintf(&dst[len], max_len - len, """); + break; + default: + dst[len++] = src[i]; + break; + } + } + i++; } } From fe4217772c714ddd17eb71c02a16d73f99315e82 Mon Sep 17 00:00:00 2001 From: Stefan Wahren Date: Mon, 17 Sep 2012 21:01:53 +0200 Subject: [PATCH 2/2] Added product name mapping for Sensus PolluCom E --- mbus/mbus-protocol.c | 9 +++++++++ mbus/mbus-protocol.h | 1 + 2 files changed, 10 insertions(+) diff --git a/mbus/mbus-protocol.c b/mbus/mbus-protocol.c index 4389e60..59736e9 100755 --- a/mbus/mbus-protocol.c +++ b/mbus/mbus-protocol.c @@ -866,6 +866,15 @@ mbus_data_product_name(mbus_data_variable_header *header) break; } } + else if (manufacturer == MBUS_VARIABLE_DATA_MAN_SEN) + { + switch (header->version) + { + case 0x19: + strcpy(buff,"Sensus PolluCom E"); + break; + } + } else if (manufacturer == MBUS_VARIABLE_DATA_MAN_SPX) { switch (header->version) diff --git a/mbus/mbus-protocol.h b/mbus/mbus-protocol.h index 6742100..8ec0ce6 100755 --- a/mbus/mbus-protocol.h +++ b/mbus/mbus-protocol.h @@ -484,6 +484,7 @@ typedef struct _mbus_data_secondary_address { #define MBUS_VARIABLE_DATA_MAN_NZR 0x3B52 #define MBUS_VARIABLE_DATA_MAN_PAD 0x4024 #define MBUS_VARIABLE_DATA_MAN_QDS 0x4493 +#define MBUS_VARIABLE_DATA_MAN_SEN 0x4CAE #define MBUS_VARIABLE_DATA_MAN_SLB 0x4D82 #define MBUS_VARIABLE_DATA_MAN_SON 0x4DEE #define MBUS_VARIABLE_DATA_MAN_SPX 0x4E18