diff --git a/bin/mbus-serial-request-data-multi-reply.c b/bin/mbus-serial-request-data-multi-reply.c index e9c74a8..1eb765d 100755 --- a/bin/mbus-serial-request-data-multi-reply.c +++ b/bin/mbus-serial-request-data-multi-reply.c @@ -55,7 +55,8 @@ main(int argc, char **argv) mbus_handle *handle = NULL; char *device, *addr_str, *xml_result; - int address, baudrate = 9600; + int address; + long baudrate = 9600; memset((void *)&reply, 0, sizeof(mbus_frame)); memset((void *)&reply_data, 0, sizeof(mbus_frame_data)); @@ -73,13 +74,13 @@ main(int argc, char **argv) } else if (argc == 5 && strcmp(argv[1], "-b") == 0) { - baudrate = atoi(argv[2]); + baudrate = atol(argv[2]); device = argv[3]; addr_str = argv[4]; } else if (argc == 6 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-b") == 0) { - baudrate = atoi(argv[3]); + baudrate = atol(argv[3]); device = argv[4]; addr_str = argv[5]; debug = 1; diff --git a/bin/mbus-serial-request-data.c b/bin/mbus-serial-request-data.c index a250781..e10c46c 100755 --- a/bin/mbus-serial-request-data.c +++ b/bin/mbus-serial-request-data.c @@ -26,7 +26,8 @@ main(int argc, char **argv) mbus_handle *handle = NULL; char *device, *addr_str, *xml_result; - int address, baudrate = 9600; + int address; + long baudrate = 9600; memset((void *)&reply, 0, sizeof(mbus_frame)); memset((void *)&reply_data, 0, sizeof(mbus_frame_data)); @@ -44,13 +45,13 @@ main(int argc, char **argv) } else if (argc == 5 && strcmp(argv[1], "-b") == 0) { - baudrate = atoi(argv[2]); + baudrate = atol(argv[2]); device = argv[3]; addr_str = argv[4]; } else if (argc == 6 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-b") == 0) { - baudrate = atoi(argv[3]); + baudrate = atol(argv[3]); device = argv[4]; addr_str = argv[5]; debug = 1; diff --git a/bin/mbus-serial-scan-secondary.c b/bin/mbus-serial-scan-secondary.c index e4ae295..a457ee1 100755 --- a/bin/mbus-serial-scan-secondary.c +++ b/bin/mbus-serial-scan-secondary.c @@ -52,7 +52,7 @@ int main(int argc, char **argv) { char *device, *addr_mask = NULL; - int baudrate = 9600; + long baudrate = 9600; mbus_handle *handle = NULL; mbus_frame *frame = NULL, reply; @@ -82,26 +82,26 @@ main(int argc, char **argv) } else if (argc == 4 && strcmp(argv[1], "-b") == 0) { - baudrate = atoi(argv[2]); + baudrate = atol(argv[2]); device = argv[3]; addr_mask = strdup("FFFFFFFFFFFFFFFF"); } else if (argc == 5 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-b") == 0) { - baudrate = atoi(argv[3]); + baudrate = atol(argv[3]); device = argv[4]; addr_mask = strdup("FFFFFFFFFFFFFFFF"); debug = 1; } else if (argc == 5 && strcmp(argv[1], "-b") == 0) { - baudrate = atoi(argv[2]); + baudrate = atol(argv[2]); device = argv[3]; addr_mask = strdup(argv[4]); } else if (argc == 6 && strcmp(argv[1], "-d") == 0) { - baudrate = atoi(argv[3]); + baudrate = atol(argv[3]); device = argv[4]; addr_mask = strdup(argv[5]); debug = 1; diff --git a/bin/mbus-serial-scan.c b/bin/mbus-serial-scan.c index ad06cdd..b6d4403 100755 --- a/bin/mbus-serial-scan.c +++ b/bin/mbus-serial-scan.c @@ -54,7 +54,8 @@ main(int argc, char **argv) { mbus_handle *handle; char *device; - int address, baudrate = 9600, retries = 0; + int address, retries = 0; + long baudrate = 9600; int ret; if (argc == 2) @@ -68,7 +69,7 @@ main(int argc, char **argv) } else if (argc == 4 && strcmp(argv[1], "-b") == 0) { - baudrate = atoi(argv[2]); + baudrate = atol(argv[2]); device = argv[3]; } else if (argc == 4 && strcmp(argv[1], "-r") == 0) @@ -79,7 +80,7 @@ main(int argc, char **argv) else if (argc == 5 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-b") == 0) { debug = 1; - baudrate = atoi(argv[3]); + baudrate = atol(argv[3]); device = argv[4]; } else if (argc == 5 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-r") == 0) @@ -90,14 +91,14 @@ main(int argc, char **argv) } else if (argc == 6 && strcmp(argv[1], "-b") == 0 && strcmp(argv[3], "-r") == 0) { - baudrate = atoi(argv[2]); + baudrate = atol(argv[2]); retries = atoi(argv[4]); device = argv[5]; } else if (argc == 7 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-b") == 0 && strcmp(argv[4], "-r") == 0) { debug = 1; - baudrate = atoi(argv[3]); + baudrate = atol(argv[3]); retries = atoi(argv[5]); device = argv[6]; } diff --git a/bin/mbus-serial-select-secondary.c b/bin/mbus-serial-select-secondary.c index 343a22a..a4885e2 100755 --- a/bin/mbus-serial-select-secondary.c +++ b/bin/mbus-serial-select-secondary.c @@ -23,7 +23,8 @@ main(int argc, char **argv) mbus_handle *handle; mbus_frame reply; char *device, *addr = NULL; - int ret, baudrate = 9600; + int ret; + long baudrate = 9600; if (argc == 3) { @@ -32,7 +33,7 @@ main(int argc, char **argv) } else if (argc == 5 && strcmp(argv[1], "-b") == 0) { - baudrate = atoi(argv[2]); + baudrate = atol(argv[2]); device = argv[3]; addr = strdup(argv[4]); } diff --git a/bin/mbus-serial-switch-baudrate.c b/bin/mbus-serial-switch-baudrate.c index c5c4849..ab74660 100755 --- a/bin/mbus-serial-switch-baudrate.c +++ b/bin/mbus-serial-switch-baudrate.c @@ -27,20 +27,20 @@ main(int argc, char **argv) mbus_frame reply; char *device; int address, ret; - int source_baudrate = 9600, target_baudrate; + long source_baudrate = 9600, target_baudrate; if (argc == 4) { device = argv[1]; address = atoi(argv[2]); - target_baudrate = atoi(argv[3]); + target_baudrate = atol(argv[3]); } else if (argc == 6 && strcmp(argv[1], "-b") == 0) { - source_baudrate = atoi(argv[2]); + source_baudrate = atol(argv[2]); device = argv[3]; address = atoi(argv[4]); - target_baudrate = atoi(argv[5]); + target_baudrate = atol(argv[5]); } else { diff --git a/bin/mbus-tcp-raw-send.c b/bin/mbus-tcp-raw-send.c index 183e335..224a2d9 100644 --- a/bin/mbus-tcp-raw-send.c +++ b/bin/mbus-tcp-raw-send.c @@ -26,7 +26,8 @@ main(int argc, char **argv) mbus_handle *handle = NULL; char *host, *addr_str, matching_addr[16], *file = NULL; - int port, address, result; + long port; + int address, result; FILE *fp = NULL; size_t buff_len, len; unsigned char raw_buff[4096], buff[4096]; @@ -37,21 +38,21 @@ main(int argc, char **argv) if (argc == 4) { host = argv[1]; - port = atoi(argv[2]); + port = atol(argv[2]); addr_str = argv[3]; debug = 0; } else if (argc == 5 && strcmp(argv[1], "-d") == 0) { host = argv[2]; - port = atoi(argv[3]); + port = atol(argv[3]); addr_str = argv[4]; debug = 1; } else if (argc == 5) { host = argv[1]; - port = atoi(argv[2]); + port = atol(argv[2]); addr_str = argv[3]; file = argv[4]; debug = 0; @@ -59,7 +60,7 @@ main(int argc, char **argv) else if (argc == 6 && strcmp(argv[1], "-d") == 0) { host = argv[2]; - port = atoi(argv[3]); + port = atol(argv[3]); addr_str = argv[4]; file = argv[5]; debug = 1; @@ -72,6 +73,12 @@ main(int argc, char **argv) return 0; } + if ((port < 0) || (port > 0xFFFF)) + { + fprintf(stderr, "Invalid port: %ld\n", port); + return 1; + } + if (debug) { mbus_register_send_event(&mbus_dump_send_event); diff --git a/bin/mbus-tcp-request-data-multi-reply.c b/bin/mbus-tcp-request-data-multi-reply.c index 2b65c31..72e89ea 100755 --- a/bin/mbus-tcp-request-data-multi-reply.c +++ b/bin/mbus-tcp-request-data-multi-reply.c @@ -26,7 +26,8 @@ main(int argc, char **argv) mbus_handle *handle = NULL; char *host, *addr_str, matching_addr[16], *xml_result; - int port, address; + int address; + long port; memset((void *)&reply, 0, sizeof(mbus_frame)); memset((void *)&reply_data, 0, sizeof(mbus_frame_data)); @@ -34,14 +35,14 @@ main(int argc, char **argv) if (argc == 4) { host = argv[1]; - port = atoi(argv[2]); + port = atol(argv[2]); addr_str = argv[3]; debug = 0; } else if (argc == 5 && strcmp(argv[1], "-d") == 0) { host = argv[2]; - port = atoi(argv[3]); + port = atol(argv[3]); addr_str = argv[4]; debug = 1; } @@ -52,6 +53,12 @@ main(int argc, char **argv) return 0; } + if ((port < 0) || (port > 0xFFFF)) + { + fprintf(stderr, "Invalid port: %ld\n", port); + return 1; + } + if (debug) { mbus_register_send_event(&mbus_dump_send_event); diff --git a/bin/mbus-tcp-request-data.c b/bin/mbus-tcp-request-data.c index 07f72bf..84c2c68 100755 --- a/bin/mbus-tcp-request-data.c +++ b/bin/mbus-tcp-request-data.c @@ -26,7 +26,8 @@ main(int argc, char **argv) mbus_handle *handle = NULL; char *host, *addr_str, matching_addr[16], *xml_result; - int port, address; + int address; + long port; memset((void *)&reply, 0, sizeof(mbus_frame)); memset((void *)&reply_data, 0, sizeof(mbus_frame_data)); @@ -34,14 +35,14 @@ main(int argc, char **argv) if (argc == 4) { host = argv[1]; - port = atoi(argv[2]); + port = atol(argv[2]); addr_str = argv[3]; debug = 0; } else if (argc == 5 && strcmp(argv[1], "-d") == 0) { host = argv[2]; - port = atoi(argv[3]); + port = atol(argv[3]); addr_str = argv[4]; debug = 1; } @@ -52,6 +53,12 @@ main(int argc, char **argv) return 0; } + if ((port < 0) || (port > 0xFFFF)) + { + fprintf(stderr, "Invalid port: %ld\n", port); + return 1; + } + if (debug) { mbus_register_send_event(&mbus_dump_send_event); diff --git a/bin/mbus-tcp-scan-secondary.c b/bin/mbus-tcp-scan-secondary.c index 42d5565..0696e5d 100755 --- a/bin/mbus-tcp-scan-secondary.c +++ b/bin/mbus-tcp-scan-secondary.c @@ -22,7 +22,7 @@ int main(int argc, char **argv) { char *host, *addr_mask = NULL; - int port; + long port; mbus_handle *handle = NULL; mbus_frame *frame = NULL, reply; @@ -37,7 +37,7 @@ main(int argc, char **argv) } host = argv[1]; - port = atoi(argv[2]); + port = atol(argv[2]); if (argc == 4) { addr_mask = strdup(argv[3]); @@ -52,6 +52,12 @@ main(int argc, char **argv) fprintf(stderr, "Failed to allocate address mask.\n"); return 1; } + + if ((port < 0) || (port > 0xFFFF)) + { + fprintf(stderr, "Invalid port: %ld\n", port); + return 1; + } if (mbus_is_secondary_address(addr_mask) == 0) { diff --git a/bin/mbus-tcp-scan.c b/bin/mbus-tcp-scan.c index 38ecb75..d1316d5 100755 --- a/bin/mbus-tcp-scan.c +++ b/bin/mbus-tcp-scan.c @@ -54,32 +54,33 @@ main(int argc, char **argv) { mbus_handle *handle; char *host; - int port, address, retries = 0; + int address, retries = 0; + long port; int ret; if (argc == 3) { host = argv[1]; - port = atoi(argv[2]); + port = atol(argv[2]); } else if (argc == 4 && strcmp(argv[1], "-d") == 0) { debug = 1; host = argv[2]; - port = atoi(argv[3]); + port = atol(argv[3]); } else if (argc == 5 && strcmp(argv[1], "-r") == 0) { retries = atoi(argv[2]); host = argv[3]; - port = atoi(argv[4]); + port = atol(argv[4]); } else if (argc == 6 && strcmp(argv[1], "-d") == 0 && strcmp(argv[2], "-r") == 0) { debug = 1; retries = atoi(argv[3]); host = argv[4]; - port = atoi(argv[5]); + port = atol(argv[5]); } else { @@ -87,6 +88,12 @@ main(int argc, char **argv) return 0; } + if ((port < 0) || (port > 0xFFFF)) + { + fprintf(stderr, "Invalid port: %ld\n", port); + return 1; + } + if (debug) { mbus_register_send_event(&mbus_dump_send_event); diff --git a/bin/mbus-tcp-select-secondary.c b/bin/mbus-tcp-select-secondary.c index 5966ff5..8204374 100755 --- a/bin/mbus-tcp-select-secondary.c +++ b/bin/mbus-tcp-select-secondary.c @@ -23,7 +23,8 @@ main(int argc, char **argv) mbus_handle *handle; mbus_frame reply; char *host, *addr = NULL; - int port, ret; + int ret; + long port; if (argc != 4) { @@ -32,7 +33,13 @@ main(int argc, char **argv) } host = argv[1]; - port = atoi(argv[2]); + port = atol(argv[2]); + + if ((port < 0) || (port > 0xFFFF)) + { + fprintf(stderr, "Invalid port: %ld\n", port); + return 1; + } if ((addr = strdup(argv[3])) == NULL) { diff --git a/mbus/mbus-protocol-aux.c b/mbus/mbus-protocol-aux.c index 7b0d3ea..9b40369 100755 --- a/mbus/mbus-protocol-aux.c +++ b/mbus/mbus-protocol-aux.c @@ -1438,7 +1438,7 @@ mbus_context_serial(const char *device) } mbus_handle * -mbus_context_tcp(const char *host, int port) +mbus_context_tcp(const char *host, uint16_t port) { mbus_handle *handle; mbus_tcp_data *tcp_data; @@ -1655,7 +1655,7 @@ mbus_send_select_frame(mbus_handle * handle, const char *secondary_addr_str) // adressed slave(s) switch to the given baudrate //------------------------------------------------------------------------------ int -mbus_send_switch_baudrate_frame(mbus_handle * handle, int address, int baudrate) +mbus_send_switch_baudrate_frame(mbus_handle * handle, int address, long baudrate) { int retval = 0; int control_information = 0; diff --git a/mbus/mbus-protocol-aux.h b/mbus/mbus-protocol-aux.h index 61d5d78..2596c1d 100755 --- a/mbus/mbus-protocol-aux.h +++ b/mbus/mbus-protocol-aux.h @@ -177,7 +177,7 @@ mbus_handle * mbus_context_serial(const char *device); * * @return Initialized "unified" handler when successful, NULL otherwise; */ -mbus_handle * mbus_context_tcp(const char *host, int port); +mbus_handle * mbus_context_tcp(const char *host, uint16_t port); /** * Deallocate memory used by M-Bus context. @@ -275,7 +275,7 @@ int mbus_send_application_reset_frame(mbus_handle * handle, int address, int sub * * @return Zero when successful. */ -int mbus_send_switch_baudrate_frame(mbus_handle * handle, int address, int baudrate); +int mbus_send_switch_baudrate_frame(mbus_handle * handle, int address, long baudrate); /** * Sends request frame (REQ_UD2) to given slave using "unified" handle diff --git a/mbus/mbus-protocol.h b/mbus/mbus-protocol.h index fefa5ca..0e5e1cc 100755 --- a/mbus/mbus-protocol.h +++ b/mbus/mbus-protocol.h @@ -19,6 +19,7 @@ #define _MBUS_PROTOCOL_H_ #include +#include #include #ifdef __cplusplus diff --git a/mbus/mbus-serial.c b/mbus/mbus-serial.c index eed4e6e..45f3983 100755 --- a/mbus/mbus-serial.c +++ b/mbus/mbus-serial.c @@ -95,7 +95,7 @@ mbus_serial_connect(mbus_handle *handle) // Set baud rate for serial connection //------------------------------------------------------------------------------ int -mbus_serial_set_baudrate(mbus_handle *handle, int baudrate) +mbus_serial_set_baudrate(mbus_handle *handle, long baudrate) { speed_t speed; mbus_serial_data *serial_data; diff --git a/mbus/mbus-serial.h b/mbus/mbus-serial.h index 4080aef..edb1bb5 100755 --- a/mbus/mbus-serial.h +++ b/mbus/mbus-serial.h @@ -37,7 +37,7 @@ int mbus_serial_connect(mbus_handle *handle); int mbus_serial_disconnect(mbus_handle *handle); int mbus_serial_send_frame(mbus_handle *handle, mbus_frame *frame); int mbus_serial_recv_frame(mbus_handle *handle, mbus_frame *frame); -int mbus_serial_set_baudrate(mbus_handle *handle, int baudrate); +int mbus_serial_set_baudrate(mbus_handle *handle, long baudrate); void mbus_serial_data_free(mbus_handle *handle); #ifdef __cplusplus diff --git a/mbus/mbus-tcp.c b/mbus/mbus-tcp.c index 40249b4..671bebf 100755 --- a/mbus/mbus-tcp.c +++ b/mbus/mbus-tcp.c @@ -38,7 +38,7 @@ mbus_tcp_connect(mbus_handle *handle) struct sockaddr_in s; struct timeval time_out; mbus_tcp_data *tcp_data; - int port; + uint16_t port; if (handle == NULL) return -1; diff --git a/mbus/mbus-tcp.h b/mbus/mbus-tcp.h index 085c9dc..fa11036 100755 --- a/mbus/mbus-tcp.h +++ b/mbus/mbus-tcp.h @@ -29,7 +29,7 @@ extern "C" { typedef struct _mbus_tcp_data { char *host; - int port; + uint16_t port; } mbus_tcp_data; int mbus_tcp_connect(mbus_handle *handle);