summaryrefslogtreecommitdiff
path: root/src/dbus/dlt-dbus.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.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.c')
-rw-r--r--src/dbus/dlt-dbus.c176
1 files changed, 92 insertions, 84 deletions
diff --git a/src/dbus/dlt-dbus.c b/src/dbus/dlt-dbus.c
index 53eb94c..5cbba85 100644
--- a/src/dbus/dlt-dbus.c
+++ b/src/dbus/dlt-dbus.c
@@ -12,7 +12,6 @@
* 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.c
@@ -37,41 +36,20 @@
#define EAVESDROPPING_RULE ""
#endif
+DLT_DECLARE_CONTEXT(dbusLog);
DLT_DECLARE_CONTEXT(dbusContext);
static char dbus_message_buffer[DBUS_MAXIMUM_MESSAGE_LENGTH];
-static const char*
-type_to_name (int message_type)
-{
- switch (message_type)
- {
- case DBUS_MESSAGE_TYPE_SIGNAL:
- return "signal";
- case DBUS_MESSAGE_TYPE_METHOD_CALL:
- return "method call";
- case DBUS_MESSAGE_TYPE_METHOD_RETURN:
- return "method return";
- case DBUS_MESSAGE_TYPE_ERROR:
- return "error";
- default:
- return "(unknown message type)";
- }
-}
-
static DBusHandlerResult
filter_func (DBusConnection *con,
DBusMessage *message,
void *data)
{
- DBusMessageIter iter;
- const char *sender;
- const char *destination;
char **buf;
- int message_type;
- char *log_message;
- int log_type;
int len_p;
+ UNUSED(con);
+ UNUSED(data);
buf = (char**)&dbus_message_buffer;
if (!dbus_message_marshal(message,
@@ -81,7 +59,7 @@ filter_func (DBusConnection *con,
fprintf (stderr, "Failed to serialize DBus message!\n");
return DBUS_HANDLER_RESULT_HANDLED;
}
- //DLT_LOG (dbusContext, DLT_LOG_INFO, DLT_STRING("dbus message"), DLT_RAW ((void *)*buf, len_p));
+
DLT_TRACE_NETWORK_SEGMENTED(dbusContext,DLT_NW_TRACE_IPC,0,0,len_p,(void *)*buf);
if (dbus_message_is_signal (message,
@@ -103,66 +81,96 @@ filter_func (DBusConnection *con,
int main (int argc, char *argv[])
{
- /* DLT initialisation */
- DLT_REGISTER_APP ("IPC0", "DBus Logging");
- DLT_REGISTER_CONTEXT(dbusContext, "ALL", "DBus Context for Logging");
-
- DBusConnection *connection;
- DBusError error;
- DBusBusType type = DBUS_BUS_SESSION;
- //DBusBusType type = DBUS_BUS_SYSTEM;
-
- dbus_error_init (&error);
-
- connection = dbus_bus_get (type, &error);
- if (NULL == connection)
- {
- fprintf (stderr, "Failed to open connection to %s: %s\n",
- DBUS_BUS_SYSTEM,
- error.message);
- dbus_error_free (&error);
- exit (1);
- }
-
- dbus_bus_add_match (connection,
- EAVESDROPPING_RULE "type='signal'",
- &error);
- if (dbus_error_is_set (&error))
- goto fail;
- dbus_bus_add_match (connection,
- EAVESDROPPING_RULE "type='method_call'",
- &error);
- if (dbus_error_is_set (&error))
- goto fail;
- dbus_bus_add_match (connection,
- EAVESDROPPING_RULE "type='method_return'",
- &error);
- if (dbus_error_is_set (&error))
- goto fail;
- dbus_bus_add_match (connection,
- EAVESDROPPING_RULE "type='error'",
- &error);
- 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_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(dbusContext, config.DBus.ContextId, "DBus Context for Logging");
+ 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_APP ();
- exit(1);
+ /* fail */
+ fprintf (stderr, "Error: %s\n", error.message);
+ DLT_UNREGISTER_CONTEXT (dbusContext);
+ DLT_UNREGISTER_CONTEXT (dbusLog);
+ DLT_UNREGISTER_APP ();
+ exit(1);
}