From e1bdf1e7f1d2ac87a594abf8622f536d3ff4b0b9 Mon Sep 17 00:00:00 2001 From: Frederic Berat Date: Mon, 21 Mar 2016 15:40:53 +0900 Subject: MultiNode: Add support for port configuration Signed-off-by:Frederic Berat Change-Id: I9b387d5713f5ae7b6fcfadb22d804fdb97534e44 --- include/dlt/dlt_client.h | 10 ++++++++++ src/gateway/dlt_gateway.c | 13 ++++++++++++- src/lib/dlt_client.c | 45 +++++++++++++++++++++++++++++++++++---------- 3 files changed, 57 insertions(+), 11 deletions(-) diff --git a/include/dlt/dlt_client.h b/include/dlt/dlt_client.h index 1dcc3a6..676ffeb 100644 --- a/include/dlt/dlt_client.h +++ b/include/dlt/dlt_client.h @@ -91,6 +91,7 @@ typedef struct DltReceiver receiver; /**< receiver pointer to dlt receiver structure */ int sock; /**< sock Connection handle/socket */ char *servIP; /**< servIP IP adress/Hostname of TCP/IP interface */ + int port; /**< Port for TCP connections (optional) */ char *serialDevice; /**< serialDevice Devicename of serial device */ char *socketPath; /**< socketPath Unix socket path */ speed_t baudrate; /**< baudrate Baudrate of serial interface, as speed_t */ @@ -103,6 +104,15 @@ extern "C" { void dlt_client_register_message_callback(int (*registerd_callback) (DltMessage *message, void *data)); +/** + * Initialising dlt client structure with a specific port + * @param client pointer to dlt client structure + * @param port The port for the tcp connection + * @param verbose if set to true verbose information is printed out. + * @return negative value if there was an error + */ +int dlt_client_init_port(DltClient *client, int port, int verbose); + /** * Initialising dlt client structure * @param client pointer to dlt client structure diff --git a/src/gateway/dlt_gateway.c b/src/gateway/dlt_gateway.c index 92faefc..bf02b94 100644 --- a/src/gateway/dlt_gateway.c +++ b/src/gateway/dlt_gateway.c @@ -480,7 +480,9 @@ int dlt_gateway_store_connection(DltGateway *gateway, tmp->control_msgs, sizeof(tmp->control_msgs)); - if (dlt_client_init(&gateway->connections[i].client, verbose) != 0) + if (dlt_client_init_port(&gateway->connections[i].client, + gateway->connections[i].port, + verbose) != 0) { free(gateway->connections[i].ip_address); free(gateway->connections[i].ecuid); @@ -855,6 +857,15 @@ int dlt_gateway_process_passive_node_messages(DltDaemon *daemon, /* only forward messages if the received ECUid is the expected one */ if (strncmp(header->ecu, con->ecuid, strlen(con->ecuid)) == 0) { + snprintf(local_str, + DLT_DAEMON_TEXTBUFSIZE, + "Received ECUid (%s) similar to configured ECUid(%s). " + "Forwarding message (%s).\n", + header->ecu, + con->ecuid, + msg.databuffer); + dlt_log(LOG_DEBUG, local_str); + if (dlt_daemon_client_send(DLT_DAEMON_SEND_TO_ALL, daemon, daemon_local, diff --git a/src/lib/dlt_client.c b/src/lib/dlt_client.c index 3de3845..20291d5 100644 --- a/src/lib/dlt_client.c +++ b/src/lib/dlt_client.c @@ -105,25 +105,44 @@ void dlt_client_register_message_callback(int (*registerd_callback) (DltMessage message_callback_function = registerd_callback; } -DltReturnValue dlt_client_init(DltClient *client, int verbose) +DltReturnValue dlt_client_init_port(DltClient *client, int port, int verbose) { if (verbose) - printf("Init dlt client struct\n"); + { + snprintf(str, DLT_CLIENT_TEXTBUFSIZE, + "Init dlt client struct with port %d\n", port); + dlt_log(LOG_INFO, str); + } if (client == NULL) + { return DLT_RETURN_ERROR; + } - client->sock = -1; - client->servIP = 0; - client->serialDevice = 0; - client->baudrate = DLT_CLIENT_INITIAL_BAUDRATE; + client->sock=-1; + client->servIP=0; + client->serialDevice=0; + client->baudrate=DLT_CLIENT_INITIAL_BAUDRATE; + client->port = port; client->socketPath = 0; client->mode=DLT_CLIENT_MODE_TCP; - client->receiver.buffer = 0; + client->receiver.buffer=0; return DLT_RETURN_OK; } +DltReturnValue dlt_client_init(DltClient *client, int verbose) +{ + if (verbose) + { + snprintf(str, DLT_CLIENT_TEXTBUFSIZE, + "Init dlt client struct with default port.\n"); + dlt_log(LOG_INFO, str); + } + + return dlt_client_init_port(client, DLT_DAEMON_TCP_PORT, verbose); +} + DltReturnValue dlt_client_connect(DltClient *client, int verbose) { char portnumbuffer[33]; @@ -163,12 +182,18 @@ DltReturnValue dlt_client_connect(DltClient *client, int verbose) for(p = servinfo; p != NULL; p = p->ai_next) { if ((client->sock = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) < 0) { - snprintf(str, DLT_CLIENT_TEXTBUFSIZE, "socket() failed!\n"); + snprintf(str, DLT_CLIENT_TEXTBUFSIZE, + "socket() failed! %s\n", + strerror(errno)); + dlt_log(LOG_WARNING, str); continue; } if (connect(client->sock, p->ai_addr, p->ai_addrlen) < 0) { + snprintf(str, DLT_CLIENT_TEXTBUFSIZE, + "connect() failed! %s\n", + strerror(errno)); close(client->sock); - snprintf(str, DLT_CLIENT_TEXTBUFSIZE, "connect() failed!\n"); + dlt_log(LOG_WARNING, str); continue; } @@ -178,7 +203,7 @@ DltReturnValue dlt_client_connect(DltClient *client, int verbose) freeaddrinfo(servinfo); if (p == NULL) { - fprintf(stderr, "ERROR: failed to connect - %s\n", str); + dlt_log(LOG_ERR, "ERROR: failed to connect.\n"); return DLT_RETURN_ERROR; } -- cgit v1.2.1