summaryrefslogtreecommitdiff
path: root/src/dbus/dlt-dbus-options.c
diff options
context:
space:
mode:
authorAlexander Wenzel <Alexander.AW.Wenzel@bmw.de>2014-06-10 17:43:09 +0200
committerAlexander Wenzel <Alexander.AW.Wenzel@bmw.de>2014-06-11 14:17:00 +0200
commiteccb685c7402702b778810a4e82469a8419c06ae (patch)
tree7165c0f00862adb225e40e5c7e1b7c05b3c37c5a /src/dbus/dlt-dbus-options.c
parentc50f0797f5619f786ff14446ae657b65f9c3866d (diff)
downloadDLT-daemon-eccb685c7402702b778810a4e82469a8419c06ae.tar.gz
Added configuration of dbus filter.
Signed-off-by: Alexander Wenzel <Alexander.AW.Wenzel@bmw.de>
Diffstat (limited to 'src/dbus/dlt-dbus-options.c')
-rw-r--r--src/dbus/dlt-dbus-options.c243
1 files changed, 243 insertions, 0 deletions
diff --git a/src/dbus/dlt-dbus-options.c b/src/dbus/dlt-dbus-options.c
new file mode 100644
index 0000000..f1c72dd
--- /dev/null
+++ b/src/dbus/dlt-dbus-options.c
@@ -0,0 +1,243 @@
+/**
+ * @licence app begin@
+ * Copyright (C) 2014 BMW AG
+ *
+ * This file is part of GENIVI Project Dlt - Diagnostic Log and Trace console apps.
+ *
+ * Contributions are licensed to the GENIVI Alliance under one or more
+ * Contribution License Agreements.
+ *
+ * \copyright
+ * This Source Code Form is subject to the terms of the
+ * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ * this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * \author Alexander Wenzel <alexander.wenzel@bmw.de>
+ *
+ * \file dlt-dbus-options.c
+ * For further information see http://www.genivi.org/.
+ * @licence end@
+ */
+
+#include "dlt-dbus.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+/**
+ * Print information how to use this program.
+ */
+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");
+}
+
+/**
+ * Initialize command line options with default values.
+ */
+void init_cli_options(DltDBusCliOptions *options)
+{
+ options->ConfigurationFileName = DEFAULT_CONF_FILE;
+ options->ApplicationId = 0;
+ options->BusType = 0;
+ options->Daemonize = 0;
+}
+
+/**
+ * Read command line options and set the values in provided structure
+ */
+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);
+ return -1;//for parasoft
+ }
+ default:
+ {
+ fprintf(stderr, "Unknown option '%c'\n", optopt);
+ usage(argv[0]);
+ return -1;
+ }
+ }
+ }
+ return 0;
+}
+
+/**
+ * Initialize configuration to default values.
+ */
+void init_configuration(DltDBusConfiguration *config)
+{
+ // Common
+ config->ApplicationId = "IPC0";
+
+ // DBus
+ config->DBus.ContextId = "ALL";
+ config->DBus.BusType = 0;
+ config->DBus.FilterCount = 0;
+
+}
+
+/**
+ * Read options from the configuration file
+ */
+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;
+}