diff options
author | Lutz Helwing <lutz_helwing@mentor.com> | 2015-07-15 14:14:19 +0200 |
---|---|---|
committer | Alexander Wenzel <Alexander.AW.Wenzel@bmw.de> | 2015-10-07 10:40:33 +0200 |
commit | 1236195e9b93aeb6bfa625956fa027f96003756d (patch) | |
tree | 07b08c892a486f9f97c1674e0d253099eb3388f3 /src/dbus | |
parent | 033a69218af3490f6be409f66f350c1568655f61 (diff) | |
download | DLT-daemon-1236195e9b93aeb6bfa625956fa027f96003756d.tar.gz |
DLT daemon improvement - dlt_init()-check
DLT daemon improvement - parameter value range check
Adapt unit tests to check for enum return values
Changed C version to gnu99 and C++ version to gnu++0c
Signed-off-by: Alexander Wenzel <Alexander.AW.Wenzel@bmw.de>
Diffstat (limited to 'src/dbus')
-rw-r--r-- | src/dbus/dlt-dbus-options.c | 360 | ||||
-rw-r--r-- | src/dbus/dlt-dbus.c | 176 | ||||
-rw-r--r-- | src/dbus/dlt-dbus.h | 24 |
3 files changed, 280 insertions, 280 deletions
diff --git a/src/dbus/dlt-dbus-options.c b/src/dbus/dlt-dbus-options.c index 3c75c62..27bf4f4 100644 --- a/src/dbus/dlt-dbus-options.c +++ b/src/dbus/dlt-dbus-options.c @@ -36,20 +36,20 @@ */ void usage(char *prog_name) { - char version[255]; - dlt_get_version(version,255); - - printf("Usage: %s [options]\n", prog_name); - printf("Application to forward dbus messages to DLT.\n"); - printf("%s\n", version); - printf("Options:\n"); - printf(" -d Daemonize. Detach from terminal and run in background.\n"); - printf(" -c filename Use configuration file. \n"); - printf(" -a appid Used application id. \n"); - printf(" Default: %s\n", DEFAULT_CONF_FILE); - printf(" -b type Used bus type. \n"); - printf(" Session = 0, System = 1.\n"); - printf(" -h This help message.\n"); + char version[255]; + dlt_get_version(version,255); + + printf("Usage: %s [options]\n", prog_name); + printf("Application to forward dbus messages to DLT.\n"); + printf("%s\n", version); + printf("Options:\n"); + printf(" -d Daemonize. Detach from terminal and run in background.\n"); + printf(" -c filename Use configuration file. \n"); + printf(" -a appid Used application id. \n"); + printf(" Default: %s\n", DEFAULT_CONF_FILE); + printf(" -b type Used bus type. \n"); + printf(" Session = 0, System = 1.\n"); + printf(" -h This help message.\n"); } /** @@ -57,10 +57,10 @@ void usage(char *prog_name) */ void init_cli_options(DltDBusCliOptions *options) { - options->ConfigurationFileName = DEFAULT_CONF_FILE; - options->ApplicationId = 0; - options->BusType = 0; - options->Daemonize = 0; + options->ConfigurationFileName = DEFAULT_CONF_FILE; + options->ApplicationId = 0; + options->BusType = 0; + options->Daemonize = 0; } /** @@ -68,53 +68,53 @@ void init_cli_options(DltDBusCliOptions *options) */ int read_command_line(DltDBusCliOptions *options, int argc, char *argv[]) { - init_cli_options(options); - int opt; - - while((opt = getopt(argc, argv, "c:b:a:hd")) != -1) - { - switch(opt) { - case 'd': - { - options->Daemonize = 1; - break; - } - case 'b': - { - options->BusType = malloc(strlen(optarg)+1); - MALLOC_ASSERT(options->BusType); - strcpy(options->BusType, optarg); /* strcpy unritical here, because size matches exactly the size to be copied */ - break; - } - case 'a': - { - options->ApplicationId = malloc(strlen(optarg)+1); - MALLOC_ASSERT(options->ApplicationId); - strcpy(options->ApplicationId, optarg); /* strcpy unritical here, because size matches exactly the size to be copied */ - break; - } - case 'c': - { - options->ConfigurationFileName = malloc(strlen(optarg)+1); - MALLOC_ASSERT(options->ConfigurationFileName); - strcpy(options->ConfigurationFileName, optarg); /* strcpy unritical here, because size matches exactly the size to be copied */ - break; - } - case 'h': - { - usage(argv[0]); - exit(0); + init_cli_options(options); + int opt; + + while((opt = getopt(argc, argv, "c:b:a:hd")) != -1) + { + switch(opt) { + case 'd': + { + options->Daemonize = 1; + break; + } + case 'b': + { + options->BusType = malloc(strlen(optarg)+1); + MALLOC_ASSERT(options->BusType); + strcpy(options->BusType, optarg); /* strcpy unritical here, because size matches exactly the size to be copied */ + break; + } + case 'a': + { + options->ApplicationId = malloc(strlen(optarg)+1); + MALLOC_ASSERT(options->ApplicationId); + strcpy(options->ApplicationId, optarg); /* strcpy unritical here, because size matches exactly the size to be copied */ + break; + } + case 'c': + { + options->ConfigurationFileName = malloc(strlen(optarg)+1); + MALLOC_ASSERT(options->ConfigurationFileName); + strcpy(options->ConfigurationFileName, optarg); /* strcpy unritical here, because size matches exactly the size to be copied */ + break; + } + case 'h': + { + usage(argv[0]); + exit(0); return -1;//for parasoft - } - default: - { - fprintf(stderr, "Unknown option '%c'\n", optopt); - usage(argv[0]); - return -1; - } - } - } - return 0; + } + default: + { + fprintf(stderr, "Unknown option '%c'\n", optopt); + usage(argv[0]); + return -1; + } + } + } + return 0; } /** @@ -122,13 +122,13 @@ int read_command_line(DltDBusCliOptions *options, int argc, char *argv[]) */ void init_configuration(DltDBusConfiguration *config) { - // Common - config->ApplicationId = "IPC0"; + // Common + config->ApplicationId = "IPC0"; - // DBus - config->DBus.ContextId = "ALL"; - config->DBus.BusType = 0; - config->DBus.FilterCount = 0; + // DBus + config->DBus.ContextId = "ALL"; + config->DBus.BusType = 0; + config->DBus.FilterCount = 0; } @@ -137,114 +137,114 @@ void init_configuration(DltDBusConfiguration *config) */ int read_configuration_file(DltDBusConfiguration *config, char *file_name) { - FILE *file; - char *line, *token, *value, *filter, *pch; - int ret = 0; - char *filterBegin,*filterEnd; - - init_configuration(config); - - file = fopen(file_name, "r"); - - if(file == NULL) - { - fprintf(stderr, "dlt-dbus-options, could not open configuration file.\n"); - return -1; - } - - line = malloc(MAX_LINE); - token = malloc(MAX_LINE); - value = malloc(MAX_LINE); - filter = malloc(MAX_LINE); - - MALLOC_ASSERT(line); - MALLOC_ASSERT(token); - MALLOC_ASSERT(value); - MALLOC_ASSERT(filter); - - while(fgets(line, MAX_LINE, file) != NULL) - { - token[0] = 0; - value[0] = 0; - filter[0] = 0; - - filterBegin = strchr(line,'='); - filterEnd = strpbrk (line,"\r\n"); - - if(filterBegin) - { - if(filterEnd && (filterEnd>filterBegin)) - { - strncpy(filter,filterBegin+1,filterEnd-filterBegin-1); - filter[filterEnd-filterBegin-1]=0; - } - else - { - strcpy(filter,filterBegin+1); - } - } - - pch = strtok (line, " =\r\n"); - while(pch != NULL) - { - if(pch[0] == '#') - break; - - if(token[0] == 0) - { - strncpy(token, pch, MAX_LINE-1); - token[MAX_LINE-1]=0; - } - else - { - strncpy(value, pch, MAX_LINE); - value[MAX_LINE-1]=0; - break; - } - - pch = strtok (NULL, " =\r\n"); - } - - if(token[0] && value[0]) - { - // Common - if(strcmp(token, "ApplicationId") == 0) - { - config->ApplicationId = malloc(strlen(value)+1); - MALLOC_ASSERT(config->ApplicationId); - strcpy(config->ApplicationId, value); /* strcpy unritical here, because size matches exactly the size to be copied */ - } - // ContextId - else if(strcmp(token, "ContextId") == 0) - { - config->DBus.ContextId = malloc(strlen(value)+1); - MALLOC_ASSERT(config->DBus.ContextId); - strcpy(config->DBus.ContextId, value); /* strcpy unritical here, because size matches exactly the size to be copied */ - } - // BusType - else if(strcmp(token, "BusType") == 0) - { - config->DBus.BusType = malloc(strlen(value)+1); - MALLOC_ASSERT(config->DBus.BusType); - strcpy(config->DBus.BusType, value); /* strcpy unritical here, because size matches exactly the size to be copied */ - } - // BusType - else if(strcmp(token, "FilterMatch") == 0) - { - if(config->DBus.FilterCount<DLT_DBUS_FILTER_MAX) - { - config->DBus.FilterMatch[config->DBus.FilterCount]= malloc(strlen(filter)+1); - MALLOC_ASSERT(config->DBus.FilterMatch[config->DBus.FilterCount]); - strcpy(config->DBus.FilterMatch[config->DBus.FilterCount], filter); - config->DBus.FilterCount++; - } - } - } - } - fclose(file); - free(value); - free(token); - free(filter); - free(line); - return ret; + FILE *file; + char *line, *token, *value, *filter, *pch; + int ret = 0; + char *filterBegin,*filterEnd; + + init_configuration(config); + + file = fopen(file_name, "r"); + + if(file == NULL) + { + fprintf(stderr, "dlt-dbus-options, could not open configuration file.\n"); + return -1; + } + + line = malloc(MAX_LINE); + token = malloc(MAX_LINE); + value = malloc(MAX_LINE); + filter = malloc(MAX_LINE); + + MALLOC_ASSERT(line); + MALLOC_ASSERT(token); + MALLOC_ASSERT(value); + MALLOC_ASSERT(filter); + + while(fgets(line, MAX_LINE, file) != NULL) + { + token[0] = 0; + value[0] = 0; + filter[0] = 0; + + filterBegin = strchr(line,'='); + filterEnd = strpbrk (line,"\r\n"); + + if(filterBegin) + { + if(filterEnd && (filterEnd>filterBegin)) + { + strncpy(filter,filterBegin+1,filterEnd-filterBegin-1); + filter[filterEnd-filterBegin-1]=0; + } + else + { + strcpy(filter,filterBegin+1); + } + } + + pch = strtok (line, " =\r\n"); + while(pch != NULL) + { + if(pch[0] == '#') + break; + + if(token[0] == 0) + { + strncpy(token, pch, MAX_LINE-1); + token[MAX_LINE-1]=0; + } + else + { + strncpy(value, pch, MAX_LINE); + value[MAX_LINE-1]=0; + break; + } + + pch = strtok (NULL, " =\r\n"); + } + + if(token[0] && value[0]) + { + // Common + if(strcmp(token, "ApplicationId") == 0) + { + config->ApplicationId = malloc(strlen(value)+1); + MALLOC_ASSERT(config->ApplicationId); + strcpy(config->ApplicationId, value); /* strcpy unritical here, because size matches exactly the size to be copied */ + } + // ContextId + else if(strcmp(token, "ContextId") == 0) + { + config->DBus.ContextId = malloc(strlen(value)+1); + MALLOC_ASSERT(config->DBus.ContextId); + strcpy(config->DBus.ContextId, value); /* strcpy unritical here, because size matches exactly the size to be copied */ + } + // BusType + else if(strcmp(token, "BusType") == 0) + { + config->DBus.BusType = malloc(strlen(value)+1); + MALLOC_ASSERT(config->DBus.BusType); + strcpy(config->DBus.BusType, value); /* strcpy unritical here, because size matches exactly the size to be copied */ + } + // BusType + else if(strcmp(token, "FilterMatch") == 0) + { + if(config->DBus.FilterCount<DLT_DBUS_FILTER_MAX) + { + config->DBus.FilterMatch[config->DBus.FilterCount]= malloc(strlen(filter)+1); + MALLOC_ASSERT(config->DBus.FilterMatch[config->DBus.FilterCount]); + strcpy(config->DBus.FilterMatch[config->DBus.FilterCount], filter); + config->DBus.FilterCount++; + } + } + } + } + fclose(file); + free(value); + free(token); + free(filter); + free(line); + return ret; } diff --git a/src/dbus/dlt-dbus.c b/src/dbus/dlt-dbus.c index 2b99a4e..f85252f 100644 --- a/src/dbus/dlt-dbus.c +++ b/src/dbus/dlt-dbus.c @@ -80,96 +80,96 @@ filter_func (DBusConnection *con, int main (int argc, char *argv[]) { - DltDBusCliOptions options; - DltDBusConfiguration config; - - DBusConnection *connection; - DBusError error; - DBusBusType type; - - int num; - - if(read_command_line(&options, argc, argv) < 0) - { - fprintf(stderr, "Failed to read command line!\n"); - return -1; - } - - if(read_configuration_file(&config, options.ConfigurationFileName) < 0) - { - fprintf(stderr, "Failed to read configuration file!\n"); - return -1; - } - - // register application - if(options.ApplicationId) - DLT_REGISTER_APP (options.ApplicationId, "DBus Logging"); - else - DLT_REGISTER_APP (config.ApplicationId, "DBus Logging"); - - // register context - DLT_REGISTER_CONTEXT_LL_TS(dbusContext, config.DBus.ContextId, "DBus Context for Logging",DLT_LOG_INFO,DLT_TRACE_STATUS_ON); - DLT_REGISTER_CONTEXT(dbusLog, "Log", "DBus Context for Logging Generic information"); - - // initialise error handler - dbus_error_init (&error); - - // set DBus bus type - if(options.BusType) - type = (DBusBusType) atoi(options.BusType); - else - type = (DBusBusType) atoi(config.DBus.BusType); - - // get connection - connection = dbus_bus_get (type, &error); - - if(type==0) - DLT_LOG(dbusLog,DLT_LOG_INFO,DLT_STRING("BusType"),DLT_STRING("Session Bus")); - else if(type==1) - DLT_LOG(dbusLog,DLT_LOG_INFO,DLT_STRING("BusType"),DLT_STRING("System Bus")); - else - DLT_LOG(dbusLog,DLT_LOG_INFO,DLT_STRING("BusType"),DLT_INT(type)); - - if (NULL == connection) - { - fprintf (stderr, "Failed to open connection to %d: %s\n", - DBUS_BUS_SYSTEM, - error.message); - dbus_error_free (&error); - exit (1); - } - - for(num=0;num<config.DBus.FilterCount;num++) - { - dbus_bus_add_match (connection, - config.DBus.FilterMatch[num], - &error); - printf("Added FilterMatch: %s\n",config.DBus.FilterMatch[num]); - DLT_LOG(dbusLog,DLT_LOG_INFO,DLT_STRING("FilterMatch"),DLT_UINT(num+1),DLT_STRING(config.DBus.FilterMatch[num])); - if (dbus_error_is_set (&error)) - goto fail; - } - - if (!dbus_connection_add_filter (connection, filter_func, NULL, NULL)) { - fprintf (stderr, "Couldn't add filter!\n"); - exit (1); - } - - while (dbus_connection_read_write_dispatch(connection, -1)) - ; - - DLT_UNREGISTER_CONTEXT (dbusContext); - DLT_UNREGISTER_CONTEXT (dbusLog); - DLT_UNREGISTER_APP (); - exit(1); + DltDBusCliOptions options; + DltDBusConfiguration config; + + DBusConnection *connection; + DBusError error; + DBusBusType type; + + int num; + + if(read_command_line(&options, argc, argv) < 0) + { + fprintf(stderr, "Failed to read command line!\n"); + return -1; + } + + if(read_configuration_file(&config, options.ConfigurationFileName) < 0) + { + fprintf(stderr, "Failed to read configuration file!\n"); + return -1; + } + + // register application + if(options.ApplicationId) + DLT_REGISTER_APP (options.ApplicationId, "DBus Logging"); + else + DLT_REGISTER_APP (config.ApplicationId, "DBus Logging"); + + // register context + DLT_REGISTER_CONTEXT_LL_TS(dbusContext, config.DBus.ContextId, "DBus Context for Logging",DLT_LOG_INFO,DLT_TRACE_STATUS_ON); + DLT_REGISTER_CONTEXT(dbusLog, "Log", "DBus Context for Logging Generic information"); + + // initialise error handler + dbus_error_init (&error); + + // set DBus bus type + if(options.BusType) + type = (DBusBusType) atoi(options.BusType); + else + type = (DBusBusType) atoi(config.DBus.BusType); + + // get connection + connection = dbus_bus_get (type, &error); + + if(type==0) + DLT_LOG(dbusLog,DLT_LOG_INFO,DLT_STRING("BusType"),DLT_STRING("Session Bus")); + else if(type==1) + DLT_LOG(dbusLog,DLT_LOG_INFO,DLT_STRING("BusType"),DLT_STRING("System Bus")); + else + DLT_LOG(dbusLog,DLT_LOG_INFO,DLT_STRING("BusType"),DLT_INT(type)); + + if (NULL == connection) + { + fprintf (stderr, "Failed to open connection to %d: %s\n", + DBUS_BUS_SYSTEM, + error.message); + dbus_error_free (&error); + exit (1); + } + + for(num=0;num<config.DBus.FilterCount;num++) + { + dbus_bus_add_match (connection, + config.DBus.FilterMatch[num], + &error); + printf("Added FilterMatch: %s\n",config.DBus.FilterMatch[num]); + DLT_LOG(dbusLog,DLT_LOG_INFO,DLT_STRING("FilterMatch"),DLT_UINT(num+1),DLT_STRING(config.DBus.FilterMatch[num])); + if (dbus_error_is_set (&error)) + goto fail; + } + + if (!dbus_connection_add_filter (connection, filter_func, NULL, NULL)) { + fprintf (stderr, "Couldn't add filter!\n"); + exit (1); + } + + while (dbus_connection_read_write_dispatch(connection, -1)) + ; + + DLT_UNREGISTER_CONTEXT (dbusContext); + DLT_UNREGISTER_CONTEXT (dbusLog); + DLT_UNREGISTER_APP (); + exit(1); fail: - /* fail */ - fprintf (stderr, "Error: %s\n", error.message); - DLT_UNREGISTER_CONTEXT (dbusContext); - DLT_UNREGISTER_CONTEXT (dbusLog); - DLT_UNREGISTER_APP (); - exit(1); + /* fail */ + fprintf (stderr, "Error: %s\n", error.message); + DLT_UNREGISTER_CONTEXT (dbusContext); + DLT_UNREGISTER_CONTEXT (dbusLog); + DLT_UNREGISTER_APP (); + exit(1); } diff --git a/src/dbus/dlt-dbus.h b/src/dbus/dlt-dbus.h index 13ace05..50a26e8 100644 --- a/src/dbus/dlt-dbus.h +++ b/src/dbus/dlt-dbus.h @@ -38,30 +38,30 @@ // Macros #define UNUSED(x) (void)(x) #define MALLOC_ASSERT(x) if(x == NULL) {\ - fprintf(stderr, "Out of memory\n");\ - abort();} + fprintf(stderr, "Out of memory\n");\ + abort();} #define MAX_LINE 1024 // Command line options typedef struct { - char *ConfigurationFileName; - char *ApplicationId; - char *BusType; - int Daemonize; + char *ConfigurationFileName; + char *ApplicationId; + char *BusType; + int Daemonize; } DltDBusCliOptions; // Configuration dbus options typedef struct { - char *ContextId; - char *BusType; - int FilterCount; - char *FilterMatch[DLT_DBUS_FILTER_MAX]; + char *ContextId; + char *BusType; + int FilterCount; + char *FilterMatch[DLT_DBUS_FILTER_MAX]; } DBusOptions; typedef struct { - char *ApplicationId; - DBusOptions DBus; + char *ApplicationId; + DBusOptions DBus; } DltDBusConfiguration; |