summaryrefslogtreecommitdiffstats
path: root/src/stkagent.c
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2010-07-29 14:38:45 -0500
committerDenis Kenzior <denkenz@gmail.com>2010-07-30 17:19:55 -0500
commit1a7179b79d22c95911554c77baa4a9e21ff19a44 (patch)
treedf0b4ea6b2df259cfd50940357fed5798b010975 /src/stkagent.c
parent7ad5b35a359eeb55cb68f20fb1a059d2638efbe8 (diff)
downloadofono-1a7179b79d22c95911554c77baa4a9e21ff19a44.tar.bz2
stkagent: Simplify stkagent logic
Diffstat (limited to 'src/stkagent.c')
-rw-r--r--src/stkagent.c43
1 files changed, 21 insertions, 22 deletions
diff --git a/src/stkagent.c b/src/stkagent.c
index 200221d0..66f6ab35 100644
--- a/src/stkagent.c
+++ b/src/stkagent.c
@@ -60,14 +60,14 @@ struct stk_agent {
#define OFONO_NAVIGATION_GOBACK OFONO_NAVIGATION_PREFIX ".GoBack"
#define OFONO_NAVIGATION_TERMINATED OFONO_NAVIGATION_PREFIX ".EndSession"
-static void stk_agent_request_send_cancel(struct stk_agent *agent)
+static void stk_agent_send_noreply(struct stk_agent *agent, const char *method)
{
DBusConnection *conn = ofono_dbus_get_connection();
DBusMessage *message;
message = dbus_message_new_method_call(agent->bus, agent->path,
OFONO_SIM_APP_INTERFACE,
- "Cancel");
+ method);
if (message == NULL)
return;
@@ -76,6 +76,16 @@ static void stk_agent_request_send_cancel(struct stk_agent *agent)
g_dbus_send_message(conn, message);
}
+static inline void stk_agent_send_release(struct stk_agent *agent)
+{
+ stk_agent_send_noreply(agent, "Release");
+}
+
+static inline void stk_agent_send_cancel(struct stk_agent *agent)
+{
+ stk_agent_send_noreply(agent, "Cancel");
+}
+
static void stk_agent_request_end(struct stk_agent *agent)
{
agent->cmd_cb = NULL;
@@ -125,7 +135,7 @@ void stk_agent_request_cancel(struct stk_agent *agent)
stk_agent_request_end(agent);
- stk_agent_request_send_cancel(agent);
+ stk_agent_send_cancel(agent);
}
static void stk_agent_request_terminate(struct stk_agent *agent)
@@ -138,30 +148,19 @@ static void stk_agent_request_terminate(struct stk_agent *agent)
void stk_agent_free(struct stk_agent *agent)
{
DBusConnection *conn = ofono_dbus_get_connection();
+ gboolean busy = stk_agent_busy(agent);
- if (agent->disconnect_watch) {
- DBusMessage *message;
-
- if (stk_agent_busy(agent)) {
- stk_agent_request_terminate(agent);
-
- stk_agent_request_send_cancel(agent);
- }
+ if (busy)
+ stk_agent_request_terminate(agent);
- message = dbus_message_new_method_call(agent->bus, agent->path,
- OFONO_SIM_APP_INTERFACE,
- "Release");
- if (message) {
- dbus_message_set_no_reply(message, TRUE);
+ if (agent->disconnect_watch) {
+ if (busy)
+ stk_agent_send_cancel(agent);
- g_dbus_send_message(conn, message);
- }
+ stk_agent_send_release(agent);
g_dbus_remove_watch(conn, agent->disconnect_watch);
agent->disconnect_watch = 0;
- } else {
- if (stk_agent_busy(agent))
- stk_agent_request_terminate(agent);
}
if (agent->removed_cb)
@@ -278,7 +277,7 @@ static void stk_agent_disconnect_cb(DBusConnection *conn, void *user_data)
agent->disconnect_watch = 0;
- stk_agent_free(user_data);
+ stk_agent_free(agent);
}
struct stk_agent *stk_agent_new(const char *path, const char *sender,