Beispiel #1
0
static void
profile_print_with_attrs (const char *type, DBusMessage *message,
  struct timeval *t, ProfileAttributeFlags attrs)
{
  printf (PROFILE_TIMED_FORMAT, type, t->tv_sec, t->tv_usec);

  if (attrs & PROFILE_ATTRIBUTE_FLAG_SERIAL)
    printf ("\t%u", dbus_message_get_serial (message));

  if (attrs & PROFILE_ATTRIBUTE_FLAG_REPLY_SERIAL)
    printf ("\t%u", dbus_message_get_reply_serial (message));

  if (attrs & PROFILE_ATTRIBUTE_FLAG_SENDER)
    printf ("\t%s", TRAP_NULL_STRING (dbus_message_get_sender (message)));

  if (attrs & PROFILE_ATTRIBUTE_FLAG_DESTINATION)
    printf ("\t%s", TRAP_NULL_STRING (dbus_message_get_destination (message)));

  if (attrs & PROFILE_ATTRIBUTE_FLAG_PATH)
    printf ("\t%s", TRAP_NULL_STRING (dbus_message_get_path (message)));

  if (attrs & PROFILE_ATTRIBUTE_FLAG_INTERFACE)
    printf ("\t%s", TRAP_NULL_STRING (dbus_message_get_interface (message)));

  if (attrs & PROFILE_ATTRIBUTE_FLAG_MEMBER)
    printf ("\t%s", TRAP_NULL_STRING (dbus_message_get_member (message)));

  if (attrs & PROFILE_ATTRIBUTE_FLAG_ERROR_NAME)
    printf ("\t%s", TRAP_NULL_STRING (dbus_message_get_error_name (message)));

  printf ("\n");
}
static DBusHandlerResult
default_message_filter 
(   DBusConnection     *connection,
    DBusMessage        *message,
    void               *p
)
{
    DBusConnectionState *cs = p;
    uint32_t type  =dbus_message_get_type( message ),
	   serial  =dbus_message_get_serial( message );
    uint8_t  reply =dbus_message_get_no_reply( message )==0;
    const char 
	*path =    dbus_message_get_path( message ),
	*dest =    dbus_message_get_destination( message ),
	*member =  dbus_message_get_member( message ),
	*interface=dbus_message_get_interface( message ),
	*sender   =dbus_message_get_sender( message ),
	*signature=dbus_message_get_signature( message );
    connection = connection;
    if(cs->mf)
	return
	(*(cs->mf))( cs, type, reply, serial, dest, path, member, interface, 0L,
		    sender, signature, message, 0L, 0L, 0L, cs->def_mf_obj
	          ) ;
    return HANDLED;
}
Beispiel #3
0
/**
 * @brief Optionally prints a trace of a D-Bus message depending on the "level".
 *
 * @param [in] level    Trace mask controlling whether trace appears.
 * @param [in] msg      The D-Bus message to trace.
 */
void
l2dbus_traceMessage
    (
    unsigned            level,
    struct DBusMessage* msg
    )
{
    const cdbus_Char* msgTypeStr ="UNKNOWN";
    cdbus_Int32 msgType = DBUS_MESSAGE_TYPE_INVALID;
    const cdbus_Char* path = NULL;
    const cdbus_Char* intf = NULL;
    const cdbus_Char* name = NULL;
    const cdbus_Char* dest = NULL;
    const cdbus_Char* errName = NULL;


    if ( NULL != msg )
    {
        msgType = dbus_message_get_type(msg);
        msgTypeStr = dbus_message_type_to_string(msgType);
        if ( (DBUS_MESSAGE_TYPE_METHOD_CALL == msgType) ||
            (DBUS_MESSAGE_TYPE_SIGNAL == msgType) )
        {
            path = dbus_message_get_path(msg);
            intf = dbus_message_get_interface(msg);
            name = dbus_message_get_member(msg);
            l2dbus_trace(level, "(Ser=%u) [%s] <%s> %s%s%s",
                dbus_message_get_serial(msg),
                msgTypeStr,
                path ? path : "",
                intf ? intf : "",
                intf ? "." : "",
                name ? name : "");
        }
        else if (DBUS_MESSAGE_TYPE_METHOD_RETURN == msgType)
        {
            dest = dbus_message_get_destination(msg);
            l2dbus_trace(level, "(RSer=%u) [%s] -> %s",
                        dbus_message_get_reply_serial(msg),
                        msgTypeStr,
                        dest ? dest : "");
        }
        else if (DBUS_MESSAGE_TYPE_ERROR == msgType )
        {
            errName = dbus_message_get_error_name(msg);
            l2dbus_trace(level, "(RSer=%u) [%s] %s",
                                dbus_message_get_reply_serial(msg),
                                msgTypeStr,
                                errName ? errName : "");
        }
        else
        {
            l2dbus_trace(level, "(Ser=%u) [%s]",
                                dbus_message_get_serial(msg),
                                msgTypeStr);
        }
    }
}
Beispiel #4
0
/*
 * On success @param msg is unref'd or its ref is stolen by the returned
 * Eldbus_Pending.
 */
Eldbus_Pending *
_eldbus_connection_send(Eldbus_Connection *conn, Eldbus_Message *msg, Eldbus_Message_Cb cb, const void *cb_data, double timeout)
{
   Eldbus_Pending *pending;
   Eldbus_Message *error_msg;
   DBG("conn=%p, msg=%p, cb=%p, cb_data=%p, timeout=%f",
       conn, msg, cb, cb_data, timeout);

   if (!cb)
     {
        dbus_connection_send(conn->dbus_conn, msg->dbus_msg, NULL);
        eldbus_message_unref(msg);
        return NULL;
     }

   pending = calloc(1, sizeof(Eldbus_Pending));
   EINA_SAFETY_ON_NULL_RETURN_VAL(pending, NULL);

   pending->cb = cb;
   pending->cb_data = cb_data;
   pending->conn = conn;
   pending->dest = eina_stringshare_add(dbus_message_get_destination(msg->dbus_msg));
   pending->interface = eina_stringshare_add(dbus_message_get_interface(msg->dbus_msg));
   pending->method = eina_stringshare_add(dbus_message_get_member(msg->dbus_msg));
   pending->path = eina_stringshare_add(dbus_message_get_path(msg->dbus_msg));

   /* Steal the reference */
   pending->msg_sent = msg;

   EINA_MAGIC_SET(pending, ELDBUS_PENDING_MAGIC);

   if (!dbus_connection_send_with_reply(conn->dbus_conn,
                                        msg->dbus_msg,
                                        &pending->dbus_pending, timeout))
     {
        error_msg = _eldbus_message_error_get(msg, "org.enlightenment.DBus.NoConnection",
                                              "Eldbus_Connection was closed.");
        eldbus_pending_dispatch(pending, error_msg);
        return NULL;
     }
   if (!pending->dbus_pending)
     {
        error_msg = _eldbus_message_error_get(msg, "org.enlightenment.DBus.Error",
                                              "dbus_pending is NULL.");
        eldbus_pending_dispatch(pending, error_msg);
        return NULL;
     }
   if (dbus_pending_call_set_notify(pending->dbus_pending, cb_pending, pending, NULL))
     return pending;

   dbus_pending_call_cancel(pending->dbus_pending);
   error_msg = _eldbus_message_error_get(pending->msg_sent,
                                         "org.enlightenment.DBus.Error",
                                         "Error when try set callback to message.");
   eldbus_pending_dispatch(pending, error_msg);
   return NULL;
}
Beispiel #5
0
static int ldbus_message_get_destination(lua_State *L) {
	DBusMessage *message = check_DBusMessage(L, 1);

	const char * destination = dbus_message_get_destination(message);
	if (destination == NULL) {
		lua_pushnil(L);
	} else {
		lua_pushstring(L, destination);
	}

	return 1;
}
void
print_message (DBusMessage *message, dbus_bool_t literal)
{
  DBusMessageIter iter;
  const char *sender;
  const char *destination;
  int message_type;

  message_type = dbus_message_get_type (message);
  sender = dbus_message_get_sender (message);
  destination = dbus_message_get_destination (message);
  
  if (!literal)
    {
      printf ("%s sender=%s -> dest=%s",
	      type_to_name (message_type),
	      sender ? sender : "(null sender)",
	      destination ? destination : "(null destination)");
  
      switch (message_type)
	{
	case DBUS_MESSAGE_TYPE_METHOD_CALL:
	case DBUS_MESSAGE_TYPE_SIGNAL:
	  printf (" serial=%u path=%s; interface=%s; member=%s\n",
                  dbus_message_get_serial (message),
		  dbus_message_get_path (message),
		  dbus_message_get_interface (message),
		  dbus_message_get_member (message));
	  break;
      
	case DBUS_MESSAGE_TYPE_METHOD_RETURN:
	  printf (" reply_serial=%u\n",
          dbus_message_get_reply_serial (message));
	  break;

	case DBUS_MESSAGE_TYPE_ERROR:
	  printf (" error_name=%s reply_serial=%u\n",
		  dbus_message_get_error_name (message),
          dbus_message_get_reply_serial (message));
	  break;

	default:
	  printf ("\n");
	  break;
	}
    }

  dbus_message_iter_init (message, &iter);
  print_iter (&iter, literal, 1);
  fflush (stdout);
  
}
Beispiel #7
0
static DBusHandlerResult
filter_func(DBusConnection *conn, DBusMessage *bus_msg, void *data)
{
    const char *method = dbus_message_get_member(bus_msg);
    const char *iface = dbus_message_get_interface(bus_msg);
    const char *sender = dbus_message_get_sender(bus_msg);
    const char *path = dbus_message_get_path(bus_msg);

    PyObject *py_args = pydbus_import(bus_msg);

    if (!dbus_message_has_destination(bus_msg, config_unique_address)
        && strncmp(dbus_message_get_destination(bus_msg), DBUS_SERVICE_NAME, strlen(DBUS_SERVICE_NAME))) {
        return DBUS_HANDLER_RESULT_HANDLED;
    }

    switch (dbus_message_get_type(bus_msg)) {
        case DBUS_MESSAGE_TYPE_METHOD_CALL:
            if (my_proc.nr_children > MAX_PROC) {
                // Busy
                return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
            }
            else {
                log_debug("Got message '%s.%s' from '%s'\n", iface, method, sender);
                if (strcmp(config_interface, iface) == 0 && strcmp(path, "/") == 0) {
                    // "setLocale" and "cancel" methods are handled in main process
                    if (strcmp(method, "setLocale") == 0 || strcmp(method, "cancel") == 0 || strcmp(method, "listRunning") == 0) {
                        handle_core_message(bus_msg, path, iface, method, sender, py_args);
                    }
                    else {
                        // Else, handle in child process
                        proc_fork(handle_message, bus_msg);
                    }
                }
                else {
                    // Else, handle in child process
                    proc_fork(handle_message, bus_msg);
                }
                break;
            }
        case DBUS_MESSAGE_TYPE_SIGNAL:
            log_debug("Got signal '%s.%s' from '%s'\n", iface, method, sender);
            break;
    }
    return DBUS_HANDLER_RESULT_HANDLED;
}
Beispiel #8
0
/* D-BUS filter to set *@successp and quit the main loop as soon as
 * it sees a LaunchApplication request on the session bus. */
static DBusHandlerResult filter(DBusConnection *con, DBusMessage *msg,
	void *successp)
{
	char const *str;

	if (dbus_message_get_type(msg) == DBUS_MESSAGE_TYPE_METHOD_CALL
		&& (str = dbus_message_get_destination(msg)) != NULL
		&& !strcmp(str, "com.nokia.HildonDesktop.AppMgr")
		&& (str = dbus_message_get_interface(msg)) != NULL
		&& !strcmp(str, "com.nokia.HildonDesktop.AppMgr")
		&& (str = dbus_message_get_member(msg)) != NULL
		&& !strcmp(str, "LaunchApplication"))
	{
		*(int *)successp = 1;
		g_main_loop_quit(Loop);
	}

	return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
} /* filter */
Beispiel #9
0
DBusMessage *
dbind_send_and_allow_reentry (DBusConnection * bus, DBusMessage * message, DBusError *error)
{
  DBusPendingCall *pending;
  SpiReentrantCallClosure *closure;
  const char *unique_name = dbus_bus_get_unique_name (bus);
  const char *destination = dbus_message_get_destination (message);
  struct timeval tv;
  DBusMessage *ret;

  if (unique_name && destination &&
      strcmp (destination, unique_name) != 0)
    return dbus_connection_send_with_reply_and_block (bus, message, dbind_timeout, error);

  closure = g_new0 (SpiReentrantCallClosure, 1);
  closure->reply = NULL;
  atspi_dbus_connection_setup_with_g_main(bus, NULL);
  if (!dbus_connection_send_with_reply (bus, message, &pending, dbind_timeout))
      return NULL;
  if (!pending)
    return NULL;
  dbus_pending_call_set_notify (pending, set_reply, (void *) closure, g_free);

  closure->reply = NULL;
  gettimeofday (&tv, NULL);
  dbus_pending_call_ref (pending);
  while (!closure->reply)
    {
      if (!dbus_connection_read_write_dispatch (bus, dbind_timeout) ||
          time_elapsed (&tv) > dbind_timeout)
        {
          dbus_pending_call_unref (pending);
          return NULL;
        }
    }
  
  ret = closure->reply;
  dbus_pending_call_unref (pending);
  return ret;
}
Beispiel #10
0
int dbusrecv_getmsg(DBusMessage *message, char **pp_buf, int *p_length)
{

    DBusMessageIter iter;
#ifdef DBUSRECV_MSG_DEBUG
    int message_type = 0;
    const char *sender = NULL;
    const char *destination = NULL;
#endif
    int bytecount = 0;

    if (NULL == message)
    {
        printf("dbusrecv_getmsg: invalid parameters!\n");
        return -1;
    }

#ifdef DBUSRECV_MSG_DEBUG
    message_type = dbus_message_get_type (message);
    sender = dbus_message_get_sender (message);
    destination = dbus_message_get_destination (message);
#endif
    dbus_message_iter_init (message, &iter);
    bytecount = loop_iter(&iter, 1, pp_buf, p_length);
#ifdef DBUSRECV_MSG_DEBUG
    if (bytecount > 0)
    {
        int i=0;
        char *p = *pp_buf;
        printf("-------------start(len=%d)-----------\n", bytecount);
        for (i=0; i<bytecount; i++)
            printf("%02x ", p[i]);
        printf("\n-------------end----------------\n");
    }
#endif
    return bytecount;
}
Beispiel #11
0
static gboolean media_endpoint_async_call(DBusMessage *msg,
					struct media_endpoint *endpoint,
					media_endpoint_cb_t cb,
					void *user_data,
					GDestroyNotify destroy)
{
	struct endpoint_request *request;

	request = g_new0(struct endpoint_request, 1);

	/* Timeout should be less than avdtp request timeout (4 seconds) */
	if (dbus_connection_send_with_reply(btd_get_dbus_connection(),
						msg, &request->call,
						REQUEST_TIMEOUT) == FALSE) {
		error("D-Bus send failed");
		g_free(request);
		return FALSE;
	}

	dbus_pending_call_set_notify(request->call, endpoint_reply, request,
									NULL);

	request->endpoint = endpoint;
	request->msg = msg;
	request->cb = cb;
	request->destroy = destroy;
	request->user_data = user_data;

	endpoint->requests = g_slist_append(endpoint->requests, request);

	DBG("Calling %s: name = %s path = %s", dbus_message_get_member(msg),
			dbus_message_get_destination(msg),
			dbus_message_get_path(msg));

	return TRUE;
}
static DBusHandlerResult message_func(DBusConnection *connection,
					DBusMessage *message, void *user_data)
{
	struct generic_data *data = user_data;
	LOG("message_func");
	LOG("got dbus message sent to %s %s %s",
		dbus_message_get_destination(message),
		dbus_message_get_interface(message),
		dbus_message_get_path(message));

	struct interface_data *iface;
	const GDBusMethodTable *method;
	const char *interface;

	interface = dbus_message_get_interface(message);

	iface = find_interface(data->interfaces, interface);
	if (iface == NULL)
		return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;

	for (method = iface->methods; method &&
			method->name && method->function; method++) {
		if (dbus_message_is_method_call(message, iface->name,
							method->name) == FALSE)
			continue;

		if (g_dbus_args_have_signature(method->in_args,
							message) == FALSE)
			continue;

		return process_message(connection, message, method,
							iface->user_data);
	}
	handle_exit(NULL);
	return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
Beispiel #13
0
/* DBus filter function */
static DBusHandlerResult
filter_function (DBusConnection *connection, DBusMessage *message, void *userdata)
{
	DBusError err;
	DBusMessage *reply;

	if (!check_priv (halctx, connection, message, dbus_message_get_path (message),
	                 "org.freedesktop.hal.power-management.lcd-panel")) {
		return DBUS_HANDLER_RESULT_HANDLED;
	}

#ifdef DEBUG_OMAP_BL
	dbg ("filter_function: sender=%s destination=%s obj_path=%s interface=%s method=%s",
	     dbus_message_get_sender (message),
	     dbus_message_get_destination (message),
	     dbus_message_get_path (message),
	     dbus_message_get_interface (message),
	     dbus_message_get_member (message));
#endif
	reply = NULL;
	dbus_error_init (&err);

	if (dbus_message_is_method_call (message,
					 "org.freedesktop.Hal.Device.LaptopPanel",
					 "SetBrightness")) {
		int brightness;

		if (dbus_message_get_args (message,
					   &err,
					   DBUS_TYPE_INT32, &brightness,
					   DBUS_TYPE_INVALID)) {
			if (brightness < 0 || brightness > 228) {
				reply = dbus_message_new_error (message,
								"org.freedesktop.Hal.Device.LaptopPanel.Invalid",
								"Brightness has to be between 0 and 228!");
			} else {
				int return_code;

				bl_data.set_backlight_level (&bl_data, brightness);

				reply = dbus_message_new_method_return (message);
				if (reply == NULL)
					goto error;

				return_code = 0;
				dbus_message_append_args (reply,
							  DBUS_TYPE_INT32, &return_code,
							  DBUS_TYPE_INVALID);
			}

			dbus_connection_send (connection, reply, NULL);
		}
	} else if (dbus_message_is_method_call (message,
						"org.freedesktop.Hal.Device.LaptopPanel",
						"GetBrightness")) {
		int brightness;

		if (dbus_message_get_args (message,
					   &err,
					   DBUS_TYPE_INVALID)) {

			brightness = bl_data.get_backlight_level (&bl_data);
			if (brightness < bl_data.bl_min)
				brightness = bl_data.bl_min;
			if (brightness > bl_data.bl_max)
				brightness = bl_data.bl_max;

			/* dbg ("getting brightness, it's %d", brightness); */

			reply = dbus_message_new_method_return (message);
			if (reply == NULL)
				goto error;

			dbus_message_append_args (reply,
						  DBUS_TYPE_INT32, &brightness,
						  DBUS_TYPE_INVALID);
			dbus_connection_send (connection, reply, NULL);
		}
	}

error:
	if (reply != NULL)
		dbus_message_unref (reply);

	LIBHAL_FREE_DBUS_ERROR (&err);

	return DBUS_HANDLER_RESULT_HANDLED;
}
Beispiel #14
0
static int create_configuration(DBusMessage *msg, connection_ready_cb callback)
{
	DBusMessage *new_msg = NULL;
	DBusPendingCall *call;
	DBusMessageIter iter, array, new_iter, new_dict;
	const char *type = NULL, *name = NULL;
	const char *host = NULL, *domain = NULL;
	char *ident, *me = NULL;
	int err = 0;
	dbus_bool_t result;
	struct connection_data *data;
	struct config_create_data *user_data = NULL;
	GSList *networks = NULL;

	/*
	 * We copy the old message data into new message. We cannot
	 * just use the old message as is because the user route
	 * information is not in the same format in vpnd.
	 */
	new_msg = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_CALL);
	dbus_message_iter_init_append(new_msg, &new_iter);
	connman_dbus_dict_open(&new_iter, &new_dict);

	dbus_message_iter_init(msg, &iter);
	dbus_message_iter_recurse(&iter, &array);

	while (dbus_message_iter_get_arg_type(&array) == DBUS_TYPE_DICT_ENTRY) {
		DBusMessageIter entry, value;
		void *item_value;
		const char *key;
		int value_type;

		dbus_message_iter_recurse(&array, &entry);
		dbus_message_iter_get_basic(&entry, &key);

		dbus_message_iter_next(&entry);
		dbus_message_iter_recurse(&entry, &value);

		value_type = dbus_message_iter_get_arg_type(&value);
		item_value = NULL;

		switch (value_type) {
		case DBUS_TYPE_STRING:
			dbus_message_iter_get_basic(&value, &item_value);

			if (g_str_equal(key, "Type") == TRUE) {
				type = (const char *)item_value;
			} else if (g_str_equal(key, "Name") == TRUE) {
				name = (const char *)item_value;
			} else if (g_str_equal(key, "Host") == TRUE) {
				host = (const char *)item_value;
			} else if (g_str_equal(key, "VPN.Domain") == TRUE) {
				domain = (const char *)item_value;
			}

			DBG("%s %s", key, (char *)item_value);

			if (item_value != NULL)
				connman_dbus_dict_append_basic(&new_dict, key,
						value_type, &item_value);
			break;
		case DBUS_TYPE_ARRAY:
			if (g_str_equal(key, "Networks") == TRUE) {
				networks = get_user_networks(&value);
				connman_dbus_dict_append_array(&new_dict,
							"UserRoutes",
							DBUS_TYPE_DICT_ENTRY,
							append_routes,
							networks);
			}
			break;
		}

		dbus_message_iter_next(&array);
	}

	connman_dbus_dict_close(&new_iter, &new_dict);

	DBG("VPN type %s name %s host %s domain %s networks %p",
		type, name, host, domain, networks);

	if (host == NULL || domain == NULL) {
		err = -EINVAL;
		goto done;
	}

	if (type == NULL || name == NULL) {
		err = -EOPNOTSUPP;
		goto done;
	}

	ident = g_strdup_printf("%s_%s", host, domain);
	set_dbus_ident(ident);

	DBG("ident %s", ident);

	data = g_hash_table_lookup(vpn_connections, ident);
	if (data != NULL) {
		if (data->call != NULL || data->cb_data != NULL) {
			DBG("create configuration call already pending");
			err = -EINPROGRESS;
			goto done;
		}
	} else {
		char *path = g_strdup_printf("%s/connection/%s", VPN_PATH,
								ident);
		data = create_connection_data(path);
		g_free(path);

		if (data == NULL) {
			err = -ENOMEM;
			goto done;
		}

		g_hash_table_insert(vpn_connections, g_strdup(ident), data);
	}

	/*
	 * User called net.connman.Manager.ConnectProvider if we are here.
	 * So use the data from original message in the new msg.
	 */
	me = g_strdup(dbus_message_get_destination(msg));

	dbus_message_set_interface(new_msg, VPN_MANAGER_INTERFACE);
	dbus_message_set_path(new_msg, "/");
	dbus_message_set_destination(new_msg, VPN_SERVICE);
	dbus_message_set_sender(new_msg, me);
	dbus_message_set_member(new_msg, "Create");

	user_data = g_try_new0(struct config_create_data, 1);
	if (user_data == NULL) {
		err = -ENOMEM;
		goto done;
	}

	user_data->callback = callback;
	user_data->message = dbus_message_ref(msg);
	user_data->path = NULL;

	DBG("cb %p msg %p", user_data, msg);

	result = dbus_connection_send_with_reply(connection, new_msg,
						&call, DBUS_TIMEOUT);
	if (result == FALSE || call == NULL) {
		err = -EIO;
		goto done;
	}

	dbus_pending_call_set_notify(call, configuration_create_reply,
							user_data, NULL);
	data->call = call;

done:
	if (new_msg != NULL)
		dbus_message_unref(new_msg);

	if (networks != NULL)
		g_slist_free_full(networks, destroy_route);

	g_free(me);
	return err;
}
Beispiel #15
0
VIR_MOCK_WRAP_RET_ARGS(dbus_connection_send_with_reply_and_block,
                       DBusMessage *,
                       DBusConnection *, connection,
                       DBusMessage *, message,
                       int, timeout_milliseconds,
                       DBusError *, error)
{
    DBusMessage *reply = NULL;
    const char *service = dbus_message_get_destination(message);
    const char *member = dbus_message_get_member(message);

    VIR_MOCK_REAL_INIT(dbus_connection_send_with_reply_and_block);

    if (STREQ(service, "org.freedesktop.PolicyKit1") &&
        STREQ(member, "CheckAuthorization")) {
        char *type;
        char *pidkey;
        unsigned int pidval;
        char *timekey;
        unsigned long long timeval;
        char *uidkey;
        int uidval;
        char *actionid;
        char **details;
        size_t detailslen;
        int allowInteraction;
        char *cancellationId;
        const char **retdetails = NULL;
        size_t retdetailslen = 0;
        const char *retdetailscancelled[] = {
            "polkit.dismissed", "true",
        };
        int is_authorized = 1;
        int is_challenge = 0;

        if (virDBusMessageRead(message,
                               "(sa{sv})sa&{ss}us",
                               &type,
                               3,
                               &pidkey, "u", &pidval,
                               &timekey, "t", &timeval,
                               &uidkey, "i", &uidval,
                               &actionid,
                               &detailslen,
                               &details,
                               &allowInteraction,
                               &cancellationId) < 0)
            goto error;

        if (STREQ(actionid, "org.libvirt.test.success")) {
            is_authorized = 1;
            is_challenge = 0;
        } else if (STREQ(actionid, "org.libvirt.test.challenge")) {
            is_authorized = 0;
            is_challenge = 1;
        } else if (STREQ(actionid, "org.libvirt.test.cancelled")) {
            is_authorized = 0;
            is_challenge = 0;
            retdetails = retdetailscancelled;
            retdetailslen = ARRAY_CARDINALITY(retdetailscancelled) / 2;
        } else if (STREQ(actionid, "org.libvirt.test.details")) {
            size_t i;
            is_authorized = 0;
            is_challenge = 0;
            for (i = 0; i < detailslen / 2; i++) {
                if (STREQ(details[i * 2],
                          "org.libvirt.test.person") &&
                    STREQ(details[(i * 2) + 1],
                          "Fred")) {
                    is_authorized = 1;
                    is_challenge = 0;
                }
            }
        } else {
            is_authorized = 0;
            is_challenge = 0;
        }

        VIR_FREE(type);
        VIR_FREE(pidkey);
        VIR_FREE(timekey);
        VIR_FREE(uidkey);
        VIR_FREE(actionid);
        VIR_FREE(cancellationId);
        virStringListFreeCount(details, detailslen);

        if (virDBusCreateReply(&reply,
                               "(bba&{ss})",
                               is_authorized,
                               is_challenge,
                               retdetailslen,
                               retdetails) < 0)
            goto error;
    } else {
        reply = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_RETURN);
    }

    return reply;

 error:
    virDBusMessageUnref(reply);
    return NULL;
}
Beispiel #16
0
static DBusHandlerResult 
ac_manage_dbus_message_handler(DBusConnection *connection, DBusMessage *message, void *user_data) {

	DBusMessage	*reply = NULL;
	char sender[20];

	syslog(LOG_DEBUG, "message type = %s, message path = %s, message member = %s\n",
					dbus_message_type_to_string(dbus_message_get_type(message)),
					dbus_message_get_path(message), dbus_message_get_member(message));

	if(0 == strcmp(dbus_message_get_path(message), AC_MANAGE_DBUS_OBJPATH))	 {
		if(dbus_message_is_method_call(message, AC_MANAGE_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_LOG_DEBUG)) {
			reply = ac_manage_dbus_config_log_debug(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_TOKEN_DEBUG)) {
			reply = ac_manage_dbus_config_token_debug(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_DBUS_INTERFACE, AC_MANAGE_DBUS_PROXY_PFM_CONFIG)) {
			reply = ac_manage_dbus_proxy_pfm_config(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_DBUS_INTERFACE, AC_MANAGE_DBUS_MANUAL_SET_MIB_ACIF_STATS)) {
			reply = ac_manage_dbus_manual_mib_acif_stats(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_MIB_ACIF_STATS)) {
			reply = ac_manage_dbus_show_mib_acif_stats(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_DBUS_INTERFACE, AC_MANAGE_DBUS_GET_MIB_LOCALSLOT_ACIF_STATS)) {
			reply = ac_manage_dbus_get_mib_localslot_acif_stats(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_MIB_ACCUMULATE_ACIF_STATS)) {
			reply = ac_manage_dbus_show_mib_accumulate_acif_stats(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_RADIUS_CONFIG)) {
			reply = ac_manage_dbus_show_radius_config(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_DBUS_INTERFACE, AC_MANAGE_DBUS_WEB_IP_PORT_CHECK)) {
			reply = ac_manage_dbus_web_ip_port_check(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_DBUS_INTERFACE, AC_MANAGE_DBUS_WEB_EDIT)) {
			reply = ac_manage_dbus_web_edit(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_DBUS_INTERFACE, AC_MANAGE_DBUS_WEB_SHOW)) {
			reply = ac_manage_dbus_web_show(connection, message, user_data);
		} 
		else if(dbus_message_is_method_call(message, AC_MANAGE_DBUS_INTERFACE, AC_MANAGE_DBUS_WEB_CONF)) {
			reply = ac_manage_dbus_web_conf(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_DBUS_INTERFACE, AC_MANAGE_DBUS_WEB_DOWNLOAD)) {
			reply = ac_manage_dbus_web_download(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_DBUS_INTERFACE, AC_MANAGE_DBUS_WEB_SHOW_PAGES)) {
			reply = ac_manage_dbus_web_show_pages(connection, message, user_data);
		} 
		else if(dbus_message_is_method_call(message, AC_MANAGE_DBUS_INTERFACE, AC_MANAGE_DBUS_WEB_DEL_PAGES)) {
			reply = ac_manage_dbus_web_del_pages(connection, message, user_data);
		}
		
		else if(dbus_message_is_method_call(message, AC_MANAGE_DBUS_INTERFACE, AC_MANAGE_DBUS_EXTEND_COMMAND_EXEC)) {
			reply = ac_manage_dbus_extend_command_exec(connection, message, user_data);
		}
	}
	else if(0 == strcmp(dbus_message_get_path(message), AC_MANAGE_SNMP_DBUS_OBJPATH)) {
		if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SNMP_SERVICE)) {
			reply = ac_manage_dbus_config_snmp_service(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SNMP_COLLECTION_MODE)) {
			reply = ac_manage_dbus_config_snmp_collection_mode(connection, message, user_data);
		} 
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SNMP_PFM_REQUESTPKTS)) {
			reply = ac_manage_dbus_config_snmp_pfm_requestpkts(connection, message, user_data);
		} 
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SNMP_PFM_REQUESTPKTS_IPV6)) {
			reply = ac_manage_dbus_config_snmp_pfm_requestpkts_ipv6(connection, message, user_data);
		} 
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SNMP_VERSION_MODE)) {
			reply = ac_manage_dbus_config_snmp_version_mode(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SNMP_CACHETIME)) {
			reply = ac_manage_dbus_config_snmp_cachetime(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SNMP_ADD_COMMUNITY)) {
			reply = ac_manage_dbus_config_snmp_add_community(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SNMP_ADD_COMMUNITY_IPV6)) {
			reply = ac_manage_dbus_config_snmp_add_community_ipv6(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SNMP_SET_COMMUNITY)) {
			reply = ac_manage_dbus_config_snmp_set_community(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SNMP_SET_COMMUNITY_IPV6)) {
			reply = ac_manage_dbus_config_snmp_set_community_ipv6(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SNMP_DEL_COMMUNITY)) {
			reply = ac_manage_dbus_config_snmp_del_community(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SNMP_DEL_COMMUNITY_IPV6)) {
			reply = ac_manage_dbus_config_snmp_del_community_ipv6(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SNMP_VIEW)) {
			reply = ac_manage_dbus_config_snmp_view(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CHECK_SNMP_VIEW)) {
			reply = ac_manage_dbus_check_snmp_view(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SNMP_VIEW_OID)) {
			reply = ac_manage_dbus_config_snmp_view_oid(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SNMP_ADD_GROUP)) {
			reply = ac_manage_dbus_config_snmp_add_group(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SNMP_DEL_GROUP)) {
			reply = ac_manage_dbus_config_snmp_del_group(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SNMP_ADD_V3USER)) {
			reply = ac_manage_dbus_config_snmp_add_v3user(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SNMP_DEL_V3USER)) {
			reply = ac_manage_dbus_config_snmp_del_v3user(connection, message, user_data);
		}		
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_TRAP_SERVICE)) {
			reply = ac_manage_dbus_config_trap_service(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_TRAP_CONFIG_RECEIVER)) {
			reply = ac_manage_dbus_config_trap_config_receiver(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_TRAP_DEL_RECEIVER)) {
			reply = ac_manage_dbus_config_trap_del_receiver(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_TRAP_SWITCH)) {
			reply = ac_manage_dbus_config_trap_switch(connection, message, user_data);
		}			
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_TRAP_GROUP_SWITCH)) {
			reply = ac_manage_dbus_config_trap_group_switch(connection, message, user_data);
		}	
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_TRAP_INSTANCE_HEARTBEAT)) {
			reply = ac_manage_dbus_config_trap_instance_heartbeat(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CLEAR_TRAP_INSTANCE_HEARTBEAT)) {
			reply = ac_manage_dbus_clear_trap_instance_heartbeat(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_TRAP_PARAMETER)) {
			reply = ac_manage_dbus_config_trap_parameter(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SNMP_MANUAL_INSTANCE)) {
			reply = ac_manage_dbus_config_snmp_manual_instance(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SNMP_UPDATE_SYSINFO)) {
			reply = ac_manage_dbus_config_snmp_update_sysinfo(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_SNMP_MANUAL_INSTANCE)) {
			reply = ac_manage_dbus_show_snmp_manual_instance(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_SNMP_STATE)) {
			reply = ac_manage_dbus_show_snmp_state(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_TRAP_STATE)) {
			reply = ac_manage_dbus_show_trap_state(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_SNMP_BASE_INFO)) {
			reply = ac_manage_dbus_show_snmp_base_info(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_SNMP_PFM_INTERFACE)) {
			reply = ac_manage_dbus_show_snmp_pfm_interface(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_SNMP_PFM_INTERFACE_IPV6)) {
			reply = ac_manage_dbus_show_snmp_pfm_interface_ipv6(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_SNMP_RUNNING_CONFIG)) {
			reply = ac_manage_dbus_show_snmp_running_config(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_SNMP_COMMUNITY)) {
			reply = ac_manage_dbus_show_snmp_community(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_SNMP_COMMUNITY_IPV6)) {
			reply = ac_manage_dbus_show_snmp_community_ipv6(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_SNMP_VIEW)) {
			reply = ac_manage_dbus_show_snmp_view(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_SNMP_GROUP)) {
			reply = ac_manage_dbus_show_snmp_group(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_SNMP_V3USER)) {
			reply = ac_manage_dbus_show_snmp_v3user(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_TRAP_RECEIVER)) {
			reply = ac_manage_dbus_show_trap_receiver(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_TRAP_SWITCH)) {
			reply = ac_manage_dbus_show_trap_switch(connection, message, user_data);
		}		
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_TRAP_INSTANCE_HEARTBEAT)) {
			reply = ac_manage_dbus_show_trap_instance_heartbeat(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_TRAP_PARAMETER)) {
			reply = ac_manage_dbus_show_trap_parameter(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_SNMP_LOG_DEBUG)) {
			reply = ac_manage_dbus_show_snmp_log_debug(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SNMP_LOG_DEBUG)) {
			reply = ac_manage_dbus_config_snmp_log_debug(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_TRAP_LOG_DEBUG)) {
			reply = ac_manage_dbus_show_trap_log_debug(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_TRAP_LOG_DEBUG)) {
			reply = ac_manage_dbus_config_trap_log_debug(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SNMP_SYSOID_BOARDTYPE)) {
			reply = ac_manage_dbus_config_snmp_sysoid_boardtype(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_SNMP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_MEM_STATUE_DOG)) {
			reply = ac_manage_dbus_config_mem_status_dog(connection, message, user_data);
		}
	}
	else if(0 == strcmp(dbus_message_get_path(message), AC_MANAGE_TCRULE_DBUS_OBJPATH)) {	    
		if(dbus_message_is_method_call(message, AC_MANAGE_TCRULE_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_FLOW_CONTROL_SERVICE)) {
			reply = ac_manage_dbus_config_flow_control_service(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_TCRULE_DBUS_INTERFACE, AC_MANAGE_DBUS_ADD_TCRULE)) {
			reply = ac_manage_dbus_add_tcrule(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_TCRULE_DBUS_INTERFACE, AC_MANAGE_DBUS_OFFSET_TCRULE)) {
			reply = ac_manage_dbus_offset_tcrule(connection, message, user_data);
		}        
		else if(dbus_message_is_method_call(message, AC_MANAGE_TCRULE_DBUS_INTERFACE, AC_MANAGE_DBUS_DELETE_TCRULE)) {
			reply = ac_manage_dbus_delete_tcrule(connection, message, user_data);
		}        
		else if(dbus_message_is_method_call(message, AC_MANAGE_TCRULE_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_FLOW_CONTROL_SERVICE)) {
			reply = ac_manage_dbus_show_flow_control_service(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_TCRULE_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_TCRULE)) {
			reply = ac_manage_dbus_show_tcrule(connection, message, user_data);
		}        
		else if(dbus_message_is_method_call(message, AC_MANAGE_TCRULE_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_TCRULE_OFFSET)) {
			reply = ac_manage_dbus_show_tcrule_offset(connection, message, user_data);
		}        
		else if(dbus_message_is_method_call(message, AC_MANAGE_TCRULE_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_TCRULE_RUNNING_CONFIG)) {
			reply = ac_manage_dbus_show_tcrule_running_config(connection, message, user_data);
		}
	}
	else if(0 == strcmp(dbus_message_get_path(message), AC_MANAGE_FIREWALL_DBUS_OBJPATH)) {	    
		if(dbus_message_is_method_call(message, AC_MANAGE_FIREWALL_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_FIREWALL_SERVICE)) {
			reply = ac_manage_dbus_config_firewall_service(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_FIREWALL_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_FIREWALL_RULE)) {
			reply = ac_manage_dbus_config_firewall_rule(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_FIREWALL_DBUS_INTERFACE, AC_MANAGE_DBUS_CHANGE_FIREWALL_INDEX)) {
			reply = ac_manage_dbus_change_firewall_index(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_FIREWALL_DBUS_INTERFACE, AC_MANAGE_DBUS_DELETE_FIREWALL_RULE)) {
			reply = ac_manage_dbus_del_firewall_rule(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_FIREWALL_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_NAT_UDP_TIMEOUT)) {
			reply = ac_manage_dbus_config_nat_udp_timeout(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_FIREWALL_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_FIREWALL_RULE)) {
			reply = ac_manage_dbus_show_firewall_rule(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_FIREWALL_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_STRICT_ACCESS_LEVEL)) {
			reply = ac_manage_dbus_config_strict_access_level(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_FIREWALL_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_STRICT_ACCESS)) {
			reply = ac_manage_dbus_show_strict_access(connection, message, user_data);
		}
	}
	else if(0 == strcmp(dbus_message_get_path(message), AC_MANAGE_NTP_DBUS_OBJPATH)) {	    
		if(dbus_message_is_method_call(message, AC_MANAGE_NTP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_NTP_RULE)) {
			reply = ac_manage_dbus_show_ntp_rule(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_NTP_DBUS_INTERFACE, AC_MANAGE_DBUS_ADD_NTPSERVER)) {
			reply = ac_manage_dbus_add_ntpserver(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_NTP_DBUS_INTERFACE, AC_MANAGE_DBUS_INSIDE_NTP)) {
			reply = ac_manage_dbus_inside_ntp(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_NTP_DBUS_INTERFACE, AC_MANAGE_DBUS_SET_NTP_STATUS)) {
			reply = ac_manage_dbus_set_ntp_status(connection, message, user_data);
		}		
		else if(dbus_message_is_method_call(message, AC_MANAGE_NTP_DBUS_INTERFACE, AC_MANAGE_DBUS_CLENA_NTP)) {
			reply = ac_manage_dbus_clean_ntp(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_NTP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_NTP_PFM_REQUESTPKTS)) {
			reply = ac_manage_dbus_config_ntp_pfm_requestpkts(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_NTP_DBUS_INTERFACE, AC_MANAGE_DBUS_SET_TIMEZONE)) {
			reply = ac_manage_dbus_set_timezone(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_NTP_DBUS_INTERFACE, AC_MANAGE_DBUS_ADD_NTPCLIENT)) {
			reply = ac_manage_dbus_add_ntpclient(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_NTP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_NTPCLIENT)) {
			reply = ac_manage_dbus_show_ntpclient(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_NTP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_NTPUPSERVER)) {
			reply = ac_manage_dbus_show_ntpupserver(connection, message, user_data);
		}
		if(dbus_message_is_method_call(message, AC_MANAGE_NTP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_TIME)) {
			reply = ac_manage_dbus_show_time(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_NTP_DBUS_INTERFACE, AC_MANAGE_DBUS_SET_TIME)) {
			reply = ac_manage_dbus_set_time(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_NTP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_NTP_RUNNING_CONFIG)) {
			reply = ac_manage_dbus_show_ntp_running_config(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_NTP_DBUS_INTERFACE, AC_MANAGE_DBUS_ADD_SYSLOGRULE)) {
			reply = ac_manage_dbus_add_syslogrule(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_NTP_DBUS_INTERFACE, AC_MANAGE_DBUS_SET_SYSLOG_STATUS)) {
			reply = ac_manage_dbus_set_syslog_status(connection, message, user_data);
		}	
		else if(dbus_message_is_method_call(message, AC_MANAGE_NTP_DBUS_INTERFACE, AC_MANAGE_DBUS_SHOW_SYSLOG_RULE)) {
			reply = ac_manage_dbus_show_syslog_rule(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_NTP_DBUS_INTERFACE, AC_MANAGE_DBUS_SAVE_SYSLOG)) {
			reply = ac_manage_dbus_save_syslog(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_NTP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SYSLOGUPLOAD_PFM_REQUESTPKTS)) {
			reply = ac_manage_dbus_config_syslogupload_pfm_requestpkts(connection, message, user_data);
		}
		else if(dbus_message_is_method_call(message, AC_MANAGE_NTP_DBUS_INTERFACE, AC_MANAGE_DBUS_CONFIG_SYSLOGRULE)) {
			reply = ac_manage_dbus_config_syslogrule(connection, message, user_data);
		}

	}
	else if(0 == strcmp(dbus_message_get_path(message), AC_MANAGE_ACINFO_DBUS_OBJPATH)){
		if(dbus_message_is_method_call(message, AC_MANAGE_ACINFO_DBUS_INTERFACE, AC_MANAGE_DBUS_SET_ACINFO_VALUE)) {
			reply = ac_manage_dbus_set_acinfo_value(connection, message, user_data);
		}
		else  if(dbus_message_is_method_call(message, AC_MANAGE_ACINFO_DBUS_INTERFACE, AC_MANAGE_DBUS_SET_BKACINFO_VALUE)) {
			reply = ac_manage_dbus_set_bkacinfo_value(connection, message, user_data);
		}
		else  if(dbus_message_is_method_call(message, AC_MANAGE_ACINFO_DBUS_INTERFACE, AC_MANAGE_DBUS_DEL_AC_VERSION_FILE_VALUE)) {
			reply = ac_manage_dbus_del_ac_version_file_value(connection, message, user_data);
		}
	}
	if (reply) {
		syslog(LOG_DEBUG, "reply destination %s\n", dbus_message_get_destination(reply));
		memset(sender,0, sizeof(sender));
		strcpy(sender, dbus_message_get_destination(reply));
		dbus_connection_send (connection, reply, NULL);
		dbus_connection_flush(connection); 
		dbus_message_unref (reply);
	}

	return DBUS_HANDLER_RESULT_HANDLED ;
}
Beispiel #17
0
void
handle_dbus_message(DBusMessage *msg)
{
    int state;
    char **new_uris;
    int uri_count;
    GstState pipeline_state;
    int hemp_state;
    int i;
    int new_head = 0; /* is there a new hotlist head?
                         If so, play means skip */

    if (!strncmp (HEMP_DBUS_DESTINATION, dbus_message_get_destination(msg),
                  strlen(HEMP_DBUS_DESTINATION))) {
        dbus_message_get_args (msg, NULL,
                               DBUS_TYPE_INT32, &state,
                               DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
                               &new_uris, &uri_count,
                               DBUS_TYPE_INVALID);
        for (i = 0; i<uri_count; i++) {
            g_queue_push_head(hotlist, 
                              new_playlist_entry(new_uris[i]));
            new_head = 1; 
        }
        if (uri_count) write_playlist();

        if (!GST_IS_ELEMENT(pipeline)) init_pipeline();
        gst_element_get_state(GST_ELEMENT (pipeline),
                              &pipeline_state,
                              NULL,
                              GST_CLOCK_TIME_NONE);
        if (pipeline_state == GST_STATE_PAUSED) {
            hemp_state = HEMP_STATE_PAUSED;
        } else {
            hemp_state = HEMP_STATE_PLAYING;
        }

        switch (state) {
            case HEMP_STATE_TOGGLE:
                if (pipeline_state == GST_STATE_PLAYING) {
                    gst_element_set_state (GST_ELEMENT (pipeline),
                                           GST_STATE_PAUSED);
                } else {
                    gst_element_set_state (GST_ELEMENT (pipeline),
                                           GST_STATE_PLAYING);
                }
                break;
            case HEMP_STATE_SKIP:
                next(hemp_state, 1);
                break;
            case HEMP_STATE_PREVIOUS:
                previous(hemp_state);
                break;
            case HEMP_STATE_PLAYING:
                if (new_head) {
                    next(HEMP_STATE_PLAYING, 0);
                } else {
                    gst_element_set_state (GST_ELEMENT (pipeline),
                                           GST_STATE_PLAYING);
                }
                break;
            case HEMP_STATE_PAUSED:
                gst_element_set_state (GST_ELEMENT (pipeline),
                                       GST_STATE_PAUSED);
                break;
            case HEMP_STATE_STOP:
                drop_pipeline(0);
                break;
            case HEMP_STATE_PING:
                printf("ping!\n");
                break;
            default:
                printf("Unknown state %d\n", state);
       }
    }
}
Beispiel #18
0
VIR_MOCK_WRAP_RET_ARGS(dbus_connection_send_with_reply_and_block,
                       DBusMessage *,
                       DBusConnection *, connection,
                       DBusMessage *, message,
                       int, timeout_milliseconds,
                       DBusError *, error)
{
    DBusMessage *reply = NULL;
    const char *service = dbus_message_get_destination(message);
    const char *member = dbus_message_get_member(message);

    VIR_MOCK_REAL_INIT(dbus_connection_send_with_reply_and_block);

    if (STREQ(service, "org.freedesktop.machine1")) {
        if (getenv("FAIL_BAD_SERVICE")) {
            dbus_set_error_const(error,
                                 "org.freedesktop.systemd.badthing",
                                 "Something went wrong creating the machine");
        } else {
            reply = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_RETURN);
        }
    } else if (STREQ(service, "org.freedesktop.login1")) {
        char *supported = getenv("RESULT_SUPPORT");
        DBusMessageIter iter;
        reply = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_RETURN);
        dbus_message_iter_init_append(reply, &iter);

        if (!dbus_message_iter_append_basic(&iter,
                                            DBUS_TYPE_STRING,
                                            &supported))
            goto error;
    } else if (STREQ(service, "org.freedesktop.DBus") &&
               STREQ(member, "ListActivatableNames")) {
        const char *svc1 = "org.foo.bar.wizz";
        const char *svc2 = "org.freedesktop.machine1";
        const char *svc3 = "org.freedesktop.login1";
        DBusMessageIter iter;
        DBusMessageIter sub;
        reply = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_RETURN);
        dbus_message_iter_init_append(reply, &iter);
        dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY,
                                         "s", &sub);

        if (!dbus_message_iter_append_basic(&sub,
                                            DBUS_TYPE_STRING,
                                            &svc1))
            goto error;
        if (!getenv("FAIL_NO_SERVICE") &&
            !dbus_message_iter_append_basic(&sub,
                                            DBUS_TYPE_STRING,
                                            &svc2))
            goto error;
        if (!getenv("FAIL_NO_SERVICE") &&
            !dbus_message_iter_append_basic(&sub,
                                            DBUS_TYPE_STRING,
                                            &svc3))
            goto error;
        dbus_message_iter_close_container(&iter, &sub);
    } else if (STREQ(service, "org.freedesktop.DBus") &&
               STREQ(member, "ListNames")) {
        const char *svc1 = "org.foo.bar.wizz";
        const char *svc2 = "org.freedesktop.systemd1";
        const char *svc3 = "org.freedesktop.login1";
        DBusMessageIter iter;
        DBusMessageIter sub;
        reply = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_RETURN);
        dbus_message_iter_init_append(reply, &iter);
        dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY,
                                         "s", &sub);

        if (!dbus_message_iter_append_basic(&sub,
                                            DBUS_TYPE_STRING,
                                            &svc1))
            goto error;
        if ((!getenv("FAIL_NO_SERVICE") && !getenv("FAIL_NOT_REGISTERED")) &&
            !dbus_message_iter_append_basic(&sub,
                                            DBUS_TYPE_STRING,
                                            &svc2))
            goto error;
        if ((!getenv("FAIL_NO_SERVICE") && !getenv("FAIL_NOT_REGISTERED")) &&
            !dbus_message_iter_append_basic(&sub,
                                            DBUS_TYPE_STRING,
                                            &svc3))
            goto error;
        dbus_message_iter_close_container(&iter, &sub);
    } else {
        reply = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_RETURN);
    }

    return reply;

 error:
    dbus_message_unref(reply);
    return NULL;
}
Beispiel #19
0
VIR_MOCK_WRAP_RET_ARGS(dbus_connection_send_with_reply_and_block,
                       DBusMessage *,
                       DBusConnection *, connection,
                       DBusMessage *, message,
                       int, timeout_milliseconds,
                       DBusError *, error)
{
    DBusMessage *reply = NULL;
    const char *service = dbus_message_get_destination(message);
    const char *member = dbus_message_get_member(message);
    size_t i;
    size_t nargs = 0;
    char **args = NULL;
    char *type = NULL;

    VIR_MOCK_REAL_INIT(dbus_connection_send_with_reply_and_block);

    if (STREQ(service, "org.freedesktop.DBus") &&
        STREQ(member, "ListNames")) {
        const char *svc1 = "org.foo.bar.wizz";
        const char *svc2 = VIR_FIREWALL_FIREWALLD_SERVICE;
        DBusMessageIter iter;
        DBusMessageIter sub;
        reply = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_RETURN);
        dbus_message_iter_init_append(reply, &iter);
        dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY,
                                         "s", &sub);

        if (!dbus_message_iter_append_basic(&sub,
                                            DBUS_TYPE_STRING,
                                            &svc1))
            goto error;
        if (!fwDisabled &&
            !dbus_message_iter_append_basic(&sub,
                                            DBUS_TYPE_STRING,
                                            &svc2))
            goto error;
        dbus_message_iter_close_container(&iter, &sub);
    } else if (STREQ(service, VIR_FIREWALL_FIREWALLD_SERVICE) &&
               STREQ(member, "passthrough")) {
        bool isAdd = false;
        bool doError = false;

        if (virDBusMessageDecode(message,
                                 "sa&s",
                                 &type,
                                 &nargs,
                                 &args) < 0)
            goto error;

        for (i = 0; i < nargs; i++) {
            /* Fake failure on the command with this IP addr */
            if (STREQ(args[i], "-A")) {
                isAdd = true;
            } else if (isAdd && STREQ(args[i], "192.168.122.255")) {
                doError = true;
            }
        }

        if (fwBuf) {
            if (STREQ(type, "ipv4"))
                virBufferAddLit(fwBuf, IPTABLES_PATH);
            else if (STREQ(type, "ipv4"))
                virBufferAddLit(fwBuf, IP6TABLES_PATH);
            else
                virBufferAddLit(fwBuf, EBTABLES_PATH);
        }
        for (i = 0; i < nargs; i++) {
            if (fwBuf) {
                virBufferAddLit(fwBuf, " ");
                virBufferEscapeShell(fwBuf, args[i]);
            }
        }
        if (fwBuf)
            virBufferAddLit(fwBuf, "\n");
        if (doError) {
            dbus_set_error_const(error,
                                 "org.firewalld.error",
                                 "something bad happened");
        } else {
            if (nargs == 1 &&
                STREQ(type, "ipv4") &&
                STREQ(args[0], "-L")) {
                if (virDBusCreateReply(&reply,
                                       "s", TEST_FILTER_TABLE_LIST) < 0)
                    goto error;
            } else if (nargs == 3 &&
                       STREQ(type, "ipv4") &&
                       STREQ(args[0], "-t") &&
                       STREQ(args[1], "nat") &&
                       STREQ(args[2], "-L")) {
                if (virDBusCreateReply(&reply,
                                       "s", TEST_NAT_TABLE_LIST) < 0)
                    goto error;
            } else {
                if (virDBusCreateReply(&reply,
                                       "s", "success") < 0)
                    goto error;
            }
        }
    } else {
        reply = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_RETURN);
    }

 cleanup:
    VIR_FREE(type);
    for (i = 0; i < nargs; i++)
        VIR_FREE(args[i]);
    VIR_FREE(args);
    return reply;

 error:
    virDBusMessageUnref(reply);
    reply = NULL;
    if (error && !dbus_error_is_set(error))
        dbus_set_error_const(error,
                             "org.firewalld.error",
                             "something unexpected happened");

    goto cleanup;
}
Beispiel #20
0
/**
* Description:
*  WSM module Dbus handler 
* 
*/
static DBusHandlerResult wsm_dbus_msg_handler (
	DBusConnection *conn, 
	DBusMessage *msg, 
	void *user_data)
{
	DBusMessage *reply = NULL;
	unsigned char wsm_dbus_vrid_path[WSM_PATH_MAX] = {0};
#ifndef _DISTRIBUTION_	
	sprintf(wsm_dbus_vrid_path, "%s%d", WSM_DBUS_OBJPATH, vrrid);
#else
	sprintf(wsm_dbus_vrid_path, "%s%d_%d", WSM_DBUS_OBJPATH,local, vrrid);
#endif
	if (strcmp(dbus_message_get_path(msg), wsm_dbus_vrid_path) != 0)
	{
		WSMLog(L_CRIT, "%s: Dbus Path match error.\n", __func__);
		return DBUS_HANDLER_RESULT_HANDLED;
	}
	WSMLog(L_INFO,"message path %s\n",dbus_message_get_path(msg));
	WSMLog(L_INFO,"message interface %s\n",dbus_message_get_interface(msg));
	WSMLog(L_INFO,"message member %s\n",dbus_message_get_member(msg));
	WSMLog(L_INFO,"message destination %s\n",dbus_message_get_destination(msg));	
	WSMLog(L_INFO,"message type %d\n",dbus_message_get_type(msg));
	if (dbus_msg_is_method_call(msg, WSM_DBUS_INTERFACE, WSM_DBUS_CONF_SET_TUNNEL))
		reply = wsm_dbus_set_ipfwd_state(conn, msg, user_data);
	else if (dbus_msg_is_method_call(msg, WSM_DBUS_INTERFACE, WSM_DBUS_CONF_SHOW_WTP_LIST))
		reply = wsm_dbus_show_wtp_list(conn, msg, user_data);
	else if (dbus_msg_is_method_call(msg, WSM_DBUS_INTERFACE, WSM_DBUS_CONF_SHOW_LOG_WSM_STATE))
		reply = wsm_dbus_show_log_wsm_state(conn, msg, user_data);
	else if (dbus_msg_is_method_call(msg, WSM_DBUS_INTERFACE, WSM_DBUS_CONF_SET_LOG_WSM_LEVEL))
		reply = wsm_dbus_set_log_wsm_level(conn, msg, user_data);
	else if (dbus_msg_is_method_call(msg, WSM_DBUS_INTERFACE, WSM_DBUS_CONF_SHOW_WTP_WTPID))
		reply = wsm_dbus_show_wtp_by_wtpid(conn, msg, user_data);
	else if (dbus_msg_is_method_call(msg, WSM_DBUS_INTERFACE, WSM_DBUS_CONF_SHOW_BSS_BSSID))
		reply = wsm_dbus_show_bss_bssid(conn, msg, user_data);
	else if (dbus_msg_is_method_call(msg, WSM_DBUS_INTERFACE, WSM_DBUS_CONF_SHOW_STA_STAMAC))
		reply = wsm_dbus_show_sta_stamac(conn, msg, user_data);
	else if (dbus_msg_is_method_call(msg, WSM_DBUS_INTERFACE, WSM_DBUS_CONF_SET_WSM_WATCHDOG_STATE))
		reply = wsm_dbus_set_wsm_watchdog_state(conn, msg, user_data);
	else if (dbus_msg_is_method_call(msg, WSM_DBUS_INTERFACE, WSM_DBUS_CONF_SHOW_WSM_WATCH_DOG_STATE))
		reply = wsm_dbus_show_wsm_watchdog_state(conn, msg, user_data);
	else if (dbus_msg_is_method_call(msg, WSM_DBUS_INTERFACE, WSM_DBUS_CAPWAP_TUNNEL_SHOW_RUNNING))
		reply = wsm_dbus_capwap_tunnel_show_running(conn, msg, user_data);
	else if (dbus_msg_is_method_call(msg, WSM_DBUS_INTERFACE, WSM_DBUS_CONF_METHOD_SET_WSM_ERROR_HANDLE_STATE)){
        reply = wsm_dbus_set_wsm_error_handle_state(conn,msg,user_data);
	}else if(dbus_msg_is_method_call(msg, WSM_DBUS_INTERFACE, WSM_DBUS_CONF_METHOD_CHECKING)){
		reply = wsm_dbus_checking_wsm(conn,msg,user_data);
	}
	else if(dbus_msg_is_method_call(msg, WSM_DBUS_INTERFACE, WSM_DBUS_CONF_METHOD_QUIT)){
		reply = wsm_dbus_method_quit(conn,msg,user_data);
	}
	else if (dbus_msg_is_method_call(msg, WSM_DBUS_INTERFACE, WSM_DBUS_CONF_SET_TUNNEL_WSM_RX_TX))
		reply = wsm_dbus_set_wsm_receive_transmit_func(conn, msg, user_data);

	if (reply)
	{
		dbus_connection_send (conn, reply, NULL);
		dbus_connection_flush(conn);
		dbus_message_unref (reply);
	}

	return DBUS_HANDLER_RESULT_HANDLED ;
}
Beispiel #21
0
const char* EdbusMessage::destination(void) const {
	if(!dm || !dm->msg)
		return NULL;

	return dbus_message_get_destination(dm->msg);
}
Beispiel #22
0
EAPI const char *
eldbus_message_destination_get(const Eldbus_Message *msg)
{
   ELDBUS_MESSAGE_CHECK_RETVAL(msg, NULL);
   return dbus_message_get_destination(msg->dbus_msg);
}
Beispiel #23
0
const gchar *
ibus_message_get_destination (IBusMessage *message)
{
    return dbus_message_get_destination (message);
}