4 * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Ja-young Gu <jygu@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
31 #include <communicator.h>
32 #include <core_object.h>
34 #include <user_request.h>
38 #include <co_network.h>
39 #include <type/call.h>
42 #include <libxml/xmlmemory.h>
43 #include <libxml/parser.h>
44 #include <libxml/tree.h>
46 #include "generated-code.h"
48 #include "sat_manager.h"
49 #include "sat_ui_support/sat_ui_support.h"
51 #define SAT_DEF_CMD_Q_MAX 10
52 #define SAT_DEF_CMD_Q_MIN 0
53 #define SAT_TIME_OUT 30000
54 #define TIZEN_SAT_DELAY_TO_CLEAN_MSG 15000
55 #define SAT_USC2_INPUT_LEN_MAX 70
56 #define SAT_EVENT_DOWNLOAD_MAX 9
58 #define LANGUAGE_XML_PATH "/opt/usr/apps/org.tizen.setting/data/langlist.xml"
60 #define SAT_CMD_Q_CHECK(index) \
61 if (index < SAT_DEF_CMD_Q_MIN || index > SAT_DEF_CMD_Q_MAX-1) { warn("invalid index!!"); return FALSE; }
63 static gboolean _sat_manager_handle_open_channel_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data);
65 static struct sat_manager_queue_data *sat_queue[SAT_DEF_CMD_Q_MAX] = {NULL, };
66 gboolean g_evt_list[SAT_EVENT_DOWNLOAD_MAX] = {0};
68 static unsigned char _convert_decimal_to_bcd(int dec)
78 dbg("input decimal(%d), bcd(%d%d), endian(%x)", dec, tmp1, tmp0, tmp3);
82 static const gchar* _convert_sim_lang_to_string(enum tel_sim_language_type lang)
84 dbg("convert lang(%d)", lang);
88 case SIM_LANG_ENGLISH:
90 case SIM_LANG_ITALIAN:
94 case SIM_LANG_SPANISH:
98 case SIM_LANG_SWEDISH:
100 case SIM_LANG_DANISH:
101 return "da_DK.UTF-8";
102 case SIM_LANG_PORTUGUESE:
103 return "pt_PT.UTF-8";
104 case SIM_LANG_FINNISH:
105 return "fi_FI.UTF-8";
106 case SIM_LANG_NORWEGIAN:
107 return "nb_NO.UTF-8";
109 return "el_GR.UTF-8";
110 case SIM_LANG_TURKISH:
111 return "tr_TR.UTF-8";
112 case SIM_LANG_HUNGARIAN:
113 return "hu_HU.UTF-8";
114 case SIM_LANG_POLISH:
115 return "pl_PL.UTF-8";
116 case SIM_LANG_KOREAN:
117 return "ko_KR.UTF-8";
118 case SIM_LANG_CHINESE:
119 return "zh_CH.UTF-8";
120 case SIM_LANG_RUSSIAN:
121 return "ru_RU.UTF-8";
122 case SIM_LANG_JAPANESE:
123 return "ja_JP.UTF-8";
131 static enum tel_sim_language_type _convert_string_to_sim_lang(const gchar* lang_str)
133 dbg("convert lang(%s)", lang_str);
135 if (g_str_equal(lang_str, "de_DE.UTF-8") == TRUE) {
136 return SIM_LANG_GERMAN;
138 else if (g_str_equal(lang_str, "en_GB.UTF-8") == TRUE) {
139 return SIM_LANG_ENGLISH;
141 else if (g_str_equal(lang_str, "it_IT.UTF-8") == TRUE) {
142 return SIM_LANG_ITALIAN;
144 else if (g_str_equal(lang_str, "fr_FR.UTF-8") == TRUE) {
145 return SIM_LANG_FRENCH;
147 else if (g_str_equal(lang_str, "es_ES.UTF-8") == TRUE) {
148 return SIM_LANG_SPANISH;
150 else if (g_str_equal(lang_str, "nl_NL.UTF-8") == TRUE) {
151 return SIM_LANG_DUTCH;
153 else if (g_str_equal(lang_str, "sv_SE.UTF-8") == TRUE) {
154 return SIM_LANG_SWEDISH;
156 else if (g_str_equal(lang_str, "da_DK.UTF-8") == TRUE) {
157 return SIM_LANG_DANISH;
159 else if (g_str_equal(lang_str, "pt_PT.UTF-8") == TRUE) {
160 return SIM_LANG_PORTUGUESE;
162 else if (g_str_equal(lang_str, "fi_FI.UTF-8") == TRUE) {
163 return SIM_LANG_FINNISH;
165 else if (g_str_equal(lang_str, "nb_NO.UTF-8") == TRUE) {
166 return SIM_LANG_NORWEGIAN;
168 else if (g_str_equal(lang_str, "el_GR.UTF-8") == TRUE) {
169 return SIM_LANG_GREEK;
171 else if (g_str_equal(lang_str, "tr_TR.UTF-8") == TRUE) {
172 return SIM_LANG_TURKISH;
174 else if (g_str_equal(lang_str, "hu_HU.UTF-8") == TRUE) {
175 return SIM_LANG_HUNGARIAN;
177 else if (g_str_equal(lang_str, "pl_PL.UTF-8") == TRUE) {
178 return SIM_LANG_POLISH;
180 else if (g_str_equal(lang_str, "ko_KR.UTF-8") == TRUE) {
181 return SIM_LANG_KOREAN;
183 else if (g_str_equal(lang_str, "zh_CH.UTF-8") == TRUE) {
184 return SIM_LANG_CHINESE;
186 else if (g_str_equal(lang_str, "ru_RU.UTF-8") == TRUE) {
187 return SIM_LANG_RUSSIAN;
189 else if (g_str_equal(lang_str, "ja_JP.UTF-8") == TRUE) {
190 return SIM_LANG_JAPANESE;
193 dbg("there is no matched language");
194 return SIM_LANG_UNSPECIFIED;
197 static unsigned char _convert_hex_char_to_int(char c)
199 if (c >= '0' && c <= '9')
201 else if (c >= 'A' && c <= 'F')
202 return (c - 'A' + 10);
203 else if (c >= 'a' && c <= 'f')
204 return (c - 'a' + 10);
206 dbg("invalid charater!!");
211 static char* _convert_hex_string_to_bytes(char *s)
221 ret = calloc(1, (sz / 2) + 1);
225 dbg("Convert String to Binary!!");
227 for (i = 0; i < sz; i += 2) {
228 ret[i / 2] = (char) ((_convert_hex_char_to_int(s[i]) << 4) | _convert_hex_char_to_int(s[i + 1]));
234 static unsigned int _get_time_in_ms(struct tel_sat_duration *dr)
236 switch (dr->time_unit) {
237 case TIME_UNIT_MINUTES:
238 return (unsigned int)dr->time_interval * 60000;
241 case TIME_UNIT_SECONDS:
242 return (unsigned int)dr->time_interval * 1000;
245 case TIME_UNIT_TENTHS_OF_SECONDS:
246 return (unsigned int)dr->time_interval * 100;
249 case TIME_UNIT_RESERVED:
251 return 0; // set default
258 static int _get_queue_empty_index(void)
262 int local_index = -1;
264 for(i =0; i<SAT_DEF_CMD_Q_MAX ; i++) {
266 dbg("index[%d] is being used",i);
270 for(i =0; i<SAT_DEF_CMD_Q_MAX ; i++) {
272 dbg("found empty slot [%p] at index [%d]", sat_queue[i] ,i);
277 dbg("[SAT]SAT Command Queue current length [%d], MAX [%d]. \n", cnt, SAT_DEF_CMD_Q_MAX);
281 static gboolean _push_data(struct custom_data *ctx, struct sat_manager_queue_data *cmd_obj)
283 struct sat_manager_queue_data *item;
284 int local_index = cmd_obj->cmd_id;
286 SAT_CMD_Q_CHECK(local_index);
288 if (sat_queue[local_index]) {
289 dbg("[SAT] sat_queue[%d] is not null [%p].\n", sat_queue[local_index]);
293 item = g_new0(struct sat_manager_queue_data, 1);
296 dbg("[SAT] FAILED TO ALLOC QUEUE ITEM!\n");
300 memcpy((void*)item, (void*)cmd_obj, sizeof(struct sat_manager_queue_data));
301 sat_queue[local_index] = item;
302 dbg("push data to queue at index[%d], [%p].\n",local_index, item);
306 static gboolean _pop_nth_data(struct custom_data *ctx, struct sat_manager_queue_data *cmd_obj, int command_id)
308 struct sat_manager_queue_data *item;
309 int local_index = command_id;
311 SAT_CMD_Q_CHECK(local_index);
313 if(!sat_queue[local_index]) {
314 dbg("[SAT] sat_queue[%d] is null !!\n", local_index);
318 item = sat_queue[local_index];
320 memcpy((void*)cmd_obj, (void*)item, sizeof(struct sat_manager_queue_data));
321 dbg("pop data from queue at index[%d],[%p].\n",local_index, item);
322 sat_queue[local_index] = NULL;
327 static gboolean _peek_nth_data(struct custom_data *ctx, struct sat_manager_queue_data *cmd_obj, int command_id)
329 struct sat_manager_queue_data *item = NULL;
331 int local_index = command_id;
333 SAT_CMD_Q_CHECK(local_index);
335 if(!sat_queue[local_index]) {
336 dbg("[SAT] sat_queue[%d] is null !!\n", local_index);
340 item = sat_queue[local_index];
341 memcpy((void*)cmd_obj, (void*)item, sizeof(struct sat_manager_queue_data));
342 dbg("peek data from queue at index[%d],[%p].\n",local_index, item);
346 static gboolean _sat_manager_check_language_set(const char* lan)
348 xmlNode *cur_node = NULL;
350 void *xml_doc = NULL,*xml_root_node = NULL;
352 gboolean ret = FALSE;
354 dbus_plugin_util_load_xml(LANGUAGE_XML_PATH, "langlist", &xml_doc, &xml_root_node);
355 if (!xml_root_node) {
356 err("[LANGUAGE LIST] Load error - Root node is NULL.");
361 /* Compare language */
362 for(cur_node = cur; cur_node; cur_node = cur_node->next) {
363 if (cur_node->type == XML_ELEMENT_NODE) {
364 id = (char *)xmlGetProp(cur_node, (const xmlChar *)"id");
365 if (id && g_str_has_prefix(lan, id)) {
366 dbg("Supported: id[%s], lan[%s]", id, lan);
372 warn("Not supported language[%s]", lan);
374 dbus_plugin_util_unload_xml(&xml_doc, &xml_root_node);
378 void sat_manager_init_queue(struct custom_data *ctx, const char *cp_name)
382 dbg("Entered into queue");
383 for(i=0;i<SAT_DEF_CMD_Q_MAX;i++) {
384 struct sat_manager_queue_data * item = sat_queue[i];
385 if(item != NULL && !g_strcmp0(cp_name,item->cp_name)) {
386 dbg("item[%d]: cmd_type[%d]", i, item->cmd_type);
387 #if defined(TIZEN_PLATFORM_USE_QCOM_QMI)
388 switch(item->cmd_type) {
389 case SAT_PROATV_CMD_SEND_SMS:
390 case SAT_PROATV_CMD_SEND_SS:
391 case SAT_PROATV_CMD_SEND_USSD:
392 case SAT_PROATV_CMD_SEND_DTMF: {
393 dbg("[SAT] set noti flag");
394 item->noti_required = TRUE;
401 g_free(item->cp_name);
408 static gboolean sat_manager_enqueue_cmd(struct custom_data *ctx, struct sat_manager_queue_data *cmd_obj)
412 id = _get_queue_empty_index();
414 dbg("Fail to get empty index.\n");
417 cmd_obj->cmd_id = id;
418 return _push_data(ctx, cmd_obj);
421 static gboolean sat_manager_dequeue_cmd_by_id(struct custom_data *ctx, struct sat_manager_queue_data *cmd_obj, int cmd_id)
423 return _pop_nth_data(ctx, cmd_obj, cmd_id);
426 static gboolean sat_manager_queue_peek_data_by_id(struct custom_data *ctx, struct sat_manager_queue_data *cmd_obj, int command_id)
428 return _peek_nth_data(ctx, cmd_obj, command_id);
431 static gboolean sat_manager_check_availiable_event_list(struct tel_sat_setup_event_list_tlv *event_list_tlv)
436 for(local_index = 0; local_index < event_list_tlv->event_list.event_list_cnt; local_index++){
437 if(event_list_tlv->event_list.evt_list[local_index] == EVENT_USER_ACTIVITY){
438 dbg("do user activity");
440 else if(event_list_tlv->event_list.evt_list[local_index] == EVENT_IDLE_SCREEN_AVAILABLE){
441 dbg("do idle screen");
443 else if(event_list_tlv->event_list.evt_list[local_index] == EVENT_LANGUAGE_SELECTION){
444 dbg("do language selection");
446 else if(event_list_tlv->event_list.evt_list[local_index] == EVENT_BROWSER_TERMINATION){
447 dbg("do browser termination");
449 else if(event_list_tlv->event_list.evt_list[local_index] == EVENT_DATA_AVAILABLE){
450 dbg("do data available (bip)");
452 else if(event_list_tlv->event_list.evt_list[local_index] == EVENT_CHANNEL_STATUS){
453 dbg("do channel status (bip)");
456 dbg("unmanaged event (%d)", event_list_tlv->event_list.evt_list[local_index]);
464 #if defined(TIZEN_PLATFORM_USE_QCOM_QMI)
465 static TReturn sat_manager_send_user_confirmation(Communicator *comm, TcorePlugin *target_plg, struct treq_sat_user_confirmation_data *conf_data)
467 TReturn rv = TCORE_RETURN_SUCCESS;
468 UserRequest *ur = NULL;
470 ur = tcore_user_request_new(comm, tcore_server_get_cp_name_by_plugin(target_plg));
473 return TCORE_RETURN_FAILURE;
476 tcore_user_request_set_command(ur, TREQ_SAT_REQ_USERCONFIRMATION);
477 tcore_user_request_set_data(ur, sizeof(struct treq_sat_user_confirmation_data), (void *)conf_data);
478 rv = tcore_communicator_dispatch_request(comm, ur);
479 if (rv != TCORE_RETURN_SUCCESS) {
480 dbg("fail to send terminal response",rv);
481 tcore_user_request_unref(ur);
482 rv = TCORE_RETURN_FAILURE;
489 static TReturn sat_manager_send_terminal_response(Communicator *comm, TcorePlugin *target_plg, struct treq_sat_terminal_rsp_data *tr)
491 TReturn rv = TCORE_RETURN_SUCCESS;
492 UserRequest *ur = NULL;
494 ur = tcore_user_request_new(comm, tcore_server_get_cp_name_by_plugin(target_plg));
497 return TCORE_RETURN_FAILURE;
500 tcore_user_request_set_command(ur, TREQ_SAT_REQ_TERMINALRESPONSE);
501 tcore_user_request_set_data(ur, sizeof(struct treq_sat_terminal_rsp_data), (void *)tr);
502 rv = tcore_communicator_dispatch_request(comm, ur);
503 if (rv != TCORE_RETURN_SUCCESS) {
504 dbg("fail to send terminal response",rv);
505 tcore_user_request_unref(ur);
506 rv = TCORE_RETURN_FAILURE;
512 gboolean sat_manager_remove_cmd_by_id(struct custom_data *ctx, int cmd_id)
514 struct sat_manager_queue_data *item;
515 int local_index = cmd_id;
517 if(!sat_queue[local_index]) {
518 dbg("[SAT] sat_queue[%d] is already null !!\n", local_index);
521 item = sat_queue[local_index];
523 dbg("remove data from queue at index[%d],[%p].\n",local_index, item);
524 sat_queue[local_index] = NULL;
525 g_free(item->cp_name);
530 GVariant* sat_manager_caching_setup_menu_info(struct custom_data *ctx, const char *cp_name, struct tel_sat_setup_menu_tlv* setup_menu_tlv)
532 TcorePlugin *plg = NULL;
533 GVariant *setup_menu_info = NULL;
534 struct sat_manager_queue_data q_data;
536 gushort title_len = 0;
537 gint command_id = 0, menu_cnt = 0;
538 gboolean menu_present = FALSE, help_info = FALSE, updated = FALSE;
539 gchar main_title[SAT_ALPHA_ID_LEN_MAX];
540 GVariantBuilder v_builder;
541 GVariant *menu_items = NULL;
542 #if defined(TIZEN_SUPPORT_SAT_ICON)
544 GVariant *icon_id = NULL;
545 GVariant *icon_list = NULL;
546 GVariant *icon_list_info = NULL;
547 GVariantBuilder v_builder_icon;
548 GVariantBuilder v_builder_icon_list_data;
550 /* To check menu update */
552 struct cached_data *object;
553 struct treq_sat_terminal_rsp_data tr;
555 dbg("interpreting setup menu notification");
556 memset(&main_title, 0 , SAT_ALPHA_ID_LEN_MAX);
558 plg = tcore_server_find_plugin(ctx->server, cp_name);
560 dbg("there is no valid plugin at this point");
564 /* check menu info is already updated */
565 for (list = ctx->cached_data; list; list = list->next) {
566 object = (struct cached_data *) list->data;
570 if (g_strcmp0(object->cp_name, cp_name) == 0) {
571 if(object->cached_sat_main_menu) {
572 dbg("main menu info is updated");
578 //check the validation of content
579 if(!setup_menu_tlv->menu_item_cnt || !setup_menu_tlv->menu_item[0].text_len){
580 //support GCF case 27.22.4.8.1 - 1.1 setup menu
582 dbg("no menu item updated menu(%d)", updated);
584 memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
585 tr.cmd_number = setup_menu_tlv->command_detail.cmd_num;
586 tr.cmd_type = setup_menu_tlv->command_detail.cmd_type;
588 memcpy((void*)&tr.terminal_rsp_data.setup_menu.command_detail,
589 &setup_menu_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
590 tr.terminal_rsp_data.setup_menu.device_id.src = setup_menu_tlv->device_id.dest;
591 tr.terminal_rsp_data.setup_menu.device_id.dest = setup_menu_tlv->device_id.src;
594 tr.terminal_rsp_data.setup_menu.result_type = RESULT_SUCCESS;
596 tr.terminal_rsp_data.setup_menu.result_type = RESULT_BEYOND_ME_CAPABILITIES;
599 sat_manager_send_terminal_response(ctx->comm, plg, &tr);
604 help_info = setup_menu_tlv->command_detail.cmd_qualifier.setup_menu.help_info;
605 menu_present = setup_menu_tlv->command_detail.cmd_qualifier.setup_menu.select_preference;
606 menu_cnt = setup_menu_tlv->menu_item_cnt;
609 if(setup_menu_tlv->alpha_id.alpha_data_len)
610 tcore_util_convert_string_to_utf8((unsigned char*)&main_title, (unsigned short*)&title_len,
611 setup_menu_tlv->alpha_id.dcs.a_format,
612 (unsigned char*)&setup_menu_tlv->alpha_id.alpha_data,
613 (unsigned short)setup_menu_tlv->alpha_id.alpha_data_len);
614 dbg("sat main menu title(%s)",main_title);
616 g_variant_builder_init(&v_builder, G_VARIANT_TYPE ("a(si)"));
619 if(!setup_menu_tlv->next_act_ind_list.cnt){
622 dbg("setup_menu_tlv->next_act_ind_list.cnt == 0");
624 for(local_index = 0; local_index < menu_cnt; local_index++){
626 gchar item_str[SAT_ITEM_TEXT_LEN_MAX + 1];
628 memset(&item_str, 0 , SAT_ITEM_TEXT_LEN_MAX + 1);
629 tcore_util_convert_string_to_utf8((unsigned char*)&item_str, (unsigned short *)&item_len,
630 setup_menu_tlv->menu_item[local_index].dcs.a_format,
631 (unsigned char*)&setup_menu_tlv->menu_item[local_index].text,
632 (unsigned short)setup_menu_tlv->menu_item[local_index].text_len);
634 dbg( "index(%d) item_id(%d) item_string(%s)", local_index, setup_menu_tlv->menu_item[local_index].item_id, item_str);
636 //g_variant_builder_add(v_builder, "(sy)", &item_str, setup_menu_tlv->menu_item[index].item_id);
637 g_variant_builder_add(&v_builder, "(si)", item_str, (gint32)(setup_menu_tlv->menu_item[local_index].item_id));
643 dbg("setup_menu_tlv->next_act_ind_list.cnt != 0");
645 for(local_index = 0; local_index < menu_cnt; local_index++){
647 gchar item_str[SAT_ITEM_TEXT_LEN_MAX + 1];
649 memset(&item_str, '\0' , SAT_ITEM_TEXT_LEN_MAX + 1);
650 tcore_util_convert_string_to_utf8((unsigned char*)&item_str, (unsigned short *)&item_len,
651 setup_menu_tlv->menu_item[local_index].dcs.a_format,
652 (unsigned char*)&setup_menu_tlv->menu_item[local_index].text,
653 (unsigned short)setup_menu_tlv->menu_item[local_index].text_len);
655 dbg( "index(%d) item_id(%d) item_string(%s)", local_index, setup_menu_tlv->menu_item[local_index].item_id, item_str);
657 //g_variant_builder_add(v_builder, "(sy)", g_strdup(item_str), setup_menu_tlv->menu_item[local_index].item_id);
658 g_variant_builder_add(&v_builder, "(si)", item_str, (gint32)(setup_menu_tlv->menu_item[local_index].item_id));
662 menu_items = g_variant_builder_end(&v_builder);
664 //enqueue data and generate cmd_id
665 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
666 q_data.cmd_type = SAT_PROATV_CMD_SETUP_MENU;
667 q_data.cp_name = g_strdup(cp_name);
668 memcpy((void*)&(q_data.cmd_data.setupMenuInd), setup_menu_tlv, sizeof(struct tel_sat_setup_menu_tlv));
669 if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
670 g_free(q_data.cp_name);
672 command_id = q_data.cmd_id;
674 #if defined(TIZEN_SUPPORT_SAT_ICON)
675 /* Icon data extraction */
676 g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
677 if(setup_menu_tlv->icon_id.is_exist) {
678 g_variant_builder_add(&v_builder_icon, "(biiiiiis)", setup_menu_tlv->icon_id.is_exist, setup_menu_tlv->icon_id.icon_qualifer, (gint32) setup_menu_tlv->icon_id.icon_identifier, (gint32) setup_menu_tlv->icon_id.icon_info.width,
679 (gint32) setup_menu_tlv->icon_id.icon_info.height, setup_menu_tlv->icon_id.icon_info.ics, setup_menu_tlv->icon_id.icon_info.icon_data_len, setup_menu_tlv->icon_id.icon_info.icon_file);
681 icon_id = g_variant_builder_end(&v_builder_icon);
683 /* Icon list data extraction */
684 g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiv)"));
685 if(setup_menu_tlv->icon_list.is_exist) {
686 g_variant_builder_init(&v_builder_icon_list_data, G_VARIANT_TYPE ("a(iiiiis)"));
687 for(local_index= 0; local_index< (int)setup_menu_tlv->icon_list.icon_cnt; local_index++){
688 g_variant_builder_add(&v_builder_icon_list_data, "(iiiiis)", (gint32) setup_menu_tlv->icon_list.icon_id_list[local_index], (gint32) setup_menu_tlv->icon_list.icon_info[local_index].width,
689 (gint32) setup_menu_tlv->icon_list.icon_info[local_index].height, setup_menu_tlv->icon_list.icon_info[local_index].ics, setup_menu_tlv->icon_list.icon_info[local_index].icon_data_len, setup_menu_tlv->icon_list.icon_info[local_index].icon_file);
691 icon_list_info = g_variant_builder_end(&v_builder_icon_list_data);
693 g_variant_builder_add(&v_builder_icon, "(biiv)", setup_menu_tlv->icon_list.is_exist, setup_menu_tlv->icon_list.icon_qualifer, (gint32) setup_menu_tlv->icon_list.icon_cnt, icon_list_info);
695 icon_list = g_variant_builder_end(&v_builder_icon);
697 setup_menu_info = g_variant_new("(ibsvibbvv)", command_id, menu_present, main_title, menu_items,
698 menu_cnt, help_info, updated, icon_id, icon_list);
700 setup_menu_info = g_variant_new("(ibsvibb)", command_id, menu_present, main_title, menu_items,
701 menu_cnt, help_info, updated);
703 return setup_menu_info;
706 GVariant* sat_manager_display_text_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_display_text_tlv* display_text_tlv, int decode_error)
708 TcorePlugin *plg = NULL;
709 GVariant *display_text = NULL;
710 struct sat_manager_queue_data q_data;
712 gushort text_len = 0;
713 gint command_id = 0, duration= 0, tmp_duration = 0;
714 gboolean immediately_rsp = FALSE, high_priority = FALSE, user_rsp_required = FALSE;
715 gchar text[SAT_TEXT_STRING_LEN_MAX+1];
716 #if defined(TIZEN_SUPPORT_SAT_ICON)
717 GVariant *icon_id = NULL;
718 GVariantBuilder v_builder_icon;
720 dbg("interpreting display text notification");
721 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX+1);
723 plg = tcore_server_find_plugin(ctx->server, cp_name);
725 dbg("there is no valid plugin at this point");
729 if(!display_text_tlv->text.string_length ||
730 (display_text_tlv->text.string_length > 0 && decode_error != TCORE_SAT_SUCCESS)){
731 struct treq_sat_terminal_rsp_data tr;
733 dbg("displat text - invalid parameter of TLVs is found!!");
735 memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
736 tr.cmd_number = display_text_tlv->command_detail.cmd_num;
737 tr.cmd_type = display_text_tlv->command_detail.cmd_type;
739 memcpy((void*) &tr.terminal_rsp_data.display_text.command_detail,
740 &display_text_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
742 tr.terminal_rsp_data.display_text.device_id.src = DEVICE_ID_ME;
743 tr.terminal_rsp_data.display_text.device_id.dest = DEVICE_ID_SIM;
744 tr.terminal_rsp_data.display_text.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
746 sat_manager_send_terminal_response(ctx->comm, plg, &tr);
751 //user resp required & time_duration
752 if(display_text_tlv->command_detail.cmd_qualifier.display_text.text_clear_type == TEXT_WAIT_FOR_USER_TO_CLEAR_MSG){
753 user_rsp_required = TRUE;
754 duration = SAT_TIME_OUT;
757 /* Set by default if duration is not provided. */
758 duration = TIZEN_SAT_DELAY_TO_CLEAN_MSG;
761 //immediate response requested
762 if (display_text_tlv->immediate_response_requested)
763 immediately_rsp = TRUE;
766 if (display_text_tlv->command_detail.cmd_qualifier.display_text.text_priority == TEXT_PRIORITY_HIGH)
767 high_priority = TRUE;
770 tcore_util_convert_string_to_utf8((unsigned char*) &text, (unsigned short *) &text_len,
771 display_text_tlv->text.dcs.a_format,
772 (unsigned char*) &display_text_tlv->text.string,
773 (unsigned short) display_text_tlv->text.string_length);
774 dbg("sat display text(%s)",text);
777 if(display_text_tlv->duration.time_interval){
778 tmp_duration = _get_time_in_ms(&display_text_tlv->duration);
781 /* duration is required only when clear message after a delay
782 * 27.22.4.1.7.4.2 DISPLAY TEXT ( Variable Timeout )
784 if(tmp_duration > 0) {
785 duration = tmp_duration;
788 if(immediately_rsp && user_rsp_required)
791 dbg("user rsp required(%d), immediately rsp(%d) duration (%d), priority(%d)",
792 user_rsp_required, immediately_rsp, duration, high_priority);
794 /* ETSI TS 102 223 6.4.1 DISPLAY TEXT
795 If help information is requested by the user, this command may be used to display help information on the screen. The
796 help information should be sent as high priority text and with the option that it should be cleared after a short delay.*/
798 /* if (ctx->help_requested == TRUE) {
799 ad->bIsPriorityHigh = TRUE;
801 ctx->help_requested = FALSE;
804 //enqueue data and generate cmd_id
805 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
806 q_data.cmd_type = SAT_PROATV_CMD_DISPLAY_TEXT;
807 q_data.cp_name = g_strdup(cp_name);
808 memcpy((void*)&(q_data.cmd_data.displayTextInd), display_text_tlv, sizeof(struct tel_sat_display_text_tlv));
809 if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
810 g_free(q_data.cp_name);
812 command_id = q_data.cmd_id;
814 #if defined(TIZEN_SUPPORT_SAT_ICON)
815 /* Icon data extraction */
816 g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
817 if(display_text_tlv->icon_id.is_exist) {
818 g_variant_builder_add(&v_builder_icon, "(biiiiiis)", display_text_tlv->icon_id.is_exist, display_text_tlv->icon_id.icon_qualifer, (gint32) display_text_tlv->icon_id.icon_identifier, (gint32) display_text_tlv->icon_id.icon_info.width,
819 (gint32) display_text_tlv->icon_id.icon_info.height, display_text_tlv->icon_id.icon_info.ics, display_text_tlv->icon_id.icon_info.icon_data_len, display_text_tlv->icon_id.icon_info.icon_file);
821 icon_id = g_variant_builder_end(&v_builder_icon);
823 display_text = g_variant_new("(isiibbbv)", command_id, text, text_len, duration,
824 high_priority, user_rsp_required, immediately_rsp, icon_id);
826 display_text = g_variant_new("(isiibbb)", command_id, text, text_len, duration,
827 high_priority, user_rsp_required, immediately_rsp);
833 GVariant* sat_manager_select_item_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_select_item_tlv* select_item_tlv)
835 TcorePlugin *plg = NULL;
836 GVariant *select_item = NULL;
837 struct sat_manager_queue_data q_data;
839 gushort text_len = 0;
840 gint command_id = 0, default_item_id = 0, menu_cnt = 0;
841 gboolean help_info = FALSE;
842 gchar text[SAT_TEXT_STRING_LEN_MAX+1];
843 GVariantBuilder v_builder;
844 GVariant *menu_items = NULL;
845 #if defined(TIZEN_SUPPORT_SAT_ICON)
847 GVariant *icon_id = NULL;
848 GVariant *icon_list = NULL;
849 GVariant *icon_list_info = NULL;
850 GVariantBuilder v_builder_icon;
851 GVariantBuilder v_builder_icon_list;
855 dbg("interpreting select item notification");
856 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX+1);
858 plg = tcore_server_find_plugin(ctx->server, cp_name);
860 dbg("there is no valid plugin at this point");
864 if(!select_item_tlv->menu_item_cnt || !select_item_tlv->menu_item[0].text_len){
865 struct treq_sat_terminal_rsp_data tr;
867 dbg("select item - mandatory field does not exist");
869 memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
870 tr.cmd_number = select_item_tlv->command_detail.cmd_num;
871 tr.cmd_type = select_item_tlv->command_detail.cmd_type;
873 memcpy((void*) &tr.terminal_rsp_data.select_item.command_detail,
874 &select_item_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
876 tr.terminal_rsp_data.select_item.device_id.src = select_item_tlv->device_id.dest;
877 tr.terminal_rsp_data.select_item.device_id.dest = select_item_tlv->device_id.src;
878 tr.terminal_rsp_data.select_item.result_type = RESULT_BEYOND_ME_CAPABILITIES;
880 sat_manager_send_terminal_response(ctx->comm, plg, &tr);
886 help_info = select_item_tlv->command_detail.cmd_qualifier.select_item.help_info;
888 if(!select_item_tlv->alpha_id.is_exist){
889 dbg("set the item dcs value to ALPHABET_FORMAT_8BIT_DATA");
890 select_item_tlv->alpha_id.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
894 if(select_item_tlv->alpha_id.is_exist && select_item_tlv->alpha_id.alpha_data_len > 0)
895 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
896 select_item_tlv->alpha_id.dcs.a_format,
897 (unsigned char*)&select_item_tlv->alpha_id.alpha_data,
898 (unsigned short)select_item_tlv->alpha_id.alpha_data_len);
899 dbg("select item text(%s)",text);
902 default_item_id = select_item_tlv->item_identifier.item_identifier;
903 dbg( "default item id(%d)", default_item_id);
906 menu_cnt = select_item_tlv->menu_item_cnt;
907 dbg( "menu item count(%d)", menu_cnt);
910 g_variant_builder_init(&v_builder, G_VARIANT_TYPE ("a(iis)"));
911 for(local_index= 0; local_index< menu_cnt; local_index++){
913 gchar item_str[SAT_ITEM_TEXT_LEN_MAX + 1];
915 memset(&item_str, 0 , SAT_ITEM_TEXT_LEN_MAX + 1);
917 tcore_util_convert_string_to_utf8((unsigned char*) &item_str, (unsigned short *) &item_len,
918 select_item_tlv->menu_item[local_index].dcs.a_format,
919 (unsigned char*) &select_item_tlv->menu_item[local_index].text,
920 (unsigned short) select_item_tlv->menu_item[local_index].text_len);
922 dbg( "index(%d) item_id(%d) item_len(%d) item_string(%s)", local_index, select_item_tlv->menu_item[local_index].item_id, item_len, item_str);
923 g_variant_builder_add(&v_builder, "(iis)", (gint32)(select_item_tlv->menu_item[local_index].item_id), item_len, item_str);
925 menu_items = g_variant_builder_end(&v_builder);
927 // generate command id
928 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
929 q_data.cmd_type = SAT_PROATV_CMD_SELECT_ITEM;
930 q_data.cp_name = g_strdup(cp_name);
931 memcpy((void*)&(q_data.cmd_data.selectItemInd), select_item_tlv, sizeof(struct tel_sat_select_item_tlv));
932 if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
933 g_free(q_data.cp_name);
935 command_id = q_data.cmd_id;
937 #if defined(TIZEN_SUPPORT_SAT_ICON)
938 /* Icon data extraction */
939 g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
940 if(select_item_tlv->icon_id.is_exist) {
941 g_variant_builder_add(&v_builder_icon, "(biiiiiis)", select_item_tlv->icon_id.is_exist, select_item_tlv->icon_id.icon_qualifer, (gint32) select_item_tlv->icon_id.icon_identifier, (gint32) select_item_tlv->icon_id.icon_info.width,
942 (gint32) select_item_tlv->icon_id.icon_info.height, select_item_tlv->icon_id.icon_info.ics, select_item_tlv->icon_id.icon_info.icon_data_len, select_item_tlv->icon_id.icon_info.icon_file);
944 icon_id = g_variant_builder_end(&v_builder_icon);
946 /* Icon list data extraction */
947 g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiv)"));
948 if(select_item_tlv->icon_list.is_exist) {
949 g_variant_builder_init(&v_builder_icon_list, G_VARIANT_TYPE ("a(iiiiis)"));
950 for(local_index= 0; local_index< (int)select_item_tlv->icon_list.icon_cnt; local_index++){
951 g_variant_builder_add(&v_builder_icon_list, "(iiiiis)", (gint32) select_item_tlv->icon_list.icon_id_list[local_index], (gint32) select_item_tlv->icon_list.icon_info[local_index].width,
952 (gint32) select_item_tlv->icon_list.icon_info[local_index].height, select_item_tlv->icon_list.icon_info[local_index].ics, select_item_tlv->icon_list.icon_info[local_index].icon_data_len, select_item_tlv->icon_list.icon_info[local_index].icon_file);
954 icon_list_info = g_variant_builder_end(&v_builder_icon_list);
956 g_variant_builder_add(&v_builder_icon, "(biiv)", select_item_tlv->icon_list.is_exist, select_item_tlv->icon_list.icon_qualifer, (gint32) select_item_tlv->icon_list.icon_cnt, icon_list_info);
959 icon_list = g_variant_builder_end(&v_builder_icon);
961 select_item = g_variant_new("(ibsiiivvv)", command_id, help_info, text, text_len,
962 default_item_id, menu_cnt, menu_items, icon_id, icon_list);
964 select_item = g_variant_new("(ibsiiiv)", command_id, help_info, text, text_len,
965 default_item_id, menu_cnt, menu_items);
970 GVariant* sat_manager_get_inkey_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_get_inkey_tlv* get_inkey_tlv, int decode_error)
972 TcorePlugin *plg = NULL;
973 GVariant *get_inkey = NULL;
974 struct sat_manager_queue_data q_data;
976 gint command_id = 0, key_type = 0, input_character_mode = 0;
977 gushort text_len = 0;
978 gint duration = 0, tmp_duration = 0;
979 gboolean b_numeric = FALSE, b_help_info = FALSE;
980 gchar text[SAT_TEXT_STRING_LEN_MAX+1];
981 #if defined(TIZEN_SUPPORT_SAT_ICON)
982 GVariant *icon_id = NULL;
983 GVariantBuilder v_builder_icon;
985 dbg("interpreting get inkey notification");
986 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX+1);
988 plg = tcore_server_find_plugin(ctx->server, cp_name);
990 dbg("there is no valid plugin at this point");
994 if(!get_inkey_tlv->text.string_length ||
995 (get_inkey_tlv->text.string_length > 0 && decode_error != TCORE_SAT_SUCCESS)){
996 struct treq_sat_terminal_rsp_data tr;
998 dbg("get inkey - invalid parameter of TLVs is found!!");
1000 memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
1001 tr.cmd_number = get_inkey_tlv->command_detail.cmd_num;
1002 tr.cmd_type = get_inkey_tlv->command_detail.cmd_type;
1004 memcpy((void*) &tr.terminal_rsp_data.get_inkey.command_detail,
1005 &get_inkey_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
1007 tr.terminal_rsp_data.get_inkey.device_id.src = DEVICE_ID_ME;
1008 tr.terminal_rsp_data.get_inkey.device_id.dest = DEVICE_ID_SIM;
1009 tr.terminal_rsp_data.get_inkey.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
1011 sat_manager_send_terminal_response(ctx->comm, plg, &tr);
1017 key_type = get_inkey_tlv->command_detail.cmd_qualifier.get_inkey.inkey_type;
1020 duration = SAT_TIME_OUT;
1021 tmp_duration = _get_time_in_ms(&get_inkey_tlv->duration);
1022 if (tmp_duration > 0)
1023 duration = tmp_duration;
1026 input_character_mode = get_inkey_tlv->command_detail.cmd_qualifier.get_inkey.alphabet_type;
1029 b_numeric = !get_inkey_tlv->command_detail.cmd_qualifier.get_inkey.alphabet_set;
1032 b_help_info = get_inkey_tlv->command_detail.cmd_qualifier.get_inkey.help_info;
1035 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
1036 get_inkey_tlv->text.dcs.a_format ,
1037 (unsigned char*)&get_inkey_tlv->text.string,
1038 (unsigned short)get_inkey_tlv->text.string_length);
1040 dbg("get inkey text(%s)",text);
1042 if (get_inkey_tlv->command_detail.cmd_qualifier.get_inkey.immediate_rsp_required) {
1043 dbg("get_inkey immediate_rsp_require is TRUE");
1044 //Send TR if UI display success
1047 //enqueue data and generate cmd_id
1048 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
1049 q_data.cmd_type = SAT_PROATV_CMD_GET_INKEY;
1050 q_data.cp_name = g_strdup(cp_name);
1051 memcpy((void*)&(q_data.cmd_data.getInkeyInd), get_inkey_tlv, sizeof(struct tel_sat_get_inkey_tlv));
1052 if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
1053 g_free(q_data.cp_name);
1055 command_id = q_data.cmd_id;
1057 #if defined(TIZEN_SUPPORT_SAT_ICON)
1058 /* Icon data extraction */
1059 g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
1060 if(get_inkey_tlv->icon_id.is_exist) {
1061 g_variant_builder_add(&v_builder_icon, "(biiiiiis)", get_inkey_tlv->icon_id.is_exist, get_inkey_tlv->icon_id.icon_qualifer, (gint32) get_inkey_tlv->icon_id.icon_identifier, (gint32) get_inkey_tlv->icon_id.icon_info.width,
1062 (gint32) get_inkey_tlv->icon_id.icon_info.height, get_inkey_tlv->icon_id.icon_info.ics, get_inkey_tlv->icon_id.icon_info.icon_data_len, get_inkey_tlv->icon_id.icon_info.icon_file);
1064 icon_id = g_variant_builder_end(&v_builder_icon);
1066 get_inkey = g_variant_new("(iiibbsiiv)", command_id, key_type, input_character_mode, b_numeric,
1067 b_help_info, text, text_len, duration, icon_id);
1069 get_inkey = g_variant_new("(iiibbsii)", command_id, key_type, input_character_mode, b_numeric,
1070 b_help_info, text, text_len, duration);
1075 GVariant* sat_manager_get_input_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_get_input_tlv* get_input_tlv, int decode_error)
1077 TcorePlugin *plg = NULL;
1078 GVariant *get_input = NULL;
1079 struct sat_manager_queue_data q_data;
1081 gint command_id = 0, input_character_mode = 0;
1082 gushort text_len = 0, def_text_len = 0;
1083 gint rsp_len_min = 0, rsp_len_max = 0;
1084 gboolean b_numeric = FALSE, b_help_info = FALSE, b_echo_input = FALSE;
1085 gchar text[SAT_TEXT_STRING_LEN_MAX+1];
1086 gchar def_text[SAT_TEXT_STRING_LEN_MAX+1];
1087 #if defined(TIZEN_SUPPORT_SAT_ICON)
1088 GVariant *icon_id = NULL;
1089 GVariantBuilder v_builder_icon;
1091 dbg("interpreting get input notification");
1092 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX+1);
1093 memset(&def_text, 0 , SAT_TEXT_STRING_LEN_MAX+1);
1095 plg = tcore_server_find_plugin(ctx->server, cp_name);
1097 dbg("there is no valid plugin at this point");
1101 #if GCF //disable the text length prb for GCF
1103 (get_input_tlv->text.string_length > 0 && decode_error != TCORE_SAT_SUCCESS) ||
1104 (!get_input_tlv->rsp_len.max) || (get_input_tlv->rsp_len.min > get_input_tlv->rsp_len.max)){
1106 if(!get_input_tlv->text.string_length ||
1107 (get_input_tlv->text.string_length > 0 && decode_error != TCORE_SAT_SUCCESS) ||
1108 (!get_input_tlv->rsp_len.max) || (get_input_tlv->rsp_len.min > get_input_tlv->rsp_len.max)){
1110 struct treq_sat_terminal_rsp_data tr;
1112 dbg("get input - invalid parameter of TLVs is found!!");
1114 memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
1115 tr.cmd_number = get_input_tlv->command_detail.cmd_num;
1116 tr.cmd_type = get_input_tlv->command_detail.cmd_type;
1118 memcpy((void*) &tr.terminal_rsp_data.get_input.command_detail,
1119 &get_input_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
1121 tr.terminal_rsp_data.get_input.device_id.src = DEVICE_ID_ME;
1122 tr.terminal_rsp_data.get_input.device_id.dest = DEVICE_ID_SIM;
1123 tr.terminal_rsp_data.get_input.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
1125 sat_manager_send_terminal_response(ctx->comm, plg, &tr);
1130 dbg( "[SAT] is SMS7 packing required [%d]",get_input_tlv->command_detail.cmd_qualifier.get_input.user_input_unpacked_format);
1133 input_character_mode = get_input_tlv->command_detail.cmd_qualifier.get_input.alphabet_type;
1136 b_numeric = !get_input_tlv->command_detail.cmd_qualifier.get_input.alphabet_set;
1139 b_help_info = get_input_tlv->command_detail.cmd_qualifier.get_input.help_info;
1142 b_echo_input = get_input_tlv->command_detail.cmd_qualifier.get_input.me_echo_user_input;
1143 dbg("numeric (%d), help info(%d), echo input(%d)", b_numeric, b_help_info, b_echo_input);
1146 if(get_input_tlv->text.string_length){
1147 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
1148 get_input_tlv->text.dcs.a_format ,
1149 (unsigned char*)&get_input_tlv->text.string,
1150 (unsigned short)get_input_tlv->text.string_length);
1151 dbg("get input text(%s)",text);
1154 //response length min & max
1155 rsp_len_min = get_input_tlv->rsp_len.min;
1156 rsp_len_max = get_input_tlv->rsp_len.max;
1158 /* 27.22.4.3.4 Expected Seq.4.2 */
1159 if(input_character_mode == INPUT_ALPHABET_TYPE_UCS2 && rsp_len_max > SAT_USC2_INPUT_LEN_MAX)
1160 rsp_len_max = SAT_USC2_INPUT_LEN_MAX;
1162 //default text & default text len
1163 if(get_input_tlv->default_text.string_length){
1164 int temp_len = get_input_tlv->default_text.string_length;
1165 if(temp_len > rsp_len_max) {
1166 dbg("get input def_text_len(%d) is larger than rsp_len_max(%d)", temp_len, rsp_len_max);
1167 get_input_tlv->default_text.string_length = rsp_len_max;
1169 tcore_util_convert_string_to_utf8((unsigned char*)&def_text,(unsigned short *)&def_text_len,
1170 get_input_tlv->default_text.dcs.a_format ,
1171 (unsigned char*)&get_input_tlv->default_text.string,
1172 (unsigned short)get_input_tlv->default_text.string_length);
1173 dbg("get input default text(%s)",def_text);
1176 //enqueue data and generate cmd_id
1177 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
1178 q_data.cmd_type = SAT_PROATV_CMD_GET_INPUT;
1179 q_data.cp_name = g_strdup(cp_name);
1180 memcpy((void*)&(q_data.cmd_data.getInputInd), get_input_tlv, sizeof(struct tel_sat_get_input_tlv));
1181 if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
1182 g_free(q_data.cp_name);
1184 command_id = q_data.cmd_id;
1186 #if defined(TIZEN_SUPPORT_SAT_ICON)
1187 /* Icon data extraction */
1188 g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
1189 if(get_input_tlv->icon_id.is_exist) {
1190 g_variant_builder_add(&v_builder_icon, "(biiiiiis)", get_input_tlv->icon_id.is_exist, get_input_tlv->icon_id.icon_qualifer, (gint32) get_input_tlv->icon_id.icon_identifier, (gint32) get_input_tlv->icon_id.icon_info.width,
1191 (gint32) get_input_tlv->icon_id.icon_info.height, get_input_tlv->icon_id.icon_info.ics, get_input_tlv->icon_id.icon_info.icon_data_len, get_input_tlv->icon_id.icon_info.icon_file);
1193 icon_id = g_variant_builder_end(&v_builder_icon);
1195 get_input = g_variant_new("(iibbbsiiisiv)", command_id, input_character_mode, b_numeric, b_help_info,
1196 b_echo_input, text, text_len, rsp_len_max, rsp_len_min, def_text, def_text_len, icon_id);
1198 get_input = g_variant_new("(iibbbsiiisi)", command_id, input_character_mode, b_numeric, b_help_info,
1199 b_echo_input, text, text_len, rsp_len_max, rsp_len_min, def_text, def_text_len);
1204 GVariant* sat_manager_play_tone_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_play_tone_tlv* play_tone_tlv)
1206 TcorePlugin *plg = NULL;
1207 GVariant *play_tone = NULL;
1208 struct sat_manager_queue_data q_data;
1210 gint command_id = 0, tone_type = 0, duration = 0, tmp_duration = 0;
1211 gushort text_len = 0;
1212 gchar text[SAT_TEXT_STRING_LEN_MAX+1];
1213 #if defined(TIZEN_SUPPORT_SAT_ICON)
1214 GVariant *icon_id = NULL;
1215 GVariantBuilder v_builder_icon;
1217 dbg("interpreting play tone notification");
1218 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX+1);
1220 plg = tcore_server_find_plugin(ctx->server, cp_name);
1222 dbg("there is no valid plugin at this point");
1227 if( play_tone_tlv->alpha_id.is_exist && play_tone_tlv->alpha_id.alpha_data_len){
1228 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
1229 play_tone_tlv->alpha_id.dcs.a_format,
1230 (unsigned char*)&play_tone_tlv->alpha_id.alpha_data,
1231 (unsigned short)play_tone_tlv->alpha_id.alpha_data_len);
1232 dbg("play tone ui display text (%s)",text);
1236 tone_type = play_tone_tlv->tone.tone_type;
1239 duration = SAT_TIME_OUT;
1240 tmp_duration = _get_time_in_ms(&play_tone_tlv->duration);
1241 if (tmp_duration > 0)
1242 duration = tmp_duration;
1244 //enqueue data and generate cmd_id
1245 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
1246 q_data.cmd_type = SAT_PROATV_CMD_PLAY_TONE;
1247 q_data.cp_name = g_strdup(cp_name);
1248 memcpy((void*)&(q_data.cmd_data.play_tone), play_tone_tlv, sizeof(struct tel_sat_play_tone_tlv));
1249 if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
1250 g_free(q_data.cp_name);
1252 command_id = q_data.cmd_id;
1254 #if defined(TIZEN_SUPPORT_SAT_ICON)
1255 /* Icon data extraction */
1256 g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
1257 if(play_tone_tlv->icon_id.is_exist) {
1258 g_variant_builder_add(&v_builder_icon, "(biiiiiis)", play_tone_tlv->icon_id.is_exist, play_tone_tlv->icon_id.icon_qualifer, (gint32) play_tone_tlv->icon_id.icon_identifier, (gint32) play_tone_tlv->icon_id.icon_info.width,
1259 (gint32) play_tone_tlv->icon_id.icon_info.height, play_tone_tlv->icon_id.icon_info.ics, play_tone_tlv->icon_id.icon_info.icon_data_len, play_tone_tlv->icon_id.icon_info.icon_file);
1261 icon_id = g_variant_builder_end(&v_builder_icon);
1263 play_tone = g_variant_new("(isivii)", command_id, text, text_len, icon_id, tone_type, duration);
1265 play_tone = g_variant_new("(isiii)", command_id, text, text_len, tone_type, duration);
1270 GVariant* sat_manager_send_sms_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_send_sms_tlv* send_sms_tlv)
1272 TcorePlugin *plg = NULL;
1273 GVariant *send_sms = NULL;
1274 struct sat_manager_queue_data q_data;
1276 int local_index = 0;
1277 gint command_id = 0, ton = 0, npi = 0, tpdu_type = 0;
1278 gboolean b_packing_required = FALSE;
1279 gushort text_len = 0, number_len = 0, tpdu_data_len= 0;
1280 gchar text[SAT_TEXT_STRING_LEN_MAX], dialling_number[SAT_DIALING_NUMBER_LEN_MAX];
1281 GVariantBuilder builder;
1282 GVariant *tpdu_data = NULL;
1283 #if defined(TIZEN_SUPPORT_SAT_ICON)
1284 GVariant *icon_id = NULL;
1285 GVariantBuilder v_builder_icon;
1287 dbg("interpreting send sms notification");
1288 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
1289 memset(&dialling_number, 0 , SAT_DIALING_NUMBER_LEN_MAX);
1291 plg = tcore_server_find_plugin(ctx->server, cp_name);
1293 dbg("there is no valid plugin at this point");
1298 if( send_sms_tlv->alpha_id.is_exist && send_sms_tlv->alpha_id.alpha_data_len){
1299 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
1300 send_sms_tlv->alpha_id.dcs.a_format,
1301 (unsigned char*)&send_sms_tlv->alpha_id.alpha_data,
1302 (unsigned short)send_sms_tlv->alpha_id.alpha_data_len);
1303 dbg("send sms ui display text (%s)",text);
1311 b_packing_required = send_sms_tlv->command_detail.cmd_qualifier.send_sms.packing_by_me_required;
1313 //address : ton, npi, dialling number, number len
1314 ton = send_sms_tlv->address.ton;
1315 npi = send_sms_tlv->address.npi;
1316 number_len = send_sms_tlv->address.dialing_number_len;
1317 memcpy(dialling_number, send_sms_tlv->address.dialing_number, SAT_DIALING_NUMBER_LEN_MAX);
1319 //tpdu data : type, data, data len
1320 tpdu_type = send_sms_tlv->sms_tpdu.tpdu_type;
1321 tpdu_data_len = send_sms_tlv->sms_tpdu.data_len;
1322 g_variant_builder_init(&builder, G_VARIANT_TYPE ("ay"));
1323 for (local_index= 0; local_index < tpdu_data_len; local_index++) {
1324 g_variant_builder_add(&builder, "y", send_sms_tlv->sms_tpdu.data[local_index]);
1326 tpdu_data = g_variant_builder_end(&builder);
1328 //enqueue data and generate cmd_id
1329 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
1330 q_data.cmd_type = SAT_PROATV_CMD_SEND_SMS;
1331 q_data.cp_name = g_strdup(cp_name);
1332 memcpy((void*)&(q_data.cmd_data.sendSMSInd), send_sms_tlv, sizeof(struct tel_sat_send_sms_tlv));
1333 if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
1334 g_free(q_data.cp_name);
1336 command_id = q_data.cmd_id;
1338 #if defined(TIZEN_SUPPORT_SAT_ICON)
1339 /* Icon data extraction */
1340 g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
1341 if(send_sms_tlv->icon_id.is_exist) {
1342 g_variant_builder_add(&v_builder_icon, "(biiiiiis)", send_sms_tlv->icon_id.is_exist, send_sms_tlv->icon_id.icon_qualifer, (gint32) send_sms_tlv->icon_id.icon_identifier, (gint32) send_sms_tlv->icon_id.icon_info.width,
1343 (gint32) send_sms_tlv->icon_id.icon_info.height, send_sms_tlv->icon_id.icon_info.ics, send_sms_tlv->icon_id.icon_info.icon_data_len, send_sms_tlv->icon_id.icon_info.icon_file);
1345 icon_id = g_variant_builder_end(&v_builder_icon);
1347 send_sms = g_variant_new("(isivbiisiivi)", command_id, text, text_len, icon_id, b_packing_required,
1348 ton, npi, dialling_number, number_len, tpdu_type, tpdu_data, tpdu_data_len);
1350 send_sms = g_variant_new("(isibiisiivi)", command_id, text, text_len, b_packing_required,
1351 ton, npi, dialling_number, number_len, tpdu_type, tpdu_data, tpdu_data_len);
1356 GVariant* sat_manager_send_ss_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_send_ss_tlv* send_ss_tlv)
1358 TcorePlugin *plg = NULL;
1359 GVariant *send_ss = NULL;
1360 struct sat_manager_queue_data q_data;
1362 gint command_id = 0, ton = 0, npi = 0;
1363 gushort text_len = 0;
1364 gint ss_str_len = 0;
1365 gchar text[SAT_TEXT_STRING_LEN_MAX], ss_string[SAT_SS_STRING_LEN_MAX];
1366 #if defined(TIZEN_SUPPORT_SAT_ICON)
1367 GVariant *icon_id = NULL;
1368 GVariantBuilder v_builder_icon;
1370 dbg("interpreting send ss notification");
1371 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
1372 memset(&ss_string, 0 , SAT_SS_STRING_LEN_MAX);
1374 plg = tcore_server_find_plugin(ctx->server, cp_name);
1376 dbg("there is no valid plugin at this point");
1380 if(!send_ss_tlv->alpha_id.is_exist &&
1381 (send_ss_tlv->icon_id.is_exist && send_ss_tlv->icon_id.icon_qualifer != ICON_QUALI_SELF_EXPLANATORY)){
1382 struct treq_sat_terminal_rsp_data tr;
1383 dbg("no alpha id and no self explanatory");
1385 memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
1386 tr.cmd_number = send_ss_tlv->command_detail.cmd_num;
1387 tr.cmd_type = send_ss_tlv->command_detail.cmd_type;
1389 memcpy((void*)&tr.terminal_rsp_data.send_ss.command_detail, &send_ss_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
1390 tr.terminal_rsp_data.send_ss.device_id.src = DEVICE_ID_ME;
1391 tr.terminal_rsp_data.send_ss.device_id.dest = DEVICE_ID_SIM;
1392 tr.terminal_rsp_data.send_ss.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
1394 sat_manager_send_terminal_response(ctx->comm, plg, &tr);
1399 if( send_ss_tlv->alpha_id.is_exist && send_ss_tlv->alpha_id.alpha_data_len){
1400 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
1401 send_ss_tlv->alpha_id.dcs.a_format,
1402 (unsigned char*)&send_ss_tlv->alpha_id.alpha_data,
1403 (unsigned short)send_ss_tlv->alpha_id.alpha_data_len);
1404 dbg("send ss ui display text (%s)",text);
1407 //ss string: ton, npi, ss string len, ss string
1408 ton = send_ss_tlv->ss_string.ton;
1409 npi = send_ss_tlv->ss_string.npi;
1410 ss_str_len = send_ss_tlv->ss_string.string_len;
1411 memcpy(ss_string, send_ss_tlv->ss_string.ss_string, SAT_SS_STRING_LEN_MAX);
1413 if(!ss_str_len || (ss_str_len > SAT_SS_STRING_LEN_MAX) ){
1414 struct treq_sat_terminal_rsp_data tr;
1415 dbg("no ss string");
1417 memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
1418 tr.cmd_number = send_ss_tlv->command_detail.cmd_num;
1419 tr.cmd_type = send_ss_tlv->command_detail.cmd_type;
1421 memcpy((void*)&tr.terminal_rsp_data.send_ss.command_detail, &send_ss_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
1422 tr.terminal_rsp_data.send_ss.device_id.src = DEVICE_ID_ME;
1423 tr.terminal_rsp_data.send_ss.device_id.dest = DEVICE_ID_SIM;
1424 tr.terminal_rsp_data.send_ss.result_type = RESULT_BEYOND_ME_CAPABILITIES;
1426 sat_manager_send_terminal_response(ctx->comm, plg, &tr);
1430 //enqueue data and generate cmd_id
1431 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
1432 q_data.cmd_type = SAT_PROATV_CMD_SEND_SS;
1433 q_data.cp_name = g_strdup(cp_name);
1434 memcpy((void*)&(q_data.cmd_data.send_ss), send_ss_tlv, sizeof(struct tel_sat_send_ss_tlv));
1435 if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
1436 g_free(q_data.cp_name);
1438 command_id = q_data.cmd_id;
1440 #if defined(TIZEN_SUPPORT_SAT_ICON)
1441 /* Icon data extraction */
1442 g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
1443 if(send_ss_tlv->icon_id.is_exist) {
1444 g_variant_builder_add(&v_builder_icon, "(biiiiiis)", send_ss_tlv->icon_id.is_exist, send_ss_tlv->icon_id.icon_qualifer, (gint32) send_ss_tlv->icon_id.icon_identifier, (gint32) send_ss_tlv->icon_id.icon_info.width,
1445 (gint32) send_ss_tlv->icon_id.icon_info.height, send_ss_tlv->icon_id.icon_info.ics, send_ss_tlv->icon_id.icon_info.icon_data_len, send_ss_tlv->icon_id.icon_info.icon_file);
1447 icon_id = g_variant_builder_end(&v_builder_icon);
1449 send_ss = g_variant_new("(isiviiis)", command_id, text, text_len, icon_id, ton, npi, ss_str_len, ss_string);
1451 send_ss = g_variant_new("(isiiiis)", command_id, text, text_len, ton, npi, ss_str_len, ss_string);
1456 GVariant* sat_manager_send_ussd_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_send_ussd_tlv* send_ussd_tlv)
1458 TcorePlugin *plg = NULL;
1459 GVariant *send_ussd = NULL;
1460 struct sat_manager_queue_data q_data;
1462 gint command_id = 0;
1464 gushort text_len = 0, ussd_str_len = 0;
1465 gchar text[SAT_TEXT_STRING_LEN_MAX], ussd_string[SAT_USSD_STRING_LEN_MAX];
1466 #if defined(TIZEN_SUPPORT_SAT_ICON)
1467 GVariant *icon_id = NULL;
1468 GVariantBuilder v_builder_icon;
1470 dbg("interpreting send ussd notification");
1471 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
1472 memset(&ussd_string, 0 , SAT_USSD_STRING_LEN_MAX);
1474 plg = tcore_server_find_plugin(ctx->server, cp_name);
1476 dbg("there is no valid plugin at this point");
1480 if(!send_ussd_tlv->alpha_id.is_exist &&
1481 (send_ussd_tlv->icon_id.is_exist && send_ussd_tlv->icon_id.icon_qualifer != ICON_QUALI_SELF_EXPLANATORY)){
1482 struct treq_sat_terminal_rsp_data tr;
1483 dbg("no alpha id and no self explanatory");
1485 memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
1486 tr.cmd_number = send_ussd_tlv->command_detail.cmd_num;
1487 tr.cmd_type = send_ussd_tlv->command_detail.cmd_type;
1489 memcpy((void*)&tr.terminal_rsp_data.send_ussd.command_detail, &send_ussd_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
1490 tr.terminal_rsp_data.send_ussd.device_id.src = DEVICE_ID_ME;
1491 tr.terminal_rsp_data.send_ussd.device_id.dest = DEVICE_ID_SIM;
1492 tr.terminal_rsp_data.send_ussd.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
1494 sat_manager_send_terminal_response(ctx->comm, plg, &tr);
1499 if( send_ussd_tlv->alpha_id.is_exist && send_ussd_tlv->alpha_id.alpha_data_len){
1500 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
1501 send_ussd_tlv->alpha_id.dcs.a_format,
1502 (unsigned char*)&send_ussd_tlv->alpha_id.alpha_data,
1503 (unsigned short)send_ussd_tlv->alpha_id.alpha_data_len);
1504 dbg("send ussd ui display text (%s)",text);
1508 dcs = send_ussd_tlv->ussd_string.dsc.raw_dcs;
1509 tcore_util_convert_string_to_utf8((unsigned char*)&ussd_string,(unsigned short *)&ussd_str_len,
1510 send_ussd_tlv->ussd_string.dsc.a_format,
1511 (unsigned char*)&send_ussd_tlv->ussd_string.ussd_string,
1512 (unsigned short)send_ussd_tlv->ussd_string.string_len);
1515 if(!ussd_str_len || (ussd_str_len > SAT_USSD_STRING_LEN_MAX) ){
1516 struct treq_sat_terminal_rsp_data tr;
1517 dbg("no ss string");
1519 memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
1520 tr.cmd_number = send_ussd_tlv->command_detail.cmd_num;
1521 tr.cmd_type = send_ussd_tlv->command_detail.cmd_type;
1523 memcpy((void*)&tr.terminal_rsp_data.send_ussd.command_detail, &send_ussd_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
1524 tr.terminal_rsp_data.send_ussd.device_id.src = DEVICE_ID_ME;
1525 tr.terminal_rsp_data.send_ussd.device_id.dest = DEVICE_ID_SIM;
1526 tr.terminal_rsp_data.send_ussd.result_type = RESULT_BEYOND_ME_CAPABILITIES;
1528 sat_manager_send_terminal_response(ctx->comm, plg, &tr);
1532 //enqueue data and generate cmd_id
1533 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
1534 q_data.cmd_type = SAT_PROATV_CMD_SEND_USSD;
1535 q_data.cp_name = g_strdup(cp_name);
1536 memcpy((void*)&(q_data.cmd_data.send_ussd), send_ussd_tlv, sizeof(struct tel_sat_send_ussd_tlv));
1537 if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
1538 g_free(q_data.cp_name);
1540 command_id = q_data.cmd_id;
1542 #if defined(TIZEN_SUPPORT_SAT_ICON)
1543 /* Icon data extraction */
1544 g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
1545 if(send_ussd_tlv->icon_id.is_exist) {
1546 g_variant_builder_add(&v_builder_icon, "(biiiiiis)", send_ussd_tlv->icon_id.is_exist, send_ussd_tlv->icon_id.icon_qualifer, (gint32) send_ussd_tlv->icon_id.icon_identifier, (gint32) send_ussd_tlv->icon_id.icon_info.width,
1547 (gint32) send_ussd_tlv->icon_id.icon_info.height, send_ussd_tlv->icon_id.icon_info.ics, send_ussd_tlv->icon_id.icon_info.icon_data_len, send_ussd_tlv->icon_id.icon_info.icon_file);
1549 icon_id = g_variant_builder_end(&v_builder_icon);
1551 send_ussd = g_variant_new("(isivyis)", command_id, text, text_len, icon_id, dcs, ussd_str_len, ussd_string);
1553 send_ussd = g_variant_new("(isiyis)", command_id, text, text_len, dcs, ussd_str_len, ussd_string);
1558 GVariant* sat_manager_setup_call_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_setup_call_tlv* setup_call_tlv)
1560 TcorePlugin *plg = NULL;
1561 GVariant *setup_call = NULL;
1562 struct sat_manager_queue_data q_data;
1563 struct treq_sat_terminal_rsp_data tr;
1565 gushort text_len = 0, confirm_text_len = 0;
1566 gint command_id = 0, call_type = 0, duration = 0;
1567 gchar confirm_text[SAT_TEXT_STRING_LEN_MAX], text[SAT_TEXT_STRING_LEN_MAX], call_number[SAT_DIALING_NUMBER_LEN_MAX];
1568 #if defined(TIZEN_SUPPORT_SAT_ICON)
1569 GVariant *icon_id = NULL;
1570 GVariantBuilder v_builder_icon;
1572 dbg("interpreting setup call notification");
1573 memset(&confirm_text, 0 , SAT_TEXT_STRING_LEN_MAX);
1574 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
1575 memset(&call_number, 0 , SAT_DIALING_NUMBER_LEN_MAX);
1576 memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
1578 plg = tcore_server_find_plugin(ctx->server, cp_name);
1580 dbg("there is no valid plugin at this point");
1584 if(setup_call_tlv->duration.time_interval > 0)
1586 dbg("[SAT] redial is not supported.\n");
1587 tr.terminal_rsp_data.setup_call.result_type = RESULT_BEYOND_ME_CAPABILITIES;
1591 //check for subaddress field
1592 if(setup_call_tlv->subaddress.subaddress_len > 0)
1594 dbg("[SAT] Sub address is not supported > 0)");
1595 tr.terminal_rsp_data.setup_call.result_type = RESULT_BEYOND_ME_CAPABILITIES;
1600 if(setup_call_tlv->command_detail.cmd_qualifier.setup_call.setup_call == SETUP_CALL_IF_ANOTHER_CALL_NOT_BUSY ||
1601 setup_call_tlv->command_detail.cmd_qualifier.setup_call.setup_call == SETUP_CALL_IF_ANOTHER_CALL_NOT_BUSY_WITH_REDIAL)
1603 GSList *co_list = NULL;
1604 CoreObject *co_call = NULL;
1605 int total_call_cnt = 0;
1607 co_list = tcore_plugin_get_core_objects_bytype(plg, CORE_OBJECT_TYPE_CALL);
1609 dbg("[ error ] co_list : 0");
1610 tr.terminal_rsp_data.setup_call.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
1614 co_call = (CoreObject *)co_list->data;
1615 g_slist_free(co_list);
1616 total_call_cnt = tcore_call_object_total_length(co_call);
1617 if (total_call_cnt){
1618 dbg("[SAT] Another call in progress hence rejecting. total_call_cnt: %d", total_call_cnt);
1619 tr.terminal_rsp_data.setup_call.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
1620 tr.terminal_rsp_data.setup_call.me_problem_type = ME_PROBLEM_ME_BUSY_ON_CALL;
1626 call_type = setup_call_tlv->command_detail.cmd_qualifier.setup_call.setup_call;
1629 if(setup_call_tlv->call_setup_alpha_id.alpha_data_len != 0){
1630 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
1631 setup_call_tlv->call_setup_alpha_id.dcs.a_format,
1632 (unsigned char*)&setup_call_tlv->call_setup_alpha_id.alpha_data,
1633 (unsigned short)setup_call_tlv->call_setup_alpha_id.alpha_data_len);
1635 dbg("setup call display text (%s)",text);
1637 if(setup_call_tlv->user_confirm_alpha_id.alpha_data_len != 0){
1638 tcore_util_convert_string_to_utf8((unsigned char*)&confirm_text,(unsigned short *)&confirm_text_len,
1639 setup_call_tlv->user_confirm_alpha_id.dcs.a_format,
1640 (unsigned char*)&setup_call_tlv->user_confirm_alpha_id.alpha_data,
1641 (unsigned short)setup_call_tlv->user_confirm_alpha_id.alpha_data_len);
1645 if(setup_call_tlv->address.ton == TON_INTERNATIONAL){
1646 call_number[0] = '+';
1647 memcpy(&call_number[1],setup_call_tlv->address.dialing_number, setup_call_tlv->address.dialing_number_len);
1650 memcpy(call_number,setup_call_tlv->address.dialing_number, setup_call_tlv->address.dialing_number_len);
1652 dbg("setup call call number: origin(%s), final(%s)",setup_call_tlv->address.dialing_number, call_number);
1655 if(setup_call_tlv->duration.time_interval > 0)
1656 duration = _get_time_in_ms(&setup_call_tlv->duration);
1658 //enqueue data and generate cmd_id
1659 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
1660 q_data.cmd_type = SAT_PROATV_CMD_SETUP_CALL;
1661 q_data.cp_name = g_strdup(cp_name);
1662 memcpy((void*)&(q_data.cmd_data.setup_call), setup_call_tlv, sizeof(struct tel_sat_setup_call_tlv));
1663 if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
1664 g_free(q_data.cp_name);
1666 command_id = q_data.cmd_id;
1668 #if defined(TIZEN_SUPPORT_SAT_ICON)
1669 /* Icon data extraction */
1670 g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
1671 if(setup_call_tlv->call_setup_icon_id.is_exist) {
1672 g_variant_builder_add(&v_builder_icon, "(biiiiiis)", setup_call_tlv->call_setup_icon_id.is_exist, setup_call_tlv->call_setup_icon_id.icon_qualifer, (gint32) setup_call_tlv->call_setup_icon_id.icon_identifier, (gint32) setup_call_tlv->call_setup_icon_id.icon_info.width,
1673 (gint32) setup_call_tlv->call_setup_icon_id.icon_info.height, setup_call_tlv->call_setup_icon_id.icon_info.ics, setup_call_tlv->call_setup_icon_id.icon_info.icon_data_len, setup_call_tlv->call_setup_icon_id.icon_info.icon_file);
1675 icon_id = g_variant_builder_end(&v_builder_icon);
1677 setup_call = g_variant_new("(isisivisi)", command_id, confirm_text, confirm_text_len, text, text_len, icon_id, call_type, call_number, duration);
1679 setup_call = g_variant_new("(isisiisi)", command_id, confirm_text, confirm_text_len, text, text_len, call_type, call_number, duration);
1684 tr.cmd_number = setup_call_tlv->command_detail.cmd_num;
1685 tr.cmd_type = setup_call_tlv->command_detail.cmd_type;
1686 memcpy((void*)&tr.terminal_rsp_data.setup_call.command_detail, &setup_call_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
1687 tr.terminal_rsp_data.setup_call.device_id.src = DEVICE_ID_ME;
1688 tr.terminal_rsp_data.setup_call.device_id.dest = setup_call_tlv->device_id.src;
1689 sat_manager_send_terminal_response(ctx->comm, plg, &tr);
1693 GVariant* sat_manager_setup_event_list_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_setup_event_list_tlv *event_list_tlv)
1695 TcorePlugin *plg = NULL;
1696 GVariant *event_list = NULL;
1698 int local_index = 0;
1699 gboolean rv = FALSE;
1701 GVariantBuilder builder;
1702 GVariant *evt_list = NULL;
1703 struct treq_sat_terminal_rsp_data *tr = NULL;
1705 dbg("interpreting event list notification");
1707 plg = tcore_server_find_plugin(ctx->server, cp_name);
1709 dbg("there is no valid plugin at this point");
1714 event_cnt = event_list_tlv->event_list.event_list_cnt;
1715 dbg("event cnt(%d)", event_cnt);
1717 memset(g_evt_list, 0, SAT_EVENT_DOWNLOAD_MAX);
1720 g_variant_builder_init(&builder, G_VARIANT_TYPE ("ai"));
1721 for (local_index = 0; local_index < event_cnt; local_index++) {
1722 g_variant_builder_add(&builder, "i", event_list_tlv->event_list.evt_list[local_index]);
1723 if(event_list_tlv->event_list.evt_list[local_index] >= SAT_EVENT_DOWNLOAD_MAX)
1725 g_evt_list[event_list_tlv->event_list.evt_list[local_index]] = TRUE;
1727 evt_list = g_variant_builder_end(&builder);
1729 event_list = g_variant_new("(iv)", event_cnt, evt_list);
1731 //send TR - does not need from application's response
1732 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
1735 tr->cmd_number = event_list_tlv->command_detail.cmd_num;
1736 tr->cmd_type = event_list_tlv->command_detail.cmd_type;
1737 memcpy((void*)&tr->terminal_rsp_data.setup_event_list.command_detail, &event_list_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
1738 tr->terminal_rsp_data.setup_event_list.device_id.src = event_list_tlv->device_id.dest;
1739 tr->terminal_rsp_data.setup_event_list.device_id.dest = event_list_tlv->device_id.src;
1740 tr->terminal_rsp_data.setup_event_list.result_type = RESULT_SUCCESS;
1741 tr->terminal_rsp_data.setup_event_list.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
1743 rv = sat_manager_check_availiable_event_list(event_list_tlv);
1744 dbg("rv of sat_manager_check_availiable_event_list()=[%d]", rv);
1746 sat_manager_send_terminal_response(ctx->comm, plg, tr);
1752 GVariant* sat_manager_setup_idle_mode_text_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_setup_idle_mode_text_tlv *idle_mode_tlv, int decode_error)
1754 TcorePlugin *plg = NULL;
1755 GVariant *idle_mode = NULL;
1756 struct sat_manager_queue_data q_data;
1758 gint command_id = 0;
1759 gushort text_len = 0;
1760 gchar text[SAT_TEXT_STRING_LEN_MAX+1];
1761 #if defined(TIZEN_SUPPORT_SAT_ICON)
1762 GVariant *icon_id = NULL;
1763 GVariantBuilder v_builder_icon;
1765 dbg("interpreting setup idle mode text notification");
1766 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX+1);
1768 plg = tcore_server_find_plugin(ctx->server, cp_name);
1770 dbg("there is no valid plugin at this point");
1775 if(!idle_mode_tlv->text.string_length && decode_error != TCORE_SAT_SUCCESS){
1776 struct treq_sat_terminal_rsp_data tr;
1778 dbg("setup idle mode text - invalid parameter of TLVs is found!!");
1780 memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
1781 tr.cmd_number = idle_mode_tlv->command_detail.cmd_num;
1782 tr.cmd_type = idle_mode_tlv->command_detail.cmd_type;
1784 memcpy((void*) &tr.terminal_rsp_data.setup_idle_mode_text.command_detail,
1785 &idle_mode_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
1787 tr.terminal_rsp_data.setup_idle_mode_text.device_id.src = DEVICE_ID_ME;
1788 tr.terminal_rsp_data.setup_idle_mode_text.device_id.dest = DEVICE_ID_SIM;
1789 tr.terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
1791 sat_manager_send_terminal_response(ctx->comm, plg, &tr);
1796 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
1797 idle_mode_tlv->text.dcs.a_format,
1798 (unsigned char*)&idle_mode_tlv->text.string,
1799 (unsigned short)idle_mode_tlv->text.string_length);
1801 dbg("setup idle mode text display text (%s)",text);
1803 //enqueue data and generate cmd_id
1804 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
1805 q_data.cmd_type = SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT;
1806 q_data.cp_name = g_strdup(cp_name);
1807 memcpy((void*)&(q_data.cmd_data.idle_mode), idle_mode_tlv, sizeof(struct tel_sat_setup_idle_mode_text_tlv));
1808 if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
1809 g_free(q_data.cp_name);
1811 command_id = q_data.cmd_id;
1813 #if defined(TIZEN_SUPPORT_SAT_ICON)
1814 /* Icon data extraction */
1815 g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
1816 if(idle_mode_tlv->icon_id.is_exist) {
1817 g_variant_builder_add(&v_builder_icon, "(biiiiiis)", idle_mode_tlv->icon_id.is_exist, idle_mode_tlv->icon_id.icon_qualifer, (gint32) idle_mode_tlv->icon_id.icon_identifier, (gint32) idle_mode_tlv->icon_id.icon_info.width,
1818 (gint32) idle_mode_tlv->icon_id.icon_info.height, idle_mode_tlv->icon_id.icon_info.ics, idle_mode_tlv->icon_id.icon_info.icon_data_len, idle_mode_tlv->icon_id.icon_info.icon_file);
1820 icon_id = g_variant_builder_end(&v_builder_icon);
1822 idle_mode = g_variant_new("(isiv)", command_id, text, text_len, icon_id);
1824 idle_mode = g_variant_new("(isi)", command_id, text, text_len);
1829 GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_open_channel_tlv *open_channel_tlv)
1831 TcorePlugin *plg = NULL;
1832 CoreObject *co_call = NULL;
1833 CoreObject *co_network = NULL;
1835 GSList* call_active_list = NULL;
1836 enum telephony_network_access_technology result = 0;
1838 GVariant *open_channel = NULL;
1839 struct sat_manager_queue_data q_data;
1841 gint command_id = 0, bearer_type = 0, protocol_type = 0, dest_addr_type = 0;
1842 gboolean immediate_link = FALSE, auto_reconnection = FALSE, bg_mode = FALSE;
1843 gushort text_len = 0;
1844 gint buffer_size = 0, port_number = 0;
1845 gchar text[SAT_ALPHA_ID_LEN_MAX], dest_address[SAT_OTHER_ADDR_LEN_MAX];
1846 GVariant *bearer_param = NULL;
1847 GVariant *bearer_detail = NULL;
1848 #if defined(TIZEN_SUPPORT_SAT_ICON)
1849 GVariant *icon_id = NULL;
1850 GVariantBuilder v_builder_icon;
1852 dbg("interpreting open channel notification");
1853 memset(&text, 0 , SAT_ALPHA_ID_LEN_MAX);
1854 memset(&dest_address, 0 , SAT_OTHER_ADDR_LEN_MAX);
1856 plg = tcore_server_find_plugin(ctx->server, cp_name);
1858 dbg("there is no valid plugin at this point");
1862 co_call = tcore_plugin_ref_core_object(plg, CORE_OBJECT_TYPE_CALL);
1863 co_network = tcore_plugin_ref_core_object(plg, CORE_OBJECT_TYPE_NETWORK);
1864 if(!co_call || !co_network){
1865 struct treq_sat_terminal_rsp_data tr;
1866 dbg("call or network co_obj does not exist");
1868 memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
1869 tr.cmd_number = open_channel_tlv->command_detail.cmd_num;
1870 tr.cmd_type = open_channel_tlv->command_detail.cmd_type;
1872 memcpy((void*)&tr.terminal_rsp_data.open_channel.command_detail, &open_channel_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
1873 tr.terminal_rsp_data.open_channel.device_id.src = DEVICE_ID_ME;
1874 tr.terminal_rsp_data.open_channel.device_id.dest = DEVICE_ID_SIM;
1875 tr.terminal_rsp_data.open_channel.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
1876 tr.terminal_rsp_data.open_channel.me_problem_type = ME_PROBLEM_NO_SERVICE;
1878 memcpy((void*)&tr.terminal_rsp_data.open_channel.bearer_desc, &open_channel_tlv->bearer_desc, sizeof(struct tel_sat_bearer_description));
1879 sat_manager_send_terminal_response(ctx->comm, plg, &tr);
1884 call_active_list = tcore_call_object_find_by_status(co_call, TCORE_CALL_STATUS_ACTIVE);
1885 tcore_network_get_access_technology(co_network,&result);
1886 if(result < NETWORK_ACT_UMTS && call_active_list){
1887 struct treq_sat_terminal_rsp_data tr;
1888 dbg("call is busy in not 3G state atc(%d)", result);
1890 memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
1891 tr.cmd_number = open_channel_tlv->command_detail.cmd_num;
1892 tr.cmd_type = open_channel_tlv->command_detail.cmd_type;
1894 memcpy((void*)&tr.terminal_rsp_data.open_channel.command_detail, &open_channel_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
1895 tr.terminal_rsp_data.open_channel.device_id.src = DEVICE_ID_ME;
1896 tr.terminal_rsp_data.open_channel.device_id.dest = DEVICE_ID_SIM;
1897 tr.terminal_rsp_data.open_channel.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
1898 tr.terminal_rsp_data.open_channel.me_problem_type = ME_PROBLEM_ME_BUSY_ON_CALL;
1900 memcpy((void*)&tr.terminal_rsp_data.open_channel.bearer_desc, &open_channel_tlv->bearer_desc, sizeof(struct tel_sat_bearer_description));
1901 sat_manager_send_terminal_response(ctx->comm, plg, &tr);
1902 g_slist_free(call_active_list);
1908 immediate_link = open_channel_tlv->command_detail.cmd_qualifier.open_channel.immediate_link;
1911 auto_reconnection = open_channel_tlv->command_detail.cmd_qualifier.open_channel.automatic_reconnection;
1914 bg_mode = open_channel_tlv->command_detail.cmd_qualifier.open_channel.background_mode;
1917 if(open_channel_tlv->alpha_id.is_exist && open_channel_tlv->alpha_id.alpha_data_len > 0)
1918 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
1919 open_channel_tlv->alpha_id.dcs.a_format,
1920 (unsigned char*)&open_channel_tlv->alpha_id.alpha_data,
1921 (unsigned short)open_channel_tlv->alpha_id.alpha_data_len);
1922 dbg("open channel text(%s)",text);
1925 buffer_size = open_channel_tlv->buffer_size.size[0];
1926 buffer_size = buffer_size << 8;
1927 buffer_size += open_channel_tlv->buffer_size.size[1];
1928 //memcpy(&buffer_size, open_channel_tlv->buffer_size.size, sizeof(unsigned char)*2);
1929 dbg("buffer size(%d)", buffer_size);
1931 //interface transport level
1932 protocol_type = open_channel_tlv->interface_transport_level.protocol_type;
1933 port_number = open_channel_tlv->interface_transport_level.port_number;
1935 //data destination address
1936 dest_addr_type = open_channel_tlv->data_destination_address.address_type;
1937 memcpy(dest_address, open_channel_tlv->data_destination_address.address,
1938 open_channel_tlv->data_destination_address.address_len);
1939 dbg("destination IP address (%s)", dest_address);
1942 bearer_type = open_channel_tlv->bearer_desc.bearer_type;
1944 //bearer param & bearer detail
1945 switch(bearer_type){
1948 gint data_rate = 0, service_type = 0, conn_element_type = 0;
1951 gint ton = 0, npi = 0, time_duration1 = 0, time_duration2 = 0, other_addr_type = 0;
1952 gushort login_len = 0, pwd_len = 0;
1953 gchar dialling_number[SAT_DIALING_NUMBER_LEN_MAX], sub_addr[SAT_SUB_ADDR_LEN_MAX];
1954 gchar other_address[SAT_OTHER_ADDR_LEN_MAX];
1955 gchar login[SAT_TEXT_STRING_LEN_MAX], pwd[SAT_TEXT_STRING_LEN_MAX];
1957 memset(&dialling_number, 0 , SAT_DIALING_NUMBER_LEN_MAX);
1958 memset(&sub_addr, 0 , SAT_SUB_ADDR_LEN_MAX);
1959 memset(&other_address, 0 , SAT_OTHER_ADDR_LEN_MAX);
1960 memset(&login, 0 , SAT_TEXT_STRING_LEN_MAX);
1961 memset(&pwd, 0 , SAT_TEXT_STRING_LEN_MAX);
1964 data_rate = open_channel_tlv->bearer_desc.bearer_parameter.cs_bearer_param.data_rate;
1965 service_type = open_channel_tlv->bearer_desc.bearer_parameter.cs_bearer_param.service_type;
1966 conn_element_type = open_channel_tlv->bearer_desc.bearer_parameter.cs_bearer_param.connection_element_type;
1968 bearer_param = g_variant_new("(iii)", data_rate, service_type, conn_element_type);
1971 ton = open_channel_tlv->bearer_detail.cs_bearer.address.ton;
1972 npi = open_channel_tlv->bearer_detail.cs_bearer.address.npi;
1973 memcpy(dialling_number, open_channel_tlv->bearer_detail.cs_bearer.address.dialing_number, open_channel_tlv->bearer_detail.cs_bearer.address.dialing_number_len);
1975 memcpy(sub_addr, open_channel_tlv->bearer_detail.cs_bearer.subaddress.subaddress, open_channel_tlv->bearer_detail.cs_bearer.subaddress.subaddress_len);
1977 time_duration1 = _get_time_in_ms(&open_channel_tlv->bearer_detail.cs_bearer.duration1);
1978 time_duration2 = _get_time_in_ms(&open_channel_tlv->bearer_detail.cs_bearer.duration2);
1980 other_addr_type = open_channel_tlv->bearer_detail.cs_bearer.other_address.address_type;
1981 memcpy(other_address, open_channel_tlv->bearer_detail.cs_bearer.other_address.address, open_channel_tlv->bearer_detail.cs_bearer.other_address.address_len);
1983 tcore_util_convert_string_to_utf8((unsigned char*) &login, (unsigned short *) &login_len,
1984 open_channel_tlv->bearer_detail.cs_bearer.text_user_login.dcs.a_format,
1985 (unsigned char*) &open_channel_tlv->bearer_detail.cs_bearer.text_user_login.string,
1986 (unsigned short) open_channel_tlv->bearer_detail.cs_bearer.text_user_login.string_length);
1988 tcore_util_convert_string_to_utf8((unsigned char*) &pwd, (unsigned short *) &pwd_len,
1989 open_channel_tlv->bearer_detail.cs_bearer.text_user_pwd.dcs.a_format,
1990 (unsigned char*) &open_channel_tlv->bearer_detail.cs_bearer.text_user_pwd.string,
1991 (unsigned short) open_channel_tlv->bearer_detail.cs_bearer.text_user_pwd.string_length);
1993 bearer_detail= g_variant_new("(iissiiisss)", ton, npi, dialling_number, sub_addr, time_duration1, time_duration2,
1994 other_addr_type, other_address, login, pwd);
1998 gint precedence_class = 0, delay_class = 0, reliability_class = 0;
1999 gint peak_class = 0, mean_class = 0, pdp_type = 0;
2002 gint other_addr_type = 0;
2003 gushort login_len = 0, pwd_len = 0;
2004 gchar network_access_name[SAT_NET_ACC_NAM_LEN_MAX];
2005 gchar other_address[SAT_OTHER_ADDR_LEN_MAX];
2006 gchar login[SAT_TEXT_STRING_LEN_MAX], pwd[SAT_TEXT_STRING_LEN_MAX];
2008 memset(&network_access_name, 0 , SAT_NET_ACC_NAM_LEN_MAX);
2009 memset(&other_address, 0 , SAT_OTHER_ADDR_LEN_MAX);
2010 memset(&login, 0 , SAT_TEXT_STRING_LEN_MAX);
2011 memset(&pwd, 0 , SAT_TEXT_STRING_LEN_MAX);
2014 precedence_class = open_channel_tlv->bearer_desc.bearer_parameter.ps_bearer_param.precedence_class;
2015 delay_class = open_channel_tlv->bearer_desc.bearer_parameter.ps_bearer_param.delay_class;
2016 reliability_class = open_channel_tlv->bearer_desc.bearer_parameter.ps_bearer_param.reliability_class;
2017 peak_class = open_channel_tlv->bearer_desc.bearer_parameter.ps_bearer_param.peak_throughput_class;
2018 mean_class = open_channel_tlv->bearer_desc.bearer_parameter.ps_bearer_param.mean_throughput_class;
2019 pdp_type = open_channel_tlv->bearer_desc.bearer_parameter.ps_bearer_param.pdp_type;
2021 bearer_param = g_variant_new("(iiiiii)", precedence_class, delay_class, reliability_class, peak_class, mean_class, pdp_type);
2023 memcpy(network_access_name, open_channel_tlv->bearer_detail.ps_bearer.network_access_name.network_access_name,
2024 open_channel_tlv->bearer_detail.ps_bearer.network_access_name.length);
2025 other_addr_type = open_channel_tlv->bearer_detail.ps_bearer.other_address.address_type;
2026 memcpy(other_address, open_channel_tlv->bearer_detail.ps_bearer.other_address.address, open_channel_tlv->bearer_detail.ps_bearer.other_address.address_len);
2028 tcore_util_convert_string_to_utf8((unsigned char*) &login, (unsigned short *) &login_len,
2029 open_channel_tlv->bearer_detail.ps_bearer.text_user_login.dcs.a_format,
2030 (unsigned char*) &open_channel_tlv->bearer_detail.ps_bearer.text_user_login.string,
2031 (unsigned short) open_channel_tlv->bearer_detail.ps_bearer.text_user_login.string_length);
2033 tcore_util_convert_string_to_utf8((unsigned char*) &pwd, (unsigned short *) &pwd_len,
2034 open_channel_tlv->bearer_detail.ps_bearer.text_user_pwd.dcs.a_format,
2035 (unsigned char*) &open_channel_tlv->bearer_detail.ps_bearer.text_user_pwd.string,
2036 (unsigned short) open_channel_tlv->bearer_detail.ps_bearer.text_user_pwd.string_length);
2038 bearer_detail= g_variant_new("(sisss)", network_access_name, other_addr_type, other_address, login, pwd);
2041 case BEARER_DEFAULT_BEARER_FROM_TRANSPORT_LAYER:{
2045 gint other_addr_type = 0;
2046 gushort login_len = 0, pwd_len = 0;
2047 gchar other_address[SAT_OTHER_ADDR_LEN_MAX];
2048 gchar login[SAT_TEXT_STRING_LEN_MAX], pwd[SAT_TEXT_STRING_LEN_MAX];
2050 memset(&other_address, 0 , SAT_OTHER_ADDR_LEN_MAX);
2051 memset(&login, 0 , SAT_TEXT_STRING_LEN_MAX);
2052 memset(&pwd, 0 , SAT_TEXT_STRING_LEN_MAX);
2055 bearer_param = g_variant_new("()");
2057 other_addr_type = open_channel_tlv->bearer_detail.default_bearer.other_address.address_type;
2058 memcpy(other_address, open_channel_tlv->bearer_detail.default_bearer.other_address.address, open_channel_tlv->bearer_detail.default_bearer.other_address.address_len);
2060 tcore_util_convert_string_to_utf8((unsigned char*) &login, (unsigned short *) &login_len,
2061 open_channel_tlv->bearer_detail.default_bearer.text_user_login.dcs.a_format,
2062 (unsigned char*) &open_channel_tlv->bearer_detail.default_bearer.text_user_login.string,
2063 (unsigned short) open_channel_tlv->bearer_detail.default_bearer.text_user_login.string_length);
2065 tcore_util_convert_string_to_utf8((unsigned char*) &pwd, (unsigned short *) &pwd_len,
2066 open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.dcs.a_format,
2067 (unsigned char*) &open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.string,
2068 (unsigned short) open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.string_length);
2070 bearer_detail= g_variant_new("(isss)", other_addr_type, other_address, login, pwd);
2073 case BEARER_LOCAL_LINK_TECHNOLOGY_INDEPENDENT:{
2077 gushort pwd_len = 0;
2078 gint remote_address_type =0, time_duration1 = 0, time_duration2 = 0;
2079 gchar remote_address[SAT_REMOTE_ENTITY_ADDR_LEN_MAX];
2080 gchar pwd[SAT_TEXT_STRING_LEN_MAX];
2082 memset(&remote_address, 0 , SAT_REMOTE_ENTITY_ADDR_LEN_MAX);
2083 memset(&pwd, 0 , SAT_TEXT_STRING_LEN_MAX);
2086 bearer_param = g_variant_new("()");
2088 time_duration1 = _get_time_in_ms(&open_channel_tlv->bearer_detail.local_bearer.duration1);
2089 time_duration2 = _get_time_in_ms(&open_channel_tlv->bearer_detail.local_bearer.duration2);
2091 tcore_util_convert_string_to_utf8((unsigned char*) &pwd, (unsigned short *) &pwd_len,
2092 open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.dcs.a_format,
2093 (unsigned char*) &open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.string,
2094 (unsigned short) open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.string_length);
2096 remote_address_type = open_channel_tlv->bearer_detail.local_bearer.remote_entity_address.coding_type;
2097 memcpy(remote_address, open_channel_tlv->bearer_detail.local_bearer.remote_entity_address.remote_entity_address, open_channel_tlv->bearer_detail.local_bearer.remote_entity_address.length);
2099 bearer_detail= g_variant_new("(iisis)", time_duration1, time_duration2, pwd, remote_address_type, remote_address);
2103 dbg("invalid bearer data");
2107 //enqueue data and generate cmd_id
2108 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
2109 q_data.cmd_type = SAT_PROATV_CMD_OPEN_CHANNEL;
2110 q_data.cp_name = g_strdup(cp_name);
2111 memcpy((void*)&(q_data.cmd_data.open_channel), open_channel_tlv, sizeof(struct tel_sat_open_channel_tlv));
2112 if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
2113 g_free(q_data.cp_name);
2115 command_id = q_data.cmd_id;
2117 #if defined(TIZEN_SUPPORT_STK_HIDE_ALPHA_ID)
2118 dbg("orange request - do not show the popup");
2119 _sat_manager_handle_open_channel_confirm(ctx, plg, command_id, USER_CONFIRM_YES, NULL);
2120 return open_channel;
2123 #if defined(TIZEN_SUPPORT_SAT_ICON)
2124 /* Icon data extraction */
2125 g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
2126 if(open_channel_tlv->icon_id.is_exist) {
2127 g_variant_builder_add(&v_builder_icon, "(biiiiiis)", open_channel_tlv->icon_id.is_exist, open_channel_tlv->icon_id.icon_qualifer, (gint32) open_channel_tlv->icon_id.icon_identifier, (gint32) open_channel_tlv->icon_id.icon_info.width,
2128 (gint32) open_channel_tlv->icon_id.icon_info.height, open_channel_tlv->icon_id.icon_info.ics, open_channel_tlv->icon_id.icon_info.icon_data_len, open_channel_tlv->icon_id.icon_info.icon_file);
2130 icon_id = g_variant_builder_end(&v_builder_icon);
2132 //sat_ui_support_exec_bip();
2134 open_channel = g_variant_new("(isivbbbiviiiisv)", command_id, text, text_len, icon_id, immediate_link, auto_reconnection, bg_mode,
2135 bearer_type, bearer_param, buffer_size, protocol_type, port_number, dest_addr_type, dest_address, bearer_detail);
2137 open_channel = g_variant_new("(isibbbiviiiisv)", command_id, text, text_len, immediate_link, auto_reconnection, bg_mode,
2138 bearer_type, bearer_param, buffer_size, protocol_type, port_number, dest_addr_type, dest_address, bearer_detail);
2140 return open_channel;
2143 GVariant* sat_manager_close_channel_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_close_channel_tlv *close_channel_tlv)
2145 TcorePlugin *plg = NULL;
2146 GVariant *close_channel = NULL;
2147 struct sat_manager_queue_data q_data;
2149 gint command_id = 0, channel_id = 0;
2150 gushort text_len = 0;
2151 gchar text[SAT_ALPHA_ID_LEN_MAX];
2152 #if defined(TIZEN_SUPPORT_SAT_ICON)
2153 GVariant *icon_id = NULL;
2154 GVariantBuilder v_builder_icon;
2156 dbg("interpreting close channel notification");
2157 memset(&text, 0 , SAT_ALPHA_ID_LEN_MAX);
2159 plg = tcore_server_find_plugin(ctx->server, cp_name);
2161 dbg("there is no valid plugin at this point");
2166 channel_id = close_channel_tlv->device_id.dest;
2168 //close channel text
2169 if(close_channel_tlv->alpha_id.is_exist && close_channel_tlv->alpha_id.alpha_data_len > 0)
2170 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
2171 close_channel_tlv->alpha_id.dcs.a_format,
2172 (unsigned char*)&close_channel_tlv->alpha_id.alpha_data,
2173 (unsigned short)close_channel_tlv->alpha_id.alpha_data_len);
2174 dbg("close channel text(%s)",text);
2176 //enqueue data and generate cmd_id
2177 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
2178 q_data.cmd_type = SAT_PROATV_CMD_CLOSE_CHANNEL;
2179 q_data.cp_name = g_strdup(cp_name);
2180 memcpy((void*)&(q_data.cmd_data.close_channel), close_channel_tlv, sizeof(struct tel_sat_close_channel_tlv));
2181 if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
2182 g_free(q_data.cp_name);
2184 command_id = q_data.cmd_id;
2186 #if defined(TIZEN_SUPPORT_SAT_ICON)
2187 /* Icon data extraction */
2188 g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
2189 if(close_channel_tlv->icon_id.is_exist) {
2190 g_variant_builder_add(&v_builder_icon, "(biiiiiis)", close_channel_tlv->icon_id.is_exist, close_channel_tlv->icon_id.icon_qualifer, (gint32) close_channel_tlv->icon_id.icon_identifier, (gint32) close_channel_tlv->icon_id.icon_info.width,
2191 (gint32) close_channel_tlv->icon_id.icon_info.height, close_channel_tlv->icon_id.icon_info.ics, close_channel_tlv->icon_id.icon_info.icon_data_len, close_channel_tlv->icon_id.icon_info.icon_file);
2193 icon_id = g_variant_builder_end(&v_builder_icon);
2195 close_channel = g_variant_new("(isivi)", command_id, text, text_len, icon_id, channel_id);
2197 close_channel = g_variant_new("(isii)", command_id, text, text_len, channel_id);
2199 return close_channel;
2202 GVariant* sat_manager_receive_data_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_receive_channel_tlv *receive_data_tlv)
2204 TcorePlugin *plg = NULL;
2205 GVariant *receive_data = NULL;
2206 struct sat_manager_queue_data q_data;
2208 gint command_id = 0, channel_id = 0;
2209 gushort text_len = 0;
2210 gint channel_data_len = 0;
2211 gchar text[SAT_ALPHA_ID_LEN_MAX];
2212 #if defined(TIZEN_SUPPORT_SAT_ICON)
2213 GVariant *icon_id = NULL;
2214 GVariantBuilder v_builder_icon;
2216 dbg("interpreting receive data notification");
2217 memset(&text, 0 , SAT_ALPHA_ID_LEN_MAX);
2219 plg = tcore_server_find_plugin(ctx->server, cp_name);
2221 dbg("there is no valid plugin at this point");
2226 channel_id = receive_data_tlv->device_id.dest;
2229 if(receive_data_tlv->alpha_id.is_exist && receive_data_tlv->alpha_id.alpha_data_len > 0)
2230 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
2231 receive_data_tlv->alpha_id.dcs.a_format,
2232 (unsigned char*)&receive_data_tlv->alpha_id.alpha_data,
2233 (unsigned short)receive_data_tlv->alpha_id.alpha_data_len);
2234 dbg("receive data text(%s)",text);
2236 channel_data_len = receive_data_tlv->channel_data_len.data_len;
2238 //enqueue data and generate cmd_id
2239 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
2240 q_data.cmd_type = SAT_PROATV_CMD_RECEIVE_DATA;
2241 q_data.cp_name = g_strdup(cp_name);
2242 memcpy((void*)&(q_data.cmd_data.receive_data), receive_data_tlv, sizeof(struct tel_sat_receive_channel_tlv));
2243 if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
2244 g_free(q_data.cp_name);
2246 command_id = q_data.cmd_id;
2248 #if defined(TIZEN_SUPPORT_SAT_ICON)
2249 /* Icon data extraction */
2250 g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
2251 if(receive_data_tlv->icon_id.is_exist) {
2252 g_variant_builder_add(&v_builder_icon, "(biiiiiis)", receive_data_tlv->icon_id.is_exist, receive_data_tlv->icon_id.icon_qualifer, (gint32) receive_data_tlv->icon_id.icon_identifier, (gint32) receive_data_tlv->icon_id.icon_info.width,
2253 (gint32) receive_data_tlv->icon_id.icon_info.height, receive_data_tlv->icon_id.icon_info.ics, receive_data_tlv->icon_id.icon_info.icon_data_len, receive_data_tlv->icon_id.icon_info.icon_file);
2255 icon_id = g_variant_builder_end(&v_builder_icon);
2257 receive_data = g_variant_new("(isivii)", command_id, text, text_len, icon_id, channel_id, channel_data_len);
2259 receive_data = g_variant_new("(isiii)", command_id, text, text_len, channel_id, channel_data_len);
2261 return receive_data;
2264 GVariant* sat_manager_send_data_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_send_channel_tlv *send_data_tlv)
2266 TcorePlugin *plg = NULL;
2267 GVariant *send_data = NULL;
2268 struct sat_manager_queue_data q_data;
2270 int local_index = 0;
2271 gint command_id = 0, channel_id = 0, data_len = 0;
2272 gboolean send_data_immediately = FALSE;
2273 gushort text_len = 0;
2274 gchar text[SAT_ALPHA_ID_LEN_MAX];
2275 GVariantBuilder builder;
2276 GVariant *channel_data = NULL;
2277 #if defined(TIZEN_SUPPORT_SAT_ICON)
2278 GVariant *icon_id = NULL;
2279 GVariantBuilder v_builder_icon;
2281 dbg("interpreting send data notification");
2282 memset(&text, 0 , SAT_ALPHA_ID_LEN_MAX);
2284 plg = tcore_server_find_plugin(ctx->server, cp_name);
2286 dbg("there is no valid plugin at this point");
2290 //send data immediately
2291 send_data_immediately = send_data_tlv->command_detail.cmd_qualifier.send_data.send_data_immediately;
2294 channel_id = send_data_tlv->device_id.dest;
2297 if(send_data_tlv->alpha_id.is_exist && send_data_tlv->alpha_id.alpha_data_len > 0)
2298 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
2299 send_data_tlv->alpha_id.dcs.a_format,
2300 (unsigned char*)&send_data_tlv->alpha_id.alpha_data,
2301 (unsigned short)send_data_tlv->alpha_id.alpha_data_len);
2302 dbg("send data text(%s)",text);
2304 //channel data, data len
2305 data_len = send_data_tlv->channel_data.data_string_len;
2306 g_variant_builder_init(&builder, G_VARIANT_TYPE ("ay"));
2307 for (local_index = 0; local_index < data_len; local_index++) {
2308 //dbg("send data index(%d) data(0x%x)",index, send_data_tlv->channel_data.data_string[index]);
2309 g_variant_builder_add(&builder, "y", send_data_tlv->channel_data.data_string[local_index]);
2311 channel_data = g_variant_builder_end(&builder);
2313 //enqueue data and generate cmd_id
2314 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
2315 q_data.cmd_type = SAT_PROATV_CMD_SEND_DATA;
2316 q_data.cp_name = g_strdup(cp_name);
2317 memcpy((void*)&(q_data.cmd_data.send_data), send_data_tlv, sizeof(struct tel_sat_send_channel_tlv));
2318 if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
2319 g_free(q_data.cp_name);
2321 command_id = q_data.cmd_id;
2323 #if defined(TIZEN_SUPPORT_SAT_ICON)
2324 /* Icon data extraction */
2325 g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
2326 if(send_data_tlv->icon_id.is_exist) {
2327 g_variant_builder_add(&v_builder_icon, "(biiiiiis)", send_data_tlv->icon_id.is_exist, send_data_tlv->icon_id.icon_qualifer, (gint32) send_data_tlv->icon_id.icon_identifier, (gint32) send_data_tlv->icon_id.icon_info.width,
2328 (gint32) send_data_tlv->icon_id.icon_info.height, send_data_tlv->icon_id.icon_info.ics, send_data_tlv->icon_id.icon_info.icon_data_len, send_data_tlv->icon_id.icon_info.icon_file);
2330 icon_id = g_variant_builder_end(&v_builder_icon);
2332 send_data = g_variant_new("(isivibvi)", command_id, text, text_len, icon_id, channel_id, send_data_immediately, channel_data, data_len);
2334 send_data = g_variant_new("(isiibvi)", command_id, text, text_len, channel_id, send_data_immediately, channel_data, data_len);
2339 GVariant* sat_manager_get_channel_status_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_get_channel_status_tlv *get_channel_status_tlv)
2341 TcorePlugin *plg = NULL;
2342 GVariant *get_channel_status = NULL;
2343 struct sat_manager_queue_data q_data;
2345 gint command_id = 0;
2347 dbg("interpreting get channel status notification");
2349 plg = tcore_server_find_plugin(ctx->server, cp_name);
2351 dbg("there is no valid plugin at this point");
2355 //enqueue data and generate cmd_id
2356 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
2357 q_data.cmd_type = SAT_PROATV_CMD_GET_CHANNEL_STATUS;
2358 q_data.cp_name = g_strdup(cp_name);
2359 memcpy((void*)&(q_data.cmd_data.get_channel_status), get_channel_status_tlv, sizeof(struct tel_sat_get_channel_status_tlv));
2360 if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
2361 g_free(q_data.cp_name);
2363 command_id = q_data.cmd_id;
2365 get_channel_status = g_variant_new("(i)", command_id);
2367 return get_channel_status;
2370 GVariant* sat_manager_refresh_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_refresh_tlv *refresh_tlv)
2372 TcorePlugin *plg = NULL;
2373 GVariant *refresh = NULL;
2374 #if !defined(TIZEN_SUPPORT_STK_HIDE_ALPHA_ID)
2375 struct sat_manager_queue_data q_data;
2378 gint command_id = 0;
2379 gint refresh_type =0;
2380 GVariantBuilder builder;
2381 GVariant *file_list = NULL;
2382 int local_index = 0;
2384 dbg("interpreting refresh notification");
2386 plg = tcore_server_find_plugin(ctx->server, cp_name);
2388 dbg("there is no valid plugin at this point");
2392 refresh_type = refresh_tlv->command_detail.cmd_qualifier.refresh.refresh;
2394 if(refresh_type != SIM_REFRESH_CMD_FCN) {
2395 dbg("reset event list.");
2396 memset(g_evt_list, 0, SAT_EVENT_DOWNLOAD_MAX);
2399 g_variant_builder_init(&builder, G_VARIANT_TYPE ("ai"));
2400 for (local_index = 0; local_index < refresh_tlv->file_list.file_count; local_index++) {
2401 g_variant_builder_add(&builder, "i", refresh_tlv->file_list.file_id[local_index]);
2403 file_list = g_variant_builder_end(&builder);
2405 //enqueue data and generate cmd_id
2406 #if !defined(TIZEN_SUPPORT_STK_HIDE_ALPHA_ID)
2407 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
2408 q_data.cmd_type = SAT_PROATV_CMD_REFRESH;
2409 q_data.cp_name = g_strdup(cp_name);
2410 memcpy((void*)&(q_data.cmd_data.refresh), refresh_tlv, sizeof(struct tel_sat_refresh_tlv));
2411 if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
2412 g_free(q_data.cp_name);
2414 command_id = q_data.cmd_id;
2417 refresh = g_variant_new("(iiv)", command_id, refresh_type, file_list);
2422 void sat_manager_more_time_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_more_time_tlv *more_time_tlv)
2424 TcorePlugin *plg = NULL;
2425 struct treq_sat_terminal_rsp_data *tr = NULL;
2427 dbg("interpreting more time notification");
2429 plg = tcore_server_find_plugin(ctx->server, cp_name);
2431 dbg("there is no valid plugin at this point");
2435 //send TR - does not need from application's response
2436 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
2440 tr->cmd_number = more_time_tlv->command_detail.cmd_num;
2441 tr->cmd_type = more_time_tlv->command_detail.cmd_type;
2442 memcpy((void*)&tr->terminal_rsp_data.more_time.command_detail, &more_time_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
2443 tr->terminal_rsp_data.more_time.device_id.src = more_time_tlv->device_id.dest;
2444 tr->terminal_rsp_data.more_time.device_id.dest = more_time_tlv->device_id.src;
2445 tr->terminal_rsp_data.more_time.result_type = RESULT_SUCCESS;
2446 tr->terminal_rsp_data.more_time.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2448 sat_manager_send_terminal_response(ctx->comm, plg, tr);
2454 GVariant* sat_manager_send_dtmf_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_send_dtmf_tlv *send_dtmf_tlv)
2456 TcorePlugin *plg = NULL;
2457 CoreObject *co_call = NULL;
2458 GSList* call_active_list = NULL;
2460 GVariant *send_dtmf = NULL;
2461 struct sat_manager_queue_data q_data;
2463 gint command_id = 0;
2464 gushort text_len =0;
2465 gint dtmf_str_len =0;
2466 gchar text[SAT_TEXT_STRING_LEN_MAX], dtmf_str[SAT_DTMF_STRING_LEN_MAX];
2467 #if defined(TIZEN_SUPPORT_SAT_ICON)
2468 GVariant *icon_id = NULL;
2469 GVariantBuilder v_builder_icon;
2471 dbg("interpreting send dtmf notification");
2472 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
2473 memset(&dtmf_str, 0 , SAT_DTMF_STRING_LEN_MAX);
2475 plg = tcore_server_find_plugin(ctx->server, cp_name);
2477 dbg("there is no valid plugin at this point");
2481 co_call = tcore_plugin_ref_core_object(plg, CORE_OBJECT_TYPE_CALL);
2483 struct treq_sat_terminal_rsp_data tr;
2484 dbg("call object does not exist");
2486 memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
2487 tr.cmd_number = send_dtmf_tlv->command_detail.cmd_num;
2488 tr.cmd_type = send_dtmf_tlv->command_detail.cmd_type;
2490 memcpy((void*)&tr.terminal_rsp_data.send_dtmf.command_detail, &send_dtmf_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
2491 tr.terminal_rsp_data.send_dtmf.device_id.src = DEVICE_ID_ME;
2492 tr.terminal_rsp_data.send_dtmf.device_id.dest = DEVICE_ID_SIM;
2493 tr.terminal_rsp_data.send_dtmf.result_type = RESULT_BEYOND_ME_CAPABILITIES;
2495 sat_manager_send_terminal_response(ctx->comm, plg, &tr);
2499 call_active_list = tcore_call_object_find_by_status(co_call, TCORE_CALL_STATUS_ACTIVE);
2500 if(!call_active_list){
2501 struct treq_sat_terminal_rsp_data tr;
2502 dbg("no active call");
2504 memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
2505 tr.cmd_number = send_dtmf_tlv->command_detail.cmd_num;
2506 tr.cmd_type = send_dtmf_tlv->command_detail.cmd_type;
2508 memcpy((void*)&tr.terminal_rsp_data.send_dtmf.command_detail, &send_dtmf_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
2509 tr.terminal_rsp_data.send_dtmf.device_id.src = DEVICE_ID_ME;
2510 tr.terminal_rsp_data.send_dtmf.device_id.dest = DEVICE_ID_SIM;
2511 tr.terminal_rsp_data.send_dtmf.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
2512 tr.terminal_rsp_data.send_dtmf.me_problem_type = ME_PROBLEM_NOT_IN_SPEECH_CALL;
2514 sat_manager_send_terminal_response(ctx->comm, plg, &tr);
2517 g_slist_free(call_active_list);
2520 if( send_dtmf_tlv->alpha_id.is_exist && send_dtmf_tlv->alpha_id.alpha_data_len){
2521 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
2522 send_dtmf_tlv->alpha_id.dcs.a_format,
2523 (unsigned char*)&send_dtmf_tlv->alpha_id.alpha_data,
2524 (unsigned short)send_dtmf_tlv->alpha_id.alpha_data_len);
2525 dbg("send dtmf ui display text (%s)",text);
2528 //dtmf string len, dtmf string
2529 dtmf_str_len = send_dtmf_tlv->dtmf_string.dtmf_length;
2530 memcpy(dtmf_str, send_dtmf_tlv->dtmf_string.dtmf_string, SAT_DTMF_STRING_LEN_MAX);
2532 //enqueue data and generate cmd_id
2533 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
2534 q_data.cmd_type = SAT_PROATV_CMD_SEND_DTMF;
2535 q_data.cp_name = g_strdup(cp_name);
2536 memcpy((void*)&(q_data.cmd_data.send_dtmf), send_dtmf_tlv, sizeof(struct tel_sat_send_dtmf_tlv));
2537 if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
2538 g_free(q_data.cp_name);
2540 command_id = q_data.cmd_id;
2542 #if defined(TIZEN_SUPPORT_SAT_ICON)
2543 /* Icon data extraction */
2544 g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
2545 if(send_dtmf_tlv->icon_id.is_exist) {
2546 g_variant_builder_add(&v_builder_icon, "(biiiiiis)", send_dtmf_tlv->icon_id.is_exist, send_dtmf_tlv->icon_id.icon_qualifer, (gint32) send_dtmf_tlv->icon_id.icon_identifier, (gint32) send_dtmf_tlv->icon_id.icon_info.width,
2547 (gint32) send_dtmf_tlv->icon_id.icon_info.height, send_dtmf_tlv->icon_id.icon_info.ics, send_dtmf_tlv->icon_id.icon_info.icon_data_len, send_dtmf_tlv->icon_id.icon_info.icon_file);
2549 icon_id = g_variant_builder_end(&v_builder_icon);
2551 send_dtmf = g_variant_new("(isivis)", command_id, text, text_len, icon_id, dtmf_str_len, dtmf_str);
2553 send_dtmf = g_variant_new("(isiis)", command_id, text, text_len, dtmf_str_len, dtmf_str);
2558 GVariant* sat_manager_launch_browser_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_launch_browser_tlv *launch_browser_tlv)
2560 TcorePlugin *plg = NULL;
2561 GVariant *launch_browser = NULL;
2562 struct sat_manager_queue_data q_data;
2564 #if GCF_SAT_BROWSER_WITH_SINGLE_SESSION
2565 gboolean b_app_running = FALSE;
2567 gint command_id = 0;
2568 gint browser_launch_type = 0, browser_id = 0;
2570 gushort text_len =0, gateway_proxy_len =0;
2571 gchar url[SAT_URL_LEN_MAX], text[SAT_TEXT_STRING_LEN_MAX], gateway_proxy[SAT_TEXT_STRING_LEN_MAX];
2572 #if defined(TIZEN_SUPPORT_SAT_ICON)
2573 GVariant *icon_id = NULL;
2574 GVariantBuilder v_builder_icon;
2576 dbg("interpreting launch browser notification");
2577 memset(&url, 0 , SAT_URL_LEN_MAX);
2578 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
2579 memset(&gateway_proxy, 0 , SAT_TEXT_STRING_LEN_MAX);
2581 plg = tcore_server_find_plugin(ctx->server, cp_name);
2583 dbg("there is no valid plugin at this point");
2587 if(!launch_browser_tlv->user_confirm_alpha_id.is_exist &&
2588 (launch_browser_tlv->user_confirm_icon_id.is_exist && launch_browser_tlv->user_confirm_icon_id.icon_qualifer != ICON_QUALI_SELF_EXPLANATORY)){
2589 struct treq_sat_terminal_rsp_data tr;
2590 dbg("no alpha id and no self explanatory");
2592 memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
2593 tr.cmd_number = launch_browser_tlv->command_detail.cmd_num;
2594 tr.cmd_type = launch_browser_tlv->command_detail.cmd_type;
2596 memcpy((void*)&tr.terminal_rsp_data.launch_browser.command_detail, &launch_browser_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
2597 tr.terminal_rsp_data.launch_browser.device_id.src = DEVICE_ID_ME;
2598 tr.terminal_rsp_data.launch_browser.device_id.dest = DEVICE_ID_SIM;
2599 tr.terminal_rsp_data.launch_browser.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
2601 sat_manager_send_terminal_response(ctx->comm, plg, &tr);
2605 #if GCF_SAT_BROWSER_WITH_SINGLE_SESSION
2606 b_app_running = sat_ui_check_app_is_running("org.tizen.browser");
2608 //browser launch type
2609 browser_launch_type = launch_browser_tlv->command_detail.cmd_qualifier.launch_browser.launch_browser;
2611 /* ORA PLM P131004-00081:Launch browser while session already opened.
2612 * Tizen-SAT looks at command qualifier only when ME in GCF mode.
2614 * 2013.12.10 : Now, GCF certificate permits device option that "Terminal supports
2615 * browser with multiple sessions/taps" so we don't need GCF feature anymore and
2616 * therefore disabled here.
2618 #if GCF_SAT_BROWSER_WITH_SINGLE_SESSION
2619 if(browser_launch_type == LAUNCH_BROWSER_IF_NOT_ALREADY_LAUNCHED && b_app_running){
2620 struct treq_sat_terminal_rsp_data tr;
2621 dbg("browser is already running type(%d)", browser_launch_type);
2623 memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
2624 tr.cmd_number = launch_browser_tlv->command_detail.cmd_num;
2625 tr.cmd_type = launch_browser_tlv->command_detail.cmd_type;
2627 memcpy((void*)&tr.terminal_rsp_data.launch_browser.command_detail, &launch_browser_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
2628 tr.terminal_rsp_data.launch_browser.device_id.src = DEVICE_ID_ME;
2629 tr.terminal_rsp_data.launch_browser.device_id.dest = DEVICE_ID_SIM;
2630 tr.terminal_rsp_data.launch_browser.result_type = RESULT_LAUNCH_BROWSER_GENERIC_ERROR_CODE;
2631 tr.terminal_rsp_data.launch_browser.browser_problem_type = BROWSER_PROBLEM_BROWSER_UNAVAILABLE;
2633 sat_manager_send_terminal_response(ctx->comm, plg, &tr);
2637 else if( (browser_launch_type == LAUNCH_BROWSER_USE_EXISTING_BROWSER || browser_launch_type == LAUNCH_BROWSER_CLOSE_AND_LAUNCH_NEW_BROWSER) && !b_app_running){
2638 struct treq_sat_terminal_rsp_data tr;
2639 dbg("browser is not running type(%d)", browser_launch_type);
2641 memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
2642 tr.cmd_number = launch_browser_tlv->command_detail.cmd_num;
2643 tr.cmd_type = launch_browser_tlv->command_detail.cmd_type;
2645 memcpy((void*)&tr.terminal_rsp_data.launch_browser.command_detail, &launch_browser_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
2646 tr.terminal_rsp_data.launch_browser.device_id.src = DEVICE_ID_ME;
2647 tr.terminal_rsp_data.launch_browser.device_id.dest = DEVICE_ID_SIM;
2648 tr.terminal_rsp_data.launch_browser.result_type = RESULT_LAUNCH_BROWSER_GENERIC_ERROR_CODE;
2649 tr.terminal_rsp_data.launch_browser.browser_problem_type = BROWSER_PROBLEM_BROWSER_UNAVAILABLE;
2651 sat_manager_send_terminal_response(ctx->comm, plg, &tr);
2658 browser_id = launch_browser_tlv->browser_id;
2661 if( launch_browser_tlv->url.url_length){
2662 url_len = launch_browser_tlv->url.url_length;
2663 memcpy(url, launch_browser_tlv->url.url, launch_browser_tlv->url.url_length);
2664 dbg("launch browser url (%s)",url);
2667 //gateway_proxy_text
2668 if(launch_browser_tlv->gateway_proxy_text.is_digit_only) {
2669 memcpy(gateway_proxy, launch_browser_tlv->gateway_proxy_text.string, launch_browser_tlv->gateway_proxy_text.string_length);
2670 dbg("launch browser gateway_proxy digit type string (%s)",gateway_proxy);
2672 if( launch_browser_tlv->gateway_proxy_text.string_length){
2673 tcore_util_convert_string_to_utf8((unsigned char*)&gateway_proxy,(unsigned short *)&gateway_proxy_len,
2674 launch_browser_tlv->gateway_proxy_text.dcs.a_format,
2675 (unsigned char*)&launch_browser_tlv->gateway_proxy_text.string,
2676 (unsigned short)launch_browser_tlv->gateway_proxy_text.string_length);
2677 dbg("launch browser gateway_proxy_text (%s)",gateway_proxy);
2681 //user confirm text and user confirm text len
2682 if( launch_browser_tlv->user_confirm_alpha_id.is_exist && launch_browser_tlv->user_confirm_alpha_id.alpha_data_len){
2683 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
2684 launch_browser_tlv->user_confirm_alpha_id.dcs.a_format,
2685 (unsigned char*)&launch_browser_tlv->user_confirm_alpha_id.alpha_data,
2686 (unsigned short)launch_browser_tlv->user_confirm_alpha_id.alpha_data_len);
2687 dbg("launch browser user confirm text (%s)",text);
2690 //enqueue data and generate cmd_id
2691 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
2692 q_data.cmd_type = SAT_PROATV_CMD_LAUNCH_BROWSER;
2693 q_data.cp_name = g_strdup(cp_name);
2694 memcpy((void*)&(q_data.cmd_data.launch_browser), launch_browser_tlv, sizeof(struct tel_sat_launch_browser_tlv));
2695 if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
2696 g_free(q_data.cp_name);
2698 command_id = q_data.cmd_id;
2700 #if defined(TIZEN_SUPPORT_SAT_ICON)
2701 /* Icon data extraction */
2702 g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
2703 if(launch_browser_tlv->user_confirm_icon_id.is_exist) {
2704 g_variant_builder_add(&v_builder_icon, "(biiiiiis)", launch_browser_tlv->user_confirm_icon_id.is_exist, launch_browser_tlv->user_confirm_icon_id.icon_qualifer, (gint32) launch_browser_tlv->user_confirm_icon_id.icon_identifier, (gint32) launch_browser_tlv->user_confirm_icon_id.icon_info.width,
2705 (gint32) launch_browser_tlv->user_confirm_icon_id.icon_info.height, launch_browser_tlv->user_confirm_icon_id.icon_info.ics, launch_browser_tlv->user_confirm_icon_id.icon_info.icon_data_len, launch_browser_tlv->user_confirm_icon_id.icon_info.icon_file);
2707 icon_id = g_variant_builder_end(&v_builder_icon);
2709 launch_browser = g_variant_new("(iiisisisiv)",
2710 command_id, browser_launch_type, browser_id, url, url_len, gateway_proxy, gateway_proxy_len, text, text_len, icon_id);
2712 launch_browser = g_variant_new("(iiisisisi)",
2713 command_id, browser_launch_type, browser_id, url, url_len, gateway_proxy, gateway_proxy_len, text, text_len);
2715 return launch_browser;
2718 GVariant* sat_manager_provide_local_info_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_provide_local_info_tlv *provide_local_info_tlv)
2720 TcorePlugin *plg = NULL;
2721 GVariant *provide_info = NULL;
2724 struct treq_sat_terminal_rsp_data *tr = NULL;
2726 dbg("interpreting provide local info notification");
2728 plg = tcore_server_find_plugin(ctx->server, cp_name);
2730 dbg("there is no valid plugin at this point");
2734 provide_info = g_variant_new("(i)", info_type);
2736 //send TR - does not need from application's response
2737 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
2741 tr->cmd_number = provide_local_info_tlv->command_detail.cmd_num;
2742 tr->cmd_type = provide_local_info_tlv->command_detail.cmd_type;
2743 memcpy((void*)&tr->terminal_rsp_data.provide_local_info.command_detail, &provide_local_info_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
2744 tr->terminal_rsp_data.provide_local_info.device_id.src = provide_local_info_tlv->device_id.dest;
2745 tr->terminal_rsp_data.provide_local_info.device_id.dest = provide_local_info_tlv->device_id.src;
2746 tr->terminal_rsp_data.provide_local_info.other_info = TRUE;
2748 info_type = provide_local_info_tlv->command_detail.cmd_qualifier.provide_local_info.provide_local_info;
2751 case LOCAL_INFO_DATE_TIME_AND_TIMEZONE:{
2752 int err = 0; int gmt = 0, n_flg = 0;
2753 struct timezone c_tz;
2754 struct timeval c_time;
2757 struct tm time_info;
2762 err = gettimeofday(&c_time, &c_tz);
2763 localtime_r(&time_val, &time_info);
2765 //set the time information
2766 tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.year =
2767 _convert_decimal_to_bcd(time_info.tm_year+1900-2000);
2769 tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.month =
2770 _convert_decimal_to_bcd(time_info.tm_mon+1);
2772 tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.day =
2773 _convert_decimal_to_bcd(time_info.tm_mday);
2775 tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.hour =
2776 _convert_decimal_to_bcd(time_info.tm_hour);
2778 tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.minute =
2779 _convert_decimal_to_bcd(time_info.tm_min);
2781 tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.second =
2782 _convert_decimal_to_bcd(time_info.tm_sec);
2784 gmt = c_tz.tz_minuteswest/60;
2791 tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.timeZone = 0xFF;
2794 tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.timeZone =
2795 _convert_decimal_to_bcd(gmt);
2798 tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.timeZone += 0x80;
2801 if(time_info.tm_isdst > 0){
2802 tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.timeZone += 0x40;
2806 tr->terminal_rsp_data.provide_local_info.result_type = RESULT_SUCCESS;
2807 tr->terminal_rsp_data.provide_local_info.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2809 case LOCAL_INFO_LANGUAGE:{
2811 static Storage *strg;
2812 gchar *lang_str = NULL;
2813 enum tel_sim_language_type lang_type = SIM_LANG_UNSPECIFIED;
2815 tr->terminal_rsp_data.provide_local_info.result_type = RESULT_SUCCESS;
2816 tr->terminal_rsp_data.provide_local_info.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2819 strg = tcore_server_find_storage(s, "vconf");
2820 lang_str = tcore_storage_get_string(strg, STORAGE_KEY_LANGUAGE_SET);
2822 lang_type = _convert_string_to_sim_lang(lang_str);
2824 tr->terminal_rsp_data.provide_local_info.other.language = lang_type;
2827 tr->terminal_rsp_data.provide_local_info.other_info = FALSE;
2828 tr->terminal_rsp_data.provide_local_info.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
2829 tr->terminal_rsp_data.provide_local_info.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2833 sat_manager_send_terminal_response(ctx->comm, plg, tr);
2836 return provide_info;
2839 GVariant* sat_manager_language_notification_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_language_notification_tlv *language_notification_tlv)
2841 TcorePlugin *plg = NULL;
2842 GVariant *language_noti = NULL;
2843 struct sat_manager_queue_data q_data;
2845 gint command_id = 0;
2847 gboolean b_specified = FALSE;
2849 dbg("interpreting langauge notification");
2851 plg = tcore_server_find_plugin(ctx->server, cp_name);
2853 dbg("there is no valid plugin at this point");
2857 if (language_notification_tlv->command_detail.cmd_qualifier.language_notification.specific_language == TRUE){
2859 language = language_notification_tlv->language;
2861 b_specified = FALSE;
2862 language =SIM_LANG_UNSPECIFIED;
2865 //enqueue data and generate cmd_id
2866 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
2867 q_data.cmd_type = SAT_PROATV_CMD_LANGUAGE_NOTIFICATION;
2868 q_data.cp_name = g_strdup(cp_name);
2869 memcpy((void*)&(q_data.cmd_data.language_notification), language_notification_tlv, sizeof(struct tel_sat_language_notification_tlv));
2870 if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
2871 g_free(q_data.cp_name);
2873 command_id = q_data.cmd_id;
2875 language_noti = g_variant_new("(iib)", command_id, language, b_specified);
2877 return language_noti;
2880 gboolean sat_manager_processing_unsupport_proactive_command(struct custom_data *ctx, const char *cp_name, struct tel_sat_unsupproted_command_tlv *unsupport_tlv)
2882 TcorePlugin *plg = NULL;
2883 struct treq_sat_terminal_rsp_data tr;
2885 dbg("[SAT] unsupport proactive command (%d)", unsupport_tlv->command_detail.cmd_type);
2887 plg = tcore_server_find_plugin(ctx->server, cp_name);
2889 dbg("there is no valid plugin at this point");
2893 memset(&tr, 0x00, sizeof(struct treq_sat_terminal_rsp_data));
2894 tr.cmd_number = unsupport_tlv->command_detail.cmd_num;
2895 tr.cmd_type = unsupport_tlv->command_detail.cmd_type;
2897 memcpy((void*)&tr.terminal_rsp_data.unsupport_cmd.command_detail, &unsupport_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
2898 tr.terminal_rsp_data.unsupport_cmd.device_id.src = DEVICE_ID_ME;
2899 tr.terminal_rsp_data.unsupport_cmd.device_id.dest = DEVICE_ID_SIM;
2900 tr.terminal_rsp_data.unsupport_cmd.result_type = RESULT_BEYOND_ME_CAPABILITIES;
2902 sat_manager_send_terminal_response(ctx->comm, plg, &tr);
2907 gboolean sat_manager_handle_sat_ui_launch_fail(struct custom_data *ctx, const char *cp_name, struct tnoti_sat_proactive_ind *p_ind)
2909 TReturn rv = TCORE_RETURN_FAILURE;
2910 TcorePlugin *plg = NULL;
2911 struct treq_sat_terminal_rsp_data tr;
2913 dbg("[SAT] proactive command (%d)", p_ind->cmd_type);
2915 plg = tcore_server_find_plugin(ctx->server, cp_name);
2917 dbg("there is no valid plugin at this point");
2921 memset(&tr, 0x00, sizeof(struct treq_sat_terminal_rsp_data));
2922 tr.cmd_number = p_ind->cmd_number;
2923 tr.cmd_type = p_ind->cmd_type;
2925 switch (p_ind->cmd_type) {
2926 case SAT_PROATV_CMD_DISPLAY_TEXT: {
2927 memcpy((void*)&tr.terminal_rsp_data.display_text.command_detail, &p_ind->proactive_ind_data.display_text.command_detail, sizeof(struct tel_sat_cmd_detail_info));
2928 tr.terminal_rsp_data.display_text.device_id.src = DEVICE_ID_ME;
2929 tr.terminal_rsp_data.display_text.device_id.dest = DEVICE_ID_SIM;
2930 tr.terminal_rsp_data.display_text.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
2932 case SAT_PROATV_CMD_SELECT_ITEM: {
2933 memcpy((void*)&tr.terminal_rsp_data.select_item.command_detail, &p_ind->proactive_ind_data.select_item.command_detail, sizeof(struct tel_sat_cmd_detail_info));
2934 tr.terminal_rsp_data.select_item.device_id.src = DEVICE_ID_ME;
2935 tr.terminal_rsp_data.select_item.device_id.dest = DEVICE_ID_SIM;
2936 tr.terminal_rsp_data.select_item.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
2938 case SAT_PROATV_CMD_GET_INKEY: {
2939 memcpy((void*)&tr.terminal_rsp_data.get_inkey.command_detail, &p_ind->proactive_ind_data.get_inkey.command_detail, sizeof(struct tel_sat_cmd_detail_info));
2940 tr.terminal_rsp_data.get_inkey.device_id.src = DEVICE_ID_ME;
2941 tr.terminal_rsp_data.get_inkey.device_id.dest = DEVICE_ID_SIM;
2942 tr.terminal_rsp_data.get_inkey.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
2944 case SAT_PROATV_CMD_GET_INPUT: {
2945 memcpy((void*)&tr.terminal_rsp_data.get_input.command_detail, &p_ind->proactive_ind_data.get_input.command_detail, sizeof(struct tel_sat_cmd_detail_info));
2946 tr.terminal_rsp_data.get_input.device_id.src = DEVICE_ID_ME;
2947 tr.terminal_rsp_data.get_input.device_id.dest = DEVICE_ID_SIM;
2948 tr.terminal_rsp_data.get_input.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
2950 case SAT_PROATV_CMD_PLAY_TONE: {
2951 memcpy((void*)&tr.terminal_rsp_data.play_tone.command_detail, &p_ind->proactive_ind_data.play_tone.command_detail, sizeof(struct tel_sat_cmd_detail_info));
2952 tr.terminal_rsp_data.play_tone.device_id.src = DEVICE_ID_ME;
2953 tr.terminal_rsp_data.play_tone.device_id.dest = DEVICE_ID_SIM;
2954 tr.terminal_rsp_data.play_tone.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
2956 case SAT_PROATV_CMD_SEND_SMS: {
2957 memcpy((void*)&tr.terminal_rsp_data.send_sms.command_detail, &p_ind->proactive_ind_data.send_sms.command_detail, sizeof(struct tel_sat_cmd_detail_info));
2958 tr.terminal_rsp_data.send_sms.device_id.src = DEVICE_ID_ME;
2959 tr.terminal_rsp_data.send_sms.device_id.dest = DEVICE_ID_SIM;
2960 tr.terminal_rsp_data.send_sms.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
2962 case SAT_PROATV_CMD_SEND_SS: {
2963 memcpy((void*)&tr.terminal_rsp_data.send_ss.command_detail, &p_ind->proactive_ind_data.send_ss.command_detail, sizeof(struct tel_sat_cmd_detail_info));
2964 tr.terminal_rsp_data.send_ss.device_id.src = DEVICE_ID_ME;
2965 tr.terminal_rsp_data.send_ss.device_id.dest = DEVICE_ID_SIM;
2966 tr.terminal_rsp_data.send_ss.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
2968 case SAT_PROATV_CMD_SEND_USSD: {
2969 memcpy((void*)&tr.terminal_rsp_data.send_ussd.command_detail, &p_ind->proactive_ind_data.send_ussd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
2970 tr.terminal_rsp_data.send_ussd.device_id.src = DEVICE_ID_ME;
2971 tr.terminal_rsp_data.send_ussd.device_id.dest = DEVICE_ID_SIM;
2972 tr.terminal_rsp_data.send_ussd.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
2974 case SAT_PROATV_CMD_SETUP_CALL: {
2975 memcpy((void*)&tr.terminal_rsp_data.setup_call.command_detail, &p_ind->proactive_ind_data.setup_call.command_detail, sizeof(struct tel_sat_cmd_detail_info));
2976 tr.terminal_rsp_data.setup_call.device_id.src = DEVICE_ID_ME;
2977 tr.terminal_rsp_data.setup_call.device_id.dest = DEVICE_ID_SIM;
2978 tr.terminal_rsp_data.setup_call.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
2980 case SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT: {
2981 memcpy((void*)&tr.terminal_rsp_data.setup_idle_mode_text.command_detail, &p_ind->proactive_ind_data.setup_idle_mode_text.command_detail, sizeof(struct tel_sat_cmd_detail_info));
2982 tr.terminal_rsp_data.setup_idle_mode_text.device_id.src = DEVICE_ID_ME;
2983 tr.terminal_rsp_data.setup_idle_mode_text.device_id.dest = DEVICE_ID_SIM;
2984 tr.terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
2986 case SAT_PROATV_CMD_OPEN_CHANNEL: {
2987 memcpy((void*)&tr.terminal_rsp_data.open_channel.command_detail, &p_ind->proactive_ind_data.open_channel.command_detail, sizeof(struct tel_sat_cmd_detail_info));
2988 tr.terminal_rsp_data.open_channel.device_id.src = DEVICE_ID_ME;
2989 tr.terminal_rsp_data.open_channel.device_id.dest = DEVICE_ID_SIM;
2990 tr.terminal_rsp_data.open_channel.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
2992 case SAT_PROATV_CMD_LAUNCH_BROWSER: {
2993 memcpy((void*)&tr.terminal_rsp_data.launch_browser.command_detail, &p_ind->proactive_ind_data.launch_browser.command_detail, sizeof(struct tel_sat_cmd_detail_info));
2994 tr.terminal_rsp_data.launch_browser.device_id.src = DEVICE_ID_ME;
2995 tr.terminal_rsp_data.launch_browser.device_id.dest = DEVICE_ID_SIM;
2996 tr.terminal_rsp_data.launch_browser.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
2999 dbg("unsupported command.");
3003 rv = sat_manager_send_terminal_response(ctx->comm, plg, &tr);
3004 if(rv != TCORE_RETURN_SUCCESS)
3010 static gboolean _sat_manager_handle_setup_menu_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
3012 TReturn rv = TCORE_RETURN_FAILURE;
3013 gboolean result = FALSE;
3016 struct treq_sat_terminal_rsp_data *tr;
3017 struct sat_manager_queue_data q_data;
3019 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
3021 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
3022 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
3027 dbg("[SAT] setup menu result data is null");
3032 dbg("there is no valid plugin at this point");
3036 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
3037 g_variant_get(exec_result, "(i)", &resp);
3039 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
3043 tr->cmd_number = q_data.cmd_data.setupMenuInd.command_detail.cmd_num;
3044 tr->cmd_type = q_data.cmd_data.setupMenuInd.command_detail.cmd_type;
3046 memcpy((void*)&tr->terminal_rsp_data.setup_menu.command_detail,
3047 &q_data.cmd_data.setupMenuInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
3049 tr->terminal_rsp_data.setup_menu.device_id.src = q_data.cmd_data.setupMenuInd.device_id.dest;
3050 tr->terminal_rsp_data.setup_menu.device_id.dest = q_data.cmd_data.setupMenuInd.device_id.src;
3052 dbg("[SAT] resp(%d)", resp);
3055 case RESULT_SUCCESS:
3056 tr->terminal_rsp_data.setup_menu.result_type = RESULT_SUCCESS;
3058 if(q_data.cmd_data.setupMenuInd.text_attribute.b_txt_attr || q_data.cmd_data.setupMenuInd.text_attribute_list.list_cnt > 0)
3059 tr->terminal_rsp_data.setup_menu.result_type = RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION;
3061 if(q_data.cmd_data.setupMenuInd.icon_id.is_exist)
3062 tr->terminal_rsp_data.setup_menu.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
3064 tr->terminal_rsp_data.setup_menu.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3067 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
3068 tr->terminal_rsp_data.setup_menu.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
3069 tr->terminal_rsp_data.setup_menu.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3073 //check the default case
3074 tr->terminal_rsp_data.setup_menu.result_type = resp;
3075 tr->terminal_rsp_data.setup_menu.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3076 dbg("[SAT] wrong result from app exec resp(%d)", resp);
3081 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
3082 if(rv != TCORE_RETURN_SUCCESS){
3083 dbg("fail to send terminal response");
3092 static gboolean _sat_manager_handle_display_text_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
3094 TReturn rv = TCORE_RETURN_FAILURE;
3095 gboolean result = FALSE;
3097 gint resp, me_problem;
3098 struct treq_sat_terminal_rsp_data *tr;
3099 struct sat_manager_queue_data q_data;
3101 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
3103 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
3104 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
3109 dbg("[SAT] display text result data is null");
3114 dbg("there is no valid plugin at this point");
3118 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
3119 g_variant_get(exec_result, "(ii)",&resp, &me_problem);
3121 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
3125 tr->cmd_number = q_data.cmd_data.displayTextInd.command_detail.cmd_num;
3126 tr->cmd_type = q_data.cmd_data.displayTextInd.command_detail.cmd_type;
3127 memcpy((void*)&tr->terminal_rsp_data.display_text.command_detail, &q_data.cmd_data.displayTextInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
3128 tr->terminal_rsp_data.display_text.device_id.src = DEVICE_ID_ME;
3129 tr->terminal_rsp_data.display_text.device_id.dest = DEVICE_ID_SIM;
3132 case RESULT_SUCCESS:
3133 tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS;
3135 if(q_data.cmd_data.displayTextInd.text_attribute.b_txt_attr)
3136 tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION;
3138 if (q_data.cmd_data.displayTextInd.icon_id.is_exist)
3139 tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
3141 tr->terminal_rsp_data.display_text.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3144 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
3145 tr->terminal_rsp_data.display_text.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
3146 tr->terminal_rsp_data.display_text.me_problem_type = me_problem;
3150 tr->terminal_rsp_data.display_text.result_type = resp;
3151 tr->terminal_rsp_data.display_text.me_problem_type = me_problem;
3152 dbg("[SAT] wrong result from app exec resp(%d) me_problem(%d)", resp, me_problem);
3157 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
3158 if(rv != TCORE_RETURN_SUCCESS){
3159 dbg("fail to send terminal response");
3168 static gboolean _sat_manager_handle_play_tone_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
3170 TReturn rv = TCORE_RETURN_FAILURE;
3171 gboolean result = FALSE;
3174 struct treq_sat_terminal_rsp_data *tr;
3175 struct sat_manager_queue_data q_data;
3177 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
3179 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
3180 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
3185 dbg("[SAT] display text result data is null");
3190 dbg("there is no valid plugin at this point");
3194 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
3195 g_variant_get(exec_result, "(i)",&resp);
3197 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
3201 tr->cmd_number = q_data.cmd_data.play_tone.command_detail.cmd_num;
3202 tr->cmd_type = q_data.cmd_data.play_tone.command_detail.cmd_type;
3203 memcpy((void*)&tr->terminal_rsp_data.play_tone.command_detail, &q_data.cmd_data.play_tone.command_detail, sizeof(struct tel_sat_cmd_detail_info));
3204 tr->terminal_rsp_data.play_tone.device_id.src = DEVICE_ID_ME;
3205 tr->terminal_rsp_data.play_tone.device_id.dest = DEVICE_ID_SIM;
3208 case RESULT_SUCCESS:
3209 tr->terminal_rsp_data.play_tone.result_type = RESULT_SUCCESS;
3211 if(q_data.cmd_data.play_tone.text_attribute.b_txt_attr)
3212 tr->terminal_rsp_data.play_tone.result_type = RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION;
3214 if (q_data.cmd_data.play_tone.icon_id.is_exist)
3215 tr->terminal_rsp_data.play_tone.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
3217 tr->terminal_rsp_data.play_tone.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3220 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
3221 tr->terminal_rsp_data.play_tone.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
3222 tr->terminal_rsp_data.play_tone.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3225 case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
3226 tr->terminal_rsp_data.play_tone.result_type = RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER;
3227 tr->terminal_rsp_data.play_tone.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3231 tr->terminal_rsp_data.play_tone.result_type = resp;
3232 tr->terminal_rsp_data.play_tone.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3233 dbg("[SAT] wrong result from app exec resp(%d)", resp);
3238 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
3239 if(rv != TCORE_RETURN_SUCCESS){
3240 dbg("fail to send terminal response");
3248 static gboolean _sat_manager_handle_send_sms_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
3250 TReturn rv = TCORE_RETURN_FAILURE;
3251 gboolean result = FALSE;
3254 struct treq_sat_terminal_rsp_data *tr;
3255 struct sat_manager_queue_data q_data;
3257 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
3259 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
3260 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
3265 dbg("[SAT] send sms data is null");
3270 dbg("there is no valid plugin at this point");
3274 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
3275 g_variant_get(exec_result, "(i)",&resp);
3277 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
3281 tr->cmd_number = q_data.cmd_data.sendSMSInd.command_detail.cmd_num;
3282 tr->cmd_type = q_data.cmd_data.sendSMSInd.command_detail.cmd_type;
3283 memcpy((void*)&tr->terminal_rsp_data.send_sms.command_detail, &q_data.cmd_data.sendSMSInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
3284 tr->terminal_rsp_data.send_sms.device_id.src = DEVICE_ID_ME;
3285 tr->terminal_rsp_data.send_sms.device_id.dest = q_data.cmd_data.sendSMSInd.device_id.src;
3288 case RESULT_SUCCESS:
3289 tr->terminal_rsp_data.send_sms.result_type = RESULT_SUCCESS;
3290 if (q_data.cmd_data.sendSMSInd.icon_id.is_exist)
3291 tr->terminal_rsp_data.send_sms.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
3295 case RESULT_INTRCTN_WITH_CC_OR_SMS_CTRL_PRMNT_PRBLM:
3296 tr->terminal_rsp_data.send_sms.result_type = RESULT_INTRCTN_WITH_CC_OR_SMS_CTRL_PRMNT_PRBLM;
3297 tr->terminal_rsp_data.send_sms.cc_problem_type = CC_PROBLEM_ACTION_NOT_ALLOWED;
3300 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
3301 tr->terminal_rsp_data.send_sms.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
3302 tr->terminal_rsp_data.send_sms.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3305 case RESULT_BEYOND_ME_CAPABILITIES:
3306 tr->terminal_rsp_data.send_sms.result_type = RESULT_BEYOND_ME_CAPABILITIES;
3307 tr->terminal_rsp_data.send_sms.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3310 case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
3311 tr->terminal_rsp_data.send_sms.result_type = RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME;
3312 tr->terminal_rsp_data.send_sms.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3315 case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
3316 tr->terminal_rsp_data.send_sms.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
3317 tr->terminal_rsp_data.send_sms.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3320 case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
3321 tr->terminal_rsp_data.send_sms.result_type = RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING;
3322 tr->terminal_rsp_data.send_sms.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3325 case RESULT_SMS_RP_ERROR:
3326 tr->terminal_rsp_data.send_sms.result_type = RESULT_SMS_RP_ERROR;
3327 tr->terminal_rsp_data.send_sms.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3331 tr->terminal_rsp_data.send_sms.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
3332 tr->terminal_rsp_data.send_sms.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3337 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
3338 if(rv != TCORE_RETURN_SUCCESS){
3339 dbg("fail to send terminal response");
3345 /* if( q_data.cmd_data.sendSMSInd.alpha_id.alpha_data_len && q_data.cmd_data.sendSMSInd.alpha_id.is_exist)
3346 sat_ui_support_terminate_sat_ui();*/
3351 static gboolean _sat_manager_handle_send_ss_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
3353 TReturn rv = TCORE_RETURN_FAILURE;
3354 gboolean result = FALSE;
3356 gint resp, me_problem, ss_cause, call_ctrl_problem, ss_str_len;
3357 GVariant *ss_str = NULL;
3358 struct treq_sat_terminal_rsp_data *tr;
3359 struct sat_manager_queue_data q_data;
3360 //call ctrl action, result data object, text
3362 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
3364 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
3365 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
3370 dbg("[SAT] send ss data is null");
3375 dbg("there is no valid plugin at this point");
3379 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
3380 g_variant_get(exec_result, "(iii@vii)", &resp, &me_problem, &ss_cause, &ss_str, &ss_str_len, &call_ctrl_problem);
3382 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
3386 tr->cmd_number = q_data.cmd_data.send_ss.command_detail.cmd_num;
3387 tr->cmd_type = q_data.cmd_data.send_ss.command_detail.cmd_type;
3388 memcpy((void*)&tr->terminal_rsp_data.send_ss.command_detail, &q_data.cmd_data.send_ss.command_detail, sizeof(struct tel_sat_cmd_detail_info));
3389 tr->terminal_rsp_data.send_ss.device_id.src = DEVICE_ID_ME;
3390 tr->terminal_rsp_data.send_ss.device_id.dest = q_data.cmd_data.send_ss.device_id.src;
3393 case RESULT_SUCCESS:
3394 tr->terminal_rsp_data.send_ss.result_type = RESULT_SUCCESS;
3395 if (q_data.cmd_data.send_ss.icon_id.is_exist)
3396 tr->terminal_rsp_data.send_ss.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
3398 if(ss_str_len > 0 && ss_str){
3399 int local_index = 0;
3401 GVariantIter *iter = NULL;
3402 GVariant *intermediate = NULL;
3405 intermediate = g_variant_get_variant(ss_str);
3406 dbg("ss string format(%s)", g_variant_get_type_string(intermediate));
3408 g_variant_get(intermediate, "ay", &iter);
3409 while( g_variant_iter_loop (iter, "y", &data)){
3410 dbg("index(%d) data(%c)", local_index, data);
3411 tr->terminal_rsp_data.send_ss.text.string[local_index] = data;
3414 g_variant_iter_free(iter);
3415 g_variant_unref(intermediate);
3417 tr->terminal_rsp_data.send_ss.text.string_length = local_index;
3418 tmp = _convert_hex_string_to_bytes(tr->terminal_rsp_data.send_ss.text.string);
3419 memset(tr->terminal_rsp_data.send_ss.text.string, 0x00,
3420 sizeof(tr->terminal_rsp_data.send_ss.text.string));
3422 memcpy(tr->terminal_rsp_data.send_ss.text.string, tmp,
3423 tr->terminal_rsp_data.send_ss.text.string_length);
3427 err("memcpy failed");
3429 dbg("SS string len:%d", tr->terminal_rsp_data.send_ss.text.string_length);
3433 case RESULT_SS_RETURN_ERROR:
3434 tr->terminal_rsp_data.send_ss.result_type = RESULT_SS_RETURN_ERROR;
3435 if (ss_cause == SATK_SS_PROBLEM_FACILITY_NOT_SUPPORTED) {
3436 tr->terminal_rsp_data.send_ss.ss_problem = SATK_SS_PROBLEM_FACILITY_NOT_SUPPORTED;
3438 tr->terminal_rsp_data.send_ss.ss_problem = SATK_SS_PROBLEM_NO_SPECIFIC_CAUSE;
3442 case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
3443 tr->terminal_rsp_data.send_ss.result_type = RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND;
3444 tr->terminal_rsp_data.send_ss.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3448 tr->terminal_rsp_data.send_ss.result_type = RESULT_SS_RETURN_ERROR;
3449 tr->terminal_rsp_data.send_ss.ss_problem = SATK_SS_PROBLEM_NO_SPECIFIC_CAUSE;
3454 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
3455 if(rv != TCORE_RETURN_SUCCESS){
3456 dbg("fail to send terminal response");
3461 #if defined(TIZEN_PLATFORM_USE_QCOM_QMI)
3462 if( q_data.cmd_data.send_ss.alpha_id.alpha_data_len && q_data.cmd_data.send_ss.alpha_id.is_exist ) {
3464 const gchar *cp_name;
3466 TelephonyObjectSkeleton *object;
3468 dbg("AlphaID is present, terminate SAT-UI.");
3469 cp_name = tcore_server_get_cp_name_by_plugin(plg);
3470 if (cp_name == NULL) {
3471 err("CP name is NULL");
3475 dbg("CP Name: [%s]", cp_name);
3476 path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
3478 /* Look-up Hash table for Object */
3479 object = g_hash_table_lookup(ctx->objects, path);
3480 dbg("Path: [%s] Interface object: [%p]", path, object);
3482 if (object == NULL) {
3483 err("Object is NOT defined!!!");
3487 sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
3488 telephony_sat_emit_end_proactive_session(sat, SAT_PROATV_CMD_TYPE_END_PROACTIVE_SESSION);
3495 static gboolean _sat_manager_handle_send_ussd_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
3497 TReturn rv = TCORE_RETURN_FAILURE;
3498 gboolean result = FALSE;
3500 gint resp, me_problem, ss_cause, ussd_str_len;
3501 GVariant *ussd_str = NULL;
3502 struct treq_sat_terminal_rsp_data *tr;
3503 struct sat_manager_queue_data q_data;
3504 //call ctrl action, result data object, text, result2, text2
3506 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
3508 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
3509 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
3514 dbg("[SAT] send ss data is null");
3519 dbg("there is no valid plugin at this point");
3523 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
3524 g_variant_get(exec_result, "(iii@vi)", &resp, &me_problem, &ss_cause, &ussd_str, &ussd_str_len);
3526 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
3530 tr->cmd_number = q_data.cmd_data.send_ussd.command_detail.cmd_num;
3531 tr->cmd_type = q_data.cmd_data.send_ussd.command_detail.cmd_type;
3532 memcpy((void*)&tr->terminal_rsp_data.send_ussd.command_detail, &q_data.cmd_data.send_ussd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
3533 tr->terminal_rsp_data.send_ussd.device_id.src = DEVICE_ID_ME;
3534 tr->terminal_rsp_data.send_ussd.device_id.dest = q_data.cmd_data.send_ussd.device_id.src;
3537 case RESULT_SUCCESS:
3538 tr->terminal_rsp_data.send_ussd.result_type = RESULT_SUCCESS;
3539 if (q_data.cmd_data.send_ussd.icon_id.is_exist)
3540 tr->terminal_rsp_data.send_ussd.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
3542 if(ussd_str_len > 0 && ussd_str){
3543 int local_index = 0, i = 0;
3545 GVariantIter *iter = NULL;
3546 GVariant *intermediate = NULL;
3547 enum alphabet_format alpha_format;
3549 intermediate = g_variant_get_variant(ussd_str);
3550 dbg("ussd string format(%s)", g_variant_get_type_string(intermediate));
3552 g_variant_get(intermediate, "ay", &iter);
3553 while( g_variant_iter_loop (iter, "y", &data)){
3554 dbg("local_index(%d) data(%c)", local_index, data);
3555 tr->terminal_rsp_data.send_ussd.text.string[local_index] = data;
3559 if(local_index >=1 )
3560 tr->terminal_rsp_data.send_ussd.text.string_length = local_index-1;
3561 tr->terminal_rsp_data.send_ussd.text.dcs.raw_dcs = q_data.cmd_data.send_ussd.ussd_string.dsc.raw_dcs;
3562 /*bits 2 & 3 indicate the character set being used */
3563 switch (tr->terminal_rsp_data.send_ussd.text.dcs.raw_dcs & 0x0C) {
3566 alpha_format = ALPHABET_FORMAT_SMS_DEFAULT;
3570 alpha_format = ALPHABET_FORMAT_8BIT_DATA;
3574 alpha_format = ALPHABET_FORMAT_UCS2;
3578 alpha_format = ALPHABET_FORMAT_RESERVED;
3581 dbg("string :[%s] len:[%d] dcs:[%d] alpha_format:[%d]", tr->terminal_rsp_data.send_ussd.text.string, tr->terminal_rsp_data.send_ussd.text.string_length,
3582 tr->terminal_rsp_data.send_ussd.text.dcs.raw_dcs, alpha_format);
3583 g_variant_iter_free(iter);
3584 g_variant_unref(intermediate);
3585 switch(alpha_format){
3586 case ALPHABET_FORMAT_SMS_DEFAULT:
3587 /* As per the test spec TS 151.010-04 raw dcs for SMS default is 0 */
3588 tr->terminal_rsp_data.send_ussd.text.dcs.raw_dcs = ALPHABET_FORMAT_SMS_DEFAULT;
3589 if (tr->terminal_rsp_data.send_ussd.text.string_length > 0){
3591 char tmp_str[SAT_TEXT_STRING_LEN_MAX + 1];
3594 dbg("UTF 8 to GSM SMS default");
3595 tcore_util_convert_utf8_to_gsm((unsigned char*)tmp_str, &tmp_len,
3596 (unsigned char*)tr->terminal_rsp_data.send_ussd.text.string,
3597 tr->terminal_rsp_data.send_ussd.text.string_length);
3598 packed_data = (char*) tcore_util_pack_gsm7bit((const unsigned char *)tmp_str, tmp_len);
3599 memset(tr->terminal_rsp_data.send_ussd.text.string, 0x00,
3600 sizeof(tr->terminal_rsp_data.send_ussd.text.string));
3602 memcpy((void*)tr->terminal_rsp_data.send_ussd.text.string, packed_data, strlen(packed_data));
3603 tr->terminal_rsp_data.send_ussd.text.string_length = strlen(packed_data);
3604 g_free(packed_data);
3607 dbg("final ussd len:%d", tr->terminal_rsp_data.send_ussd.text.string_length);
3608 for(i = 0; i< tr->terminal_rsp_data.send_ussd.text.string_length; i++)
3609 dbg("string :%c \n", tr->terminal_rsp_data.send_ussd.text.string[i]);
3611 case ALPHABET_FORMAT_8BIT_DATA: {
3612 gint output_data_len = 0;
3613 gchar output_data[SAT_USSD_STRING_LEN_MAX];
3614 dbg("UTF 8 to GSM 8 BIT DATA");
3615 tcore_util_convert_utf8_to_gsm((unsigned char*)output_data,&output_data_len,
3616 (unsigned char*)tr->terminal_rsp_data.send_ussd.text.string,
3617 tr->terminal_rsp_data.send_ussd.text.string_length);
3618 memset(tr->terminal_rsp_data.send_ussd.text.string, 0x00,
3619 sizeof(tr->terminal_rsp_data.send_ussd.text.string));
3620 if(output_data_len > 0){
3621 memcpy((void*)tr->terminal_rsp_data.send_ussd.text.string, output_data, output_data_len);
3622 tr->terminal_rsp_data.send_ussd.text.string_length = output_data_len;
3624 dbg("final ussd len:%d", tr->terminal_rsp_data.send_ussd.text.string_length);
3625 for(i = 0; i< tr->terminal_rsp_data.send_ussd.text.string_length; i++)
3626 dbg("string :%c \n", tr->terminal_rsp_data.send_ussd.text.string[i]);
3629 case ALPHABET_FORMAT_UCS2: {
3633 tcore_util_convert_utf8_to_ucs2(&tmp,
3634 &str_len, (unsigned char*)tr->terminal_rsp_data.send_ussd.text.string,
3635 tr->terminal_rsp_data.send_ussd.text.string_length);
3636 memset(tr->terminal_rsp_data.send_ussd.text.string, 0x00,
3637 sizeof(tr->terminal_rsp_data.send_ussd.text.string));
3638 memcpy(tr->terminal_rsp_data.send_ussd.text.string, tmp, str_len);
3639 tr->terminal_rsp_data.send_ussd.text.string_length = str_len;
3640 dbg("final ussd len:%d", tr->terminal_rsp_data.send_ussd.text.string_length);
3641 for(i = 0; i< tr->terminal_rsp_data.send_ussd.text.string_length; i++)
3642 dbg("string :%c \n", tr->terminal_rsp_data.send_ussd.text.string[i]);
3652 case RESULT_SS_RETURN_ERROR:
3653 case RESULT_USSD_RETURN_ERROR:
3654 tr->terminal_rsp_data.send_ussd.result_type = RESULT_USSD_RETURN_ERROR;
3655 if(ss_cause == SATK_USSD_PROBLEM_UNKNOWN_ALPHABET)
3656 tr->terminal_rsp_data.send_ussd.ussd_problem = ss_cause;
3660 case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
3661 tr->terminal_rsp_data.send_ussd.result_type = RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND;
3662 tr->terminal_rsp_data.send_ussd.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3665 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
3666 tr->terminal_rsp_data.send_ussd.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
3667 tr->terminal_rsp_data.send_ussd.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3671 tr->terminal_rsp_data.send_ussd.result_type = RESULT_USSD_RETURN_ERROR;
3672 tr->terminal_rsp_data.send_ussd.ussd_problem = SATK_USSD_PROBLEM_NO_SPECIFIC_CAUSE;
3677 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
3678 if(rv != TCORE_RETURN_SUCCESS){
3679 dbg("fail to send terminal response");
3684 #if defined(TIZEN_PLATFORM_USE_QCOM_QMI)
3685 if( q_data.cmd_data.send_ussd.alpha_id.alpha_data_len && q_data.cmd_data.send_ussd.alpha_id.is_exist ) {
3687 const gchar *cp_name;
3689 TelephonyObjectSkeleton *object;
3691 dbg("AlphaID is present, terminate SAT-UI.");
3692 //emit session end signal
3693 cp_name = tcore_server_get_cp_name_by_plugin(plg);
3694 if (cp_name == NULL) {
3695 err("CP name is NULL");
3699 dbg("CP Name: [%s]", cp_name);
3700 path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
3702 /* Look-up Hash table for Object */
3703 object = g_hash_table_lookup(ctx->objects, path);
3704 dbg("Path: [%s] Interface object: [%p]", path, object);
3706 if (object == NULL) {
3707 err("Object is NOT defined!!!");
3711 sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
3712 telephony_sat_emit_end_proactive_session(sat, SAT_PROATV_CMD_TYPE_END_PROACTIVE_SESSION);
3720 static gboolean _sat_manager_handle_setup_call_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
3722 TReturn rv = TCORE_RETURN_FAILURE;
3723 gboolean result = FALSE;
3725 gint resp, me_problem, cc_problem, call_cause;
3726 struct treq_sat_terminal_rsp_data *tr;
3727 struct sat_manager_queue_data q_data;
3729 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
3731 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
3732 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
3737 dbg("[SAT] setup call data is null");
3742 dbg("there is no valid plugin at this point");
3746 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
3747 g_variant_get(exec_result, "(iiii)",&resp, &me_problem, &cc_problem, &call_cause);
3749 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
3753 tr->cmd_number = q_data.cmd_data.setup_call.command_detail.cmd_num;
3754 tr->cmd_type = q_data.cmd_data.setup_call.command_detail.cmd_type;
3755 memcpy((void*)&tr->terminal_rsp_data.setup_call.command_detail, &q_data.cmd_data.setup_call.command_detail, sizeof(struct tel_sat_cmd_detail_info));
3756 tr->terminal_rsp_data.setup_call.device_id.src = DEVICE_ID_ME;
3757 tr->terminal_rsp_data.setup_call.device_id.dest = q_data.cmd_data.setup_call.device_id.src;
3760 case RESULT_SUCCESS:
3761 tr->terminal_rsp_data.setup_call.result_type = RESULT_SUCCESS;
3762 if (q_data.cmd_data.setup_call.call_setup_icon_id.is_exist || q_data.cmd_data.setup_call.user_confirm_icon_id.is_exist)
3763 tr->terminal_rsp_data.setup_call.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
3764 tr->terminal_rsp_data.setup_call.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3765 tr->terminal_rsp_data.setup_call.cc_problem_type = CC_PROBLEM_NO_SPECIFIC_CAUSE;
3768 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
3769 tr->terminal_rsp_data.setup_call.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
3770 tr->terminal_rsp_data.setup_call.me_problem_type = me_problem;
3773 case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:{
3774 tr->terminal_rsp_data.setup_call.result_type = RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND;
3776 case CALL_ERROR_BUSY:
3777 tr->terminal_rsp_data.setup_call.network_problem_type = NETWORK_PROBLEM_USER_BUSY;
3780 tr->terminal_rsp_data.setup_call.network_problem_type = NETWORK_PROBLEM_NO_SPECIFIC_CAUSE;
3785 case RESULT_USER_CLEAR_DOWN_CALL_BEFORE_CONN:
3786 tr->terminal_rsp_data.setup_call.result_type = RESULT_USER_CLEAR_DOWN_CALL_BEFORE_CONN;
3787 tr->terminal_rsp_data.setup_call.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3788 tr->terminal_rsp_data.setup_call.cc_problem_type = CC_PROBLEM_NO_SPECIFIC_CAUSE;
3791 case RESULT_BEYOND_ME_CAPABILITIES:
3792 tr->terminal_rsp_data.setup_call.result_type = RESULT_BEYOND_ME_CAPABILITIES;
3793 tr->terminal_rsp_data.setup_call.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3794 tr->terminal_rsp_data.setup_call.cc_problem_type = CC_PROBLEM_NO_SPECIFIC_CAUSE;
3797 case RESULT_INTRCTN_WITH_CC_OR_SMS_CTRL_PRMNT_PRBLM:
3798 tr->terminal_rsp_data.setup_call.result_type = RESULT_INTRCTN_WITH_CC_OR_SMS_CTRL_PRMNT_PRBLM;
3799 tr->terminal_rsp_data.setup_call.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3800 tr->terminal_rsp_data.setup_call.cc_problem_type = cc_problem;
3808 //TODO Other infomation set - not supported
3809 tr->terminal_rsp_data.setup_call.other_info = FALSE;
3812 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
3813 if(rv != TCORE_RETURN_SUCCESS){
3814 dbg("fail to send terminal response");
3822 static gboolean _sat_manager_handle_setup_idle_mode_text_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
3824 TReturn rv = TCORE_RETURN_FAILURE;
3825 gboolean result = FALSE;
3828 struct treq_sat_terminal_rsp_data tr;
3829 struct sat_manager_queue_data q_data;
3831 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
3832 memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
3834 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
3835 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
3840 dbg("[SAT] send ss data is null");
3845 dbg("there is no valid plugin at this point");
3849 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
3850 g_variant_get(exec_result, "(i)",&resp);
3852 tr.cmd_number = q_data.cmd_data.idle_mode.command_detail.cmd_num;
3853 tr.cmd_type = q_data.cmd_data.idle_mode.command_detail.cmd_type;
3854 memcpy((void*)&tr.terminal_rsp_data.setup_idle_mode_text.command_detail, &q_data.cmd_data.idle_mode.command_detail, sizeof(struct tel_sat_cmd_detail_info));
3855 tr.terminal_rsp_data.setup_idle_mode_text.device_id.src = q_data.cmd_data.idle_mode.device_id.dest;
3856 tr.terminal_rsp_data.setup_idle_mode_text.device_id.dest = q_data.cmd_data.idle_mode.device_id.src;
3859 case RESULT_SUCCESS:
3860 tr.terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS;
3861 if (q_data.cmd_data.idle_mode.icon_id.is_exist)
3862 tr.terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
3866 tr.terminal_rsp_data.setup_idle_mode_text.result_type = resp;
3871 rv = sat_manager_send_terminal_response(ctx->comm, plg, &tr);
3872 if(rv != TCORE_RETURN_SUCCESS){
3873 dbg("fail to send terminal response");
3880 static gboolean sat_manager_handle_open_channel_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
3882 TReturn rv = TCORE_RETURN_FAILURE;
3883 gboolean result = FALSE;
3885 gint resp, me_problem, bip_problem;
3886 gint bearer_type, channel_id, channel_status, channel_status_info, buffer_size;
3887 gboolean other_info;
3888 GVariant *desc_tmp, *bearer_desc;
3890 struct treq_sat_terminal_rsp_data *tr;
3891 struct sat_manager_queue_data q_data;
3893 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
3895 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
3896 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
3901 dbg("[SAT] open channel data is null");
3906 dbg("there is no valid plugin at this point");
3910 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
3911 g_variant_get(exec_result, "(iiiiiiiibv)",&resp, &me_problem, &bip_problem,
3912 &bearer_type, &channel_id, &channel_status, &channel_status_info, &buffer_size,
3913 &other_info, &desc_tmp);
3915 bearer_desc = g_variant_get_variant(desc_tmp);
3917 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
3920 tr->cmd_number = q_data.cmd_data.open_channel.command_detail.cmd_num;
3921 tr->cmd_type = q_data.cmd_data.open_channel.command_detail.cmd_type;
3922 memcpy((void*)&tr->terminal_rsp_data.open_channel.command_detail, &q_data.cmd_data.open_channel.command_detail, sizeof(struct tel_sat_cmd_detail_info));
3924 tr->terminal_rsp_data.open_channel.device_id.src = q_data.cmd_data.open_channel.device_id.dest;
3925 tr->terminal_rsp_data.open_channel.device_id.dest = q_data.cmd_data.open_channel.device_id.src;
3927 tr->terminal_rsp_data.open_channel.result_type = resp;
3929 case RESULT_SUCCESS:
3930 case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
3931 case RESULT_SUCCESS_WITH_MISSING_INFO:
3935 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
3936 case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
3937 tr->terminal_rsp_data.open_channel.me_problem_type = me_problem;
3940 case RESULT_BEARER_INDEPENDENT_PROTOCOL_ERROR:
3941 tr->terminal_rsp_data.open_channel.bip_problem_type = bip_problem;
3948 tr->terminal_rsp_data.open_channel.channel_status.channel_id = channel_id;
3949 tr->terminal_rsp_data.open_channel.channel_status.status = channel_status;
3950 tr->terminal_rsp_data.open_channel.channel_status.status_info = channel_status_info;
3952 dbg("check channel id(%d) channel status(%d) channel info(%d)", channel_id, channel_status, channel_status_info);
3954 //memcpy(tr->terminal_rsp_data.open_channel.buffer_size.size, &buffer_size, sizeof(unsigned char)*2);
3955 tr->terminal_rsp_data.open_channel.buffer_size.size[0] = buffer_size >> 8;
3956 tr->terminal_rsp_data.open_channel.buffer_size.size[1] = buffer_size & 0xFF;
3957 dbg("check buffer size[0](0x%x) size[1](0x%x)", tr->terminal_rsp_data.open_channel.buffer_size.size[0], tr->terminal_rsp_data.open_channel.buffer_size.size[1]);
3959 tr->terminal_rsp_data.open_channel.bearer_desc.bearer_type = bearer_type;
3960 switch(bearer_type){
3962 gint data_rate, service_type, conn_element_type;
3964 dbg("bearer_desc cs bearer type_format(%s)", g_variant_get_type_string(bearer_desc));
3965 g_variant_get(bearer_desc, "(iii)",&data_rate, &service_type, &conn_element_type);
3966 dbg("check cs bearer data_rade(%d), service_type(%d), conn_element_type(%d)", data_rate, service_type, conn_element_type);
3968 tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.cs_bearer_param.data_rate = data_rate;
3969 tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.cs_bearer_param.service_type = service_type;
3970 tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.cs_bearer_param.connection_element_type = conn_element_type;
3973 gint precedence_class, delay_class, reliability_class;
3974 gint peak_class, mean_class, pdp_type;
3976 dbg("bearer_desc ps bearer type_format(%s)", g_variant_get_type_string(bearer_desc));
3977 g_variant_get(bearer_desc, "(iiiiii)",&precedence_class, &delay_class, &reliability_class,
3978 &peak_class, &mean_class, &pdp_type);
3979 dbg("check ps bearer precedence class(%d), delay class(%d), reliability class(%d) peak class(%d) mean class(%d) pdp_type(%d)",
3980 precedence_class, delay_class, reliability_class, peak_class, mean_class, pdp_type);
3982 tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.ps_bearer_param.precedence_class = precedence_class;
3983 tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.ps_bearer_param.delay_class = delay_class;
3984 tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.ps_bearer_param.reliability_class = reliability_class;
3985 tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.ps_bearer_param.peak_throughput_class = peak_class;
3986 tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.ps_bearer_param.mean_throughput_class = mean_class;
3987 tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.ps_bearer_param.pdp_type = pdp_type;
3989 case BEARER_LOCAL_LINK_TECHNOLOGY_INDEPENDENT:{
3991 gchar *service_record = NULL;
3993 dbg("bearer_desc link local type_format(%s)", g_variant_get_type_string(bearer_desc));
3994 g_variant_get(bearer_desc, "(is)",&service_type, &service_record);
3995 dbg("check link local service_type(%d), service_record(%d)", service_type, service_record);
3997 tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.local_link_bearer_param.service_type = service_type;
3999 if(service_record) {
4000 memcpy(tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.local_link_bearer_param.service_record, service_record, strlen(service_record));
4001 g_free(service_record);
4010 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
4011 if(rv != TCORE_RETURN_SUCCESS){
4012 dbg("fail to send terminal response");
4020 static gboolean sat_manager_handle_close_channel_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
4022 TReturn rv = TCORE_RETURN_FAILURE;
4023 gboolean result = FALSE;
4025 gint resp, me_problem, bip_problem;
4027 struct treq_sat_terminal_rsp_data *tr;
4028 struct sat_manager_queue_data q_data;
4030 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
4032 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
4033 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
4038 dbg("[SAT] close channel data is null");
4043 dbg("there is no valid plugin at this point");
4047 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
4048 g_variant_get(exec_result, "(iii)",&resp, &me_problem, &bip_problem);
4050 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
4053 tr->cmd_number = q_data.cmd_data.close_channel.command_detail.cmd_num;
4054 tr->cmd_type = q_data.cmd_data.close_channel.command_detail.cmd_type;
4055 memcpy((void*)&tr->terminal_rsp_data.close_channel.command_detail, &q_data.cmd_data.close_channel.command_detail, sizeof(struct tel_sat_cmd_detail_info));
4057 tr->terminal_rsp_data.close_channel.device_id.src = DEVICE_ID_ME;
4058 tr->terminal_rsp_data.close_channel.device_id.dest = q_data.cmd_data.close_channel.device_id.src;
4060 tr->terminal_rsp_data.close_channel.result_type = resp;
4062 case RESULT_SUCCESS:
4063 case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
4064 case RESULT_SUCCESS_WITH_MISSING_INFO:
4068 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
4069 case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
4070 tr->terminal_rsp_data.close_channel.me_problem_type = me_problem;
4073 case RESULT_BEARER_INDEPENDENT_PROTOCOL_ERROR:
4074 tr->terminal_rsp_data.close_channel.bip_problem_type = bip_problem;
4082 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
4083 if(rv != TCORE_RETURN_SUCCESS){
4084 dbg("fail to send terminal response");
4092 static gboolean sat_manager_handle_receive_data_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
4094 TReturn rv = TCORE_RETURN_FAILURE;
4095 gboolean result = FALSE;
4097 gint resp, me_problem, bip_problem;
4098 gint data_str_len, data_len;
4099 gboolean other_info;
4100 GVariant *received_data;
4102 struct treq_sat_terminal_rsp_data *tr;
4103 struct sat_manager_queue_data q_data;
4105 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
4107 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
4108 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
4113 dbg("[SAT] receive data data is null");
4118 dbg("there is no valid plugin at this point");
4122 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
4123 g_variant_get(exec_result, "(iiiiibv)",&resp, &me_problem, &bip_problem, &data_str_len, &data_len, &other_info, &received_data);
4125 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
4128 tr->cmd_number = q_data.cmd_data.receive_data.command_detail.cmd_num;
4129 tr->cmd_type = q_data.cmd_data.receive_data.command_detail.cmd_type;
4130 memcpy((void*)&tr->terminal_rsp_data.receive_data.command_detail, &q_data.cmd_data.receive_data.command_detail, sizeof(struct tel_sat_cmd_detail_info));
4132 tr->terminal_rsp_data.receive_data.device_id.src = DEVICE_ID_ME;
4133 tr->terminal_rsp_data.receive_data.device_id.dest = q_data.cmd_data.receive_data.device_id.src;
4135 tr->terminal_rsp_data.receive_data.result_type = resp;
4137 case RESULT_SUCCESS:
4138 case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
4139 case RESULT_SUCCESS_WITH_MISSING_INFO:
4143 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
4144 case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
4145 tr->terminal_rsp_data.receive_data.me_problem_type = me_problem;
4148 case RESULT_BEARER_INDEPENDENT_PROTOCOL_ERROR:
4149 tr->terminal_rsp_data.receive_data.bip_problem_type = bip_problem;
4156 tr->terminal_rsp_data.receive_data.channel_data_len.data_len = data_len;
4157 tr->terminal_rsp_data.receive_data.channel_data.data_string_len = data_str_len;
4160 int local_index = 0;
4162 GVariantIter *iter = NULL;
4164 dbg("additional data exist type_format(%s)", g_variant_get_type_string(received_data));
4166 g_variant_get(received_data, "ay", &iter);
4167 while( g_variant_iter_loop (iter, "y", &data)){
4168 //dbg("index(%d) data(%d)", index, data);
4169 tr->terminal_rsp_data.receive_data.channel_data.data_string[local_index] = data;
4172 g_variant_iter_free(iter);
4174 dbg("the last index data(%d), data_total_len(%d)", local_index, data_str_len);
4178 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
4179 if(rv != TCORE_RETURN_SUCCESS){
4180 dbg("fail to send terminal response");
4188 static gboolean sat_manager_handle_send_data_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
4190 TReturn rv = TCORE_RETURN_FAILURE;
4191 gboolean result = FALSE;
4193 gint resp, me_problem, bip_problem;
4196 struct treq_sat_terminal_rsp_data *tr;
4197 struct sat_manager_queue_data q_data;
4199 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
4201 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
4202 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
4207 dbg("[SAT] send data data is null");
4212 dbg("there is no valid plugin at this point");
4216 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
4217 g_variant_get(exec_result, "(iiii)",&resp, &me_problem, &bip_problem, &data_len);
4219 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
4222 tr->cmd_number = q_data.cmd_data.send_data.command_detail.cmd_num;
4223 tr->cmd_type = q_data.cmd_data.send_data.command_detail.cmd_type;
4224 memcpy((void*)&tr->terminal_rsp_data.send_data.command_detail, &q_data.cmd_data.send_data.command_detail, sizeof(struct tel_sat_cmd_detail_info));
4226 tr->terminal_rsp_data.send_data.device_id.src = DEVICE_ID_ME;
4227 tr->terminal_rsp_data.send_data.device_id.dest = q_data.cmd_data.send_data.device_id.src;
4229 tr->terminal_rsp_data.send_data.result_type = resp;
4231 case RESULT_SUCCESS:
4232 case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
4233 case RESULT_SUCCESS_WITH_MISSING_INFO:
4237 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
4238 case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
4239 tr->terminal_rsp_data.send_data.me_problem_type = me_problem;
4242 case RESULT_BEARER_INDEPENDENT_PROTOCOL_ERROR:
4243 tr->terminal_rsp_data.send_data.bip_problem_type = bip_problem;
4250 tr->terminal_rsp_data.send_data.channel_data_len.data_len = data_len;
4253 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
4254 if(rv != TCORE_RETURN_SUCCESS){
4255 dbg("fail to send terminal response");
4263 static gboolean sat_manager_handle_get_channel_status_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
4265 TReturn rv = TCORE_RETURN_FAILURE;
4266 gboolean result = FALSE;
4268 gint resp, me_problem, bip_problem;
4269 gint channel_id, channel_status, channel_status_info;
4271 struct treq_sat_terminal_rsp_data *tr;
4272 struct sat_manager_queue_data q_data;
4274 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
4276 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
4277 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
4282 dbg("[SAT] get channel status data is null");
4287 dbg("there is no valid plugin at this point");
4291 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
4292 g_variant_get(exec_result, "(iiiiii)",&resp, &me_problem, &bip_problem,
4293 &channel_id, &channel_status, &channel_status_info);
4295 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
4298 tr->cmd_number = q_data.cmd_data.get_channel_status.command_detail.cmd_num;
4299 tr->cmd_type = q_data.cmd_data.get_channel_status.command_detail.cmd_type;
4300 memcpy((void*)&tr->terminal_rsp_data.get_channel_status.command_detail, &q_data.cmd_data.get_channel_status.command_detail, sizeof(struct tel_sat_cmd_detail_info));
4302 tr->terminal_rsp_data.get_channel_status.device_id.src = q_data.cmd_data.get_channel_status.device_id.dest;
4303 tr->terminal_rsp_data.get_channel_status.device_id.dest = q_data.cmd_data.get_channel_status.device_id.src;
4305 tr->terminal_rsp_data.get_channel_status.result_type = resp;
4307 case RESULT_SUCCESS:
4308 case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
4309 case RESULT_SUCCESS_WITH_MISSING_INFO:
4313 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
4314 case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
4315 tr->terminal_rsp_data.get_channel_status.me_problem_type = me_problem;
4318 case RESULT_BEARER_INDEPENDENT_PROTOCOL_ERROR:
4319 tr->terminal_rsp_data.get_channel_status.bip_problem_type = bip_problem;
4326 tr->terminal_rsp_data.get_channel_status.channel_status.channel_id = channel_id;
4327 tr->terminal_rsp_data.get_channel_status.channel_status.status = channel_status;
4328 tr->terminal_rsp_data.get_channel_status.channel_status.status_info = channel_status_info;
4331 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
4332 if(rv != TCORE_RETURN_SUCCESS){
4333 dbg("fail to send terminal response");
4341 static gboolean sat_manager_handle_send_dtmf_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
4343 TReturn rv = TCORE_RETURN_FAILURE;
4344 gboolean result = FALSE;
4347 struct treq_sat_terminal_rsp_data *tr;
4348 struct sat_manager_queue_data q_data;
4350 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
4353 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
4355 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
4356 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
4362 dbg("[SAT] get channel status data is null");
4368 dbg("there is no valid plugin at this point");
4373 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
4374 g_variant_get(exec_result, "(i)",&resp);
4376 tr->cmd_number = q_data.cmd_data.send_dtmf.command_detail.cmd_num;
4377 tr->cmd_type = q_data.cmd_data.send_dtmf.command_detail.cmd_type;
4378 memcpy((void*)&tr->terminal_rsp_data.send_dtmf.command_detail, &q_data.cmd_data.send_dtmf.command_detail, sizeof(struct tel_sat_cmd_detail_info));
4380 tr->terminal_rsp_data.send_dtmf.device_id.src = DEVICE_ID_ME;
4381 tr->terminal_rsp_data.send_dtmf.device_id.dest = q_data.cmd_data.send_dtmf.device_id.src;
4383 tr->terminal_rsp_data.send_dtmf.result_type = resp;
4385 case RESULT_SUCCESS:
4386 if (q_data.cmd_data.send_dtmf.icon_id.is_exist)
4387 tr->terminal_rsp_data.send_dtmf.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
4390 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
4391 tr->terminal_rsp_data.send_dtmf.me_problem_type = ME_PROBLEM_NOT_IN_SPEECH_CALL;
4395 tr->terminal_rsp_data.send_dtmf.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
4396 tr->terminal_rsp_data.send_dtmf.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
4401 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
4402 if(rv != TCORE_RETURN_SUCCESS){
4403 dbg("fail to send terminal response");
4411 static gboolean sat_manager_handle_launch_browser_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
4413 TReturn rv = TCORE_RETURN_FAILURE;
4414 gboolean result = FALSE;
4416 gint resp, browser_problem;
4417 struct treq_sat_terminal_rsp_data *tr;
4418 struct sat_manager_queue_data q_data;
4420 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
4422 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
4423 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
4428 dbg("[SAT] get channel status data is null");
4433 dbg("there is no valid plugin at this point");
4437 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
4438 g_variant_get(exec_result, "(ii)",&resp,&browser_problem);
4440 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
4443 tr->cmd_number = q_data.cmd_data.launch_browser.command_detail.cmd_num;
4444 tr->cmd_type = q_data.cmd_data.launch_browser.command_detail.cmd_type;
4445 memcpy((void*)&tr->terminal_rsp_data.launch_browser.command_detail, &q_data.cmd_data.launch_browser.command_detail, sizeof(struct tel_sat_cmd_detail_info));
4447 tr->terminal_rsp_data.launch_browser.device_id.src = q_data.cmd_data.launch_browser.device_id.dest;
4448 tr->terminal_rsp_data.launch_browser.device_id.dest = q_data.cmd_data.launch_browser.device_id.src;
4450 tr->terminal_rsp_data.launch_browser.result_type = resp;
4452 case RESULT_SUCCESS:
4453 if (q_data.cmd_data.launch_browser.user_confirm_icon_id.is_exist)
4454 tr->terminal_rsp_data.launch_browser.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
4456 tr->terminal_rsp_data.launch_browser.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
4457 tr->terminal_rsp_data.launch_browser.browser_problem_type = BROWSER_PROBLEM_NO_SPECIFIC_CAUSE;
4459 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
4460 tr->terminal_rsp_data.launch_browser.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
4461 tr->terminal_rsp_data.launch_browser.browser_problem_type = BROWSER_PROBLEM_NO_SPECIFIC_CAUSE;
4464 case RESULT_LAUNCH_BROWSER_GENERIC_ERROR_CODE:
4465 tr->terminal_rsp_data.launch_browser.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
4466 tr->terminal_rsp_data.launch_browser.browser_problem_type = browser_problem;
4469 tr->terminal_rsp_data.launch_browser.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
4470 tr->terminal_rsp_data.launch_browser.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
4471 tr->terminal_rsp_data.launch_browser.browser_problem_type = BROWSER_PROBLEM_NO_SPECIFIC_CAUSE;
4476 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
4477 if(rv != TCORE_RETURN_SUCCESS){
4478 dbg("fail to send terminal response");
4486 gboolean sat_manager_handle_app_exec_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint command_type, GVariant *exec_result)
4488 gboolean result = FALSE;
4489 GVariant *resp = NULL;
4490 dbg("[SAT] app exec result command id(%d) command type(%d)", command_id, command_type);
4492 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
4493 g_variant_get(exec_result, "v", &resp);
4495 switch (command_type) {
4496 case SAT_PROATV_CMD_SETUP_MENU:
4497 result = _sat_manager_handle_setup_menu_result(ctx, plg, command_id, resp);
4500 case SAT_PROATV_CMD_DISPLAY_TEXT:
4501 result = _sat_manager_handle_display_text_result(ctx, plg, command_id, resp);
4504 case SAT_PROATV_CMD_PLAY_TONE:
4505 result = _sat_manager_handle_play_tone_result(ctx, plg, command_id, resp);
4508 case SAT_PROATV_CMD_SEND_SMS:
4509 result = _sat_manager_handle_send_sms_result(ctx, plg, command_id, resp);
4512 case SAT_PROATV_CMD_SEND_SS:
4513 result = _sat_manager_handle_send_ss_result(ctx, plg, command_id, resp);
4516 case SAT_PROATV_CMD_SEND_USSD:
4517 result = _sat_manager_handle_send_ussd_result(ctx, plg, command_id, resp);
4520 case SAT_PROATV_CMD_SETUP_CALL:
4521 result = _sat_manager_handle_setup_call_result(ctx, plg, command_id, resp);
4524 case SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT:
4525 result = _sat_manager_handle_setup_idle_mode_text_result(ctx, plg, command_id, resp);
4528 case SAT_PROATV_CMD_OPEN_CHANNEL:
4529 result = sat_manager_handle_open_channel_result(ctx, plg, command_id, resp);
4532 case SAT_PROATV_CMD_CLOSE_CHANNEL:
4533 result = sat_manager_handle_close_channel_result(ctx, plg, command_id, resp);
4536 case SAT_PROATV_CMD_RECEIVE_DATA:
4537 result = sat_manager_handle_receive_data_result(ctx, plg, command_id, resp);
4540 case SAT_PROATV_CMD_SEND_DATA:
4541 result = sat_manager_handle_send_data_result(ctx, plg, command_id, resp);
4544 case SAT_PROATV_CMD_GET_CHANNEL_STATUS:
4545 result = sat_manager_handle_get_channel_status_result(ctx, plg, command_id, resp);
4548 case SAT_PROATV_CMD_SEND_DTMF:
4549 result = sat_manager_handle_send_dtmf_result(ctx, plg, command_id, resp);
4552 case SAT_PROATV_CMD_LAUNCH_BROWSER:
4553 result = sat_manager_handle_launch_browser_result(ctx, plg, command_id, resp);
4557 dbg("[SAT] invalid command type(%d)", command_type);
4564 static gboolean _sat_manager_handle_menu_select_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data)
4566 TReturn rv = TCORE_RETURN_FAILURE;
4567 gboolean result = FALSE;
4570 struct treq_sat_terminal_rsp_data *tr;
4571 struct sat_manager_queue_data q_data;
4573 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
4575 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
4576 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
4581 dbg("there is no valid plugin at this point");
4586 int local_index = 0;
4588 GVariantIter *iter = NULL;
4589 GVariant *inner_gv = NULL;
4591 inner_gv = g_variant_get_variant(addtional_data);
4592 dbg("additional data exist type_format(%s)", g_variant_get_type_string(inner_gv));
4594 g_variant_get(inner_gv, "ay", &iter);
4595 while( g_variant_iter_loop (iter, "y", &data)){
4596 dbg("index(%d) data(%d)", local_index, data);
4600 g_variant_iter_free(iter);
4601 g_variant_unref(inner_gv);
4604 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
4607 tr->cmd_number = q_data.cmd_data.selectItemInd.command_detail.cmd_num;
4608 tr->cmd_type = q_data.cmd_data.selectItemInd.command_detail.cmd_type;
4609 memcpy((void*)&tr->terminal_rsp_data.select_item.command_detail, &q_data.cmd_data.selectItemInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
4610 tr->terminal_rsp_data.select_item.device_id.src = DEVICE_ID_ME;
4611 tr->terminal_rsp_data.select_item.device_id.dest = DEVICE_ID_SIM;
4613 switch (confirm_type) {
4614 case USER_CONFIRM_YES:
4615 tr->terminal_rsp_data.select_item.item_identifier.item_identifier = item_id;
4616 tr->terminal_rsp_data.select_item.other_info = FALSE;
4617 tr->terminal_rsp_data.select_item.result_type = RESULT_SUCCESS;
4618 tr->terminal_rsp_data.select_item.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
4620 if(q_data.cmd_data.selectItemInd.text_attribute.b_txt_attr || q_data.cmd_data.selectItemInd.text_attribute_list.list_cnt > 0)
4621 tr->terminal_rsp_data.select_item.result_type = RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION;
4623 if (q_data.cmd_data.selectItemInd.icon_id.is_exist)
4624 tr->terminal_rsp_data.select_item.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
4628 case USER_CONFIRM_HELP_INFO:
4629 tr->terminal_rsp_data.select_item.item_identifier.item_identifier = item_id;
4630 tr->terminal_rsp_data.select_item.other_info = FALSE;
4631 tr->terminal_rsp_data.select_item.result_type = RESULT_HELP_INFO_REQUIRED_BY_USER;
4632 tr->terminal_rsp_data.select_item.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
4633 //TODO ctx->help_requested = TRUE;
4636 case USER_CONFIRM_END:
4637 tr->terminal_rsp_data.select_item.result_type = RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER;
4640 case USER_CONFIRM_NO_OR_CANCEL:
4641 tr->terminal_rsp_data.select_item.result_type = RESULT_BACKWARD_MOVE_BY_USER;
4644 case USER_CONFIRM_TIMEOUT:
4645 tr->terminal_rsp_data.select_item.result_type = RESULT_NO_RESPONSE_FROM_USER;
4649 dbg("not handled value[%d] here", confirm_type);
4654 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
4655 if(rv != TCORE_RETURN_SUCCESS){
4656 dbg("fail to send terminal response");
4665 static gboolean _sat_manager_handle_display_text_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data)
4667 TReturn rv = TCORE_RETURN_FAILURE;
4668 gboolean result = FALSE;
4670 struct treq_sat_terminal_rsp_data *tr;
4671 struct sat_manager_queue_data q_data;
4673 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
4675 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
4676 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
4681 dbg("there is no valid plugin at this point");
4685 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
4688 tr->cmd_number = q_data.cmd_data.displayTextInd.command_detail.cmd_num;
4689 tr->cmd_type = q_data.cmd_data.displayTextInd.command_detail.cmd_type;
4690 memcpy((void*)&tr->terminal_rsp_data.display_text.command_detail, &q_data.cmd_data.displayTextInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
4691 tr->terminal_rsp_data.display_text.device_id.src = DEVICE_ID_ME;
4692 tr->terminal_rsp_data.display_text.device_id.dest = DEVICE_ID_SIM;
4694 switch (confirm_type){
4695 case USER_CONFIRM_YES: {
4696 tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS;
4697 tr->terminal_rsp_data.display_text.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
4699 if(q_data.cmd_data.displayTextInd.text_attribute.b_txt_attr)
4700 tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION;
4702 if (q_data.cmd_data.displayTextInd.icon_id.is_exist)
4703 tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
4706 case USER_CONFIRM_NO_OR_CANCEL:
4707 tr->terminal_rsp_data.display_text.result_type = RESULT_BACKWARD_MOVE_BY_USER;
4710 case USER_CONFIRM_TIMEOUT:
4711 tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS;
4713 if (q_data.cmd_data.displayTextInd.command_detail.cmd_qualifier.display_text.text_clear_type == TEXT_WAIT_FOR_USER_TO_CLEAR_MSG )
4714 tr->terminal_rsp_data.display_text.result_type = RESULT_NO_RESPONSE_FROM_USER;
4718 case USER_CONFIRM_END:
4719 tr->terminal_rsp_data.display_text.result_type = RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER;
4722 case USER_CONFIRM_HELP_INFO:
4724 dbg("not handled value[%d] here", confirm_type);
4729 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
4730 if(rv != TCORE_RETURN_SUCCESS){
4731 dbg("fail to send terminal response");
4740 static gboolean _sat_manager_handle_get_inkey_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data)
4742 TReturn rv = TCORE_RETURN_FAILURE;
4743 gboolean result = FALSE;
4745 gint inkey_data_len = 0;
4746 gchar inkey_data[SAT_TEXT_STRING_LEN_MAX];
4747 struct treq_sat_terminal_rsp_data *tr;
4748 struct sat_manager_queue_data q_data;
4750 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
4751 memset(inkey_data, 0, SAT_TEXT_STRING_LEN_MAX);
4753 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
4754 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
4759 dbg("there is no valid plugin at this point");
4764 int local_index = 0;
4766 GVariantIter *iter = NULL;
4767 GVariant *inner_gv = NULL;
4769 inner_gv = g_variant_get_variant(addtional_data);
4770 dbg("additional data exist type_format(%s)", g_variant_get_type_string(inner_gv));
4772 g_variant_get(inner_gv, "ay", &iter);
4773 while( g_variant_iter_loop (iter, "y", &data)){
4774 dbg("index(%d) data(%d)", local_index, data);
4775 inkey_data[local_index] = data;
4778 g_variant_iter_free(iter);
4779 g_variant_unref(inner_gv);
4780 inkey_data_len = local_index;
4783 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
4786 tr->cmd_number = q_data.cmd_data.getInkeyInd.command_detail.cmd_num;
4787 tr->cmd_type = q_data.cmd_data.getInkeyInd.command_detail.cmd_type;
4788 memcpy((void*)&tr->terminal_rsp_data.get_inkey.command_detail, &q_data.cmd_data.getInkeyInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
4789 tr->terminal_rsp_data.get_inkey.device_id.src = DEVICE_ID_ME;
4790 tr->terminal_rsp_data.get_inkey.device_id.dest = DEVICE_ID_SIM;
4792 switch (confirm_type){
4793 case USER_CONFIRM_YES:
4794 tr->terminal_rsp_data.get_inkey.result_type = RESULT_SUCCESS;
4796 if(q_data.cmd_data.getInkeyInd.text_attribute.b_txt_attr)
4797 tr->terminal_rsp_data.get_inkey.result_type = RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION;
4799 if (q_data.cmd_data.getInkeyInd.icon_id.is_exist)
4800 tr->terminal_rsp_data.get_inkey.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
4802 if (q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_inkey.inkey_type == INKEY_TYPE_YES_NO_REQUESTED) {
4803 tr->terminal_rsp_data.get_inkey.text.dcs.m_class = MSG_CLASS_RESERVED;
4804 tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
4805 tr->terminal_rsp_data.get_inkey.text.string_length = 1;
4806 tr->terminal_rsp_data.get_inkey.text.string[0] = 0x01;
4808 else if(inkey_data_len > 0)
4810 tr->terminal_rsp_data.get_inkey.text.string_length = inkey_data_len;
4812 if (!q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_inkey.alphabet_set){
4813 tr->terminal_rsp_data.get_inkey.text.is_digit_only = TRUE;
4814 tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
4815 tr->terminal_rsp_data.get_inkey.text.dcs.m_class = MSG_CLASS_RESERVED;
4817 memcpy((void*)tr->terminal_rsp_data.get_inkey.text.string, inkey_data, inkey_data_len);
4821 tr->terminal_rsp_data.get_inkey.text.dcs.m_class = MSG_CLASS_RESERVED;
4823 if(q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_inkey.alphabet_type == INPUT_ALPHABET_TYPE_SMS_DEFAULT )
4826 char tmp_str[SAT_TEXT_STRING_LEN_MAX + 1], *packed_data;
4828 dbg("sat gsm7 encoding");
4829 tcore_util_convert_utf8_to_gsm((unsigned char*) tmp_str, &tmp_len, (unsigned char*)inkey_data, inkey_data_len);
4830 packed_data = (char*) tcore_util_pack_gsm7bit((const unsigned char *)tmp_str, tmp_len);
4833 tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
4834 tr->terminal_rsp_data.get_inkey.text.string_length = strlen(packed_data);
4835 memcpy((void*) tr->terminal_rsp_data.get_inkey.text.string, packed_data, strlen(packed_data));
4837 g_free(packed_data);
4840 else if(q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_inkey.alphabet_type == INPUT_ALPHABET_TYPE_UCS2 )
4845 tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_UCS2;
4846 tcore_util_convert_utf8_to_ucs2(&tmp,
4847 &tr->terminal_rsp_data.get_inkey.text.string_length, (unsigned char*)inkey_data, inkey_data_len);
4849 memcpy(tr->terminal_rsp_data.get_inkey.text.string, tmp, tr->terminal_rsp_data.get_inkey.text.string_length);
4854 tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_RESERVED;
4855 dbg("[SAT] invalid DCS[%d]",tr->terminal_rsp_data.get_inkey.text.dcs.a_format);
4861 case USER_CONFIRM_HELP_INFO:
4862 tr->terminal_rsp_data.get_inkey.result_type = RESULT_HELP_INFO_REQUIRED_BY_USER;
4863 //TODO ctx->help_requested = TRUE;
4866 case USER_CONFIRM_NO_OR_CANCEL:
4867 tr->terminal_rsp_data.get_inkey.result_type = RESULT_BACKWARD_MOVE_BY_USER;
4869 if (q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_inkey.inkey_type == INKEY_TYPE_YES_NO_REQUESTED) {
4870 tr->terminal_rsp_data.get_inkey.result_type = RESULT_SUCCESS;
4871 tr->terminal_rsp_data.get_inkey.text.dcs.m_class = MSG_CLASS_RESERVED;
4872 tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
4873 tr->terminal_rsp_data.get_inkey.text.string_length = 1;
4874 tr->terminal_rsp_data.get_inkey.text.string[0] = 0x00;
4878 case USER_CONFIRM_TIMEOUT:
4879 tr->terminal_rsp_data.get_inkey.result_type = RESULT_NO_RESPONSE_FROM_USER;
4882 case USER_CONFIRM_END:
4883 tr->terminal_rsp_data.get_inkey.result_type = RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER;
4887 dbg("not handled value[%d] here", confirm_type);
4892 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
4893 if(rv != TCORE_RETURN_SUCCESS){
4894 dbg("fail to send terminal response");
4903 static gboolean _sat_manager_handle_get_input_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data)
4905 TReturn rv = TCORE_RETURN_FAILURE;
4906 gboolean result = FALSE;
4908 gint input_data_len = 0;
4909 gchar input_data[SAT_TEXT_STRING_LEN_MAX];
4910 struct treq_sat_terminal_rsp_data *tr;
4911 struct sat_manager_queue_data q_data;
4913 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
4914 memset(input_data, 0, SAT_TEXT_STRING_LEN_MAX);
4916 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
4917 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
4922 dbg("there is no valid plugin at this point");
4927 int local_index = 0;
4929 GVariantIter *iter = NULL;
4930 GVariant *inner_gv = NULL;
4932 inner_gv = g_variant_get_variant(addtional_data);
4933 dbg("additional data exist type_format(%s)", g_variant_get_type_string(inner_gv));
4935 g_variant_get(inner_gv, "ay", &iter);
4936 while( g_variant_iter_loop (iter, "y", &data)){
4937 dbg("index(%d) data(%d)", local_index, data);
4938 input_data[local_index] = data;
4941 g_variant_iter_free(iter);
4942 g_variant_unref(inner_gv);
4943 input_data_len = local_index;
4946 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
4950 tr->cmd_number = q_data.cmd_data.getInputInd.command_detail.cmd_num;
4951 tr->cmd_type = q_data.cmd_data.getInputInd.command_detail.cmd_type;
4952 memcpy((void*)&tr->terminal_rsp_data.get_input.command_detail, &q_data.cmd_data.getInputInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
4953 tr->terminal_rsp_data.get_input.device_id.src = DEVICE_ID_ME;
4954 tr->terminal_rsp_data.get_input.device_id.dest = DEVICE_ID_SIM;
4956 switch (confirm_type){
4957 case USER_CONFIRM_YES:
4958 tr->terminal_rsp_data.get_input.result_type = RESULT_SUCCESS;
4959 tr->terminal_rsp_data.get_input.text.dcs.m_class = MSG_CLASS_RESERVED;
4961 if(!q_data.cmd_data.getInputInd.command_detail.cmd_qualifier.get_input.alphabet_set){
4962 tr->terminal_rsp_data.get_input.text.is_digit_only = TRUE;
4965 if(q_data.cmd_data.getInputInd.text_attribute.b_txt_attr)
4966 tr->terminal_rsp_data.get_input.result_type = RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION;
4968 if (q_data.cmd_data.getInputInd.icon_id.is_exist)
4969 tr->terminal_rsp_data.get_input.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
4971 if(!q_data.cmd_data.getInputInd.command_detail.cmd_qualifier.get_input.user_input_unpacked_format){
4972 dbg("[SAT] packing to SMS7 default");
4974 tr->terminal_rsp_data.get_input.text.string_length = 0;
4975 tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FORMAT_SMS_DEFAULT;
4977 if (input_data_len > 0){
4979 char tmp_str[SAT_TEXT_STRING_LEN_MAX + 1], *packed_data;
4981 dbg("sat gsm7 encoding");
4982 tcore_util_convert_utf8_to_gsm((unsigned char*)tmp_str, &tmp_len, (unsigned char*)input_data, input_data_len);
4983 packed_data = (char*) tcore_util_pack_gsm7bit((const unsigned char *)tmp_str, tmp_len);
4986 memcpy((void*)tr->terminal_rsp_data.get_input.text.string, packed_data, strlen(packed_data));
4987 tr->terminal_rsp_data.get_input.text.string_length = strlen(packed_data);
4989 g_free(packed_data);
4996 dbg("[SAT] packing not required");
4998 if(q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_input.alphabet_type == INPUT_ALPHABET_TYPE_SMS_DEFAULT){
5000 tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
5001 tcore_util_convert_utf8_to_gsm((unsigned char*)tr->terminal_rsp_data.get_input.text.string,
5002 &tr->terminal_rsp_data.get_input.text.string_length, (unsigned char*)input_data, input_data_len);
5005 else if(q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_input.alphabet_type == INPUT_ALPHABET_TYPE_UCS2 ){
5008 tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FORMAT_UCS2;
5009 tcore_util_convert_utf8_to_ucs2(&tmp, &tr->terminal_rsp_data.get_input.text.string_length, (unsigned char*)input_data, input_data_len);
5011 memcpy(tr->terminal_rsp_data.get_input.text.string, tmp, tr->terminal_rsp_data.get_input.text.string_length);
5015 tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FORMAT_RESERVED;
5016 dbg("[SAT] invalid DCS[%d]",tr->terminal_rsp_data.get_input.text.dcs.a_format);
5020 case USER_CONFIRM_HELP_INFO:
5021 tr->terminal_rsp_data.get_input.result_type = RESULT_HELP_INFO_REQUIRED_BY_USER;
5022 //TODO ctx->help_requested = TRUE;
5025 case USER_CONFIRM_NO_OR_CANCEL:
5026 tr->terminal_rsp_data.get_input.result_type = RESULT_BACKWARD_MOVE_BY_USER;
5029 case USER_CONFIRM_TIMEOUT:
5030 tr->terminal_rsp_data.get_input.result_type = RESULT_NO_RESPONSE_FROM_USER;
5033 case USER_CONFIRM_END:
5034 tr->terminal_rsp_data.get_input.result_type = RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER;
5041 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
5042 if(rv != TCORE_RETURN_SUCCESS){
5043 dbg("fail to send terminal response");
5052 static gboolean _sat_manager_handle_setup_call_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data)
5054 TReturn rv = TCORE_RETURN_FAILURE;
5055 gboolean result = FALSE;
5057 gint input_data_len = 0;
5058 gchar input_data[SAT_TEXT_STRING_LEN_MAX];
5059 struct treq_sat_terminal_rsp_data *tr;
5060 struct sat_manager_queue_data q_data;
5062 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
5063 memset(input_data, 0, SAT_TEXT_STRING_LEN_MAX);
5065 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
5066 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
5071 dbg("there is no valid plugin at this point");
5075 if (addtional_data) {
5076 int local_index = 0;
5078 GVariantIter *iter = NULL;
5079 GVariant *inner_gv = NULL;
5081 inner_gv = g_variant_get_variant(addtional_data);
5082 dbg("additional data exist type_format(%s)", g_variant_get_type_string(inner_gv));
5084 g_variant_get(inner_gv, "ay", &iter);
5085 while( g_variant_iter_loop (iter, "y", &data)){
5086 dbg("index(%d) data(%d)", local_index, data);
5087 input_data[local_index] = data;
5090 g_variant_iter_free(iter);
5091 g_variant_unref(inner_gv);
5092 input_data_len = local_index;
5093 dbg("input_data_len=[%d]", input_data_len);
5096 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
5100 tr->cmd_number = q_data.cmd_data.setup_call.command_detail.cmd_num;
5101 tr->cmd_type = q_data.cmd_data.setup_call.command_detail.cmd_type;
5102 memcpy((void*)&tr->terminal_rsp_data.setup_call.command_detail, &q_data.cmd_data.setup_call.command_detail, sizeof(struct tel_sat_cmd_detail_info));
5103 tr->terminal_rsp_data.setup_call.device_id.src = DEVICE_ID_ME;
5104 tr->terminal_rsp_data.setup_call.device_id.dest = q_data.cmd_data.setup_call.device_id.src;
5106 switch(confirm_type){
5107 case USER_CONFIRM_YES:{
5110 TelephonyObjectSkeleton *object;
5112 const gchar *cp_name;
5113 GVariant *setup_call = NULL;
5115 gint command_id, call_type, confirmed_text_len, text_len, duration;
5116 gchar *confirmed_text = NULL, *text = NULL, *call_number = NULL;
5117 #if defined(TIZEN_SUPPORT_SAT_ICON)
5120 enum dbus_tapi_sim_slot_id slot_id;
5121 gboolean call_app_rv;
5123 cp_name = tcore_server_get_cp_name_by_plugin(plg);
5124 if (cp_name == NULL) {
5125 err("CP name is NULL");
5129 dbg("CP Name: [%s]", cp_name);
5130 path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
5132 /* Look-up Hash table for Object */
5133 object = g_hash_table_lookup(ctx->objects, path);
5134 dbg("Path: [%s] Interface object: [%p]", path, object);
5136 if (object == NULL) {
5137 err("Object is NOT defined!!!");
5141 sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
5143 setup_call = sat_manager_setup_call_noti(ctx, cp_name, &q_data.cmd_data.setup_call);
5145 dbg("setup call type_format(%s)", g_variant_get_type_string(setup_call));
5146 #if defined(TIZEN_SUPPORT_SAT_ICON)
5147 g_variant_get(setup_call, "(isisi@visi)", &command_id, &confirmed_text, &confirmed_text_len, &text, &text_len, &icon_id, &call_type, &call_number, &duration);
5149 telephony_sat_emit_setup_call(sat, command_id, confirmed_text, confirmed_text_len, text, text_len, icon_id, call_type,
5150 call_number, duration);
5152 g_variant_get(setup_call, "(isisiisi)", &command_id, &confirmed_text, &confirmed_text_len, &text, &text_len, &call_type, &call_number, &duration);
5154 telephony_sat_emit_setup_call(sat, command_id, confirmed_text, confirmed_text_len, text, text_len, call_type,
5155 call_number, duration);
5157 g_free(confirmed_text);
5159 g_free(call_number);
5161 slot_id = get_sim_slot_id_by_cp_name((char *)tcore_server_get_cp_name_by_plugin(plg));
5162 dbg("slot_id: [%d]", slot_id);
5164 call_app_rv = sat_ui_support_launch_call_application(q_data.cmd_data.setup_call.command_detail.cmd_type, setup_call, slot_id);
5170 case USER_CONFIRM_NO_OR_CANCEL:{
5171 tr->terminal_rsp_data.setup_call.result_type = RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER;
5174 case USER_CONFIRM_END:{
5175 tr->terminal_rsp_data.setup_call.result_type = RESULT_USER_DID_NOT_ACCEPT_CALL_SETUP_REQ;
5178 case USER_CONFIRM_HELP_INFO:
5180 tr->terminal_rsp_data.setup_call.result_type = RESULT_NO_RESPONSE_FROM_USER;
5185 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
5186 if(rv != TCORE_RETURN_SUCCESS){
5187 dbg("fail to send terminal response");
5195 static gboolean _sat_manager_handle_send_dtmf_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data)
5197 TReturn rv = TCORE_RETURN_FAILURE;
5198 gboolean result = FALSE;
5200 struct treq_sat_terminal_rsp_data *tr;
5201 struct sat_manager_queue_data q_data;
5203 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
5205 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
5206 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
5211 dbg("there is no valid plugin at this point");
5215 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
5219 tr->cmd_number = q_data.cmd_data.send_dtmf.command_detail.cmd_num;
5220 tr->cmd_type = q_data.cmd_data.send_dtmf.command_detail.cmd_type;
5221 memcpy((void*)&tr->terminal_rsp_data.send_dtmf.command_detail, &q_data.cmd_data.send_dtmf.command_detail, sizeof(struct tel_sat_cmd_detail_info));
5222 tr->terminal_rsp_data.send_dtmf.device_id.src = DEVICE_ID_ME;
5223 tr->terminal_rsp_data.send_dtmf.device_id.dest = q_data.cmd_data.send_dtmf.device_id.src;
5225 dbg("confirm_type[%d]", confirm_type);
5227 switch(confirm_type){
5228 case USER_CONFIRM_NO_OR_CANCEL:
5229 case USER_CONFIRM_END:
5230 tr->terminal_rsp_data.send_dtmf.result_type = RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER;
5231 tr->terminal_rsp_data.send_dtmf.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
5234 tr->terminal_rsp_data.send_dtmf.result_type = RESULT_NO_RESPONSE_FROM_USER;
5239 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
5240 if(rv != TCORE_RETURN_SUCCESS){
5241 dbg("fail to send terminal response");
5249 static gboolean _sat_manager_handle_launch_browser_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data)
5251 TReturn rv = TCORE_RETURN_FAILURE;
5252 gboolean result = FALSE;
5254 struct treq_sat_terminal_rsp_data *tr;
5255 struct sat_manager_queue_data q_data;
5257 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
5259 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
5260 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
5265 dbg("there is no valid plugin at this point");
5269 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
5273 tr->cmd_number = q_data.cmd_data.launch_browser.command_detail.cmd_num;
5274 tr->cmd_type = q_data.cmd_data.launch_browser.command_detail.cmd_type;
5275 memcpy((void*)&tr->terminal_rsp_data.launch_browser.command_detail, &q_data.cmd_data.launch_browser.command_detail, sizeof(struct tel_sat_cmd_detail_info));
5276 tr->terminal_rsp_data.launch_browser.device_id.src = q_data.cmd_data.launch_browser.device_id.dest;
5277 tr->terminal_rsp_data.launch_browser.device_id.dest = q_data.cmd_data.launch_browser.device_id.src;
5279 dbg("confirm_type[%d]", confirm_type);
5281 switch(confirm_type){
5282 case USER_CONFIRM_YES:{
5285 TelephonyObjectSkeleton *object;
5287 const gchar *cp_name;
5288 GVariant *launch_browser = NULL;
5290 gint command_id = 0;
5291 gint browser_launch_type = 0, browser_id = 0;
5292 gint url_len = 0, text_len = 0, gateway_proxy_len =0;
5295 gchar *gateway_proxy = NULL;
5296 #if defined(TIZEN_SUPPORT_SAT_ICON)
5297 GVariant *icon_id = NULL;
5299 enum dbus_tapi_sim_slot_id slot_id;
5301 cp_name = tcore_server_get_cp_name_by_plugin(plg);
5302 if (cp_name == NULL) {
5303 err("CP name is NULL");
5307 dbg("CP Name: [%s]", cp_name);
5308 path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
5310 /* Look-up Hash table for Object */
5311 object = g_hash_table_lookup(ctx->objects, path);
5312 dbg("Path: [%s] Interface object: [%p]", path, object);
5314 if (object == NULL) {
5315 err("Object is NOT defined!!!");
5318 sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
5320 launch_browser = sat_manager_launch_browser_noti(ctx, cp_name, &q_data.cmd_data.launch_browser);
5322 dbg("launch_browser type_format(%s)", g_variant_get_type_string(launch_browser));
5323 #if defined(TIZEN_SUPPORT_SAT_ICON)
5324 g_variant_get(launch_browser, "(iiisisisi@v)", &command_id, &browser_launch_type, &browser_id, &url, &url_len, &gateway_proxy, &gateway_proxy_len, &text, &text_len, &icon_id);
5326 telephony_sat_emit_launch_browser(sat, command_id, browser_launch_type, browser_id, url, url_len, gateway_proxy, gateway_proxy_len, text, text_len, icon_id);
5328 g_variant_get(launch_browser, "(iiisisisi)", &command_id, &browser_launch_type, &browser_id, &url, &url_len, &gateway_proxy, &gateway_proxy_len, &text, &text_len);
5330 telephony_sat_emit_launch_browser(sat, command_id, browser_launch_type, browser_id, url, url_len, gateway_proxy, gateway_proxy_len, text, text_len);
5334 g_free(gateway_proxy);
5336 slot_id = get_sim_slot_id_by_cp_name((char*)tcore_server_get_cp_name_by_plugin(plg));
5337 dbg("slot_id: [%d]", slot_id);
5339 sat_ui_support_launch_browser_application(q_data.cmd_data.launch_browser.command_detail.cmd_type, launch_browser, slot_id);
5345 case USER_CONFIRM_NO_OR_CANCEL:
5346 tr->terminal_rsp_data.launch_browser.result_type = RESULT_BACKWARD_MOVE_BY_USER;
5348 case USER_CONFIRM_END:
5349 tr->terminal_rsp_data.launch_browser.result_type = RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER;
5353 tr->terminal_rsp_data.launch_browser.result_type = RESULT_NO_RESPONSE_FROM_USER;
5358 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
5359 if(rv != TCORE_RETURN_SUCCESS){
5360 dbg("fail to send terminal response");
5367 #if !defined(TIZEN_PLATFORM_USE_QCOM_QMI)
5368 static gboolean _sat_manager_handle_open_channel_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data)
5370 TReturn rv = TCORE_RETURN_FAILURE;
5371 gboolean result = FALSE;
5373 struct treq_sat_terminal_rsp_data *tr;
5374 struct sat_manager_queue_data q_data;
5376 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
5378 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
5379 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
5384 dbg("there is no valid plugin at this point");
5388 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
5392 tr->cmd_number = q_data.cmd_data.open_channel.command_detail.cmd_num;
5393 tr->cmd_type = q_data.cmd_data.open_channel.command_detail.cmd_type;
5394 memcpy((void*)&tr->terminal_rsp_data.open_channel.command_detail, &q_data.cmd_data.open_channel.command_detail, sizeof(struct tel_sat_cmd_detail_info));
5395 tr->terminal_rsp_data.open_channel.device_id.src = q_data.cmd_data.send_dtmf.device_id.dest;
5396 tr->terminal_rsp_data.open_channel.device_id.dest = q_data.cmd_data.send_dtmf.device_id.src;
5398 dbg("confirm_type[%d]", confirm_type);
5400 switch(confirm_type){
5401 case USER_CONFIRM_YES:{
5403 TelephonyObjectSkeleton *object;
5405 const gchar *cp_name;
5407 GVariant *open_channel = NULL;
5409 gint command_id, bearer_type, protocol_type, dest_addr_type;
5410 gboolean immediate_link, auto_reconnection, bg_mode;
5411 gint text_len, buffer_size, port_number;
5412 gchar *text = NULL, *dest_address = NULL;
5413 #if defined(TIZEN_SUPPORT_SAT_ICON)
5416 GVariant *bearer_param;
5417 GVariant *bearer_detail;
5419 //emit send_dtmf signal
5420 cp_name = tcore_server_get_cp_name_by_plugin(plg);
5421 if (cp_name == NULL) {
5422 err("CP name is NULL");
5426 dbg("CP Name: [%s]", cp_name);
5427 path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
5429 /* Look-up Hash table for Object */
5430 object = g_hash_table_lookup(ctx->objects, path);
5431 dbg("Path: [%s] Interface object: [%p]", path, object);
5433 if (object == NULL) {
5434 err("Object is NOT defined!!!");
5438 open_channel = sat_manager_open_channel_noti(ctx, cp_name, &q_data.cmd_data.open_channel);
5440 dbg("open channel type_format(%s)", g_variant_get_type_string(open_channel));
5441 #if defined(TIZEN_SUPPORT_SAT_ICON)
5442 g_variant_get(open_channel,"(isi@vbbbi@viiiis@v)", &command_id, &text, &text_len, &icon_id, &immediate_link, &auto_reconnection, &bg_mode,
5443 &bearer_type, &bearer_param, &buffer_size, &protocol_type, &port_number, &dest_addr_type, &dest_address, &bearer_detail);
5445 g_variant_get(open_channel,"(isibbbi@viiiis@v)", &command_id, &text, &text_len, &immediate_link, &auto_reconnection, &bg_mode,
5446 &bearer_type, &bearer_param, &buffer_size, &protocol_type, &port_number, &dest_addr_type, &dest_address, &bearer_detail);
5448 /*telephony_sat_emit_open_channel(sat, command_id, text, text_len, immediate_link, auto_reconnection, bg_mode,
5449 bearer_type, bearer_param, buffer_size, protocol_type, port_number, dest_addr_type, dest_address, bearer_detail);*/
5452 g_free(dest_address);
5455 GDBusConnection *conn = NULL;
5456 const gchar *g_path = NULL;
5458 conn = g_dbus_object_manager_server_get_connection(ctx->manager);
5459 g_path = g_dbus_object_get_object_path(G_DBUS_OBJECT(object));
5461 sat_ui_support_exec_bip(conn, g_path, SAT_PROATV_CMD_OPEN_CHANNEL, open_channel);
5469 case USER_CONFIRM_NO_OR_CANCEL:
5470 case USER_CONFIRM_END:
5471 tr->terminal_rsp_data.open_channel.result_type = RESULT_USER_DID_NOT_ACCEPT_CALL_SETUP_REQ;
5474 tr->terminal_rsp_data.open_channel.result_type = RESULT_NO_RESPONSE_FROM_USER;
5478 memcpy((void*)&tr->terminal_rsp_data.open_channel.bearer_desc, &q_data.cmd_data.open_channel.bearer_desc, sizeof(struct tel_sat_bearer_description));
5479 memcpy((void*)&tr->terminal_rsp_data.open_channel.buffer_size, &q_data.cmd_data.open_channel.buffer_size, sizeof(struct tel_sat_buffer_size));
5482 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
5483 if(rv != TCORE_RETURN_SUCCESS){
5484 dbg("fail to send terminal response");
5492 static gboolean _sat_manager_handle_open_channel_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data)
5494 TReturn rv = TCORE_RETURN_FAILURE;
5495 gboolean result = FALSE;
5497 struct treq_sat_user_confirmation_data *conf_data;
5498 struct sat_manager_queue_data q_data;
5500 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
5502 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
5503 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
5508 dbg("there is no valid plugin at this point");
5512 conf_data = (struct treq_sat_user_confirmation_data *)calloc(1, sizeof(struct treq_sat_user_confirmation_data));
5516 dbg("confirm_type[%d]", confirm_type);
5518 switch(confirm_type){
5519 case USER_CONFIRM_YES:
5520 case USER_CONFIRM_NO_OR_CANCEL:
5521 case USER_CONFIRM_END:
5522 conf_data->user_conf = confirm_type;
5525 dbg("Not handled confirm type!");
5529 rv = sat_manager_send_user_confirmation(ctx->comm, plg, conf_data);
5530 if(rv != TCORE_RETURN_SUCCESS){
5531 dbg("fail to send user confirmation message");
5538 gboolean sat_manager_handle_user_confirm(struct custom_data *ctx, TcorePlugin *plg, GVariant *user_confirm_data)
5540 gboolean rv = FALSE;
5541 gboolean result = FALSE;
5542 struct sat_manager_queue_data q_data;
5544 gint command_id, command_type, confirm_type;
5545 GVariant *additional_data = NULL;
5547 dbg("user_confirm_data type_format(%s)", g_variant_get_type_string(user_confirm_data));
5548 g_variant_get(user_confirm_data, "(iiv)", &command_id, &confirm_type, &additional_data);
5550 dbg("[SAT] user confirm data command id(%d), confirm_type(%d)", command_id, confirm_type);
5552 rv = sat_manager_queue_peek_data_by_id(ctx, &q_data, command_id);
5554 dbg("[SAT] no commands in queue");
5558 command_type = (gint)q_data.cmd_type;
5559 dbg("[SAT] command type(%d)", command_type);
5561 switch(command_type){
5562 case SAT_PROATV_CMD_SELECT_ITEM:
5563 result = _sat_manager_handle_menu_select_confirm(ctx, plg, command_id, confirm_type, additional_data);
5565 case SAT_PROATV_CMD_DISPLAY_TEXT:
5566 result = _sat_manager_handle_display_text_confirm(ctx, plg, command_id, confirm_type, additional_data);
5568 case SAT_PROATV_CMD_GET_INKEY:
5569 result = _sat_manager_handle_get_inkey_confirm(ctx, plg, command_id, confirm_type, additional_data);
5571 case SAT_PROATV_CMD_GET_INPUT:
5572 result = _sat_manager_handle_get_input_confirm(ctx, plg, command_id, confirm_type, additional_data);
5574 case SAT_PROATV_CMD_SETUP_CALL:
5575 result = _sat_manager_handle_setup_call_confirm(ctx, plg, command_id, confirm_type, additional_data);
5577 case SAT_PROATV_CMD_SEND_DTMF:
5578 result = _sat_manager_handle_send_dtmf_confirm(ctx, plg, command_id, confirm_type, additional_data);
5580 case SAT_PROATV_CMD_LAUNCH_BROWSER:
5581 result = _sat_manager_handle_launch_browser_confirm(ctx, plg, command_id, confirm_type, additional_data);
5583 case SAT_PROATV_CMD_OPEN_CHANNEL:
5584 result = _sat_manager_handle_open_channel_confirm(ctx, plg, command_id, confirm_type, additional_data);
5587 dbg("[SAT] cannot handle user confirm command(0x%x)", command_type);
5594 static gboolean _sat_manager_handle_play_tone_ui_display_status(struct custom_data *ctx, TcorePlugin *plg,struct sat_manager_queue_data *q_data, gboolean display_status)
5598 TelephonyObjectSkeleton *object;
5600 const gchar *cp_name;
5601 GVariant *play_tone = NULL;
5604 gint command_id, tone_type, duration;
5607 #if defined(TIZEN_SUPPORT_SAT_ICON)
5610 if(!display_status){
5611 struct treq_sat_terminal_rsp_data *tr = NULL;
5612 dbg("[SAT] fail to show ui display for play tone");
5614 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
5618 tr->cmd_number = q_data->cmd_data.play_tone.command_detail.cmd_num;
5619 tr->cmd_type = q_data->cmd_data.play_tone.command_detail.cmd_type;
5620 memcpy((void*)&tr->terminal_rsp_data.play_tone.command_detail, &q_data->cmd_data.play_tone.command_detail, sizeof(struct tel_sat_cmd_detail_info));
5622 tr->terminal_rsp_data.play_tone.device_id.src = DEVICE_ID_ME;
5623 tr->terminal_rsp_data.play_tone.device_id.dest = q_data->cmd_data.play_tone.device_id.src;
5624 tr->terminal_rsp_data.play_tone.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
5626 sat_manager_send_terminal_response(ctx->comm, plg, tr);
5632 //emit play tone signal
5633 cp_name = tcore_server_get_cp_name_by_plugin(plg);
5634 if (cp_name == NULL) {
5635 err("CP name is NULL");
5639 dbg("CP Name: [%s]", cp_name);
5640 path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
5642 /* Look-up Hash table for Object */
5643 object = g_hash_table_lookup(ctx->objects, path);
5644 dbg("Path: [%s] Interface object: [%p]", path, object);
5646 if (object == NULL) {
5647 err("Object is NOT defined!!!");
5650 sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
5652 play_tone = sat_manager_play_tone_noti(ctx, cp_name, &q_data->cmd_data.play_tone);
5654 dbg("play tone type_format(%s)", g_variant_get_type_string(play_tone));
5655 #if defined(TIZEN_SUPPORT_SAT_ICON)
5656 g_variant_get(play_tone, "(isi@vii)", &command_id, &text, &text_len, &icon_id, &tone_type, &duration);
5658 telephony_sat_emit_play_tone(sat, command_id, text, text_len, icon_id, tone_type, duration);
5660 g_variant_get(play_tone, "(isiii)", &command_id, &text, &text_len, &tone_type, &duration);
5662 telephony_sat_emit_play_tone(sat, command_id, text, text_len, tone_type, duration);
5669 static gboolean _sat_manager_handle_setup_idle_mode_text_ui_display_status(struct custom_data *ctx, TcorePlugin *plg,struct sat_manager_queue_data *q_data, gboolean display_status)
5671 TReturn rv = TCORE_RETURN_FAILURE;
5672 gboolean result = FALSE;
5674 struct treq_sat_terminal_rsp_data *tr;
5677 dbg("there is no valid plugin at this point");
5681 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
5685 tr->cmd_number = q_data->cmd_data.idle_mode.command_detail.cmd_num;
5686 tr->cmd_type = q_data->cmd_data.idle_mode.command_detail.cmd_type;
5687 memcpy((void*)&tr->terminal_rsp_data.setup_idle_mode_text.command_detail, &q_data->cmd_data.idle_mode.command_detail, sizeof(struct tel_sat_cmd_detail_info));
5688 tr->terminal_rsp_data.setup_idle_mode_text.device_id.src = q_data->cmd_data.idle_mode.device_id.dest;
5689 tr->terminal_rsp_data.setup_idle_mode_text.device_id.dest = q_data->cmd_data.idle_mode.device_id.src;
5691 tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS;
5692 if (q_data->cmd_data.idle_mode.icon_id.is_exist)
5693 tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
5695 //fail to display text
5696 if(!display_status){
5697 dbg("[SAT] fail to show ui display for setup_idle_mode_text");
5698 tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
5702 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
5703 if(rv != TCORE_RETURN_SUCCESS){
5704 dbg("fail to send terminal response");
5712 static gboolean _sat_manager_handle_refresh_ui_display_status(struct custom_data *ctx, TcorePlugin *plg,struct sat_manager_queue_data *q_data, gboolean display_status)
5714 struct treq_sat_terminal_rsp_data tr;
5716 memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
5718 tr.cmd_number = q_data->cmd_data.refresh.command_detail.cmd_num;
5719 tr.cmd_type = q_data->cmd_data.refresh.command_detail.cmd_type;
5720 memcpy((void*)&tr.terminal_rsp_data.refresh.command_detail, &q_data->cmd_data.refresh.command_detail, sizeof(struct tel_sat_cmd_detail_info));
5721 tr.terminal_rsp_data.refresh.device_id.src = q_data->cmd_data.refresh.device_id.dest;
5722 tr.terminal_rsp_data.refresh.device_id.dest = q_data->cmd_data.refresh.device_id.src;
5724 if(!display_status){
5725 dbg("fail to show ui for refresh");
5726 tr.terminal_rsp_data.refresh.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
5729 dbg("success to show ui for refresh");
5730 tr.terminal_rsp_data.refresh.result_type = RESULT_SUCCESS;
5731 tr.terminal_rsp_data.refresh.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
5734 dbg("send refresh tr");
5735 sat_manager_send_terminal_response(ctx->comm, plg, &tr);
5740 #if !defined(TIZEN_PLATFORM_USE_QCOM_QMI)
5741 static gboolean _sat_manager_handle_send_sms_ui_display_status(struct custom_data *ctx, TcorePlugin *plg,struct sat_manager_queue_data *q_data, gboolean display_status)
5745 TelephonyObjectSkeleton *object;
5747 const char *cp_name;
5748 GVariant *send_sms = NULL;
5750 gint command_id, ton, npi, tpdu_type;
5751 gboolean b_packing_required;
5752 gint text_len, number_len, tpdu_data_len;
5753 gchar* text, *dialling_number;
5754 GVariant *tpdu_data;
5755 #if defined(TIZEN_SUPPORT_SAT_ICON)
5759 if(!display_status){
5760 struct treq_sat_terminal_rsp_data *tr = NULL;
5761 dbg("[SAT] fail to show ui display for send sms");
5763 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
5767 tr->cmd_number = q_data->cmd_data.sendSMSInd.command_detail.cmd_num;
5768 tr->cmd_type = q_data->cmd_data.sendSMSInd.command_detail.cmd_type;
5769 memcpy((void*)&tr->terminal_rsp_data.send_sms.command_detail, &q_data->cmd_data.sendSMSInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
5771 tr->terminal_rsp_data.send_sms.device_id.src = DEVICE_ID_ME;
5772 tr->terminal_rsp_data.send_sms.device_id.dest = q_data->cmd_data.sendSMSInd.device_id.src;
5773 tr->terminal_rsp_data.send_sms.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
5775 sat_manager_send_terminal_response(ctx->comm, plg, tr);
5781 //emit send sms signal
5782 cp_name = tcore_server_get_cp_name_by_plugin(plg);
5783 if (cp_name == NULL) {
5784 err("CP name is NULL");
5788 dbg("CP Name: [%s]", cp_name);
5789 path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
5791 /* Look-up Hash table for Object */
5792 object = g_hash_table_lookup(ctx->objects, path);
5793 dbg("Path: [%s] Interface object: [%p]", path, object);
5795 if (object == NULL) {
5796 err("Object is NOT defined!!!");
5799 sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
5801 send_sms = sat_manager_send_sms_noti(ctx, cp_name, &q_data->cmd_data.sendSMSInd);
5803 dbg("send sms type_format(%s)", g_variant_get_type_string(send_sms));
5804 #if defined(TIZEN_SUPPORT_SAT_ICON)
5805 g_variant_get(send_sms, "(isi@vbiisii@vi)", &command_id, &text, &text_len, &icon_id, &b_packing_required, &ton, &npi,
5806 &dialling_number, &number_len, &tpdu_type, &tpdu_data, &tpdu_data_len);
5808 g_variant_get(send_sms, "(isibiisii@vi)", &command_id, &text, &text_len, &b_packing_required, &ton, &npi,
5809 &dialling_number, &number_len, &tpdu_type, &tpdu_data, &tpdu_data_len);
5811 telephony_sat_emit_send_sms(sat, command_id, text, text_len, b_packing_required,
5812 ton, npi, dialling_number, number_len, tpdu_type, tpdu_data, tpdu_data_len);
5815 g_free(dialling_number);
5819 static gboolean _sat_manager_handle_send_ss_ui_display_status(struct custom_data *ctx, TcorePlugin *plg,struct sat_manager_queue_data *q_data, gboolean display_status)
5823 TelephonyObjectSkeleton *object;
5825 const gchar *cp_name;
5826 GVariant *send_ss = NULL;
5828 gint command_id, ton, npi;
5829 gint text_len, ss_str_len;
5830 gchar* text = NULL, *ss_string = NULL;
5831 #if defined(TIZEN_SUPPORT_SAT_ICON)
5834 enum dbus_tapi_sim_slot_id slot_id;
5836 if(!display_status){
5837 struct treq_sat_terminal_rsp_data *tr = NULL;
5838 dbg("[SAT] fail to show ui display for send ss");
5840 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
5844 tr->cmd_number = q_data->cmd_data.send_ss.command_detail.cmd_num;
5845 tr->cmd_type = q_data->cmd_data.send_ss.command_detail.cmd_type;
5846 memcpy((void*)&tr->terminal_rsp_data.send_ss.command_detail, &q_data->cmd_data.send_ss.command_detail, sizeof(struct tel_sat_cmd_detail_info));
5848 tr->terminal_rsp_data.send_ss.device_id.src = DEVICE_ID_ME;
5849 tr->terminal_rsp_data.send_ss.device_id.dest = q_data->cmd_data.send_ss.device_id.src;
5850 tr->terminal_rsp_data.send_ss.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
5852 sat_manager_send_terminal_response(ctx->comm, plg, tr);
5858 //emit send ss signal
5859 cp_name = tcore_server_get_cp_name_by_plugin(plg);
5860 if (cp_name == NULL) {
5861 err("CP name is NULL");
5865 dbg("CP Name: [%s]", cp_name);
5866 path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
5868 /* Look-up Hash table for Object */
5869 object = g_hash_table_lookup(ctx->objects, path);
5870 dbg("Path: [%s] Interface object: [%p]", path, object);
5872 if (object == NULL) {
5873 err("Object is NOT defined!!!");
5876 sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
5878 send_ss = sat_manager_send_ss_noti(ctx, cp_name, &q_data->cmd_data.send_ss);
5880 dbg("send ss type_format(%s)", g_variant_get_type_string(send_ss));
5881 #if defined(TIZEN_SUPPORT_SAT_ICON)
5882 g_variant_get(send_ss, "(isi@viiis)", &command_id, &text, &text_len, &icon_id,
5883 &ton, &npi, &ss_str_len, &ss_string);
5885 g_variant_get(send_ss, "(isiiiis)", &command_id, &text, &text_len,
5886 &ton, &npi, &ss_str_len, &ss_string);
5888 telephony_sat_emit_send_ss(sat, command_id, text, text_len, ton, npi, ss_string);
5892 slot_id = get_sim_slot_id_by_cp_name((char *)tcore_server_get_cp_name_by_plugin(plg));
5893 dbg("slot_id: [%d]", slot_id);
5894 sat_ui_support_launch_ciss_application(SAT_PROATV_CMD_SEND_SS, send_ss, slot_id);
5899 static gboolean _sat_manager_handle_send_ussd_ui_display_status(struct custom_data *ctx, TcorePlugin *plg,struct sat_manager_queue_data *q_data, gboolean display_status)
5903 TelephonyObjectSkeleton *object;
5905 const gchar *cp_name;
5906 GVariant *send_ussd = NULL;
5910 gint text_len, ussd_str_len;
5911 gchar* text = NULL, *ussd_string = NULL;
5912 #if defined(TIZEN_SUPPORT_SAT_ICON)
5915 enum dbus_tapi_sim_slot_id slot_id;
5917 if(!display_status){
5918 struct treq_sat_terminal_rsp_data *tr = NULL;
5919 dbg("[SAT] fail to show ui display for send ussd");
5921 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
5925 tr->cmd_number = q_data->cmd_data.send_ussd.command_detail.cmd_num;
5926 tr->cmd_type = q_data->cmd_data.send_ussd.command_detail.cmd_type;
5927 memcpy((void*)&tr->terminal_rsp_data.send_ussd.command_detail, &q_data->cmd_data.send_ussd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
5929 tr->terminal_rsp_data.send_ussd.device_id.src = DEVICE_ID_ME;
5930 tr->terminal_rsp_data.send_ussd.device_id.dest = q_data->cmd_data.send_ussd.device_id.src;
5931 tr->terminal_rsp_data.send_ussd.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
5933 sat_manager_send_terminal_response(ctx->comm, plg, tr);
5939 //emit send ussd signal
5940 cp_name = tcore_server_get_cp_name_by_plugin(plg);
5941 if (cp_name == NULL) {
5942 err("CP name is NULL");
5946 dbg("CP Name: [%s]", cp_name);
5947 path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
5949 /* Look-up Hash table for Object */
5950 object = g_hash_table_lookup(ctx->objects, path);
5951 dbg("Path: [%s] Interface object: [%p]", path, object);
5953 if (object == NULL) {
5954 err("Object is NOT defined!!!");
5957 sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
5959 send_ussd = sat_manager_send_ussd_noti(ctx, cp_name, &q_data->cmd_data.send_ussd);
5961 dbg("send ussd type_format(%s)", g_variant_get_type_string(send_ussd));
5962 #if defined(TIZEN_SUPPORT_SAT_ICON)
5963 g_variant_get(send_ussd, "(isi@vyis)", &command_id, &text, &text_len, &icon_id, &dcs, &ussd_str_len, &ussd_string);
5965 g_variant_get(send_ussd, "(isiyis)", &command_id, &text, &text_len, &dcs, &ussd_str_len, &ussd_string);
5967 telephony_sat_emit_setup_ussd(sat, command_id, text, text_len, dcs, ussd_string);
5969 g_free(ussd_string);
5971 slot_id = get_sim_slot_id_by_cp_name((char *)tcore_server_get_cp_name_by_plugin(plg));
5972 dbg("slot_id: [%d]", slot_id);
5973 sat_ui_support_launch_ciss_application(SAT_PROATV_CMD_SEND_USSD, send_ussd,slot_id);
5978 static gboolean _sat_manager_handle_send_dtmf_ui_display_status(struct custom_data *ctx, TcorePlugin *plg,struct sat_manager_queue_data *q_data, gboolean display_status)
5982 TelephonyObjectSkeleton *object;
5984 const gchar *cp_name;
5986 GVariant *send_dtmf = NULL;
5987 gint command_id = 0;
5988 gint text_len = 0, dtmf_str_len = 0;
5990 gchar *dtmf_str = NULL;
5991 #if defined(TIZEN_SUPPORT_SAT_ICON)
5992 GVariant *icon_id = NULL;
5994 if(!display_status){
5995 struct treq_sat_terminal_rsp_data *tr = NULL;
5996 dbg("[SAT] fail to show ui display for send_dtmf");
5998 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
6002 tr->cmd_number = q_data->cmd_data.send_dtmf.command_detail.cmd_num;
6003 tr->cmd_type = q_data->cmd_data.send_dtmf.command_detail.cmd_type;
6004 memcpy((void*)&tr->terminal_rsp_data.send_dtmf.command_detail, &q_data->cmd_data.send_dtmf.command_detail, sizeof(struct tel_sat_cmd_detail_info));
6006 tr->terminal_rsp_data.send_dtmf.device_id.src = DEVICE_ID_ME;
6007 tr->terminal_rsp_data.send_dtmf.device_id.dest = q_data->cmd_data.send_dtmf.device_id.src;
6008 tr->terminal_rsp_data.send_dtmf.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
6010 sat_manager_send_terminal_response(ctx->comm, plg, tr);
6016 //emit send_dtmf signal
6017 cp_name = tcore_server_get_cp_name_by_plugin(plg);
6018 if (cp_name == NULL) {
6019 err("CP name is NULL");
6023 dbg("CP Name: [%s]", cp_name);
6024 path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
6026 /* Look-up Hash table for Object */
6027 object = g_hash_table_lookup(ctx->objects, path);
6028 dbg("Path: [%s] Interface object: [%p]", path, object);
6030 if (object == NULL) {
6031 err("Object is NOT defined!!!");
6034 sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
6036 send_dtmf = sat_manager_send_dtmf_noti(ctx, cp_name, &q_data->cmd_data.send_dtmf);
6038 dbg("send_dtmf type_format(%s)", g_variant_get_type_string(send_dtmf));
6039 #if defined(TIZEN_SUPPORT_SAT_ICON)
6040 g_variant_get(send_dtmf, "(isi@vis)", &command_id, &text, &text_len, &icon_id, &dtmf_str_len, &dtmf_str);
6042 g_variant_get(send_dtmf, "(isiis)", &command_id, &text, &text_len, &dtmf_str_len, &dtmf_str);
6044 telephony_sat_emit_send_dtmf(sat, command_id, text, text_len, dtmf_str, dtmf_str_len);
6051 static gboolean _sat_manager_handle_open_channel_ui_display_status(struct custom_data *ctx, TcorePlugin *plg,struct sat_manager_queue_data *q_data, gboolean display_status)
6054 TelephonyObjectSkeleton *object;
6056 const gchar *cp_name;
6058 GVariant *open_channel = NULL;
6060 gint command_id, bearer_type, protocol_type, dest_addr_type;
6061 gboolean immediate_link, auto_reconnection, bg_mode;
6062 gint text_len, buffer_size, port_number;
6063 gchar *text, *dest_address;
6064 GVariant *bearer_param;
6065 GVariant *bearer_detail;
6066 #if defined(TIZEN_SUPPORT_SAT_ICON)
6070 if(!display_status){
6071 struct treq_sat_terminal_rsp_data *tr = NULL;
6072 dbg("[SAT] fail to show ui display for open channel");
6074 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
6078 tr->cmd_number = q_data->cmd_data.open_channel.command_detail.cmd_num;
6079 tr->cmd_type = q_data->cmd_data.open_channel.command_detail.cmd_type;
6080 memcpy((void*)&tr->terminal_rsp_data.open_channel.command_detail, &q_data->cmd_data.open_channel.command_detail, sizeof(struct tel_sat_cmd_detail_info));
6082 tr->terminal_rsp_data.open_channel.device_id.src = q_data->cmd_data.send_dtmf.device_id.dest;
6083 tr->terminal_rsp_data.open_channel.device_id.dest = q_data->cmd_data.send_dtmf.device_id.src;
6084 tr->terminal_rsp_data.open_channel.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
6086 sat_manager_send_terminal_response(ctx->comm, plg, tr);
6092 //emit send_dtmf signal
6093 cp_name = tcore_server_get_cp_name_by_plugin(plg);
6094 if (cp_name == NULL) {
6095 err("CP name is NULL");
6099 dbg("CP Name: [%s]", cp_name);
6100 path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
6102 /* Look-up Hash table for Object */
6103 object = g_hash_table_lookup(ctx->objects, path);
6104 dbg("Path: [%s] Interface object: [%p]", path, object);
6106 if (object == NULL) {
6107 err("Object is NOT defined!!!");
6111 open_channel = sat_manager_open_channel_noti(ctx, cp_name, &q_data->cmd_data.open_channel);
6113 dbg("open channel type_format(%s)", g_variant_get_type_string(open_channel));
6114 #if defined(TIZEN_SUPPORT_SAT_ICON)
6115 g_variant_get(open_channel,"(isi@vbbbi@viiiis@v)", &command_id, &text, &text_len, &icon_id, &immediate_link, &auto_reconnection, &bg_mode,
6116 &bearer_type, &bearer_param, &buffer_size, &protocol_type, &port_number, &dest_addr_type, &dest_address, &bearer_detail);
6118 g_variant_get(open_channel,"(isibbbi@viiiis@v)", &command_id, &text, &text_len, &immediate_link, &auto_reconnection, &bg_mode,
6119 &bearer_type, &bearer_param, &buffer_size, &protocol_type, &port_number, &dest_addr_type, &dest_address, &bearer_detail);
6121 /*telephony_sat_emit_open_channel(sat, command_id, text, text_len, immediate_link, auto_reconnection, bg_mode,
6122 bearer_type, bearer_param, buffer_size, protocol_type, port_number, dest_addr_type, dest_address, bearer_detail);*/
6124 g_free(dest_address);
6128 GDBusConnection *conn = NULL;
6129 const gchar *g_path = NULL;
6131 conn = g_dbus_object_manager_server_get_connection(ctx->manager);
6132 g_path = g_dbus_object_get_object_path(G_DBUS_OBJECT(object));
6134 sat_ui_support_exec_bip(conn, g_path, SAT_PROATV_CMD_OPEN_CHANNEL, open_channel);
6140 gboolean sat_manager_handle_ui_display_status(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gboolean display_status)
6142 gboolean result = FALSE;
6143 struct sat_manager_queue_data q_data;
6145 dbg("[SAT] ui display status : command id(%d) display status(%d)", command_id, display_status);
6146 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
6148 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
6149 dbg("[SAT] command peek data from queue is failed. didn't find in command Q!!");
6154 dbg("there is no valid plugin at this point");
6158 switch(q_data.cmd_type){
6159 case SAT_PROATV_CMD_PLAY_TONE:
6160 result = _sat_manager_handle_play_tone_ui_display_status(ctx, plg, &q_data, display_status);
6162 case SAT_PROATV_CMD_SEND_SMS:
6163 result = _sat_manager_handle_send_sms_ui_display_status(ctx, plg, &q_data, display_status);
6165 case SAT_PROATV_CMD_SEND_SS:
6166 result = _sat_manager_handle_send_ss_ui_display_status(ctx, plg, &q_data, display_status);
6168 case SAT_PROATV_CMD_SEND_USSD:
6169 result = _sat_manager_handle_send_ussd_ui_display_status(ctx, plg, &q_data, display_status);
6171 case SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT:
6172 result = _sat_manager_handle_setup_idle_mode_text_ui_display_status(ctx, plg, &q_data, display_status);
6174 case SAT_PROATV_CMD_REFRESH:
6175 result = _sat_manager_handle_refresh_ui_display_status(ctx, plg, &q_data, display_status);
6177 case SAT_PROATV_CMD_SEND_DTMF:
6178 result = _sat_manager_handle_send_dtmf_ui_display_status(ctx, plg, &q_data, display_status);
6180 case SAT_PROATV_CMD_OPEN_CHANNEL:
6181 result = _sat_manager_handle_open_channel_ui_display_status(ctx, plg, &q_data, display_status);
6184 dbg("[SAT] cannot handle ui display status command(0x%x)", q_data.cmd_type);
6191 static gboolean _sat_manager_handle_open_channel_ui_display_status(struct custom_data *ctx, TcorePlugin *plg,struct sat_manager_queue_data *q_data, gboolean display_status)
6193 TReturn rv = TCORE_RETURN_FAILURE;
6194 gboolean result = FALSE;
6195 struct treq_sat_user_confirmation_data *conf_data;
6198 dbg("there is no valid plugin at this point");
6202 conf_data = (struct treq_sat_user_confirmation_data *)calloc(1, sizeof(struct treq_sat_user_confirmation_data));
6206 dbg("display_status[%d]", display_status);
6209 conf_data->user_conf = USER_CONFIRM_YES;
6211 conf_data->user_conf = USER_CONFIRM_NO_OR_CANCEL;
6214 rv = sat_manager_send_user_confirmation(ctx->comm, plg, conf_data);
6215 if(rv != TCORE_RETURN_SUCCESS){
6216 dbg("fail to send user confirmation message");
6223 gboolean sat_manager_handle_ui_display_status(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gboolean display_status)
6225 gboolean result = FALSE;
6226 struct sat_manager_queue_data q_data;
6228 dbg("[SAT] ui display status : command id(%d) display status(%d)", command_id, display_status);
6229 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
6231 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
6232 dbg("[SAT] command peek data from queue is failed. didn't find in command Q!!");
6237 dbg("there is no valid plugin at this point");
6241 switch(q_data.cmd_type){
6242 case SAT_PROATV_CMD_PLAY_TONE:
6243 result = _sat_manager_handle_play_tone_ui_display_status(ctx, plg, &q_data, display_status);
6245 case SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT:
6246 result = _sat_manager_handle_setup_idle_mode_text_ui_display_status(ctx, plg, &q_data, display_status);
6248 case SAT_PROATV_CMD_REFRESH:
6249 result = _sat_manager_handle_refresh_ui_display_status(ctx, plg, &q_data, display_status);
6251 case SAT_PROATV_CMD_OPEN_CHANNEL:
6252 result = _sat_manager_handle_open_channel_ui_display_status(ctx, plg, &q_data, display_status);
6254 case SAT_PROATV_CMD_SEND_SMS:
6255 case SAT_PROATV_CMD_SEND_SS:
6256 case SAT_PROATV_CMD_SEND_USSD:
6257 case SAT_PROATV_CMD_SEND_DTMF:
6258 dbg("[SAT] command(0x%x) will be handled by CP", q_data.cmd_type);
6260 if(q_data.noti_required) {
6262 TelephonyObjectSkeleton *object;
6263 const gchar *cp_name;
6266 dbg("Noti flag is set, send session end evt.");
6269 cp_name = tcore_server_get_cp_name_by_plugin(plg);
6270 if (cp_name == NULL) {
6271 err("CP name is NULL");
6275 dbg("CP Name: [%s]", cp_name);
6276 path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
6278 /* Look-up Hash table for Object */
6279 object = g_hash_table_lookup(ctx->objects, path);
6280 dbg("Path: [%s] Interface object: [%p]", path, object);
6282 if (object == NULL) {
6283 err("Object is NOT defined!!!");
6287 sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
6288 telephony_sat_emit_end_proactive_session(sat, SAT_PROATV_CMD_TYPE_END_PROACTIVE_SESSION);
6292 dbg("[SAT] cannot handle ui display status command(0x%x)", q_data.cmd_type);
6299 gboolean sat_manager_handle_event_download_envelop(int event_type, int src_dev, int dest_dev, struct tel_sat_envelop_event_download_tlv *evt_download, GVariant *download_data)
6301 gboolean rv = FALSE;
6302 GVariant *data = NULL;
6304 dbg("download data type_format(%s)", g_variant_get_type_string(download_data));
6305 g_variant_get(download_data, "v", &data);
6308 if(g_evt_list[event_type] == TRUE){
6309 dbg("event (%d) shoud be passed to sim", event_type);
6314 dbg("(%d) event does not requested by sim", event_type);
6320 case EVENT_USER_ACTIVITY:
6321 dbg("data type_format(%s)", g_variant_get_type_string(data));
6322 evt_download->device_identitie.src = src_dev;
6323 evt_download->device_identitie.dest = dest_dev;
6325 case EVENT_IDLE_SCREEN_AVAILABLE:
6326 dbg("data type_format(%s)", g_variant_get_type_string(data));
6327 g_variant_get(data, "(b)", &evt_download->idle_screen);
6328 evt_download->device_identitie.src = DEVICE_ID_DISPLAY;
6329 evt_download->device_identitie.dest = dest_dev;
6330 dbg("idle screen available (%d)", evt_download->idle_screen);
6332 case EVENT_LANGUAGE_SELECTION:
6333 dbg("data type_format(%s)", g_variant_get_type_string(data));
6334 g_variant_get(data, "(i)", &evt_download->language);
6335 evt_download->device_identitie.src = src_dev;
6336 evt_download->device_identitie.dest = dest_dev;
6337 dbg("selected language (%d)", evt_download->language);
6339 case EVENT_BROWSER_TERMINATION:{
6340 dbg("data type_format(%s)", g_variant_get_type_string(data));
6341 g_variant_get(data, "(i)", &evt_download->browser_termination);
6342 evt_download->device_identitie.src = src_dev;
6343 evt_download->device_identitie.dest = dest_dev;
6344 dbg("browser termination cause(%d)", evt_download->browser_termination);
6346 case EVENT_DATA_AVAILABLE:{
6347 gint channel_id, channel_status, channel_info, channel_data_len;
6349 dbg("data type_format(%s)", g_variant_get_type_string(data));
6350 g_variant_get(data, "(iiii)", &channel_id, &channel_status, &channel_info, &channel_data_len);
6351 evt_download->device_identitie.src = src_dev;
6352 evt_download->device_identitie.dest = dest_dev;
6353 evt_download->channel_status.channel_id = channel_id;
6354 evt_download->channel_status.status = channel_status;
6355 evt_download->channel_status.status_info = channel_info;
6356 evt_download->channel_data_len.data_len = channel_data_len;
6357 dbg("data available channel id (%d)", evt_download->channel_status.channel_id);
6359 case EVENT_CHANNEL_STATUS:{
6360 gint channel_id, channel_status, channel_info;
6362 dbg("data type_format(%s)", g_variant_get_type_string(data));
6363 g_variant_get(data, "(iii)", &channel_id, &channel_status, &channel_info);
6364 evt_download->device_identitie.src = src_dev;
6365 evt_download->device_identitie.dest = dest_dev;
6366 evt_download->channel_status.channel_id = channel_id;
6367 evt_download->channel_status.status = channel_status;
6368 evt_download->channel_status.status_info = channel_info;
6372 dbg("not support download event (%d)", event_type);
6379 gboolean sat_manager_update_language(struct custom_data *ctx, const char *cp_name, GVariant *language_noti)
6382 TcorePlugin *plg = NULL;
6383 static Storage *strg;
6385 TReturn rv = TCORE_RETURN_FAILURE;
6386 gboolean result = FALSE;
6387 const gchar *lang_str = NULL;
6388 gint command_id, language;
6389 gboolean b_specified;
6391 struct treq_sat_terminal_rsp_data *tr;
6392 struct sat_manager_queue_data q_data;
6395 strg = tcore_server_find_storage(s, "vconf");
6397 plg = tcore_server_find_plugin(ctx->server, cp_name);
6399 dbg("there is no valid plugin at this point");
6403 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
6405 dbg("language_noti type_format(%s)", g_variant_get_type_string(language_noti));
6406 g_variant_get(language_noti, "(iib)", &command_id, &language, &b_specified);
6408 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
6409 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
6413 if(q_data.cmd_type != SAT_PROATV_CMD_LANGUAGE_NOTIFICATION){
6414 dbg("[SAT] Language Noti dequeue failed. didn't find in command Q!!");
6419 lang_str = _convert_sim_lang_to_string((enum tel_sim_language_type)language);
6421 dbg("language is not exist");
6423 dbg("converted lang (%s)", lang_str);
6425 if(_sat_manager_check_language_set(lang_str)) {
6426 dbg("supprted language, set vconf.");
6427 result = tcore_storage_set_string(strg,STORAGE_KEY_LANGUAGE_SET, (const char*)lang_str);
6429 dbg("fail to update language");
6434 /* TR should be sent with success result
6435 * regardless of language is specified or not.
6437 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
6441 tr->cmd_number = q_data.cmd_data.language_notification.command_detail.cmd_num;
6442 tr->cmd_type = q_data.cmd_data.language_notification.command_detail.cmd_type;
6443 memcpy((void*)&tr->terminal_rsp_data.language_notification.command_detail, &q_data.cmd_data.language_notification.command_detail, sizeof(struct tel_sat_cmd_detail_info));
6444 tr->terminal_rsp_data.language_notification.device_id.src = DEVICE_ID_ME;
6445 tr->terminal_rsp_data.language_notification.device_id.dest = DEVICE_ID_SIM;
6446 tr->terminal_rsp_data.language_notification.result_type = RESULT_SUCCESS;
6449 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
6450 if(rv != TCORE_RETURN_SUCCESS){
6451 dbg("fail to send terminal response");