函数

gioDBusMessageFilterFunction

自:2.26

声明

GDBusMessage*
(* GDBusMessageFilterFunction) (
  GDBusConnection* connection,
  GDBusMessage* message,
  gboolean incoming,
  gpointer user_data
)

描述 [源代码]

g_dbus_connection_add_filter() 中使用函数的签名。

过滤函数接收一个 GDBusMessage 并期望返回一个 GDBusMessage。不修改消息的被动过滤函数可以简单地返回 message 对象。

static GDBusMessage *
passive_filter (GDBusConnection *connection
                GDBusMessage    *message,
                gboolean         incoming,
                gpointer         user_data)
{
  // inspect @message
  return message;
}

想要丢弃消息的过滤函数可以简单地返回 NULL

static GDBusMessage *
drop_filter (GDBusConnection *connection
             GDBusMessage    *message,
             gboolean         incoming,
             gpointer         user_data)
{
  if (should_drop_message)
    {
      g_object_unref (message);
      message = NULL;
    }
  return message;
}

最后,过滤函数可以通过复制来修改消息。

static GDBusMessage *
modifying_filter (GDBusConnection *connection
                  GDBusMessage    *message,
                  gboolean         incoming,
                  gpointer         user_data)
{
  GDBusMessage *copy;
  GError *error;

  error = NULL;
  copy = g_dbus_message_copy (message, &error);
  // handle @error being set
  g_object_unref (message);

  // modify @copy

  return copy;
}

如果返回的 GDBusMessagemessage 不同且不能在 connection 上发送(它可能使用不兼容 connection 的功能,如文件描述符),则会在标准错误中记录警告。应用程序可以使用 g_dbus_message_to_blob() 检查此内容,并传递从 connection 获取的 GDBusCapabilityFlags 值。

自:2.26

参数

connection

类型: GDBusConnection

一个 GDBusConnection

数据由函数的调用者拥有。
message

类型: GDBusMessage

一个锁定的 GDBusMessage,过滤函数将拥有这个对象。

被调用的函数拥有数据,并负责释放它。
incoming

类型: gboolean

TRUE 如果它是来自其他对等方的消息,FALSE 如果它是发送到其他对等方的消息。

user_data

类型: gpointer

添加过滤时传递的用户数据。

该参数可以是 NULL
数据由函数的调用者拥有。

返回值

类型: GDBusMessage

一个将被 g_object_unref() 释放的 GDBusMessageNULL 以丢弃消息。被动过滤函数可以简单地返回传递的 message 对象。

函数的调用者拥有数据,并负责释放它。
返回值可以是 NULL