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.
25 #include <glib-object.h>
32 #include <communicator.h>
33 #include <core_object.h>
35 #include <user_request.h>
38 #include <type/call.h>
41 #include "generated-code.h"
43 #include "sat_manager.h"
44 #include "sat_ui_support/sat_ui_support.h"
46 #define SAT_DEF_CMD_Q_MAX 10
47 #define SAT_TIME_OUT 30000
49 static struct sat_manager_queue_data *sat_queue[SAT_DEF_CMD_Q_MAX] = {NULL, };
51 static unsigned char _convert_decimal_to_bcd(int dec)
61 dbg("input decimal(%d), bcd(%d%d), endian(%x)", dec, tmp1, tmp0, tmp3);
65 static const gchar* _convert_sim_lang_to_string(enum tel_sim_language_type lang)
67 dbg("convert lang(%d)", lang);
71 case SIM_LANG_ENGLISH:
73 case SIM_LANG_ITALIAN:
77 case SIM_LANG_SPANISH:
81 case SIM_LANG_SWEDISH:
85 case SIM_LANG_PORTUGUESE:
87 case SIM_LANG_FINNISH:
89 case SIM_LANG_NORWEGIAN:
93 case SIM_LANG_TURKISH:
95 case SIM_LANG_HUNGARIAN:
100 return "ko_KR.UTF-8";
101 case SIM_LANG_CHINESE:
102 return "zh_CH.UTF-8";
103 case SIM_LANG_RUSSIAN:
104 return "ru_RU.UTF-8";
105 case SIM_LANG_JAPANESE:
106 return "ja_JP.UTF-8";
114 static enum tel_sim_language_type _convert_string_to_sim_lang(const gchar* lang_str)
116 dbg("convert lang(%s)", lang_str);
118 if (g_str_equal(lang_str, "de_DE.UTF-8") == TRUE) {
119 return SIM_LANG_GERMAN;
121 else if (g_str_equal(lang_str, "en_GB.UTF-8") == TRUE) {
122 return SIM_LANG_ENGLISH;
124 else if (g_str_equal(lang_str, "it_IT.UTF-8") == TRUE) {
125 return SIM_LANG_ITALIAN;
127 else if (g_str_equal(lang_str, "fr_FR.UTF-8") == TRUE) {
128 return SIM_LANG_FRENCH;
130 else if (g_str_equal(lang_str, "es_ES.UTF-8") == TRUE) {
131 return SIM_LANG_SPANISH;
133 else if (g_str_equal(lang_str, "nl_NL.UTF-8") == TRUE) {
134 return SIM_LANG_DUTCH;
136 else if (g_str_equal(lang_str, "sv_SE.UTF-8") == TRUE) {
137 return SIM_LANG_SWEDISH;
139 else if (g_str_equal(lang_str, "da_DK.UTF-8") == TRUE) {
140 return SIM_LANG_DANISH;
142 else if (g_str_equal(lang_str, "pt_PT.UTF-8") == TRUE) {
143 return SIM_LANG_PORTUGUESE;
145 else if (g_str_equal(lang_str, "fi_FI.UTF-8") == TRUE) {
146 return SIM_LANG_FINNISH;
148 else if (g_str_equal(lang_str, "nb_NO.UTF-8") == TRUE) {
149 return SIM_LANG_NORWEGIAN;
151 else if (g_str_equal(lang_str, "el_GR.UTF-8") == TRUE) {
152 return SIM_LANG_GREEK;
154 else if (g_str_equal(lang_str, "tr_TR.UTF-8") == TRUE) {
155 return SIM_LANG_TURKISH;
157 else if (g_str_equal(lang_str, "hu_HU.UTF-8") == TRUE) {
158 return SIM_LANG_HUNGARIAN;
160 else if (g_str_equal(lang_str, "pl_PL.UTF-8") == TRUE) {
161 return SIM_LANG_POLISH;
163 else if (g_str_equal(lang_str, "ko_KR.UTF-8") == TRUE) {
164 return SIM_LANG_KOREAN;
166 else if (g_str_equal(lang_str, "zh_CH.UTF-8") == TRUE) {
167 return SIM_LANG_CHINESE;
169 else if (g_str_equal(lang_str, "ru_RU.UTF-8") == TRUE) {
170 return SIM_LANG_RUSSIAN;
172 else if (g_str_equal(lang_str, "ja_JP.UTF-8") == TRUE) {
173 return SIM_LANG_JAPANESE;
176 dbg("there is no matched language");
177 return SIM_LANG_UNSPECIFIED;
180 static unsigned int _get_time_in_ms(struct tel_sat_duration *dr)
182 switch (dr->time_unit) {
183 case TIME_UNIT_MINUTES:
184 return (unsigned int)dr->time_interval * 60000;
187 case TIME_UNIT_SECONDS:
188 return (unsigned int)dr->time_interval * 1000;
191 case TIME_UNIT_TENTHS_OF_SECONDS:
192 return (unsigned int)dr->time_interval * 100;
195 case TIME_UNIT_RESERVED:
197 return 0; // set default
204 static int _get_queue_empty_index(void)
210 for(i =0; i<SAT_DEF_CMD_Q_MAX ; i++) {
212 dbg("index[%d] is being used",i);
216 for(i =0; i<SAT_DEF_CMD_Q_MAX ; i++) {
218 dbg("found empty slot [%p] at index [%d]", sat_queue[i] ,i);
223 dbg("[SAT]SAT Command Queue current length [%d], MAX [%d]. \n", cnt, SAT_DEF_CMD_Q_MAX);
227 static gboolean _push_data(struct custom_data *ctx, struct sat_manager_queue_data *cmd_obj)
229 struct sat_manager_queue_data *item;
230 int index = cmd_obj->cmd_id;
232 if (sat_queue[index]) {
233 dbg("[SAT] sat_queue[%d] is not null [%p].\n", sat_queue[index]);
237 item = g_new0(struct sat_manager_queue_data, 1);
240 dbg("[SAT] FAILED TO ALLOC QUEUE ITEM!\n");
244 memcpy((void*)item, (void*)cmd_obj, sizeof(struct sat_manager_queue_data));
245 sat_queue[index] = item;
246 dbg("push data to queue at index[%d], [%p].\n",index, item);
250 static gboolean _pop_nth_data(struct custom_data *ctx, struct sat_manager_queue_data *cmd_obj, int command_id)
252 struct sat_manager_queue_data *item;
253 int index = command_id;
255 if(!sat_queue[index]) {
256 dbg("[SAT] sat_queue[%d] is null !!\n", index);
260 item = sat_queue[index];
262 memcpy((void*)cmd_obj, (void*)item, sizeof(struct sat_manager_queue_data));
263 dbg("pop data from queue at index[%d],[%p].\n",index, item);
264 sat_queue[index] = NULL;
269 static gboolean _peek_nth_data(struct custom_data *ctx, struct sat_manager_queue_data *cmd_obj, int command_id)
271 struct sat_manager_queue_data *item = NULL;
273 int index = command_id;
275 if(!sat_queue[index]) {
276 dbg("[SAT] sat_queue[%d] is null !!\n", index);
280 item = sat_queue[index];
281 memcpy((void*)cmd_obj, (void*)item, sizeof(struct sat_manager_queue_data));
282 dbg("peek data from queue at index[%d],[%p].\n",index, item);
286 void sat_manager_init_queue(struct custom_data *ctx)
290 for(i=0;i<SAT_DEF_CMD_Q_MAX;i++) {
295 static gboolean sat_manager_enqueue_cmd(struct custom_data *ctx, struct sat_manager_queue_data *cmd_obj)
299 id = _get_queue_empty_index();
301 dbg("Fail to get empty index.\n");
304 cmd_obj->cmd_id = id;
305 return _push_data(ctx, cmd_obj);
308 static gboolean sat_manager_dequeue_cmd_by_id(struct custom_data *ctx, struct sat_manager_queue_data *cmd_obj, int cmd_id)
310 return _pop_nth_data(ctx, cmd_obj, cmd_id);
313 static gboolean sat_manager_queue_peek_data_by_id(struct custom_data *ctx, struct sat_manager_queue_data *cmd_obj, int command_id)
315 return _peek_nth_data(ctx, cmd_obj, command_id);
318 static gboolean sat_manager_check_availiable_event_list(struct tel_sat_setup_event_list_tlv *event_list_tlv)
323 for(index = 0; index < event_list_tlv->event_list.event_list_cnt; index++){
324 if(event_list_tlv->event_list.evt_list[index] == EVENT_USER_ACTIVITY){
325 dbg("do user activity");
327 else if(event_list_tlv->event_list.evt_list[index] == EVENT_IDLE_SCREEN_AVAILABLE){
328 dbg("do idle screen");
330 else if(event_list_tlv->event_list.evt_list[index] == EVENT_LANGUAGE_SELECTION){
331 dbg("do language selection");
333 else if(event_list_tlv->event_list.evt_list[index] == EVENT_BROWSER_TERMINATION){
334 dbg("do browser termination");
336 else if(event_list_tlv->event_list.evt_list[index] == EVENT_DATA_AVAILABLE){
337 dbg("do data available (bip)");
339 else if(event_list_tlv->event_list.evt_list[index] == EVENT_CHANNEL_STATUS){
340 dbg("do channel status (bip)");
343 dbg("unmanaged event (%d)", event_list_tlv->event_list.evt_list[index]);
351 static TReturn sat_manager_send_terminal_response(Communicator *comm, TcorePlugin *target_plg, struct treq_sat_terminal_rsp_data *tr)
353 TReturn rv = TCORE_RETURN_SUCCESS;
354 UserRequest *ur = NULL;
356 ur = tcore_user_request_new(comm, tcore_server_get_cp_name_by_plugin(target_plg));
359 return TCORE_RETURN_FAILURE;
362 tcore_user_request_set_command(ur, TREQ_SAT_REQ_TERMINALRESPONSE);
363 tcore_user_request_set_data(ur, sizeof(struct treq_sat_terminal_rsp_data), (void *)tr);
364 rv = tcore_communicator_dispatch_request(comm, ur);
365 if (rv != TCORE_RETURN_SUCCESS) {
366 dbg("fail to send terminal response",rv);
367 tcore_user_request_unref(ur);
368 rv = TCORE_RETURN_FAILURE;
374 gboolean sat_manager_remove_cmd_by_id(struct custom_data *ctx, int cmd_id)
376 struct sat_manager_queue_data *item;
379 if(!sat_queue[index]) {
380 dbg("[SAT] sat_queue[%d] is already null !!\n", index);
383 item = sat_queue[index];
385 dbg("remove data from queue at index[%d],[%p].\n",index, item);
386 sat_queue[index] = NULL;
391 GVariant* sat_manager_caching_setup_menu_info(struct custom_data *ctx, const char *plugin_name, struct tel_sat_setup_menu_tlv* setup_menu_tlv)
393 TcorePlugin *plg = NULL;
394 GVariant *setup_menu_info = NULL;
395 struct sat_manager_queue_data q_data;
397 gint command_id = 0, menu_cnt = 0, title_len =0;
398 gboolean menu_present = FALSE, help_info = FALSE, updated = FALSE;
399 gchar main_title[SAT_ALPHA_ID_LEN_MAX];
400 GVariantBuilder *v_builder = NULL;
401 GVariant *menu_items = NULL;
403 dbg("interpreting setup menu notification");
404 memset(&main_title, 0 , SAT_ALPHA_ID_LEN_MAX);
406 plg = tcore_server_find_plugin(ctx->server, plugin_name);
408 dbg("there is no valid plugin at this point");
412 if ((setup_menu_tlv->icon_id.is_exist)
413 && (setup_menu_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
414 && (!setup_menu_tlv->alpha_id.is_exist || setup_menu_tlv->alpha_id.alpha_data_len == 0)){
416 struct treq_sat_terminal_rsp_data *tr = NULL;
417 dbg("exceptional case to fix gcf case 2.4 command not understood");
419 tr = g_new0(struct treq_sat_terminal_rsp_data, 1);
420 tr->cmd_number = setup_menu_tlv->command_detail.cmd_num;
421 tr->cmd_type = setup_menu_tlv->command_detail.cmd_type;
423 memcpy((void*)&tr->terminal_rsp_data.setup_menu.command_detail, &setup_menu_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
424 tr->terminal_rsp_data.setup_menu.device_id.src = setup_menu_tlv->device_id.dest;
425 tr->terminal_rsp_data.setup_menu.device_id.dest = setup_menu_tlv->device_id.src;
426 tr->terminal_rsp_data.setup_menu.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
428 sat_manager_send_terminal_response(ctx->comm, plg, tr);
434 if(ctx->cached_sat_main_menu){
435 dbg("main menu info is updated");
440 help_info = setup_menu_tlv->command_detail.cmd_qualifier.setup_menu.help_info;
443 menu_present = setup_menu_tlv->command_detail.cmd_qualifier.setup_menu.select_preference;
446 menu_cnt = setup_menu_tlv->menu_item_cnt;
448 //check the validation of content
449 if(!menu_cnt || (setup_menu_tlv->menu_item_cnt == 1 && setup_menu_tlv->menu_item[0].text_len == 0)){
450 //support GCF case 27.22.4.8.1 - 1.1 setup menu
452 struct treq_sat_terminal_rsp_data *tr = NULL;
455 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
456 tr->cmd_number = setup_menu_tlv->command_detail.cmd_num;
457 tr->cmd_type = setup_menu_tlv->command_detail.cmd_type;
459 memcpy((void*)&tr->terminal_rsp_data.setup_menu.command_detail, &setup_menu_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
460 tr->terminal_rsp_data.setup_menu.device_id.src = setup_menu_tlv->device_id.dest;
461 tr->terminal_rsp_data.setup_menu.device_id.dest = setup_menu_tlv->device_id.src;
462 tr->terminal_rsp_data.setup_menu.result_type = RESULT_SUCCESS;
464 sat_manager_send_terminal_response(ctx->comm, plg, tr);
471 if(setup_menu_tlv->alpha_id.alpha_data_len)
472 tcore_util_convert_string_to_utf8((unsigned char*)&main_title,(unsigned short *)&title_len,
473 setup_menu_tlv->alpha_id.dcs.a_format,
474 (unsigned char*)&setup_menu_tlv->alpha_id.alpha_data,
475 (unsigned short)setup_menu_tlv->alpha_id.alpha_data_len);
476 dbg("sat main menu title(%s)",main_title);
478 v_builder = g_variant_builder_new(G_VARIANT_TYPE ("a(si)"));
481 if(!setup_menu_tlv->next_act_ind_list.cnt){
484 dbg("setup_menu_tlv->next_act_ind_list.cnt == 0");
486 for(index = 0; index < menu_cnt; index++){
488 gchar item_str[SAT_ITEM_TEXT_LEN_MAX + 1];
490 if(!setup_menu_tlv->alpha_id.alpha_data_len)
491 setup_menu_tlv->alpha_id.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
493 memset(&item_str, 0 , SAT_ITEM_TEXT_LEN_MAX + 1);
494 tcore_util_convert_string_to_utf8((unsigned char*)&item_str, (unsigned short *)&item_len,
495 setup_menu_tlv->alpha_id.dcs.a_format,
496 (unsigned char*)&setup_menu_tlv->menu_item[index].text,
497 (unsigned short)setup_menu_tlv->menu_item[index].text_len);
499 dbg( "index(%d) item_id(%d) item_string(%s)", index, setup_menu_tlv->menu_item[index].item_id, item_str);
501 //g_variant_builder_add(v_builder, "(sy)", &item_str, setup_menu_tlv->menu_item[index].item_id);
502 g_variant_builder_add(v_builder, "(si)", item_str, (gint32)(setup_menu_tlv->menu_item[index].item_id));
508 dbg("setup_menu_tlv->next_act_ind_list.cnt == 0");
510 for(index = 0; index < menu_cnt; index++){
512 gchar item_str[SAT_ITEM_TEXT_LEN_MAX + 1];
514 if(setup_menu_tlv->alpha_id.alpha_data_len == 0)
515 setup_menu_tlv->alpha_id.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
517 memset(&item_str, '\0' , SAT_ITEM_TEXT_LEN_MAX + 1);
518 tcore_util_convert_string_to_utf8((unsigned char*)&item_str, (unsigned short *)&item_len,
519 setup_menu_tlv->alpha_id.dcs.a_format,
520 (unsigned char*)&setup_menu_tlv->menu_item[index].text,
521 (unsigned short)setup_menu_tlv->menu_item[index].text_len);
523 if( setup_menu_tlv->next_act_ind_list.indicator_list[index] == SAT_PROATV_CMD_SEND_SMS) {
524 g_strlcat(item_str," [Send SMS]", 11);
526 else if (setup_menu_tlv->next_act_ind_list.indicator_list[index]== SAT_PROATV_CMD_SETUP_CALL) {
527 g_strlcat(item_str," [Set Up Call]", 14);
529 else if (setup_menu_tlv->next_act_ind_list.indicator_list[index]== SAT_PROATV_CMD_LAUNCH_BROWSER){
530 g_strlcat(item_str," [Launch Browser]", 17);
532 else if (setup_menu_tlv->next_act_ind_list.indicator_list[index]== SAT_PROATV_CMD_PROVIDE_LOCAL_INFO) {
533 g_strlcat(item_str," [Provide Terminal Information]", 31);
536 dbg( "index(%d) item_id(%d) item_string(%s)", index, setup_menu_tlv->menu_item[index].item_id, item_str);
538 //g_variant_builder_add(v_builder, "(sy)", g_strdup(item_str), setup_menu_tlv->menu_item[index].item_id);
539 g_variant_builder_add(v_builder, "(si)", item_str, (gint32)(setup_menu_tlv->menu_item[index].item_id));
543 menu_items = g_variant_builder_end(v_builder);
545 //enqueue data and generate cmd_id
546 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
547 q_data.cmd_type = SAT_PROATV_CMD_SETUP_MENU;
548 memcpy((void*)&(q_data.cmd_data.setupMenuInd), setup_menu_tlv, sizeof(struct tel_sat_setup_menu_tlv));
549 sat_manager_enqueue_cmd(ctx, &q_data);
550 command_id = q_data.cmd_id;
552 setup_menu_info = g_variant_new("(ibsvibb)", command_id, menu_present, main_title, menu_items,
553 menu_cnt, help_info, updated);
555 return setup_menu_info;
558 GVariant* sat_manager_display_text_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_display_text_tlv* display_text_tlv)
560 TcorePlugin *plg = NULL;
561 GVariant *display_text = NULL;
562 struct sat_manager_queue_data q_data;
564 gint command_id = 0, text_len =0, duration= 0, tmp_duration = 0;
565 gboolean immediately_rsp = FALSE, high_priority = FALSE, user_rsp_required = FALSE;
566 gchar text[SAT_TEXT_STRING_LEN_MAX];
567 GVariant *icon_id = NULL;
569 dbg("interpreting display text notification");
570 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
572 plg = tcore_server_find_plugin(ctx->server, plugin_name);
574 dbg("there is no valid plugin at this point");
578 if ( (display_text_tlv->icon_id.is_exist && display_text_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
579 || !display_text_tlv->text.string_length ){
581 struct treq_sat_terminal_rsp_data *tr = NULL;
582 dbg("[SAT] exceptional case to fix gcf case 2.4 command not understood");
584 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
585 tr->cmd_number = display_text_tlv->command_detail.cmd_num;
586 tr->cmd_type = display_text_tlv->command_detail.cmd_type;
588 memcpy((void*)&tr->terminal_rsp_data.display_text.command_detail, &display_text_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
589 tr->terminal_rsp_data.display_text.device_id.src = DEVICE_ID_ME;
590 tr->terminal_rsp_data.display_text.device_id.dest = display_text_tlv->device_id.src;
591 tr->terminal_rsp_data.display_text.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
593 sat_manager_send_terminal_response(ctx->comm, plg, tr);
599 //user resp required & time_duration
600 if(display_text_tlv->command_detail.cmd_qualifier.display_text.text_clear_type == TEXT_WAIT_FOR_USER_TO_CLEAR_MSG){
601 user_rsp_required = TRUE;
602 duration = SAT_TIME_OUT;
608 //immediate response requested
609 if (display_text_tlv->immediate_response_requested)
610 immediately_rsp = TRUE;
613 if (display_text_tlv->command_detail.cmd_qualifier.display_text.text_priority == TEXT_PRIORITY_HIGH)
614 high_priority = TRUE;
615 dbg("user rsp required(%d), immediately rsp(%d) priority(%d)",user_rsp_required, immediately_rsp, high_priority);
618 tcore_util_convert_string_to_utf8((unsigned char*) &text, (unsigned short *) &text_len,
619 display_text_tlv->text.dcs.a_format,
620 (unsigned char*) &display_text_tlv->text.string,
621 (unsigned short) display_text_tlv->text.string_length);
622 dbg("sat display text(%s)",text);
625 if(!display_text_tlv->duration.time_interval){
626 tmp_duration = _get_time_in_ms(&display_text_tlv->duration);
630 duration = tmp_duration;
632 /* ETSI TS 102 223 6.4.1 DISPLAY TEXT
633 If help information is requested by the user, this command may be used to display help information on the screen. The
634 help information should be sent as high priority text and with the option that it should be cleared after a short delay.*/
636 /* if (ctx->help_requested == TRUE) {
637 ad->bIsPriorityHigh = TRUE;
639 ctx->help_requested = FALSE;
642 //enqueue data and generate cmd_id
643 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
644 q_data.cmd_type = SAT_PROATV_CMD_DISPLAY_TEXT;
645 memcpy((void*)&(q_data.cmd_data.displayTextInd), display_text_tlv, sizeof(struct tel_sat_display_text_tlv));
646 sat_manager_enqueue_cmd(ctx, &q_data);
647 command_id = q_data.cmd_id;
649 icon_id = g_variant_new("()");
651 display_text = g_variant_new("(isiibbbv)", command_id, text, text_len, duration,
652 high_priority, user_rsp_required, immediately_rsp, icon_id);
657 GVariant* sat_manager_select_item_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_select_item_tlv* select_item_tlv)
659 TcorePlugin *plg = NULL;
660 GVariant *select_item = NULL;
661 struct sat_manager_queue_data q_data;
664 gint command_id = 0, default_item_id = 0, menu_cnt = 0, text_len =0;
665 gboolean help_info = FALSE;
666 gchar text[SAT_TEXT_STRING_LEN_MAX];
667 GVariantBuilder *v_builder = NULL;
668 GVariant *menu_items = NULL;
669 GVariant *icon_id = NULL;
670 GVariant *icon_list = NULL;
672 dbg("interpreting select item notification");
673 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
675 plg = tcore_server_find_plugin(ctx->server, plugin_name);
677 dbg("there is no valid plugin at this point");
681 if ((select_item_tlv->icon_id.is_exist)
682 && (select_item_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
683 && ( !select_item_tlv->alpha_id.is_exist || select_item_tlv->alpha_id.alpha_data_len == 0) ) {
685 struct treq_sat_terminal_rsp_data *tr = NULL;
686 dbg("[SAT] exceptional case to fix gcf case 2.4 command not understood");
688 tr = (struct treq_sat_terminal_rsp_data *) calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
690 tr->cmd_number = select_item_tlv->command_detail.cmd_num;
691 tr->cmd_type = select_item_tlv->command_detail.cmd_type;
693 memcpy((void*) &tr->terminal_rsp_data.select_item.command_detail, &select_item_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
694 tr->terminal_rsp_data.select_item.device_id.src = select_item_tlv->device_id.dest;
695 tr->terminal_rsp_data.select_item.device_id.dest = select_item_tlv->device_id.src;
696 tr->terminal_rsp_data.select_item.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
698 sat_manager_send_terminal_response(ctx->comm, plg, tr);
705 help_info = select_item_tlv->command_detail.cmd_qualifier.select_item.help_info;
707 if(!select_item_tlv->alpha_id.is_exist){
708 dbg("set the item dcs value to ALPHABET_FORMAT_8BIT_DATA");
709 select_item_tlv->alpha_id.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
713 if(select_item_tlv->alpha_id.is_exist && select_item_tlv->alpha_id.alpha_data_len > 0)
714 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
715 select_item_tlv->alpha_id.dcs.a_format,
716 (unsigned char*)&select_item_tlv->alpha_id.alpha_data,
717 (unsigned short)select_item_tlv->alpha_id.alpha_data_len);
718 dbg("select item text(%s)",text);
721 default_item_id = select_item_tlv->item_identifier.item_identifier;
722 dbg( "default item id(%d)", default_item_id);
725 menu_cnt = select_item_tlv->menu_item_cnt;
726 dbg( "menu item count(%d)", menu_cnt);
729 v_builder = g_variant_builder_new(G_VARIANT_TYPE ("a(iis)"));
730 for(index= 0; index< menu_cnt; index++){
732 gchar item_str[SAT_ITEM_TEXT_LEN_MAX + 1];
734 memset(&item_str, 0 , SAT_ITEM_TEXT_LEN_MAX + 1);
736 tcore_util_convert_string_to_utf8((unsigned char*) &item_str, (unsigned short *) &item_len,
737 select_item_tlv->alpha_id.dcs.a_format,
738 (unsigned char*) &select_item_tlv->menu_item[index].text,
739 (unsigned short) select_item_tlv->menu_item[index].text_len);
741 if (select_item_tlv->item_next_act_ind_list.cnt != 0) {
742 if( select_item_tlv->item_next_act_ind_list.indicator_list[index] == SAT_PROATV_CMD_SEND_SMS) {
743 g_strlcat(item_str," [Send SMS]", 11);
745 else if (select_item_tlv->item_next_act_ind_list.indicator_list[index]== SAT_PROATV_CMD_SETUP_CALL) {
746 g_strlcat(item_str," [Set Up Call]", 14);
748 else if (select_item_tlv->item_next_act_ind_list.indicator_list[index]== SAT_PROATV_CMD_LAUNCH_BROWSER){
749 g_strlcat(item_str," [Launch Browser]", 17);
751 else if (select_item_tlv->item_next_act_ind_list.indicator_list[index]== SAT_PROATV_CMD_PROVIDE_LOCAL_INFO) {
752 g_strlcat(item_str," [Provide Terminal Information]", 31);
756 item_len = strlen(item_str);
757 dbg( "index(%d) item_id(%d) item_len(%d) item_string(%s)", index, select_item_tlv->menu_item[index].item_id, item_len, item_str);
758 g_variant_builder_add(v_builder, "(iis)", (gint32)(select_item_tlv->menu_item[index].item_id), item_len, item_str);
760 menu_items = g_variant_builder_end(v_builder);
762 // generate command id
763 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
764 q_data.cmd_type = SAT_PROATV_CMD_SELECT_ITEM;
765 memcpy((void*)&(q_data.cmd_data.selectItemInd), select_item_tlv, sizeof(struct tel_sat_select_item_tlv));
766 sat_manager_enqueue_cmd(ctx, &q_data);
767 command_id = q_data.cmd_id;
769 icon_id = g_variant_new_variant(menu_items);
770 icon_list = g_variant_new_variant(menu_items);
772 select_item = g_variant_new("(ibsiiivvv)", command_id, help_info, text, text_len,
773 default_item_id, menu_cnt, menu_items, icon_id, icon_list);
778 GVariant* sat_manager_get_inkey_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_get_inkey_tlv* get_inkey_tlv)
780 TcorePlugin *plg = NULL;
781 GVariant *get_inkey = NULL;
782 struct sat_manager_queue_data q_data;
784 gint command_id = 0, key_type = 0, input_character_mode = 0;
785 gint text_len = 0, duration = 0, tmp_duration = 0;
786 gboolean b_numeric = FALSE, b_help_info = FALSE;
787 gchar text[SAT_TEXT_STRING_LEN_MAX];
788 GVariant *icon_id = NULL;
790 dbg("interpreting get inkey notification");
791 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
793 plg = tcore_server_find_plugin(ctx->server, plugin_name);
795 dbg("there is no valid plugin at this point");
799 if (get_inkey_tlv->icon_id.is_exist && !get_inkey_tlv->text.string_length
800 && (get_inkey_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)){
802 struct treq_sat_terminal_rsp_data *tr = NULL;
803 dbg("[SAT] exceptional case to fix gcf case 2.4 command not understood");
805 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
806 tr->cmd_number = get_inkey_tlv->command_detail.cmd_num;
807 tr->cmd_type = get_inkey_tlv->command_detail.cmd_type;
809 memcpy((void*)&tr->terminal_rsp_data.get_inkey.command_detail, &get_inkey_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
810 tr->terminal_rsp_data.get_inkey.device_id.src = get_inkey_tlv->device_id.dest;
811 tr->terminal_rsp_data.get_inkey.device_id.dest = get_inkey_tlv->device_id.src;
812 tr->terminal_rsp_data.get_inkey.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
814 sat_manager_send_terminal_response(ctx->comm, plg, tr);
821 key_type = get_inkey_tlv->command_detail.cmd_qualifier.get_inkey.inkey_type;
824 duration = SAT_TIME_OUT;
825 tmp_duration = _get_time_in_ms(&get_inkey_tlv->duration);
826 if (tmp_duration > 0)
827 duration = tmp_duration;
830 input_character_mode = get_inkey_tlv->command_detail.cmd_qualifier.get_inkey.alphabet_type;
833 b_numeric = !get_inkey_tlv->command_detail.cmd_qualifier.get_inkey.alphabet_set;
836 b_help_info = get_inkey_tlv->command_detail.cmd_qualifier.get_inkey.help_info;
839 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
840 get_inkey_tlv->text.dcs.a_format ,
841 (unsigned char*)&get_inkey_tlv->text.string,
842 (unsigned short)get_inkey_tlv->text.string_length);
844 dbg("get inkey text(%s)",text);
846 if (get_inkey_tlv->command_detail.cmd_qualifier.get_inkey.immediate_rsp_required) {
847 dbg("get_inkey immediate_rsp_require is TRUE");
848 //Send TR if UI display success
851 //enqueue data and generate cmd_id
852 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
853 q_data.cmd_type = SAT_PROATV_CMD_GET_INKEY;
854 memcpy((void*)&(q_data.cmd_data.getInkeyInd), get_inkey_tlv, sizeof(struct tel_sat_get_inkey_tlv));
855 sat_manager_enqueue_cmd(ctx, &q_data);
856 command_id = q_data.cmd_id;
858 icon_id = g_variant_new("()");
860 get_inkey = g_variant_new("(iiibbsiiv)", command_id, key_type, input_character_mode, b_numeric,
861 b_help_info, text, text_len, duration, icon_id);
866 GVariant* sat_manager_get_input_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_get_input_tlv* get_input_tlv)
868 TcorePlugin *plg = NULL;
869 GVariant *get_input = NULL;
870 struct sat_manager_queue_data q_data;
872 gint command_id = 0, input_character_mode = 0;
873 gint text_len = 0, def_text_len = 0, rsp_len_min = 0, rsp_len_max = 0;
874 gboolean b_numeric = FALSE, b_help_info = FALSE, b_echo_input = FALSE;
875 gchar text[SAT_TEXT_STRING_LEN_MAX], def_text[SAT_TEXT_STRING_LEN_MAX];
876 GVariant *icon_id = NULL;
878 dbg("interpreting get input notification");
879 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
881 plg = tcore_server_find_plugin(ctx->server, plugin_name);
883 dbg("there is no valid plugin at this point");
887 if(get_input_tlv->icon_id.is_exist && get_input_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY ){
889 struct treq_sat_terminal_rsp_data *tr = NULL;
890 dbg("[SAT] exceptional case to fix gcf case 2.4 command not understood");
892 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
893 tr->cmd_number = get_input_tlv->command_detail.cmd_num;
894 tr->cmd_type = get_input_tlv->command_detail.cmd_type;
896 memcpy((void*)&tr->terminal_rsp_data.get_input.command_detail, &get_input_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
897 tr->terminal_rsp_data.get_input.device_id.src = get_input_tlv->device_id.dest;
898 tr->terminal_rsp_data.get_input.device_id.dest = get_input_tlv->device_id.src;
899 tr->terminal_rsp_data.get_input.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
901 sat_manager_send_terminal_response(ctx->comm, plg, tr);
907 dbg( "[SAT] is SMS7 packing required [%d]",get_input_tlv->command_detail.cmd_qualifier.get_input.user_input_unpacked_format);
910 input_character_mode = get_input_tlv->command_detail.cmd_qualifier.get_input.alphabet_type;
913 b_numeric = !get_input_tlv->command_detail.cmd_qualifier.get_input.alphabet_set;
916 b_help_info = get_input_tlv->command_detail.cmd_qualifier.get_input.help_info;
919 b_echo_input = get_input_tlv->command_detail.cmd_qualifier.get_input.me_echo_user_input;
920 dbg("numeric (%d), help info(%d), echo input(%d)", b_numeric, b_help_info, b_echo_input);
923 if(get_input_tlv->text.string_length){
924 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
925 get_input_tlv->text.dcs.a_format ,
926 (unsigned char*)&get_input_tlv->text.string,
927 (unsigned short)get_input_tlv->text.string_length);
928 dbg("get input text(%s)",text);
935 //response length min & max
936 rsp_len_min = get_input_tlv->rsp_len.min;
937 rsp_len_max = get_input_tlv->rsp_len.max;
939 //default text & default text len
940 if(get_input_tlv->default_text.string_length){
941 tcore_util_convert_string_to_utf8((unsigned char*)&def_text,(unsigned short *)&def_text_len,
942 get_input_tlv->text.dcs.a_format ,
943 (unsigned char*)&get_input_tlv->default_text.string,
944 (unsigned short)get_input_tlv->default_text.string_length);
945 dbg("get input default text(%s)",text);
948 //enqueue data and generate cmd_id
949 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
950 q_data.cmd_type = SAT_PROATV_CMD_GET_INPUT;
951 memcpy((void*)&(q_data.cmd_data.getInputInd), get_input_tlv, sizeof(struct tel_sat_get_input_tlv));
952 sat_manager_enqueue_cmd(ctx, &q_data);
953 command_id = q_data.cmd_id;
955 icon_id = g_variant_new("()");
957 get_input = g_variant_new("(iibbbsiiisiv)", command_id, input_character_mode, b_numeric, b_help_info,
958 b_echo_input, text, text_len, rsp_len_max, rsp_len_min, def_text, def_text_len, icon_id);
963 GVariant* sat_manager_play_tone_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_play_tone_tlv* play_tone_tlv)
965 TcorePlugin *plg = NULL;
966 GVariant *play_tone = NULL;
967 struct sat_manager_queue_data q_data;
969 gint command_id = 0, tone_type = 0, duration = 0, tmp_duration = 0;
971 gchar text[SAT_TEXT_STRING_LEN_MAX];
972 GVariant *icon_id = NULL;
974 dbg("interpreting play tone notification");
975 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
977 plg = tcore_server_find_plugin(ctx->server, plugin_name);
979 dbg("there is no valid plugin at this point");
983 if( (play_tone_tlv->icon_id.is_exist) && ( play_tone_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
984 && (!play_tone_tlv->alpha_id.is_exist || !play_tone_tlv->alpha_id.alpha_data_len))
986 struct treq_sat_terminal_rsp_data *tr = NULL;
987 dbg("[SAT] exceptional case to fix gcf case 2.4 command not understood");
989 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
990 tr->cmd_number = play_tone_tlv->command_detail.cmd_num;
991 tr->cmd_type = play_tone_tlv->command_detail.cmd_type;
993 memcpy((void*)&tr->terminal_rsp_data.play_tone.command_detail, &play_tone_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
994 tr->terminal_rsp_data.play_tone.device_id.src = DEVICE_ID_ME;
995 tr->terminal_rsp_data.play_tone.device_id.dest = play_tone_tlv->device_id.src;
996 tr->terminal_rsp_data.play_tone.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
998 sat_manager_send_terminal_response(ctx->comm, plg, tr);
1005 if( play_tone_tlv->alpha_id.is_exist && play_tone_tlv->alpha_id.alpha_data_len){
1006 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
1007 play_tone_tlv->alpha_id.dcs.a_format,
1008 (unsigned char*)&play_tone_tlv->alpha_id.alpha_data,
1009 (unsigned short)play_tone_tlv->alpha_id.alpha_data_len);
1010 dbg("play tone ui display text (%s)",text);
1014 tone_type = play_tone_tlv->tone.tone_type;
1017 duration = SAT_TIME_OUT;
1018 tmp_duration = _get_time_in_ms(&play_tone_tlv->duration);
1019 if (tmp_duration > 0)
1020 duration = tmp_duration;
1022 //enqueue data and generate cmd_id
1023 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
1024 q_data.cmd_type = SAT_PROATV_CMD_PLAY_TONE;
1025 memcpy((void*)&(q_data.cmd_data.play_tone), play_tone_tlv, sizeof(struct tel_sat_play_tone_tlv));
1026 sat_manager_enqueue_cmd(ctx, &q_data);
1027 command_id = q_data.cmd_id;
1029 icon_id = g_variant_new("()");
1031 play_tone = g_variant_new("(isivii)", command_id, text, text_len, icon_id, tone_type, duration);
1036 GVariant* sat_manager_send_sms_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_send_sms_tlv* send_sms_tlv)
1038 TcorePlugin *plg = NULL;
1039 GVariant *send_sms = NULL;
1040 struct sat_manager_queue_data q_data;
1043 gint command_id = 0, ton = 0, npi = 0, tpdu_type = 0;
1044 gboolean b_packing_required = FALSE;
1045 gint text_len = 0, number_len = 0, tpdu_data_len= 0;
1046 gchar text[SAT_TEXT_STRING_LEN_MAX], dialling_number[SAT_DIALING_NUMBER_LEN_MAX];
1047 GVariantBuilder *builder = NULL;
1048 GVariant *tpdu_data = NULL;
1049 GVariant *icon_id = NULL;
1051 dbg("interpreting send sms notification");
1052 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
1053 memset(&dialling_number, 0 , SAT_DIALING_NUMBER_LEN_MAX);
1055 plg = tcore_server_find_plugin(ctx->server, plugin_name);
1057 dbg("there is no valid plugin at this point");
1061 if( (send_sms_tlv->icon_id.is_exist) && ( send_sms_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
1062 && (!send_sms_tlv->alpha_id.is_exist || !send_sms_tlv->alpha_id.alpha_data_len))
1064 struct treq_sat_terminal_rsp_data *tr = NULL;
1065 dbg("[SAT] exceptional case to fix gcf case 2.4 command not understood");
1067 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
1068 tr->cmd_number = send_sms_tlv->command_detail.cmd_num;
1069 tr->cmd_type = send_sms_tlv->command_detail.cmd_type;
1071 memcpy((void*)&tr->terminal_rsp_data.send_sms.command_detail, &send_sms_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
1072 tr->terminal_rsp_data.send_sms.device_id.src = DEVICE_ID_ME;
1073 tr->terminal_rsp_data.send_sms.device_id.dest = send_sms_tlv->device_id.src;
1074 tr->terminal_rsp_data.send_sms.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
1076 sat_manager_send_terminal_response(ctx->comm, plg, tr);
1083 if( send_sms_tlv->alpha_id.is_exist && send_sms_tlv->alpha_id.alpha_data_len){
1084 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
1085 send_sms_tlv->alpha_id.dcs.a_format,
1086 (unsigned char*)&send_sms_tlv->alpha_id.alpha_data,
1087 (unsigned short)send_sms_tlv->alpha_id.alpha_data_len);
1088 dbg("send sms ui display text (%s)",text);
1096 b_packing_required = send_sms_tlv->command_detail.cmd_qualifier.send_sms.packing_by_me_required;
1098 //address : ton, npi, dialling number, number len
1099 ton = send_sms_tlv->address.ton;
1100 npi = send_sms_tlv->address.npi;
1101 number_len = send_sms_tlv->address.dialing_number_len;
1102 memcpy(dialling_number, send_sms_tlv->address.dialing_number, SAT_DIALING_NUMBER_LEN_MAX);
1104 //tpdu data : type, data, data len
1105 tpdu_type = send_sms_tlv->sms_tpdu.tpdu_type;
1106 tpdu_data_len = send_sms_tlv->sms_tpdu.data_len;
1107 builder = g_variant_builder_new(G_VARIANT_TYPE ("ay"));
1108 for (index = 0; index < tpdu_data_len; index++) {
1109 g_variant_builder_add(builder, "y", send_sms_tlv->sms_tpdu.data[index]);
1111 tpdu_data = g_variant_builder_end(builder);
1113 //enqueue data and generate cmd_id
1114 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
1115 q_data.cmd_type = SAT_PROATV_CMD_SEND_SMS;
1116 memcpy((void*)&(q_data.cmd_data.sendSMSInd), send_sms_tlv, sizeof(struct tel_sat_send_sms_tlv));
1117 sat_manager_enqueue_cmd(ctx, &q_data);
1118 command_id = q_data.cmd_id;
1120 icon_id = g_variant_new("()");
1122 send_sms = g_variant_new("(isivbiisiivi)", command_id, text, text_len, icon_id, b_packing_required,
1123 ton, npi, dialling_number, number_len, tpdu_type, tpdu_data, tpdu_data_len);
1128 GVariant* sat_manager_send_ss_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_send_ss_tlv* send_ss_tlv)
1130 TcorePlugin *plg = NULL;
1131 GVariant *send_ss = NULL;
1132 struct sat_manager_queue_data q_data;
1134 gint command_id = 0, ton = 0, npi = 0;
1135 gint text_len = 0, ss_str_len = 0;
1136 gchar text[SAT_TEXT_STRING_LEN_MAX], ss_string[SAT_SS_STRING_LEN_MAX];
1137 GVariant *icon_id = NULL;
1139 dbg("interpreting send ss notification");
1140 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
1141 memset(&ss_string, 0 , SAT_SS_STRING_LEN_MAX);
1143 plg = tcore_server_find_plugin(ctx->server, plugin_name);
1145 dbg("there is no valid plugin at this point");
1149 if( (send_ss_tlv->icon_id.is_exist) && ( send_ss_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
1150 && (!send_ss_tlv->alpha_id.is_exist || !send_ss_tlv->alpha_id.alpha_data_len))
1152 struct treq_sat_terminal_rsp_data *tr = NULL;
1153 dbg("[SAT] exceptional case to fix gcf case 2.4 command not understood");
1155 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
1156 tr->cmd_number = send_ss_tlv->command_detail.cmd_num;
1157 tr->cmd_type = send_ss_tlv->command_detail.cmd_type;
1159 memcpy((void*)&tr->terminal_rsp_data.send_ss.command_detail, &send_ss_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
1160 tr->terminal_rsp_data.send_ss.device_id.src = send_ss_tlv->device_id.dest;
1161 tr->terminal_rsp_data.send_ss.device_id.dest = send_ss_tlv->device_id.src;
1162 tr->terminal_rsp_data.send_ss.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
1164 sat_manager_send_terminal_response(ctx->comm, plg, tr);
1171 if( send_ss_tlv->alpha_id.is_exist && send_ss_tlv->alpha_id.alpha_data_len){
1172 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
1173 send_ss_tlv->alpha_id.dcs.a_format,
1174 (unsigned char*)&send_ss_tlv->alpha_id.alpha_data,
1175 (unsigned short)send_ss_tlv->alpha_id.alpha_data_len);
1176 dbg("send ss ui display text (%s)",text);
1179 //ss string: ton, npi, ss string len, ss string
1180 ton = send_ss_tlv->ss_string.ton;
1181 npi = send_ss_tlv->ss_string.npi;
1182 ss_str_len = send_ss_tlv->ss_string.string_len;
1183 memcpy(ss_string, send_ss_tlv->ss_string.ss_string, SAT_SS_STRING_LEN_MAX);
1185 //enqueue data and generate cmd_id
1186 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
1187 q_data.cmd_type = SAT_PROATV_CMD_SEND_SS;
1188 memcpy((void*)&(q_data.cmd_data.send_ss), send_ss_tlv, sizeof(struct tel_sat_send_ss_tlv));
1189 sat_manager_enqueue_cmd(ctx, &q_data);
1190 command_id = q_data.cmd_id;
1192 icon_id = g_variant_new("()");
1194 send_ss = g_variant_new("(isiviiis)", command_id, text, text_len, icon_id,
1195 ton, npi, ss_str_len, ss_string);
1200 GVariant* sat_manager_send_ussd_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_send_ussd_tlv* send_ussd_tlv)
1202 TcorePlugin *plg = NULL;
1203 GVariant *send_ussd = NULL;
1204 struct sat_manager_queue_data q_data;
1206 gint command_id = 0;
1207 gint text_len = 0, ussd_str_len = 0;
1208 gchar text[SAT_TEXT_STRING_LEN_MAX], ussd_string[SAT_USSD_STRING_LEN_MAX];
1209 GVariant *icon_id = NULL;
1211 dbg("interpreting send ussd notification");
1212 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
1213 memset(&ussd_string, 0 , SAT_USSD_STRING_LEN_MAX);
1215 plg = tcore_server_find_plugin(ctx->server, plugin_name);
1217 dbg("there is no valid plugin at this point");
1221 if( (send_ussd_tlv->icon_id.is_exist) && ( send_ussd_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
1222 && (!send_ussd_tlv->alpha_id.is_exist || !send_ussd_tlv->alpha_id.alpha_data_len))
1224 struct treq_sat_terminal_rsp_data *tr = NULL;
1225 dbg("[SAT] exceptional case to fix gcf case 2.4 command not understood");
1227 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
1228 tr->cmd_number = send_ussd_tlv->command_detail.cmd_num;
1229 tr->cmd_type = send_ussd_tlv->command_detail.cmd_type;
1231 memcpy((void*)&tr->terminal_rsp_data.send_ussd.command_detail, &send_ussd_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
1232 tr->terminal_rsp_data.send_ussd.device_id.src = send_ussd_tlv->device_id.dest;
1233 tr->terminal_rsp_data.send_ussd.device_id.dest = send_ussd_tlv->device_id.src;
1234 tr->terminal_rsp_data.send_ussd.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
1236 sat_manager_send_terminal_response(ctx->comm, plg, tr);
1243 if( send_ussd_tlv->alpha_id.is_exist && send_ussd_tlv->alpha_id.alpha_data_len){
1244 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
1245 send_ussd_tlv->alpha_id.dcs.a_format,
1246 (unsigned char*)&send_ussd_tlv->alpha_id.alpha_data,
1247 (unsigned short)send_ussd_tlv->alpha_id.alpha_data_len);
1248 dbg("send ussd ui display text (%s)",text);
1252 tcore_util_convert_string_to_utf8((unsigned char*)&ussd_string,(unsigned short *)&ussd_str_len,
1253 send_ussd_tlv->ussd_string.dsc.a_format,
1254 (unsigned char*)&send_ussd_tlv->ussd_string.ussd_string,
1255 (unsigned short)send_ussd_tlv->ussd_string.string_len);
1257 //enqueue data and generate cmd_id
1258 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
1259 q_data.cmd_type = SAT_PROATV_CMD_SEND_USSD;
1260 memcpy((void*)&(q_data.cmd_data.send_ussd), send_ussd_tlv, sizeof(struct tel_sat_send_ussd_tlv));
1261 sat_manager_enqueue_cmd(ctx, &q_data);
1262 command_id = q_data.cmd_id;
1264 icon_id = g_variant_new("()");
1266 send_ussd = g_variant_new("(isivis)", command_id, text, text_len, icon_id, ussd_str_len, ussd_string);
1271 GVariant* sat_manager_setup_call_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_setup_call_tlv* setup_call_tlv)
1273 TcorePlugin *plg = NULL;
1274 GVariant *setup_call = NULL;
1275 struct sat_manager_queue_data q_data;
1277 gint command_id = 0, call_type = 0, confirm_text_len = 0, text_len = 0, duration = 0;
1278 gchar confirm_text[SAT_TEXT_STRING_LEN_MAX], text[SAT_TEXT_STRING_LEN_MAX], call_number[SAT_DIALING_NUMBER_LEN_MAX];
1279 GVariant *icon_id = NULL;
1281 dbg("interpreting setup call notification");
1282 memset(&confirm_text, 0 , SAT_TEXT_STRING_LEN_MAX);
1283 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
1284 memset(&call_number, 0 , SAT_DIALING_NUMBER_LEN_MAX);
1286 plg = tcore_server_find_plugin(ctx->server, plugin_name);
1288 dbg("there is no valid plugin at this point");
1292 if(setup_call_tlv->duration.time_interval > 0)
1294 struct treq_sat_terminal_rsp_data *tr = NULL;
1295 dbg("[SAT] redial is not supported.\n");
1297 tr = g_new0(struct treq_sat_terminal_rsp_data, 1);
1298 tr->cmd_number = setup_call_tlv->command_detail.cmd_num;
1299 tr->cmd_type = setup_call_tlv->command_detail.cmd_type;
1301 memcpy((void*)&tr->terminal_rsp_data.setup_call.command_detail, &setup_call_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
1302 tr->terminal_rsp_data.setup_call.device_id.src = DEVICE_ID_ME;
1303 tr->terminal_rsp_data.setup_call.device_id.dest = setup_call_tlv->device_id.src;
1304 tr->terminal_rsp_data.setup_call.result_type = RESULT_BEYOND_ME_CAPABILITIES;
1306 sat_manager_send_terminal_response(ctx->comm, plg, tr);
1311 //check for subaddress field
1312 if(setup_call_tlv->subaddress.subaddress_len > 0)
1314 struct treq_sat_terminal_rsp_data *tr = NULL;
1315 dbg("[SAT] Sub address is not supported > 0)");
1317 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
1318 tr->cmd_number = setup_call_tlv->command_detail.cmd_num;
1319 tr->cmd_type = setup_call_tlv->command_detail.cmd_type;
1321 memcpy((void*)&tr->terminal_rsp_data.setup_call.command_detail, &setup_call_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
1322 tr->terminal_rsp_data.setup_call.device_id.src = DEVICE_ID_ME;
1323 tr->terminal_rsp_data.setup_call.device_id.dest = setup_call_tlv->device_id.src;
1324 tr->terminal_rsp_data.setup_call.result_type = RESULT_BEYOND_ME_CAPABILITIES;
1326 sat_manager_send_terminal_response(ctx->comm, plg, tr);
1332 call_type = setup_call_tlv->command_detail.cmd_qualifier.setup_call.setup_call;
1335 if(setup_call_tlv->call_setup_alpha_id.alpha_data_len != 0){
1336 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
1337 setup_call_tlv->call_setup_alpha_id.dcs.a_format,
1338 (unsigned char*)&setup_call_tlv->call_setup_alpha_id.alpha_data,
1339 (unsigned short)setup_call_tlv->call_setup_alpha_id.alpha_data_len);
1342 memcpy(text, setup_call_tlv->address.dialing_number, setup_call_tlv->address.dialing_number_len);
1343 text_len = setup_call_tlv->address.dialing_number_len;
1345 dbg("setup call display text (%s)",text);
1347 if(setup_call_tlv->user_confirm_alpha_id.alpha_data_len != 0){
1348 tcore_util_convert_string_to_utf8((unsigned char*)&confirm_text,(unsigned short *)&confirm_text_len,
1349 setup_call_tlv->user_confirm_alpha_id.dcs.a_format,
1350 (unsigned char*)&setup_call_tlv->user_confirm_alpha_id.alpha_data,
1351 (unsigned short)setup_call_tlv->user_confirm_alpha_id.alpha_data_len);
1355 if(setup_call_tlv->address.ton == TON_INTERNATIONAL){
1356 call_number[0] = '+';
1357 memcpy(&call_number[1],setup_call_tlv->address.dialing_number, setup_call_tlv->address.dialing_number_len);
1360 memcpy(call_number,setup_call_tlv->address.dialing_number, setup_call_tlv->address.dialing_number_len);
1362 dbg("setup call call number(%s)",setup_call_tlv->address.dialing_number);
1365 if(setup_call_tlv->duration.time_interval > 0)
1366 duration = _get_time_in_ms(&setup_call_tlv->duration);
1368 //enqueue data and generate cmd_id
1369 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
1370 q_data.cmd_type = SAT_PROATV_CMD_SETUP_CALL;
1371 memcpy((void*)&(q_data.cmd_data.setup_call), setup_call_tlv, sizeof(struct tel_sat_setup_call_tlv));
1372 sat_manager_enqueue_cmd(ctx, &q_data);
1373 command_id = q_data.cmd_id;
1375 icon_id = g_variant_new("()");
1377 setup_call = g_variant_new("(isisivisi)", command_id, confirm_text, confirm_text_len, text, text_len, icon_id, call_type, call_number, duration);
1382 GVariant* sat_manager_setup_event_list_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_setup_event_list_tlv *event_list_tlv)
1384 TcorePlugin *plg = NULL;
1385 GVariant *event_list = NULL;
1388 gboolean rv = FALSE;
1390 GVariantBuilder *builder = NULL;
1391 GVariant *evt_list = NULL;
1392 struct treq_sat_terminal_rsp_data *tr = NULL;
1394 dbg("interpreting event list notification");
1396 plg = tcore_server_find_plugin(ctx->server, plugin_name);
1398 dbg("there is no valid plugin at this point");
1403 event_cnt = event_list_tlv->event_list.event_list_cnt;
1404 dbg("event cnt(%d)", event_cnt);
1407 builder = g_variant_builder_new(G_VARIANT_TYPE ("ai"));
1408 for (index = 0; index < event_cnt; index++) {
1409 g_variant_builder_add(builder, "i", event_list_tlv->event_list.evt_list[index]);
1411 evt_list = g_variant_builder_end(builder);
1413 event_list = g_variant_new("(iv)", event_cnt, evt_list);
1415 //send TR - does not need from application's response
1416 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
1417 tr->cmd_number = event_list_tlv->command_detail.cmd_num;
1418 tr->cmd_type = event_list_tlv->command_detail.cmd_type;
1419 memcpy((void*)&tr->terminal_rsp_data.setup_event_list.command_detail, &event_list_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
1420 tr->terminal_rsp_data.setup_event_list.device_id.src = event_list_tlv->device_id.dest;
1421 tr->terminal_rsp_data.setup_event_list.device_id.dest = event_list_tlv->device_id.src;
1422 tr->terminal_rsp_data.setup_event_list.result_type = RESULT_SUCCESS;
1423 tr->terminal_rsp_data.setup_event_list.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
1425 rv = sat_manager_check_availiable_event_list(event_list_tlv);
1426 sat_manager_send_terminal_response(ctx->comm, plg, tr);
1432 GVariant* sat_manager_setup_idle_mode_text_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_setup_idle_mode_text_tlv *idle_mode_tlv)
1434 TcorePlugin *plg = NULL;
1435 GVariant *idle_mode = NULL;
1436 struct sat_manager_queue_data q_data;
1438 gint command_id = 0;
1440 gchar text[SAT_TEXT_STRING_LEN_MAX];
1441 GVariant *icon_id = NULL;
1443 dbg("interpreting setup idle mode text notification");
1444 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
1446 plg = tcore_server_find_plugin(ctx->server, plugin_name);
1448 dbg("there is no valid plugin at this point");
1452 if( ((idle_mode_tlv->icon_id.is_exist) && ( idle_mode_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY))
1453 && idle_mode_tlv->text.string_length == 0 )
1455 struct treq_sat_terminal_rsp_data *tr = NULL;
1456 dbg("[SAT] exceptional case to fix gcf case 2.4 command not understood");
1458 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
1459 tr->cmd_number = idle_mode_tlv->command_detail.cmd_num;
1460 tr->cmd_type = idle_mode_tlv->command_detail.cmd_type;
1462 memcpy((void*)&tr->terminal_rsp_data.setup_idle_mode_text.command_detail, &idle_mode_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
1463 tr->terminal_rsp_data.setup_idle_mode_text.device_id.src = idle_mode_tlv->device_id.dest;
1464 tr->terminal_rsp_data.setup_idle_mode_text.device_id.dest = idle_mode_tlv->device_id.src;
1465 tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
1467 sat_manager_send_terminal_response(ctx->comm, plg, tr);
1472 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
1473 idle_mode_tlv->text.dcs.a_format,
1474 (unsigned char*)&idle_mode_tlv->text.string,
1475 (unsigned short)idle_mode_tlv->text.string_length);
1477 dbg("setup idle mode text display text (%s)",text);
1479 //enqueue data and generate cmd_id
1480 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
1481 q_data.cmd_type = SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT;
1482 memcpy((void*)&(q_data.cmd_data.idle_mode), idle_mode_tlv, sizeof(struct tel_sat_setup_idle_mode_text_tlv));
1483 sat_manager_enqueue_cmd(ctx, &q_data);
1484 command_id = q_data.cmd_id;
1486 icon_id = g_variant_new("()");
1488 idle_mode = g_variant_new("(isiv)", command_id, text, text_len, icon_id);
1493 GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_open_channel_tlv *open_channel_tlv)
1495 TcorePlugin *plg = NULL;
1496 GVariant *open_channel = NULL;
1497 struct sat_manager_queue_data q_data;
1499 gint command_id = 0, bearer_type = 0, protocol_type = 0, dest_addr_type = 0;
1500 gboolean immediate_link = FALSE, auto_reconnection = FALSE, bg_mode = FALSE;
1501 gint text_len = 0, buffer_size = 0, port_number = 0;
1502 gchar text[SAT_ALPHA_ID_LEN_MAX], dest_address[SAT_OTHER_ADDR_LEN_MAX];
1503 GVariant *icon_id = NULL;
1504 GVariant *bearer_param = NULL;
1505 GVariant *bearer_detail = NULL;
1507 dbg("interpreting open channel notification");
1508 memset(&text, 0 , SAT_ALPHA_ID_LEN_MAX);
1509 memset(&dest_address, 0 , SAT_OTHER_ADDR_LEN_MAX);
1511 plg = tcore_server_find_plugin(ctx->server, plugin_name);
1513 dbg("there is no valid plugin at this point");
1518 immediate_link = open_channel_tlv->command_detail.cmd_qualifier.open_channel.immediate_link;
1521 auto_reconnection = open_channel_tlv->command_detail.cmd_qualifier.open_channel.automatic_reconnection;
1524 bg_mode = open_channel_tlv->command_detail.cmd_qualifier.open_channel.background_mode;
1527 if(open_channel_tlv->alpha_id.is_exist && open_channel_tlv->alpha_id.alpha_data_len > 0)
1528 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
1529 open_channel_tlv->alpha_id.dcs.a_format,
1530 (unsigned char*)&open_channel_tlv->alpha_id.alpha_data,
1531 (unsigned short)open_channel_tlv->alpha_id.alpha_data_len);
1532 dbg("open channel text(%s)",text);
1535 buffer_size = open_channel_tlv->buffer_size.size[0];
1536 buffer_size = buffer_size << 8;
1537 buffer_size += open_channel_tlv->buffer_size.size[1];
1538 //memcpy(&buffer_size, open_channel_tlv->buffer_size.size, sizeof(unsigned char)*2);
1539 dbg("buffer size(%d)", buffer_size);
1541 //interface transport level
1542 protocol_type = open_channel_tlv->interface_transport_level.protocol_type;
1543 port_number = open_channel_tlv->interface_transport_level.port_number;
1545 //data destination address
1546 dest_addr_type = open_channel_tlv->data_destination_address.address_type;
1547 memcpy(dest_address, open_channel_tlv->data_destination_address.address, open_channel_tlv->data_destination_address.address_len);
1548 dbg("destination IP address (%s)", dest_address);
1551 bearer_type = open_channel_tlv->bearer_desc.bearer_type;
1553 //bearer param & bearer detail
1554 switch(bearer_type){
1557 gint data_rate = 0, service_type = 0, conn_element_type = 0;
1560 gint ton = 0, npi = 0, time_duration1 = 0, time_duration2 = 0, other_addr_type = 0;
1561 gint login_len = 0, pwd_len = 0;
1562 gchar dialling_number[SAT_DIALING_NUMBER_LEN_MAX], sub_addr[SAT_SUB_ADDR_LEN_MAX];
1563 gchar other_address[SAT_OTHER_ADDR_LEN_MAX];
1564 gchar login[SAT_TEXT_STRING_LEN_MAX], pwd[SAT_TEXT_STRING_LEN_MAX];
1566 memset(&dialling_number, 0 , SAT_DIALING_NUMBER_LEN_MAX);
1567 memset(&sub_addr, 0 , SAT_SUB_ADDR_LEN_MAX);
1568 memset(&other_address, 0 , SAT_OTHER_ADDR_LEN_MAX);
1569 memset(&login, 0 , SAT_TEXT_STRING_LEN_MAX);
1570 memset(&pwd, 0 , SAT_TEXT_STRING_LEN_MAX);
1573 data_rate = open_channel_tlv->bearer_desc.bearer_parameter.cs_bearer_param.data_rate;
1574 service_type = open_channel_tlv->bearer_desc.bearer_parameter.cs_bearer_param.service_type;
1575 conn_element_type = open_channel_tlv->bearer_desc.bearer_parameter.cs_bearer_param.connection_element_type;
1577 bearer_param = g_variant_new("(iii)", data_rate, service_type, conn_element_type);
1580 ton = open_channel_tlv->bearer_detail.cs_bearer.address.ton;
1581 npi = open_channel_tlv->bearer_detail.cs_bearer.address.npi;
1582 memcpy(dialling_number, open_channel_tlv->bearer_detail.cs_bearer.address.dialing_number, open_channel_tlv->bearer_detail.cs_bearer.address.dialing_number_len);
1584 memcpy(sub_addr, open_channel_tlv->bearer_detail.cs_bearer.subaddress.subaddress, open_channel_tlv->bearer_detail.cs_bearer.subaddress.subaddress_len);
1586 time_duration1 = _get_time_in_ms(&open_channel_tlv->bearer_detail.cs_bearer.duration1);
1587 time_duration2 = _get_time_in_ms(&open_channel_tlv->bearer_detail.cs_bearer.duration2);
1589 other_addr_type = open_channel_tlv->bearer_detail.cs_bearer.other_address.address_type;
1590 memcpy(other_address, open_channel_tlv->bearer_detail.cs_bearer.other_address.address, open_channel_tlv->bearer_detail.cs_bearer.other_address.address_len);
1592 tcore_util_convert_string_to_utf8((unsigned char*) &login, (unsigned short *) &login_len,
1593 open_channel_tlv->bearer_detail.cs_bearer.text_user_login.dcs.a_format,
1594 (unsigned char*) &open_channel_tlv->bearer_detail.cs_bearer.text_user_login.string,
1595 (unsigned short) open_channel_tlv->bearer_detail.cs_bearer.text_user_login.string_length);
1597 tcore_util_convert_string_to_utf8((unsigned char*) &pwd, (unsigned short *) &pwd_len,
1598 open_channel_tlv->bearer_detail.cs_bearer.text_user_pwd.dcs.a_format,
1599 (unsigned char*) &open_channel_tlv->bearer_detail.cs_bearer.text_user_pwd.string,
1600 (unsigned short) open_channel_tlv->bearer_detail.cs_bearer.text_user_pwd.string_length);
1602 bearer_detail= g_variant_new("(iissiiisss)", ton, npi, dialling_number, sub_addr, time_duration1, time_duration2,
1603 other_addr_type, other_address, login, pwd);
1607 gint precedence_class = 0, delay_class = 0, reliability_class = 0;
1608 gint peak_class = 0, mean_class = 0, pdp_type = 0;
1611 gint other_addr_type = 0;
1612 gint login_len = 0, pwd_len = 0;
1613 gchar network_access_name[SAT_NET_ACC_NAM_LEN_MAX];
1614 gchar other_address[SAT_OTHER_ADDR_LEN_MAX];
1615 gchar login[SAT_TEXT_STRING_LEN_MAX], pwd[SAT_TEXT_STRING_LEN_MAX];
1617 memset(&network_access_name, 0 , SAT_NET_ACC_NAM_LEN_MAX);
1618 memset(&other_address, 0 , SAT_OTHER_ADDR_LEN_MAX);
1619 memset(&login, 0 , SAT_TEXT_STRING_LEN_MAX);
1620 memset(&pwd, 0 , SAT_TEXT_STRING_LEN_MAX);
1623 precedence_class = open_channel_tlv->bearer_desc.bearer_parameter.ps_bearer_param.precedence_class;
1624 delay_class = open_channel_tlv->bearer_desc.bearer_parameter.ps_bearer_param.delay_class;
1625 reliability_class = open_channel_tlv->bearer_desc.bearer_parameter.ps_bearer_param.reliability_class;
1626 peak_class = open_channel_tlv->bearer_desc.bearer_parameter.ps_bearer_param.peak_throughput_class;
1627 mean_class = open_channel_tlv->bearer_desc.bearer_parameter.ps_bearer_param.mean_throughput_class;
1628 pdp_type = open_channel_tlv->bearer_desc.bearer_parameter.ps_bearer_param.pdp_type;
1630 bearer_param = g_variant_new("(iiiiii)", precedence_class, delay_class, reliability_class, peak_class, mean_class, pdp_type);
1632 memcpy(network_access_name, open_channel_tlv->bearer_detail.ps_bearer.network_access_name.network_access_name, open_channel_tlv->bearer_detail.ps_bearer.network_access_name.length);
1634 other_addr_type = open_channel_tlv->bearer_detail.ps_bearer.other_address.address_type;
1635 memcpy(other_address, open_channel_tlv->bearer_detail.ps_bearer.other_address.address, open_channel_tlv->bearer_detail.ps_bearer.other_address.address_len);
1637 tcore_util_convert_string_to_utf8((unsigned char*) &login, (unsigned short *) &login_len,
1638 open_channel_tlv->bearer_detail.ps_bearer.text_user_login.dcs.a_format,
1639 (unsigned char*) &open_channel_tlv->bearer_detail.ps_bearer.text_user_login.string,
1640 (unsigned short) open_channel_tlv->bearer_detail.ps_bearer.text_user_login.string_length);
1642 tcore_util_convert_string_to_utf8((unsigned char*) &pwd, (unsigned short *) &pwd_len,
1643 open_channel_tlv->bearer_detail.ps_bearer.text_user_pwd.dcs.a_format,
1644 (unsigned char*) &open_channel_tlv->bearer_detail.ps_bearer.text_user_pwd.string,
1645 (unsigned short) open_channel_tlv->bearer_detail.ps_bearer.text_user_pwd.string_length);
1647 bearer_detail= g_variant_new("(sisss)", network_access_name, other_addr_type, other_address, login, pwd);
1650 case BEARER_DEFAULT_BEARER_FROM_TRANSPORT_LAYER:{
1654 gint other_addr_type = 0;
1655 gint login_len = 0, pwd_len = 0;
1656 gchar other_address[SAT_OTHER_ADDR_LEN_MAX];
1657 gchar login[SAT_TEXT_STRING_LEN_MAX], pwd[SAT_TEXT_STRING_LEN_MAX];
1659 memset(&other_address, 0 , SAT_OTHER_ADDR_LEN_MAX);
1660 memset(&login, 0 , SAT_TEXT_STRING_LEN_MAX);
1661 memset(&pwd, 0 , SAT_TEXT_STRING_LEN_MAX);
1664 bearer_param = g_variant_new("()");
1666 other_addr_type = open_channel_tlv->bearer_detail.default_bearer.other_address.address_type;
1667 memcpy(other_address, open_channel_tlv->bearer_detail.default_bearer.other_address.address, open_channel_tlv->bearer_detail.default_bearer.other_address.address_len);
1669 tcore_util_convert_string_to_utf8((unsigned char*) &login, (unsigned short *) &login_len,
1670 open_channel_tlv->bearer_detail.default_bearer.text_user_login.dcs.a_format,
1671 (unsigned char*) &open_channel_tlv->bearer_detail.default_bearer.text_user_login.string,
1672 (unsigned short) open_channel_tlv->bearer_detail.default_bearer.text_user_login.string_length);
1674 tcore_util_convert_string_to_utf8((unsigned char*) &pwd, (unsigned short *) &pwd_len,
1675 open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.dcs.a_format,
1676 (unsigned char*) &open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.string,
1677 (unsigned short) open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.string_length);
1679 bearer_detail= g_variant_new("(isss)", other_addr_type, other_address, login, pwd);
1682 case BEARER_LOCAL_LINK_TECHNOLOGY_INDEPENDENT:{
1687 gint remote_address_type =0, time_duration1 = 0, time_duration2 = 0;
1688 gchar remote_address[SAT_REMOTE_ENTITY_ADDR_LEN_MAX];
1689 gchar pwd[SAT_TEXT_STRING_LEN_MAX];
1691 memset(&remote_address, 0 , SAT_REMOTE_ENTITY_ADDR_LEN_MAX);
1692 memset(&pwd, 0 , SAT_TEXT_STRING_LEN_MAX);
1695 bearer_param = g_variant_new("()");
1697 time_duration1 = _get_time_in_ms(&open_channel_tlv->bearer_detail.local_bearer.duration1);
1698 time_duration2 = _get_time_in_ms(&open_channel_tlv->bearer_detail.local_bearer.duration2);
1700 tcore_util_convert_string_to_utf8((unsigned char*) &pwd, (unsigned short *) &pwd_len,
1701 open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.dcs.a_format,
1702 (unsigned char*) &open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.string,
1703 (unsigned short) open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.string_length);
1705 remote_address_type = open_channel_tlv->bearer_detail.local_bearer.remote_entity_address.coding_type;
1706 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);
1708 bearer_detail= g_variant_new("(iisis)", time_duration1, time_duration2, pwd, remote_address_type, remote_address);
1712 dbg("invalid bearer data");
1716 //enqueue data and generate cmd_id
1717 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
1718 q_data.cmd_type = SAT_PROATV_CMD_OPEN_CHANNEL;
1719 memcpy((void*)&(q_data.cmd_data.open_channel), open_channel_tlv, sizeof(struct tel_sat_open_channel_tlv));
1720 sat_manager_enqueue_cmd(ctx, &q_data);
1721 command_id = q_data.cmd_id;
1723 icon_id = g_variant_new("()");
1726 //sat_ui_support_exec_bip();
1728 open_channel = g_variant_new("(isivbbbiviiiisv)", command_id, text, text_len, icon_id, immediate_link, auto_reconnection, bg_mode,
1729 bearer_type, bearer_param, buffer_size, protocol_type, port_number, dest_addr_type, dest_address, bearer_detail);
1731 return open_channel;
1734 GVariant* sat_manager_close_channel_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_close_channel_tlv *close_channel_tlv)
1736 TcorePlugin *plg = NULL;
1737 GVariant *close_channel = NULL;
1738 struct sat_manager_queue_data q_data;
1740 gint command_id = 0, channel_id = 0;
1742 gchar text[SAT_ALPHA_ID_LEN_MAX];
1743 GVariant *icon_id = NULL;
1745 dbg("interpreting close channel notification");
1746 memset(&text, 0 , SAT_ALPHA_ID_LEN_MAX);
1748 plg = tcore_server_find_plugin(ctx->server, plugin_name);
1750 dbg("there is no valid plugin at this point");
1755 channel_id = close_channel_tlv->device_id.dest;
1757 //close channel text
1758 if(close_channel_tlv->alpha_id.is_exist && close_channel_tlv->alpha_id.alpha_data_len > 0)
1759 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
1760 close_channel_tlv->alpha_id.dcs.a_format,
1761 (unsigned char*)&close_channel_tlv->alpha_id.alpha_data,
1762 (unsigned short)close_channel_tlv->alpha_id.alpha_data_len);
1763 dbg("close channel text(%s)",text);
1765 //enqueue data and generate cmd_id
1766 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
1767 q_data.cmd_type = SAT_PROATV_CMD_CLOSE_CHANNEL;
1768 memcpy((void*)&(q_data.cmd_data.close_channel), close_channel_tlv, sizeof(struct tel_sat_close_channel_tlv));
1769 sat_manager_enqueue_cmd(ctx, &q_data);
1770 command_id = q_data.cmd_id;
1772 icon_id = g_variant_new("()");
1774 close_channel = g_variant_new("(isivi)", command_id, text, text_len, icon_id, channel_id);
1776 return close_channel;
1779 GVariant* sat_manager_receive_data_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_receive_channel_tlv *receive_data_tlv)
1781 TcorePlugin *plg = NULL;
1782 GVariant *receive_data = NULL;
1783 struct sat_manager_queue_data q_data;
1785 gint command_id = 0, channel_id = 0;
1786 gint text_len = 0, channel_data_len = 0;
1787 gchar text[SAT_ALPHA_ID_LEN_MAX];
1788 GVariant *icon_id = NULL;
1790 dbg("interpreting receive data notification");
1791 memset(&text, 0 , SAT_ALPHA_ID_LEN_MAX);
1793 plg = tcore_server_find_plugin(ctx->server, plugin_name);
1795 dbg("there is no valid plugin at this point");
1800 channel_id = receive_data_tlv->device_id.dest;
1803 if(receive_data_tlv->alpha_id.is_exist && receive_data_tlv->alpha_id.alpha_data_len > 0)
1804 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
1805 receive_data_tlv->alpha_id.dcs.a_format,
1806 (unsigned char*)&receive_data_tlv->alpha_id.alpha_data,
1807 (unsigned short)receive_data_tlv->alpha_id.alpha_data_len);
1808 dbg("receive data text(%s)",text);
1810 channel_data_len = receive_data_tlv->channel_data_len.data_len;
1812 //enqueue data and generate cmd_id
1813 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
1814 q_data.cmd_type = SAT_PROATV_CMD_RECEIVE_DATA;
1815 memcpy((void*)&(q_data.cmd_data.receive_data), receive_data_tlv, sizeof(struct tel_sat_receive_channel_tlv));
1816 sat_manager_enqueue_cmd(ctx, &q_data);
1817 command_id = q_data.cmd_id;
1819 icon_id = g_variant_new("()");
1821 receive_data = g_variant_new("(isivii)", command_id, text, text_len, icon_id, channel_id, channel_data_len);
1823 return receive_data;
1826 GVariant* sat_manager_send_data_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_send_channel_tlv *send_data_tlv)
1828 TcorePlugin *plg = NULL;
1829 GVariant *send_data = NULL;
1830 struct sat_manager_queue_data q_data;
1833 gint command_id = 0, channel_id = 0, data_len = 0;
1834 gboolean send_data_immediately = FALSE;
1836 gchar text[SAT_ALPHA_ID_LEN_MAX];
1837 GVariantBuilder *builder = NULL;
1838 GVariant *channel_data = NULL;
1839 GVariant *icon_id = NULL;
1841 dbg("interpreting send data notification");
1842 memset(&text, 0 , SAT_ALPHA_ID_LEN_MAX);
1844 plg = tcore_server_find_plugin(ctx->server, plugin_name);
1846 dbg("there is no valid plugin at this point");
1850 //send data immediately
1851 send_data_immediately = send_data_tlv->command_detail.cmd_qualifier.send_data.send_data_immediately;
1854 channel_id = send_data_tlv->device_id.dest;
1857 if(send_data_tlv->alpha_id.is_exist && send_data_tlv->alpha_id.alpha_data_len > 0)
1858 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
1859 send_data_tlv->alpha_id.dcs.a_format,
1860 (unsigned char*)&send_data_tlv->alpha_id.alpha_data,
1861 (unsigned short)send_data_tlv->alpha_id.alpha_data_len);
1862 dbg("send data text(%s)",text);
1864 //channel data, data len
1865 data_len = send_data_tlv->channel_data.data_string_len;
1866 builder = g_variant_builder_new(G_VARIANT_TYPE ("ay"));
1867 for (index = 0; index < data_len; index++) {
1868 dbg("send data index(%d) data(0x%x)",index, send_data_tlv->channel_data.data_string[index]);
1869 g_variant_builder_add(builder, "y", send_data_tlv->channel_data.data_string[index]);
1871 channel_data = g_variant_builder_end(builder);
1873 //enqueue data and generate cmd_id
1874 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
1875 q_data.cmd_type = SAT_PROATV_CMD_SEND_DATA;
1876 memcpy((void*)&(q_data.cmd_data.send_data), send_data_tlv, sizeof(struct tel_sat_send_channel_tlv));
1877 sat_manager_enqueue_cmd(ctx, &q_data);
1878 command_id = q_data.cmd_id;
1880 icon_id = g_variant_new("()");
1882 send_data = g_variant_new("(isivibvi)", command_id, text, text_len, icon_id, channel_id, send_data_immediately, channel_data, data_len);
1887 GVariant* sat_manager_get_channel_status_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_get_channel_status_tlv *get_channel_status_tlv)
1889 TcorePlugin *plg = NULL;
1890 GVariant *get_channel_status = NULL;
1891 struct sat_manager_queue_data q_data;
1893 gint command_id = 0;
1895 dbg("interpreting get channel status notification");
1897 plg = tcore_server_find_plugin(ctx->server, plugin_name);
1899 dbg("there is no valid plugin at this point");
1903 //enqueue data and generate cmd_id
1904 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
1905 q_data.cmd_type = SAT_PROATV_CMD_GET_CHANNEL_STATUS;
1906 memcpy((void*)&(q_data.cmd_data.get_channel_status), get_channel_status_tlv, sizeof(struct tel_sat_get_channel_status_tlv));
1907 sat_manager_enqueue_cmd(ctx, &q_data);
1908 command_id = q_data.cmd_id;
1910 get_channel_status = g_variant_new("(i)", command_id);
1912 return get_channel_status;
1915 GVariant* sat_manager_refresh_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_refresh_tlv *refresh_tlv)
1917 TcorePlugin *plg = NULL;
1918 GVariant *refresh = NULL;
1919 struct sat_manager_queue_data q_data;
1921 gint command_id = 0;
1922 gint refresh_type =0;
1923 GVariantBuilder *builder = NULL;
1924 GVariant *file_list = NULL;
1927 dbg("interpreting refresh notification");
1929 plg = tcore_server_find_plugin(ctx->server, plugin_name);
1931 dbg("there is no valid plugin at this point");
1935 refresh_type = refresh_tlv->command_detail.cmd_qualifier.refresh.refresh;
1937 builder = g_variant_builder_new(G_VARIANT_TYPE ("ai"));
1938 for (index = 0; index < refresh_tlv->file_list.file_count; index++) {
1939 g_variant_builder_add(builder, "i", refresh_tlv->file_list.file_id[index]);
1941 file_list = g_variant_builder_end(builder);
1943 //enqueue data and generate cmd_id
1944 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
1945 q_data.cmd_type = SAT_PROATV_CMD_REFRESH;
1946 memcpy((void*)&(q_data.cmd_data.refresh), refresh_tlv, sizeof(struct tel_sat_refresh_tlv));
1947 sat_manager_enqueue_cmd(ctx, &q_data);
1948 command_id = q_data.cmd_id;
1950 refresh = g_variant_new("(iiv)", command_id, refresh_type, file_list);
1955 void sat_manager_more_time_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_more_time_tlv *more_time_tlv)
1957 TcorePlugin *plg = NULL;
1958 struct treq_sat_terminal_rsp_data *tr = NULL;
1960 dbg("interpreting more time notification");
1962 plg = tcore_server_find_plugin(ctx->server, plugin_name);
1964 dbg("there is no valid plugin at this point");
1967 //send TR - does not need from application's response
1968 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
1969 tr->cmd_number = more_time_tlv->command_detail.cmd_num;
1970 tr->cmd_type = more_time_tlv->command_detail.cmd_type;
1971 memcpy((void*)&tr->terminal_rsp_data.more_time.command_detail, &more_time_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
1972 tr->terminal_rsp_data.more_time.device_id.src = more_time_tlv->device_id.dest;
1973 tr->terminal_rsp_data.more_time.device_id.dest = more_time_tlv->device_id.src;
1974 tr->terminal_rsp_data.more_time.result_type = RESULT_SUCCESS;
1975 tr->terminal_rsp_data.more_time.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
1977 sat_manager_send_terminal_response(ctx->comm, plg, tr);
1983 GVariant* sat_manager_send_dtmf_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_send_dtmf_tlv *send_dtmf_tlv)
1985 TcorePlugin *plg = NULL;
1986 GVariant *send_dtmf = NULL;
1987 struct sat_manager_queue_data q_data;
1989 gint command_id = 0;
1990 gint text_len =0, dtmf_str_len =0;
1991 gchar text[SAT_TEXT_STRING_LEN_MAX], dtmf_str[SAT_DTMF_STRING_LEN_MAX];
1992 GVariant *icon_id = NULL;
1994 dbg("interpreting send dtmf notification");
1995 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
1996 memset(&dtmf_str, 0 , SAT_DTMF_STRING_LEN_MAX);
1998 plg = tcore_server_find_plugin(ctx->server, plugin_name);
2000 dbg("there is no valid plugin at this point");
2004 if( (send_dtmf_tlv->icon_id.is_exist) && ( send_dtmf_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
2005 && (!send_dtmf_tlv->alpha_id.is_exist || !send_dtmf_tlv->alpha_id.alpha_data_len))
2007 struct treq_sat_terminal_rsp_data *tr = NULL;
2008 dbg("[SAT] exceptional case to fix gcf case 2.4 command not understood");
2010 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
2011 tr->cmd_number = send_dtmf_tlv->command_detail.cmd_num;
2012 tr->cmd_type = send_dtmf_tlv->command_detail.cmd_type;
2014 memcpy((void*)&tr->terminal_rsp_data.send_dtmf.command_detail, &send_dtmf_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
2015 tr->terminal_rsp_data.send_dtmf.device_id.src = send_dtmf_tlv->device_id.dest;
2016 tr->terminal_rsp_data.send_dtmf.device_id.dest = send_dtmf_tlv->device_id.src;
2017 tr->terminal_rsp_data.send_dtmf.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
2019 sat_manager_send_terminal_response(ctx->comm, plg, tr);
2026 if( send_dtmf_tlv->alpha_id.is_exist && send_dtmf_tlv->alpha_id.alpha_data_len){
2027 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
2028 send_dtmf_tlv->alpha_id.dcs.a_format,
2029 (unsigned char*)&send_dtmf_tlv->alpha_id.alpha_data,
2030 (unsigned short)send_dtmf_tlv->alpha_id.alpha_data_len);
2031 dbg("send dtmf ui display text (%s)",text);
2034 //dtmf string len, dtmf string
2035 dtmf_str_len = send_dtmf_tlv->dtmf_string.dtmf_length;
2036 memcpy(dtmf_str, send_dtmf_tlv->dtmf_string.dtmf_string, SAT_DTMF_STRING_LEN_MAX);
2038 //enqueue data and generate cmd_id
2039 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
2040 q_data.cmd_type = SAT_PROATV_CMD_SEND_DTMF;
2041 memcpy((void*)&(q_data.cmd_data.send_dtmf), send_dtmf_tlv, sizeof(struct tel_sat_send_dtmf_tlv));
2042 sat_manager_enqueue_cmd(ctx, &q_data);
2043 command_id = q_data.cmd_id;
2045 icon_id = g_variant_new("()");
2047 send_dtmf = g_variant_new("(isivis)", command_id, text, text_len, icon_id,
2048 dtmf_str_len, dtmf_str);
2053 GVariant* sat_manager_launch_browser_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_launch_browser_tlv *launch_browser_tlv)
2055 TcorePlugin *plg = NULL;
2056 GVariant *launch_browser = NULL;
2057 struct sat_manager_queue_data q_data;
2059 gint command_id = 0;
2060 gint browser_launch_type = 0, browser_id = 0;
2061 gint url_len =0, text_len =0, gateway_proxy_len =0;
2062 gchar url[SAT_URL_LEN_MAX], text[SAT_TEXT_STRING_LEN_MAX], gateway_proxy[SAT_TEXT_STRING_LEN_MAX];
2063 GVariant *icon_id = NULL;
2065 dbg("interpreting launch browser notification");
2066 memset(&url, 0 , SAT_URL_LEN_MAX);
2067 memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
2068 memset(&gateway_proxy, 0 , SAT_TEXT_STRING_LEN_MAX);
2070 plg = tcore_server_find_plugin(ctx->server, plugin_name);
2072 dbg("there is no valid plugin at this point");
2076 if( (launch_browser_tlv->user_confirm_icon_id.is_exist) && ( launch_browser_tlv->user_confirm_icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
2077 && (!launch_browser_tlv->user_confirm_alpha_id.is_exist || !launch_browser_tlv->user_confirm_alpha_id.alpha_data_len))
2079 struct treq_sat_terminal_rsp_data *tr = NULL;
2080 dbg("[SAT] exceptional case to fix gcf case 2.4 command not understood");
2082 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
2083 tr->cmd_number = launch_browser_tlv->command_detail.cmd_num;
2084 tr->cmd_type = launch_browser_tlv->command_detail.cmd_type;
2086 memcpy((void*)&tr->terminal_rsp_data.launch_browser.command_detail, &launch_browser_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
2087 tr->terminal_rsp_data.launch_browser.device_id.src = launch_browser_tlv->device_id.dest;
2088 tr->terminal_rsp_data.launch_browser.device_id.dest = launch_browser_tlv->device_id.src;
2089 tr->terminal_rsp_data.launch_browser.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
2091 sat_manager_send_terminal_response(ctx->comm, plg, tr);
2097 //browser launch type
2098 browser_launch_type = launch_browser_tlv->command_detail.cmd_qualifier.launch_browser.launch_browser;
2101 browser_id = launch_browser_tlv->browser_id;
2104 if( launch_browser_tlv->url.url_length){
2105 url_len = launch_browser_tlv->url.url_length;
2106 memcpy(url, launch_browser_tlv->url.url, launch_browser_tlv->url.url_length);
2107 dbg("launch browser url (%s)",url);
2110 //gateway_proxy_text
2111 if(launch_browser_tlv->gateway_proxy_text.is_digit_only) {
2112 memcpy(gateway_proxy, launch_browser_tlv->gateway_proxy_text.string, launch_browser_tlv->gateway_proxy_text.string_length);
2113 dbg("launch browser gateway_proxy digit type string (%s)",gateway_proxy);
2115 if( launch_browser_tlv->gateway_proxy_text.string_length){
2116 tcore_util_convert_string_to_utf8((unsigned char*)&gateway_proxy,(unsigned short *)&gateway_proxy_len,
2117 launch_browser_tlv->gateway_proxy_text.dcs.a_format,
2118 (unsigned char*)&launch_browser_tlv->gateway_proxy_text.string,
2119 (unsigned short)launch_browser_tlv->gateway_proxy_text.string_length);
2120 dbg("launch browser gateway_proxy_text (%s)",gateway_proxy);
2124 //user confirm text and user confirm text len
2125 if( launch_browser_tlv->user_confirm_alpha_id.is_exist && launch_browser_tlv->user_confirm_alpha_id.alpha_data_len){
2126 tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
2127 launch_browser_tlv->user_confirm_alpha_id.dcs.a_format,
2128 (unsigned char*)&launch_browser_tlv->user_confirm_alpha_id.alpha_data,
2129 (unsigned short)launch_browser_tlv->user_confirm_alpha_id.alpha_data_len);
2130 dbg("launch browser user confirm text (%s)",text);
2133 //enqueue data and generate cmd_id
2134 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
2135 q_data.cmd_type = SAT_PROATV_CMD_LAUNCH_BROWSER;
2136 memcpy((void*)&(q_data.cmd_data.launch_browser), launch_browser_tlv, sizeof(struct tel_sat_launch_browser_tlv));
2137 sat_manager_enqueue_cmd(ctx, &q_data);
2138 command_id = q_data.cmd_id;
2140 icon_id = g_variant_new("()");
2142 launch_browser = g_variant_new("(iiisisisiv)",
2143 command_id, browser_launch_type, browser_id, url, url_len, gateway_proxy, gateway_proxy_len, text, text_len, icon_id);
2145 return launch_browser;
2148 GVariant* sat_manager_provide_local_info_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_provide_local_info_tlv *provide_local_info_tlv)
2150 TcorePlugin *plg = NULL;
2151 GVariant *provide_info = NULL;
2154 struct treq_sat_terminal_rsp_data *tr = NULL;
2156 dbg("interpreting provide local info notification");
2158 plg = tcore_server_find_plugin(ctx->server, plugin_name);
2160 dbg("there is no valid plugin at this point");
2164 provide_info = g_variant_new("(i)", info_type);
2166 //send TR - does not need from application's response
2167 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
2168 tr->cmd_number = provide_local_info_tlv->command_detail.cmd_num;
2169 tr->cmd_type = provide_local_info_tlv->command_detail.cmd_type;
2170 memcpy((void*)&tr->terminal_rsp_data.provide_local_info.command_detail, &provide_local_info_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
2171 tr->terminal_rsp_data.provide_local_info.device_id.src = provide_local_info_tlv->device_id.dest;
2172 tr->terminal_rsp_data.provide_local_info.device_id.dest = provide_local_info_tlv->device_id.src;
2173 tr->terminal_rsp_data.provide_local_info.other_info = TRUE;
2175 info_type = provide_local_info_tlv->command_detail.cmd_qualifier.provide_local_info.provide_local_info;
2178 case LOCAL_INFO_DATE_TIME_AND_TIMEZONE:{
2179 int err = 0; int gmt = 0, n_flg = 0;
2180 struct timezone c_tz;
2181 struct timeval c_time;
2184 struct tm time_info;
2189 err = gettimeofday(&c_time, &c_tz);
2190 localtime_r(&time_val, &time_info);
2192 //set the time information
2193 tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.year =
2194 _convert_decimal_to_bcd(time_info.tm_year+1900-2000);
2196 tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.month =
2197 _convert_decimal_to_bcd(time_info.tm_mon+1);
2199 tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.day =
2200 _convert_decimal_to_bcd(time_info.tm_mday);
2202 tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.hour =
2203 _convert_decimal_to_bcd(time_info.tm_hour);
2205 tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.minute =
2206 _convert_decimal_to_bcd(time_info.tm_min);
2208 tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.second =
2209 _convert_decimal_to_bcd(time_info.tm_sec);
2211 gmt = c_tz.tz_minuteswest/60;
2218 tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.timeZone = 0xFF;
2221 tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.timeZone =
2222 _convert_decimal_to_bcd(gmt);
2225 tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.timeZone += 0x80;
2228 if(time_info.tm_isdst > 0){
2229 tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.timeZone += 0x40;
2233 tr->terminal_rsp_data.provide_local_info.result_type = RESULT_SUCCESS;
2234 tr->terminal_rsp_data.provide_local_info.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2236 case LOCAL_INFO_LANGUAGE:{
2238 static Storage *strg;
2239 gchar *lang_str = NULL;
2240 enum tel_sim_language_type lang_type = SIM_LANG_UNSPECIFIED;
2242 tr->terminal_rsp_data.provide_local_info.result_type = RESULT_SUCCESS;
2243 tr->terminal_rsp_data.provide_local_info.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2246 strg = tcore_server_find_storage(s, "vconf");
2247 lang_str = tcore_storage_get_string(strg, STORAGE_KEY_LANGUAGE_SET);
2249 lang_type = _convert_string_to_sim_lang(lang_str);
2251 tr->terminal_rsp_data.provide_local_info.other.language = lang_type;
2254 tr->terminal_rsp_data.provide_local_info.other_info = FALSE;
2255 tr->terminal_rsp_data.provide_local_info.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
2256 tr->terminal_rsp_data.provide_local_info.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2260 sat_manager_send_terminal_response(ctx->comm, plg, tr);
2263 return provide_info;
2266 GVariant* sat_manager_language_notification_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_language_notification_tlv *language_notification_tlv)
2268 TcorePlugin *plg = NULL;
2269 GVariant *language_noti = NULL;
2270 struct sat_manager_queue_data q_data;
2272 gint command_id = 0;
2274 gboolean b_specified = FALSE;
2276 dbg("interpreting langauge notification");
2278 plg = tcore_server_find_plugin(ctx->server, plugin_name);
2280 dbg("there is no valid plugin at this point");
2284 if (language_notification_tlv->command_detail.cmd_qualifier.language_notification.specific_language == TRUE){
2286 language = language_notification_tlv->language;
2288 b_specified = FALSE;
2289 language =SIM_LANG_UNSPECIFIED;
2292 //enqueue data and generate cmd_id
2293 memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
2294 q_data.cmd_type = SAT_PROATV_CMD_LANGUAGE_NOTIFICATION;
2295 memcpy((void*)&(q_data.cmd_data.language_notification), language_notification_tlv, sizeof(struct tel_sat_language_notification_tlv));
2296 sat_manager_enqueue_cmd(ctx, &q_data);
2297 command_id = q_data.cmd_id;
2299 language_noti = g_variant_new("(iib)", command_id, language, b_specified);
2301 return language_noti;
2304 static gboolean _sat_manager_handle_setup_menu_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
2306 TReturn rv = TCORE_RETURN_FAILURE;
2307 gboolean result = FALSE;
2310 struct treq_sat_terminal_rsp_data *tr;
2311 struct sat_manager_queue_data q_data;
2313 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
2315 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
2316 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
2321 dbg("[SAT] setup menu result data is null");
2326 dbg("there is no valid plugin at this point");
2330 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
2331 g_variant_get(exec_result, "(i)", &resp);
2333 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
2334 tr->cmd_number = q_data.cmd_data.setupMenuInd.command_detail.cmd_num;
2335 tr->cmd_type = q_data.cmd_data.setupMenuInd.command_detail.cmd_type;
2337 memcpy((void*)&tr->terminal_rsp_data.setup_menu.command_detail,
2338 &q_data.cmd_data.setupMenuInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
2340 tr->terminal_rsp_data.setup_menu.device_id.src = q_data.cmd_data.setupMenuInd.device_id.dest;
2341 tr->terminal_rsp_data.setup_menu.device_id.dest = q_data.cmd_data.setupMenuInd.device_id.src;
2343 dbg("[SAT] Response: [0x%02x]", resp);
2346 case RESULT_SUCCESS:
2347 tr->terminal_rsp_data.setup_menu.result_type = RESULT_SUCCESS;
2348 if (q_data.cmd_data.setupMenuInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
2349 tr->terminal_rsp_data.setup_menu.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
2350 tr->terminal_rsp_data.setup_menu.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2353 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
2354 tr->terminal_rsp_data.setup_menu.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
2355 tr->terminal_rsp_data.setup_menu.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2359 //check the default case
2360 tr->terminal_rsp_data.setup_menu.result_type = resp;
2361 tr->terminal_rsp_data.setup_menu.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2362 dbg("[SAT] wrong result from app exec resp(%d)", resp);
2367 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
2368 if(rv != TCORE_RETURN_SUCCESS){
2369 dbg("fail to send terminal response");
2378 static gboolean _sat_manager_handle_display_text_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
2380 TReturn rv = TCORE_RETURN_FAILURE;
2381 gboolean result = FALSE;
2383 gint resp, me_problem;
2384 struct treq_sat_terminal_rsp_data *tr;
2385 struct sat_manager_queue_data q_data;
2387 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
2389 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
2390 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
2395 dbg("[SAT] display text result data is null");
2400 dbg("there is no valid plugin at this point");
2404 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
2405 g_variant_get(exec_result, "(ii)",&resp, &me_problem);
2407 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
2408 tr->cmd_number = q_data.cmd_data.displayTextInd.command_detail.cmd_num;
2409 tr->cmd_type = q_data.cmd_data.displayTextInd.command_detail.cmd_type;
2410 memcpy((void*)&tr->terminal_rsp_data.display_text.command_detail, &q_data.cmd_data.displayTextInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
2411 tr->terminal_rsp_data.display_text.device_id.src = DEVICE_ID_ME;
2412 tr->terminal_rsp_data.display_text.device_id.dest = DEVICE_ID_SIM;
2415 case RESULT_SUCCESS:
2416 tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS;
2417 tr->terminal_rsp_data.display_text.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2420 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
2421 tr->terminal_rsp_data.display_text.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
2422 tr->terminal_rsp_data.display_text.me_problem_type = me_problem;
2426 tr->terminal_rsp_data.display_text.result_type = resp;
2427 tr->terminal_rsp_data.display_text.me_problem_type = me_problem;
2428 dbg("[SAT] wrong result from app exec resp(%d) me_problem(%d)", resp, me_problem);
2432 if (q_data.cmd_data.displayTextInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
2433 tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
2436 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
2437 if(rv != TCORE_RETURN_SUCCESS){
2438 dbg("fail to send terminal response");
2447 static gboolean _sat_manager_handle_play_tone_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
2449 TReturn rv = TCORE_RETURN_FAILURE;
2450 gboolean result = FALSE;
2452 gint resp, me_problem;
2453 struct treq_sat_terminal_rsp_data *tr;
2454 struct sat_manager_queue_data q_data;
2456 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
2458 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
2459 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
2464 dbg("[SAT] display text result data is null");
2469 dbg("there is no valid plugin at this point");
2473 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
2474 g_variant_get(exec_result, "(ii)",&resp, &me_problem);
2476 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
2477 tr->cmd_number = q_data.cmd_data.play_tone.command_detail.cmd_num;
2478 tr->cmd_type = q_data.cmd_data.play_tone.command_detail.cmd_type;
2479 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));
2480 tr->terminal_rsp_data.play_tone.device_id.src = DEVICE_ID_ME;
2481 tr->terminal_rsp_data.play_tone.device_id.dest = DEVICE_ID_SIM;
2484 case RESULT_SUCCESS:
2485 tr->terminal_rsp_data.play_tone.result_type = RESULT_SUCCESS;
2486 if (q_data.cmd_data.play_tone.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
2487 tr->terminal_rsp_data.play_tone.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
2489 tr->terminal_rsp_data.play_tone.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2492 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
2493 tr->terminal_rsp_data.play_tone.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
2494 tr->terminal_rsp_data.play_tone.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2497 case RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER:
2498 tr->terminal_rsp_data.play_tone.result_type = RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER;
2499 tr->terminal_rsp_data.play_tone.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2503 tr->terminal_rsp_data.play_tone.result_type = resp;
2504 tr->terminal_rsp_data.play_tone.me_problem_type = me_problem;
2505 dbg("[SAT] wrong result from app exec resp(%d) me_problem(%d)", resp, me_problem);
2509 if (q_data.cmd_data.displayTextInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
2510 tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
2513 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
2514 if(rv != TCORE_RETURN_SUCCESS){
2515 dbg("fail to send terminal response");
2523 static gboolean _sat_manager_handle_send_sms_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
2525 TReturn rv = TCORE_RETURN_FAILURE;
2526 gboolean result = FALSE;
2529 struct treq_sat_terminal_rsp_data *tr;
2530 struct sat_manager_queue_data q_data;
2532 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
2534 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
2535 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
2540 dbg("[SAT] send sms data is null");
2545 dbg("there is no valid plugin at this point");
2549 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
2550 g_variant_get(exec_result, "(i)",&resp);
2552 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
2553 tr->cmd_number = q_data.cmd_data.sendSMSInd.command_detail.cmd_num;
2554 tr->cmd_type = q_data.cmd_data.sendSMSInd.command_detail.cmd_type;
2555 memcpy((void*)&tr->terminal_rsp_data.send_sms.command_detail, &q_data.cmd_data.sendSMSInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
2556 tr->terminal_rsp_data.send_sms.device_id.src = DEVICE_ID_ME;
2557 tr->terminal_rsp_data.send_sms.device_id.dest = q_data.cmd_data.sendSMSInd.device_id.src;
2560 case RESULT_SUCCESS:
2561 tr->terminal_rsp_data.send_sms.result_type = RESULT_SUCCESS;
2562 if (q_data.cmd_data.sendSMSInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
2563 tr->terminal_rsp_data.send_sms.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
2567 case RESULT_INTRCTN_WITH_CC_OR_SMS_CTRL_PRMNT_PRBLM:
2568 tr->terminal_rsp_data.send_sms.result_type = RESULT_INTRCTN_WITH_CC_OR_SMS_CTRL_PRMNT_PRBLM;
2569 tr->terminal_rsp_data.send_sms.cc_problem_type = CC_PROBLEM_ACTION_NOT_ALLOWED;
2572 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
2573 tr->terminal_rsp_data.send_sms.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
2574 tr->terminal_rsp_data.send_sms.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2577 case RESULT_BEYOND_ME_CAPABILITIES:
2578 tr->terminal_rsp_data.send_sms.result_type = RESULT_BEYOND_ME_CAPABILITIES;
2579 tr->terminal_rsp_data.send_sms.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2582 case RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME:
2583 tr->terminal_rsp_data.send_sms.result_type = RESULT_COMMAND_TYPE_NOT_UNDERSTOOD_BY_ME;
2584 tr->terminal_rsp_data.send_sms.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2587 case RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME:
2588 tr->terminal_rsp_data.send_sms.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
2589 tr->terminal_rsp_data.send_sms.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2592 case RESULT_SMS_RP_ERROR:
2593 tr->terminal_rsp_data.send_sms.result_type = RESULT_SMS_RP_ERROR;
2594 tr->terminal_rsp_data.send_sms.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2598 tr->terminal_rsp_data.send_sms.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
2599 tr->terminal_rsp_data.send_sms.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2604 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
2605 if(rv != TCORE_RETURN_SUCCESS){
2606 dbg("fail to send terminal response");
2612 /* if( q_data.cmd_data.sendSMSInd.alpha_id.alpha_data_len && q_data.cmd_data.sendSMSInd.alpha_id.is_exist)
2613 sat_ui_support_terminate_sat_ui();*/
2618 static gboolean _sat_manager_handle_send_ss_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
2620 TReturn rv = TCORE_RETURN_FAILURE;
2621 gboolean result = FALSE;
2623 gint resp, me_problem, ss_cause, call_ctrl_problem, ss_str_len;
2625 struct treq_sat_terminal_rsp_data *tr;
2626 struct sat_manager_queue_data q_data;
2627 //call ctrl action, result data object, text
2629 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
2631 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
2632 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
2637 dbg("[SAT] send ss data is null");
2642 dbg("there is no valid plugin at this point");
2646 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
2647 g_variant_get(exec_result, "(iiisii)", &resp, &me_problem, &ss_cause, &ss_string, &ss_str_len, &call_ctrl_problem);
2649 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
2650 tr->cmd_number = q_data.cmd_data.send_ss.command_detail.cmd_num;
2651 tr->cmd_type = q_data.cmd_data.send_ss.command_detail.cmd_type;
2652 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));
2653 tr->terminal_rsp_data.send_ss.device_id.src = DEVICE_ID_ME;
2654 tr->terminal_rsp_data.send_ss.device_id.dest = q_data.cmd_data.send_ss.device_id.src;
2657 case RESULT_SUCCESS:
2658 tr->terminal_rsp_data.send_ss.result_type = RESULT_SUCCESS;
2659 if (q_data.cmd_data.send_ss.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
2660 tr->terminal_rsp_data.send_ss.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
2662 if(ss_str_len > 0 && ss_string != NULL){
2663 memcpy(&tr->terminal_rsp_data.send_ss.text.dcs, &q_data.cmd_data.send_ss.alpha_id.dcs, sizeof(struct data_coding_scheme));
2664 memcpy((void*)tr->terminal_rsp_data.send_ss.text.string, ss_string, ss_str_len);
2665 tr->terminal_rsp_data.send_ss.text.string_length = ss_str_len;
2669 case RESULT_SS_RETURN_ERROR:
2670 tr->terminal_rsp_data.send_ss.result_type = RESULT_SS_RETURN_ERROR;
2671 tr->terminal_rsp_data.send_ss.ss_problem = ss_cause;
2674 case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
2675 tr->terminal_rsp_data.send_ss.result_type = RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND;
2676 tr->terminal_rsp_data.send_ss.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2680 tr->terminal_rsp_data.send_ss.result_type = RESULT_SS_RETURN_ERROR;
2681 tr->terminal_rsp_data.send_ss.ss_problem = SATK_SS_PROBLEM_NO_SPECIFIC_CAUSE;
2686 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
2687 if(rv != TCORE_RETURN_SUCCESS){
2688 dbg("fail to send terminal response");
2693 if( q_data.cmd_data.send_ss.alpha_id.alpha_data_len && q_data.cmd_data.send_ss.alpha_id.is_exist )
2694 sat_ui_support_terminate_sat_ui();
2699 static gboolean _sat_manager_handle_send_ussd_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
2701 TReturn rv = TCORE_RETURN_FAILURE;
2702 gboolean result = FALSE;
2704 gint resp, me_problem, ss_cause, ussd_str_len;
2705 GVariant *ussd_str = NULL;
2706 struct treq_sat_terminal_rsp_data *tr;
2707 struct sat_manager_queue_data q_data;
2708 //call ctrl action, result data object, text, result2, text2
2710 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
2712 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
2713 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
2718 dbg("[SAT] send ss data is null");
2723 dbg("there is no valid plugin at this point");
2727 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
2728 g_variant_get(exec_result, "(iii@vi)", &resp, &me_problem, &ss_cause, &ussd_str, &ussd_str_len);
2730 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
2731 tr->cmd_number = q_data.cmd_data.send_ussd.command_detail.cmd_num;
2732 tr->cmd_type = q_data.cmd_data.send_ussd.command_detail.cmd_type;
2733 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));
2734 tr->terminal_rsp_data.send_ussd.device_id.src = DEVICE_ID_ME;
2735 tr->terminal_rsp_data.send_ussd.device_id.dest = q_data.cmd_data.send_ussd.device_id.src;
2738 case RESULT_SUCCESS:
2739 tr->terminal_rsp_data.send_ussd.result_type = RESULT_SUCCESS;
2740 if (q_data.cmd_data.send_ussd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
2741 tr->terminal_rsp_data.send_ussd.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
2743 if(ussd_str_len > 0 && ussd_str){
2746 GVariantIter *iter = NULL;
2747 GVariant *intermediate = NULL;
2749 intermediate = g_variant_get_variant(ussd_str);
2750 dbg("ussd string format(%s)", g_variant_get_type_string(intermediate));
2752 g_variant_get(intermediate, "ay", &iter);
2753 while( g_variant_iter_loop (iter, "y", &data)){
2754 dbg("index(%d) data(%c)", index, data);
2757 tr->terminal_rsp_data.send_ussd.text.dcs.raw_dcs = (data & 0x0F);
2760 tr->terminal_rsp_data.send_ussd.text.string[index-1] = data;
2765 g_variant_iter_free(iter);
2766 g_variant_unref(intermediate);
2768 tr->terminal_rsp_data.send_ussd.text.string_length = index-1;
2772 case RESULT_SS_RETURN_ERROR:
2773 case RESULT_USSD_RETURN_ERROR:
2774 tr->terminal_rsp_data.send_ussd.result_type = RESULT_USSD_RETURN_ERROR;
2775 tr->terminal_rsp_data.send_ussd.ussd_problem = ss_cause;
2778 case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
2779 tr->terminal_rsp_data.send_ussd.result_type = RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND;
2780 tr->terminal_rsp_data.send_ussd.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2783 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
2784 tr->terminal_rsp_data.send_ussd.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
2785 tr->terminal_rsp_data.send_ussd.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2789 tr->terminal_rsp_data.send_ussd.result_type = RESULT_USSD_RETURN_ERROR;
2790 tr->terminal_rsp_data.send_ussd.ussd_problem = SATK_USSD_PROBLEM_NO_SPECIFIC_CAUSE;
2795 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
2796 if(rv != TCORE_RETURN_SUCCESS){
2797 dbg("fail to send terminal response");
2802 if( q_data.cmd_data.send_ussd.alpha_id.alpha_data_len && q_data.cmd_data.send_ussd.alpha_id.is_exist )
2803 sat_ui_support_terminate_sat_ui();
2808 static gboolean _sat_manager_handle_setup_call_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
2810 TReturn rv = TCORE_RETURN_FAILURE;
2811 gboolean result = FALSE;
2813 gint resp, me_problem, cc_problem, call_cause;
2814 struct treq_sat_terminal_rsp_data *tr;
2815 struct sat_manager_queue_data q_data;
2817 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
2819 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
2820 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
2825 dbg("[SAT] setup call data is null");
2830 dbg("there is no valid plugin at this point");
2834 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
2835 g_variant_get(exec_result, "(iiii)",&resp, &me_problem, &cc_problem, &call_cause);
2837 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
2838 tr->cmd_number = q_data.cmd_data.setup_call.command_detail.cmd_num;
2839 tr->cmd_type = q_data.cmd_data.setup_call.command_detail.cmd_type;
2840 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));
2841 tr->terminal_rsp_data.setup_call.device_id.src = DEVICE_ID_ME;
2842 tr->terminal_rsp_data.setup_call.device_id.dest = q_data.cmd_data.setup_call.device_id.src;
2845 case RESULT_SUCCESS:
2846 tr->terminal_rsp_data.setup_call.result_type = RESULT_SUCCESS;
2847 if (q_data.cmd_data.setup_call.call_setup_icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
2848 tr->terminal_rsp_data.setup_call.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
2849 tr->terminal_rsp_data.setup_call.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2850 tr->terminal_rsp_data.setup_call.cc_problem_type = CC_PROBLEM_NO_SPECIFIC_CAUSE;
2853 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
2854 tr->terminal_rsp_data.setup_call.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
2855 tr->terminal_rsp_data.setup_call.me_problem_type = me_problem;
2858 case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:{
2859 tr->terminal_rsp_data.setup_call.result_type = RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND;
2861 case CALL_ERROR_BUSY:
2862 tr->terminal_rsp_data.setup_call.network_problem_type = NETWORK_PROBLEM_USER_BUSY;
2865 tr->terminal_rsp_data.setup_call.network_problem_type = NETWORK_PROBLEM_NO_SPECIFIC_CAUSE;
2870 case RESULT_USER_CLEAR_DOWN_CALL_BEFORE_CONN:
2871 tr->terminal_rsp_data.setup_call.result_type = RESULT_USER_CLEAR_DOWN_CALL_BEFORE_CONN;
2872 tr->terminal_rsp_data.setup_call.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2873 tr->terminal_rsp_data.setup_call.cc_problem_type = CC_PROBLEM_NO_SPECIFIC_CAUSE;
2876 case RESULT_BEYOND_ME_CAPABILITIES:
2877 tr->terminal_rsp_data.setup_call.result_type = RESULT_BEYOND_ME_CAPABILITIES;
2878 tr->terminal_rsp_data.setup_call.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2879 tr->terminal_rsp_data.setup_call.cc_problem_type = CC_PROBLEM_NO_SPECIFIC_CAUSE;
2882 case RESULT_INTRCTN_WITH_CC_OR_SMS_CTRL_PRMNT_PRBLM:
2883 tr->terminal_rsp_data.setup_call.result_type = RESULT_INTRCTN_WITH_CC_OR_SMS_CTRL_PRMNT_PRBLM;
2884 tr->terminal_rsp_data.setup_call.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
2885 tr->terminal_rsp_data.setup_call.cc_problem_type = cc_problem;
2893 //TODO Other infomation set - not supported
2894 tr->terminal_rsp_data.setup_call.other_info = FALSE;
2897 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
2898 if(rv != TCORE_RETURN_SUCCESS){
2899 dbg("fail to send terminal response");
2907 static gboolean _sat_manager_handle_setup_idle_mode_text_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
2909 TReturn rv = TCORE_RETURN_FAILURE;
2910 gboolean result = FALSE;
2912 gint resp, me_problem;
2913 struct treq_sat_terminal_rsp_data *tr;
2914 struct sat_manager_queue_data q_data;
2916 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
2918 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
2919 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
2924 dbg("[SAT] send ss data is null");
2929 dbg("there is no valid plugin at this point");
2933 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
2934 g_variant_get(exec_result, "(ii)",&resp, &me_problem);
2936 tr = g_new0(struct treq_sat_terminal_rsp_data, 1);
2937 tr->cmd_number = q_data.cmd_data.idle_mode.command_detail.cmd_num;
2938 tr->cmd_type = q_data.cmd_data.idle_mode.command_detail.cmd_type;
2939 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));
2940 tr->terminal_rsp_data.setup_idle_mode_text.device_id.src = q_data.cmd_data.idle_mode.device_id.dest;
2941 tr->terminal_rsp_data.setup_idle_mode_text.device_id.dest = q_data.cmd_data.idle_mode.device_id.src;
2944 case RESULT_SUCCESS:
2945 tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS;
2946 if (q_data.cmd_data.idle_mode.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
2947 tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
2951 tr->terminal_rsp_data.setup_idle_mode_text.result_type = resp;
2952 tr->terminal_rsp_data.setup_idle_mode_text.me_problem_type = me_problem;
2957 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
2958 if(rv != TCORE_RETURN_SUCCESS){
2959 dbg("fail to send terminal response");
2964 sat_ui_support_terminate_sat_ui();
2969 static gboolean sat_manager_handle_open_channel_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
2971 TReturn rv = TCORE_RETURN_FAILURE;
2972 gboolean result = FALSE;
2974 gint resp, me_problem, bip_problem;
2975 gint bearer_type, channel_id, channel_status, channel_status_info, buffer_size;
2976 gboolean other_info;
2977 GVariant *desc_tmp, *bearer_desc;
2979 struct treq_sat_terminal_rsp_data *tr;
2980 struct sat_manager_queue_data q_data;
2982 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
2984 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
2985 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
2990 dbg("[SAT] open channel data is null");
2995 dbg("there is no valid plugin at this point");
2999 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
3000 g_variant_get(exec_result, "(iiiiiiiibv)",&resp, &me_problem, &bip_problem,
3001 &bearer_type, &channel_id, &channel_status, &channel_status_info, &buffer_size,
3002 &other_info, &desc_tmp);
3004 bearer_desc = g_variant_get_variant(desc_tmp);
3006 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
3007 tr->cmd_number = q_data.cmd_data.open_channel.command_detail.cmd_num;
3008 tr->cmd_type = q_data.cmd_data.open_channel.command_detail.cmd_type;
3009 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));
3011 tr->terminal_rsp_data.open_channel.device_id.src = q_data.cmd_data.open_channel.device_id.dest;
3012 tr->terminal_rsp_data.open_channel.device_id.dest = q_data.cmd_data.open_channel.device_id.src;
3014 tr->terminal_rsp_data.open_channel.result_type = resp;
3016 case RESULT_SUCCESS:
3017 case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
3018 case RESULT_SUCCESS_WITH_MISSING_INFO:
3022 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
3023 case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
3024 tr->terminal_rsp_data.open_channel.me_problem_type = me_problem;
3027 case RESULT_BEARER_INDEPENDENT_PROTOCOL_ERROR:
3028 tr->terminal_rsp_data.open_channel.bip_problem_type = bip_problem;
3035 tr->terminal_rsp_data.open_channel.channel_status.channel_id = channel_id;
3036 tr->terminal_rsp_data.open_channel.channel_status.status = channel_status;
3037 tr->terminal_rsp_data.open_channel.channel_status.status_info = channel_status_info;
3039 dbg("check channel id(%d) channel status(%d) channel info(%d)", channel_id, channel_status, channel_status_info);
3041 //memcpy(tr->terminal_rsp_data.open_channel.buffer_size.size, &buffer_size, sizeof(unsigned char)*2);
3042 tr->terminal_rsp_data.open_channel.buffer_size.size[0] = buffer_size >> 8;
3043 tr->terminal_rsp_data.open_channel.buffer_size.size[1] = buffer_size & 0xFF;
3044 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]);
3046 tr->terminal_rsp_data.open_channel.bearer_desc.bearer_type = bearer_type;
3047 switch(bearer_type){
3049 gint data_rate, service_type, conn_element_type;
3051 dbg("bearer_desc cs bearer type_format(%s)", g_variant_get_type_string(bearer_desc));
3052 g_variant_get(bearer_desc, "(iii)",&data_rate, &service_type, &conn_element_type);
3053 dbg("check cs bearer data_rade(%d), service_type(%d), conn_element_type(%d)", data_rate, service_type, conn_element_type);
3055 tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.cs_bearer_param.data_rate = data_rate;
3056 tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.cs_bearer_param.service_type = service_type;
3057 tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.cs_bearer_param.connection_element_type = conn_element_type;
3060 gint precedence_class, delay_class, reliability_class;
3061 gint peak_class, mean_class, pdp_type;
3063 dbg("bearer_desc ps bearer type_format(%s)", g_variant_get_type_string(bearer_desc));
3064 g_variant_get(bearer_desc, "(iiiiii)",&precedence_class, &delay_class, &reliability_class,
3065 &peak_class, &mean_class, &pdp_type);
3066 dbg("check ps bearer precedence class(%d), delay class(%d), reliability class(%d) peak class(%d) mean class(%d) pdp_type(%d)",
3067 precedence_class, delay_class, reliability_class, peak_class, mean_class, pdp_type);
3069 tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.ps_bearer_param.precedence_class = precedence_class;
3070 tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.ps_bearer_param.delay_class = delay_class;
3071 tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.ps_bearer_param.reliability_class = reliability_class;
3072 tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.ps_bearer_param.peak_throughput_class = peak_class;
3073 tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.ps_bearer_param.mean_throughput_class = mean_class;
3074 tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.ps_bearer_param.pdp_type = pdp_type;
3076 case BEARER_LOCAL_LINK_TECHNOLOGY_INDEPENDENT:{
3078 gchar *service_record = NULL;
3080 dbg("bearer_desc link local type_format(%s)", g_variant_get_type_string(bearer_desc));
3081 g_variant_get(bearer_desc, "(is)",&service_type, &service_record);
3082 dbg("check link local service_type(%d), service_record(%d)", service_type, service_record);
3084 tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.local_link_bearer_param.service_type = service_type;
3087 memcpy(tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.local_link_bearer_param.service_record, service_record, strlen(service_record));
3095 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
3096 if(rv != TCORE_RETURN_SUCCESS){
3097 dbg("fail to send terminal response");
3105 static gboolean sat_manager_handle_close_channel_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
3107 TReturn rv = TCORE_RETURN_FAILURE;
3108 gboolean result = FALSE;
3110 gint resp, me_problem, bip_problem;
3112 struct treq_sat_terminal_rsp_data *tr;
3113 struct sat_manager_queue_data q_data;
3115 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
3117 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
3118 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
3123 dbg("[SAT] close channel data is null");
3128 dbg("there is no valid plugin at this point");
3132 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
3133 g_variant_get(exec_result, "(iii)",&resp, &me_problem, &bip_problem);
3135 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
3136 tr->cmd_number = q_data.cmd_data.close_channel.command_detail.cmd_num;
3137 tr->cmd_type = q_data.cmd_data.close_channel.command_detail.cmd_type;
3138 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));
3140 tr->terminal_rsp_data.close_channel.device_id.src = DEVICE_ID_ME;
3141 tr->terminal_rsp_data.close_channel.device_id.dest = q_data.cmd_data.close_channel.device_id.src;
3143 tr->terminal_rsp_data.close_channel.result_type = resp;
3145 case RESULT_SUCCESS:
3146 case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
3147 case RESULT_SUCCESS_WITH_MISSING_INFO:
3151 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
3152 case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
3153 tr->terminal_rsp_data.close_channel.me_problem_type = me_problem;
3156 case RESULT_BEARER_INDEPENDENT_PROTOCOL_ERROR:
3157 tr->terminal_rsp_data.close_channel.bip_problem_type = bip_problem;
3165 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
3166 if(rv != TCORE_RETURN_SUCCESS){
3167 dbg("fail to send terminal response");
3175 static gboolean sat_manager_handle_receive_data_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
3177 TReturn rv = TCORE_RETURN_FAILURE;
3178 gboolean result = FALSE;
3180 gint resp, me_problem, bip_problem;
3181 gint data_str_len, data_len;
3182 gboolean other_info;
3183 GVariant *received_data;
3185 struct treq_sat_terminal_rsp_data *tr;
3186 struct sat_manager_queue_data q_data;
3188 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
3190 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
3191 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
3196 dbg("[SAT] receive data data is null");
3201 dbg("there is no valid plugin at this point");
3205 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
3206 g_variant_get(exec_result, "(iiiiibv)",&resp, &me_problem, &bip_problem, &data_str_len, &data_len, &other_info, &received_data);
3208 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
3209 tr->cmd_number = q_data.cmd_data.receive_data.command_detail.cmd_num;
3210 tr->cmd_type = q_data.cmd_data.receive_data.command_detail.cmd_type;
3211 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));
3213 tr->terminal_rsp_data.receive_data.device_id.src = DEVICE_ID_ME;
3214 tr->terminal_rsp_data.receive_data.device_id.dest = q_data.cmd_data.receive_data.device_id.src;
3216 tr->terminal_rsp_data.receive_data.result_type = resp;
3218 case RESULT_SUCCESS:
3219 case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
3220 case RESULT_SUCCESS_WITH_MISSING_INFO:
3224 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
3225 case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
3226 tr->terminal_rsp_data.receive_data.me_problem_type = me_problem;
3229 case RESULT_BEARER_INDEPENDENT_PROTOCOL_ERROR:
3230 tr->terminal_rsp_data.receive_data.bip_problem_type = bip_problem;
3237 tr->terminal_rsp_data.receive_data.channel_data_len.data_len = data_len;
3238 tr->terminal_rsp_data.receive_data.channel_data.data_string_len = data_str_len;
3243 GVariantIter *iter = NULL;
3245 dbg("additional data exist type_format(%s)", g_variant_get_type_string(received_data));
3247 g_variant_get(received_data, "ay", &iter);
3248 while( g_variant_iter_loop (iter, "y", &data)){
3249 dbg("index(%d) data(%d)", index, data);
3250 tr->terminal_rsp_data.receive_data.channel_data.data_string[index] = data;
3253 g_variant_iter_free(iter);
3255 dbg("the last index data(%d), data_total_len(%d)", index, data_str_len);
3259 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
3260 if(rv != TCORE_RETURN_SUCCESS){
3261 dbg("fail to send terminal response");
3269 static gboolean sat_manager_handle_send_data_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
3271 TReturn rv = TCORE_RETURN_FAILURE;
3272 gboolean result = FALSE;
3274 gint resp, me_problem, bip_problem;
3277 struct treq_sat_terminal_rsp_data *tr;
3278 struct sat_manager_queue_data q_data;
3280 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
3282 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
3283 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
3288 dbg("[SAT] send data data is null");
3293 dbg("there is no valid plugin at this point");
3297 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
3298 g_variant_get(exec_result, "(iiii)",&resp, &me_problem, &bip_problem, &data_len);
3300 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
3301 tr->cmd_number = q_data.cmd_data.send_data.command_detail.cmd_num;
3302 tr->cmd_type = q_data.cmd_data.send_data.command_detail.cmd_type;
3303 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));
3305 tr->terminal_rsp_data.send_data.device_id.src = DEVICE_ID_ME;
3306 tr->terminal_rsp_data.send_data.device_id.dest = q_data.cmd_data.send_data.device_id.src;
3308 tr->terminal_rsp_data.send_data.result_type = resp;
3310 case RESULT_SUCCESS:
3311 case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
3312 case RESULT_SUCCESS_WITH_MISSING_INFO:
3316 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
3317 case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
3318 tr->terminal_rsp_data.send_data.me_problem_type = me_problem;
3321 case RESULT_BEARER_INDEPENDENT_PROTOCOL_ERROR:
3322 tr->terminal_rsp_data.send_data.bip_problem_type = bip_problem;
3329 tr->terminal_rsp_data.send_data.channel_data_len.data_len = data_len;
3332 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
3333 if(rv != TCORE_RETURN_SUCCESS){
3334 dbg("fail to send terminal response");
3342 static gboolean sat_manager_handle_get_channel_status_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
3344 TReturn rv = TCORE_RETURN_FAILURE;
3345 gboolean result = FALSE;
3347 gint resp, me_problem, bip_problem;
3348 gint channel_id, channel_status, channel_status_info;
3350 struct treq_sat_terminal_rsp_data *tr;
3351 struct sat_manager_queue_data q_data;
3353 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
3355 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
3356 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
3361 dbg("[SAT] get channel status data is null");
3366 dbg("there is no valid plugin at this point");
3370 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
3371 g_variant_get(exec_result, "(iiiiii)",&resp, &me_problem, &bip_problem,
3372 &channel_id, &channel_status, &channel_status_info);
3374 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
3375 tr->cmd_number = q_data.cmd_data.get_channel_status.command_detail.cmd_num;
3376 tr->cmd_type = q_data.cmd_data.get_channel_status.command_detail.cmd_type;
3377 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));
3379 tr->terminal_rsp_data.get_channel_status.device_id.src = q_data.cmd_data.get_channel_status.device_id.dest;
3380 tr->terminal_rsp_data.get_channel_status.device_id.dest = q_data.cmd_data.get_channel_status.device_id.src;
3382 tr->terminal_rsp_data.get_channel_status.result_type = resp;
3384 case RESULT_SUCCESS:
3385 case RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED:
3386 case RESULT_SUCCESS_WITH_MISSING_INFO:
3390 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
3391 case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
3392 tr->terminal_rsp_data.get_channel_status.me_problem_type = me_problem;
3395 case RESULT_BEARER_INDEPENDENT_PROTOCOL_ERROR:
3396 tr->terminal_rsp_data.get_channel_status.bip_problem_type = bip_problem;
3403 tr->terminal_rsp_data.get_channel_status.channel_status.channel_id = channel_id;
3404 tr->terminal_rsp_data.get_channel_status.channel_status.status = channel_status;
3405 tr->terminal_rsp_data.get_channel_status.channel_status.status_info = channel_status_info;
3408 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
3409 if(rv != TCORE_RETURN_SUCCESS){
3410 dbg("fail to send terminal response");
3418 static gboolean sat_manager_handle_send_dtmf_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
3420 TReturn rv = TCORE_RETURN_FAILURE;
3421 gboolean result = FALSE;
3424 struct treq_sat_terminal_rsp_data *tr;
3425 struct sat_manager_queue_data q_data;
3427 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
3428 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
3430 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
3431 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
3437 dbg("[SAT] get channel status data is null");
3443 dbg("there is no valid plugin at this point");
3448 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
3449 g_variant_get(exec_result, "(i)",&resp);
3451 tr->cmd_number = q_data.cmd_data.send_dtmf.command_detail.cmd_num;
3452 tr->cmd_type = q_data.cmd_data.send_dtmf.command_detail.cmd_type;
3453 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));
3455 tr->terminal_rsp_data.send_dtmf.device_id.src = DEVICE_ID_ME;
3456 tr->terminal_rsp_data.send_dtmf.device_id.dest = q_data.cmd_data.send_dtmf.device_id.src;
3458 tr->terminal_rsp_data.send_dtmf.result_type = resp;
3460 case RESULT_SUCCESS:
3461 if (q_data.cmd_data.send_dtmf.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
3462 tr->terminal_rsp_data.send_dtmf.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
3465 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
3466 tr->terminal_rsp_data.send_dtmf.me_problem_type = ME_PROBLEM_NOT_IN_SPEECH_CALL;
3470 tr->terminal_rsp_data.send_dtmf.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
3471 tr->terminal_rsp_data.send_dtmf.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3476 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
3477 if(rv != TCORE_RETURN_SUCCESS){
3478 dbg("fail to send terminal response");
3486 static gboolean sat_manager_handle_launch_browser_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
3488 TReturn rv = TCORE_RETURN_FAILURE;
3489 gboolean result = FALSE;
3491 gint resp, browser_problem;
3492 struct treq_sat_terminal_rsp_data *tr;
3493 struct sat_manager_queue_data q_data;
3495 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
3497 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
3498 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
3503 dbg("[SAT] get channel status data is null");
3508 dbg("there is no valid plugin at this point");
3512 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
3513 g_variant_get(exec_result, "(ii)",&resp,&browser_problem);
3515 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
3516 tr->cmd_number = q_data.cmd_data.launch_browser.command_detail.cmd_num;
3517 tr->cmd_type = q_data.cmd_data.launch_browser.command_detail.cmd_type;
3518 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));
3520 tr->terminal_rsp_data.launch_browser.device_id.src = q_data.cmd_data.launch_browser.device_id.dest;
3521 tr->terminal_rsp_data.launch_browser.device_id.dest = q_data.cmd_data.launch_browser.device_id.src;
3523 tr->terminal_rsp_data.launch_browser.result_type = resp;
3525 case RESULT_SUCCESS:
3526 if (q_data.cmd_data.launch_browser.user_confirm_icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
3527 tr->terminal_rsp_data.launch_browser.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
3529 tr->terminal_rsp_data.launch_browser.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3530 tr->terminal_rsp_data.launch_browser.browser_problem_type = BROWSER_PROBLEM_NO_SPECIFIC_CAUSE;
3532 case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
3533 tr->terminal_rsp_data.launch_browser.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3534 tr->terminal_rsp_data.launch_browser.browser_problem_type = BROWSER_PROBLEM_NO_SPECIFIC_CAUSE;
3537 case RESULT_LAUNCH_BROWSER_GENERIC_ERROR_CODE:
3538 tr->terminal_rsp_data.launch_browser.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3539 tr->terminal_rsp_data.launch_browser.browser_problem_type = browser_problem;
3542 tr->terminal_rsp_data.launch_browser.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
3543 tr->terminal_rsp_data.launch_browser.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3544 tr->terminal_rsp_data.launch_browser.browser_problem_type = BROWSER_PROBLEM_NO_SPECIFIC_CAUSE;
3549 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
3550 if(rv != TCORE_RETURN_SUCCESS){
3551 dbg("fail to send terminal response");
3559 gboolean sat_manager_handle_app_exec_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint command_type, GVariant *exec_result)
3561 gboolean result = FALSE;
3562 GVariant *resp = NULL;
3563 dbg("[SAT] app exec result command id(%d) command type(%d)", command_id, command_type);
3565 dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
3566 g_variant_get(exec_result, "v", &resp);
3568 switch (command_type) {
3569 case SAT_PROATV_CMD_SETUP_MENU:
3570 result = _sat_manager_handle_setup_menu_result(ctx, plg, command_id, resp);
3573 case SAT_PROATV_CMD_DISPLAY_TEXT:
3574 result = _sat_manager_handle_display_text_result(ctx, plg, command_id, resp);
3577 case SAT_PROATV_CMD_PLAY_TONE:
3578 result = _sat_manager_handle_play_tone_result(ctx, plg, command_id, resp);
3581 case SAT_PROATV_CMD_SEND_SMS:
3582 result = _sat_manager_handle_send_sms_result(ctx, plg, command_id, resp);
3585 case SAT_PROATV_CMD_SEND_SS:
3586 result = _sat_manager_handle_send_ss_result(ctx, plg, command_id, resp);
3589 case SAT_PROATV_CMD_SEND_USSD:
3590 result = _sat_manager_handle_send_ussd_result(ctx, plg, command_id, resp);
3593 case SAT_PROATV_CMD_SETUP_CALL:
3594 result = _sat_manager_handle_setup_call_result(ctx, plg, command_id, resp);
3597 case SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT:
3598 result = _sat_manager_handle_setup_idle_mode_text_result(ctx, plg, command_id, resp);
3601 case SAT_PROATV_CMD_OPEN_CHANNEL:
3602 result = sat_manager_handle_open_channel_result(ctx, plg, command_id, resp);
3605 case SAT_PROATV_CMD_CLOSE_CHANNEL:
3606 result = sat_manager_handle_close_channel_result(ctx, plg, command_id, resp);
3609 case SAT_PROATV_CMD_RECEIVE_DATA:
3610 result = sat_manager_handle_receive_data_result(ctx, plg, command_id, resp);
3613 case SAT_PROATV_CMD_SEND_DATA:
3614 result = sat_manager_handle_send_data_result(ctx, plg, command_id, resp);
3617 case SAT_PROATV_CMD_GET_CHANNEL_STATUS:
3618 result = sat_manager_handle_get_channel_status_result(ctx, plg, command_id, resp);
3621 case SAT_PROATV_CMD_SEND_DTMF:
3622 result = sat_manager_handle_send_dtmf_result(ctx, plg, command_id, resp);
3625 case SAT_PROATV_CMD_LAUNCH_BROWSER:
3626 result = sat_manager_handle_launch_browser_result(ctx, plg, command_id, resp);
3630 dbg("[SAT] invalid command type(%d)", command_type);
3634 sat_ui_support_terminate_sat_ui();
3639 static gboolean _sat_manager_handle_menu_select_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data)
3641 TReturn rv = TCORE_RETURN_FAILURE;
3642 gboolean result = FALSE;
3645 struct treq_sat_terminal_rsp_data *tr;
3646 struct sat_manager_queue_data q_data;
3648 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
3650 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
3651 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
3656 dbg("there is no valid plugin at this point");
3663 GVariantIter *iter = NULL;
3664 GVariant *inner_gv = NULL;
3666 inner_gv = g_variant_get_variant(addtional_data);
3667 dbg("additional data exist type_format(%s)", g_variant_get_type_string(inner_gv));
3669 g_variant_get(inner_gv, "ay", &iter);
3670 while( g_variant_iter_loop (iter, "y", &data)){
3671 dbg("index(%d) data(%d)", index, data);
3675 g_variant_iter_free(iter);
3676 g_variant_unref(inner_gv);
3679 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
3680 tr->cmd_number = q_data.cmd_data.selectItemInd.command_detail.cmd_num;
3681 tr->cmd_type = q_data.cmd_data.selectItemInd.command_detail.cmd_type;
3682 memcpy((void*)&tr->terminal_rsp_data.select_item.command_detail, &q_data.cmd_data.selectItemInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
3683 tr->terminal_rsp_data.select_item.device_id.src = DEVICE_ID_ME;
3684 tr->terminal_rsp_data.select_item.device_id.dest = DEVICE_ID_SIM;
3686 switch (confirm_type) {
3687 case USER_CONFIRM_YES:
3688 tr->terminal_rsp_data.select_item.item_identifier.item_identifier = item_id;
3689 tr->terminal_rsp_data.select_item.other_info = FALSE;
3690 tr->terminal_rsp_data.select_item.result_type = RESULT_SUCCESS;
3691 tr->terminal_rsp_data.select_item.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3693 if (q_data.cmd_data.selectItemInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
3694 tr->terminal_rsp_data.select_item.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
3698 case USER_CONFIRM_HELP_INFO:
3699 tr->terminal_rsp_data.select_item.item_identifier.item_identifier = item_id;
3700 tr->terminal_rsp_data.select_item.other_info = FALSE;
3701 tr->terminal_rsp_data.select_item.result_type = RESULT_HELP_INFO_REQUIRED_BY_USER;
3702 tr->terminal_rsp_data.select_item.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3703 //TODO ctx->help_requested = TRUE;
3706 case USER_CONFIRM_END:
3707 tr->terminal_rsp_data.select_item.result_type = RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER;
3710 case USER_CONFIRM_NO_OR_CANCEL:
3711 tr->terminal_rsp_data.select_item.result_type = RESULT_BACKWARD_MOVE_BY_USER;
3714 case USER_CONFIRM_TIMEOUT:
3715 tr->terminal_rsp_data.select_item.result_type = RESULT_NO_RESPONSE_FROM_USER;
3719 dbg("not handled value[%d] here", confirm_type);
3724 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
3725 if(rv != TCORE_RETURN_SUCCESS){
3726 dbg("fail to send terminal response");
3735 static gboolean _sat_manager_handle_display_text_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data)
3737 TReturn rv = TCORE_RETURN_FAILURE;
3738 gboolean result = FALSE;
3740 struct treq_sat_terminal_rsp_data *tr;
3741 struct sat_manager_queue_data q_data;
3743 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
3745 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
3746 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
3751 dbg("there is no valid plugin at this point");
3755 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
3756 tr->cmd_number = q_data.cmd_data.displayTextInd.command_detail.cmd_num;
3757 tr->cmd_type = q_data.cmd_data.displayTextInd.command_detail.cmd_type;
3758 memcpy((void*)&tr->terminal_rsp_data.display_text.command_detail, &q_data.cmd_data.displayTextInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
3759 tr->terminal_rsp_data.display_text.device_id.src = DEVICE_ID_ME;
3760 tr->terminal_rsp_data.display_text.device_id.dest = DEVICE_ID_SIM;
3762 switch (confirm_type){
3763 case USER_CONFIRM_YES: {
3764 tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS;
3765 tr->terminal_rsp_data.display_text.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
3767 if (q_data.cmd_data.displayTextInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
3768 tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
3771 case USER_CONFIRM_NO_OR_CANCEL:
3772 tr->terminal_rsp_data.display_text.result_type = RESULT_BACKWARD_MOVE_BY_USER;
3775 case USER_CONFIRM_TIMEOUT:
3776 tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS;
3778 if (q_data.cmd_data.displayTextInd.command_detail.cmd_qualifier.display_text.text_clear_type == TEXT_WAIT_FOR_USER_TO_CLEAR_MSG )
3779 tr->terminal_rsp_data.display_text.result_type = RESULT_NO_RESPONSE_FROM_USER;
3783 case USER_CONFIRM_END:
3784 tr->terminal_rsp_data.display_text.result_type = RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER;
3787 case USER_CONFIRM_HELP_INFO:
3789 dbg("not handled value[%d] here", confirm_type);
3794 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
3795 if(rv != TCORE_RETURN_SUCCESS){
3796 dbg("fail to send terminal response");
3805 static gboolean _sat_manager_handle_get_inkey_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data)
3807 TReturn rv = TCORE_RETURN_FAILURE;
3808 gboolean result = FALSE;
3810 gint inkey_data_len = 0;
3811 gchar inkey_data[SAT_TEXT_STRING_LEN_MAX];
3812 struct treq_sat_terminal_rsp_data *tr;
3813 struct sat_manager_queue_data q_data;
3815 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
3816 memset(inkey_data, 0, SAT_TEXT_STRING_LEN_MAX);
3818 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
3819 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
3824 dbg("there is no valid plugin at this point");
3831 GVariantIter *iter = NULL;
3832 GVariant *inner_gv = NULL;
3834 inner_gv = g_variant_get_variant(addtional_data);
3835 dbg("additional data exist type_format(%s)", g_variant_get_type_string(inner_gv));
3837 g_variant_get(inner_gv, "ay", &iter);
3838 while( g_variant_iter_loop (iter, "y", &data)){
3839 dbg("index(%d) data(%d)", index, data);
3840 inkey_data[index] = data;
3843 g_variant_iter_free(iter);
3844 g_variant_unref(inner_gv);
3845 inkey_data_len = index;
3848 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
3849 tr->cmd_number = q_data.cmd_data.getInkeyInd.command_detail.cmd_num;
3850 tr->cmd_type = q_data.cmd_data.getInkeyInd.command_detail.cmd_type;
3851 memcpy((void*)&tr->terminal_rsp_data.get_inkey.command_detail, &q_data.cmd_data.getInkeyInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
3852 tr->terminal_rsp_data.get_inkey.device_id.src = DEVICE_ID_ME;
3853 tr->terminal_rsp_data.get_inkey.device_id.dest = DEVICE_ID_SIM;
3855 switch (confirm_type){
3856 case USER_CONFIRM_YES:
3857 tr->terminal_rsp_data.get_inkey.result_type = RESULT_SUCCESS;
3859 if (q_data.cmd_data.getInkeyInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
3860 tr->terminal_rsp_data.get_inkey.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
3862 if (q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_inkey.inkey_type == INKEY_TYPE_YES_NO_REQUESTED) {
3863 tr->terminal_rsp_data.get_inkey.text.dcs.m_class = MSG_CLASS_RESERVED;
3864 tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
3865 tr->terminal_rsp_data.get_inkey.text.string_length = 1;
3866 tr->terminal_rsp_data.get_inkey.text.string[0] = 0x01;
3868 else if(inkey_data_len > 0)
3870 tr->terminal_rsp_data.get_inkey.text.string_length = inkey_data_len;
3872 if (!q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_inkey.alphabet_set){
3873 tr->terminal_rsp_data.get_inkey.text.is_digit_only = TRUE;
3874 tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
3875 tr->terminal_rsp_data.get_inkey.text.dcs.m_class = MSG_CLASS_RESERVED;
3877 memcpy((void*)tr->terminal_rsp_data.get_inkey.text.string, inkey_data, inkey_data_len);
3881 tr->terminal_rsp_data.get_inkey.text.dcs.m_class = MSG_CLASS_RESERVED;
3883 if(q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_inkey.alphabet_type == INPUT_ALPHABET_TYPE_SMS_DEFAULT )
3886 char tmp_str[SAT_TEXT_STRING_LEN_MAX + 1], *packed_data;
3888 dbg("sat gsm7 encoding");
3889 tcore_util_convert_utf8_to_gsm((unsigned char*) tmp_str, &tmp_len, (unsigned char*)inkey_data, inkey_data_len);
3890 packed_data = (char*) tcore_util_pack_gsm7bit((const unsigned char *)tmp_str, tmp_len);
3893 tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
3894 tr->terminal_rsp_data.get_inkey.text.string_length = strlen(packed_data);
3895 memcpy((void*) tr->terminal_rsp_data.get_inkey.text.string, packed_data, strlen(packed_data));
3897 g_free(packed_data);
3900 else if(q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_inkey.alphabet_type == INPUT_ALPHABET_TYPE_UCS2 )
3904 tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_UCS2;
3905 tcore_util_convert_utf8_to_ucs2((unsigned char*)tr->terminal_rsp_data.get_inkey.text.string,
3906 &tr->terminal_rsp_data.get_inkey.text.string_length, (unsigned char*)inkey_data, inkey_data_len);
3910 tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_RESERVED;
3911 dbg("[SAT] invalid DCS[%d]",tr->terminal_rsp_data.get_inkey.text.dcs.a_format);
3917 case USER_CONFIRM_HELP_INFO:
3918 tr->terminal_rsp_data.get_inkey.result_type = RESULT_HELP_INFO_REQUIRED_BY_USER;
3919 //TODO ctx->help_requested = TRUE;
3922 case USER_CONFIRM_NO_OR_CANCEL:
3923 tr->terminal_rsp_data.get_inkey.result_type = RESULT_BACKWARD_MOVE_BY_USER;
3925 if (q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_inkey.inkey_type == INKEY_TYPE_YES_NO_REQUESTED) {
3926 tr->terminal_rsp_data.get_inkey.result_type = RESULT_SUCCESS;
3927 tr->terminal_rsp_data.get_inkey.text.dcs.m_class = MSG_CLASS_RESERVED;
3928 tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
3929 tr->terminal_rsp_data.get_inkey.text.string_length = 1;
3930 tr->terminal_rsp_data.get_inkey.text.string[0] = 0x00;
3934 case USER_CONFIRM_TIMEOUT:
3935 tr->terminal_rsp_data.get_inkey.result_type = RESULT_NO_RESPONSE_FROM_USER;
3938 case USER_CONFIRM_END:
3939 tr->terminal_rsp_data.get_inkey.result_type = RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER;
3943 dbg("not handled value[%d] here", confirm_type);
3948 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
3949 if(rv != TCORE_RETURN_SUCCESS){
3950 dbg("fail to send terminal response");
3959 static gboolean _sat_manager_handle_get_input_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data)
3961 TReturn rv = TCORE_RETURN_FAILURE;
3962 gboolean result = FALSE;
3964 gint input_data_len = 0;
3965 gchar input_data[SAT_TEXT_STRING_LEN_MAX];
3966 struct treq_sat_terminal_rsp_data *tr;
3967 struct sat_manager_queue_data q_data;
3969 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
3970 memset(input_data, 0, SAT_TEXT_STRING_LEN_MAX);
3972 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
3973 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
3978 dbg("there is no valid plugin at this point");
3985 GVariantIter *iter = NULL;
3986 GVariant *inner_gv = NULL;
3988 inner_gv = g_variant_get_variant(addtional_data);
3989 dbg("additional data exist type_format(%s)", g_variant_get_type_string(inner_gv));
3991 g_variant_get(inner_gv, "ay", &iter);
3992 while( g_variant_iter_loop (iter, "y", &data)){
3993 dbg("index(%d) data(%d)", index, data);
3994 input_data[index] = data;
3997 g_variant_iter_free(iter);
3998 g_variant_unref(inner_gv);
3999 input_data_len = index;
4002 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
4003 tr->cmd_number = q_data.cmd_data.getInputInd.command_detail.cmd_num;
4004 tr->cmd_type = q_data.cmd_data.getInputInd.command_detail.cmd_type;
4005 memcpy((void*)&tr->terminal_rsp_data.get_input.command_detail, &q_data.cmd_data.getInputInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
4006 tr->terminal_rsp_data.get_input.device_id.src = DEVICE_ID_ME;
4007 tr->terminal_rsp_data.get_input.device_id.dest = DEVICE_ID_SIM;
4009 switch (confirm_type){
4010 case USER_CONFIRM_YES:
4011 tr->terminal_rsp_data.get_input.result_type = RESULT_SUCCESS;
4012 tr->terminal_rsp_data.get_input.text.dcs.m_class = MSG_CLASS_RESERVED;
4014 if(!q_data.cmd_data.getInputInd.command_detail.cmd_qualifier.get_input.alphabet_set){
4015 tr->terminal_rsp_data.get_input.text.is_digit_only = TRUE;
4018 if (q_data.cmd_data.getInputInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
4019 tr->terminal_rsp_data.get_input.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
4021 if(!q_data.cmd_data.getInputInd.command_detail.cmd_qualifier.get_input.user_input_unpacked_format){
4022 dbg("[SAT] packing to SMS7 default");
4024 tr->terminal_rsp_data.get_input.text.string_length = 0;
4025 tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FORMAT_SMS_DEFAULT;
4027 if (input_data_len > 0){
4029 char tmp_str[SAT_TEXT_STRING_LEN_MAX + 1], *packed_data;
4031 dbg("sat gsm7 encoding");
4032 tcore_util_convert_utf8_to_gsm((unsigned char*)tmp_str, &tmp_len, (unsigned char*)input_data, input_data_len);
4033 packed_data = (char*) tcore_util_pack_gsm7bit((const unsigned char *)tmp_str, tmp_len);
4036 memcpy((void*)tr->terminal_rsp_data.get_input.text.string, packed_data, strlen(packed_data));
4037 tr->terminal_rsp_data.get_input.text.string_length = strlen(packed_data);
4039 g_free(packed_data);
4046 dbg("[SAT] packing not required");
4048 if(q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_input.alphabet_type == INPUT_ALPHABET_TYPE_SMS_DEFAULT){
4050 tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
4051 tcore_util_convert_utf8_to_gsm((unsigned char*)tr->terminal_rsp_data.get_input.text.string,
4052 &tr->terminal_rsp_data.get_input.text.string_length, (unsigned char*)input_data, input_data_len);
4055 else if(q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_input.alphabet_type == INPUT_ALPHABET_TYPE_UCS2 ){
4057 tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FORMAT_UCS2;
4058 tcore_util_convert_utf8_to_ucs2((unsigned char*)tr->terminal_rsp_data.get_input.text.string,
4059 &tr->terminal_rsp_data.get_input.text.string_length, (unsigned char*)input_data, input_data_len);
4063 tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FORMAT_RESERVED;
4064 dbg("[SAT] invalid DCS[%d]",tr->terminal_rsp_data.get_input.text.dcs.a_format);
4068 case USER_CONFIRM_HELP_INFO:
4069 tr->terminal_rsp_data.get_input.result_type = RESULT_HELP_INFO_REQUIRED_BY_USER;
4070 //TODO ctx->help_requested = TRUE;
4073 case USER_CONFIRM_NO_OR_CANCEL:
4074 tr->terminal_rsp_data.get_input.result_type = RESULT_BACKWARD_MOVE_BY_USER;
4077 case USER_CONFIRM_TIMEOUT:
4078 tr->terminal_rsp_data.get_input.result_type = RESULT_NO_RESPONSE_FROM_USER;
4081 case USER_CONFIRM_END:
4082 tr->terminal_rsp_data.get_input.result_type = RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER;
4089 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
4090 if(rv != TCORE_RETURN_SUCCESS){
4091 dbg("fail to send terminal response");
4100 static gboolean _sat_manager_handle_setup_call_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data)
4102 TReturn rv = TCORE_RETURN_FAILURE;
4103 gboolean result = FALSE;
4105 gint input_data_len = 0;
4106 gchar input_data[SAT_TEXT_STRING_LEN_MAX];
4107 struct treq_sat_terminal_rsp_data *tr;
4108 struct sat_manager_queue_data q_data;
4110 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
4111 memset(input_data, 0, SAT_TEXT_STRING_LEN_MAX);
4113 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
4114 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
4119 dbg("there is no valid plugin at this point");
4126 GVariantIter *iter = NULL;
4127 GVariant *inner_gv = NULL;
4129 inner_gv = g_variant_get_variant(addtional_data);
4130 dbg("additional data exist type_format(%s)", g_variant_get_type_string(inner_gv));
4132 g_variant_get(inner_gv, "ay", &iter);
4133 while( g_variant_iter_loop (iter, "y", &data)){
4134 dbg("index(%d) data(%d)", index, data);
4135 input_data[index] = data;
4138 g_variant_iter_free(iter);
4139 g_variant_unref(inner_gv);
4140 input_data_len = index;
4143 tr = g_new0(struct treq_sat_terminal_rsp_data, 1);
4144 tr->cmd_number = q_data.cmd_data.setup_call.command_detail.cmd_num;
4145 tr->cmd_type = q_data.cmd_data.setup_call.command_detail.cmd_type;
4146 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));
4147 tr->terminal_rsp_data.setup_call.device_id.src = DEVICE_ID_ME;
4148 tr->terminal_rsp_data.setup_call.device_id.dest = q_data.cmd_data.setup_call.device_id.src;
4150 switch(confirm_type){
4151 case USER_CONFIRM_YES:{
4154 TelephonyObjectSkeleton *object;
4156 gchar *plg_name = NULL;
4157 GVariant *setup_call = NULL;
4159 gint command_id, call_type, confirmed_text_len, text_len, duration;
4160 gchar *confirmed_text, *text, *call_number;
4163 plg_name = (gchar *)tcore_server_get_cp_name_by_plugin(plg);
4165 path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
4168 path = g_strdup_printf("%s", MY_DBUS_PATH);
4170 dbg("path = [%s]", path);
4172 object = g_hash_table_lookup(ctx->objects, path);
4173 sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
4175 setup_call = sat_manager_setup_call_noti(ctx, plg_name, &q_data.cmd_data.setup_call);
4177 dbg("setup call type_format(%s)", g_variant_get_type_string(setup_call));
4178 g_variant_get(setup_call, "(isisi@visi)", &command_id, &confirmed_text, &confirmed_text_len, &text, &text_len, &icon_id, &call_type, &call_number, &duration);
4180 telephony_sat_emit_setup_call(sat, command_id, confirmed_text, confirmed_text_len, text, text_len, call_type,
4181 call_number, duration);
4183 sat_ui_support_launch_call_application(q_data.cmd_data.setup_call.command_detail.cmd_type, setup_call);
4188 case USER_CONFIRM_NO_OR_CANCEL:{
4189 tr->terminal_rsp_data.setup_call.result_type = RESULT_USER_DID_NOT_ACCEPT_CALL_SETUP_REQ;
4190 tr->terminal_rsp_data.setup_call.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
4191 tr->terminal_rsp_data.setup_call.cc_problem_type = CC_PROBLEM_NO_SPECIFIC_CAUSE;
4194 case USER_CONFIRM_END:{
4195 tr->terminal_rsp_data.setup_call.result_type = RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER;
4198 case USER_CONFIRM_HELP_INFO:
4200 tr->terminal_rsp_data.setup_call.result_type = RESULT_NO_RESPONSE_FROM_USER;
4205 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
4206 if(rv != TCORE_RETURN_SUCCESS){
4207 dbg("fail to send terminal response");
4214 static gboolean _sat_manager_handle_send_dtmf_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data)
4216 TReturn rv = TCORE_RETURN_FAILURE;
4217 gboolean result = FALSE;
4219 struct treq_sat_terminal_rsp_data *tr;
4220 struct sat_manager_queue_data q_data;
4222 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
4224 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
4225 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
4230 dbg("there is no valid plugin at this point");
4234 tr = g_new0(struct treq_sat_terminal_rsp_data, 1);
4235 tr->cmd_number = q_data.cmd_data.send_dtmf.command_detail.cmd_num;
4236 tr->cmd_type = q_data.cmd_data.send_dtmf.command_detail.cmd_type;
4237 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));
4238 tr->terminal_rsp_data.send_dtmf.device_id.src = DEVICE_ID_ME;
4239 tr->terminal_rsp_data.send_dtmf.device_id.dest = q_data.cmd_data.send_dtmf.device_id.src;
4241 dbg("confirm_type[%d]", confirm_type);
4243 switch(confirm_type){
4244 case USER_CONFIRM_NO_OR_CANCEL:
4245 case USER_CONFIRM_END:
4246 tr->terminal_rsp_data.send_dtmf.result_type = RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER;
4247 tr->terminal_rsp_data.send_dtmf.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
4250 tr->terminal_rsp_data.send_dtmf.result_type = RESULT_NO_RESPONSE_FROM_USER;
4255 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
4256 if(rv != TCORE_RETURN_SUCCESS){
4257 dbg("fail to send terminal response");
4265 static gboolean _sat_manager_handle_launch_browser_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data)
4267 TReturn rv = TCORE_RETURN_FAILURE;
4268 gboolean result = FALSE;
4270 struct treq_sat_terminal_rsp_data *tr;
4271 struct sat_manager_queue_data q_data;
4273 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
4275 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
4276 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
4281 dbg("there is no valid plugin at this point");
4285 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
4286 tr->cmd_number = q_data.cmd_data.launch_browser.command_detail.cmd_num;
4287 tr->cmd_type = q_data.cmd_data.launch_browser.command_detail.cmd_type;
4288 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));
4289 tr->terminal_rsp_data.launch_browser.device_id.src = q_data.cmd_data.launch_browser.device_id.dest;
4290 tr->terminal_rsp_data.launch_browser.device_id.dest = q_data.cmd_data.launch_browser.device_id.src;
4292 dbg("confirm_type[%d]", confirm_type);
4294 switch(confirm_type){
4295 case USER_CONFIRM_YES:{
4298 TelephonyObjectSkeleton *object;
4300 gchar *plg_name = NULL;
4301 GVariant *launch_browser = NULL;
4303 gint command_id = 0;
4304 gint browser_launch_type = 0, browser_id = 0;
4305 gint url_len = 0, text_len = 0, gateway_proxy_len =0;
4308 gchar *gateway_proxy = NULL;
4309 GVariant *icon_id = NULL;
4311 plg_name = (gchar *)tcore_server_get_cp_name_by_plugin(plg);
4313 path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
4315 path = g_strdup_printf("%s", MY_DBUS_PATH);
4317 dbg("path = [%s]", path);
4319 object = g_hash_table_lookup(ctx->objects, path);
4320 sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
4322 launch_browser = sat_manager_launch_browser_noti(ctx, plg_name, &q_data.cmd_data.launch_browser);
4324 dbg("launch_browser type_format(%s)", g_variant_get_type_string(launch_browser));
4325 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);
4327 telephony_sat_emit_launch_browser(sat, command_id, browser_launch_type, browser_id, url, url_len, gateway_proxy, gateway_proxy_len, text, text_len);
4329 sat_ui_support_launch_browser_application(q_data.cmd_data.launch_browser.command_detail.cmd_type, launch_browser);
4337 case USER_CONFIRM_NO_OR_CANCEL:
4338 case USER_CONFIRM_END:
4339 tr->terminal_rsp_data.launch_browser.result_type = RESULT_BACKWARD_MOVE_BY_USER;
4340 tr->terminal_rsp_data.launch_browser.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
4341 tr->terminal_rsp_data.launch_browser.browser_problem_type = BROWSER_PROBLEM_NO_SPECIFIC_CAUSE;
4345 tr->terminal_rsp_data.launch_browser.result_type = RESULT_NO_RESPONSE_FROM_USER;
4350 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
4351 if(rv != TCORE_RETURN_SUCCESS){
4352 dbg("fail to send terminal response");
4360 static gboolean _sat_manager_handle_open_channel_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data)
4362 TReturn rv = TCORE_RETURN_FAILURE;
4363 gboolean result = FALSE;
4365 struct treq_sat_terminal_rsp_data *tr;
4366 struct sat_manager_queue_data q_data;
4368 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
4370 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
4371 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
4376 dbg("there is no valid plugin at this point");
4380 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
4381 tr->cmd_number = q_data.cmd_data.open_channel.command_detail.cmd_num;
4382 tr->cmd_type = q_data.cmd_data.open_channel.command_detail.cmd_type;
4383 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));
4384 tr->terminal_rsp_data.open_channel.device_id.src = q_data.cmd_data.send_dtmf.device_id.dest;
4385 tr->terminal_rsp_data.open_channel.device_id.dest = q_data.cmd_data.send_dtmf.device_id.src;
4387 dbg("confirm_type[%d]", confirm_type);
4389 switch(confirm_type){
4390 case USER_CONFIRM_YES:{
4392 TelephonyObjectSkeleton *object;
4394 gchar *plg_name = NULL;
4396 GVariant *open_channel = NULL;
4398 gint command_id, bearer_type, protocol_type, dest_addr_type;
4399 gboolean immediate_link, auto_reconnection, bg_mode;
4400 gint text_len, buffer_size, port_number;
4401 gchar *text, *dest_address;
4403 GVariant *bearer_param;
4404 GVariant *bearer_detail;
4406 //emit send_dtmf signal
4407 plg_name = (gchar *)tcore_server_get_cp_name_by_plugin(plg);
4409 path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
4411 path = g_strdup_printf("%s", MY_DBUS_PATH);
4413 dbg("path = [%s]", path);
4415 object = g_hash_table_lookup(ctx->objects, path);
4417 open_channel = sat_manager_open_channel_noti(ctx, plg_name, &q_data.cmd_data.open_channel);
4419 dbg("open channel type_format(%s)", g_variant_get_type_string(open_channel));
4420 g_variant_get(open_channel,"(isi@vbbbi@viiiis@v)", &command_id, &text, &text_len, &icon_id, &immediate_link, &auto_reconnection, &bg_mode,
4421 &bearer_type, &bearer_param, &buffer_size, &protocol_type, &port_number, &dest_addr_type, &dest_address, &bearer_detail);
4423 /*telephony_sat_emit_open_channel(sat, command_id, text, text_len, immediate_link, auto_reconnection, bg_mode,
4424 bearer_type, bearer_param, buffer_size, protocol_type, port_number, dest_addr_type, dest_address, bearer_detail);*/
4428 gboolean b_sig = FALSE;
4429 GDBusConnection *conn = NULL;
4430 const gchar *g_path = NULL;
4432 conn = g_dbus_object_manager_server_get_connection(ctx->manager);
4433 g_path = g_dbus_object_get_object_path(G_DBUS_OBJECT(object));
4435 b_sig = sat_ui_support_exec_bip(conn, g_path, SAT_PROATV_CMD_OPEN_CHANNEL, open_channel);
4444 case USER_CONFIRM_NO_OR_CANCEL:
4445 case USER_CONFIRM_END:
4446 tr->terminal_rsp_data.open_channel.result_type = RESULT_USER_DID_NOT_ACCEPT_CALL_SETUP_REQ;
4449 tr->terminal_rsp_data.open_channel.result_type = RESULT_NO_RESPONSE_FROM_USER;
4453 memcpy((void*)&tr->terminal_rsp_data.open_channel.bearer_desc, &q_data.cmd_data.open_channel.bearer_desc, sizeof(struct tel_sat_bearer_description));
4454 memcpy((void*)&tr->terminal_rsp_data.open_channel.buffer_size, &q_data.cmd_data.open_channel.buffer_size, sizeof(struct tel_sat_buffer_size));
4457 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
4458 if(rv != TCORE_RETURN_SUCCESS){
4459 dbg("fail to send terminal response");
4467 gboolean sat_manager_handle_user_confirm(struct custom_data *ctx, TcorePlugin *plg, GVariant *user_confirm_data)
4469 gboolean rv = FALSE;
4470 gboolean result = FALSE;
4471 struct sat_manager_queue_data q_data;
4473 gint command_id, command_type, confirm_type;
4474 GVariant *additional_data = NULL;
4476 dbg("user_confirm_data type_format(%s)", g_variant_get_type_string(user_confirm_data));
4477 g_variant_get(user_confirm_data, "(iiv)", &command_id, &confirm_type, &additional_data);
4479 dbg("[SAT] user confirm data command id(%d), confirm_type(%d)", command_id, confirm_type);
4481 rv = sat_manager_queue_peek_data_by_id(ctx, &q_data, command_id);
4483 dbg("[SAT] no commands in queue");
4487 command_type = (gint)q_data.cmd_type;
4488 dbg("[SAT] command type(%d)", command_type);
4490 switch(command_type){
4491 case SAT_PROATV_CMD_SELECT_ITEM:
4492 result = _sat_manager_handle_menu_select_confirm(ctx, plg, command_id, confirm_type, additional_data);
4494 case SAT_PROATV_CMD_DISPLAY_TEXT:
4495 result = _sat_manager_handle_display_text_confirm(ctx, plg, command_id, confirm_type, additional_data);
4497 case SAT_PROATV_CMD_GET_INKEY:
4498 result = _sat_manager_handle_get_inkey_confirm(ctx, plg, command_id, confirm_type, additional_data);
4500 case SAT_PROATV_CMD_GET_INPUT:
4501 result = _sat_manager_handle_get_input_confirm(ctx, plg, command_id, confirm_type, additional_data);
4503 case SAT_PROATV_CMD_SETUP_CALL:
4504 result = _sat_manager_handle_setup_call_confirm(ctx, plg, command_id, confirm_type, additional_data);
4506 case SAT_PROATV_CMD_SEND_DTMF:
4507 result = _sat_manager_handle_send_dtmf_confirm(ctx, plg, command_id, confirm_type, additional_data);
4509 case SAT_PROATV_CMD_LAUNCH_BROWSER:
4510 result = _sat_manager_handle_launch_browser_confirm(ctx, plg, command_id, confirm_type, additional_data);
4512 case SAT_PROATV_CMD_OPEN_CHANNEL:
4513 result = _sat_manager_handle_open_channel_confirm(ctx, plg, command_id, confirm_type, additional_data);
4516 dbg("[SAT] cannot handle user confirm command(0x%x)", command_type);
4523 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)
4527 TelephonyObjectSkeleton *object;
4529 gchar *plg_name = NULL;
4530 GVariant *play_tone = NULL;
4533 gint command_id, tone_type, duration;
4538 if(!display_status){
4539 struct treq_sat_terminal_rsp_data *tr = NULL;
4540 dbg("[SAT] fail to show ui display for play tone");
4542 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
4544 tr->cmd_number = q_data->cmd_data.play_tone.command_detail.cmd_num;
4545 tr->cmd_type = q_data->cmd_data.play_tone.command_detail.cmd_type;
4546 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));
4548 tr->terminal_rsp_data.play_tone.device_id.src = DEVICE_ID_ME;
4549 tr->terminal_rsp_data.play_tone.device_id.dest = q_data->cmd_data.play_tone.device_id.src;
4550 tr->terminal_rsp_data.play_tone.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
4552 sat_manager_send_terminal_response(ctx->comm, plg, tr);
4558 //emit play tone signal
4559 plg_name = (gchar *)tcore_server_get_cp_name_by_plugin(plg);
4561 path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
4564 path = g_strdup_printf("%s", MY_DBUS_PATH);
4566 dbg("path = [%s]", path);
4568 object = g_hash_table_lookup(ctx->objects, path);
4569 sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
4571 play_tone = sat_manager_play_tone_noti(ctx, plg_name, &q_data->cmd_data.play_tone);
4573 dbg("play tone type_format(%s)", g_variant_get_type_string(play_tone));
4574 g_variant_get(play_tone, "(isi@vii)", &command_id, &text, &text_len, &icon_id, &tone_type, &duration);
4576 telephony_sat_emit_play_tone(sat, command_id, text, text_len, tone_type, duration);
4582 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)
4586 TelephonyObjectSkeleton *object;
4588 gchar *plg_name = NULL;
4589 GVariant *send_sms = NULL;
4592 gint command_id, ton, npi, tpdu_type;
4593 gboolean b_packing_required;
4594 gint text_len, number_len, tpdu_data_len;
4595 gchar* text, *dialling_number;
4596 GVariant *tpdu_data, *icon_id;
4598 if(!display_status){
4599 struct treq_sat_terminal_rsp_data *tr = NULL;
4600 dbg("[SAT] fail to show ui display for send sms");
4602 tr = g_new0(struct treq_sat_terminal_rsp_data, 1);
4604 tr->cmd_number = q_data->cmd_data.sendSMSInd.command_detail.cmd_num;
4605 tr->cmd_type = q_data->cmd_data.sendSMSInd.command_detail.cmd_type;
4606 memcpy((void*)&tr->terminal_rsp_data.send_sms.command_detail, &q_data->cmd_data.sendSMSInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
4608 tr->terminal_rsp_data.send_sms.device_id.src = DEVICE_ID_ME;
4609 tr->terminal_rsp_data.send_sms.device_id.dest = q_data->cmd_data.sendSMSInd.device_id.src;
4610 tr->terminal_rsp_data.send_sms.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
4612 sat_manager_send_terminal_response(ctx->comm, plg, tr);
4617 //emit send sms signal
4618 plg_name = (gchar *)tcore_server_get_cp_name_by_plugin(plg);
4620 path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
4623 path = g_strdup_printf("%s", MY_DBUS_PATH);
4625 dbg("path = [%s]", path);
4627 object = g_hash_table_lookup(ctx->objects, path);
4628 sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
4630 send_sms = sat_manager_send_sms_noti(ctx, plg_name, &q_data->cmd_data.sendSMSInd);
4632 dbg("send sms type_format(%s)", g_variant_get_type_string(send_sms));
4633 g_variant_get(send_sms, "(isi@vbiisii@vi)", &command_id, &text, &text_len, &icon_id, &b_packing_required, &ton, &npi,
4634 &dialling_number, &number_len, &tpdu_type, &tpdu_data, &tpdu_data_len);
4636 telephony_sat_emit_send_sms(sat, command_id, text, text_len, b_packing_required,
4637 ton, npi, dialling_number, number_len, tpdu_type, tpdu_data, tpdu_data_len);
4642 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)
4646 TelephonyObjectSkeleton *object;
4648 gchar *plg_name = NULL;
4649 GVariant *send_ss = NULL;
4652 gint command_id, ton, npi;
4653 gint text_len, ss_str_len;
4654 gchar* text, *ss_string;
4657 if(!display_status){
4658 struct treq_sat_terminal_rsp_data *tr = NULL;
4659 dbg("[SAT] fail to show ui display for send ss");
4661 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
4663 tr->cmd_number = q_data->cmd_data.send_ss.command_detail.cmd_num;
4664 tr->cmd_type = q_data->cmd_data.send_ss.command_detail.cmd_type;
4665 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));
4667 tr->terminal_rsp_data.send_ss.device_id.src = DEVICE_ID_ME;
4668 tr->terminal_rsp_data.send_ss.device_id.dest = q_data->cmd_data.send_ss.device_id.src;
4669 tr->terminal_rsp_data.send_ss.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
4671 sat_manager_send_terminal_response(ctx->comm, plg, tr);
4677 //emit send ss signal
4678 plg_name = (gchar *)tcore_server_get_cp_name_by_plugin(plg);
4680 path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
4683 path = g_strdup_printf("%s", MY_DBUS_PATH);
4685 dbg("path = [%s]", path);
4687 object = g_hash_table_lookup(ctx->objects, path);
4688 sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
4690 send_ss = sat_manager_send_ss_noti(ctx, plg_name, &q_data->cmd_data.send_ss);
4692 dbg("send ss type_format(%s)", g_variant_get_type_string(send_ss));
4693 g_variant_get(send_ss, "(isi@viiis)", &command_id, &text, &text_len, &icon_id,
4694 &ton, &npi, &ss_str_len, &ss_string);
4696 telephony_sat_emit_send_ss(sat, command_id, text, text_len, ton, npi, ss_string);
4697 sat_ui_support_launch_ciss_application(SAT_PROATV_CMD_SEND_SS, send_ss);
4702 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)
4706 TelephonyObjectSkeleton *object;
4708 gchar *plg_name = NULL;
4709 GVariant *send_ussd = NULL;
4712 gint text_len, ussd_str_len;
4713 gchar* text, *ussd_string;
4716 if(!display_status){
4717 struct treq_sat_terminal_rsp_data *tr = NULL;
4718 dbg("[SAT] fail to show ui display for send ussd");
4720 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
4722 tr->cmd_number = q_data->cmd_data.send_ussd.command_detail.cmd_num;
4723 tr->cmd_type = q_data->cmd_data.send_ussd.command_detail.cmd_type;
4724 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));
4726 tr->terminal_rsp_data.send_ussd.device_id.src = DEVICE_ID_ME;
4727 tr->terminal_rsp_data.send_ussd.device_id.dest = q_data->cmd_data.send_ussd.device_id.src;
4728 tr->terminal_rsp_data.send_ussd.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
4730 sat_manager_send_terminal_response(ctx->comm, plg, tr);
4736 /* emit send ussd signal */
4737 plg_name = (gchar *)tcore_server_get_cp_name_by_plugin(plg);
4739 path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
4742 path = g_strdup_printf("%s", MY_DBUS_PATH);
4744 dbg("path = [%s]", path);
4746 object = g_hash_table_lookup(ctx->objects, path);
4747 sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
4749 send_ussd = sat_manager_send_ussd_noti(ctx, plg_name, &q_data->cmd_data.send_ussd);
4751 dbg("send ussd type_format(%s)", g_variant_get_type_string(send_ussd));
4752 g_variant_get(send_ussd, "(isi@vis)", &command_id, &text, &text_len, &icon_id, &ussd_str_len, &ussd_string);
4754 telephony_sat_emit_setup_ussd(sat, command_id, text, text_len, ussd_string);
4755 sat_ui_support_launch_ciss_application(SAT_PROATV_CMD_SEND_USSD, send_ussd);
4760 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)
4762 TReturn rv = TCORE_RETURN_FAILURE;
4763 gboolean result = FALSE;
4765 struct treq_sat_terminal_rsp_data *tr;
4768 dbg("there is no valid plugin at this point");
4772 tr = g_new0(struct treq_sat_terminal_rsp_data, 1);
4773 tr->cmd_number = q_data->cmd_data.idle_mode.command_detail.cmd_num;
4774 tr->cmd_type = q_data->cmd_data.idle_mode.command_detail.cmd_type;
4775 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));
4776 tr->terminal_rsp_data.setup_idle_mode_text.device_id.src = q_data->cmd_data.idle_mode.device_id.dest;
4777 tr->terminal_rsp_data.setup_idle_mode_text.device_id.dest = q_data->cmd_data.idle_mode.device_id.src;
4779 tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS;
4780 if (q_data->cmd_data.idle_mode.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
4781 tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
4783 //fail to display text
4784 if(!display_status){
4785 dbg("[SAT] fail to show ui display for setup_idle_mode_text");
4786 tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
4790 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
4791 if(rv != TCORE_RETURN_SUCCESS){
4792 dbg("fail to send terminal response");
4797 sat_ui_support_terminate_sat_ui();
4802 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)
4804 struct treq_sat_terminal_rsp_data tr;
4806 memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
4808 tr.cmd_number = q_data->cmd_data.refresh.command_detail.cmd_num;
4809 tr.cmd_type = q_data->cmd_data.refresh.command_detail.cmd_type;
4810 memcpy((void*)&tr.terminal_rsp_data.refresh.command_detail, &q_data->cmd_data.refresh.command_detail, sizeof(struct tel_sat_cmd_detail_info));
4811 tr.terminal_rsp_data.refresh.device_id.src = q_data->cmd_data.refresh.device_id.dest;
4812 tr.terminal_rsp_data.refresh.device_id.dest = q_data->cmd_data.refresh.device_id.src;
4814 if(!display_status){
4815 dbg("fail to show ui for refresh");
4816 tr.terminal_rsp_data.refresh.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
4819 dbg("success to show ui for refresh");
4820 tr.terminal_rsp_data.more_time.result_type = RESULT_SUCCESS;
4821 tr.terminal_rsp_data.more_time.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
4824 dbg("send refresh tr");
4825 sat_manager_send_terminal_response(ctx->comm, plg, &tr);
4829 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)
4833 TelephonyObjectSkeleton *object;
4835 gchar *plg_name = NULL;
4837 GVariant *send_dtmf = NULL;
4838 gint command_id = 0;
4839 gint text_len = 0, dtmf_str_len = 0;
4841 gchar *dtmf_str = NULL;
4842 GVariant *icon_id = NULL;
4844 if(!display_status){
4845 struct treq_sat_terminal_rsp_data *tr = NULL;
4846 dbg("[SAT] fail to show ui display for send_dtmf");
4848 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
4850 tr->cmd_number = q_data->cmd_data.send_dtmf.command_detail.cmd_num;
4851 tr->cmd_type = q_data->cmd_data.send_dtmf.command_detail.cmd_type;
4852 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));
4854 tr->terminal_rsp_data.send_dtmf.device_id.src = DEVICE_ID_ME;
4855 tr->terminal_rsp_data.send_dtmf.device_id.dest = q_data->cmd_data.send_dtmf.device_id.src;
4856 tr->terminal_rsp_data.send_dtmf.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
4858 sat_manager_send_terminal_response(ctx->comm, plg, tr);
4864 //emit send_dtmf signal
4865 plg_name = (gchar *)tcore_server_get_cp_name_by_plugin(plg);
4867 path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
4869 path = g_strdup_printf("%s", MY_DBUS_PATH);
4871 dbg("path = [%s]", path);
4873 object = g_hash_table_lookup(ctx->objects, path);
4874 sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
4876 send_dtmf = sat_manager_send_dtmf_noti(ctx, plg_name, &q_data->cmd_data.send_dtmf);
4878 dbg("send_dtmf type_format(%s)", g_variant_get_type_string(send_dtmf));
4879 g_variant_get(send_dtmf, "(isi@vis)", &command_id, &text, &text_len, &icon_id, &dtmf_str_len, &dtmf_str);
4881 telephony_sat_emit_send_dtmf(sat, command_id, text, text_len, dtmf_str, dtmf_str_len);
4886 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)
4889 TelephonyObjectSkeleton *object;
4891 gchar *plg_name = NULL;
4893 GVariant *open_channel = NULL;
4895 gint command_id, bearer_type, protocol_type, dest_addr_type;
4896 gboolean immediate_link, auto_reconnection, bg_mode;
4897 gint text_len, buffer_size, port_number;
4898 gchar *text, *dest_address;
4900 GVariant *bearer_param;
4901 GVariant *bearer_detail;
4903 if(!display_status){
4904 struct treq_sat_terminal_rsp_data *tr = NULL;
4905 dbg("[SAT] fail to show ui display for open channel");
4907 tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
4909 tr->cmd_number = q_data->cmd_data.open_channel.command_detail.cmd_num;
4910 tr->cmd_type = q_data->cmd_data.open_channel.command_detail.cmd_type;
4911 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));
4913 tr->terminal_rsp_data.open_channel.device_id.src = q_data->cmd_data.send_dtmf.device_id.dest;
4914 tr->terminal_rsp_data.open_channel.device_id.dest = q_data->cmd_data.send_dtmf.device_id.src;
4915 tr->terminal_rsp_data.open_channel.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
4917 sat_manager_send_terminal_response(ctx->comm, plg, tr);
4923 //emit send_dtmf signal
4924 plg_name = (gchar *)tcore_server_get_cp_name_by_plugin(plg);
4926 path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
4928 path = g_strdup_printf("%s", MY_DBUS_PATH);
4930 dbg("path = [%s]", path);
4932 object = g_hash_table_lookup(ctx->objects, path);
4934 open_channel = sat_manager_open_channel_noti(ctx, plg_name, &q_data->cmd_data.open_channel);
4936 dbg("open channel type_format(%s)", g_variant_get_type_string(open_channel));
4937 g_variant_get(open_channel,"(isi@vbbbi@viiiis@v)", &command_id, &text, &text_len, &icon_id, &immediate_link, &auto_reconnection, &bg_mode,
4938 &bearer_type, &bearer_param, &buffer_size, &protocol_type, &port_number, &dest_addr_type, &dest_address, &bearer_detail);
4940 /*telephony_sat_emit_open_channel(sat, command_id, text, text_len, immediate_link, auto_reconnection, bg_mode,
4941 bearer_type, bearer_param, buffer_size, protocol_type, port_number, dest_addr_type, dest_address, bearer_detail);*/
4945 gboolean b_sig = FALSE;
4946 GDBusConnection *conn = NULL;
4947 const gchar *g_path = NULL;
4949 conn = g_dbus_object_manager_server_get_connection(ctx->manager);
4950 g_path = g_dbus_object_get_object_path(G_DBUS_OBJECT(object));
4952 b_sig = sat_ui_support_exec_bip(conn, g_path, SAT_PROATV_CMD_OPEN_CHANNEL, open_channel);
4958 gboolean sat_manager_handle_ui_display_status(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gboolean display_status)
4960 gboolean result = FALSE;
4961 struct sat_manager_queue_data q_data;
4963 dbg("[SAT] ui display status : command id(%d) display status(%d)", command_id, display_status);
4964 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
4966 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
4967 dbg("[SAT] command peek data from queue is failed. didn't find in command Q!!");
4972 dbg("there is no valid plugin at this point");
4976 switch(q_data.cmd_type){
4977 case SAT_PROATV_CMD_PLAY_TONE:
4978 result = _sat_manager_handle_play_tone_ui_display_status(ctx, plg, &q_data, display_status);
4980 case SAT_PROATV_CMD_SEND_SMS:
4981 result = _sat_manager_handle_send_sms_ui_display_status(ctx, plg, &q_data, display_status);
4983 case SAT_PROATV_CMD_SEND_SS:
4984 result = _sat_manager_handle_send_ss_ui_display_status(ctx, plg, &q_data, display_status);
4986 case SAT_PROATV_CMD_SEND_USSD:
4987 result = _sat_manager_handle_send_ussd_ui_display_status(ctx, plg, &q_data, display_status);
4989 case SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT:
4990 result = _sat_manager_handle_setup_idle_mode_text_ui_display_status(ctx, plg, &q_data, display_status);
4992 case SAT_PROATV_CMD_REFRESH:
4993 result = _sat_manager_handle_refresh_ui_display_status(ctx, plg, &q_data, display_status);
4995 case SAT_PROATV_CMD_SEND_DTMF:
4996 result = _sat_manager_handle_send_dtmf_ui_display_status(ctx, plg, &q_data, display_status);
4998 case SAT_PROATV_CMD_OPEN_CHANNEL:
4999 result = _sat_manager_handle_open_channel_ui_display_status(ctx, plg, &q_data, display_status);
5002 dbg("[SAT] cannot handle ui display status command(0x%x)", q_data.cmd_type);
5009 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)
5011 GVariant *data = NULL;
5013 dbg("download data type_format(%s)", g_variant_get_type_string(download_data));
5014 g_variant_get(download_data, "v", &data);
5018 case EVENT_USER_ACTIVITY:
5019 dbg("data type_format(%s)", g_variant_get_type_string(data));
5020 evt_download->device_identitie.src = src_dev;
5021 evt_download->device_identitie.dest = dest_dev;
5023 case EVENT_IDLE_SCREEN_AVAILABLE:
5024 dbg("data type_format(%s)", g_variant_get_type_string(data));
5025 g_variant_get(data, "(b)", &evt_download->idle_screen);
5026 evt_download->device_identitie.src = DEVICE_ID_DISPLAY;
5027 evt_download->device_identitie.dest = dest_dev;
5028 dbg("idle screen available (%d)", evt_download->idle_screen);
5030 case EVENT_LANGUAGE_SELECTION:
5031 dbg("data type_format(%s)", g_variant_get_type_string(data));
5032 g_variant_get(data, "(i)", &evt_download->language);
5033 evt_download->device_identitie.src = src_dev;
5034 evt_download->device_identitie.dest = dest_dev;
5035 dbg("selected language (%d)", evt_download->language);
5037 case EVENT_BROWSER_TERMINATION:{
5038 dbg("data type_format(%s)", g_variant_get_type_string(data));
5039 g_variant_get(data, "(i)", &evt_download->browser_termination);
5040 evt_download->device_identitie.src = src_dev;
5041 evt_download->device_identitie.dest = dest_dev;
5042 dbg("browser termination cause(%d)", evt_download->browser_termination);
5044 case EVENT_DATA_AVAILABLE:{
5045 gint channel_id, channel_status, channel_info, channel_data_len;
5047 dbg("data type_format(%s)", g_variant_get_type_string(data));
5048 g_variant_get(data, "(iiii)", &channel_id, &channel_status, &channel_info, &channel_data_len);
5049 evt_download->device_identitie.src = src_dev;
5050 evt_download->device_identitie.dest = dest_dev;
5051 evt_download->channel_status.channel_id = channel_id;
5052 evt_download->channel_status.status = channel_status;
5053 evt_download->channel_status.status_info = channel_info;
5054 evt_download->channel_data_len.data_len = channel_data_len;
5055 dbg("data available channel id (%d)", evt_download->channel_status.channel_id);
5057 case EVENT_CHANNEL_STATUS:{
5058 gint channel_id, channel_status, channel_info;
5060 dbg("data type_format(%s)", g_variant_get_type_string(data));
5061 g_variant_get(data, "(iii)", &channel_id, &channel_status, &channel_info);
5062 evt_download->device_identitie.src = src_dev;
5063 evt_download->device_identitie.dest = dest_dev;
5064 evt_download->channel_status.channel_id = channel_id;
5065 evt_download->channel_status.status = channel_status;
5066 evt_download->channel_status.status_info = channel_info;
5070 dbg("not support download event (%d)", event_type);
5077 gboolean sat_manager_update_language(struct custom_data *ctx, const char *plugin_name, GVariant *language_noti)
5080 TcorePlugin *plg = NULL;
5081 gpointer handle = NULL;
5082 static Storage *strg;
5084 TReturn rv = TCORE_RETURN_FAILURE;
5085 gboolean result = FALSE;
5086 const gchar *lang_str = NULL;
5087 gint command_id, language;
5088 gboolean b_specified;
5090 struct treq_sat_terminal_rsp_data *tr;
5091 struct sat_manager_queue_data q_data;
5094 strg = tcore_server_find_storage(s, "vconf");
5095 handle = tcore_storage_create_handle(strg, "vconf");
5097 err("fail to create vconf handle");
5101 plg = tcore_server_find_plugin(ctx->server, plugin_name);
5103 dbg("there is no valid plugin at this point");
5107 memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
5109 dbg("language_noti type_format(%s)", g_variant_get_type_string(language_noti));
5110 g_variant_get(language_noti, "(iib)", &command_id, &language, &b_specified);
5112 if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
5113 dbg("[SAT] command dequeue failed. didn't find in command Q!!");
5117 if(q_data.cmd_type != SAT_PROATV_CMD_LANGUAGE_NOTIFICATION){
5118 dbg("[SAT] Language Noti dequeue failed. didn't find in command Q!!");
5122 tr = g_new0(struct treq_sat_terminal_rsp_data, 1);
5123 tr->cmd_number = q_data.cmd_data.language_notification.command_detail.cmd_num;
5124 tr->cmd_type = q_data.cmd_data.language_notification.command_detail.cmd_type;
5125 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));
5126 tr->terminal_rsp_data.language_notification.device_id.src = DEVICE_ID_ME;
5127 tr->terminal_rsp_data.language_notification.device_id.dest = DEVICE_ID_SIM;
5128 tr->terminal_rsp_data.language_notification.result_type = RESULT_SUCCESS;
5130 lang_str = _convert_sim_lang_to_string((enum tel_sim_language_type)language);
5132 dbg("language is not exist");
5133 tr->terminal_rsp_data.language_notification.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
5135 dbg("converted lang (%s)", lang_str);
5137 result = tcore_storage_set_string(strg,STORAGE_KEY_LANGUAGE_SET, (const char*)lang_str);
5139 dbg("fail to update language");
5140 tr->terminal_rsp_data.language_notification.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
5144 rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
5145 if(rv != TCORE_RETURN_SUCCESS){
5146 dbg("fail to send terminal response");