summaryrefslogtreecommitdiffstats
path: root/src/stkutil.c
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2010-03-01 17:27:38 -0600
committerDenis Kenzior <denkenz@gmail.com>2010-03-01 17:42:02 -0600
commit54ac375066e7e2146806fae45ca90f6827777a6f (patch)
treeb0aa4d13f1303c120c88101c8cfad01b5f37bb25 /src/stkutil.c
parentf4f6284f2663e72bc68c603f85842b621cfb2307 (diff)
downloadofono-54ac375066e7e2146806fae45ca90f6827777a6f.tar.bz2
Add support for GET INKEY proactive command
Diffstat (limited to 'src/stkutil.c')
-rw-r--r--src/stkutil.c54
1 files changed, 47 insertions, 7 deletions
diff --git a/src/stkutil.c b/src/stkutil.c
index cdb1f3c8..597dddc2 100644
--- a/src/stkutil.c
+++ b/src/stkutil.c
@@ -136,6 +136,11 @@ static void destroy_display_text(struct stk_command *command)
g_free(command->display_text.text);
}
+static void destroy_get_inkey(struct stk_command *command)
+{
+ g_free(command->get_inkey.text);
+}
+
/* Defined in TS 102.223 Section 8.31 */
static gboolean parse_dataobj_icon_id(struct comprehension_tlv_iter *iter,
void *user)
@@ -311,23 +316,24 @@ static gboolean parse_dataobj(struct comprehension_tlv_iter *iter,
static gboolean parse_display_text(struct stk_command *command,
struct comprehension_tlv_iter *iter)
{
+ struct stk_command_display_text *obj = &command->display_text;
gboolean ret;
- command->display_text.frame_id = 0xFF;
+ obj->frame_id = 0xFF;
ret = parse_dataobj(iter, STK_DATA_OBJECT_TYPE_TEXT,
DATAOBJ_FLAG_MANDATORY | DATAOBJ_FLAG_MINIMUM,
- &command->display_text.text,
+ &obj->text,
STK_DATA_OBJECT_TYPE_ICON_ID, 0,
- &command->display_text.icon_id,
+ &obj->icon_id,
STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE, 0,
- &command->display_text.immediate_response,
+ &obj->immediate_response,
STK_DATA_OBJECT_TYPE_DURATION, 0,
- &command->display_text.duration,
+ &obj->duration,
STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE, 0,
- &command->display_text.text_attribute,
+ &obj->text_attribute,
STK_DATA_OBJECT_TYPE_FRAME_ID, 0,
- &command->display_text.frame_id,
+ &obj->frame_id,
STK_DATA_OBJECT_TYPE_INVALID);
if (ret == FALSE)
@@ -338,6 +344,37 @@ static gboolean parse_display_text(struct stk_command *command,
return TRUE;
}
+static gboolean parse_get_inkey(struct stk_command *command,
+ struct comprehension_tlv_iter *iter)
+{
+ struct stk_command_display_text *obj = &command->get_inkey;
+ gboolean ret;
+
+ obj->frame_id = 0xFF;
+
+ ret = parse_dataobj(iter, STK_DATA_OBJECT_TYPE_TEXT,
+ DATAOBJ_FLAG_MANDATORY | DATAOBJ_FLAG_MINIMUM,
+ &obj->text,
+ STK_DATA_OBJECT_TYPE_ICON_ID, 0,
+ &obj->icon_id,
+ STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE, 0,
+ &obj->immediate_response,
+ STK_DATA_OBJECT_TYPE_DURATION, 0,
+ &obj->duration,
+ STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE, 0,
+ &obj->text_attribute,
+ STK_DATA_OBJECT_TYPE_FRAME_ID, 0,
+ &obj->frame_id,
+ STK_DATA_OBJECT_TYPE_INVALID);
+
+ if (ret == FALSE)
+ return FALSE;
+
+ command->destructor = destroy_get_inkey;
+
+ return TRUE;
+}
+
struct stk_command *stk_command_new_from_pdu(const unsigned char *pdu,
unsigned int len)
{
@@ -402,6 +439,9 @@ struct stk_command *stk_command_new_from_pdu(const unsigned char *pdu,
case STK_COMMAND_TYPE_DISPLAY_TEXT:
ok = parse_display_text(command, &iter);
break;
+ case STK_COMMAND_TYPE_GET_INKEY:
+ ok = parse_get_inkey(command, &iter);
+ break;
default:
ok = FALSE;
break;