|
Packit Service |
fc05fa |
/*
|
|
Packit Service |
fc05fa |
*
|
|
Packit Service |
fc05fa |
* BlueZ - Bluetooth protocol stack for Linux
|
|
Packit Service |
fc05fa |
*
|
|
Packit Service |
fc05fa |
* Copyright (C) 2005-2008 Marcel Holtmann <marcel@holtmann.org>
|
|
Packit Service |
fc05fa |
*
|
|
Packit Service |
fc05fa |
*
|
|
Packit Service |
fc05fa |
* This library is free software; you can redistribute it and/or
|
|
Packit Service |
fc05fa |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit Service |
fc05fa |
* License as published by the Free Software Foundation; either
|
|
Packit Service |
fc05fa |
* version 2.1 of the License, or (at your option) any later version.
|
|
Packit Service |
fc05fa |
*
|
|
Packit Service |
fc05fa |
* This library is distributed in the hope that it will be useful,
|
|
Packit Service |
fc05fa |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
fc05fa |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit Service |
fc05fa |
* Lesser General Public License for more details.
|
|
Packit Service |
fc05fa |
*
|
|
Packit Service |
fc05fa |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit Service |
fc05fa |
* License along with this library; if not, write to the Free Software
|
|
Packit Service |
fc05fa |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
Packit Service |
fc05fa |
*
|
|
Packit Service |
fc05fa |
*/
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
#ifdef HAVE_CONFIG_H
|
|
Packit Service |
fc05fa |
#include <config.h>
|
|
Packit Service |
fc05fa |
#endif
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
#include <stdio.h>
|
|
Packit Service |
fc05fa |
#include <gio/gio.h>
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
#include "bluetooth-client-glue.h"
|
|
Packit Service |
fc05fa |
#include "bluetooth-agent.h"
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
#define BLUEZ_SERVICE "org.bluez"
|
|
Packit Service |
fc05fa |
#define BLUEZ_AGENT_PATH "/org/bluez/agent/gnome"
|
|
Packit Service |
fc05fa |
#define BLUEZ_MANAGER_PATH "/"
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static const gchar introspection_xml[] =
|
|
Packit Service |
fc05fa |
"<node name='/'>"
|
|
Packit Service |
fc05fa |
" <interface name='org.bluez.Agent1'>"
|
|
Packit Service |
fc05fa |
" <method name='Release'/>"
|
|
Packit Service |
fc05fa |
" <method name='RequestPinCode'>"
|
|
Packit Service |
fc05fa |
" <arg type='o' name='device' direction='in'/>"
|
|
Packit Service |
fc05fa |
" <arg type='s' name='pincode' direction='out'/>"
|
|
Packit Service |
fc05fa |
" </method>"
|
|
Packit Service |
fc05fa |
" <method name='RequestPasskey'>"
|
|
Packit Service |
fc05fa |
" <arg type='o' name='device' direction='in'/>"
|
|
Packit Service |
fc05fa |
" <arg type='u' name='passkey' direction='out'/>"
|
|
Packit Service |
fc05fa |
" </method>"
|
|
Packit Service |
fc05fa |
" <method name='DisplayPasskey'>"
|
|
Packit Service |
fc05fa |
" <arg type='o' name='device' direction='in'/>"
|
|
Packit Service |
fc05fa |
" <arg type='u' name='passkey' direction='in'/>"
|
|
Packit Service |
fc05fa |
" <arg type='q' name='entered' direction='in'/>"
|
|
Packit Service |
fc05fa |
" </method>"
|
|
Packit Service |
fc05fa |
" <method name='DisplayPinCode'>"
|
|
Packit Service |
fc05fa |
" <arg type='o' name='device' direction='in'/>"
|
|
Packit Service |
fc05fa |
" <arg type='s' name='pincode' direction='in'/>"
|
|
Packit Service |
fc05fa |
" </method>"
|
|
Packit Service |
fc05fa |
" <method name='RequestConfirmation'>"
|
|
Packit Service |
fc05fa |
" <arg type='o' name='device' direction='in'/>"
|
|
Packit Service |
fc05fa |
" <arg type='u' name='passkey' direction='in'/>"
|
|
Packit Service |
fc05fa |
" </method>"
|
|
Packit Service |
fc05fa |
" <method name='RequestAuthorization'>"
|
|
Packit Service |
fc05fa |
" <arg type='o' name='device' direction='in'/>"
|
|
Packit Service |
fc05fa |
" </method>"
|
|
Packit Service |
fc05fa |
" <method name='AuthorizeService'>"
|
|
Packit Service |
fc05fa |
" <arg type='o' name='device' direction='in'/>"
|
|
Packit Service |
fc05fa |
" <arg type='s' name='uuid' direction='in'/>"
|
|
Packit Service |
fc05fa |
" </method>"
|
|
Packit Service |
fc05fa |
" <method name='Cancel'/>"
|
|
Packit Service |
fc05fa |
" </interface>"
|
|
Packit Service |
fc05fa |
"</node>";
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
#define BLUETOOTH_AGENT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), \
|
|
Packit Service |
fc05fa |
BLUETOOTH_TYPE_AGENT, BluetoothAgentPrivate))
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
typedef struct _BluetoothAgentPrivate BluetoothAgentPrivate;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
struct _BluetoothAgentPrivate {
|
|
Packit Service |
fc05fa |
GDBusConnection *conn;
|
|
Packit Service |
fc05fa |
gchar *busname;
|
|
Packit Service |
fc05fa |
gchar *path;
|
|
Packit Service |
fc05fa |
AgentManager1 *agent_manager;
|
|
Packit Service |
fc05fa |
GDBusNodeInfo *introspection_data;
|
|
Packit Service |
fc05fa |
guint reg_id;
|
|
Packit Service |
fc05fa |
guint watch_id;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
BluetoothAgentPasskeyFunc pincode_func;
|
|
Packit Service |
fc05fa |
gpointer pincode_data;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
BluetoothAgentDisplayFunc display_func;
|
|
Packit Service |
fc05fa |
gpointer display_data;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
BluetoothAgentDisplayPinCodeFunc display_pincode_func;
|
|
Packit Service |
fc05fa |
gpointer display_pincode_data;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
BluetoothAgentPasskeyFunc passkey_func;
|
|
Packit Service |
fc05fa |
gpointer passkey_data;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
BluetoothAgentConfirmFunc confirm_func;
|
|
Packit Service |
fc05fa |
gpointer confirm_data;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
BluetoothAgentAuthorizeFunc authorize_func;
|
|
Packit Service |
fc05fa |
gpointer authorize_data;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
BluetoothAgentAuthorizeServiceFunc authorize_service_func;
|
|
Packit Service |
fc05fa |
gpointer authorize_service_data;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
BluetoothAgentCancelFunc cancel_func;
|
|
Packit Service |
fc05fa |
gpointer cancel_data;
|
|
Packit Service |
fc05fa |
};
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
enum {
|
|
Packit Service |
fc05fa |
PROP_0,
|
|
Packit Service |
fc05fa |
PROP_PATH,
|
|
Packit Service |
fc05fa |
PROP_LAST
|
|
Packit Service |
fc05fa |
};
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static GParamSpec *props[PROP_LAST];
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static GDBusProxy *
|
|
Packit Service |
fc05fa |
get_device_from_path (BluetoothAgentPrivate *priv,
|
|
Packit Service |
fc05fa |
const char *path)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
Device1 *device;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
device = device1_proxy_new_sync (priv->conn,
|
|
Packit Service |
fc05fa |
G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
|
|
Packit Service |
fc05fa |
BLUEZ_SERVICE,
|
|
Packit Service |
fc05fa |
path,
|
|
Packit Service |
fc05fa |
NULL,
|
|
Packit Service |
fc05fa |
NULL);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
return G_DBUS_PROXY(device);
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
G_DEFINE_TYPE(BluetoothAgent, bluetooth_agent, G_TYPE_OBJECT)
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static gboolean bluetooth_agent_request_pincode(BluetoothAgent *agent,
|
|
Packit Service |
fc05fa |
const char *path, GDBusMethodInvocation *invocation)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
|
|
Packit Service |
fc05fa |
GDBusProxy *device;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
if (priv->pincode_func == NULL)
|
|
Packit Service |
fc05fa |
return FALSE;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
device = get_device_from_path (priv, path);
|
|
Packit Service |
fc05fa |
if (device == NULL)
|
|
Packit Service |
fc05fa |
return FALSE;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv->pincode_func(invocation, device, priv->pincode_data);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_object_unref(device);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
return TRUE;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static gboolean bluetooth_agent_request_passkey(BluetoothAgent *agent,
|
|
Packit Service |
fc05fa |
const char *path, GDBusMethodInvocation *invocation)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
|
|
Packit Service |
fc05fa |
GDBusProxy *device;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
if (priv->passkey_func == NULL)
|
|
Packit Service |
fc05fa |
return FALSE;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
device = get_device_from_path (priv, path);
|
|
Packit Service |
fc05fa |
if (device == NULL)
|
|
Packit Service |
fc05fa |
return FALSE;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv->passkey_func(invocation, device, priv->passkey_data);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_object_unref(device);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
return TRUE;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static gboolean bluetooth_agent_display_passkey(BluetoothAgent *agent,
|
|
Packit Service |
fc05fa |
const char *path, guint passkey, guint16 entered,
|
|
Packit Service |
fc05fa |
GDBusMethodInvocation *invocation)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
|
|
Packit Service |
fc05fa |
GDBusProxy *device;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
if (priv->display_func == NULL)
|
|
Packit Service |
fc05fa |
return FALSE;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
device = get_device_from_path (priv, path);
|
|
Packit Service |
fc05fa |
if (device == NULL)
|
|
Packit Service |
fc05fa |
return FALSE;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv->display_func(invocation, device, passkey, entered,
|
|
Packit Service |
fc05fa |
priv->display_data);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_object_unref(device);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
return TRUE;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static gboolean bluetooth_agent_display_pincode(BluetoothAgent *agent,
|
|
Packit Service |
fc05fa |
const char *path, const char *pincode,
|
|
Packit Service |
fc05fa |
GDBusMethodInvocation *invocation)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
|
|
Packit Service |
fc05fa |
GDBusProxy *device;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
if (priv->display_pincode_func == NULL)
|
|
Packit Service |
fc05fa |
return FALSE;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
device = get_device_from_path (priv, path);
|
|
Packit Service |
fc05fa |
if (device == NULL)
|
|
Packit Service |
fc05fa |
return FALSE;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv->display_pincode_func(invocation, device, pincode,
|
|
Packit Service |
fc05fa |
priv->display_data);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_object_unref(device);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
return TRUE;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static gboolean bluetooth_agent_request_confirmation(BluetoothAgent *agent,
|
|
Packit Service |
fc05fa |
const char *path, guint passkey,
|
|
Packit Service |
fc05fa |
GDBusMethodInvocation *invocation)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
|
|
Packit Service |
fc05fa |
GDBusProxy *device;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
if (priv->confirm_func == NULL)
|
|
Packit Service |
fc05fa |
return FALSE;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
device = get_device_from_path (priv, path);
|
|
Packit Service |
fc05fa |
if (device == NULL)
|
|
Packit Service |
fc05fa |
return FALSE;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv->confirm_func(invocation, device, passkey, priv->confirm_data);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_object_unref(device);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
return TRUE;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static gboolean bluetooth_agent_request_authorization(BluetoothAgent *agent,
|
|
Packit Service |
fc05fa |
const char *path, GDBusMethodInvocation *invocation)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
|
|
Packit Service |
fc05fa |
GDBusProxy *device;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
if (priv->authorize_func == NULL)
|
|
Packit Service |
fc05fa |
return FALSE;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
device = get_device_from_path (priv, path);
|
|
Packit Service |
fc05fa |
if (device == NULL)
|
|
Packit Service |
fc05fa |
return FALSE;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv->authorize_func(invocation, device, priv->authorize_data);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_object_unref(device);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
return TRUE;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static gboolean bluetooth_agent_authorize_service(BluetoothAgent *agent,
|
|
Packit Service |
fc05fa |
const char *path, const char *uuid,
|
|
Packit Service |
fc05fa |
GDBusMethodInvocation *invocation)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
|
|
Packit Service |
fc05fa |
GDBusProxy *device;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
if (priv->authorize_service_func == NULL)
|
|
Packit Service |
fc05fa |
return FALSE;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
device = get_device_from_path (priv, path);
|
|
Packit Service |
fc05fa |
if (device == NULL)
|
|
Packit Service |
fc05fa |
return FALSE;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv->authorize_service_func(invocation, device, uuid,
|
|
Packit Service |
fc05fa |
priv->authorize_service_data);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_object_unref(device);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
return TRUE;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static gboolean bluetooth_agent_cancel(BluetoothAgent *agent,
|
|
Packit Service |
fc05fa |
GDBusMethodInvocation *invocation)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
if (priv->cancel_func == NULL)
|
|
Packit Service |
fc05fa |
return FALSE;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
return priv->cancel_func(invocation, priv->cancel_data);
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static void
|
|
Packit Service |
fc05fa |
register_agent (BluetoothAgentPrivate *priv)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
GError *error = NULL;
|
|
Packit Service |
fc05fa |
gboolean ret;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
ret = agent_manager1_call_register_agent_sync (priv->agent_manager,
|
|
Packit Service |
fc05fa |
priv->path,
|
|
Packit Service |
fc05fa |
"DisplayYesNo",
|
|
Packit Service |
fc05fa |
NULL, &error);
|
|
Packit Service |
fc05fa |
if (ret == FALSE) {
|
|
Packit Service |
fc05fa |
g_printerr ("Agent registration failed: %s\n", error->message);
|
|
Packit Service |
fc05fa |
g_error_free (error);
|
|
Packit Service |
fc05fa |
return;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
ret = agent_manager1_call_request_default_agent_sync (priv->agent_manager,
|
|
Packit Service |
fc05fa |
priv->path,
|
|
Packit Service |
fc05fa |
NULL, &error);
|
|
Packit Service |
fc05fa |
if (ret == FALSE) {
|
|
Packit Service |
fc05fa |
g_printerr ("Agent registration as default failed: %s\n", error->message);
|
|
Packit Service |
fc05fa |
g_error_free (error);
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static void
|
|
Packit Service |
fc05fa |
name_appeared_cb (GDBusConnection *connection,
|
|
Packit Service |
fc05fa |
const gchar *name,
|
|
Packit Service |
fc05fa |
const gchar *name_owner,
|
|
Packit Service |
fc05fa |
BluetoothAgent *agent)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_free (priv->busname);
|
|
Packit Service |
fc05fa |
priv->busname = g_strdup (name_owner);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv->agent_manager = agent_manager1_proxy_new_sync (priv->conn,
|
|
Packit Service |
fc05fa |
G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
|
|
Packit Service |
fc05fa |
BLUEZ_SERVICE,
|
|
Packit Service |
fc05fa |
"/org/bluez",
|
|
Packit Service |
fc05fa |
NULL,
|
|
Packit Service |
fc05fa |
NULL);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
if (priv->reg_id > 0)
|
|
Packit Service |
fc05fa |
register_agent (priv);
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static void
|
|
Packit Service |
fc05fa |
name_vanished_cb (GDBusConnection *connection,
|
|
Packit Service |
fc05fa |
const gchar *name,
|
|
Packit Service |
fc05fa |
BluetoothAgent *agent)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_free (priv->busname);
|
|
Packit Service |
fc05fa |
priv->busname = NULL;
|
|
Packit Service |
fc05fa |
g_clear_object (&priv->agent_manager);
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static void
|
|
Packit Service |
fc05fa |
bluetooth_agent_get_property (GObject *object,
|
|
Packit Service |
fc05fa |
guint prop_id,
|
|
Packit Service |
fc05fa |
GValue *value,
|
|
Packit Service |
fc05fa |
GParamSpec *pspec)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgent *agent = BLUETOOTH_AGENT (object);
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE (agent);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
switch (prop_id) {
|
|
Packit Service |
fc05fa |
case PROP_PATH:
|
|
Packit Service |
fc05fa |
g_value_set_string (value, priv->path);
|
|
Packit Service |
fc05fa |
break;
|
|
Packit Service |
fc05fa |
default:
|
|
Packit Service |
fc05fa |
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static void
|
|
Packit Service |
fc05fa |
bluetooth_agent_set_property (GObject *object,
|
|
Packit Service |
fc05fa |
guint prop_id,
|
|
Packit Service |
fc05fa |
const GValue *value,
|
|
Packit Service |
fc05fa |
GParamSpec *pspec)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgent *agent = BLUETOOTH_AGENT (object);
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE (agent);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
switch (prop_id) {
|
|
Packit Service |
fc05fa |
case PROP_PATH:
|
|
Packit Service |
fc05fa |
priv->path = g_value_dup_string (value);
|
|
Packit Service |
fc05fa |
break;
|
|
Packit Service |
fc05fa |
default:
|
|
Packit Service |
fc05fa |
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static void bluetooth_agent_init(BluetoothAgent *agent)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv->introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL);
|
|
Packit Service |
fc05fa |
g_assert (priv->introspection_data);
|
|
Packit Service |
fc05fa |
priv->conn = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
|
|
Packit Service |
fc05fa |
priv->watch_id = g_bus_watch_name_on_connection (priv->conn,
|
|
Packit Service |
fc05fa |
BLUEZ_SERVICE,
|
|
Packit Service |
fc05fa |
G_BUS_NAME_WATCHER_FLAGS_NONE,
|
|
Packit Service |
fc05fa |
(GBusNameAppearedCallback) name_appeared_cb,
|
|
Packit Service |
fc05fa |
(GBusNameVanishedCallback) name_vanished_cb,
|
|
Packit Service |
fc05fa |
agent,
|
|
Packit Service |
fc05fa |
NULL);
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static void bluetooth_agent_finalize(GObject *agent)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
bluetooth_agent_unregister (BLUETOOTH_AGENT (agent));
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_bus_unwatch_name (priv->watch_id);
|
|
Packit Service |
fc05fa |
g_free (priv->busname);
|
|
Packit Service |
fc05fa |
g_dbus_node_info_unref (priv->introspection_data);
|
|
Packit Service |
fc05fa |
g_object_unref (priv->conn);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
G_OBJECT_CLASS(bluetooth_agent_parent_class)->finalize(agent);
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static void bluetooth_agent_class_init(BluetoothAgentClass *klass)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
GObjectClass *object_class = (GObjectClass *) klass;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_type_class_add_private(klass, sizeof(BluetoothAgentPrivate));
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
object_class->finalize = bluetooth_agent_finalize;
|
|
Packit Service |
fc05fa |
object_class->set_property = bluetooth_agent_set_property;
|
|
Packit Service |
fc05fa |
object_class->get_property = bluetooth_agent_get_property;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
props[PROP_PATH] =
|
|
Packit Service |
fc05fa |
g_param_spec_string ("path", "Path",
|
|
Packit Service |
fc05fa |
"Object path for the agent",
|
|
Packit Service |
fc05fa |
BLUEZ_AGENT_PATH,
|
|
Packit Service |
fc05fa |
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_object_class_install_properties (object_class,
|
|
Packit Service |
fc05fa |
PROP_LAST,
|
|
Packit Service |
fc05fa |
props);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
BluetoothAgent *
|
|
Packit Service |
fc05fa |
bluetooth_agent_new (const char *path)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
if (path != NULL)
|
|
Packit Service |
fc05fa |
return BLUETOOTH_AGENT (g_object_new (BLUETOOTH_TYPE_AGENT,
|
|
Packit Service |
fc05fa |
"path", path,
|
|
Packit Service |
fc05fa |
NULL));
|
|
Packit Service |
fc05fa |
else
|
|
Packit Service |
fc05fa |
return BLUETOOTH_AGENT (g_object_new (BLUETOOTH_TYPE_AGENT,
|
|
Packit Service |
fc05fa |
NULL));
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static void
|
|
Packit Service |
fc05fa |
handle_method_call (GDBusConnection *connection,
|
|
Packit Service |
fc05fa |
const gchar *sender,
|
|
Packit Service |
fc05fa |
const gchar *object_path,
|
|
Packit Service |
fc05fa |
const gchar *interface_name,
|
|
Packit Service |
fc05fa |
const gchar *method_name,
|
|
Packit Service |
fc05fa |
GVariant *parameters,
|
|
Packit Service |
fc05fa |
GDBusMethodInvocation *invocation,
|
|
Packit Service |
fc05fa |
gpointer user_data)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgent *agent = (BluetoothAgent *) user_data;
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
if (g_str_equal (sender, priv->busname) == FALSE) {
|
|
Packit Service |
fc05fa |
GError *error = NULL;
|
|
Packit Service |
fc05fa |
error = g_error_new (AGENT_ERROR, AGENT_ERROR_REJECT,
|
|
Packit Service |
fc05fa |
"Permission Denied");
|
|
Packit Service |
fc05fa |
g_dbus_method_invocation_take_error(invocation, error);
|
|
Packit Service |
fc05fa |
return;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
if (g_strcmp0 (method_name, "Release") == 0) {
|
|
Packit Service |
fc05fa |
g_dbus_method_invocation_return_value (invocation, NULL);
|
|
Packit Service |
fc05fa |
} else if (g_strcmp0 (method_name, "RequestPinCode") == 0) {
|
|
Packit Service |
fc05fa |
const char *path;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_variant_get (parameters, "(&o)", &path);
|
|
Packit Service |
fc05fa |
bluetooth_agent_request_pincode (agent, path, invocation);
|
|
Packit Service |
fc05fa |
} else if (g_strcmp0 (method_name, "RequestPasskey") == 0) {
|
|
Packit Service |
fc05fa |
const char *path;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_variant_get (parameters, "(&o)", &path);
|
|
Packit Service |
fc05fa |
bluetooth_agent_request_passkey (agent, path, invocation);
|
|
Packit Service |
fc05fa |
} else if (g_strcmp0 (method_name, "DisplayPasskey") == 0) {
|
|
Packit Service |
fc05fa |
const char *path;
|
|
Packit Service |
fc05fa |
guint32 passkey;
|
|
Packit Service |
fc05fa |
guint16 entered;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_variant_get (parameters, "(&ouq)", &path, &passkey, &entered);
|
|
Packit Service |
fc05fa |
bluetooth_agent_display_passkey (agent, path, passkey, entered, invocation);
|
|
Packit Service |
fc05fa |
} else if (g_strcmp0 (method_name, "DisplayPinCode") == 0) {
|
|
Packit Service |
fc05fa |
const char *path;
|
|
Packit Service |
fc05fa |
const char *pincode;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_variant_get (parameters, "(&o&s)", &path, &pincode);
|
|
Packit Service |
fc05fa |
bluetooth_agent_display_pincode (agent, path, pincode, invocation);
|
|
Packit Service |
fc05fa |
} else if (g_strcmp0 (method_name, "RequestConfirmation") == 0) {
|
|
Packit Service |
fc05fa |
const char *path;
|
|
Packit Service |
fc05fa |
guint32 passkey;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_variant_get (parameters, "(&ou)", &path, &passkey);
|
|
Packit Service |
fc05fa |
bluetooth_agent_request_confirmation (agent, path, passkey, invocation);
|
|
Packit Service |
fc05fa |
} else if (g_strcmp0 (method_name, "RequestAuthorization") == 0) {
|
|
Packit Service |
fc05fa |
const char *path;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_variant_get (parameters, "(&o)", &path);
|
|
Packit Service |
fc05fa |
bluetooth_agent_request_authorization (agent, path, invocation);
|
|
Packit Service |
fc05fa |
} else if (g_strcmp0 (method_name, "AuthorizeService") == 0) {
|
|
Packit Service |
fc05fa |
const char *path;
|
|
Packit Service |
fc05fa |
const char *uuid;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_variant_get (parameters, "(&o&s)", &path, &uuid);
|
|
Packit Service |
fc05fa |
bluetooth_agent_authorize_service (agent, path, uuid, invocation);
|
|
Packit Service |
fc05fa |
} else if (g_strcmp0 (method_name, "Cancel") == 0) {
|
|
Packit Service |
fc05fa |
bluetooth_agent_cancel (agent, invocation);
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static const GDBusInterfaceVTable interface_vtable =
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
handle_method_call,
|
|
Packit Service |
fc05fa |
NULL, /* GetProperty */
|
|
Packit Service |
fc05fa |
NULL, /* SetProperty */
|
|
Packit Service |
fc05fa |
};
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
gboolean bluetooth_agent_register(BluetoothAgent *agent)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv;
|
|
Packit Service |
fc05fa |
GError *error = NULL;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_return_val_if_fail (BLUETOOTH_IS_AGENT (agent), FALSE);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv = BLUETOOTH_AGENT_GET_PRIVATE (agent);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv->reg_id = g_dbus_connection_register_object (priv->conn,
|
|
Packit Service |
fc05fa |
priv->path,
|
|
Packit Service |
fc05fa |
priv->introspection_data->interfaces[0],
|
|
Packit Service |
fc05fa |
&interface_vtable,
|
|
Packit Service |
fc05fa |
agent,
|
|
Packit Service |
fc05fa |
NULL,
|
|
Packit Service |
fc05fa |
&error);
|
|
Packit Service |
fc05fa |
if (priv->reg_id == 0) {
|
|
Packit Service |
fc05fa |
g_warning ("Failed to register object: %s", error->message);
|
|
Packit Service |
fc05fa |
g_error_free (error);
|
|
Packit Service |
fc05fa |
error = NULL;
|
|
Packit Service |
fc05fa |
return FALSE;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
if (priv->agent_manager != NULL)
|
|
Packit Service |
fc05fa |
register_agent (priv);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
return TRUE;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
static gboolean
|
|
Packit Service |
fc05fa |
error_matches_remote_error (GError *error,
|
|
Packit Service |
fc05fa |
const char *remote_error)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
char *str;
|
|
Packit Service |
fc05fa |
gboolean ret;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
if (error == NULL)
|
|
Packit Service |
fc05fa |
return FALSE;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
str = g_dbus_error_get_remote_error (error);
|
|
Packit Service |
fc05fa |
ret = (g_strcmp0 (str, remote_error) == 0);
|
|
Packit Service |
fc05fa |
g_free (str);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
return ret;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
gboolean bluetooth_agent_unregister(BluetoothAgent *agent)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv;
|
|
Packit Service |
fc05fa |
GError *error = NULL;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_return_val_if_fail (BLUETOOTH_IS_AGENT (agent), FALSE);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
if (priv->agent_manager == NULL)
|
|
Packit Service |
fc05fa |
return FALSE;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
if (agent_manager1_call_unregister_agent_sync (priv->agent_manager,
|
|
Packit Service |
fc05fa |
priv->path,
|
|
Packit Service |
fc05fa |
NULL, &error) == FALSE) {
|
|
Packit Service |
fc05fa |
/* Ignore errors if the adapter is gone */
|
|
Packit Service |
fc05fa |
if (g_error_matches (error, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD) == FALSE &&
|
|
Packit Service |
fc05fa |
error_matches_remote_error (error, "org.bluez.Error.DoesNotExist") == FALSE) {
|
|
Packit Service |
fc05fa |
g_printerr ("Agent unregistration failed: %s '%s'\n",
|
|
Packit Service |
fc05fa |
error->message,
|
|
Packit Service |
fc05fa |
g_quark_to_string (error->domain));
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
g_error_free(error);
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_object_unref(priv->agent_manager);
|
|
Packit Service |
fc05fa |
priv->agent_manager = NULL;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_free(priv->path);
|
|
Packit Service |
fc05fa |
priv->path = NULL;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_free(priv->busname);
|
|
Packit Service |
fc05fa |
priv->busname = NULL;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
if (priv->reg_id > 0) {
|
|
Packit Service |
fc05fa |
g_dbus_connection_unregister_object (priv->conn, priv->reg_id);
|
|
Packit Service |
fc05fa |
priv->reg_id = 0;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
return TRUE;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
void bluetooth_agent_set_pincode_func(BluetoothAgent *agent,
|
|
Packit Service |
fc05fa |
BluetoothAgentPasskeyFunc func, gpointer data)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_return_if_fail (BLUETOOTH_IS_AGENT (agent));
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv->pincode_func = func;
|
|
Packit Service |
fc05fa |
priv->pincode_data = data;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
void bluetooth_agent_set_passkey_func(BluetoothAgent *agent,
|
|
Packit Service |
fc05fa |
BluetoothAgentPasskeyFunc func, gpointer data)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_return_if_fail (BLUETOOTH_IS_AGENT (agent));
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv->passkey_func = func;
|
|
Packit Service |
fc05fa |
priv->passkey_data = data;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
void bluetooth_agent_set_display_func(BluetoothAgent *agent,
|
|
Packit Service |
fc05fa |
BluetoothAgentDisplayFunc func, gpointer data)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_return_if_fail (BLUETOOTH_IS_AGENT (agent));
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv->display_func = func;
|
|
Packit Service |
fc05fa |
priv->display_data = data;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
void bluetooth_agent_set_display_pincode_func(BluetoothAgent *agent,
|
|
Packit Service |
fc05fa |
BluetoothAgentDisplayPinCodeFunc func, gpointer data)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_return_if_fail (BLUETOOTH_IS_AGENT (agent));
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv->display_pincode_func = func;
|
|
Packit Service |
fc05fa |
priv->display_pincode_data = data;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
void bluetooth_agent_set_confirm_func(BluetoothAgent *agent,
|
|
Packit Service |
fc05fa |
BluetoothAgentConfirmFunc func, gpointer data)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_return_if_fail (BLUETOOTH_IS_AGENT (agent));
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv->confirm_func = func;
|
|
Packit Service |
fc05fa |
priv->confirm_data = data;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
void bluetooth_agent_set_authorize_func(BluetoothAgent *agent,
|
|
Packit Service |
fc05fa |
BluetoothAgentAuthorizeFunc func, gpointer data)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_return_if_fail (BLUETOOTH_IS_AGENT (agent));
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv->authorize_func = func;
|
|
Packit Service |
fc05fa |
priv->authorize_data = data;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
void bluetooth_agent_set_authorize_service_func(BluetoothAgent *agent,
|
|
Packit Service |
fc05fa |
BluetoothAgentAuthorizeServiceFunc func, gpointer data)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_return_if_fail (BLUETOOTH_IS_AGENT (agent));
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv->authorize_service_func = func;
|
|
Packit Service |
fc05fa |
priv->authorize_service_data = data;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
void bluetooth_agent_set_cancel_func(BluetoothAgent *agent,
|
|
Packit Service |
fc05fa |
BluetoothAgentCancelFunc func, gpointer data)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
BluetoothAgentPrivate *priv;
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
g_return_if_fail (BLUETOOTH_IS_AGENT (agent));
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv = BLUETOOTH_AGENT_GET_PRIVATE(agent);
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
priv->cancel_func = func;
|
|
Packit Service |
fc05fa |
priv->cancel_data = data;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
GQuark bluetooth_agent_error_quark(void)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
static GQuark quark = 0;
|
|
Packit Service |
fc05fa |
if (!quark)
|
|
Packit Service |
fc05fa |
quark = g_quark_from_static_string("agent");
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
return quark;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC }
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
GType bluetooth_agent_error_get_type(void)
|
|
Packit Service |
fc05fa |
{
|
|
Packit Service |
fc05fa |
static GType etype = 0;
|
|
Packit Service |
fc05fa |
if (etype == 0) {
|
|
Packit Service |
fc05fa |
static const GEnumValue values[] = {
|
|
Packit Service |
fc05fa |
ENUM_ENTRY(AGENT_ERROR_REJECT, "Rejected"),
|
|
Packit Service |
fc05fa |
{ 0, 0, 0 }
|
|
Packit Service |
fc05fa |
};
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
etype = g_enum_register_static("agent", values);
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|
|
Packit Service |
fc05fa |
return etype;
|
|
Packit Service |
fc05fa |
}
|
|
Packit Service |
fc05fa |
|