diff options
Diffstat (limited to 'src/dbus/dlt-dbus.c')
-rw-r--r-- | src/dbus/dlt-dbus.c | 176 |
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); } |