diff options
author | Denis Kenzior <denkenz@gmail.com> | 2010-07-30 09:54:50 -0500 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2010-07-30 17:19:56 -0500 |
commit | e44d130b8c71bf7dfaabb79e21cf1fbd633e500d (patch) | |
tree | f430d95c2929675167f3a3553e718caf674d938e | |
parent | 3434540d8b4e3692abbe1e171b6a575c6a77c656 (diff) | |
download | ofono-e44d130b8c71bf7dfaabb79e21cf1fbd633e500d.tar.bz2 |
stk: Simplify sending of terminal responses
Introduce a new send_simple_response function
-rw-r--r-- | src/stk.c | 75 |
1 files changed, 43 insertions, 32 deletions
@@ -116,6 +116,29 @@ static int stk_respond(struct ofono_stk *stk, struct stk_response *rsp, return 0; } +static void stk_command_cb(const struct ofono_error *error, void *data) +{ + if (error->type != OFONO_ERROR_TYPE_NO_ERROR) { + ofono_error("TERMINAL RESPONSE to a UICC command failed"); + return; + } + + DBG("TERMINAL RESPONSE to a command reported no errors"); +} + +static void send_simple_response(struct ofono_stk *stk, + enum stk_result_type result) +{ + struct stk_response rsp; + static struct ofono_error error = { .type = OFONO_ERROR_TYPE_FAILURE }; + + memset(&rsp, 0, sizeof(rsp)); + rsp.result.type = result; + + if (stk_respond(stk, &rsp, stk_command_cb)) + stk_command_cb(&error, stk); +} + static void envelope_cb(const struct ofono_error *error, const uint8_t *data, int length, void *user_data) { @@ -217,16 +240,6 @@ void __ofono_cbs_sim_download(struct ofono_stk *stk, const struct cbs *msg) stk_cbs_download_cb(stk, FALSE, NULL, -1); } -static void stk_command_cb(const struct ofono_error *error, void *data) -{ - if (error->type != OFONO_ERROR_TYPE_NO_ERROR) { - ofono_error("TERMINAL RESPONSE to a UICC command failed"); - return; - } - - DBG("TERMINAL RESPONSE to a command reported no errors"); -} - static struct stk_menu *stk_menu_create(const char *title, const struct stk_text_attribute *title_attr, GSList *items, const struct stk_item_text_attribute_list *item_attrs, @@ -928,23 +941,31 @@ static void request_menu_cb(enum stk_agent_result result, uint8_t id, void *user_data) { struct ofono_stk *stk = user_data; - static struct ofono_error error = { .type = OFONO_ERROR_TYPE_FAILURE }; - struct stk_response rsp; - - memset(&rsp, 0, sizeof(rsp)); switch (result) { case STK_AGENT_RESULT_OK: + { + static struct ofono_error error = + { .type = OFONO_ERROR_TYPE_FAILURE }; + struct stk_response rsp; + + memset(&rsp, 0, sizeof(rsp)); + rsp.result.type = STK_RESULT_TYPE_SUCCESS; rsp.select_item.item_id = id; + + if (stk_respond(stk, &rsp, stk_command_cb)) + stk_command_cb(&error, stk); + break; + } case STK_AGENT_RESULT_BACK: - rsp.result.type = STK_RESULT_TYPE_GO_BACK; + send_simple_response(stk, STK_RESULT_TYPE_GO_BACK); break; case STK_AGENT_RESULT_TIMEOUT: - rsp.result.type = STK_RESULT_TYPE_NO_RESPONSE; + send_simple_response(stk, STK_RESULT_TYPE_NO_RESPONSE); break; case STK_AGENT_RESULT_CANCEL: @@ -952,13 +973,10 @@ static void request_menu_cb(enum stk_agent_result result, uint8_t id, case STK_AGENT_RESULT_TERMINATE: default: - rsp.result.type = STK_RESULT_TYPE_USER_TERMINATED; + send_simple_response(stk, STK_RESULT_TYPE_USER_TERMINATED); break; } - if (stk_respond(stk, &rsp, stk_command_cb)) - stk_command_cb(&error, stk); - out: stk_menu_free(stk->select_item_menu); stk->select_item_menu = NULL; @@ -988,9 +1006,7 @@ static gboolean handle_command_select_item(const struct stk_command *cmd, static void request_text_cb(enum stk_agent_result result, void *user_data) { struct ofono_stk *stk = user_data; - static struct ofono_error error = { .type = OFONO_ERROR_TYPE_FAILURE }; gboolean confirm; - struct stk_response rsp; /* * Check if we have already responded to the proactive command @@ -1011,31 +1027,26 @@ static void request_text_cb(enum stk_agent_result result, void *user_data) return; } - memset(&rsp, 0, sizeof(rsp)); - switch (result) { case STK_AGENT_RESULT_OK: - rsp.result.type = STK_RESULT_TYPE_SUCCESS; + send_simple_response(stk, STK_RESULT_TYPE_SUCCESS); break; case STK_AGENT_RESULT_BACK: - rsp.result.type = STK_RESULT_TYPE_GO_BACK; + send_simple_response(stk, STK_RESULT_TYPE_GO_BACK); break; case STK_AGENT_RESULT_TIMEOUT: confirm = (stk->pending_cmd->qualifier & (1 << 7)) != 0; - rsp.result.type = confirm ? - STK_RESULT_TYPE_NO_RESPONSE : STK_RESULT_TYPE_SUCCESS; + send_simple_response(stk, confirm ? + STK_RESULT_TYPE_NO_RESPONSE : STK_RESULT_TYPE_SUCCESS); break; case STK_AGENT_RESULT_TERMINATE: default: - rsp.result.type = STK_RESULT_TYPE_USER_TERMINATED; + send_simple_response(stk, STK_RESULT_TYPE_USER_TERMINATED); break; } - - if (stk_respond(stk, &rsp, stk_command_cb)) - stk_command_cb(&error, stk); } static gboolean handle_command_display_text(const struct stk_command *cmd, |