[gnome-bluetooth/gnome-2-28] Add support for Error callbacks to ObexAgent
- From: Bastien Nocera <hadess src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-bluetooth/gnome-2-28] Add support for Error callbacks to ObexAgent
- Date: Mon, 14 Dec 2009 16:29:06 +0000 (UTC)
commit b1be33deebb0a425d7ab6bbbaa5d8849c8704fe0
Author: Bastien Nocera <hadess hadess net>
Date: Mon Dec 14 15:04:18 2009 +0000
Add support for Error callbacks to ObexAgent
lib/obex-agent.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
lib/obex-agent.h | 7 ++++++-
lib/obex-agent.xml | 6 ++++++
3 files changed, 60 insertions(+), 1 deletions(-)
---
diff --git a/lib/obex-agent.c b/lib/obex-agent.c
index 276fcb3..b53c2cc 100644
--- a/lib/obex-agent.c
+++ b/lib/obex-agent.c
@@ -65,6 +65,9 @@ struct _ObexAgentPrivate {
ObexAgentCompleteFunc complete_func;
gpointer complete_data;
+
+ ObexAgentErrorFunc error_func;
+ gpointer error_data;
};
G_DEFINE_TYPE(ObexAgent, obex_agent, G_TYPE_OBJECT)
@@ -198,6 +201,40 @@ static gboolean obex_agent_release(ObexAgent *agent,
return result;
}
+static gboolean obex_agent_error(ObexAgent *agent,
+ const char *path,
+ const char *message,
+ DBusGMethodInvocation *context)
+{
+ ObexAgentPrivate *priv = OBEX_AGENT_GET_PRIVATE(agent);
+ char *sender = dbus_g_method_get_sender(context);
+ gboolean result = FALSE;
+
+ DBG("agent %p sender %s", agent, sender);
+
+ if (g_str_equal(sender, priv->busname) == FALSE) {
+ g_free (sender);
+ return FALSE;
+ }
+
+ g_free (sender);
+
+ if (priv->error_func) {
+ DBusGProxy *proxy;
+
+ proxy = dbus_g_proxy_new_for_name(connection, OBEX_SERVICE,
+ path, OBEX_TRANSFER_INTERFACE);
+
+ result = priv->error_func(context, proxy, message,
+ priv->progress_data);
+
+ g_object_unref(proxy);
+ } else
+ dbus_g_method_return(context);
+
+ return result;
+}
+
#include "obex-agent-glue.h"
static void obex_agent_init(ObexAgent *agent)
@@ -331,3 +368,14 @@ void obex_agent_set_complete_func(ObexAgent *agent,
priv->complete_func = func;
priv->complete_data = data;
}
+
+void obex_agent_set_error_func(ObexAgent *agent,
+ ObexAgentErrorFunc func, gpointer data)
+{
+ ObexAgentPrivate *priv = OBEX_AGENT_GET_PRIVATE(agent);
+
+ DBG("agent %p", agent);
+
+ priv->error_func = func;
+ priv->error_data = data;
+}
diff --git a/lib/obex-agent.h b/lib/obex-agent.h
index e8c8a61..fbdb6bd 100644
--- a/lib/obex-agent.h
+++ b/lib/obex-agent.h
@@ -67,6 +67,10 @@ typedef gboolean (*ObexAgentProgressFunc) (DBusGMethodInvocation *context,
guint64 transferred, gpointer data);
typedef gboolean (*ObexAgentCompleteFunc) (DBusGMethodInvocation *context,
DBusGProxy *transfer, gpointer data);
+typedef gboolean (*ObexAgentErrorFunc) (DBusGMethodInvocation *context,
+ DBusGProxy *transfer,
+ const char *message,
+ gpointer data);
void obex_agent_set_release_func(ObexAgent *agent,
ObexAgentReleaseFunc func, gpointer data);
@@ -76,7 +80,8 @@ void obex_agent_set_progress_func(ObexAgent *agent,
ObexAgentProgressFunc func, gpointer data);
void obex_agent_set_complete_func(ObexAgent *agent,
ObexAgentCompleteFunc func, gpointer data);
-
+void obex_agent_set_error_func(ObexAgent *agent,
+ ObexAgentErrorFunc func, gpointer data);
G_END_DECLS
#endif /* __OBEX_AGENT_H */
diff --git a/lib/obex-agent.xml b/lib/obex-agent.xml
index 540a926..082ca95 100644
--- a/lib/obex-agent.xml
+++ b/lib/obex-agent.xml
@@ -22,5 +22,11 @@
<method name="Release">
<annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
</method>
+
+ <method name="Error">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ <arg type="o" name="transfer"/>
+ <arg type="s" name="message"/>
+ </method>
</interface>
</node>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]