summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Orlenko <zxteam@gmail.com>2010-08-06 20:04:44 +1100
committerAlexander Orlenko <zxteam@gmail.com>2010-08-06 20:04:44 +1100
commit75eae0453ceffc4507fc6a5aca7aebebfcd8c521 (patch)
treea28dcba95d9f98bea30a37a993556b99bbbc64f8
parentd1c224a0a9b4784ace2bcc6d47853e7be14b37f9 (diff)
downloadbluez-tools-75eae0453ceffc4507fc6a5aca7aebebfcd8c521.tar.gz
Some improvements in bt-obex
Added SIGINT && SIGTERM handlers to bt-agent. TODO: add this in monitor
-rwxr-xr-xcontrib/gen-dbus-gobject.pl4
-rwxr-xr-xcontrib/generate-all.sh26
-rw-r--r--src/bt-agent.c46
-rw-r--r--src/bt-obex.c2
-rw-r--r--src/lib/agent.c23
-rw-r--r--src/lib/device.c4
6 files changed, 82 insertions, 23 deletions
diff --git a/contrib/gen-dbus-gobject.pl b/contrib/gen-dbus-gobject.pl
index 002b0b4..c09c03f 100755
--- a/contrib/gen-dbus-gobject.pl
+++ b/contrib/gen-dbus-gobject.pl
@@ -796,7 +796,7 @@ EOT
$properties_registration .= "\tpspec = g_param_spec_string(\"$property\", NULL, NULL, NULL, ".($p{'mode'} eq 'readonly' ? 'G_PARAM_READABLE' : 'G_PARAM_READWRITE').");\n";
$properties_init .=
"\tif (g_hash_table_lookup(properties, \"$property\")) {\n".
- "\t\tself->priv->$property_var = (gchar *)g_value_dup_boxed(g_hash_table_lookup(properties, \"$property\"));\n".
+ "\t\tself->priv->$property_var = (gchar *) g_value_dup_boxed(g_hash_table_lookup(properties, \"$property\"));\n".
"\t} else {\n".
"\t\tself->priv->$property_var = g_strdup(\"undefined\");\n".
"\t}\n";
@@ -804,7 +804,7 @@ EOT
$properties_free .= "\tg_free(self->priv->$property_var);\n";
$properties_changed_handler .=
"\t\tg_free(self->priv->$property_var);\n".
- "\t\tself->priv->$property_var = (gchar *)g_value_dup_boxed(value);\n";
+ "\t\tself->priv->$property_var = (gchar *) g_value_dup_boxed(value);\n";
} elsif ($p{'type'} eq 'array{object}') {
$properties_registration .= "\tpspec = g_param_spec_boxed(\"$property\", NULL, NULL, G_TYPE_PTR_ARRAY, ".($p{'mode'} eq 'readonly' ? 'G_PARAM_READABLE' : 'G_PARAM_READWRITE').");\n";
$properties_init .=
diff --git a/contrib/generate-all.sh b/contrib/generate-all.sh
index 30b6c73..1f70e2f 100755
--- a/contrib/generate-all.sh
+++ b/contrib/generate-all.sh
@@ -3,28 +3,28 @@
# BlueZ API
# adapter-api.txt
-./gen-dbus-gobject.pl -header bluez-api-4.66-fixed/adapter-api.txt > ../src/lib/adapter.h
-./gen-dbus-gobject.pl -source bluez-api-4.66-fixed/adapter-api.txt > ../src/lib/adapter.c
+./gen-dbus-gobject.pl -header bluez-api-4.66-fixed/adapter-api.txt > ../src/lib/bluez/adapter.h
+./gen-dbus-gobject.pl -source bluez-api-4.66-fixed/adapter-api.txt > ../src/lib/bluez/adapter.c
# audio-api.txt
-./gen-dbus-gobject.pl -header bluez-api-4.66-fixed/audio-api.txt > ../src/lib/audio.h
-./gen-dbus-gobject.pl -source bluez-api-4.66-fixed/audio-api.txt > ../src/lib/audio.c
+./gen-dbus-gobject.pl -header bluez-api-4.66-fixed/audio-api.txt > ../src/lib/bluez/audio.h
+./gen-dbus-gobject.pl -source bluez-api-4.66-fixed/audio-api.txt > ../src/lib/bluez/audio.c
# device-api.txt
-./gen-dbus-gobject.pl -header bluez-api-4.66-fixed/device-api.txt > ../src/lib/device.h
-./gen-dbus-gobject.pl -source bluez-api-4.66-fixed/device-api.txt > ../src/lib/device.c
+./gen-dbus-gobject.pl -header bluez-api-4.66-fixed/device-api.txt > ../src/lib/bluez/device.h
+./gen-dbus-gobject.pl -source bluez-api-4.66-fixed/device-api.txt > ../src/lib/bluez/device.c
# input-api.txt
-./gen-dbus-gobject.pl -header bluez-api-4.66-fixed/input-api.txt > ../src/lib/input.h
-./gen-dbus-gobject.pl -source bluez-api-4.66-fixed/input-api.txt > ../src/lib/input.c
+./gen-dbus-gobject.pl -header bluez-api-4.66-fixed/input-api.txt > ../src/lib/bluez/input.h
+./gen-dbus-gobject.pl -source bluez-api-4.66-fixed/input-api.txt > ../src/lib/bluez/input.c
# manager-api.txt
-./gen-dbus-gobject.pl -header bluez-api-4.66-fixed/manager-api.txt > ../src/lib/manager.h
-./gen-dbus-gobject.pl -source bluez-api-4.66-fixed/manager-api.txt > ../src/lib/manager.c
+./gen-dbus-gobject.pl -header bluez-api-4.66-fixed/manager-api.txt > ../src/lib/bluez/manager.h
+./gen-dbus-gobject.pl -source bluez-api-4.66-fixed/manager-api.txt > ../src/lib/bluez/manager.c
# network-api.txt
-./gen-dbus-gobject.pl -header bluez-api-4.66-fixed/network-api.txt > ../src/lib/network.h
-./gen-dbus-gobject.pl -source bluez-api-4.66-fixed/network-api.txt > ../src/lib/network.c
+./gen-dbus-gobject.pl -header bluez-api-4.66-fixed/network-api.txt > ../src/lib/bluez/network.h
+./gen-dbus-gobject.pl -source bluez-api-4.66-fixed/network-api.txt > ../src/lib/bluez/network.c
./gen-dbus-gobject.pl -header bluez-api-4.66-fixed/network-api.txt 2 > ../src/lib/network_hub.h
./gen-dbus-gobject.pl -source bluez-api-4.66-fixed/network-api.txt 2 > ../src/lib/network_hub.c
@@ -39,7 +39,7 @@
./gen-dbus-gobject.pl -header bluez-api-4.66-fixed/serial-api.txt > ../src/lib/serial.h
./gen-dbus-gobject.pl -source bluez-api-4.66-fixed/serial-api.txt > ../src/lib/serial.c
-# obex-data-server API
+# ODS (obex-data-server) API
./gen-dbus-gobject.pl -header obex-data-server-api-0.4.5-fixed.txt > ../src/lib/obexmanager.h
./gen-dbus-gobject.pl -source obex-data-server-api-0.4.5-fixed.txt > ../src/lib/obexmanager.c
diff --git a/src/bt-agent.c b/src/bt-agent.c
index f6b9a16..3af0f5b 100644
--- a/src/bt-agent.c
+++ b/src/bt-agent.c
@@ -27,10 +27,31 @@
#include <stdlib.h>
#include <string.h>
+#include <signal.h>
#include <glib.h>
#include "lib/bluez-dbus.h"
+static gboolean need_unregister = TRUE;
+static GMainLoop *mainloop = NULL;
+
+static void sigterm_handler(int sig)
+{
+ g_message("%s received", sig == SIGTERM ? "SIGTERM" : "SIGINT");
+ g_main_loop_quit(mainloop);
+}
+
+static void agent_released(Agent *agent, gpointer data)
+{
+ g_assert(data != NULL);
+ GMainLoop *mainloop = data;
+
+ need_unregister = FALSE;
+
+ if (g_main_loop_is_running(mainloop))
+ g_main_loop_quit(mainloop);
+}
+
static gchar *adapter_arg = NULL;
static GOptionEntry entries[] = {
@@ -66,6 +87,8 @@ int main(int argc, char *argv[])
exit(EXIT_FAILURE);
}
+ mainloop = g_main_loop_new(NULL, FALSE);
+
Manager *manager = g_object_new(MANAGER_TYPE, NULL);
Adapter *adapter = find_adapter(adapter_arg, &error);
@@ -76,18 +99,31 @@ int main(int argc, char *argv[])
adapter_register_agent(adapter, DBUS_AGENT_PATH, "DisplayYesNo", &error);
exit_if_error(error);
- GMainLoop *mainloop = g_main_loop_new(NULL, FALSE);
+ g_signal_connect(agent, "AgentReleased", G_CALLBACK(agent_released), mainloop);
+
+ /* Add SIGTERM && SIGINT handlers */
+ struct sigaction sa;
+ memset(&sa, 0, sizeof(sa));
+ sa.sa_handler = sigterm_handler;
+ sigaction(SIGTERM, &sa, NULL);
+ sigaction(SIGINT, &sa, NULL);
+
g_main_loop_run(mainloop);
- // TODO: Add SIGINT handler (Ctrl+C)
+ if (need_unregister) {
+ adapter_unregister_agent(adapter, DBUS_AGENT_PATH, &error);
+ exit_if_error(error);
- adapter_unregister_agent(adapter, DBUS_AGENT_PATH, &error);
- exit_if_error(error);
+ /* Waiting for AgentReleased signal */
+ g_main_loop_run(mainloop);
+ }
- g_main_loop_unref(mainloop);
g_object_unref(agent);
g_object_unref(adapter);
g_object_unref(manager);
+
+ g_main_loop_unref(mainloop);
+
dbus_disconnect();
exit(EXIT_SUCCESS);
diff --git a/src/bt-obex.c b/src/bt-obex.c
index ea27e28..bed079f 100644
--- a/src/bt-obex.c
+++ b/src/bt-obex.c
@@ -460,7 +460,7 @@ int main(int argc, char *argv[])
g_free(root_dir);
g_hash_table_unref(server_sessions);
} else if (opp_arg) {
-
+
}
g_object_unref(manager);
diff --git a/src/lib/agent.c b/src/lib/agent.c
index eb1c6b9..b18f316 100644
--- a/src/lib/agent.c
+++ b/src/lib/agent.c
@@ -38,17 +38,29 @@
#define AGENT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), AGENT_TYPE, AgentPrivate))
struct _AgentPrivate {
+ /* Unused */
DBusGProxy *proxy;
};
G_DEFINE_TYPE(Agent, agent, G_TYPE_OBJECT);
+enum {
+ AGENT_RELEASED,
+
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = {0};
+
static void agent_dispose(GObject *gobject)
{
Agent *self = AGENT(gobject);
dbus_g_connection_unregister_g_object(conn, gobject);
+ /* Proxy free */
+ //g_object_unref(self->priv->proxy);
+
/* Chain up to the parent class */
G_OBJECT_CLASS(agent_parent_class)->dispose(gobject);
}
@@ -60,6 +72,14 @@ static void agent_class_init(AgentClass *klass)
gobject_class->dispose = agent_dispose;
g_type_class_add_private(klass, sizeof(AgentPrivate));
+
+ /* Signals registation */
+ signals[AGENT_RELEASED] = g_signal_new("AgentReleased",
+ G_TYPE_FROM_CLASS(gobject_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS,
+ 0, NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
}
static void agent_init(Agent *self)
@@ -78,6 +98,9 @@ static void agent_init(Agent *self)
gboolean agent_release(Agent *self, GError **error)
{
g_print("Agent released\n");
+
+ g_signal_emit(self, signals[AGENT_RELEASED], 0);
+
return TRUE;
}
diff --git a/src/lib/device.c b/src/lib/device.c
index b5c0ee5..fdc9920 100644
--- a/src/lib/device.c
+++ b/src/lib/device.c
@@ -286,7 +286,7 @@ static void device_post_init(Device *self, const gchar *dbus_object_path)
/* object Adapter [readonly] */
if (g_hash_table_lookup(properties, "Adapter")) {
- self->priv->adapter = (gchar *)g_value_dup_boxed(g_hash_table_lookup(properties, "Adapter"));
+ self->priv->adapter = (gchar *) g_value_dup_boxed(g_hash_table_lookup(properties, "Adapter"));
} else {
self->priv->adapter = g_strdup("undefined");
}
@@ -727,7 +727,7 @@ static void property_changed_handler(DBusGProxy *dbus_g_proxy, const gchar *name
if (g_strcmp0(name, "Adapter") == 0) {
g_free(self->priv->adapter);
- self->priv->adapter = (gchar *)g_value_dup_boxed(value);
+ self->priv->adapter = (gchar *) g_value_dup_boxed(value);
} else if (g_strcmp0(name, "Address") == 0) {
g_free(self->priv->address);
self->priv->address = g_value_dup_string(value);