Merge "Optional autogen.sh flag --enable-kdbus-transport added allowing to compile...
[platform/upstream/dbus.git] / bus / driver.c
index 7861a52..af85eb0 100644 (file)
@@ -3,6 +3,7 @@
  *
  * Copyright (C) 2003 CodeFactory AB
  * Copyright (C) 2003, 2004, 2005 Red Hat, Inc.
+ * Copyright (C) 2013  Samsung Electronics
  *
  * Licensed under the Academic Free License version 2.1
  *
 #include <dbus/dbus-marshal-recursive.h>
 #include <string.h>
 
+#ifdef ENABLE_KDBUS_TRANSPORT
 #include "kdbus-d.h"
 #include <stdio.h>
 #include <errno.h>
 #include <limits.h>
+#endif
 
 static DBusConnection *
 bus_driver_get_conn_helper (DBusConnection  *connection,
@@ -103,8 +106,10 @@ bus_driver_send_service_owner_changed (const char     *service_name,
   dbus_bool_t retval;
   const char *null_service;
 
-  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))  //todo kdbus incl
+#ifdef ENABLE_KDBUS_TRANSPORT
+  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))
          return TRUE;
+#endif
 
   _DBUS_ASSERT_ERROR_IS_CLEAR (error);
 
@@ -155,8 +160,10 @@ bus_driver_send_service_lost (DBusConnection *connection,
 {
   DBusMessage *message;
 
-  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))  //todo kdbus incl
+#ifdef ENABLE_KDBUS_TRANSPORT
+  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))
          return TRUE;
+#endif
 
   _DBUS_ASSERT_ERROR_IS_CLEAR (error);
 
@@ -201,8 +208,10 @@ bus_driver_send_service_acquired (DBusConnection *connection,
 {
   DBusMessage *message;
 
-  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))  //todo kdbus incl
+#ifdef ENABLE_KDBUS_TRANSPORT
+  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))
          return TRUE;
+#endif
 
   _DBUS_ASSERT_ERROR_IS_CLEAR (error);
 
@@ -451,8 +460,8 @@ bus_driver_handle_list_services (DBusConnection *connection,
       return FALSE;
     }
 
-
-  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))  //todo kdbus incl
+#ifdef ENABLE_KDBUS_TRANSPORT
+  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))
   {
          if(!kdbus_list_services (connection, &services, &len))
            {
@@ -462,12 +471,16 @@ bus_driver_handle_list_services (DBusConnection *connection,
            }
   }
   else
-  if (!bus_registry_list_services (registry, &services, &len))
-    {
-      dbus_message_unref (reply);
-      BUS_SET_OOM (error);
-      return FALSE;
-    }
+#endif
+  {
+
+      if (!bus_registry_list_services (registry, &services, &len))
+        {
+          dbus_message_unref (reply);
+          BUS_SET_OOM (error);
+          return FALSE;
+        }
+  }
 
   dbus_message_iter_init_append (reply, &iter);
 
@@ -481,8 +494,11 @@ bus_driver_handle_list_services (DBusConnection *connection,
       return FALSE;
     }
 
-  if(!bus_context_is_kdbus(bus_transaction_get_context (transaction)))  //todo kdbus incl
+#ifdef ENABLE_KDBUS_TRANSPORT
+  if(!bus_context_is_kdbus(bus_transaction_get_context (transaction))) //not needed for kdbus, we got it from kdbus_list_services
+#endif
   {
+
     /* Include the bus driver in the list */
     const char *v_STRING = DBUS_SERVICE_DBUS;
     if (!dbus_message_iter_append_basic (&sub, DBUS_TYPE_STRING,
@@ -653,7 +669,8 @@ bus_driver_handle_acquire_service (DBusConnection *connection,
   retval = FALSE;
   reply = NULL;
 
-  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))  //todo kdbus incl
+#ifdef ENABLE_KDBUS_TRANSPORT
+  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))
   {
          if (!bus_registry_acquire_kdbus_service (registry, connection,
                                                                                 message,
@@ -662,7 +679,9 @@ bus_driver_handle_acquire_service (DBusConnection *connection,
            goto out;
   }
   else
+#endif
   {
+
          _dbus_string_init_const (&service_name, name);
 
          if (!bus_registry_acquire_service (registry, connection,
@@ -670,7 +689,6 @@ bus_driver_handle_acquire_service (DBusConnection *connection,
                                             &service_reply, transaction,
                                             error))
            goto out;
-
   }
 
   reply = dbus_message_new_method_return (message);
@@ -686,8 +704,6 @@ bus_driver_handle_acquire_service (DBusConnection *connection,
       goto out;
     }
 
- _dbus_verbose ("Reply sender: %s, destination: %s\n", dbus_message_get_sender(reply), dbus_message_get_destination(reply)); //todo kdbus incl
-
   if (!bus_transaction_send_from_driver (transaction, connection, reply))
     {
       BUS_SET_OOM (error);
@@ -717,8 +733,6 @@ bus_driver_handle_release_service (DBusConnection *connection,
 
   _DBUS_ASSERT_ERROR_IS_CLEAR (error);
 
-  registry = bus_connection_get_registry (connection);
-
   if (!dbus_message_get_args (message, error,
                               DBUS_TYPE_STRING, &name,
                               DBUS_TYPE_INVALID))
@@ -730,16 +744,18 @@ bus_driver_handle_release_service (DBusConnection *connection,
   reply = NULL;
 
   _dbus_string_init_const (&service_name, name);
+  registry = bus_connection_get_registry (connection);
 
-  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))  //todo kdbus incl
+#ifdef ENABLE_KDBUS_TRANSPORT
+  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))
   {
-         registry = (BusRegistry*) message;
-         /* looks like hack? Yes.
-          * But how to pass message to bus_registry_release_service in other way?
-          * In kdbus mode we don't need registry, though.
-          */
+         if (!bus_registry_release_service_kdbus (dbus_message_get_sender(message), connection,
+                                            &service_name, &service_reply,
+                                            transaction, error))
+             goto out;
   }
-
+  else
+#endif
   if (!bus_registry_release_service (registry, connection,
                                      &service_name, &service_reply,
                                      transaction, error))
@@ -803,7 +819,8 @@ bus_driver_handle_service_exists (DBusConnection *connection,
     }
   else
     {
-         if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))  //todo kdbus incl
+#ifdef ENABLE_KDBUS_TRANSPORT
+         if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))
          {
                  int inter_ret;
                  struct nameInfo info;
@@ -819,6 +836,7 @@ bus_driver_handle_service_exists (DBusConnection *connection,
                        }
          }
          else
+#endif
          {
              _dbus_string_init_const (&service_name, name);
              service = bus_registry_lookup (registry, &service_name);
@@ -1093,7 +1111,8 @@ bus_driver_handle_add_match (DBusConnection *connection,
   if (rule == NULL)
     goto failed;
 
-  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))  //todo kdbus incl
+#ifdef ENABLE_KDBUS_TRANSPORT
+  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))
   {
 
          if (!kdbus_add_match_rule (connection, message, text, error))
@@ -1104,7 +1123,9 @@ bus_driver_handle_add_match (DBusConnection *connection,
              goto failed;
   }
   else
+#endif
   {
+
          matchmaker = bus_connection_get_matchmaker (connection);
 
          if (!bus_matchmaker_add_rule (matchmaker, rule))
@@ -1162,11 +1183,13 @@ bus_driver_handle_remove_match (DBusConnection *connection,
   if (rule == NULL)
     goto failed;
 
-  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))  //todo kdbus incl
+#ifdef ENABLE_KDBUS_TRANSPORT
+  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))
   {
          if(!kdbus_remove_match(connection, message, error))
                  goto failed;
   }
+#endif
 
   /* Send the ack before we remove the rule, since the ack is undone
    * on transaction cancel, but rule removal isn't.
@@ -1175,7 +1198,9 @@ bus_driver_handle_remove_match (DBusConnection *connection,
                        message, error))
     goto failed;
 
-  if(!bus_context_is_kdbus(bus_transaction_get_context (transaction)))  //todo kdbus incl
+#ifdef ENABLE_KDBUS_TRANSPORT
+  if(!bus_context_is_kdbus(bus_transaction_get_context (transaction)))
+#endif
   {
          matchmaker = bus_connection_get_matchmaker (connection);
 
@@ -1206,7 +1231,6 @@ bus_driver_handle_get_service_owner (DBusConnection *connection,
   BusRegistry *registry;
   BusService *service;
   DBusMessage *reply;
-  char unique_name[(unsigned int)(snprintf((char*)base_name, 0, "%llu", ULLONG_MAX) + sizeof(":1."))];
 
   _DBUS_ASSERT_ERROR_IS_CLEAR (error);
 
@@ -1220,10 +1244,12 @@ bus_driver_handle_get_service_owner (DBusConnection *connection,
                               DBUS_TYPE_INVALID))
       goto failed;
 
-  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))  //todo kdbus incl
+#ifdef ENABLE_KDBUS_TRANSPORT
+  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))
   {
          int ret;
          struct nameInfo info;
+         char unique_name[(unsigned int)(snprintf((char*)base_name, 0, "%llu", ULLONG_MAX) + sizeof(":1."))];
 
          ret = kdbus_NameQuery(text, dbus_connection_get_transport(connection), &info);
                if(ret == 0) //unique id of the name
@@ -1247,7 +1273,8 @@ bus_driver_handle_get_service_owner (DBusConnection *connection,
                }
   }
   else
-  {
+#endif
+    {
          _dbus_string_init_const (&str, text);
          service = bus_registry_lookup (registry, &str);
          if (service == NULL &&
@@ -1430,12 +1457,14 @@ bus_driver_handle_get_connection_unix_user (DBusConnection *connection,
   if (reply == NULL)
     goto oom;
 
-  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))  //todo kdbus incl
+#ifdef ENABLE_KDBUS_TRANSPORT
+  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))
   {
          if(!kdbus_get_connection_unix_user(connection, message, &uid, error))
                  goto failed;
   }
   else
+#endif
   {
          conn = bus_driver_get_conn_helper (connection, message, "UID", &service,
                                      error);
@@ -1493,12 +1522,14 @@ bus_driver_handle_get_connection_unix_process_id (DBusConnection *connection,
   if (reply == NULL)
     goto oom;
 
-  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))  //todo kdbus incl
+#ifdef ENABLE_KDBUS_TRANSPORT
+  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))
   {
          if(!kdbus_get_connection_unix_process_id(connection, message, &pid, error))
                  goto failed;
   }
   else
+#endif
   {
          conn = bus_driver_get_conn_helper (connection, message, "PID", &service,
                                                                                 error);
@@ -1613,12 +1644,14 @@ bus_driver_handle_get_connection_selinux_security_context (DBusConnection *conne
   if (reply == NULL)
     goto oom;
 
-  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))  //todo kdbus incl
+#ifdef ENABLE_KDBUS_TRANSPORT
+  if(bus_context_is_kdbus(bus_transaction_get_context (transaction)))
   {
          if(!kdbus_get_connection_unix_selinux_security_context(connection, message, reply, error))
                  goto failed;
   }
   else
+#endif
   {
          conn = bus_driver_get_conn_helper (connection, message, "security context",
                                                                                 &service, error);
@@ -1675,8 +1708,10 @@ bus_driver_handle_get_connection_credentials (DBusConnection *connection,
   if (reply == NULL)
     goto oom;
 
-  if(!bus_context_is_kdbus(bus_transaction_get_context (transaction)))  //todo kdbus incl
+#ifdef ENABLE_KDBUS_TRANSPORT
+  if(!bus_context_is_kdbus(bus_transaction_get_context (transaction)))
   {
+#endif
          conn = bus_driver_get_conn_helper (connection, message, "credentials",
                                                                                 &service, error);
 
@@ -1700,6 +1735,7 @@ bus_driver_handle_get_connection_credentials (DBusConnection *connection,
                  if (!_dbus_asv_add_uint32 (&array_iter, "UnixUserID", ulong_val))
                        goto oom;
                }
+#ifdef ENABLE_KDBUS_TRANSPORT
   }
   else
   {
@@ -1719,6 +1755,7 @@ bus_driver_handle_get_connection_credentials (DBusConnection *connection,
          else
                  goto failed;
   }
+#endif
 
   if (!_dbus_asv_close (&reply_iter, &array_iter))
     goto oom;