LCOV - code coverage report
Current view: top level - src/plugins/dbus - sendmessage.c (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 0 31 0.0 %
Date: 2019-09-12 12:28:41 Functions: 0 2 0.0 %

          Line data    Source code
       1             : /**
       2             :  * @file
       3             :  *
       4             :  * @brief Source for dbus plugin
       5             :  *
       6             :  * @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
       7             :  *
       8             :  */
       9             : 
      10             : #include "dbus.h"
      11             : 
      12             : #ifndef HAVE_KDBCONFIG
      13             : #include "kdbconfig.h"
      14             : #endif
      15             : 
      16             : #include <kdblogger.h>
      17             : 
      18             : /**
      19             :  * @internal
      20             :  * Get and setup D-Bus connection.
      21             :  *
      22             :  * @param  type          D-Bus bus type
      23             :  * @param  ioBinding     I/O binding (optional)
      24             :  * @param  handlePointer Pointer to D-Bus I/O adapter handle
      25             :  * @return D-Bus connection or NULL on error
      26             :  */
      27           0 : static DBusConnection * dbusGetConnection (DBusBusType type)
      28             : {
      29             :         DBusError error;
      30           0 :         dbus_error_init (&error);
      31             : 
      32           0 :         DBusConnection * connection = dbus_bus_get (type, &error);
      33           0 :         if (connection == NULL)
      34             :         {
      35             :                 ELEKTRA_LOG_WARNING ("Failed to open connection to %s message bus: %s", (type == DBUS_BUS_SYSTEM) ? "system" : "session",
      36             :                                      error.message);
      37           0 :                 dbus_error_free (&error);
      38           0 :                 return NULL;
      39             :         }
      40           0 :         dbus_error_free (&error);
      41             : 
      42           0 :         dbus_connection_set_exit_on_disconnect (connection, FALSE);
      43             : 
      44           0 :         return connection;
      45             : }
      46             : 
      47             : /**
      48             :  * @internal
      49             :  * Send Elektra's signal message over D-Bus.
      50             :  *
      51             :  * @param  pluginData Plugin data, stores D-Bus connection, I/O binding and more
      52             :  * @param  type       D-Bus bus type
      53             :  * @param  keyName    Key name to include in message
      54             :  * @param  signalName Signal name
      55             :  * @retval 1 on success
      56             :  * @retval -1 on error
      57             :  */
      58           0 : int elektraDbusSendMessage (ElektraDbusPluginData * pluginData, DBusBusType type, const char * keyName, const char * signalName)
      59             : {
      60             :         DBusConnection * connection;
      61             :         DBusMessage * message;
      62           0 :         const char * dest = NULL; // to all receivers
      63           0 :         const char * interface = "org.libelektra";
      64           0 :         const char * path = "/org/libelektra/configuration";
      65             : 
      66           0 :         switch (type)
      67             :         {
      68             :         case DBUS_BUS_SYSTEM:
      69           0 :                 if (!pluginData->systemBus)
      70             :                 {
      71           0 :                         pluginData->systemBus = dbusGetConnection (type);
      72             :                 }
      73           0 :                 connection = pluginData->systemBus;
      74           0 :                 break;
      75             :         case DBUS_BUS_SESSION:
      76           0 :                 if (!pluginData->sessionBus)
      77             :                 {
      78           0 :                         pluginData->sessionBus = dbusGetConnection (type);
      79             :                 }
      80           0 :                 connection = pluginData->sessionBus;
      81           0 :                 break;
      82             :         default:
      83             :                 connection = NULL;
      84             :         }
      85           0 :         if (connection == NULL)
      86             :         {
      87             :                 return -1;
      88             :         }
      89             : 
      90           0 :         message = dbus_message_new_signal (path, interface, signalName);
      91             : 
      92           0 :         if (message == NULL)
      93             :         {
      94             :                 ELEKTRA_LOG_WARNING ("Couldn't allocate D-Bus message");
      95             :                 return -1;
      96             :         }
      97             : 
      98             :         if (dest && !dbus_message_set_destination (message, dest))
      99             :         {
     100             :                 ELEKTRA_LOG_WARNING ("Not enough memory");
     101             :                 dbus_message_unref (message);
     102             :                 return -1;
     103             :         }
     104             : 
     105           0 :         if (!dbus_message_append_args (message, DBUS_TYPE_STRING, &keyName, DBUS_TYPE_INVALID))
     106             :         {
     107             :                 ELEKTRA_LOG_WARNING ("Couldn't add message argument");
     108           0 :                 dbus_message_unref (message);
     109           0 :                 return -1;
     110             :         }
     111             : 
     112           0 :         dbus_connection_send (connection, message, NULL);
     113             : 
     114           0 :         dbus_message_unref (message);
     115             : 
     116           0 :         return 1;
     117             : }

Generated by: LCOV version 1.13