From 8112bb0c3a1b16a9f7e47e725d95f9fbab1bf4c2 Mon Sep 17 00:00:00 2001 From: Manikandan C Date: Mon, 12 Nov 2018 14:01:47 +0100 Subject: dlt-client: logging: Extended the receiver buffer size - dlt-control couldn't receive all the GET_LOG_INFO response message when many applications and contexts are registered. Therefore the receiver buffer size was extended to 65K. Also the receive buffer size macros are reduced to one variable. - Code cleanup and improvements Signed-off-by: Saya Sugiura --- include/dlt/dlt_client.h | 4 ++-- include/dlt/dlt_common.h | 13 ++++++++++++- src/console/dlt-control-common.c | 14 +++++++------- src/console/dlt-control.c | 6 +++--- src/console/dlt-receive.c | 12 ++++++------ src/daemon/dlt_daemon_offline_logstorage.c | 1 - src/gateway/dlt_gateway.c | 23 +++++++++++------------ src/lib/dlt_client.c | 6 +++--- src/lib/dlt_client_cfg.h | 3 --- src/shared/dlt_common.c | 4 ++-- tests/dlt_test_receiver.c | 14 +++++++------- 11 files changed, 53 insertions(+), 47 deletions(-) diff --git a/include/dlt/dlt_client.h b/include/dlt/dlt_client.h index e56c9ff..7ff55cf 100644 --- a/include/dlt/dlt_client.h +++ b/include/dlt/dlt_client.h @@ -296,9 +296,9 @@ int dlt_client_set_socket_path(DltClient *client, char *socket_path); * Parse GET_LOG_INFO response text * @param resp GET_LOG_INFO response * @param resp_text response text represented by ASCII - * @return 0 on success, -1 otherwise + * @return Value from DltReturnValue enum */ -int dlt_client_parse_get_log_info_resp_text(DltServiceGetLogInfoResponse *resp, +DltReturnValue dlt_client_parse_get_log_info_resp_text(DltServiceGetLogInfoResponse *resp, char *resp_text); /** diff --git a/include/dlt/dlt_common.h b/include/dlt/dlt_common.h index d76d190..2824efd 100644 --- a/include/dlt/dlt_common.h +++ b/include/dlt/dlt_common.h @@ -210,7 +210,6 @@ enum { /** * Definitions for GET_LOG_INFO */ -#define DLT_RECEIVE_TEXTBUFSIZE 1024 /* Size of buffer for text output */ #define DLT_GET_LOG_INFO_HEADER 18 /*Get log info header size in response text */ #define GET_LOG_INFO_LENGTH 13 #define SERVICE_OPT_LENGTH 3 @@ -360,6 +359,16 @@ enum { */ #define DLT_IPC_PATH_MAX 100 +/** + * Maximal receiver buffer size for application messages + */ +#define DLT_RECEIVE_BUFSIZE 65535 + +/** + * Maximal line length + */ +#define DLT_LINE_LEN 1024 + /** * Provision to test static function */ @@ -1488,6 +1497,8 @@ extern "C" * * @param rp char * @param rp_count int + * @param wp char + * @param length int */ void dlt_getloginfo_conv_ascii_to_id(char *rp, int *rp_count, char *wp, int len); diff --git a/src/console/dlt-control-common.c b/src/console/dlt-control-common.c index 127eb4b..37c5a62 100644 --- a/src/console/dlt-control-common.c +++ b/src/console/dlt-control-common.c @@ -160,10 +160,10 @@ void set_timeout(long t) int dlt_parse_config_param(char *config_id, char **config_data) { FILE * pFile = NULL; - int value_length = DLT_RECEIVE_TEXTBUFSIZE; - char line[DLT_RECEIVE_TEXTBUFSIZE-1] = {0}; - char token[DLT_RECEIVE_TEXTBUFSIZE] = {0}; - char value[DLT_RECEIVE_TEXTBUFSIZE] = {0}; + int value_length = DLT_LINE_LEN; + char line[DLT_LINE_LEN-1] = {0}; + char token[DLT_LINE_LEN] = {0}; + char value[DLT_LINE_LEN] = {0}; char *pch = NULL; const char *filename = NULL; @@ -524,7 +524,7 @@ static void *dlt_control_listen_to_daemon(void *data) */ static int dlt_control_callback(DltMessage *message, void *data) { - char text[DLT_RECEIVE_TEXTBUFSIZE] = { 0 }; + char text[DLT_RECEIVE_BUFSIZE] = { 0 }; (void) data; if (message == NULL) @@ -543,11 +543,11 @@ static int dlt_control_callback(DltMessage *message, void *data) dlt_set_storageheader(message->storageheader, "LCTL"); } - dlt_message_header(message, text, DLT_RECEIVE_TEXTBUFSIZE, get_verbosity()); + dlt_message_header(message, text, DLT_RECEIVE_BUFSIZE, get_verbosity()); /* Extracting payload */ dlt_message_payload(message, text, - DLT_RECEIVE_TEXTBUFSIZE, + DLT_RECEIVE_BUFSIZE, DLT_OUTPUT_ASCII, get_verbosity()); diff --git a/src/console/dlt-control.c b/src/console/dlt-control.c index d5d08fb..f291afa 100644 --- a/src/console/dlt-control.c +++ b/src/console/dlt-control.c @@ -703,7 +703,7 @@ int main(int argc, char* argv[]) int dlt_receive_message_callback(DltMessage *message, void *data) { - static char resp_text[DLT_RECEIVE_TEXTBUFSIZE]; + static char resp_text[DLT_RECEIVE_BUFSIZE]; int ret = DLT_RETURN_ERROR; /* parameter check */ @@ -725,7 +725,7 @@ int dlt_receive_message_callback(DltMessage *message, void *data) } /* get response data */ - ret = dlt_message_header(message, resp_text, DLT_RECEIVE_TEXTBUFSIZE, 0); + ret = dlt_message_header(message, resp_text, DLT_RECEIVE_BUFSIZE, 0); if (ret < 0) { fprintf(stderr, "GET_LOG_INFO message_header result failed..\n"); @@ -733,7 +733,7 @@ int dlt_receive_message_callback(DltMessage *message, void *data) return -1; } - ret = dlt_message_payload(message, resp_text, DLT_RECEIVE_TEXTBUFSIZE, DLT_OUTPUT_ASCII, 0); + ret = dlt_message_payload(message, resp_text, DLT_RECEIVE_BUFSIZE, DLT_OUTPUT_ASCII, 0); if (ret < 0) { fprintf(stderr, "GET_LOG_INFO message_payload result failed..\n"); diff --git a/src/console/dlt-receive.c b/src/console/dlt-receive.c index fd19f83..200add1 100644 --- a/src/console/dlt-receive.c +++ b/src/console/dlt-receive.c @@ -556,7 +556,7 @@ int main(int argc, char* argv[]) int dlt_receive_message_callback(DltMessage *message, void *data) { DltReceiveData *dltdata; - static char text[DLT_RECEIVE_TEXTBUFSIZE]; + static char text[DLT_RECEIVE_BUFSIZE]; struct iovec iov[2]; int bytes_written; @@ -584,27 +584,27 @@ int dlt_receive_message_callback(DltMessage *message, void *data) /* if no filter set or filter is matching display message */ if (dltdata->xflag) { - dlt_message_print_hex(message,text,DLT_RECEIVE_TEXTBUFSIZE,dltdata->vflag); + dlt_message_print_hex(message,text,DLT_RECEIVE_BUFSIZE,dltdata->vflag); } else if (dltdata->aflag) { - dlt_message_header(message,text,DLT_RECEIVE_TEXTBUFSIZE,dltdata->vflag); + dlt_message_header(message,text,DLT_RECEIVE_BUFSIZE,dltdata->vflag); printf("%s ",text); - dlt_message_payload(message,text,DLT_RECEIVE_TEXTBUFSIZE,DLT_OUTPUT_ASCII,dltdata->vflag); + dlt_message_payload(message,text,DLT_RECEIVE_BUFSIZE,DLT_OUTPUT_ASCII,dltdata->vflag); printf("[%s]\n",text); } else if (dltdata->mflag) { - dlt_message_print_mixed_plain(message,text,DLT_RECEIVE_TEXTBUFSIZE,dltdata->vflag); + dlt_message_print_mixed_plain(message,text,DLT_RECEIVE_BUFSIZE,dltdata->vflag); } else if (dltdata->sflag) { - dlt_message_header(message,text,DLT_RECEIVE_TEXTBUFSIZE,dltdata->vflag); + dlt_message_header(message,text,DLT_RECEIVE_BUFSIZE,dltdata->vflag); printf("%s \n",text); } diff --git a/src/daemon/dlt_daemon_offline_logstorage.c b/src/daemon/dlt_daemon_offline_logstorage.c index 109cc73..1c63164 100644 --- a/src/daemon/dlt_daemon_offline_logstorage.c +++ b/src/daemon/dlt_daemon_offline_logstorage.c @@ -388,7 +388,6 @@ STATIC DltReturnValue dlt_daemon_logstorage_update_passive_node_context( } return DLT_RETURN_OK; - return DLT_RETURN_OK; } /** diff --git a/src/gateway/dlt_gateway.c b/src/gateway/dlt_gateway.c index 411630b..c5203db 100644 --- a/src/gateway/dlt_gateway.c +++ b/src/gateway/dlt_gateway.c @@ -22,7 +22,7 @@ * Christoph Lipka * Saya Sugiura * - * \copyright Copyright © 2015-2017 Advanced Driver Information Technology. \n + * \copyright Copyright © 2015-2018 Advanced Driver Information Technology. \n * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/. * * \file dlt_gateway.c @@ -72,7 +72,7 @@ typedef enum { * @param value string to be tested * @return 0 on success, -1 otherwise */ -STATIC int dlt_gateway_check_ip(DltGatewayConnection *con, char *value) +STATIC DltReturnValue dlt_gateway_check_ip(DltGatewayConnection *con, char *value) { struct sockaddr_in sa; int ret = DLT_RETURN_ERROR; @@ -316,7 +316,7 @@ STATIC int dlt_gateway_check_control_messages(DltGatewayConnection *con, while (token != NULL) { - if (dlt_gateway_allocate_control_messages(con) == -1) + if (dlt_gateway_allocate_control_messages(con) != DLT_RETURN_OK) { dlt_log(LOG_ERR, "Passive Control Message could not be allocated\n"); @@ -443,7 +443,7 @@ STATIC int dlt_gateway_check_periodic_control_messages(DltGatewayConnection *con con->p_control_msgs = con->p_control_msgs->next; } - if (dlt_gateway_allocate_control_messages(con) == -1) + if (dlt_gateway_allocate_control_messages(con) != DLT_RETURN_OK) { dlt_log(LOG_ERR, "Passive Control Message could not be allocated\n"); @@ -1056,7 +1056,7 @@ STATIC int dlt_gateway_parse_get_log_info(DltDaemon *daemon, int req, int verbose) { - char resp_text[DLT_RECEIVE_TEXTBUFSIZE] = {'\0'}; + char resp_text[DLT_RECEIVE_BUFSIZE] = {'\0'}; DltServiceGetLogInfoResponse *resp = NULL; AppIDsType app; ContextIDsInfoType con; @@ -1097,7 +1097,7 @@ STATIC int dlt_gateway_parse_get_log_info(DltDaemon *daemon, /* check response */ if (dlt_message_payload(msg, resp_text, - DLT_RECEIVE_TEXTBUFSIZE, + DLT_RECEIVE_BUFSIZE, DLT_OUTPUT_ASCII, 0) != DLT_RETURN_OK) { dlt_log(LOG_ERR, "GET_LOG_INFO payload failed\n"); @@ -1272,16 +1272,15 @@ STATIC int dlt_gateway_control_service_logstorage(DltDaemon *daemon, return DLT_RETURN_OK; } -int dlt_gateway_process_passive_node_messages(DltDaemon *daemon, - DltDaemonLocal *daemon_local, - DltReceiver *receiver, - int verbose) +DltReturnValue dlt_gateway_process_passive_node_messages(DltDaemon *daemon, + DltDaemonLocal *daemon_local, + DltReceiver *receiver, + int verbose) { int i = 0; DltGateway *gateway = NULL; DltGatewayConnection *con = NULL; DltMessage msg; - char local_str[DLT_DAEMON_TEXTBUFSIZE]; if ((daemon == NULL) || (daemon_local == NULL) || (receiver == NULL)) { @@ -1427,7 +1426,7 @@ int dlt_gateway_process_passive_node_messages(DltDaemon *daemon, msg.headerextra.ecu) == DLT_RETURN_ERROR) { dlt_vlog(LOG_ERR, "%s: Can't set storage header\n", __func__); - return DLT_DAEMON_ERROR_UNKNOWN; + return DLT_RETURN_ERROR; } if (dlt_daemon_client_send(DLT_DAEMON_SEND_TO_ALL, diff --git a/src/lib/dlt_client.c b/src/lib/dlt_client.c index 9c38827..cdfb002 100644 --- a/src/lib/dlt_client.c +++ b/src/lib/dlt_client.c @@ -289,7 +289,7 @@ DltReturnValue dlt_client_connect(DltClient *client, int verbose) return DLT_RETURN_ERROR; } - if (dlt_receiver_init(&(client->receiver),client->sock,DLT_CLIENT_RCVBUFSIZE) != DLT_RETURN_OK) + if (dlt_receiver_init(&(client->receiver), client->sock, DLT_RECEIVE_BUFSIZE) != DLT_RETURN_OK) { fprintf(stderr, "ERROR initializing receiver\n"); return DLT_RETURN_ERROR; @@ -1011,7 +1011,7 @@ STATIC void dlt_client_free_calloc_failed_get_log_info(DltServiceGetLogInfoRespo return; } -int dlt_client_parse_get_log_info_resp_text(DltServiceGetLogInfoResponse *resp, +DltReturnValue dlt_client_parse_get_log_info_resp_text(DltServiceGetLogInfoResponse *resp, char *resp_text) { AppIDsType *app = NULL; @@ -1023,7 +1023,7 @@ int dlt_client_parse_get_log_info_resp_text(DltServiceGetLogInfoResponse *resp, if ((resp == NULL) || (resp_text == NULL)) { - return DLT_RETURN_ERROR; + return DLT_RETURN_WRONG_PARAMETER; } /* ------------------------------------------------------ diff --git a/src/lib/dlt_client_cfg.h b/src/lib/dlt_client_cfg.h index 45d1864..bfa4d96 100644 --- a/src/lib/dlt_client_cfg.h +++ b/src/lib/dlt_client_cfg.h @@ -82,9 +82,6 @@ /* Size of buffer */ #define DLT_CLIENT_TEXTBUFSIZE 512 -/* Size of receive buffer */ -#define DLT_CLIENT_RCVBUFSIZE 10024 - /* Initial baudrate */ #if !defined (__WIN32__) && !defined(_MSC_VER) #define DLT_CLIENT_INITIAL_BAUDRATE B115200 diff --git a/src/shared/dlt_common.c b/src/shared/dlt_common.c index a77459d..9f8d60e 100644 --- a/src/shared/dlt_common.c +++ b/src/shared/dlt_common.c @@ -3948,7 +3948,7 @@ int16_t dlt_getloginfo_conv_ascii_to_uint16_t(char *rp, int *rp_count) if ((rp == NULL) || (rp_count == NULL)) { - return DLT_RETURN_ERROR; + return -1; } /* ------------------------------------------------------ from: [89 13 ] -> to: ['+0x'1389\0] -> to num @@ -3970,7 +3970,7 @@ int16_t dlt_getloginfo_conv_ascii_to_int16_t(char *rp, int *rp_count) if ((rp == NULL) || (rp_count == NULL)) { - return DLT_RETURN_ERROR; + return -1; } /* ------------------------------------------------------ from: [89 ] -> to: ['0x'89\0] -> to num diff --git a/tests/dlt_test_receiver.c b/tests/dlt_test_receiver.c index 9b93728..86147ec 100644 --- a/tests/dlt_test_receiver.c +++ b/tests/dlt_test_receiver.c @@ -326,7 +326,7 @@ int main(int argc, char* argv[]) int dlt_receive_filetransfer_callback(DltMessage *message, void *data) { DltReceiveData *dltdata; - static char text[DLT_RECEIVE_TEXTBUFSIZE]; + static char text[DLT_RECEIVE_BUFSIZE]; char filename[255]; struct iovec iov[2]; int bytes_written; @@ -340,7 +340,7 @@ int dlt_receive_filetransfer_callback(DltMessage *message, void *data) if(dltdata->filetransfervalue) { - dlt_message_print_ascii(message, text, DLT_RECEIVE_TEXTBUFSIZE, dltdata->vflag); + dlt_message_print_ascii(message, text, DLT_RECEIVE_BUFSIZE, dltdata->vflag); // 1st find starting point of tranfering data packages if( strncmp(text, "FLST", 4) == 0) @@ -373,11 +373,11 @@ int dlt_receive_filetransfer_callback(DltMessage *message, void *data) { // truncate beginning of data stream ( FLDA, File identifier and package number) char *position = strchr(text, 32); // search for space - strncpy(text, position+1, DLT_RECEIVE_TEXTBUFSIZE); + strncpy(text, position+1, DLT_RECEIVE_BUFSIZE); position = strchr(text, 32); - strncpy(text, position+1, DLT_RECEIVE_TEXTBUFSIZE); + strncpy(text, position+1, DLT_RECEIVE_BUFSIZE); position = strchr(text, 32); - strncpy(text, position+1, DLT_RECEIVE_TEXTBUFSIZE); + strncpy(text, position+1, DLT_RECEIVE_BUFSIZE); // truncate ending of data stream ( FLDA ) int len = strlen(text); @@ -398,7 +398,7 @@ int dlt_receive_filetransfer_callback(DltMessage *message, void *data) if(dltdata->systemjournalvalue) { - dlt_message_print_ascii(message, text, DLT_RECEIVE_TEXTBUFSIZE, dltdata->vflag); + dlt_message_print_ascii(message, text, DLT_RECEIVE_BUFSIZE, dltdata->vflag); // 1st find the relevant packages char * tmp = message->extendedheader->ctid; tmp[4] = '\0'; @@ -415,7 +415,7 @@ int dlt_receive_filetransfer_callback(DltMessage *message, void *data) if(dltdata->systemloggervalue) { - dlt_message_print_ascii(message, text, DLT_RECEIVE_TEXTBUFSIZE, dltdata->vflag); + dlt_message_print_ascii(message, text, DLT_RECEIVE_BUFSIZE, dltdata->vflag); // 1st find the relevant packages char * tmp = message->extendedheader->ctid; tmp[4] = '\0'; -- cgit v1.2.1