summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgitjackolantern <scottjconover@yahoo.com>2015-08-31 17:49:43 -0700
committergitjackolantern <scottjconover@yahoo.com>2015-08-31 17:49:43 -0700
commitdcd05464ebfa1caa4f5c09cfb0fe0b7350d0ad2f (patch)
tree6379f85ef86fbd36d173c661e0115071fb46a13c
parentb79fbe90bdef58805765850861cf5ca6a38bf899 (diff)
parente3b7186eccc82a2733e75a51fe3e0cb3f56014b5 (diff)
downloadbluez-tools-dcd05464ebfa1caa4f5c09cfb0fe0b7350d0ad2f.tar.gz
Merge pull request #3 from spellingmistake/master
Add property to automatically accept incoming files
-rw-r--r--src/bt-obex.c4
-rw-r--r--src/lib/obex_agent.c42
-rw-r--r--src/lib/obex_agent.h2
3 files changed, 37 insertions, 11 deletions
diff --git a/src/bt-obex.c b/src/bt-obex.c
index 5369b80..6bcdce1 100644
--- a/src/bt-obex.c
+++ b/src/bt-obex.c
@@ -377,6 +377,7 @@ void _agent_approved_callback(ObexAgent *obex_agent, const gchar* obex_transfer_
/* Main arguments */
static gchar *adapter_arg = NULL;
static gboolean server_arg = FALSE;
+static gboolean auto_accept = FALSE;
static gchar *server_path_arg = NULL;
static gboolean opp_arg = FALSE;
static gchar *opp_device_arg = NULL;
@@ -386,6 +387,7 @@ static gchar *ftp_arg = NULL;
static GOptionEntry entries[] = {
{"adapter", 'a', 0, G_OPTION_ARG_STRING, &adapter_arg, "Adapter name or MAC", "<name|mac>"},
{"server", 's', 0, G_OPTION_ARG_NONE, &server_arg, "Register self at OBEX server", NULL},
+ {"auto-accept", 'y', 0, G_OPTION_ARG_NONE, &auto_accept, "Automatically accept incoming files", NULL},
{"opp", 'p', 0, G_OPTION_ARG_NONE, &opp_arg, "Send file to remote device", NULL},
{"ftp", 'f', 0, G_OPTION_ARG_STRING, &ftp_arg, "Start FTP session with remote device", "<name|mac>"},
{NULL}
@@ -496,7 +498,7 @@ int main(int argc, char *argv[])
guint obex_server_object_id = g_dbus_connection_signal_subscribe(session_conn, "org.bluez.obex", "org.freedesktop.DBus.ObjectManager", NULL, NULL, NULL, G_DBUS_SIGNAL_FLAGS_NONE, _obex_server_object_manager_handler, NULL, NULL);
guint obex_server_properties_id = g_dbus_connection_signal_subscribe(session_conn, "org.bluez.obex", "org.freedesktop.DBus.Properties", "PropertiesChanged", NULL, NULL, G_DBUS_SIGNAL_FLAGS_NONE, _obex_server_properties_handler, NULL, NULL);
- ObexAgent *agent = obex_agent_new(root_folder);
+ ObexAgent *agent = obex_agent_new(root_folder, auto_accept);
_root_path = g_strdup(root_folder);
g_free(root_folder);
obex_agent_set_approved_callback(agent, _agent_approved_callback, NULL);
diff --git a/src/lib/obex_agent.c b/src/lib/obex_agent.c
index f835f04..b539a77 100644
--- a/src/lib/obex_agent.c
+++ b/src/lib/obex_agent.c
@@ -41,6 +41,7 @@
struct _ObexAgentPrivate {
gchar *root_folder;
+ gboolean auto_accept;
gchar *current_name;
guint registration_id;
void (*agent_released_callback)(ObexAgent *, gpointer);
@@ -54,6 +55,7 @@ G_DEFINE_TYPE_WITH_PRIVATE(ObexAgent, obex_agent, G_TYPE_OBJECT);
enum {
PROP_0,
PROP_ROOT_FOLDER, /* readwrite, construct only */
+ PROP_AUTO_ACCPET, /* readwrite, construct only */
};
static const gchar *_obex_agent_introspect_xml = "<node name=\"/org/blueztools/obex\">\n\t<interface name=\"org.bluez.obex.Agent1\">\n\t\t<method name=\"Release\">\n\t\t</method>\n\t\t<method name=\"AuthorizePush\">\n\t\t\t<arg name=\"transfer\" direction=\"in\" type=\"o\"/>\n\t\t\t<arg name=\"filepath\" direction=\"out\" type=\"s\"/>\n\t\t</method>\n\t\t<method name=\"Cancel\">\n\t\t</method>\n\t</interface>\n</node>\n";
@@ -112,7 +114,16 @@ static void obex_agent_class_init(ObexAgentClass *klass)
/* string RootFolder [readwrite, construct only] */
pspec = g_param_spec_string("RootFolder", "root_folder", "Root folder location", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
g_object_class_install_property(gobject_class, PROP_ROOT_FOLDER, pspec);
-
+
+ if (pspec) {
+ g_param_spec_unref(pspec);
+ pspec = NULL;
+ }
+
+ /* boolean AutoAccept [readwrite, construct only] */
+ pspec = g_param_spec_boolean("AutoAccept", "auto_accept", "Automatically accept incoming files", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
+ g_object_class_install_property(gobject_class, PROP_AUTO_ACCPET, pspec);
+
if (pspec)
g_param_spec_unref(pspec);
}
@@ -127,6 +138,7 @@ static void obex_agent_init(ObexAgent *self)
self->priv->user_data = NULL;
self->priv->agent_approved_callback = NULL;
self->priv->approved_user_data = NULL;
+ self->priv->auto_accept = FALSE;
GError *error = NULL;
GDBusInterfaceVTable obex_agent_table;
@@ -151,6 +163,10 @@ static void _obex_agent_get_property(GObject *object, guint property_id, GValue
g_value_set_string(value, self->priv->root_folder);
break;
+ case PROP_AUTO_ACCPET:
+ g_value_set_boolean(value, self->priv->auto_accept);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
break;
@@ -166,6 +182,10 @@ static void _obex_agent_set_property(GObject *object, guint property_id, const G
self->priv->root_folder = g_value_dup_string(value);
break;
+ case PROP_AUTO_ACCPET:
+ self->priv->auto_accept = g_value_get_boolean(value);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
break;
@@ -173,9 +193,9 @@ static void _obex_agent_set_property(GObject *object, guint property_id, const G
}
/* Constructor */
-ObexAgent *obex_agent_new(const gchar *root_folder)
+ObexAgent *obex_agent_new(const gchar *root_folder, const gboolean auto_accept)
{
- return g_object_new(OBEX_AGENT_TYPE, "RootFolder", root_folder, NULL);
+ return g_object_new(OBEX_AGENT_TYPE, "RootFolder", root_folder, "AutoAccept", auto_accept, NULL);
}
/* Methods */
static void _obex_agent_method_call_func(GDBusConnection *connection, const gchar *sender, const gchar *object_path, const gchar *interface_name, const gchar *method_name, GVariant *parameters, GDBusMethodInvocation *invocation, gpointer user_data)
@@ -199,12 +219,16 @@ static void _obex_agent_method_call_func(GDBusConnection *connection, const gcha
g_object_unref(transfer_t);
gchar yn[4] = {0,};
- g_print("Accept (yes/no)? ");
- errno = 0;
- if (scanf("%3s", yn) == EOF && errno)
- {
- g_warning("%s\n", strerror(errno));
- }
+ if (TRUE == self->priv->auto_accept)
+ yn[0] = 'y';
+ else {
+ g_print("Accept (yes/no)? ");
+ errno = 0;
+ if (scanf("%3s", yn) == EOF && errno)
+ {
+ g_warning("%s\n", strerror(errno));
+ }
+ }
if (g_strcmp0(yn, "y") == 0 || g_strcmp0(yn, "yes") == 0)
{
// IMPORTANT NOTE!
diff --git a/src/lib/obex_agent.h b/src/lib/obex_agent.h
index 981dc46..385d5f0 100644
--- a/src/lib/obex_agent.h
+++ b/src/lib/obex_agent.h
@@ -71,7 +71,7 @@ typedef void (*ObexAgentApprovedCallback)(ObexAgent *obex_agent, const gchar* ob
/*
* Constructor
*/
-ObexAgent *obex_agent_new(const gchar *root_folder);
+ObexAgent *obex_agent_new(const gchar *root_folder, const gboolean auto_accept);
/*
* Method definitions