tizen 2.3.1 release tizen_2.3.1 submit/tizen_2.3.1/20150915.082243 tizen_2.3.1_release
authorjk7744.park <jk7744.park@samsung.com>
Tue, 8 Sep 2015 13:40:10 +0000 (22:40 +0900)
committerjk7744.park <jk7744.park@samsung.com>
Tue, 8 Sep 2015 13:40:10 +0000 (22:40 +0900)
53 files changed:
CMakeLists.txt [changed mode: 0644->0755]
README [new file with mode: 0644]
debian/changelog [deleted file]
debian/compat [deleted file]
debian/control [deleted file]
debian/copyright [deleted file]
debian/dirs [deleted file]
debian/docs [deleted file]
debian/rules [deleted file]
debian/tel-plugin-dbus-tapi.install.in [deleted file]
introspection/call.xml [changed mode: 0644->0755]
introspection/gen.sh
introspection/gps.xml [new file with mode: 0644]
introspection/manager.xml
introspection/modem.xml
introspection/network.xml
introspection/oem.xml [new file with mode: 0644]
introspection/phonebook.xml
introspection/sat.xml
introspection/sim.xml
introspection/sms.xml
introspection/ss.xml
packaging/tel-plugin-dbus_tapi.spec [changed mode: 0644->0755]
res/tapi.conf [deleted file]
src/call.c [changed mode: 0644->0755]
src/common.c [changed mode: 0644->0755]
src/common.h
src/desc-dbus.c [changed mode: 0644->0755]
src/gps.c [new file with mode: 0755]
src/modem.c
src/network.c [changed mode: 0644->0755]
src/oem.c [new file with mode: 0644]
src/phonebook.c [changed mode: 0644->0755]
src/sap.c
src/sat.c [changed mode: 0644->0755]
src/sat_manager.c
src/sat_manager.h
src/sat_ui_support/TelCall.h [changed mode: 0644->0755]
src/sat_ui_support/TelDefines.h
src/sat_ui_support/TelErr.h
src/sat_ui_support/TelSat.h
src/sat_ui_support/TelSatEnvelope.h
src/sat_ui_support/TelSatObj.h
src/sat_ui_support/TelSatProactvCmd.h
src/sat_ui_support/TelSim.h
src/sat_ui_support/TelSs.h [changed mode: 0644->0755]
src/sat_ui_support/sat_ui_support.c [changed mode: 0644->0755]
src/sat_ui_support/sat_ui_support.h [changed mode: 0644->0755]
src/sat_util.c [deleted file]
src/sim.c [changed mode: 0644->0755]
src/sms.c [changed mode: 0644->0755]
src/ss.c [changed mode: 0644->0755]
test/network-search.sh [new file with mode: 0755]

old mode 100644 (file)
new mode 100755 (executable)
index ca70b79..3a61b8e
@@ -8,26 +8,51 @@ SET(LIBDIR "\${prefix}/lib")
 SET(INCLUDEDIR "\${prefix}/include")
 SET(PKGCONFIGDIR "${PREFIX}/lib/pkgconfig" CACHE PATH PKGCONFIGDIR)
 SET(CMAKE_INSTALL_PREFIX "${PREFIX}")
+SET(INTROSPECTION "${CMAKE_SOURCE_DIR}/introspection")
 
 # Set required packages
 INCLUDE(FindPkgConfig)
-pkg_check_modules(pkgs REQUIRED glib-2.0 gobject-2.0 gio-2.0 gio-unix-2.0 tcore dlog aul appsvc)
+pkg_check_modules(pkgs REQUIRED
+       glib-2.0
+       gio-2.0
+       gio-unix-2.0
+       libxml-2.0
+       tcore
+       aul
+       appsvc
+       security-server
+       pkgmgr
+)
 
 FOREACH(flag ${pkgs_CFLAGS})
        SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
 ENDFOREACH(flag)
 
 
-INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/include/ ${CMAKE_SOURCE_DIR}/cmake_tmp ${CMAKE_SOURCE_DIR}/src/sat_ui_support/)
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/include/ ${CMAKE_SOURCE_DIR}/src/sat_ui_support/)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Wextra -fvisibility=hidden -fPIC -fdata-sections -ffunction-sections -Wl,--gc-sections")
 
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Werror -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wdeclaration-after-statement -Wmissing-declarations -Wcast-align")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -O2 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wdeclaration-after-statement -Wmissing-declarations -Wall -Wno-array-bounds -Wno-empty-body -Wno-ignored-qualifiers -Wswitch-default -Wno-unused-but-set-parameter -Wno-unused-but-set-variable")
 
-ADD_DEFINITIONS("-DFEATURE_DLOG_DEBUG")
+ADD_DEFINITIONS("-DENABLE_KPI_LOGS")
+ADD_DEFINITIONS("-DGCF")
+ADD_DEFINITIONS("-DFEATURE_TLOG_DEBUG")
 ADD_DEFINITIONS("-DTCORE_LOG_TAG=\"DBUS\"")
 ADD_DEFINITIONS("-DPLUGIN_VERSION=${VERSION}")
+ADD_DEFINITIONS("-DEXPORT_API=__attribute__((visibility(\"default\")))")
+#ADD_DEFINITIONS("-DTIZEN_USE_DESKTOP_FILE")
+#ADD_DEFINITIONS("-DTIZEN_SUPPORT_SAT_ICON")
+
+IF (BOARD_PLATFORM_SPREADTRUM)
+ADD_DEFINITIONS("-DTIZEN_PLATFORM_LITE")
+ELSE()
+ADD_DEFINITIONS("-DTIZEN_PLATFORM_USE_QCOM_QMI")
+ENDIF (BOARD_PLATFORM_SPREADTRUM)
 
 MESSAGE(${CMAKE_C_FLAGS})
-MESSAGE(${CMAKE_EXE_LINKER_FLAGS})
+MESSAGE(${pkgs_LDFLAGS})
 
 SET(SRCS
                src/desc-dbus.c
@@ -39,27 +64,38 @@ SET(SRCS
                src/sms.c
                src/sat.c
                src/sat_manager.c
-               src/sat_util.c
                src/sat_ui_support/sat_ui_support.c
                src/ss.c
                src/call.c
                src/modem.c
+               src/gps.c
+               src/oem.c
 )
 
 ADD_CUSTOM_COMMAND(
+       WORKING_DIRECTORY
        OUTPUT ${CMAKE_BINARY_DIR}/generated-code.c
-       COMMAND gdbus-codegen --interface-prefix org.tizen.telephony. --generate-c-code generated-code --c-namespace Telephony --c-generate-object-manager --generate-docbook generated-docs ${CMAKE_SOURCE_DIR}/introspection/manager.xml ${CMAKE_SOURCE_DIR}/introspection/network.xml ${CMAKE_SOURCE_DIR}/introspection/sim.xml ${CMAKE_SOURCE_DIR}/introspection/phonebook.xml ${CMAKE_SOURCE_DIR}/introspection/sap.xml ${CMAKE_SOURCE_DIR}/introspection/sat.xml ${CMAKE_SOURCE_DIR}/introspection/sms.xml ${CMAKE_SOURCE_DIR}/introspection/call.xml ${CMAKE_SOURCE_DIR}/introspection/ss.xml ${CMAKE_SOURCE_DIR}/introspection/modem.xml
+       COMMAND gdbus-codegen --interface-prefix org.tizen.telephony. --generate-c-code generated-code --c-namespace Telephony --c-generate-object-manager --generate-docbook generated-docs
+       ${INTROSPECTION}/manager.xml
+       ${INTROSPECTION}/network.xml
+       ${INTROSPECTION}/sim.xml
+       ${INTROSPECTION}/phonebook.xml
+       ${INTROSPECTION}/sap.xml
+       ${INTROSPECTION}/sat.xml
+       ${INTROSPECTION}/sms.xml
+       ${INTROSPECTION}/call.xml
+       ${INTROSPECTION}/ss.xml
+       ${INTROSPECTION}/modem.xml
+       ${INTROSPECTION}/gps.xml
+       ${INTROSPECTION}/oem.xml
        COMMENT "Generating GDBus .c/.h")
 
 # library build
-ADD_LIBRARY(dbus-tapi-plugin SHARED ${SRCS}
-       ${CMAKE_BINARY_DIR}/generated-code.c)
+ADD_LIBRARY(dbus-tapi-plugin SHARED ${SRCS} ${CMAKE_BINARY_DIR}/generated-code.c)
 TARGET_LINK_LIBRARIES(dbus-tapi-plugin ${pkgs_LDFLAGS})
 SET_TARGET_PROPERTIES(dbus-tapi-plugin PROPERTIES PREFIX "" OUTPUT_NAME dbus-tapi-plugin)
-ADD_DEPENDENCIES(dbus-tapi-plugin XXX)
-
 
 # install
-INSTALL(FILES ${CMAKE_SOURCE_DIR}/res/tapi.conf DESTINATION ${PREFIX}/etc/dbus-1/system.d)
 INSTALL(TARGETS dbus-tapi-plugin
                LIBRARY DESTINATION lib/telephony/plugins)
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/LICENSE DESTINATION /usr/share/license RENAME tel-plugin-dbus_tapi)
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..5fbf319
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+SLP-TAPI DBus based Client-Server plugin
diff --git a/debian/changelog b/debian/changelog
deleted file mode 100644 (file)
index c95b6ef..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-tel-plugin-dbus-tapi (0.1.20) unstable; urgency=low
-
-  * Replace dun pin ctrl from ps to modem
-  * Git: slp/pkgs/t/tel-plugin-dbus_tapi
-  * Tag: tel-plugin-dbus-tapi_0.1.20
-
- -- DongHoo Park <donghoo.park@samsung.com>  Mon, 11 Jun 2012 15:00:33 +0900
-
-tel-plugin-dbus-tapi (0.1.19) unstable; urgency=low
-
-  * Fix OBS Build error
-  * Git: slp/pkgs/t/tel-plugin-dbus_tapi
-  * Tag: tel-plugin-dbus-tapi_0.1.19
-
- -- Youngman Park <youngman.park@samsung.com>  Fri, 25 May 2012 14:10:57 +0900
-
-tel-plugin-dbus-tapi (0.1.18) unstable; urgency=low
-
-  * Add new feature for Call & Factory and phonebook select handling
-  * Git: slp/pkgs/t/tel-plugin-dbus_tapi
-  * Tag: tel-plugin-dbus-tapi_0.1.18
-
- -- Youngman Park <youngman.park@samsung.com>  Mon, 21 May 2012 18:00:57 +0900
-
-tel-plugin-dbus-tapi (0.1.17) unstable; urgency=low
-
-  * Add lock info feature and so on
-  * Git: slp/pkgs/t/tel-plugin-dbus_tapi
-  * Tag: tel-plugin-dbus-tapi_0.1.17
-
- -- Kyeongchul Kim <kyeongchul.kim@samsung.com>  Thu, 17 May 2012 17:39:57 +0900
-
-tel-plugin-dbus-tapi (0.1.16) unstable; urgency=low
-
-  * Fix OBS Build Error
-  * Git: slp/pkgs/t/tel-plugin-dbus_tapi
-  * Tag: tel-plugin-dbus-tapi_0.1.16
-
- -- Youngman Park <youngman.park@samsung.com>  Wed, 09 Apr 2012 14:50:05 +0900
-
-tel-plugin-dbus-tapi (0.1.15) unstable; urgency=low
-
-  * Add Call New API ( call custom service )
-  * Git: slp/pkgs/t/tel-plugin-dbus_tapi
-  * Tag: tel-plugin-dbus-tapi_0.1.15
-
- -- Youngman Park <youngman.park@samsung.com>  Mon, 07 Apr 2012 16:13:05 +0900
-
-tel-plugin-dbus-tapi (0.1.14) unstable; urgency=low
-
-  * Fix build error
-  * Git: slp/pkgs/t/tel-plugin-dbus_tapi
-  * Tag: tel-plugin-dbus-tapi_0.1.14
-
- -- Inho Oh <inho48.oh@samsung.com>  Fri, 27 Apr 2012 13:43:05 +0900
-
-tel-plugin-dbus-tapi (0.1.13) unstable; urgency=low
-
-  * Add sat en/decoding functions
-  * Git: slp/pkgs/t/tel-plugin-dbus_tapi
-  * Tag: tel-plugin-dbus-tapi_0.1.13
-
- -- Kyeongchul Kim <kyeongchul.kim@samsung.com>  Tue, 17 Apr 2012 23:35:39 +0900
-
-tel-plugin-dbus-tapi (0.1.12) unstable; urgency=low
-
-  * fixed lock status update in dbus custom data
-  * Git: slp/pkgs/t/tel-plugin-dbus_tapi
-  * Tag: tel-plugin-dbus-tapi_0.1.12
-
- -- Kyeongchul Kim <kyeongchul.kim@samsung.com>  Mon, 09 Apr 2012 22:08:42 +0900
-
-tel-plugin-dbus-tapi (0.1.11) unstable; urgency=low
-
-  * version up for code sync with public binary
-  * Git: slp/pkgs/t/tel-plugin-dbus_tapi
-  * Tag: tel-plugin-dbus-tapi_0.1.11
-
- -- Kyeongchul Kim <kyeongchul.kim@samsung.com>  Mon, 02 Apr 2012 12:20:05 +0900
-
-tel-plugin-dbus-tapi (0.1.10) unstable; urgency=low
-
-  * Fix prefix (TAPI_ to TCORE_)
-  * Git: slp/pkgs/t/tel-plugin-dbus_tapi
-  * Tag: tel-plugin-dbus-tapi_0.1.10
-
- -- Inho Oh <inho48.oh@samsung.com>  Tue, 27 Mar 2012 22:13:53 +0900
-
-tel-plugin-dbus-tapi (0.1.9) unstable; urgency=low
-
-  * Fixed capi-sim TC issue and apply SAT handling code
-  * Git: slp/pkgs/t/tel-plugin-dbus_tapi
-  * Tag: tel-plugin-dbus-tapi_0.1.9
-
- -- Kyeongchul Kim <kyeongchul.kim@samsung.com>  Tue, 27 Mar 2012 17:19:22 +0900
-
-tel-plugin-dbus-tapi (0.1.8) unstable; urgency=low
-
-  * Fixed emulator call issue
-  * Git: slp/pkgs/t/tel-plugin-dbus_tapi
-  * Tag: tel-plugin-dbus-tapi_0.1.8
-
- -- Inho Oh <inho48.oh@samsung.com>  Thu, 22 Mar 2012 17:38:20 +0900
-
-tel-plugin-dbus-tapi (0.1.7) unstable; urgency=low
-
-  * Fix obs build break
-  * Git: slp/pkgs/t/tel-plugin-dbus_tapi
-  * Tag: tel-plugin-dbus-tapi_0.1.7
-
- -- DongHoo Park <donghoo.park@samsung.com>  Wed, 21 Mar 2012 14:54:30 +0900
-
-tel-plugin-dbus-tapi (0.1.6) unstable; urgency=low
-
-  * Version up
-  * Git: slp/pkgs/t/tel-plugin-dbus_tapi
-  * Tag: tel-plugin-dbus-tapi_0.1.6
-
- -- DongHoo Park <donghoo.park@samsung.com>  Wed, 21 Mar 2012 14:11:37 +0900
-
-tel-plugin-dbus-tapi (0.1.5) unstable; urgency=low
-
-  * Remove legacy header files and update phonebook code
-  * Git: slp/pkgs/t/tel-plugin-dbus_tapi
-  * Tag: tel-plugin-dbus-tapi_0.1.5
-
- -- Kyeongchul Kim <kyeongchul.kim@samsung.com>  Mon, 19 Mar 2012 22:59:27 +0900
-
-tel-plugin-dbus-tapi (0.1.4) unstable; urgency=low
-
-  * Fix network selection mode get value mismatch bug
-  * Git: slp/pkgs/t/tel-plugin-dbus_tapi
-  * Tag: tel-plugin-dbus-tapi_0.1.4
-
- -- Inho Oh <inho48.oh@samsung.com>  Mon, 19 Mar 2012 14:13:18 +0900
-
-tel-plugin-dbus-tapi (0.1.3) unstable; urgency=low
-
-  * Add code for CF, CB, CW
-  * Git: slp/pkgs/t/tel-plugin-dbus_tapi
-  * Tag: tel-plugin-dbus-tapi_0.1.3
-
- -- Youngman Park <youngman.park@samsung.com>  Sat, 17 Mar 2012 18:50:25 +0900
-
-tel-plugin-dbus-tapi (0.1.2) unstable; urgency=low
-
-  * Add code for Video Call
-  * Git: slp/pkgs/t/tel-plugin-dbus_tapi
-  * Tag: tel-plugin-dbus-tapi_0.1.2
-
- -- Youngman Park <youngman.park@samsung.com>  Sat, 17 Mar 2012 18:20:25 +0900
-
-tel-plugin-dbus-tapi (0.1.1) unstable; urgency=low
-
-  * Fix version mismatch
-  * Git: slp/pkgs/t/tel-plugin-dbus_tapi
-  * Tag: tel-plugin-dbus-tapi_0.1.1
-
- -- Inho Oh <inho48.oh@samsung.com>  Fri, 16 Mar 2012 00:45:25 +0900
-
-tel-plugin-dbus-tapi (0.1.0) unstable; urgency=low
-
-  * Initial
-  * Git: slp/pkgs/t/tel-plugin-dbus_tapi
-  * Tag: tel-plugin-dbus-tapi_0.1.0
-
- -- Inho Oh <inho48.oh@samsung.com>  Thu, 15 Mar 2012 23:40:55 +0900
diff --git a/debian/compat b/debian/compat
deleted file mode 100644 (file)
index 7ed6ff8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-5
diff --git a/debian/control b/debian/control
deleted file mode 100644 (file)
index 36887ba..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-Source: tel-plugin-dbus-tapi
-Section: libs
-Priority: extra
-Maintainer: Jongman Park <jman.park@samsung.com>
-Uploaders: Jayoung Gu <jygu@samsung.com>, Kyeongchul Kim <kyeongchul.kim@samsung.com>, Youngman Park <youngman.park@samsung.com>, Inho Oh <inho48.oh@samsung.com>,  DongHoo Park <donghoo.park@samsung.com>
-Build-Depends: debhelper (>= 5),
-               libglib2.0-dev, libtcore-dev, libaul-1-dev, dlog-dev
-Standards-Version: 0.0.0
-
-Package: tel-plugin-dbus-tapi
-Section: libs
-Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends},
-Description: telephony plugin library for communication with dbus based client library (Shared Object)
-
-Package: tel-plugin-dbus-tapi-dbg
-Section: debug
-Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}, tel-plugin-dbus (= ${Source-Version})
-Description: telephony plugin library for communication with dbus based client library (dbg package)
-
diff --git a/debian/copyright b/debian/copyright
deleted file mode 100644 (file)
index d5a0cca..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License version 2.1.
-
-The full text of the LGPL 2.1 can be found in
-/usr/share/common-licenses.
diff --git a/debian/dirs b/debian/dirs
deleted file mode 100644 (file)
index ca882bb..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-usr/bin
-usr/sbin
diff --git a/debian/docs b/debian/docs
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/debian/rules b/debian/rules
deleted file mode 100755 (executable)
index baf2f27..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/usr/bin/make -f
-# -*- makefile -*-
-# Sample debian/rules that uses debhelper.
-# This file was originally written by Joey Hess and Craig Small.
-# As a special exception, when this file is copied by dh-make into a
-# dh-make output file, you may use that output file without restriction.
-# This special exception was added by Craig Small in version 0.37 of dh-make.
-
-# Uncomment this to turn on verbose mode.
-#export DH_VERBOSE=1
-
-CFLAGS ?= -Wall -g
-CXXFLAGS ?=  -Wall -g
-LDFLAGS ?=
-PREFIX ?= /usr
-DATADIR ?= /opt
-
-ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
-       CFLAGS += -O0
-       CXXFLAGS += -O0
-else
-       CFLAGS += -O2
-       CXXFLAGS += -O2
-endif
-
-#CFLAGS += -fvisibility=hidden -fPIC
-CFLAGS += -fvisibility=default -fPIC
-LDFLAGS += -rdynamic -fPIC -Wl,--rpath=$(PREFIX)/lib -Wl,--as-needed
-#LDFLAGS += -Wl,--unresolved-symbols=ignore-in-shared-libs,--as-needed
-
-CMAKE_TMP_DIR = $(CURDIR)/cmake_tmp
-
-configure: configure-stamp
-configure-stamp:
-       dh_testdir
-       # Add here commands to configure the package.
-       mkdir -p $(CMAKE_TMP_DIR);
-       cd $(CMAKE_TMP_DIR); CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" cmake .. -DCMAKE_INSTALL_PREFIX=$(PREFIX)
-
-       touch configure-stamp
-
-build: build-stamp
-
-build-stamp: configure-stamp
-       dh_testdir
-
-       # Add here commands to compile the package.
-       cd $(CMAKE_TMP_DIR) && $(MAKE) all
-
-       for f in `find $(CURDIR)/debian/ -name "*.in"`; do \
-               cat $$f > $${f%.in}; \
-               sed -i -e "s#@PREFIX@#$(PREFIX)#g" $${f%.in}; \
-               sed -i -e "s#@DATADIR@#$(DATADIR)#g" $${f%.in}; \
-       done
-
-       touch $@
-
-clean:
-       dh_testdir
-       dh_testroot
-       rm -f build-stamp configure-stamp
-
-       # Add here commands to clean up after the build process.
-       rm -rf $(CMAKE_TMP_DIR)
-
-       for f in `find $(CURDIR)/debian/ -name "*.in"`; do \
-               rm -f $${f%.in}; \
-       done
-
-       dh_clean
-
-install: build
-       dh_testdir
-       dh_testroot
-       dh_clean -k
-       dh_installdirs
-
-       # Add here commands to install the package into debian/wavplayer.
-       cd $(CMAKE_TMP_DIR) && $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install
-
-
-# Build architecture-independent files here.
-binary-indep: build install
-# We have nothing to do by default.
-
-# Build architecture-dependent files here.
-binary-arch: build install
-       dh_testdir
-       dh_testroot
-       dh_installchangelogs
-       dh_installdocs
-       dh_installexamples
-       dh_install --sourcedir=debian/tmp
-#      dh_installmenu
-#      dh_installdebconf
-#      dh_installlogrotate
-#      dh_installemacsen
-#      dh_installpam
-#      dh_installmime
-#      dh_python
-#      dh_installinit
-#      dh_installcron
-#      dh_installinfo
-       dh_installman
-       dh_link
-       dh_strip --dbg-package=tel-plugin-dbus-tapi-dbg
-       dh_compress
-       dh_fixperms
-#      dh_perl
-       dh_makeshlibs
-       dh_installdeb
-       dh_shlibdeps --dpkg-shlibdeps-params="-v"
-       dh_gencontrol
-       dh_md5sums
-       dh_builddeb
-
-binary: binary-indep binary-arch
-.PHONY: build clean binary-indep binary-arch binary install configure
diff --git a/debian/tel-plugin-dbus-tapi.install.in b/debian/tel-plugin-dbus-tapi.install.in
deleted file mode 100644 (file)
index 9d23faf..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-@PREFIX@/lib/*
-@PREFIX@/etc/dbus-1/system.d/*
old mode 100644 (file)
new mode 100755 (executable)
index ce7b867..7526357
@@ -3,6 +3,7 @@
        <interface name="org.tizen.telephony.Call">
                <method name="Dial">
                        <arg direction="in" type="i" name="call_type"/>
+                       <arg direction="in" type="i" name="call_ecc"/>
                        <arg direction="in" type="s" name="call_number"/>
                        <arg direction="out" type="i" name="result"/>
                </method>
                        <arg direction="out" type="i" name="end_type"/>
                </method>
 
-               <method name="Dtmf">
+               <method name="StartContDtmf">
+                       <arg direction="in" type="y" name="dtmf_digit"/>
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+
+               <method name="StopContDtmf">
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+
+               <method name="SendBurstDtmf">
                        <arg direction="in" type="s" name="dtmf_string"/>
+                       <arg direction="in" type="i" name="pulse_width"/>
+                       <arg direction="in" type="i" name="inter_digit_interval"/>
                        <arg direction="out" type="i" name="result"/>
                </method>
 
                        <arg direction="out" type="i" name="result"/>
                </method>
 
+               <method name="GetPrivacyMode">
+                       <arg direction="out" type="i" name="result"/>
+                       <arg direction="out" type="i" name="privacy_mode"/>
+               </method>
+
+               <method name="SetPrivacyMode">
+                       <arg direction="in" type="i" name="privacy_mode"/>
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+
                <method name="GetStatus">
                        <arg direction="in" type="i" name="call_id"/>
                        <arg direction="out" type="i" name="call_id"/>
                        <arg direction="out" type="i" name="result"/>
                </method>
 
-               <method name="GetVolume">
+               <method name="GetSoundVolumeLevel">
                        <arg direction="in" type="i" name="sound_device"/>
                        <arg direction="in" type="i" name="sound_type"/>
-                       <arg direction="out" type="i" name="result"/>
                        <arg direction="out" type="aa{sv}" name="list"/>
+                       <arg direction="out" type="i" name="result"/>
                </method>
 
-               <method name="SetVolume">
+               <method name="SetSoundVolumeLevel">
                        <arg direction="in" type="i" name="sound_device"/>
                        <arg direction="in" type="i" name="sound_type"/>
                        <arg direction="in" type="i" name="sound_volume"/>
                        <arg direction="out" type="i" name="result"/>
                </method>
 
-               <method name="GetMuteStatus">
+               <method name="GetSoundMuteStatus">
                        <arg direction="out" type="i" name="result"/>
+                       <arg direction="out" type="i" name="path"/>
                        <arg direction="out" type="i" name="status"/>
                </method>
 
-               <method name="Mute">
-                       <arg direction="out" type="i" name="result"/>
-               </method>
-
-               <method name="Unmute">
+               <method name="SetSoundMuteStatus">
+                       <arg direction="in" type="i" name="path"/>
+                       <arg direction="in" type="i" name="status"/>
                        <arg direction="out" type="i" name="result"/>
                </method>
 
                        <arg direction="out" type="i" name="result"/>
                </method>
 
+               <method name="SetSoundClockStatus">
+                       <arg direction="in" type="b" name="clock_status"/>
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+
+               <method name="SetPreferredVoiceSubscription">
+                       <arg direction="in" type="i" name="preferred_subscription"/>
+                       <arg direction="out" type="i" name="result"/>
+               </method>
 
+               <method name="GetPreferredVoiceSubscription">
+                       <arg direction="out" type="i" name="preferred_subscription"/>
+                       <arg direction="out" type="i" name="result"/>
+               </method>
 
                <signal name="VoiceCallStatusIdle">
                        <arg type="i" name="call_id"/>
                        <arg type="i" name="call_id"/>
                </signal>
 
+               <signal name="ForwardedCall">
+                       <arg type="i" name="call_id"/>
+               </signal>
+
                <signal name="BarredIncoming">
                        <arg type="i" name="call_id"/>
                </signal>
                        <arg type="i" name="call_id"/>
                </signal>
 
+               <signal name="CallPrivacyMode">
+                       <arg type="i" name="privacy_mode"/>
+               </signal>
+
+               <signal name="CallOtaspStatus">
+                       <arg type="i" name="otasp_status"/>
+               </signal>
+
+               <signal name="CallOtapaStatus">
+                       <arg type="i" name="otapa_status"/>
+               </signal>
+
+               <signal name="CallSignalInfo">
+                       <arg type="i" name="signal_type"/>
+                       <arg type="i" name="pitch_type"/>
+                       <arg type="i" name="signal"/>
+               </signal>
+
+               <signal name="CallInfoRec">
+                       <arg type="i" name="id"/>
+                       <arg type="i" name="type"/>
+                       <arg type="s" name="param"/>
+               </signal>
+
                <signal name="CallSoundPath">
                        <arg type="i" name="sound_path"/>
                </signal>
                        <arg type="i" name="status"/>
                </signal>
 
+               <signal name="CallSoundClockStatus">
+                       <arg type="b" name="status"/>
+               </signal>
+
+               <signal name="CallPreferredVoiceSubscription">
+                       <arg type="i" name="preferred_subs"/>
+               </signal>
        </interface>
 
 </node>
index 82252f5..1c50ece 100755 (executable)
@@ -3,4 +3,4 @@ gdbus-codegen --interface-prefix org.tizen.telephony. \
        --c-namespace Telephony                       \
        --c-generate-object-manager                 \
        --generate-docbook generated-docs                       \
-       manager.xml network.xml sim.xml phonebook.xml sat.xml sap.xml
+       manager.xml network.xml sim.xml phonebook.xml sat.xml sap.xml gps.xml oem.xml modem.xml ss.xml call.xml sms.xml
diff --git a/introspection/gps.xml b/introspection/gps.xml
new file mode 100644 (file)
index 0000000..b1f29ec
--- /dev/null
@@ -0,0 +1,70 @@
+<node>
+       <!--
+               org.tizen.telephony.Gps:
+               @short_description: Tizen Telephony Gps interface
+
+               Gps interface.
+
+       -->
+       <interface name="org.tizen.telephony.Gps">
+               <method name="SetFrequencyAiding">
+                       <arg direction="in" type="y" name="state"/>
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+               <method name="ConfirmMeasurePos">
+                       <arg direction="in" type="s" name="data"/>
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+               <method name="EnableSmartAssistant">
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+               <method name="DisableSmartAssistant">
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+               <method name="SyncSmartAssistantAreaList">
+                       <arg direction="in" type="i" name="count"/>
+                       <arg direction="in" type="v" name="list"/>
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+               <method name="DelSmartAssistantAreaList">
+                       <arg direction="in" type="i" name="count"/>
+                       <arg direction="in" type="v" name="list"/>
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+               <method name="AddSmartAssistantArea">
+                       <arg direction="in" type="i" name="index"/>
+                       <arg direction="in" type="i" name="mode_state"/>
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+               <method name="ModifySmartAssistantArea">
+                       <arg direction="in" type="i" name="index"/>
+                       <arg direction="in" type="i" name="mode_state"/>
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+               <method name="SetSmartAssistantInfo">
+                       <arg direction="in" type="i" name="index"/>
+                       <arg direction="in" type="i" name="lpp_state"/>
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+               <signal name="AssistData">
+                       <arg type="s" name="data"/>
+               </signal>
+               <signal name="MeasurePosition">
+                       <arg type="s" name="data"/>
+               </signal>
+               <signal name="ResetAssistData">
+               </signal>
+               <signal name="FrequencyAiding">
+                       <arg type="s" name="data"/>
+               </signal>
+               <signal name="AreaStatus">
+                       <arg type="i" name="status"/>
+                       <arg type="i" name="index"/>
+               </signal>
+               <signal name="SyncStatus">
+                       <arg type="i" name="status"/>
+                       <arg type="i" name="cause"/>
+               </signal>
+       </interface>
+
+</node>
index a14c937..2d5bafc 100644 (file)
@@ -4,6 +4,9 @@
                <method name="GetModems">
                        <arg direction="out" type="as" name="list"/>
                </method>
+               <signal name="SimInserted">
+                       <arg type="i" name="count"/>
+               </signal>
        </interface>
 
 </node>
index fc63791..428e8e2 100644 (file)
@@ -23,7 +23,6 @@
                        SetFlightMode:
                        @result: Success(0)
                        @enable: Flight mode Off (FLASE), Flight mode On (TRUE)
-                       @result: Flight mode On (1), Flight mode Off (2)
 
                        Request to ...
                -->
                </method>
 
                <!--
+                       GetFlightMode:
+                       @result: Success(0)
+                       @enable: Flight mode Off (FLASE), Flight mode On (TRUE)
+
+                       Request to ...
+               -->
+               <method name="GetFlightMode">
+                       <arg direction="out" type="b" name="enable"/>
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+
+               <!--
                        GetVersion:
                        @result: Success(0)
                        @software: Software version
@@ -58,6 +69,9 @@
                <method name="GetSerialNumber">
                        <arg direction="out" type="i" name="result"/>
                        <arg direction="out" type="s" name="sn"/>
+                       <arg direction="out" type="s" name="meid"/>
+                       <arg direction="out" type="s" name="imei"/>
+                       <arg direction="out" type="s" name="imeisv"/>
                </method>
 
                <!--
@@ -80,7 +94,7 @@
 
                <!--
                        Power:
-                       @status: Online(0), Offline(1), Error(2)
+                       @status: Online(0), Offline(1), Error(2), Unknown(3)
                -->
                <signal name="Power">
                        <arg type="i" name="status"/>
 
                <!-- power: Power status -->
                <property name="power" type="i" access="read"/>
-               <property name="imei" type="i" access="read"/>
 
        </interface>
 
index 60c8a7e..79adb1f 100644 (file)
                </method>
 
                <!--
+                       GetNgbrCellInfo:
+                       @info: A set of key/dict pairs with serving cell and neighboring cells information.
+                       @result: Success(0)
+
+                       Get Neighboring Cells information
+               -->
+               <method name="GetNgbrCellInfo">
+                       <arg direction="out" type="aa{sv}" name="info"/>
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+
+               <!--
+                       SetEmergencyCallbackMode:
+                       @mode: Enter(0), Exit(1)
+                       @result: Success(0)
+
+                       Set Emergency Callback Mode
+               -->
+               <method name="SetEmergencyCallbackMode">
+                       <arg direction="in" type="i" name="mode"/>
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+
+               <!--
+                       SetRoamingPreference:
+                       @roam_pref: Automatic(1), Automatic_A(2), Automatic_B(3), Home Only(4), Roam Only(5)
+                       @result: Success(0)
+
+                       Set network roaming preference
+               -->
+               <method name="SetRoamingPreference">
+                       <arg direction="in" type="i" name="roam_pref"/>
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+
+               <!--
+                       GetRoamingPreference:
+                       @roam_pref: Automatic(1), Automatic_A(2), Automatic_B(3), Home Only(4), Roam Only(5)
+                       @result: Success(0)
+
+                       Get network roaming preference
+               -->
+               <method name="GetRoamingPreference">
+                       <arg direction="out" type="i" name="roam_pref"/>
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+
+               <!--
+                       SetDefaultDataSubscription:
+                       @result: Success(0)
+
+                       Set Default Data Subscription
+               -->
+               <method name="SetDefaultDataSubscription">
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+
+               <!--
+                       GetDefaultDataSubscription:
+                       @default_subs: 'default' Data Subscription. SIM 1 (0), SIM 2 (1), Unknown (-1)
+                       @result: Success(0)
+
+                       Get Default Data Subscription
+               -->
+               <method name="GetDefaultDataSubscription">
+                       <arg direction="out" type="i" name="default_subs"/>
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+
+               <!--
+                       SetDefaultSubscription:
+                       @result: Success(0)
+
+                       Set Default Subscription for CS (Voice)
+               -->
+               <method name="SetDefaultSubscription">
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+
+               <!--
+                       GetDefaultSubscription:
+                       @default_subs: 'default' subscription for CS (Voice). SIM 1 (0), SIM 2 (1), Unknown (-1)
+                       @result: Success(0)
+
+                       Get 'current' network for Voice service
+               -->
+               <method name="GetDefaultSubscription">
+                       <arg direction="out" type="i" name="default_subs"/>
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+
+               <!--
                        RegistrationStatus:
                        @circuit: Circuit service status.
                        @packet: Packet service status.
 
                <!--
                        Info:
-                       @rssi: Radio Signal Strength infomation. (0 ~ 6)
-                       @battery: Battery information. (0 ~ 5)
+                       @sig_dbm: Radio Signal Strength infomation.
 
-                       RSSI and Battery information.
+                       Signal Strength information (Dbm)
                -->
-               <signal name="Info">
-                       <arg type="i" name="rssi"/>
-                       <arg type="i" name="battery"/>
+               <signal name="SignalStrength">
+                       <arg type="i" name="dbm"/>
                </signal>
-
                <!--
                        Change:
                        @act: Access technology. GSM(1), GPRS(2), EGPRS(3), UMTS(4), IS95A(17), IS95B(18), EHRPD(25), LTE(33)
                <signal name="Change">
                        <arg type="i" name="act"/>
                        <arg type="s" name="plmn"/>
-                       <arg type="i" name="lac"/>
                </signal>
 
                <!--
                        <arg type="i" name="cell_id"/>
                </signal>
 
-               <!-- rssi: 0 ~ 5 -->
-               <property name="rssi" type="i" access="read"/>
+               <!--
+                       EmergencyCallbackMode:
+                       @mode: Emergency Callback Mode
+
+                       Network emergency callback mode state
+               -->
+               <signal name="EmergencyCallbackMode">
+                       <arg type="i" name="mode"/>
+               </signal>
+
+               <!--
+                       DefaultDataSubscription:
+                       @default_subs: Default Data Subscription.
+
+                       'default' Data Subscription information.
+               -->
+               <signal name="DefaultDataSubscription">
+                       <arg type="i" name="default_subs"/>
+               </signal>
+
+               <!--
+                       DefaultSubscription:
+                       @default_subs: Default Subscription for CS (Voice).
+
+                       'default' Subscription information for CS (Voice).
+               -->
+               <signal name="DefaultSubscription">
+                       <arg type="i" name="default_subs"/>
+               </signal>
+
+               <!-- sig_dbm : Signal Strength DBM -->
+               <property name="sig_dbm" type="i" access="read"/>
+
+               <!-- sig_level 0 ~ 5 -->
+               <property name="sig_level" type="i" access="read"/>
 
                <!-- lac: Location Area Code -->
                <property name="lac" type="i" access="read"/>
                <!-- cell_id: Cell ID -->
                <property name="cell_id" type="i" access="read"/>
 
-               <!-- network_name: Network Name -->
-               <property name="network_name" type="s" access="read"/>
-
-               <!-- service_type: Service Type -->
+               <!--
+                        service_type: Service Type
+                        0=Unknown, 1=No service, 2=Emergency,
+                        3=Search, 4=2G, 5=2.5G,
+                        6=2.5G EDGE, 7=3G, 8=HSDPA, 9=LTE
+               -->
                <property name="service_type" type="i" access="read"/>
 
-               <!-- network_type: Network Type (0=NONE, 1=HSDPA, 2=HSUPA, 3=HSPA) -->
-               <property name="network_type" type="i" access="read"/>
+               <!--
+                        access_technology
+                        0=Unknown, 1=GSM, 2=GPRS, 3=EGPRS,
+                        4=UMTS, 5=GSM_UTRAN,
+                        17=IS95A, 18=IS95B, 19=CDMA_1X,
+                        20=EVO_REV0, 21=CDMA_1X_EVDO_REV0,
+                        22=EVDO_REVA, 23=CDMA_1X_EVDO_REVA
+                        24=EVDV, 33=LTE,
+                        255=Not specified
+               -->
+               <property name="access_technology" type="i" access="read"/>
+
+               <!--
+                        ps_type: Packet Service Type
+                        0=NONE, 1=HSDPA, 2=HSUPA, 3=HSPA, 4=HSPA+
+               -->
+               <property name="ps_type" type="i" access="read"/>
 
-               <!-- circuit_status: Circuit domain status -->
+               <!--
+                        circuit_status: Circuit domain status
+                        0=NONE, 1=EMERGENCY, 2=FULL, 3=SEARCH
+               -->
                <property name="circuit_status" type="i" access="read"/>
 
-               <!-- packet_status: Packet domain status -->
+               <!--
+                        packet_status: Packet domain status
+                        0=NONE, 1=EMERGENCY, 2=FULL, 3=SEARCH
+               -->
                <property name="packet_status" type="i" access="read"/>
 
-               <!-- roaming_status: Roaming status -->
+               <!--
+                        roaming_status: Roaming status
+               -->
                <property name="roaming_status" type="b" access="read"/>
 
-               <!-- name_priority: Network name, SPN name display priority -->
-               <property name="name_priority" type="i" access="read"/>
+               <!--
+                        name_priority: Network name, SPN name display option
+                        available data: 0=None, 1=SIM(EFspn), 2=Operator, 3=Any(SIM/Network)
+               -->
+               <property name="name_option" type="i" access="read"/>
+
+               <!--
+                        network_name
+                        Network Operator Name
+               -->
+               <property name="network_name" type="s" access="read"/>
 
-               <!-- spn_name: SPN name -->
+               <!--
+                        spn_name
+                        Service Provider Name
+               -->
                <property name="spn_name" type="s" access="read"/>
 
        </interface>
diff --git a/introspection/oem.xml b/introspection/oem.xml
new file mode 100644 (file)
index 0000000..2eaf8fc
--- /dev/null
@@ -0,0 +1,29 @@
+<node>
+       <!--
+               org.tizen.telephony.Oem:
+               @short_description: Tizen Telephony Oem interface
+
+               Oem interface.
+
+       -->
+       <interface name="org.tizen.telephony.OEM">
+               <method name="SendOemData">
+                       <arg direction="in" type="i" name="oem_id"/>
+                       <arg direction="in" type="s" name="data"/>
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+
+               <method name="SendOemDataWithResponse">
+                       <arg direction="in" type="i" name="oem_id"/>
+                       <arg direction="in" type="s" name="data"/>
+                       <arg direction="out" type="i" name="oem_id"/>
+                       <arg direction="out" type="s" name="data"/>
+               </method>
+
+               <signal name="OemData">
+                       <arg type="i" name="oem_id"/>
+                       <arg type="s" name="data"/>
+               </signal>
+       </interface>
+
+</node>
index f7e239b..e5a5b78 100644 (file)
@@ -27,6 +27,7 @@
                        <arg direction="out" type="i" name="index_max"/>
                        <arg direction="out" type="i" name="number_length_max"/>
                        <arg direction="out" type="i" name="text_length_max"/>
+                       <arg direction="out" type="i" name="used_count"/>
                </method>
 
                <method name="GetUsimMetaInfo">
@@ -45,6 +46,8 @@
                        <arg direction="out" type="i" name="dcs"/>
                        <arg direction="out" type="s" name="number"/>
                        <arg direction="out" type="i" name="ton"/>
+                       <arg direction="out" type="s" name="sne"/>
+                       <arg direction="out" type="i" name="sne_dcs"/>
                        <arg direction="out" type="s" name="number2"/>
                        <arg direction="out" type="i" name="number2_ton"/>
                        <arg direction="out" type="s" name="number3"/>
@@ -65,6 +68,8 @@
                        <arg direction="in" type="i" name="dcs"/>
                        <arg direction="in" type="s" name="number"/>
                        <arg direction="in" type="i" name="ton"/>
+                       <arg direction="in" type="s" name="sne"/>
+                       <arg direction="in" type="i" name="sne_dcs"/>
                        <arg direction="in" type="s" name="number2"/>
                        <arg direction="in" type="i" name="number2_ton"/>
                        <arg direction="in" type="s" name="number3"/>
 
                <signal name="Status">
                        <arg type="i" name="status"/>
+                       <arg type="b" name="b_fdn"/>
+                       <arg type="b" name="b_adn"/>
+                       <arg type="b" name="b_sdn"/>
+                       <arg type="b" name="b_usim"/>
+                       <arg type="b" name="b_aas"/>
+                       <arg type="b" name="b_gas"/>
                </signal>
 
        </interface>
index 3bc31b6..b646bf7 100644 (file)
                        <arg direction="out" type="i" name="menu_count"/>
                        <arg direction="out" type="b" name="menu_help_info"/>
                        <arg direction="out" type="b" name="menu_updated"/>
+                       <!--
+                       Enable below tags if SAT icon is supported...
+                       <arg direction="out" type="v" name="icon_id"/>
+                       <arg direction="out" type="v" name="icon_list"/>
+                       -->
                </method>
                                                
                <method name="SendUiDisplayStatus">
                        <arg type="i" name="menu_count"/>
                        <arg type="b" name="menu_help_info"/>
                        <arg type="b" name="menu_updated"/>
+                       <!--
+                       Enable below tags if SAT icon is supported...
+                       <arg type="v" name="icon_id"/>
+                       <arg type="v" name="icon_list"/>
+                       -->
                </signal>
                
                <signal name="DisplayText">
                        <arg type="b" name="priority_high"/>
                        <arg type="b" name="user_rsp_required"/>
                        <arg type="b" name="immediately_rsp"/>
+                       <!--
+                       Enable below tag if SAT icon is supported...
+                       <arg type="v" name="icon_id"/>
+                       -->                     
                </signal>
                
                <signal name="SelectItem">
                        <arg type="i" name="default_item_index"/>
                        <arg type="i" name="menu_count"/>
                        <arg type="v" name="menu_item"/>
+                       <!--
+                       Enable below tags if SAT icon is supported...
+                       <arg type="v" name="icon_id"/>
+                       <arg type="v" name="icon_list"/>
+                       -->
                </signal>
                
                <signal name="GetInkey">
                        <arg type="s" name="text"/>
                        <arg type="i" name="text_len"/>
                        <arg type="i" name="duration"/>
+                       <!--
+                       Enable below tag if SAT icon is supported...
+                       <arg type="v" name="icon_id"/>
+                       -->
                </signal>
                
                <signal name="GetInput">
                        <arg type="i" name="response_len_min"/>
                        <arg type="s" name="default_text"/>
                        <arg type="i" name="default_text_len"/>
+                       <!--
+                       Enable below tag if SAT icon is supported...
+                       <arg type="v" name="icon_id"/>
+                       -->
                </signal>
                
                <signal name="PlayTone">
                        <arg type="i" name="command_id"/>
                        <arg type="s" name="text"/>
                        <arg type="i" name="text_len"/>
+                       <!--
+                       Enable below tag if SAT icon is supported...
+                       <arg type="v" name="icon_id"/>
+                       -->
                        <arg type="i" name="tone_type"/>
                        <arg type="i" name="duration"/>
                </signal>
                        <arg type="i" name="command_id"/>
                        <arg type="s" name="text"/>
                        <arg type="i" name="text_len"/>
+                       <!--
+                       Enable below tag if SAT icon is supported...
+                       <arg type="v" name="icon_id"/>
+                       -->
                        <arg type="b" name="packing_required"/>
                        <arg type="i" name="ton"/>
                        <arg type="i" name="npi"/>
                        <arg type="i" name="command_id"/>
                        <arg type="s" name="text"/>
                        <arg type="i" name="text_len"/>
+                       <!--
+                       Enable below tag if SAT icon is supported...
+                       <arg type="v" name="icon_id"/>
+                       -->
                        <arg type="i" name="ton"/>
                        <arg type="i" name="npi"/>
                        <arg type="s" name="ss_string"/>
                        <arg type="i" name="command_id"/>
                        <arg type="s" name="text"/>
                        <arg type="i" name="text_len"/>
+                       <!--
+                       Enable below tag if SAT icon is supported...
+                       <arg type="v" name="icon_id"/>
+                       -->
+                       <arg type="y" name="dcs"/>
                        <arg type="s" name="ussd_string"/>
                </signal>
 
                <signal name="SetupCall">
                        <arg type="i" name="command_id"/>
+                       <arg type="s" name="confirm_text"/>
+                       <arg type="i" name="confirm_text_len"/>
                        <arg type="s" name="text"/>
                        <arg type="i" name="text_len"/>
+                       <!--
+                       Enable below tag if SAT icon is supported...
+                       <arg type="v" name="icon_id"/>
+                       -->
                        <arg type="i" name="call_type"/>
                        <arg type="s" name="call_number"/>
                        <arg type="i" name="duration"/>
                        <arg type="i" name="command_id"/>
                        <arg type="s" name="text"/>
                        <arg type="i" name="text_len"/>
+                       <!--
+                       Enable below tag if SAT icon is supported...
+                       <arg type="v" name="icon_id"/>
+                       -->
                </signal>
                                
                <signal name="OpenChannel">
                        <arg type="i" name="command_id"/>
                        <arg type="s" name="text"/>
                        <arg type="i" name="text_len"/>
+                       <!--
+                       Enable below tag if SAT icon is supported...
+                       <arg type="v" name="icon_id"/>
+                       -->
                        <arg type="b" name="immediate_link"/>
                        <arg type="b" name="auto_reconnection"/>
                        <arg type="b" name="bg_mode"/>
                        <arg type="i" name="command_id"/>
                        <arg type="s" name="text"/>
                        <arg type="i" name="text_len"/>
+                       <!--
+                       Enable below tag if SAT icon is supported...
+                       <arg type="v" name="icon_id"/>
+                       -->
                        <arg type="i" name="channel_id"/>
                </signal>
                                
                        <arg type="i" name="command_id"/>
                        <arg type="s" name="text"/>
                        <arg type="i" name="text_len"/>
+                       <!--
+                       Enable below tag if SAT icon is supported...
+                       <arg type="v" name="icon_id"/>
+                       -->
                        <arg type="i" name="channel_id"/>
                        <arg type="i" name="data_len"/>
                </signal>
                        <arg type="i" name="command_id"/>
                        <arg type="s" name="text"/>
                        <arg type="i" name="text_len"/>
+                       <!--
+                       Enable below tag if SAT icon is supported...
+                       <arg type="v" name="icon_id"/>
+                       -->
                        <arg type="i" name="channel_id"/>
                        <arg type="b" name="send_data_immediately"/>
                        <arg type="v" name="channel_data"/>
                        <arg type="i" name="command_id"/>
                        <arg type="s" name="text"/>
                        <arg type="i" name="text_len"/>
+                       <!--
+                       Enable below tag if SAT icon is supported...
+                       <arg type="v" name="icon_id"/>
+                       -->
                        <arg type="s" name="dtmf_str"/>
                        <arg type="i" name="dtmf_str_len"/>
                </signal>
                
                <signal name="LaunchBrowser">
                        <arg type="i" name="command_id"/>
+                       <arg type="i" name="launch_type"/>
                        <arg type="i" name="browser_id"/>
                        <arg type="s" name="url"/>
                        <arg type="i" name="url_len"/>
                        <arg type="i" name="gateway_proxy_len"/>
                        <arg type="s" name="text"/>
                        <arg type="i" name="text_len"/>
+                       <!--
+                       Enable below tag if SAT icon is supported...
+                       <arg type="v" name="icon_id"/>
+                       -->
                </signal>
                
                <signal name="ProvideLocalInfo">
-                       <arg type="i" name="command_id"/>
                        <arg type="i" name="info_type"/>
                </signal>
                
                        <arg type="i" name="command_type"/>
                </signal>
                
+               <signal name="CallControlResult">
+                       <arg type="i" name="call_ctrl_result"/>
+                       <arg type="s" name="text"/>
+                       <arg type="i" name="ton"/>
+                       <arg type="i" name="npi"/>
+                       <arg type="s" name="call_number"/>
+                       <arg type="s" name="ss_string"/>
+                       <arg type="s" name="sub_address"/>
+                       <arg type="s" name="ccp1"/>
+                       <arg type="s" name="ccp2"/>
+                       <arg type="i" name="bc_repeat_indicator"/>
+               </signal>
+
+               <signal name="MoSmControlResult">
+                        <arg type="i" name="call_ctrl_result"/>
+                        <arg type="s" name="text"/>
+                        <arg type="i" name="rp_dst_ton"/>
+                        <arg type="i" name="rp_dst_npi"/>
+                        <arg type="s" name="rp_dst_call_number"/>
+                       <arg type="i" name="tp_dst_ton"/>
+                        <arg type="i" name="tp_dst_npi"/>
+                        <arg type="s" name="tp_dst_call_number"/>
+                </signal>
+
        </interface>
        
 </node>
index f0d68f9..62ef07b 100644 (file)
@@ -13,8 +13,8 @@
                <method name="GetIMSI">
                        <arg direction="out" type="s" name="plmn"/>
                        <arg direction="out" type="s" name="msin"/>
-               </method>               
-               
+               </method>
+
                <method name="GetECC">
                        <arg direction="out" type="aa{sv}" name="ecc_list"/>
                <!-- dict
                        <arg direction="out" type="i" name="result"/>
                </method>
 
-               <method name="GetCallforwarding">
+               <method name="GetCallForwarding">
+                       <arg direction="out" type="i" name="result"/>
+                       <arg direction="out" type="b" name="cphs"/>
+                       <arg direction="out" type="aa{sv}" name="cf"/>
+                       <arg direction="out" type="a{sv}" name="cphs_cf"/>
+               </method>
+
+               <method name="SetCallForwarding">
+                       <arg direction="in" type="b" name="cphs"/>
+                       <arg direction="in" type="i" name="rec_index"/>
+                       <arg direction="in" type="i" name="msp_num"/>
+                       <arg direction="in" type="y" name="cfu_status"/>
+                       <arg direction="in" type="i" name="ton"/>
+                       <arg direction="in" type="i" name="npi"/>
+                       <arg direction="in" type="s" name="number"/>
+                       <arg direction="in" type="i" name="cc2_id"/>
+                       <arg direction="in" type="i" name="ext7_id"/>
+                       <arg direction="in" type="b" name="cphs_line1"/>
+                       <arg direction="in" type="b" name="cphs_line2"/>
+                       <arg direction="in" type="b" name="cphs_fax"/>
+                       <arg direction="in" type="b" name="cphs_data"/>
                        <arg direction="out" type="i" name="result"/>
-                       <arg direction="out" type="b" name="line1"/>
-                       <arg direction="out" type="b" name="line2"/>
                </method>
 
                <method name="GetMessageWaiting">
                        <arg direction="out" type="i" name="result"/>
-                       <arg direction="out" type="i" name="line1"/>
-                       <arg direction="out" type="i" name="line2"/>
-                       <arg direction="out" type="i" name="fax"/>
-                       <arg direction="out" type="i" name="video"/>
+                       <arg direction="out" type="b" name="cphs"/>
+                       <arg direction="out" type="aa{sv}" name="mw"/>
+                       <arg direction="out" type="a{sv}" name="cphs_mw"/>
+               </method>
+
+               <method name="SetMessageWaiting">
+                       <arg direction="in" type="b" name="cphs"/>
+                       <arg direction="in" type="i" name="rec_index"/>
+                       <arg direction="in" type="y" name="indicator_status"/>
+                       <arg direction="in" type="i" name="voice_cnt"/>
+                       <arg direction="in" type="i" name="fax_cnt"/>
+                       <arg direction="in" type="i" name="email_cnt"/>
+                       <arg direction="in" type="i" name="other_cnt"/>
+                       <arg direction="in" type="i" name="video_cnt"/>
+                       <arg direction="in" type="b" name="cphs_voice1"/>
+                       <arg direction="in" type="b" name="cphs_voice2"/>
+                       <arg direction="in" type="b" name="cphs_fax"/>
+                       <arg direction="in" type="b" name="cphs_data"/>
+                       <arg direction="out" type="i" name="result"/>
                </method>
 
                <method name="GetMailbox">
                        <arg direction="out" type="i" name="result"/>
+                       <arg direction="out" type="b" name="cphs"/>
                        <arg direction="out" type="aa{sv}" name="list"/>
-               <!-- dict
-                    "type" STRING "voice1"/"voice2"/"fax"/"video"
-                    "name" STRING (mailbox alpha id)
-                    "number" STRING (mailbox number)
-                    "ton" INT refer {enum tel_sim_ton}
-               -->
+               </method>
+
+               <method name="SetMailbox">
+                       <arg direction="in" type="b" name="cphs"/>
+                       <arg direction="in" type="i" name="type"/>
+                       <arg direction="in" type="i" name="rec_index"/>
+                       <arg direction="in" type="i" name="profile_number"/>
+                       <arg direction="in" type="i" name="alpha_id_max_len"/>
+                       <arg direction="in" type="s" name="alpha_id"/>
+                       <arg direction="in" type="i" name="ton"/>
+                       <arg direction="in" type="i" name="npi"/>
+                       <arg direction="in" type="s" name="number"/>
+                       <arg direction="in" type="i" name="cc_id"/>
+                       <arg direction="in" type="i" name="ext1_id"/>
+                       <arg direction="out" type="i" name="result"/>
                </method>
 
                <method name="GetCPHSInfo">
                        <arg direction="out" type="b" name="info_number"/>
                </method>
 
+               <method name="GetServiceTable">
+                       <arg direction="out" type="i" name="result"/>
+                       <arg direction="out" type="i" name="sim_type"/>
+                       <arg direction="out" type="v" name="service"/>
+               </method>
+
                <method name="GetMSISDN">
                        <arg direction="out" type="i" name="result"/>
                        <arg direction="out" type="aa{sv}" name="list"/>
                        <arg direction="out" type="aa{sv}" name="list"/>
                <!-- dict
                     "plmn" STRING
-                    "b_umts" BOOLEAN TRUE/FALSE 
+                    "b_umts" BOOLEAN TRUE/FALSE
                     "b_gsm" BOOLEAN TRUE/FALSE
                -->
                </method>
                        <arg direction="out" type="i" name="result"/>
                        <arg direction="out" type="y" name="display_condition"/>
                        <arg direction="out" type="s" name="spn"/>
-               </method>               
+               </method>
 
                <method name="GetCphsNetName">
                        <arg direction="out" type="i" name="result"/>
                        <arg direction="out" type="s" name="short_name"/>
                </method>
 
+               <method name="GetGID">
+                       <arg direction="out" type="i" name="result"/>
+                       <arg direction="out" type="i" name="gid_len"/>
+                       <arg direction="out" type="v" name="gid"/>
+               </method>
+
                <method name="Authentication">
                        <arg direction="in" type="i" name="type"/>
                        <arg direction="in" type="v" name="rand"/>
                        <arg direction="out" type="v" name="atr"/>
                </method>
 
+               <method name="GetFields">
+                       <arg direction="out" type="i" name="result"/>
+                       <arg direction="out" type="aa{sv}" name="list"/>
+               </method>
+
+               <method name="SetPowerstate">
+                       <arg direction="in" type="i" name="state"/>
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+
                <signal name="Status">
                        <arg type="i" name="status"/>
                </signal>
 
+               <signal name="Refreshed">
+                       <arg type="i" name="type"/>
+               </signal>
+
+               <property name="cf_state" type="i" access="read"/>
+
        </interface>
 
 </node>
index 031ff4e..2c54e29 100644 (file)
@@ -18,9 +18,9 @@
                        Sends an SMS message to the networ
                -->
                <method name="SendMsg">
-                       <arg direction="in" type="s" name="sca"/>
+                       <arg direction="in" type="v" name="sca"/>
                        <arg direction="in" type="i" name="tpdu_length"/>
-                       <arg direction="in" type="s" name="tpdu_data"/>
+                       <arg direction="in" type="v" name="tpdu_data"/>
                        <arg direction="in" type="i" name="moreMsg"/>
                        <arg direction="out" type="i" name="result"/>
                </method>
                <method name="ReadMsg">
                        <arg direction="in" type="i" name="index"/>
                        <arg direction="out" type="i" name="result"/>
+                       <arg direction="out" type="i" name="sim_index"/>
                        <arg direction="out" type="i" name="msg_status"/>
-                       <arg direction="out" type="s" name="sca"/>
+                       <arg direction="out" type="v" name="sca"/>
                        <arg direction="out" type="i" name="tpdu_length"/>
-                       <arg direction="out" type="s" name="tpdu_data"/>
+                       <arg direction="out" type="v" name="tpdu_data"/>
                </method>
 
                <!--
@@ -58,9 +59,9 @@
                -->
                <method name="SaveMsg">
                        <arg direction="in" type="i" name="msg_status"/>
-                       <arg direction="in" type="s" name="sca"/>
+                       <arg direction="in" type="v" name="sca"/>
                        <arg direction="in" type="i" name="tpdu_length"/>
-                       <arg direction="in" type="s" name="tpdu_data"/>
+                       <arg direction="in" type="v" name="tpdu_data"/>
                        <arg direction="out" type="i" name="result"/>
                        <arg direction="out" type="i" name="index"/>
                </method>
@@ -75,6 +76,7 @@
                <method name="DeleteMsg">
                        <arg direction="in" type="i" name="index"/>
                        <arg direction="out" type="i" name="result"/>
+                       <arg direction="out" type="i" name="resp_index"/>
                </method>
 
                <!--
@@ -90,7 +92,7 @@
                        <arg direction="out" type="i" name="result"/>
                        <arg direction="out" type="i" name="totalCount"/>
                        <arg direction="out" type="i" name="usedCount"/>
-                       <arg direction="out" type="s" name="indexList"/>
+                       <arg direction="out" type="ai" name="indexList"/>
                </method>
 
                <!--
                        <arg direction="out" type="i" name="ton"/>
                        <arg direction="out" type="i" name="npi"/>
                        <arg direction="out" type="i" name="dialNumberLength"/>
-                       <arg direction="out" type="s" name="dialNumber"/>
+                       <arg direction="out" type="v" name="dialNumber"/>
                </method>
 
                <!--
                        <arg direction="in" type="i" name="ton"/>
                        <arg direction="in" type="i" name="npi"/>
                        <arg direction="in" type="i" name="dialNumberLength"/>
-                       <arg direction="in" type="s" name="dialNumber"/>
+                       <arg direction="in" type="v" name="dialNumber"/>
                        <arg direction="out" type="i" name="result"/>
                </method>
 
                        <arg direction="in" type="i" name="cbEnable"/>
                        <arg direction="in" type="i" name="msgIdMaxCount"/>
                        <arg direction="in" type="i" name="msgIdRangeCount"/>
-                       <arg direction="in" type="s" name="msgId"/>
+                       <arg direction="in" type="v" name="msgId"/>
                        <arg direction="out" type="i" name="result"/>
                </method>
 
                        Send a delivery report for the received incoming SMS to the network.
                -->
                <method name="SetDeliveryReport">
-                       <arg direction="in" type="s" name="sca"/>
+                       <arg direction="in" type="v" name="sca"/>
                        <arg direction="in" type="i" name="tpdu_length"/>
-                       <arg direction="in" type="s" name="tpdu_data"/>
+                       <arg direction="in" type="v" name="tpdu_data"/>
                        <arg direction="in" type="i" name="rpCause"/>
                        <arg direction="out" type="i" name="result"/>
                </method>
                        <arg direction="out" type="i" name="recordIndex"/>
                        <arg direction="out" type="i" name="recordLen"/>
                        <arg direction="out" type="i" name="alphaIdLen"/>
-                       <arg direction="out" type="s" name="alphaId"/>
+                       <arg direction="out" type="v" name="alphaId"/>
                        <arg direction="out" type="i" name="paramIndicator"/>
                        <arg direction="out" type="i" name="destAddr_DialNumLen"/>
                        <arg direction="out" type="i" name="destAddr_Ton"/>
                        <arg direction="out" type="i" name="destAddr_Npi"/>
-                       <arg direction="out" type="s" name="destAddr_DiallingNum"/>
+                       <arg direction="out" type="v" name="destAddr_DiallingNum"/>
                        <arg direction="out" type="i" name="svcCntrAddr_DialNumLen"/>
                        <arg direction="out" type="i" name="SvcCntrAddr_Ton"/>
                        <arg direction="out" type="i" name="svcCntrAddr_Npi"/>
-                       <arg direction="out" type="s" name="svcCntrAddr_DialNum"/>
+                       <arg direction="out" type="v" name="svcCntrAddr_DialNum"/>
                        <arg direction="out" type="i" name="protocolId"/>
                        <arg direction="out" type="i" name="dataCodingScheme"/>
                        <arg direction="out" type="i" name="validityPeriod"/>
                        <arg direction="in" type="i" name="recordIndex"/>
                        <arg direction="in" type="i" name="recordLen"/>
                        <arg direction="in" type="i" name="alphaIdLen"/>
-                       <arg direction="in" type="s" name="alphaId"/>
+                       <arg direction="in" type="v" name="alphaId"/>
                        <arg direction="in" type="i" name="paramIndicator"/>
                        <arg direction="in" type="i" name="destAddr_DialNumLen"/>
                        <arg direction="in" type="i" name="destAddr_Ton"/>
                        <arg direction="in" type="i" name="destAddr_Npi"/>
-                       <arg direction="in" type="s" name="destAddr_DiallingNum"/>
+                       <arg direction="in" type="v" name="destAddr_DiallingNum"/>
                        <arg direction="in" type="i" name="svcCntrAddr_DialNumLen"/>
                        <arg direction="in" type="i" name="SvcCntrAddr_Ton"/>
                        <arg direction="in" type="i" name="svcCntrAddr_Npi"/>
-                       <arg direction="in" type="s" name="svcCntrAddr_DialNum"/>
+                       <arg direction="in" type="v" name="svcCntrAddr_DialNum"/>
                        <arg direction="in" type="i" name="protocolId"/>
                        <arg direction="in" type="i" name="dataCodingScheme"/>
                        <arg direction="in" type="i" name="validityPeriod"/>
                        This is an unsolicited Incoming SMS Event
                -->
                <signal name="IncommingMsg">
-                       <arg type="s" name="sca"/>
+                       <arg type="v" name="sca"/>
                        <arg type="i" name="msgLength"/>
-                       <arg type="s" name="tpdu"/>
+                       <arg type="v" name="tpdu"/>
                </signal>
 
                <!--
                <signal name="IncommingCbMsg">
                        <arg type="i" name="cbMsgType"/>
                        <arg type="i" name="msgLength"/>
-                       <arg type="s" name="tpdu"/>
+                       <arg type="v" name="tpdu"/>
                </signal>
 
                <!--
                <signal name="IncommingEtwsMsg">
                        <arg type="i" name="etwsMsgType"/>
                        <arg type="i" name="msgLength"/>
-                       <arg type="s" name="tpdu"/>
+                       <arg type="v" name="tpdu"/>
                </signal>
 
                <!--
index 2677ca2..32c7feb 100644 (file)
@@ -35,6 +35,8 @@
                        <arg direction="in" type="i" name="ss_class"/>
                        <arg direction="in" type="i" name="forward_mode"/>
                        <arg direction="in" type="i" name="forward_no_reply_time"/>
+                       <arg direction="in" type="i" name="forward_ton"/>
+                       <arg direction="in" type="i" name="forward_npi"/>
                        <arg direction="in" type="s" name="forward_number"/>
                        <arg direction="out" type="aa{sv}" name="forward_list"/>
                        <arg direction="out" type="i" name="result"/>
@@ -44,6 +46,8 @@
                        <arg direction="in" type="i" name="ss_class"/>
                        <arg direction="in" type="i" name="forward_mode"/>
                        <arg direction="in" type="i" name="forward_no_reply_time"/>
+                       <arg direction="in" type="i" name="forward_ton"/>
+                       <arg direction="in" type="i" name="forward_npi"/>
                        <arg direction="in" type="s" name="forward_number"/>
                        <arg direction="out" type="aa{sv}" name="forward_list"/>
                        <arg direction="out" type="i" name="result"/>
@@ -53,6 +57,8 @@
                        <arg direction="in" type="i" name="ss_class"/>
                        <arg direction="in" type="i" name="forward_mode"/>
                        <arg direction="in" type="i" name="forward_no_reply_time"/>
+                       <arg direction="in" type="i" name="forward_ton"/>
+                       <arg direction="in" type="i" name="forward_npi"/>
                        <arg direction="in" type="s" name="forward_number"/>
                        <arg direction="out" type="aa{sv}" name="forward_list"/>
                        <arg direction="out" type="i" name="result"/>
@@ -62,6 +68,8 @@
                        <arg direction="in" type="i" name="ss_class"/>
                        <arg direction="in" type="i" name="forward_mode"/>
                        <arg direction="in" type="i" name="forward_no_reply_time"/>
+                       <arg direction="in" type="i" name="forward_ton"/>
+                       <arg direction="in" type="i" name="forward_npi"/>
                        <arg direction="in" type="s" name="forward_number"/>
                        <arg direction="out" type="aa{sv}" name="forward_list"/>
                        <arg direction="out" type="i" name="result"/>
                        <arg direction="out" type="i" name="result"/>
                </method>
 
+               <method name="SetCLIStatus">
+                       <arg direction="in" type="i" name="cli_type"/>
+                       <arg direction="in" type="i" name="cli_status"/>
+                       <arg direction="out" type="i" name="result"/>
+               </method>
+
                <method name="GetCLIStatus">
                        <arg direction="in" type="i" name="cli_type"/>
                        <arg direction="out" type="i" name="result"/>
 
                <method name="SendUSSD">
                        <arg direction="in" type="i" name="ussd_type"/>
+                       <arg direction="in" type="i" name="ussd_dcs"/>
                        <arg direction="in" type="i" name="ussd_len"/>
                        <arg direction="in" type="s" name="ussd_string"/>
                        <arg direction="out" type="i" name="result"/>
                        <arg direction="out" type="i" name="ussd_type"/>
                        <arg direction="out" type="i" name="ussd_status"/>
+                       <arg direction="out" type="i" name="ussd_dcs"/>
                        <arg direction="out" type="i" name="ussd_len"/>
                        <arg direction="out" type="s" name="ussd_string"/>
                </method>
 
                <signal name="NotifyUSSD">
                        <arg type="i" name="ussd_status"/>
+                       <arg type="i" name="ussd_dcs"/>
                        <arg type="i" name="ussd_len"/>
                        <arg type="s" name="ussd_string"/>
                </signal>
 
+               <signal name="NotifyBarring">
+                       <arg type="aa{sv}" name="barring_list"/>
+               </signal>
+
+               <signal name="NotifyForwarding">
+                       <arg type="aa{sv}" name="forward_list"/>
+               </signal>
+
+               <signal name="NotifyWaiting">
+                       <arg type="aa{sv}" name="waiting_list"/>
+               </signal>
+
+               <signal name="NotifySsInfo">
+                       <arg type="i" name="err"/>
+                       <arg type="i" name="ss_type"/>
+               </signal>
+
+
+               <signal name="ReleaseComplete">
+                       <arg type="i" name="data_len"/>
+                       <arg type="v" name="data"/>
+               </signal>
+
        </interface>
 
 </node>
old mode 100644 (file)
new mode 100755 (executable)
index 4ae570b..d0e96f3
@@ -1,27 +1,29 @@
 %define major 0
-%define minor 1
-%define patchlevel 56
-Name: tel-plugin-dbus_tapi
-Summary: dbus-tapi plugin for telephony
-Version:    %{major}.%{minor}.%{patchlevel}
-Release:    1
-Group:      System/Libraries
-License:    Apache
-Source0:    tel-plugin-dbus_tapi-%{version}.tar.gz
-Requires(post): /sbin/ldconfig
-Requires(postun): /sbin/ldconfig
+%define minor 3
+%define patchlevel 49
+
+Name:           tel-plugin-dbus_tapi
+Version:        %{major}.%{minor}.%{patchlevel}
+Release:        5
+License:        Apache-2.0
+Summary:        dbus-tapi plugin for telephony
+Group:          System/Libraries
+Source0:        tel-plugin-dbus_tapi-%{version}.tar.gz
 BuildRequires:  cmake
-BuildRequires:  pkgconfig(glib-2.0)
-BuildRequires:  pkgconfig(gobject-2.0)
+BuildRequires:  python-xml
+BuildRequires:  python
+BuildRequires:  pkgconfig(appsvc)
+BuildRequires:  pkgconfig(aul)
 BuildRequires:  pkgconfig(gio-2.0)
 BuildRequires:  pkgconfig(gio-unix-2.0)
-BuildRequires:  pkgconfig(tcore)
-BuildRequires:  pkgconfig(dlog)
-BuildRequires:  pkgconfig(aul)
-BuildRequires:  pkgconfig(appsvc)
+BuildRequires:  pkgconfig(glib-2.0)
+BuildRequires:  pkgconfig(libxml-2.0)
+BuildRequires:  pkgconfig(pkgmgr)
 BuildRequires:  pkgconfig(security-server)
-BuildRequires:  python
-BuildRequires:  python-xml
+BuildRequires:  pkgconfig(tcore)
+
+Requires(post): /sbin/ldconfig
+Requires(postun): /sbin/ldconfig
 
 %description
 dbus-tapi plugin for telephony
@@ -31,20 +33,23 @@ dbus-tapi plugin for telephony
 
 %build
 versionint=$[%{major} * 1000000 + %{minor} * 1000 + %{patchlevel}]
-cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DVERSION=$versionint
-make %{?jobs:-j%jobs}
 
-%post
-/sbin/ldconfig
+cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DVERSION=$versionint  -DSYSCONFDIR=%{_sysconfdir} \
+       -DBOARD_PLATFORM_SPREADTRUM=1
+
+make %{?_smp_mflags}
+
+%post -p /sbin/ldconfig
 
 %postun -p /sbin/ldconfig
 
 %install
-rm -rf %{buildroot}
 %make_install
+mkdir -p %{buildroot}%{_datadir}/license
 
 %files
+%manifest tel-plugin-dbus_tapi.manifest
 %defattr(-,root,root,-)
 #%doc COPYING
 %{_libdir}/telephony/plugins/*
-%{_prefix}/etc/dbus-1/system.d/*
+%{_datadir}/license/tel-plugin-dbus_tapi
diff --git a/res/tapi.conf b/res/tapi.conf
deleted file mode 100644 (file)
index 943e73d..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
- "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-<busconfig>
-    <policy user="root">
-        <allow own="org.tizen.telephony"/>
-        <allow send_destination="org.tizen.telephony"/>
-        <allow send_interface="org.tizen.telephony"/>
-    </policy>
-    <policy user="app">
-        <allow own="org.tizen.telephony"/>
-        <allow send_destination="org.tizen.telephony"/>
-        <allow send_interface="org.tizen.telephony"/>
-    </policy>
-    <policy at_console="true">
-        <allow send_destination="org.tizen.telephony"/>
-    </policy>
-    <policy context="default">
-        <deny send_destination="org.tizen.telephony"/>
-    </policy>
-</busconfig>
old mode 100644 (file)
new mode 100755 (executable)
index b2bdbf8..713cb8a
@@ -1,3 +1,23 @@
+/*
+ * tel-plugin-dbus-tapi
+ *
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Ja-young Gu <jygu@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include <stdio.h>
 #include <string.h>
 #include <pthread.h>
@@ -5,7 +25,6 @@
 #include <stdlib.h>
 #include <time.h>
 #include <glib.h>
-#include <glib-object.h>
 #include <gio/gio.h>
 
 #include <aul.h>
 #include "common.h"
 
 
-static void _launch_voice_call( struct tnoti_call_status_incoming* incoming )
+static void _launch_voice_call( struct tnoti_call_status_incoming* incoming, enum dbus_tapi_sim_slot_id slot_id )
 {
        char id[2] = {0, };
        char cli[2] = {0, };
+       char clicause[3] = {0, };
        char forward[2] = {0, };
        char active_line[2] = {0, };
        char cna[2] = {0, };
        char number[83] = {0, };
        char name[83] = {0, };
-//     int ret = 0;
+       char slot_info[2] = {0,};
 
        bundle *kb  = 0;
 
        snprintf( id, 2, "%d", incoming->id );
        dbg("id : [%s]", id );
        snprintf( cli, 2, "%d", incoming->cli.mode );
-       dbg("cli : [%s]", id );
+       dbg("cli : [%s]", cli );
+       snprintf( clicause, 3, "%d", incoming->cli.no_cli_cause );
+       dbg("clicause : [%s]", clicause );
        snprintf( number, 83, "%s", incoming->cli.number );
        dbg("number : [%s]", number );
        snprintf( forward, 2, "%d", incoming->forward );
@@ -57,22 +79,12 @@ static void _launch_voice_call( struct tnoti_call_status_incoming* incoming )
        snprintf( name, 83, "%s", incoming->cna.name );
        dbg("name : [%s]", name );
 
+       snprintf(slot_info, 2, "%d", slot_id);
+       dbg("slot_id : [%s]", slot_info);
+
+
        kb = bundle_create();
 
-#if 0
-       /* AUL */
-       bundle_add(kb, "launch-type", "MT");
-       bundle_add(kb, "handle", id);
-       bundle_add(kb, "number", number);
-       bundle_add(kb, "name_mode", cna);
-       bundle_add(kb, "name", name);
-       bundle_add(kb, "clicause", cli);
-       bundle_add(kb, "fwded", forward);
-       bundle_add(kb, "activeline", active_line);
-
-       ret = aul_launch_app("com.samsung.call", kb);
-       dbg("aul_launch_app [ voice call ] : %d", ret );
-#else
        /* AppSvc */
        appsvc_set_operation(kb, APPSVC_OPERATION_CALL);
        appsvc_set_uri(kb,"tel:MT");
@@ -82,21 +94,23 @@ static void _launch_voice_call( struct tnoti_call_status_incoming* incoming )
        appsvc_add_data(kb, "number", number);
        appsvc_add_data(kb, "name_mode", cna);
        appsvc_add_data(kb, "name", name);
-       appsvc_add_data(kb, "clicause", cli);
+       appsvc_add_data(kb, "cli", cli);
+       appsvc_add_data(kb, "clicause", clicause);
        appsvc_add_data(kb, "fwded", forward);
        appsvc_add_data(kb, "activeline", active_line);
+       appsvc_add_data(kb, "slot_id", slot_info);
 
        appsvc_run_service(kb, 0, NULL, NULL);
-#endif
        bundle_free(kb);
 }
 
-static void _launch_video_call( struct tnoti_call_status_incoming* incoming )
+static void _launch_video_call( struct tnoti_call_status_incoming* incoming, enum dbus_tapi_sim_slot_id slot_id)
 {
        char id[2] = {0, };
        char cli[2] = {0, };
        char forward[2] = {0, };
        char number[83] = {0, };
+       char slot_info[2] = {0,};
        int ret = 0;
 
        bundle *kb  = 0;
@@ -112,44 +126,55 @@ static void _launch_video_call( struct tnoti_call_status_incoming* incoming )
        snprintf( forward, 2, "%d", incoming->forward );
        dbg("forward : [%s]", forward );
 
+       snprintf(slot_info, 2, "%d", slot_id);
+       dbg("slot_id : [%s]", slot_info);
+
        kb = bundle_create();
        bundle_add(kb, "KEY_CALL_TYPE", "mt");
        bundle_add(kb, "KEY_CALL_HANDLE", id);
        bundle_add(kb, "KEY_CALLING_PARTY_NUMBER", number);
        bundle_add(kb, "KEY_CLI_CAUSE", cli);
        bundle_add(kb, "KEY_FORWARDED", forward);
+       bundle_add(kb, "KEY_SLOT_ID", slot_info);
+
 
-       ret = aul_launch_app("com.samsung.vtmain", kb);
+       ret = aul_launch_app("org.tizen.vtmain", kb);
        bundle_free(kb);
 
        dbg("VT AUL return %d",ret);
 }
 
-static gboolean on_call_dial(TelephonyCall *call, GDBusMethodInvocation *invocation, gint call_type, gchar* call_number, gpointer user_data)
+static gboolean on_call_dial(TelephonyCall *call, GDBusMethodInvocation *invocation, gint call_type, gint call_ecc, gchar* call_number, gpointer user_data)
 {
        struct treq_call_dial req;
        struct custom_data *ctx = user_data;
-       UserRequest *ur = MAKE_UR(ctx, call, invocation);
-
+       UserRequest *ur;
        TReturn ret = 0;
 
-       if ( !ur ) {
-               dbg("[ error ] ur : 0");
-               return FALSE;
-       }
+       memset(&req, 0x0,sizeof(req));
+
+       if (!check_access_control (invocation, AC_CALL, "x"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, call, invocation);
 
        req.type = call_type;
+       req.ecc = call_ecc;
+
+       if ( call_number ){
+               g_strlcpy( req.number, call_number, MAX_CALL_DIAL_NUM_LEN);
+       }
 
-       if ( call_number )
-               memcpy( req.number, call_number, MAX_CALL_DIAL_NUM_LEN );
+       dbg("dial len : %d, dial str : %s", strlen(req.number), req.number);
 
        tcore_user_request_set_data( ur, sizeof( struct treq_call_dial ), &req );
        tcore_user_request_set_command( ur, TREQ_CALL_DIAL );
 
        ret = tcore_communicator_dispatch_request( ctx->comm, ur );
        if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
-               return FALSE;
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -159,14 +184,13 @@ static gboolean on_call_answer(TelephonyCall *call, GDBusMethodInvocation *invoc
 {
        struct treq_call_answer req;
        struct custom_data *ctx = user_data;
-       UserRequest *ur = MAKE_UR(ctx, call, invocation);
-
+       UserRequest *ur;
        TReturn ret = 0;
 
-       if ( !ur ) {
-               dbg("[ error ] ur : 0");
-               return FALSE;
-       }
+       if (!check_access_control (invocation, AC_CALL, "x"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, call, invocation);
 
        req.id = call_id;
        req.type = answer_type;
@@ -176,8 +200,9 @@ static gboolean on_call_answer(TelephonyCall *call, GDBusMethodInvocation *invoc
 
        ret = tcore_communicator_dispatch_request( ctx->comm, ur );
        if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
-               return FALSE;
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -187,14 +212,13 @@ static gboolean on_call_end(TelephonyCall *call, GDBusMethodInvocation *invocati
 {
        struct treq_call_end req;
        struct custom_data *ctx = user_data;
-       UserRequest *ur = MAKE_UR(ctx, call, invocation);
-
+       UserRequest *ur;
        TReturn ret = 0;
 
-       if ( !ur ) {
-               dbg("[ error ] ur : 0");
-               return FALSE;
-       }
+       if (!check_access_control (invocation, AC_CALL, "x"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, call, invocation);
 
        req.id = call_id;
        req.type = end_type;
@@ -204,36 +228,99 @@ static gboolean on_call_end(TelephonyCall *call, GDBusMethodInvocation *invocati
 
        ret = tcore_communicator_dispatch_request( ctx->comm, ur );
        if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
-               return FALSE;
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
 }
 
-static gboolean on_call_dtmf(TelephonyCall *call, GDBusMethodInvocation *invocation, gchar *dtmf_string, gpointer user_data)
+static gboolean on_call_start_cont_dtmf(TelephonyCall *call, GDBusMethodInvocation *invocation, guchar dtmf_digit, gpointer user_data)
 {
-       struct treq_call_dtmf req;
+       struct treq_call_start_cont_dtmf  req;
        struct custom_data *ctx = user_data;
-       UserRequest *ur = MAKE_UR(ctx, call, invocation);
-
+       UserRequest *ur;
        TReturn ret = 0;
 
-       if ( !ur ) {
-               dbg("[ error ] ur : 0");
-               return FALSE;
+       if (!check_access_control (invocation, AC_CALL, "x"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, call, invocation);
+       memset(&req, 0x0,sizeof(req));
+
+       req.dtmf_digit = dtmf_digit;
+
+       tcore_user_request_set_data( ur, sizeof( struct treq_call_start_cont_dtmf ), &req );
+       tcore_user_request_set_command( ur, TREQ_CALL_START_CONT_DTMF );
+
+       ret = tcore_communicator_dispatch_request( ctx->comm, ur );
+       if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
        }
 
-       if ( dtmf_string )
-               memcpy( req.digits, dtmf_string, MAX_CALL_DTMF_DIGITS_LEN );
+       return TRUE;
+}
 
-       tcore_user_request_set_data( ur, sizeof( struct treq_call_dtmf ), &req );
-       tcore_user_request_set_command( ur, TREQ_CALL_SEND_DTMF );
+static gboolean on_call_stop_cont_dtmf(TelephonyCall *call, GDBusMethodInvocation *invocation, gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur;
+       TReturn ret = 0;
+
+       if (!check_access_control (invocation, AC_CALL, "x"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, call, invocation);
+
+       tcore_user_request_set_command( ur, TREQ_CALL_STOP_CONT_DTMF );
 
        ret = tcore_communicator_dispatch_request( ctx->comm, ur );
        if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
-               return FALSE;
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+
+static gboolean on_call_send_burst_dtmf(TelephonyCall *call, GDBusMethodInvocation *invocation, gchar *dtmf_string, gint pulse_width, gint inter_digit_interval, gpointer user_data)
+{
+       struct treq_call_send_burst_dtmf req;
+       struct custom_data *ctx = user_data;
+       UserRequest *ur;
+       TReturn ret = 0;
+
+       if (!check_access_control (invocation, AC_CALL, "x"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, call, invocation);
+       memset(&req, 0x0,sizeof(req));
+       if ( dtmf_string ) {
+               g_strlcpy( req.dtmf_string, dtmf_string, MAX_CALL_BURST_DTMF_STRING_LEN +1 );
+       }
+       else {
+               FAIL_RESPONSE (invocation, "Invalid Input");
+               err("Invalid DTMF string" );
+               tcore_user_request_unref(ur);
+               return TRUE;
+       }
+
+
+       req.pulse_width = pulse_width;
+       req.inter_digit_interval = inter_digit_interval;
+
+       tcore_user_request_set_data( ur, sizeof( struct treq_call_send_burst_dtmf ), &req );
+       tcore_user_request_set_command( ur, TREQ_CALL_SEND_BURST_DTMF );
+
+       ret = tcore_communicator_dispatch_request( ctx->comm, ur );
+       if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               err("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -243,14 +330,13 @@ static gboolean on_call_active(TelephonyCall *call, GDBusMethodInvocation *invoc
 {
        struct treq_call_active req;
        struct custom_data *ctx = user_data;
-       UserRequest *ur = MAKE_UR(ctx, call, invocation);
-
+       UserRequest *ur;
        TReturn ret = 0;
 
-       if ( !ur ) {
-               dbg("[ error ] ur : 0");
-               return FALSE;
-       }
+       if (!check_access_control (invocation, AC_CALL, "x"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, call, invocation);
 
        req.id = call_id;
 
@@ -259,8 +345,9 @@ static gboolean on_call_active(TelephonyCall *call, GDBusMethodInvocation *invoc
 
        ret = tcore_communicator_dispatch_request( ctx->comm, ur );
        if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
-               return FALSE;
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -270,14 +357,13 @@ static gboolean on_call_hold(TelephonyCall *call, GDBusMethodInvocation *invocat
 {
        struct treq_call_hold req;
        struct custom_data *ctx = user_data;
-       UserRequest *ur = MAKE_UR(ctx, call, invocation);
-
+       UserRequest *ur;
        TReturn ret = 0;
 
-       if ( !ur ) {
-               dbg("[ error ] ur : 0");
-               return FALSE;
-       }
+       if (!check_access_control (invocation, AC_CALL, "x"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, call, invocation);
 
        req.id = call_id;
 
@@ -286,8 +372,9 @@ static gboolean on_call_hold(TelephonyCall *call, GDBusMethodInvocation *invocat
 
        ret = tcore_communicator_dispatch_request( ctx->comm, ur );
        if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
-               return FALSE;
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -297,14 +384,13 @@ static gboolean on_call_swap(TelephonyCall *call, GDBusMethodInvocation *invocat
 {
        struct treq_call_swap req;
        struct custom_data *ctx = user_data;
-       UserRequest *ur = MAKE_UR(ctx, call, invocation);
-
+       UserRequest *ur;
        TReturn ret = 0;
 
-       if ( !ur ) {
-               dbg("[ error ] ur : 0");
-               return FALSE;
-       }
+       if (!check_access_control (invocation, AC_CALL, "x"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, call, invocation);
 
        req.id = call_id;
 
@@ -313,8 +399,9 @@ static gboolean on_call_swap(TelephonyCall *call, GDBusMethodInvocation *invocat
 
        ret = tcore_communicator_dispatch_request( ctx->comm, ur );
        if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
-               return FALSE;
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -324,14 +411,13 @@ static gboolean on_call_join(TelephonyCall *call, GDBusMethodInvocation *invocat
 {
        struct treq_call_join req;
        struct custom_data *ctx = user_data;
-       UserRequest *ur = MAKE_UR(ctx, call, invocation);
-
+       UserRequest *ur;
        TReturn ret = 0;
 
-       if ( !ur ) {
-               dbg("[ error ] ur : 0");
-               return FALSE;
-       }
+       if (!check_access_control (invocation, AC_CALL, "x"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, call, invocation);
 
        req.id = call_id;
 
@@ -340,8 +426,9 @@ static gboolean on_call_join(TelephonyCall *call, GDBusMethodInvocation *invocat
 
        ret = tcore_communicator_dispatch_request( ctx->comm, ur );
        if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
-               return FALSE;
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -351,14 +438,13 @@ static gboolean on_call_split(TelephonyCall *call, GDBusMethodInvocation *invoca
 {
        struct treq_call_split req;
        struct custom_data *ctx = user_data;
-       UserRequest *ur = MAKE_UR(ctx, call, invocation);
-
+       UserRequest *ur;
        TReturn ret = 0;
 
-       if ( !ur ) {
-               dbg("[ error ] ur : 0");
-               return FALSE;
-       }
+       if (!check_access_control (invocation, AC_CALL, "x"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, call, invocation);
 
        req.id = call_id;
 
@@ -367,8 +453,9 @@ static gboolean on_call_split(TelephonyCall *call, GDBusMethodInvocation *invoca
 
        ret = tcore_communicator_dispatch_request( ctx->comm, ur );
        if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
-               return FALSE;
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -378,14 +465,13 @@ static gboolean on_call_transfer(TelephonyCall *call, GDBusMethodInvocation *inv
 {
        struct treq_call_transfer req;
        struct custom_data *ctx = user_data;
-       UserRequest *ur = MAKE_UR(ctx, call, invocation);
-
+       UserRequest *ur;
        TReturn ret = 0;
 
-       if ( !ur ) {
-               dbg("[ error ] ur : 0");
-               return FALSE;
-       }
+       if (!check_access_control (invocation, AC_CALL, "x"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, call, invocation);
 
        req.id = call_id;
 
@@ -394,8 +480,9 @@ static gboolean on_call_transfer(TelephonyCall *call, GDBusMethodInvocation *inv
 
        ret = tcore_communicator_dispatch_request( ctx->comm, ur );
        if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
-               return FALSE;
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -405,25 +492,75 @@ static gboolean on_call_deflect(TelephonyCall *call, GDBusMethodInvocation *invo
 {
        struct treq_call_deflect req;
        struct custom_data *ctx = user_data;
-       UserRequest *ur = MAKE_UR(ctx, call, invocation);
-
+       UserRequest *ur;
        TReturn ret = 0;
 
-       if ( !ur ) {
-               dbg("[ error ] ur : 0");
-               return FALSE;
-       }
+       if (!check_access_control (invocation, AC_CALL, "x"))
+               return TRUE;
 
-       if ( call_number )
-               memcpy( req.number, call_number, MAX_CALL_NUMBER_LEN );
+       ur = MAKE_UR(ctx, call, invocation);
+
+       if ( call_number ){
+               g_strlcpy( req.number, call_number, MAX_CALL_DIAL_NUM_LEN);
+       }
 
        tcore_user_request_set_data( ur, sizeof( struct treq_call_deflect ), &req );
        tcore_user_request_set_command( ur, TREQ_CALL_DEFLECT );
 
        ret = tcore_communicator_dispatch_request( ctx->comm, ur );
        if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
-               return FALSE;
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+
+static gboolean on_call_get_privacy_mode(TelephonyCall *call, GDBusMethodInvocation *invocation, gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur;
+       TReturn ret = 0;
+
+       if (!check_access_control (invocation, AC_CALL, "r"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, call, invocation);
+       tcore_user_request_set_command( ur, TREQ_CALL_GET_PRIVACY_MODE );
+
+       ret = tcore_communicator_dispatch_request( ctx->comm, ur );
+       if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+
+static gboolean on_call_set_privacy_mode(TelephonyCall *call, GDBusMethodInvocation *invocation, gint privacy_mode, gpointer user_data)
+{
+       struct treq_call_set_voice_privacy_mode req;
+       struct custom_data *ctx = user_data;
+       UserRequest *ur;
+       TReturn ret = 0;
+
+       if (!check_access_control (invocation, AC_CALL, "w"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, call, invocation);
+
+       req.privacy_mode = privacy_mode;
+
+       tcore_user_request_set_data( ur, sizeof( struct treq_call_set_voice_privacy_mode ), &req );
+       tcore_user_request_set_command( ur, TREQ_CALL_SET_PRIVACY_MODE );
+
+       ret = tcore_communicator_dispatch_request( ctx->comm, ur );
+       if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -443,16 +580,15 @@ static gboolean on_call_get_status(TelephonyCall *call, GDBusMethodInvocation *i
        gint call_status;
        gboolean call_multiparty_state;
 
-       plugin = tcore_server_find_plugin(ctx->server, TCORE_PLUGIN_DEFAULT);
-       if ( !plugin ) {
-               dbg("[ error ] plugin : 0");
-               return FALSE;
-       }
+       /* NOTE: Ignore access control */
+
+       plugin = tcore_server_find_plugin(ctx->server, GET_CP_NAME(invocation));
 
        o_list = tcore_plugin_get_core_objects_bytype(plugin, CORE_OBJECT_TYPE_CALL);
        if ( !o_list ) {
                dbg("[ error ] co_list : 0");
-               return FALSE;
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               return TRUE;
        }
 
        o = (CoreObject *)o_list->data;
@@ -461,9 +597,11 @@ static gboolean on_call_get_status(TelephonyCall *call, GDBusMethodInvocation *i
        co = tcore_call_object_find_by_id( o, call_id );
        if ( !co ) {
                dbg("[ error ] co : 0");
-               return FALSE;
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               return TRUE;
        }
 
+       memset( call_number, 0, MAX_CALL_NUMBER_LEN );
        tcore_call_object_get_number( co, call_number );
 
        call_type = tcore_call_object_get_type( co );
@@ -474,12 +612,12 @@ static gboolean on_call_get_status(TelephonyCall *call, GDBusMethodInvocation *i
        } else {
                call_direction = FALSE;
        }
-       
+
        call_status = tcore_call_object_get_status( co );
        call_multiparty_state = tcore_call_object_get_multiparty_state( co );
 
 
-       telephony_call_complete_get_status(call, invocation, 
+       telephony_call_complete_get_status(call, invocation,
                        call_id, call_number, call_type, call_direction, call_status, call_multiparty_state );
 
        return TRUE;
@@ -505,16 +643,16 @@ static gboolean on_call_get_status_all(TelephonyCall *call, GDBusMethodInvocatio
 
        int len, i;
 
-       plugin = tcore_server_find_plugin(ctx->server, TCORE_PLUGIN_DEFAULT);
-       if ( !plugin ) {
-               dbg("[ error ] plugin : 0");
-               return FALSE;
-       }
+       if (!check_access_control (invocation, AC_CALL, "r"))
+               return TRUE;
+
+       plugin = tcore_server_find_plugin(ctx->server, GET_CP_NAME(invocation));
 
        list = tcore_plugin_get_core_objects_bytype(plugin, CORE_OBJECT_TYPE_CALL);
        if ( !list ) {
                dbg("[ error ] co_list : 0");
-               return FALSE;
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               return TRUE;
        }
 
        o = (CoreObject *)list->data;
@@ -531,11 +669,17 @@ static gboolean on_call_get_status_all(TelephonyCall *call, GDBusMethodInvocatio
                        GSList *tmp = 0;
                        tmp = list;
 
-                       dbg("[ check ] there is a call on state (0x%x)", i);
+                       dbg("[ check ] there is  a call on state %s", i== TCORE_CALL_STATUS_IDLE?"(IDLE)":
+                                                               (i== TCORE_CALL_STATUS_ACTIVE?"(ACTIVE)":
+                                                               (i== TCORE_CALL_STATUS_HELD?"(HELD)":
+                                                               (i== TCORE_CALL_STATUS_DIALING?"(DIALING)":
+                                                               (i== TCORE_CALL_STATUS_ALERT?"(ALERT)":
+                                                               (i== TCORE_CALL_STATUS_INCOMING?"(INCOMING)":
+                                                               (i== TCORE_CALL_STATUS_WAITING?"(WAITING)":"(UNKNOWN)")))))));
 
                        while ( tmp ) {
 
-                               co = (CallObject*)list->data;
+                               co = (CallObject*)tmp->data;
                                if ( !co ) {
                                        dbg("[ error ] call object : 0");
                                        tmp = tmp->next;
@@ -543,10 +687,9 @@ static gboolean on_call_get_status_all(TelephonyCall *call, GDBusMethodInvocatio
                                }
 
                                call_id = tcore_call_object_get_id( co );
+
+                               memset( call_number, 0, MAX_CALL_NUMBER_LEN );
                                len = tcore_call_object_get_number( co, call_number );
-                               if ( !len ) {
-                                       dbg("[ check ] no number : (0x%d)", call_id);
-                               }
 
                                call_type = tcore_call_object_get_type( co );
                                call_direction = tcore_call_object_get_direction( co );
@@ -560,6 +703,24 @@ static gboolean on_call_get_status_all(TelephonyCall *call, GDBusMethodInvocatio
                                call_status = tcore_call_object_get_status( co );
                                call_multiparty_state = tcore_call_object_get_multiparty_state( co );
 
+                               dbg("call_id                : %d", call_id);
+                               dbg("call_number_len        : %d", len);
+                               dbg("call_number            : \"%s\"", call_number);
+                               dbg("call_type              : %s (%d)", call_type==TCORE_CALL_TYPE_VOICE?"VOICE":
+                                                                       (call_type==TCORE_CALL_TYPE_VIDEO?"VIDEO":
+                                                                       (call_type==TCORE_CALL_TYPE_E911?"E911":
+                                                                       (call_type==TCORE_CALL_TYPE_STDOTASP?"STDOTASP":
+                                                                       (call_type==TCORE_CALL_TYPE_NONSTDOTASP?"NONSTDOTASP":"UNKNOWN")))), call_type);
+                               dbg("call_direction         : %s (%d)", call_direction==TRUE?"MO":"MT", call_direction);
+                               dbg("call_status            : %s (%d)", call_status== TCORE_CALL_STATUS_IDLE?"IDLE":
+                                                                       (call_status== TCORE_CALL_STATUS_ACTIVE?"ACTIVE":
+                                                                       (call_status== TCORE_CALL_STATUS_HELD?"HELD":
+                                                                       (call_status== TCORE_CALL_STATUS_DIALING?"DIALING":
+                                                                       (call_status== TCORE_CALL_STATUS_ALERT?"ALERT":
+                                                                       (call_status== TCORE_CALL_STATUS_INCOMING?"INCOMING":
+                                                                       (call_status== TCORE_CALL_STATUS_WAITING?"WAITING":"UNKNOWN")))))), call_status);
+                               dbg("call_multiparty_state  : %s (%d)", call_multiparty_state ==1?"T":"F", call_multiparty_state);
+
                                g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
                                g_variant_builder_add(&b, "{sv}", "call_id", g_variant_new_int32( call_id ));
                                g_variant_builder_add(&b, "{sv}", "call_number", g_variant_new_string( call_number ));
@@ -571,10 +732,15 @@ static gboolean on_call_get_status_all(TelephonyCall *call, GDBusMethodInvocatio
 
                                tmp = g_slist_next( tmp );
                        }
-
+                       g_slist_free(list);
                } else {
-                       dbg("[ check ] there is no call on state (0x%x)", i);
-
+                       dbg("[ check ] there is no call on state %s", i== TCORE_CALL_STATUS_IDLE?"(IDLE)":
+                                                               (i== TCORE_CALL_STATUS_ACTIVE?"(ACTIVE)":
+                                                               (i== TCORE_CALL_STATUS_HELD?"(HELD)":
+                                                               (i== TCORE_CALL_STATUS_DIALING?"(DIALING)":
+                                                               (i== TCORE_CALL_STATUS_ALERT?"(ALERT)":
+                                                               (i== TCORE_CALL_STATUS_INCOMING?"(INCOMING)":
+                                                               (i== TCORE_CALL_STATUS_WAITING?"(WAITING)":"(UNKNOWN)")))))));
                }
 
        }
@@ -583,252 +749,321 @@ static gboolean on_call_get_status_all(TelephonyCall *call, GDBusMethodInvocatio
 
        telephony_call_complete_get_status_all(call, invocation, gv);
 
-       g_variant_unref(gv);
-
        return TRUE;
 }
 
 static gboolean on_call_set_sound_path(TelephonyCall *call, GDBusMethodInvocation *invocation, gint sound_path, gboolean extra_volume_on, gpointer user_data)
 {
-       struct treq_call_sound_set_path req;
+       struct treq_call_set_sound_path req;
        struct custom_data *ctx = user_data;
-       UserRequest *ur = MAKE_UR(ctx, call, invocation);
-
+       UserRequest *ur;
        TReturn ret = 0;
 
-       if ( !ur ) {
-               dbg("[ error ] ur : 0");
-               return FALSE;
-       }
+       if (!check_access_control (invocation, AC_CALL, "w"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, call, invocation);
 
        req.path = sound_path;
        req.extra_volume_on = extra_volume_on;
 
-       tcore_user_request_set_data( ur, sizeof( struct treq_call_sound_set_path ), &req );
+       tcore_user_request_set_data( ur, sizeof( struct treq_call_set_sound_path ), &req );
        tcore_user_request_set_command( ur, TREQ_CALL_SET_SOUND_PATH );
 
        ret = tcore_communicator_dispatch_request( ctx->comm, ur );
        if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
-               return FALSE;
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
 }
 
-static gboolean on_call_get_volume(TelephonyCall *call, GDBusMethodInvocation *invocation, gint sound_device, gint sound_type, gpointer user_data)
+static gboolean on_call_get_sound_volume_level(TelephonyCall *call, GDBusMethodInvocation *invocation, gint sound_device, gint sound_type, gpointer user_data)
 {
-       struct treq_call_sound_get_volume_level req;
+       struct treq_call_get_sound_volume_level req;
        struct custom_data *ctx = user_data;
-       UserRequest *ur = MAKE_UR(ctx, call, invocation);
-
+       UserRequest *ur;
        TReturn ret = 0;
 
-       if ( !ur ) {
-               dbg("[ error ] ur : 0");
-               return FALSE;
-       }
+       if (!check_access_control (invocation, AC_CALL, "r"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, call, invocation);
 
        req.device = sound_device;
        req.sound = sound_type;
 
-       tcore_user_request_set_data( ur, sizeof( struct treq_call_sound_get_volume_level ), &req );
+       tcore_user_request_set_data( ur, sizeof( struct treq_call_get_sound_volume_level ), &req );
        tcore_user_request_set_command( ur, TREQ_CALL_GET_SOUND_VOLUME_LEVEL );
 
        ret = tcore_communicator_dispatch_request( ctx->comm, ur );
        if ( ret != TCORE_RETURN_SUCCESS ) {
+
+               GVariantBuilder b;
+               GVariant *result = 0;
+
+               g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+               g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+               g_variant_builder_add(&b, "{sv}", "err", g_variant_new_int32(ret));
+               g_variant_builder_close(&b);
+               result = g_variant_builder_end(&b);
+
+               telephony_call_complete_get_sound_volume_level(call, invocation, result, ret );
+
                dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
                return FALSE;
        }
 
        return TRUE;
 }
 
-static gboolean on_call_set_volume(TelephonyCall *call, GDBusMethodInvocation *invocation, gint sound_device, gint sound_type, gint sound_volume, gpointer user_data)
+static gboolean on_call_set_sound_volume_level(TelephonyCall *call, GDBusMethodInvocation *invocation, gint sound_device, gint sound_type, gint sound_volume, gpointer user_data)
 {
-       struct treq_call_sound_set_volume_level req;
+       struct treq_call_set_sound_volume_level req;
        struct custom_data *ctx = user_data;
-       UserRequest *ur = MAKE_UR(ctx, call, invocation);
-
+       UserRequest *ur;
        TReturn ret = 0;
 
-       if ( !ur ) {
-               dbg("[ error ] ur : 0");
-               return FALSE;
-       }
+       if (!check_access_control (invocation, AC_CALL, "w"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, call, invocation);
 
        req.device = sound_device;
        req.sound = sound_type;
        req.volume = sound_volume;
 
-       tcore_user_request_set_data( ur, sizeof( struct treq_call_sound_set_volume_level ), &req );
+       tcore_user_request_set_data( ur, sizeof( struct treq_call_set_sound_volume_level ), &req );
        tcore_user_request_set_command( ur, TREQ_CALL_SET_SOUND_VOLUME_LEVEL );
 
        ret = tcore_communicator_dispatch_request( ctx->comm, ur );
        if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
-               return FALSE;
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
 }
 
-static gboolean on_call_get_mute_status(TelephonyCall *call, GDBusMethodInvocation *invocation, gpointer user_data)
+static gboolean on_call_get_sound_mute_status(TelephonyCall *call, GDBusMethodInvocation *invocation, gpointer user_data)
 {
        struct custom_data *ctx = user_data;
-       UserRequest *ur = MAKE_UR(ctx, call, invocation);
-
+       UserRequest *ur;
        TReturn ret = 0;
 
-       if ( !ur ) {
-               dbg("[ error ] ur : 0");
-               return FALSE;
-       }
+       if (!check_access_control (invocation, AC_CALL, "r"))
+               return TRUE;
 
-       tcore_user_request_set_command( ur, TREQ_CALL_GET_MUTE_STATUS );
+       ur = MAKE_UR(ctx, call, invocation);
+
+       tcore_user_request_set_command( ur, TREQ_CALL_GET_SOUND_MUTE_STATUS );
 
        ret = tcore_communicator_dispatch_request( ctx->comm, ur );
        if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
-               return FALSE;
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
 }
 
-static gboolean on_call_mute(TelephonyCall *call, GDBusMethodInvocation *invocation, gpointer user_data)
+static gboolean on_call_set_sound_mute_status(TelephonyCall *call, GDBusMethodInvocation *invocation, gint status, gint path, gpointer user_data)
 {
+       struct treq_call_set_sound_mute_status req;
        struct custom_data *ctx = user_data;
-       UserRequest *ur = MAKE_UR(ctx, call, invocation);
-
+       UserRequest *ur;
        TReturn ret = 0;
 
-       if ( !ur ) {
-               dbg("[ error ] ur : 0");
-               return FALSE;
-       }
+       if (!check_access_control (invocation, AC_CALL, "w"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, call, invocation);
 
-       tcore_user_request_set_command( ur, TREQ_CALL_MUTE );
+       req.path = path;
+       req.status = status;
+
+       dbg("[ check ] path : 0x%x, status : 0x%x", path, status);
+
+       tcore_user_request_set_data( ur, sizeof( struct treq_call_set_sound_mute_status ), &req );
+       tcore_user_request_set_command( ur, TREQ_CALL_SET_SOUND_MUTE_STATUS );
 
        ret = tcore_communicator_dispatch_request( ctx->comm, ur );
        if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
-               return FALSE;
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
 }
 
-static gboolean on_call_unmute(TelephonyCall *call, GDBusMethodInvocation *invocation, gpointer user_data)
+static gboolean on_call_set_sound_recording(TelephonyCall *call, GDBusMethodInvocation *invocation, gint recording_state, gpointer user_data)
 {
        struct custom_data *ctx = user_data;
-       UserRequest *ur = MAKE_UR(ctx, call, invocation);
-
+       struct treq_call_set_sound_recording req;
+       UserRequest *ur;
        TReturn ret = 0;
 
-       if ( !ur ) {
-               dbg("[ error ] ur : 0");
-               return FALSE;
-       }
+       if (!check_access_control (invocation, AC_CALL, "w"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, call, invocation);
+
+       req.state = (gboolean)recording_state;
 
-       tcore_user_request_set_command( ur, TREQ_CALL_UNMUTE );
+       tcore_user_request_set_data( ur, sizeof( struct treq_call_set_sound_recording ), &req );
+       tcore_user_request_set_command( ur, TREQ_CALL_SET_SOUND_RECORDING );
 
        ret = tcore_communicator_dispatch_request( ctx->comm, ur );
        if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
-               return FALSE;
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
 }
 
-static gboolean on_call_set_sound_recording(TelephonyCall *call, GDBusMethodInvocation *invocation, gint recording_state, gpointer user_data)
+static gboolean on_call_set_sound_equalization(TelephonyCall *call, GDBusMethodInvocation *invocation, gint eq_mode, gint eq_direction, gchar* eq_parameter, gpointer user_data)
 {
        struct custom_data *ctx = user_data;
-       struct treq_call_sound_set_recording req;
-
-       UserRequest *ur = MAKE_UR(ctx, call, invocation);
-
+       struct treq_call_set_sound_equalization req;
+       UserRequest *ur;
        TReturn ret = 0;
 
-       if ( !ur ) {
-               dbg("[ error ] ur : 0");
-               return FALSE;
-       }
+       if (!check_access_control (invocation, AC_CALL, "w"))
+               return TRUE;
 
-       req.state = (gboolean)recording_state;
+       ur = MAKE_UR(ctx, call, invocation);
 
-       tcore_user_request_set_data( ur, sizeof( struct treq_call_sound_set_recording ), &req );
-       tcore_user_request_set_command( ur, TREQ_CALL_SET_SOUND_RECORDING );
+       req.mode = eq_mode;
+       req.direction = (enum telephony_call_sound_direction)eq_direction;
+       memcpy( (char*)req.parameter, (const char*)eq_parameter, (MAX_CALL_EQ_PARAMETER_SIZE*2) );
+
+       tcore_user_request_set_data( ur, sizeof( struct treq_call_set_sound_equalization ), &req );
+       tcore_user_request_set_command( ur, TREQ_CALL_SET_SOUND_EQUALIZATION );
 
        ret = tcore_communicator_dispatch_request( ctx->comm, ur );
        if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
-               return FALSE;
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
 }
 
-static gboolean on_call_set_sound_equalization(TelephonyCall *call, GDBusMethodInvocation *invocation, gint eq_mode, gint eq_direction, gchar* eq_parameter, gpointer user_data)
+static gboolean on_call_set_sound_noise_reduction(TelephonyCall *call, GDBusMethodInvocation *invocation, gint nr_state, gpointer user_data)
 {
        struct custom_data *ctx = user_data;
-       struct treq_call_sound_set_equalization req;
+       struct treq_call_set_sound_noise_reduction req;
+       UserRequest *ur;
+       TReturn ret = 0;
 
-       UserRequest *ur = MAKE_UR(ctx, call, invocation);
+       if (!check_access_control (invocation, AC_CALL, "w"))
+               return TRUE;
 
-       TReturn ret = 0;
+       ur = MAKE_UR(ctx, call, invocation);
 
-       if ( !ur ) {
-               dbg("[ error ] ur : 0");
+       req.status = (gboolean)nr_state;
+
+       tcore_user_request_set_data( ur, sizeof( struct treq_call_set_sound_noise_reduction ), &req );
+       tcore_user_request_set_command( ur, TREQ_CALL_SET_SOUND_NOISE_REDUCTION );
+
+       ret = tcore_communicator_dispatch_request( ctx->comm, ur );
+       if ( ret != TCORE_RETURN_SUCCESS ) {
+               telephony_call_complete_set_sound_noise_reduction(call, invocation, ret );
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
                return FALSE;
        }
 
-       req.mode = (gboolean)eq_mode;
-       req.direction = (enum telephony_call_sound_direction)eq_direction;
-       memcpy( (char*)req.parameter, (const char*)eq_parameter, (MAX_CALL_EQ_PARAMETER_SIZE*2) );
+       return TRUE;
+}
 
-       tcore_user_request_set_data( ur, sizeof( struct treq_call_sound_set_equalization ), &req );
-       tcore_user_request_set_command( ur, TREQ_CALL_SET_SOUND_EQUALIZATION );
+static gboolean on_call_set_sound_clock_status(TelephonyCall *call, GDBusMethodInvocation *invocation, gboolean clock_status, gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       struct treq_call_set_sound_clock_status req;
+       UserRequest *ur;
+       TReturn ret = 0;
+
+       if (!check_access_control (invocation, AC_CALL, "w"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, call, invocation);
+
+       req.status = clock_status;
+
+       tcore_user_request_set_data( ur, sizeof( struct treq_call_set_sound_clock_status ), &req );
+       tcore_user_request_set_command( ur, TREQ_CALL_SET_SOUND_CLOCK_STATUS );
 
        ret = tcore_communicator_dispatch_request( ctx->comm, ur );
        if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
-               return FALSE;
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
 }
 
-static gboolean on_call_set_sound_noise_reduction(TelephonyCall *call, GDBusMethodInvocation *invocation, gint nr_state, gpointer user_data)
+static gboolean on_call_set_preferred_voice_subscription(TelephonyCall *call, GDBusMethodInvocation *invocation,
+       gint preferred_subscription, gpointer user_data)
 {
        struct custom_data *ctx = user_data;
-       struct treq_call_sound_set_noise_reduction req;
+       struct treq_call_set_preferred_voice_subscription req;
+       UserRequest *ur;
+       TReturn ret = 0;
 
-       UserRequest *ur = MAKE_UR(ctx, call, invocation);
+       if (!check_access_control (invocation, AC_CALL, "w"))
+               return TRUE;
 
-       TReturn ret = 0;
+       ur = MAKE_UR(ctx, call, invocation);
 
-       if ( !ur ) {
-               dbg("[ error ] ur : 0");
-               return FALSE;
+       req.preferred_subs = preferred_subscription;
+
+       tcore_user_request_set_data( ur, sizeof( struct treq_call_set_preferred_voice_subscription ), &req );
+       tcore_user_request_set_command( ur, TREQ_CALL_SET_PREFERRED_VOICE_SUBSCRIPTION );
+
+       ret = tcore_communicator_dispatch_request( ctx->comm, ur );
+       if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
        }
 
-       req.status = (gboolean)nr_state;
+       return TRUE;
+}
 
-       tcore_user_request_set_data( ur, sizeof( struct treq_call_sound_set_noise_reduction ), &req );
-       tcore_user_request_set_command( ur, TREQ_CALL_SET_SOUND_NOISE_REDUCTION );
+static gboolean on_call_get_preferred_voice_subscription(TelephonyCall *call, GDBusMethodInvocation *invocation, gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur;
+       TReturn ret = 0;
+
+       if (!check_access_control (invocation, AC_CALL, "r"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, call, invocation);
+
+       tcore_user_request_set_command( ur, TREQ_CALL_GET_PREFERRED_VOICE_SUBSCRIPTION );
 
        ret = tcore_communicator_dispatch_request( ctx->comm, ur );
        if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
-               return FALSE;
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
 }
 
-
 gboolean dbus_plugin_setup_call_interface(TelephonyObjectSkeleton *object, struct custom_data *ctx)
 {
        TelephonyCall *call;
@@ -853,8 +1088,18 @@ gboolean dbus_plugin_setup_call_interface(TelephonyObjectSkeleton *object, struc
                        ctx);
 
        g_signal_connect (call,
-                       "handle-dtmf",
-                       G_CALLBACK (on_call_dtmf),
+                       "handle-start-cont-dtmf",
+                       G_CALLBACK (on_call_start_cont_dtmf),
+                       ctx);
+
+       g_signal_connect (call,
+                       "handle-stop-cont-dtmf",
+                       G_CALLBACK (on_call_stop_cont_dtmf),
+                       ctx);
+
+       g_signal_connect (call,
+                       "handle-send-burst-dtmf",
+                       G_CALLBACK (on_call_send_burst_dtmf),
                        ctx);
 
        g_signal_connect (call,
@@ -893,6 +1138,16 @@ gboolean dbus_plugin_setup_call_interface(TelephonyObjectSkeleton *object, struc
                        ctx);
 
        g_signal_connect (call,
+                       "handle-get-privacy-mode",
+                       G_CALLBACK (on_call_get_privacy_mode),
+                       ctx);
+
+       g_signal_connect (call,
+                       "handle-set-privacy-mode",
+                       G_CALLBACK (on_call_set_privacy_mode),
+                       ctx);
+
+       g_signal_connect (call,
                        "handle-get-status",
                        G_CALLBACK (on_call_get_status),
                        ctx);
@@ -909,28 +1164,23 @@ gboolean dbus_plugin_setup_call_interface(TelephonyObjectSkeleton *object, struc
                        ctx);
 
        g_signal_connect (call,
-                       "handle-get-volume",
-                       G_CALLBACK (on_call_get_volume),
+                       "handle-get-sound-volume-level",
+                       G_CALLBACK (on_call_get_sound_volume_level),
                        ctx);
 
        g_signal_connect (call,
-                       "handle-set-volume",
-                       G_CALLBACK (on_call_set_volume),
+                       "handle-set-sound-volume-level",
+                       G_CALLBACK (on_call_set_sound_volume_level),
                        ctx);
 
        g_signal_connect (call,
-                       "handle-get-mute-status",
-                       G_CALLBACK (on_call_get_mute_status),
+                       "handle-get-sound-mute-status",
+                       G_CALLBACK (on_call_get_sound_mute_status),
                        ctx);
 
        g_signal_connect (call,
-                       "handle-mute",
-                       G_CALLBACK (on_call_mute),
-                       ctx);
-
-       g_signal_connect (call,
-                       "handle-unmute",
-                       G_CALLBACK (on_call_unmute),
+                       "handle-set-sound-mute-status",
+                       G_CALLBACK (on_call_set_sound_mute_status),
                        ctx);
 
        g_signal_connect (call,
@@ -948,6 +1198,20 @@ gboolean dbus_plugin_setup_call_interface(TelephonyObjectSkeleton *object, struc
                        G_CALLBACK (on_call_set_sound_noise_reduction),
                        ctx);
 
+       g_signal_connect (call,
+                       "handle-set-sound-clock-status",
+                       G_CALLBACK (on_call_set_sound_clock_status),
+                       ctx);
+
+       g_signal_connect (call,
+                       "handle-set-preferred-voice-subscription",
+                       G_CALLBACK (on_call_set_preferred_voice_subscription),
+                       ctx);
+
+       g_signal_connect (call,
+                       "handle-get-preferred-voice-subscription",
+                       G_CALLBACK (on_call_get_preferred_voice_subscription),
+                       ctx);
 
        return TRUE;
 }
@@ -969,7 +1233,7 @@ gboolean dbus_plugin_call_response(struct custom_data *ctx, UserRequest *ur, str
        if (!p)
                return FALSE;
 
-       co_list = tcore_plugin_get_core_objects_bytype(p, CORE_OBJECT_TYPE_NETWORK);
+       co_list = tcore_plugin_get_core_objects_bytype(p, CORE_OBJECT_TYPE_CALL);
        if (!co_list) {
                return FALSE;
        }
@@ -985,8 +1249,7 @@ gboolean dbus_plugin_call_response(struct custom_data *ctx, UserRequest *ur, str
                case TRESP_CALL_DIAL: {
                        struct tresp_call_dial *resp = (struct tresp_call_dial*)data;
 
-                       dbg("receive TRESP_CALL_DIAL");
-                       dbg("resp->err : [%d]", resp->err);
+                       dbg("receive TRESP_CALL_DIAL (err[%d])", resp->err);
 
                        telephony_call_complete_dial(dbus_info->interface_object, dbus_info->invocation, resp->err);
                } break;
@@ -994,9 +1257,7 @@ gboolean dbus_plugin_call_response(struct custom_data *ctx, UserRequest *ur, str
                case TRESP_CALL_ANSWER: {
                        struct tresp_call_answer *resp = (struct tresp_call_answer*)data;
 
-                       dbg("receive TRESP_CALL_ANSWER");
-                       dbg("resp->err : [%d]", resp->err);
-                       dbg("resp->id : [%d]", resp->id);
+                       dbg("receive TRESP_CALL_ANSWER (err[%d] id[%d])", resp->err, resp->id);
 
                        telephony_call_complete_answer(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->id );
 
@@ -1005,10 +1266,7 @@ gboolean dbus_plugin_call_response(struct custom_data *ctx, UserRequest *ur, str
                case TRESP_CALL_END: {
                        struct tresp_call_end *resp = (struct tresp_call_end*)data;
 
-                       dbg("receive TRESP_CALL_END");
-                       dbg("resp->err : [%d]", resp->err);
-                       dbg("resp->id : [%d]", resp->err);
-                       dbg("resp->type : [%d]", resp->type);
+                       dbg("receive TRESP_CALL_END (err[%d] id[%d] type[%d])", resp->err, resp->id, resp->type);
 
                        telephony_call_complete_end(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->id, resp->type );
 
@@ -1017,9 +1275,7 @@ gboolean dbus_plugin_call_response(struct custom_data *ctx, UserRequest *ur, str
                case TRESP_CALL_HOLD: {
                        struct tresp_call_hold *resp = (struct tresp_call_hold*)data;
 
-                       dbg("receive TRESP_CALL_HOLD");
-                       dbg("resp->err : [%d]", resp->err);
-                       dbg("resp->id : [%d]", resp->id);
+                       dbg("receive TRESP_CALL_HOLD (err[%d] id[%d])", resp->err, resp->id);
 
                        telephony_call_complete_hold(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->id );
 
@@ -1028,9 +1284,7 @@ gboolean dbus_plugin_call_response(struct custom_data *ctx, UserRequest *ur, str
                case TRESP_CALL_ACTIVE: {
                        struct tresp_call_active *resp = (struct tresp_call_active*)data;
 
-                       dbg("receive TRESP_CALL_ACTIVE");
-                       dbg("resp->err : [%d]", resp->err);
-                       dbg("resp->id : [%d]", resp->id);
+                       dbg("receive TRESP_CALL_ACTIVE (err[%d] id[%d])", resp->err, resp->id);
 
                        telephony_call_complete_active(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->id );
 
@@ -1039,9 +1293,7 @@ gboolean dbus_plugin_call_response(struct custom_data *ctx, UserRequest *ur, str
                case TRESP_CALL_SWAP: {
                        struct tresp_call_swap *resp = (struct tresp_call_swap*)data;
 
-                       dbg("receive TRESP_CALL_SWAP");
-                       dbg("resp->err : [%d]", resp->err);
-                       dbg("resp->id : [%d]", resp->id);
+                       dbg("receive TRESP_CALL_SWAP (err[%d] id[%d])", resp->err, resp->id);
 
                        telephony_call_complete_swap(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->id );
 
@@ -1050,9 +1302,7 @@ gboolean dbus_plugin_call_response(struct custom_data *ctx, UserRequest *ur, str
                case TRESP_CALL_JOIN: {
                        struct tresp_call_join *resp = (struct tresp_call_join*)data;
 
-                       dbg("receive TRESP_CALL_JOIN");
-                       dbg("resp->err : [%d]", resp->err);
-                       dbg("resp->id : [%d]", resp->id);
+                       dbg("receive TRESP_CALL_JOIN (err[%d] id[%d])", resp->err, resp->id);
 
                        telephony_call_complete_join(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->id );
 
@@ -1062,9 +1312,7 @@ gboolean dbus_plugin_call_response(struct custom_data *ctx, UserRequest *ur, str
                case TRESP_CALL_SPLIT: {
                        struct tresp_call_split *resp = (struct tresp_call_split*)data;
 
-                       dbg("receive TRESP_CALL_SPLIT");
-                       dbg("resp->err : [%d]", resp->err);
-                       dbg("resp->id : [%d]", resp->id);
+                       dbg("receive TRESP_CALL_SPLIT (err[%d] id[%d])", resp->err, resp->id);
 
                        telephony_call_complete_split(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->id );
 
@@ -1073,9 +1321,7 @@ gboolean dbus_plugin_call_response(struct custom_data *ctx, UserRequest *ur, str
                case TRESP_CALL_DEFLECT: {
                        struct tresp_call_deflect *resp = (struct tresp_call_deflect*)data;
 
-                       dbg("receive TRESP_CALL_DEFLECT");
-                       dbg("resp->err : [%d]", resp->err);
-                       dbg("resp->id : [%d]", resp->id);
+                       dbg("receive TRESP_CALL_DEFLECT (err[%d] id[%d])", resp->err, resp->id);
 
                        telephony_call_complete_deflect(dbus_info->interface_object, dbus_info->invocation, resp->err );
 
@@ -1084,54 +1330,80 @@ gboolean dbus_plugin_call_response(struct custom_data *ctx, UserRequest *ur, str
                case TRESP_CALL_TRANSFER: {
                        struct tresp_call_transfer *resp = (struct tresp_call_transfer*)data;
 
-                       dbg("receive TRESP_CALL_TRANSFER");
-                       dbg("resp->err : [%d]", resp->err);
-                       dbg("resp->id : [%d]", resp->id);
+                       dbg("receive TRESP_CALL_TRANSFER (err[%d] id[%d])", resp->err, resp->id);
 
                        telephony_call_complete_transfer(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->id );
 
                } break;
 
-               case TRESP_CALL_SEND_DTMF: {
+               case TRESP_CALL_START_CONT_DTMF: {
                        struct tresp_call_dtmf *resp = (struct tresp_call_dtmf*)data;
 
-                       dbg("receive TRESP_CALL_SEND_DTMF");
-                       dbg("resp->err : [%d]", resp->err);
+                       dbg("receive TRESP_CALL_START_CONT_DTMF (err[%d])", resp->err);
 
-                       telephony_call_complete_dtmf(dbus_info->interface_object, dbus_info->invocation, resp->err);
+                       telephony_call_complete_start_cont_dtmf(dbus_info->interface_object, dbus_info->invocation, resp->err);
+               } break;
+
+               case TRESP_CALL_STOP_CONT_DTMF: {
+                       struct tresp_call_dtmf *resp = (struct tresp_call_dtmf*)data;
+
+                       dbg("receive TRESP_CALL_STOP_CONT_DTMF (err[%d])", resp->err);
+
+                       telephony_call_complete_stop_cont_dtmf(dbus_info->interface_object, dbus_info->invocation, resp->err);
+               } break;
+
+               case TRESP_CALL_SEND_BURST_DTMF: {
+                       struct tresp_call_dtmf *resp = (struct tresp_call_dtmf*)data;
+
+                       dbg("receive TRESP_CALL_SEND_BURST_DTMF (err[%d])", resp->err);
+
+                       telephony_call_complete_send_burst_dtmf(dbus_info->interface_object, dbus_info->invocation, resp->err);
+               } break;
+
+               case TRESP_CALL_GET_PRIVACY_MODE: {
+                       struct tresp_call_get_voice_privacy_mode *resp = (struct tresp_call_get_voice_privacy_mode*)data;
+
+                       dbg("receive TRESP_CALL_GET_PRIVACY_MODE (err[%d])", resp->err);
+                       dbg("Voice call privacy mode %d",resp->privacy_mode);
+
+                       telephony_call_complete_get_privacy_mode(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->privacy_mode);
+               } break;
+
+               case TRESP_CALL_SET_PRIVACY_MODE: {
+                       struct tresp_call_set_voice_privacy_mode *resp = (struct tresp_call_set_voice_privacy_mode *)data;
+
+                       dbg("receive TRESP_CALL_SET_PRIVACY_MODE (err[%d])", resp->err);
+
+                       telephony_call_complete_set_privacy_mode(dbus_info->interface_object, dbus_info->invocation, resp->err);
                } break;
 
                case TRESP_CALL_SET_SOUND_PATH: {
-                       struct tresp_call_sound_set_path *resp = (struct tresp_call_sound_set_path*)data;
+                       struct tresp_call_set_sound_path *resp = (struct tresp_call_set_sound_path*)data;
 
-                       dbg("receive TRESP_CALL_SET_SOUND_PATH");
-                       dbg("resp->err : [%d]", resp->err);
+                       dbg("receive TRESP_CALL_SET_SOUND_PATH (err[%d])", resp->err);
 
                        telephony_call_complete_set_sound_path(dbus_info->interface_object, dbus_info->invocation, resp->err);
                } break;
 
                case TRESP_CALL_SET_SOUND_VOLUME_LEVEL: {
-                       struct tresp_call_sound_set_volume_level *resp = (struct tresp_call_sound_set_volume_level*)data;
+                       struct tresp_call_set_sound_volume_level *resp = (struct tresp_call_set_sound_volume_level*)data;
 
-                       dbg("receive TRESP_CALL_SET_SOUND_VOLUME_LEVEL");
-                       dbg("resp->err : [%d]", resp->err);
+                       dbg("receive TRESP_CALL_SET_SOUND_VOLUME_LEVEL (err[%d])", resp->err);
 
-                       telephony_call_complete_set_volume(dbus_info->interface_object, dbus_info->invocation, resp->err);
+                       telephony_call_complete_set_sound_volume_level(dbus_info->interface_object, dbus_info->invocation, resp->err);
                } break;
 
                case TRESP_CALL_GET_SOUND_VOLUME_LEVEL: {
-                       struct tresp_call_sound_get_volume_level *resp = (struct tresp_call_sound_get_volume_level*)data;
+                       struct tresp_call_get_sound_volume_level *resp = (struct tresp_call_get_sound_volume_level*)data;
                        GVariant *result = 0;
                        GVariantBuilder b;
 
-                       dbg("receive TRESP_CALL_GET_SOUND_VOLUME_LEVEL");
+                       dbg("receive TRESP_CALL_GET_SOUND_VOLUME_LEVEL (err[%d])", resp->err);
 
                        g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
 
                        g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
 
-                       dbg("resp->err : [%d]", resp->err);
-
                        g_variant_builder_add(&b, "{sv}", "err", g_variant_new_int32(resp->err));
 
                        if ( !resp->err ) {
@@ -1139,12 +1411,10 @@ gboolean dbus_plugin_call_response(struct custom_data *ctx, UserRequest *ur, str
                                dbg("resp->record_num : [%d]", resp->record_num);
 
                                for ( i=0; i<resp->record_num; i++ ) {
-                                       dbg("resp->type : [%d]", resp->record[i].sound);
-                                       dbg("resp->level : [%d]", resp->record[i].volume);
-
+                                       dbg("sound_type : [%d], level:[%d]", resp->record[i].sound, resp->record[i].volume);
                                        g_variant_builder_add(&b, "{sv}", "type", g_variant_new_int32(resp->record[i].sound));
                                        g_variant_builder_add(&b, "{sv}", "level", g_variant_new_int32(resp->record[i].volume));
-                               } 
+                               }
 
                        }
 
@@ -1152,59 +1422,61 @@ gboolean dbus_plugin_call_response(struct custom_data *ctx, UserRequest *ur, str
 
                        result = g_variant_builder_end(&b);
 
-                       telephony_call_complete_get_volume(dbus_info->interface_object, dbus_info->invocation, resp->err, result );
-
-                       g_variant_unref(result);
-
-               } break;
-
-               case TRESP_CALL_MUTE: {
-                       struct tresp_call_mute *resp = (struct tresp_call_mute*)data;
-
-                       dbg("receive TRESP_CALL_MUTE");
-                       dbg("resp->err : [%d]", resp->err);
+                       telephony_call_complete_get_sound_volume_level(dbus_info->interface_object, dbus_info->invocation, result, resp->err );
 
-                       telephony_call_complete_mute(dbus_info->interface_object, dbus_info->invocation, resp->err);
                } break;
 
-               case TRESP_CALL_UNMUTE: {
-                       struct tresp_call_unmute *resp = (struct tresp_call_unmute*)data;
+               case TRESP_CALL_SET_SOUND_MUTE_STATUS: {
+                       struct tresp_call_set_sound_mute_status *resp = (struct tresp_call_set_sound_mute_status*)data;
 
-                       dbg("receive TRESP_CALL_UNMUTE");
-                       dbg("resp->err : [%d]", resp->err);
-
-                       telephony_call_complete_unmute(dbus_info->interface_object, dbus_info->invocation, resp->err);
+                       dbg("receive TRESP_CALL_SET_SOUND_MUTE_STATUS (err[%d]", resp->err);
+                       telephony_call_complete_set_sound_mute_status(dbus_info->interface_object, dbus_info->invocation, resp->err);
                } break;
 
-               case TRESP_CALL_GET_MUTE_STATUS: {
-                       struct tresp_call_get_mute_status *resp = (struct tresp_call_get_mute_status*)data;
-
-                       dbg("receive TRESP_CALL_GET_MUTE_STATUS");
-                       dbg("resp->err : [%d]", resp->err);
-                       dbg("resp->status : [%d]", resp->status);
+               case TRESP_CALL_GET_SOUND_MUTE_STATUS: {
+                       struct tresp_call_get_sound_mute_status *resp = (struct tresp_call_get_sound_mute_status*)data;
 
-                       telephony_call_complete_get_mute_status(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->status );
+                       dbg("receive TRESP_CALL_GET_SOUND_MUTE_STATUS (err[%d] path[%d] status[%d])",
+                               resp->err, resp->path, resp->status);
+                       telephony_call_complete_get_sound_mute_status(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->path, resp->status );
 
                } break;
 
                case TRESP_CALL_SET_SOUND_RECORDING: {
-                       struct tresp_call_sound_set_recording *resp = (struct tresp_call_sound_set_recording*)data;
+                       struct tresp_call_set_sound_recording *resp = (struct tresp_call_set_sound_recording*)data;
                        telephony_call_complete_set_sound_recording(dbus_info->interface_object, dbus_info->invocation, resp->err );
 
                } break;
 
                case TRESP_CALL_SET_SOUND_EQUALIZATION: {
-                       struct tresp_call_sound_set_equalization *resp = (struct tresp_call_sound_set_equalization*)data;
+                       struct tresp_call_set_sound_equalization *resp = (struct tresp_call_set_sound_equalization*)data;
                        telephony_call_complete_set_sound_equalization(dbus_info->interface_object, dbus_info->invocation, resp->err );
 
                } break;
 
                case TRESP_CALL_SET_SOUND_NOISE_REDUCTION: {
-                       struct tresp_call_sound_set_noise_reduction *resp = (struct tresp_call_sound_set_noise_reduction*)data;
+                       struct tresp_call_set_sound_noise_reduction *resp = (struct tresp_call_set_sound_noise_reduction*)data;
                        telephony_call_complete_set_sound_noise_reduction(dbus_info->interface_object, dbus_info->invocation, resp->err );
 
                } break;
 
+               case TRESP_CALL_SET_SOUND_CLOCK_STATUS: {
+                       struct tresp_call_set_sound_clock_status *resp = (struct tresp_call_set_sound_clock_status*)data;
+                       telephony_call_complete_set_sound_clock_status(dbus_info->interface_object, dbus_info->invocation, resp->err );
+
+               } break;
+
+               case TRESP_CALL_SET_PREFERRED_VOICE_SUBSCRIPTION: {
+                       struct tresp_call_set_preferred_voice_subscription *resp = (struct tresp_call_set_preferred_voice_subscription*)data;
+                       telephony_call_complete_set_preferred_voice_subscription(dbus_info->interface_object, dbus_info->invocation, resp->err );
+               } break;
+
+               case TRESP_CALL_GET_PREFERRED_VOICE_SUBSCRIPTION: {
+                       struct tresp_call_get_preferred_voice_subscription *resp = (struct tresp_call_get_preferred_voice_subscription*)data;
+                       telephony_call_complete_get_preferred_voice_subscription(dbus_info->interface_object, dbus_info->invocation,
+                               resp->preferred_subs, resp->err );
+               } break;
+
                default:
                        dbg("not handled command[%d]", command);
                break;
@@ -1214,46 +1486,42 @@ gboolean dbus_plugin_call_response(struct custom_data *ctx, UserRequest *ur, str
        return TRUE;
 }
 
-gboolean dbus_plugin_call_notification(struct custom_data *ctx, const char *plugin_name, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data)
+gboolean dbus_plugin_call_notification(struct custom_data *ctx, CoreObject *source, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data)
 {
        TelephonyCall *call;
+       char *cp_name;
 
        if (!object) {
                dbg("object is 0");
                return FALSE;
        }
+       cp_name = (char *)tcore_server_get_cp_name_by_plugin(tcore_object_ref_plugin(source));
+       dbg("Notification!!! Command: [0x%x] CP Name: [%s]",
+                               command, cp_name);
 
        call = telephony_object_peek_call(TELEPHONY_OBJECT(object));
-       dbg("call = %p", call);
 
        switch (command) {
                case TNOTI_CALL_STATUS_IDLE: {
                        struct tnoti_call_status_idle *idle = (struct tnoti_call_status_idle*)data;
 
-                       dbg("[ check ] call status : idle");
-
                        if ( idle->type != CALL_TYPE_VIDEO ) {
-                               dbg("[ check ] this is voice call");
+                               dbg("[ check ] call status : idle (voice call)");
                                telephony_call_emit_voice_call_status_idle( call, idle->id, idle->cause, 0, 0 );
                        } else {
-                               dbg("[ check ] this is video call");
+                               dbg("[ check ] call status : idle (video call)");
                                telephony_call_emit_video_call_status_idle( call, idle->id, idle->cause, 0, 0 );
                        }
 
-
                } break;
                case TNOTI_CALL_STATUS_DIALING: {
                        struct tnoti_call_status_dialing *dialing = (struct tnoti_call_status_dialing*)data;
 
-                       dbg("[ check ] call status : dialing");
-                       dbg("[ check ] call type : (%d)", dialing->type);
-                       dbg("[ check ] call id : (%d)", dialing->id);
-
                        if ( dialing->type != CALL_TYPE_VIDEO ) {
-                               dbg("[ check ] this is voice call");
+                               dbg("[ check ] call status : dialing (type[%d] id[%d]) (voice call)", dialing->type, dialing->id);
                                telephony_call_emit_voice_call_status_dialing( call, dialing->id );
                        } else {
-                               dbg("[ check ] this is video call");
+                               dbg("[ check ] call status : dialing (type[%d] id[%d]) (video call)", dialing->type, dialing->id);
                                telephony_call_emit_video_call_status_dialing( call, dialing->id );
                        }
 
@@ -1261,13 +1529,11 @@ gboolean dbus_plugin_call_notification(struct custom_data *ctx, const char *plug
                case TNOTI_CALL_STATUS_ALERT: {
                        struct tnoti_call_status_alert *alert = (struct tnoti_call_status_alert*)data;
 
-                       dbg("[ check ] call status : alert");
-
                        if ( alert->type != CALL_TYPE_VIDEO ) {
-                               dbg("[ check ] this is voice call");
+                               dbg("[ check ] call status : alert (voice call)");
                                telephony_call_emit_voice_call_status_alert( call, alert->id );
                        } else {
-                               dbg("[ check ] this is video call");
+                               dbg("[ check ] call status : alert (video call)");
                                telephony_call_emit_video_call_status_alert( call, alert->id );
                        }
 
@@ -1275,13 +1541,11 @@ gboolean dbus_plugin_call_notification(struct custom_data *ctx, const char *plug
                case TNOTI_CALL_STATUS_ACTIVE: {
                        struct tnoti_call_status_active *active = (struct tnoti_call_status_active*)data;
 
-                       dbg("[ check ] call status : active");
-
                        if ( active->type != CALL_TYPE_VIDEO ) {
-                               dbg("[ check ] this is voice call");
+                               dbg("[ check ] call status : active (voice call)");
                                telephony_call_emit_voice_call_status_active( call, active->id );
                        } else {
-                               dbg("[ check ] this is video call");
+                               dbg("[ check ] call status : active (video call)");
                                telephony_call_emit_video_call_status_active( call, active->id );
                        }
 
@@ -1290,33 +1554,171 @@ gboolean dbus_plugin_call_notification(struct custom_data *ctx, const char *plug
                        struct tnoti_call_status_held *held = (struct tnoti_call_status_held*)data;
 
                        dbg("[ check ] call status : held");
-
                        telephony_call_emit_voice_call_status_held( call, held->id );
 
                } break;
                case TNOTI_CALL_STATUS_INCOMING: {
                        struct tnoti_call_status_incoming *incoming = (struct tnoti_call_status_incoming*)data;
+                       enum dbus_tapi_sim_slot_id slot_id;
 
                        dbg("[ check ] call status : incoming");
+                       slot_id = get_sim_slot_id_by_cp_name(cp_name);
 
                        if ( incoming->type != CALL_TYPE_VIDEO ) {
-                               dbg("[ check ] this is voice call");
-
+                               dbg("[ check ] call status : incoming (voice call)");
                                telephony_call_emit_voice_call_status_incoming( call, incoming->id );
 
-                               _launch_voice_call( incoming );
+                               _launch_voice_call( incoming, slot_id);
 
                        } else {
-                               dbg("[ check ] this is video call");
+                               dbg("[ check ] call status : incoming (video call)");
                                telephony_call_emit_video_call_status_incoming( call, incoming->id );
 
-                               _launch_video_call( incoming );
+                               _launch_video_call( incoming, slot_id);
                        }
+               } break;
+
+               case TNOTI_CALL_INFO_WAITING: {
+                       int *id = (int*)data;
+
+                       dbg("[ check ] TNOTI_CALL_INFO_WAITING : (%d)", *id);
+                       telephony_call_emit_waiting( call, (gint)*id );
 
                } break;
 
-               case TNOTI_CALL_SOUND_PATH: {
+               case TNOTI_CALL_INFO_FORWARDED: {
+                       int *id = (int*)data;
+
+                       dbg("[ check ] TNOTI_CALL_INFO_FORWARDED : (%d)", *id);
+                       telephony_call_emit_forwarded( call, (gint)*id );
+
+               } break;
+
+               case TNOTI_CALL_INFO_FORWARDED_CALL: {
+                       int *id = (int*)data;
+
+                       dbg("[ check ] TNOTI_CALL_INFO_FORWARDED_CALL : (%d)", *id);
+                       telephony_call_emit_forwarded_call( call, (gint)*id );
+
+               } break;
+
+               case TNOTI_CALL_INFO_BARRED_INCOMING: {
+                       int *id = (int*)data;
+
+                       dbg("[ check ] TNOTI_CALL_INFO_BARRED_INCOMING : (%d)", *id);
+                       telephony_call_emit_barred_incoming( call, (gint)*id );
+
+               } break;
+
+               case TNOTI_CALL_INFO_BARRED_OUTGOING: {
+                       int *id = (int*)data;
+
+                       dbg("[ check ] TNOTI_CALL_INFO_BARRED_OUTGOING : (%d)", *id);
+                       telephony_call_emit_barred_outgoing( call, (gint)*id );
+
+               } break;
+
+               case TNOTI_CALL_INFO_FORWARD_CONDITIONAL: {
+                       int *id = (int*)data;
+
+                       dbg("[ check ] TNOTI_CALL_INFO_FORWARD_CONDITIONAL : (%d)", *id);
+                       telephony_call_emit_forward_conditional( call, (gint)*id );
 
+               } break;
+
+               case TNOTI_CALL_INFO_FORWARD_UNCONDITIONAL: {
+                       int *id = (int*)data;
+
+                       dbg("[ check ] TNOTI_CALL_INFO_FORWARD_UNCONDITIONAL : (%d)", *id);
+                       telephony_call_emit_forward_unconditional( call, (gint)*id );
+
+               } break;
+
+               case TNOTI_CALL_INFO_HELD: {
+                       int *id = (int*)data;
+
+                       dbg("[ check ] TNOTI_CALL_INFO_HELD : (%d)", *id);
+                       telephony_call_emit_call_held( call, (gint)*id );
+
+               } break;
+
+               case TNOTI_CALL_INFO_ACTIVE: {
+                       int *id = (int*)data;
+
+                       dbg("[ check ] TNOTI_CALL_INFO_ACTIVE : (%d)", *id);
+                       telephony_call_emit_call_active( call, (gint)*id );
+
+               } break;
+
+               case TNOTI_CALL_INFO_JOINED: {
+                       int *id = (int*)data;
+
+                       dbg("[ check ] TNOTI_CALL_INFO_JOINED : (%d)", *id);
+                       telephony_call_emit_call_joined( call, (gint)*id );
+
+               } break;
+
+               case TNOTI_CALL_INFO_PRIVACY_MODE: {
+                       struct tnoti_call_info_voice_privacy_mode *privacy_info = (struct tnoti_call_info_voice_privacy_mode*)data;
+
+                       dbg("[ check ] TNOTI_CALL_INFO_PRIVACY_MODE : privacy mode ", privacy_info->privacy_mode);
+                       telephony_call_emit_call_privacy_mode( call, privacy_info->privacy_mode );
+
+               } break;
+
+               case TNOTI_CALL_OTASP_STATUS: {
+                       struct tnoti_call_otasp_status  *otasp = (struct tnoti_call_otasp_status *)data;
+
+                       dbg("[ check ] TNOTI_CALL_OTASP_STATUS : (%d)", otasp->otasp_status);
+                       telephony_call_emit_call_otasp_status( call, otasp->otasp_status );
+
+               } break;
+
+               case TNOTI_CALL_OTAPA_STATUS: {
+                       struct tnoti_call_otapa_status  *otapa = (struct tnoti_call_otapa_status *)data;
+
+                       dbg("[ check ] TNOTI_CALL_OTAPA_STATUS : (%d)", otapa->otapa_status);
+                       telephony_call_emit_call_otapa_status( call, otapa->otapa_status );
+
+               } break;
+
+               case TNOTI_CALL_SIGNAL_INFO: {
+
+                       struct tnoti_call_signal_info *sig_info = (struct tnoti_call_signal_info *)data;
+                       unsigned int signal;
+                       if (sig_info->signal_type == CALL_SIGNAL_TYPE_TONE) {
+                               signal = sig_info->signal.sig_tone_type;
+                       } else if(sig_info->signal_type == CALL_SIGNAL_TYPE_ISDN_ALERTING) {
+                               signal = sig_info->signal.sig_isdn_alert_type;
+                       } else if(sig_info->signal_type == CALL_SIGNAL_TYPE_IS54B_ALERTING) {
+                               signal = sig_info->signal.sig_is54b_alert_type;
+                       } else {
+                               err("Unknown Signal type");
+                               return FALSE;
+                       }
+                       dbg("[ check ] TNOTI_CALL_SIGNAL_INFO : Signal type (%d), Pitch type (%d), Signal %d", sig_info->signal_type, sig_info->pitch_type, signal);
+                       telephony_call_emit_call_signal_info( call, sig_info->signal_type, sig_info->pitch_type, signal);
+
+               } break;
+
+               case TNOTI_CALL_INFO_REC: {
+                               struct tnoti_call_info_rec *noti = (struct tnoti_call_info_rec *)data;
+                               gchar *param = NULL;
+                               if (noti->rec_info.type == CALL_REC_NAME_INFO) {
+                                       param = g_strdup(noti->rec_info.data.name);
+                               } else if (noti->rec_info.type == CALL_REC_NUMBER_INFO) {
+                                       param = g_strdup(noti->rec_info.data.number);
+                               } else {
+                                       err("Unknown rec info type (%d)", noti->rec_info.type);
+                                       return FALSE;
+                               }
+                               dbg("[ check ] TNOTI_CALL_INFO_REC : id:(%d) type:(%d), param:(%s)",
+                                       noti->rec_info.id, noti->rec_info.type, param);
+                               telephony_call_emit_call_info_rec( call, noti->rec_info.id, noti->rec_info.type, param);
+                               g_free(param);
+                       } break;
+
+               case TNOTI_CALL_SOUND_PATH: {
                        struct tnoti_call_sound_path *noti = (struct tnoti_call_sound_path*)data;
                        telephony_call_emit_call_sound_path( call, noti->path );
 
@@ -1347,6 +1749,18 @@ gboolean dbus_plugin_call_notification(struct custom_data *ctx, const char *plug
 
                } break;
 
+               case TNOTI_CALL_SOUND_CLOCK_STATUS: {
+                       struct tnoti_call_sound_clock_status *noti = (struct tnoti_call_sound_clock_status*)data;
+                       telephony_call_emit_call_sound_clock_status( call, noti->status );
+
+               } break;
+
+               case TNOTI_CALL_PREFERRED_VOICE_SUBSCRIPTION: {
+                       struct tnoti_call_preferred_voice_subscription *noti = (struct tnoti_call_preferred_voice_subscription*)data;
+                       telephony_call_emit_call_preferred_voice_subscription( call, noti->preferred_subs );
+
+               } break;
+
                default:
                        dbg("not handled command[%d]", command);
                break;
old mode 100644 (file)
new mode 100755 (executable)
index fa555fa..ccbde7b
@@ -1,7 +1,28 @@
+/*
+ * tel-plugin-dbus-tapi
+ *
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Ja-young Gu <jygu@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
 #include <glib.h>
+#include <security-server.h>
 
 #include <tcore.h>
 #include <plugin.h>
 #include <server.h>
 #include <user_request.h>
 
+#include <libxml/xmlmemory.h>
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+
 #include "generated-code.h"
 #include "common.h"
 
 
 static void _free_hook(UserRequest *ur)
 {
-       const struct tcore_user_info *ui;
-
-       ui = tcore_user_request_ref_user_info(ur);
-       if (!ui)
-               return;
+       struct dbus_request_info *user_info;
 
-       if (ui->user_data)
-               free(ui->user_data);
+       user_info = (struct dbus_request_info *)tcore_user_request_ref_user_info(ur);
+       if (user_info)
+               free(user_info);
 }
 
-char *dbus_plugin_get_plugin_name_by_object_path(const char *object_path)
+char *dbus_plugin_get_cp_name_by_object_path(const char *object_path)
 {
        if (!object_path)
                return NULL;
@@ -40,23 +62,139 @@ char *dbus_plugin_get_plugin_name_by_object_path(const char *object_path)
 UserRequest *dbus_plugin_macro_user_request_new(struct custom_data *ctx, void *object, GDBusMethodInvocation *invocation)
 {
        UserRequest *ur = NULL;
-       char *plugin_name;
-       struct tcore_user_info ui = { 0, };
+       char *cp_name;
        struct dbus_request_info *dbus_info;
 
-       plugin_name = GET_PLUGIN_NAME(invocation);
-       dbg("plugin_name = [%s]", plugin_name);
+       cp_name = GET_CP_NAME(invocation);
+       dbg("cp_name = [%s]", cp_name);
 
-       ur = tcore_user_request_new(ctx->comm, plugin_name);
+       ur = tcore_user_request_new(ctx->comm, cp_name);
+
+       dbus_info = calloc(1, sizeof(struct dbus_request_info));
+       if (!dbus_info)
+               return NULL;
 
-       dbus_info = calloc(sizeof(struct dbus_request_info), 1);
        dbus_info->interface_object = object;
        dbus_info->invocation = invocation;
 
-       ui.user_data = dbus_info;
-
-       tcore_user_request_set_user_info(ur, &ui);
+       tcore_user_request_set_user_info(ur, dbus_info);
        tcore_user_request_set_free_hook(ur, _free_hook);
 
        return ur;
 }
+
+gboolean check_access_control (GDBusMethodInvocation *invoc, const char *label, const char *perm)
+{
+       GDBusConnection *conn;
+       GVariant *result_pid;
+       GVariant *param;
+       GError *error = NULL;
+       const char *sender;
+       unsigned int pid;
+       int ret;
+       int result = FALSE;
+
+       conn = g_dbus_method_invocation_get_connection (invoc);
+       if (!conn) {
+               warn ("access control denied (no connection info)");
+               goto OUT;
+       }
+
+       sender = g_dbus_method_invocation_get_sender (invoc);
+
+       param = g_variant_new ("(s)", sender);
+       if (!param) {
+               warn ("access control denied (sender info fail)");
+               goto OUT;
+       }
+
+       result_pid = g_dbus_connection_call_sync (conn, "org.freedesktop.DBus",
+                       "/org/freedesktop/DBus",
+                       "org.freedesktop.DBus",
+                       "GetConnectionUnixProcessID",
+                       param, NULL,
+                       G_DBUS_CALL_FLAGS_NONE, -1, NULL, &error);
+       if (error) {
+               warn ("access control denied (dbus error: %d(%s))",
+                               error->code, error->message);
+               g_error_free (error);
+               goto OUT;
+       }
+
+       if (!result_pid) {
+               warn ("access control denied (fail to get pid)");
+               goto OUT;
+       }
+
+       g_variant_get (result_pid, "(u)", &pid);
+       g_variant_unref (result_pid);
+
+       dbg ("sender: %s pid = %u", sender, pid);
+
+       ret = security_server_check_privilege_by_pid (pid, label, perm);
+       if (ret != SECURITY_SERVER_API_SUCCESS) {
+               warn ("pid(%u) access (%s - %s) denied(%d)", pid, label, perm, ret);
+       }
+       else
+               result = TRUE;
+
+OUT:
+       if (result == FALSE) {
+               g_dbus_method_invocation_return_error (invoc,
+                               G_DBUS_ERROR,
+                               G_DBUS_ERROR_ACCESS_DENIED,
+                               "No access rights");
+       }
+       return result;
+}
+
+enum dbus_tapi_sim_slot_id get_sim_slot_id_by_cp_name(char *cp_name)
+{
+       if(g_str_has_suffix(cp_name , "0")){
+               return SIM_SLOT_PRIMARY;
+       } else if (g_str_has_suffix(cp_name , "1")){
+               return SIM_SLOT_SECONDARY;
+       } else if(g_str_has_suffix(cp_name , "2")){
+               return SIM_SLOT_TERTIARY;
+       }
+       return SIM_SLOT_PRIMARY;
+}
+
+gboolean dbus_plugin_util_load_xml(char *docname, char *groupname, void **i_doc, void **i_root_node)
+{
+       xmlDocPtr *doc = (xmlDocPtr *)i_doc;
+       xmlNodePtr *root_node = (xmlNodePtr *)i_root_node;
+
+       dbg("docname:%s, groupname:%s", docname, groupname);
+
+       *doc = xmlParseFile(docname);
+       if (*doc) {
+               *root_node = xmlDocGetRootElement(*doc);
+               if (*root_node) {
+                       dbg("*root_node->name:%s", (*root_node)->name);
+                       if (0 == xmlStrcmp((*root_node)->name, (const xmlChar *) groupname)) {
+                               *root_node = (*root_node)->xmlChildrenNode;
+                               return TRUE;
+                       } 
+                       *root_node = NULL;
+               }
+       }
+       xmlFreeDoc(*doc);
+       *doc = NULL;
+       err("Cannot parse doc(%s)", docname);
+       return FALSE;
+}
+
+void dbus_plugin_util_unload_xml(void **i_doc, void **i_root_node)
+{
+       xmlDocPtr *doc = (xmlDocPtr *)i_doc;
+       xmlNodePtr *root_node = (xmlNodePtr *)i_root_node;
+
+       dbg("unloading XML");
+       if (doc && *doc) {
+               xmlFreeDoc(*doc);
+               *doc = NULL;
+               if (root_node)
+                       *root_node = NULL;
+       }
+}
index 8b38c29..6d5f9c5 100644 (file)
@@ -1,16 +1,58 @@
+/*
+ * tel-plugin-dbus-tapi
+ *
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Ja-young Gu <jygu@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef __COMMON_H__
 #define __COMMON_H__
 
 #include <glib.h>
-#include <glib-object.h>
 #include <gio/gio.h>
 
 #include "type/sim.h"
 
 #include "generated-code.h"
 
-#define MY_DBUS_PATH "/org/tizen/telephony"
-#define MY_DBUS_SERVICE "org.tizen.telephony"
+#define AC_MANAGER             "telephony_framework::api_manager"
+#define AC_CALL                        "telephony_framework::api_call"
+#define AC_GPS                 "telephony_framework::api_gps"
+#define AC_MODEM               "telephony_framework::api_modem"
+#define AC_NETWORK             "telephony_framework::api_network"
+#define AC_PHONEBOOK   "telephony_framework::api_phonebook"
+#define AC_SAP                 "telephony_framework::api_sap"
+#define AC_SAT                 "telephony_framework::api_sat"
+#define AC_SIM                 "telephony_framework::api_sim"
+#define AC_SMS                 "telephony_framework::api_sms"
+#define AC_SS                  "telephony_framework::api_ss"
+
+#define MY_DBUS_PATH   "/org/tizen/telephony"
+#define MY_DBUS_SERVICE        "org.tizen.telephony"
+
+enum dbus_tapi_sim_slot_id {
+       SIM_SLOT_PRIMARY,
+       SIM_SLOT_SECONDARY,
+       SIM_SLOT_TERTIARY
+};
+
+struct cached_data{
+       char *cp_name;
+       gpointer cached_sat_main_menu;
+};
 
 struct custom_data {
        TcorePlugin *plugin;
@@ -19,12 +61,14 @@ struct custom_data {
 
        GHashTable *objects;
        GDBusObjectManagerServer *manager;
-
-       GQueue queue_sat;
-       gint sat_character_format;
-       gpointer cached_sat_main_menu;
-       struct tel_sim_ecc_list cached_sim_ecc;
-       gboolean sim_recv_first_status;
+       TelephonyManager *mgr;
+       enum tel_sim_status sim1_status;
+       enum tel_sim_status sim2_status;
+       int valid_sim_count;
+       GSList *cached_data;
+
+       gboolean name_acquired;
+       guint owner_id;
 };
 
 struct dbus_request_info {
@@ -32,46 +76,64 @@ struct dbus_request_info {
        GDBusMethodInvocation *invocation;
 };
 
-#define GET_PLUGIN_NAME(invocation) dbus_plugin_get_plugin_name_by_object_path(g_dbus_method_invocation_get_object_path(invocation))
+#define DEFAULT_MSG_REQ_FAILED "Request failed"
+
+#define GET_CP_NAME(invocation) dbus_plugin_get_cp_name_by_object_path(g_dbus_method_invocation_get_object_path(invocation))
 #define MAKE_UR(ctx,object,invocation) dbus_plugin_macro_user_request_new(ctx, object, invocation)
+#define FAIL_RESPONSE(ivc,msg) g_dbus_method_invocation_return_error (ivc, \
+               G_DBUS_ERROR, G_DBUS_ERROR_FAILED, msg);
 
-char *dbus_plugin_get_plugin_name_by_object_path(const char *object_path);
+char *dbus_plugin_get_cp_name_by_object_path(const char *object_path);
 UserRequest *dbus_plugin_macro_user_request_new(struct custom_data *ctx, void *object, GDBusMethodInvocation *invocation);
+gboolean check_access_control (GDBusMethodInvocation *invoc, const char *label, const char *perm);
+
+gboolean dbus_plugin_util_load_xml(char *docname, char *groupname, void **i_doc, void **i_root_node);
+void dbus_plugin_util_unload_xml(void **i_doc, void **i_root_node);
 
 gboolean dbus_plugin_setup_network_interface(TelephonyObjectSkeleton *object, struct custom_data *ctx);
 gboolean dbus_plugin_network_response(struct custom_data *ctx, UserRequest *ur, struct dbus_request_info *dbus_info, enum tcore_response_command command, unsigned int data_len, const void *data);
-gboolean dbus_plugin_network_notification(struct custom_data *ctx, const char *plugin_name, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data);
+gboolean dbus_plugin_network_notification(struct custom_data *ctx, CoreObject *source, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data);
 
 gboolean dbus_plugin_setup_sap_interface(TelephonyObjectSkeleton *object, struct custom_data *ctx);
 gboolean dbus_plugin_sap_response(struct custom_data *ctx, UserRequest *ur, struct dbus_request_info *dbus_info, enum tcore_response_command command, unsigned int data_len, const void *data);
-gboolean dbus_plugin_sap_notification(struct custom_data *ctx, const char *plugin_name, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data);
+gboolean dbus_plugin_sap_notification(struct custom_data *ctx, CoreObject *source, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data);
 
 gboolean dbus_plugin_setup_phonebook_interface(TelephonyObjectSkeleton *object, struct custom_data *ctx);
 gboolean dbus_plugin_phonebook_response(struct custom_data *ctx, UserRequest *ur, struct dbus_request_info *dbus_info, enum tcore_response_command command, unsigned int data_len, const void *data);
-gboolean dbus_plugin_phonebook_notification(struct custom_data *ctx, const char *plugin_name, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data);
+gboolean dbus_plugin_phonebook_notification(struct custom_data *ctx, CoreObject *source, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data);
 
 gboolean dbus_plugin_setup_sim_interface(TelephonyObjectSkeleton *object, struct custom_data *ctx);
 gboolean dbus_plugin_sim_response(struct custom_data *ctx, UserRequest *ur, struct dbus_request_info *dbus_info, enum tcore_response_command command, unsigned int data_len, const void *data);
-gboolean dbus_plugin_sim_notification(struct custom_data *ctx, const char *plugin_name, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data);
+gboolean dbus_plugin_sim_notification(struct custom_data *ctx, CoreObject *source, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data);
 
 gboolean dbus_plugin_setup_sat_interface(TelephonyObjectSkeleton *object, struct custom_data *ctx);
 gboolean dbus_plugin_sat_response(struct custom_data *ctx, UserRequest *ur, struct dbus_request_info *dbus_info, enum tcore_response_command command, unsigned int data_len, const void *data);
-gboolean dbus_plugin_sat_notification(struct custom_data *ctx, const char *plugin_name, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data);
+gboolean dbus_plugin_sat_notification(struct custom_data *ctx, CoreObject *source, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data);
 
 gboolean dbus_plugin_setup_sms_interface(TelephonyObjectSkeleton *object, struct custom_data *ctx);
 gboolean dbus_plugin_sms_response(struct custom_data *ctx, UserRequest *ur, struct dbus_request_info *dbus_info, enum tcore_response_command command, unsigned int data_len, const void *data);
-gboolean dbus_plugin_sms_notification(struct custom_data *ctx, const char *plugin_name, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data);
+gboolean dbus_plugin_sms_notification(struct custom_data *ctx, CoreObject *source, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data);
 
 gboolean dbus_plugin_setup_call_interface(TelephonyObjectSkeleton *object, struct custom_data *ctx);
 gboolean dbus_plugin_call_response(struct custom_data *ctx, UserRequest *ur, struct dbus_request_info *dbus_info, enum tcore_response_command command, unsigned int data_len, const void *data);
-gboolean dbus_plugin_call_notification(struct custom_data *ctx, const char *plugin_name, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data);
+gboolean dbus_plugin_call_notification(struct custom_data *ctx, CoreObject *source, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data);
 
 gboolean dbus_plugin_setup_ss_interface(TelephonyObjectSkeleton *object, struct custom_data *ctx);
 gboolean dbus_plugin_ss_response(struct custom_data *ctx, UserRequest *ur, struct dbus_request_info *dbus_info, enum tcore_response_command command, unsigned int data_len, const void *data);
-gboolean dbus_plugin_ss_notification(struct custom_data *ctx, const char *plugin_name, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data);
+gboolean dbus_plugin_ss_notification(struct custom_data *ctx, CoreObject *source, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data);
 
 gboolean dbus_plugin_setup_modem_interface(TelephonyObjectSkeleton *object, struct custom_data *ctx);
 gboolean dbus_plugin_modem_response(struct custom_data *ctx, UserRequest *ur, struct dbus_request_info *dbus_info, enum tcore_response_command command, unsigned int data_len, const void *data);
-gboolean dbus_plugin_modem_notification(struct custom_data *ctx, const char *plugin_name, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data);
+gboolean dbus_plugin_modem_notification(struct custom_data *ctx, CoreObject *source, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data);
+
+gboolean dbus_plugin_setup_gps_interface(TelephonyObjectSkeleton *object, struct custom_data *ctx);
+gboolean dbus_plugin_gps_response(struct custom_data *ctx, UserRequest *ur, struct dbus_request_info *dbus_info, enum tcore_response_command command, unsigned int data_len, const void *data);
+gboolean dbus_plugin_gps_notification(struct custom_data *ctx, CoreObject *source, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data);
+
+gboolean dbus_plugin_setup_oem_interface(TelephonyObjectSkeleton *object, struct custom_data *ctx);
+gboolean dbus_plugin_oem_response(struct custom_data *ctx, UserRequest *ur, struct dbus_request_info *dbus_info, enum tcore_response_command command, unsigned int data_len, const void *data);
+gboolean dbus_plugin_oem_notification(struct custom_data *ctx, CoreObject *source, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data);
+
+enum dbus_tapi_sim_slot_id get_sim_slot_id_by_cp_name(char *cp_name);
 
 #endif
old mode 100644 (file)
new mode 100755 (executable)
index 1d7d911..343d198
@@ -25,7 +25,6 @@
 #include <stdlib.h>
 #include <time.h>
 #include <glib.h>
-#include <glib-object.h>
 #include <gio/gio.h>
 
 #include <tcore.h>
@@ -40,6 +39,8 @@
 #include <co_sim.h>
 #include <co_ps.h>
 
+#include "sat_ui_support.h"
+
 #ifndef PLUGIN_VERSION
 #define PLUGIN_VERSION 1
 #endif
 static void add_modem(struct custom_data *ctx, TcorePlugin *p)
 {
        TelephonyObjectSkeleton *object;
-       char *plugin_name = NULL;
        char *path = NULL;
-       GSList *co_list = NULL;
+       GSList *co_list;
+       const char *cp_name;
 
-       plugin_name = tcore_plugin_ref_plugin_name(p);
-       if (!plugin_name)
+       dbg("Entry");
+
+       /* Get CP Name */
+       cp_name = tcore_server_get_cp_name_by_plugin(p);
+       if (cp_name == NULL) {
+               err("CP Name is NULL");
                return;
+       }
 
-       path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plugin_name);
-       dbg("path = [%s]", path);
+       path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
+       dbg("PATH: [%s]", path);
 
        object = g_hash_table_lookup(ctx->objects, path);
        if (object) {
-               dbg("dbus interface object already created. (object = %p)", object);
+               dbg("DBUS interface object already created (object: %p)", object);
                goto OUT;
        }
 
        object = telephony_object_skeleton_new(path);
-       dbg("new dbus object created. (object = %p)", object);
+       dbg("New DBUS object created (object: [%p])", object);
        g_hash_table_insert(ctx->objects, g_strdup(path), object);
 
        /* Add interfaces */
-       dbus_plugin_setup_modem_interface(object, ctx);
+       co_list = tcore_plugin_get_core_objects_bytype(p, CORE_OBJECT_TYPE_MODEM);
+       if (co_list) {
+               g_slist_free(co_list);
+               dbus_plugin_setup_modem_interface(object, ctx);
+       }
 
        co_list = tcore_plugin_get_core_objects_bytype(p, CORE_OBJECT_TYPE_CALL);
        if (co_list) {
@@ -122,105 +132,121 @@ static void add_modem(struct custom_data *ctx, TcorePlugin *p)
                dbus_plugin_setup_sim_interface(object, ctx);
        }
 
+       co_list = tcore_plugin_get_core_objects_bytype(p, CORE_OBJECT_TYPE_GPS);
+       if (co_list) {
+               g_slist_free(co_list);
+               dbus_plugin_setup_gps_interface(object, ctx);
+       }
+       dbus_plugin_setup_oem_interface(object, ctx);
+       /* Export the Object to Manager */
        g_dbus_object_manager_server_export (ctx->manager, G_DBUS_OBJECT_SKELETON (object));
 
+
 OUT:
-       if (path)
-               g_free(path);
+       /* Freeing memory */
+       g_free(path);
 }
 
 static void refresh_object(struct custom_data *ctx)
 {
-       GSList *plugins;
+       GSList *modem_plg_list;
+       TcorePlugin *modem_plg;
        GSList *cur;
-       GSList *co_list;
-       TcorePlugin *p;
 
        if (!ctx->manager) {
-               dbg("not ready..");
+               dbg("Telephony not ready...");
                return;
        }
 
-       plugins = tcore_server_ref_plugins(ctx->server);
-       if (!plugins)
-               return;
-
-       cur = plugins;
-       for (cur = plugins; cur; cur = cur->next) {
-               p = cur->data;
-               if (!p)
-                       continue;
-
-               co_list = tcore_plugin_get_core_objects_bytype(p, CORE_OBJECT_TYPE_MODEM);
-               if (!co_list)
-                       continue;
-
-               if (!tcore_object_get_hal(co_list->data)) {
-                       g_slist_free(co_list);
+       modem_plg_list = tcore_server_get_modem_plugin_list(ctx->server);
+       for (cur = modem_plg_list; cur; cur = cur->next) {
+               modem_plg = cur->data;
+               if (modem_plg == NULL) {
+                       dbg("No Modem Plug-in");
                        continue;
                }
 
-               g_slist_free(co_list);
-
-               add_modem(ctx, p);
+               /* Add modem */
+               add_modem(ctx, modem_plg);
        }
+       g_slist_free(modem_plg_list);
 }
 
 static TReturn send_response(Communicator *comm, UserRequest *ur, enum tcore_response_command command, unsigned int data_len, const void *data)
 {
        struct custom_data *ctx = NULL;
-       const struct tcore_user_info *ui;
+       struct dbus_request_info *dbus_info;
+       gboolean ret = FALSE;
 
        dbg("Response Command = [0x%x], data_len = %d", command, data_len);
 
+
        ctx = tcore_communicator_ref_user_data(comm);
        if (!ctx) {
                dbg("user_data is NULL");
-               return FALSE;
+               return TCORE_RETURN_EINVAL;
        }
 
-       ui = tcore_user_request_ref_user_info(ur);
+       dbus_info = (struct dbus_request_info *)tcore_user_request_ref_user_info(ur);
+       if (!dbus_info) {
+               dbg("dbus_info is NULL");
+               return TCORE_RETURN_EINVAL;
+       }
+
+       if (!data) {
+               g_dbus_method_invocation_return_error (dbus_info->invocation,
+                               G_DBUS_ERROR,
+                               G_DBUS_ERROR_FAILED,
+                               "Request failed");
+               return TCORE_RETURN_SUCCESS;
+       }
 
        switch (command & (TCORE_RESPONSE | 0x0FF00000)) {
                case TRESP_CALL:
-                       dbus_plugin_call_response(ctx, ur, ui->user_data, command, data_len, data);
+                       ret = dbus_plugin_call_response(ctx, ur, dbus_info, command, data_len, data);
                        break;
 
                case TRESP_SS:
-                       dbus_plugin_ss_response(ctx, ur, ui->user_data, command, data_len, data);
+                       ret = dbus_plugin_ss_response(ctx, ur, dbus_info, command, data_len, data);
                        break;
 
                case TRESP_PS:
                        break;
 
                case TRESP_SIM:
-                       dbus_plugin_sim_response(ctx, ur, ui->user_data, command, data_len, data);
+                       ret = dbus_plugin_sim_response(ctx, ur, dbus_info, command, data_len, data);
                        break;
 
                case TRESP_SAP:
-                       dbus_plugin_sap_response(ctx, ur, ui->user_data, command, data_len, data);
+                       ret = dbus_plugin_sap_response(ctx, ur, dbus_info, command, data_len, data);
                        break;
 
                case TRESP_PHONEBOOK:
-                       dbus_plugin_phonebook_response(ctx, ur, ui->user_data, command, data_len, data);
+                       ret = dbus_plugin_phonebook_response(ctx, ur, dbus_info, command, data_len, data);
                        break;
 
                case TRESP_MODEM:
-                       dbus_plugin_modem_response(ctx, ur, ui->user_data, command, data_len, data);
+                       ret = dbus_plugin_modem_response(ctx, ur, dbus_info, command, data_len, data);
                        break;
 
                case TRESP_SMS:
-                       dbus_plugin_sms_response(ctx, ur, ui->user_data, command, data_len, data);
+                       ret = dbus_plugin_sms_response(ctx, ur, dbus_info, command, data_len, data);
                        break;
 
                case TRESP_SAT:
-                       dbus_plugin_sat_response(ctx, ur, ui->user_data, command, data_len, data);
+                       ret = dbus_plugin_sat_response(ctx, ur, dbus_info, command, data_len, data);
                        break;
+
                case TRESP_CUSTOM:
+                       ret = dbus_plugin_oem_response(ctx, ur, dbus_info, command, data_len, data);
                        break;
 
                case TRESP_NETWORK:
-                       dbus_plugin_network_response(ctx, ur, ui->user_data, command, data_len, data);
+                       ret = dbus_plugin_network_response(ctx, ur, dbus_info, command, data_len, data);
+                       break;
+
+               case TRESP_GPS:
+                       ret = dbus_plugin_gps_response(ctx, ur, dbus_info, command, data_len, data);
                        break;
 
                default:
@@ -228,90 +254,183 @@ static TReturn send_response(Communicator *comm, UserRequest *ur, enum tcore_res
                        break;
        }
 
-       return FALSE;
+       if (ret == TRUE)
+               return TCORE_RETURN_SUCCESS;
+       else
+               return TCORE_RETURN_FAILURE;
 }
 
 static TReturn send_notification(Communicator *comm, CoreObject *source, enum tcore_notification_command command, unsigned int data_len, const void *data)
 {
        struct custom_data *ctx = NULL;
-       char *plugin_name;
-       char *path;
-       TelephonyObjectSkeleton *object;
-
-       dbg("notification !!! (command = 0x%x, data_len = %d)", command, data_len);
+       unsigned int noti = 0;
+       gboolean ret = FALSE;
 
        ctx = tcore_communicator_ref_user_data(comm);
-       if (!ctx) {
-               dbg("user_data is NULL");
-               return FALSE;
+       if (ctx == NULL) {
+               err("user_data is NULL");
+               return TCORE_RETURN_EINVAL;
        }
 
-       plugin_name = tcore_plugin_ref_plugin_name(tcore_object_ref_plugin(source));
-       if (plugin_name) {
-               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plugin_name);
+       noti = (command & (TCORE_NOTIFICATION | 0x0FF00000));
+
+       /*
+        * Notifications are classified into -
+        *      Server (System) notifications
+        *      Module notifications
+        */
+       if (noti == TNOTI_SERVER) {
+               dbg("Server (System) Notification");
+
+               switch (command) {
+               case TNOTI_SERVER_ADDED_MODEM_PLUGIN: {
+                       const char *cp_name;
+
+                       cp_name = tcore_server_get_cp_name_by_plugin((TcorePlugin*)data);
+                       dbg("Modem Plug-in (%s) is added... Exporting interfaces for the modem", cp_name);
+                       add_modem(ctx, (TcorePlugin*)data);
+
+                       ret = TRUE;
+                       break;
+               }
+
+               case TNOTI_SERVER_ADDED_MODEM_PLUGIN_COMPLETED: {
+                       Storage *strg;
+                       gboolean b_set;
+                       int *count;
+
+                       if (data == NULL) {
+                               err("data is NULL");
+                               break;
+                       }
+
+                       count = (int *)data;
+                       dbg("[%d] Modem plug-ins are added...", *count);
+
+                       strg = tcore_server_find_storage(ctx->server, "vconf");
+
+                       b_set = tcore_storage_set_int(strg, STORAGE_KEY_TELEPHONY_SIM_SLOT_COUNT, *count);
+                       if (b_set == FALSE) {
+                               err("Fail to set the sim slot count vconf");
+
+                               /* Reset STORAGE_KEY_TELEPHONY_READY */
+                               b_set = tcore_storage_set_bool(strg, STORAGE_KEY_TELEPHONY_READY, FALSE);
+                               warn("Reset TELEPHONY_READY!!!");
+                       } else {
+                               if (ctx->name_acquired == TRUE
+                                       && tcore_storage_get_bool(strg, STORAGE_KEY_TELEPHONY_READY) == FALSE) {
+                                       b_set = tcore_storage_set_bool(strg, STORAGE_KEY_TELEPHONY_READY, TRUE);
+                                       if (b_set == FALSE) {
+                                               err("Fail to set telephony ready");
+
+                                               /* Reset STORAGE_KEY_TELEPHONY_SIM_SLOT_COUNT */
+                                               b_set = tcore_storage_set_int(strg, STORAGE_KEY_TELEPHONY_SIM_SLOT_COUNT, -1);
+                                               warn("Reset STORAGE_KEY_TELEPHONY_SIM_SLOT_COUNT!!!");
+                                       } else {
+#ifdef ENABLE_KPI_LOGS
+                                               TIME_CHECK("Setting VCONFKEY_TELEPHONY_READY to TRUE");
+#else
+                                               msg("Setting VCONFKEY_TELEPHONY_READY to TRUE");
+#endif
+                                       }
+                               }
+                               dbg("Bus acquired...[%s]", (ctx->name_acquired)?"YES":"NO" );
+                       }
+                       ret = TRUE;
+                       break;
+               }
+
+               default:
+                       warn("Unsupported System notification: (0x%x)", command);
+                       break;
+               }
        }
        else {
-               path = g_strdup_printf("%s", MY_DBUS_PATH);
-       }
-       dbg("path = [%s]", path);
+               TelephonyObjectSkeleton *object;
+               const char *cp_name;
+               char *path;
+
+               cp_name = tcore_server_get_cp_name_by_plugin(tcore_object_ref_plugin(source));
+               if (cp_name == NULL) {
+                       err("CP name is NULL");
+                       return TCORE_RETURN_FAILURE;
+               }
 
-       object = g_hash_table_lookup(ctx->objects, path);
-       dbg("dbus inteface object = %p", object);
+               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
+
+               /* Look-up Hash table for Object */
+               object = g_hash_table_lookup(ctx->objects, path);
+
+               dbg("[%s]:(cmd[0x%x] data[%p] len[%d] obj[%p])",
+                       cp_name, command, data, data_len, object);
 
-       switch (command & (TCORE_NOTIFICATION | 0x0FF00000)) {
+               g_free(path);
+               if (object == NULL) {
+                       err("Object is NOT defined!!!");
+                       return TCORE_RETURN_FAILURE;
+               }
+
+               switch (noti) {
                case TNOTI_CALL:
-                       dbus_plugin_call_notification(ctx, plugin_name, object, command, data_len, data);
+                       ret = dbus_plugin_call_notification(ctx, source, object, command, data_len, data);
                        break;
 
                case TNOTI_SS:
-                       dbus_plugin_ss_notification(ctx, plugin_name, object, command, data_len, data);
+                       ret = dbus_plugin_ss_notification(ctx, source, object, command, data_len, data);
                        break;
 
-               case TNOTI_PS:
+               case TNOTI_PS:
+                       warn("PS Notification (0x%x)... Not handled!!!", noti);
                        break;
 
                case TNOTI_SIM:
-                       dbus_plugin_sim_notification(ctx, plugin_name, object, command, data_len, data);
+                       ret = dbus_plugin_sim_notification(ctx, source, object, command, data_len, data);
                        break;
 
                case TNOTI_SAP:
-                       dbus_plugin_sap_notification(ctx, plugin_name, object, command, data_len, data);
+                       ret = dbus_plugin_sap_notification(ctx, source, object, command, data_len, data);
                        break;
 
                case TNOTI_PHONEBOOK:
-                       dbus_plugin_phonebook_notification(ctx, plugin_name, object, command, data_len, data);
+                       ret = dbus_plugin_phonebook_notification(ctx, source, object, command, data_len, data);
                        break;
 
                case TNOTI_MODEM:
-                       dbus_plugin_modem_notification(ctx, plugin_name, object, command, data_len, data);
+                       ret = dbus_plugin_modem_notification(ctx, source, object, command, data_len, data);
                        break;
 
                case TNOTI_SMS:
-                       dbus_plugin_sms_notification(ctx, plugin_name, object, command, data_len, data);
+                       ret = dbus_plugin_sms_notification(ctx, source, object, command, data_len, data);
                        break;
 
                case TNOTI_SAT:
-                       dbus_plugin_sat_notification(ctx, plugin_name, object, command, data_len, data);
-                       break;
-               case TNOTI_CUSTOM:
+                       ret = dbus_plugin_sat_notification(ctx, source, object, command, data_len, data);
                        break;
 
                case TNOTI_NETWORK:
-                       dbus_plugin_network_notification(ctx, plugin_name, object, command, data_len, data);
+                       ret = dbus_plugin_network_notification(ctx, source, object, command, data_len, data);
                        break;
 
-               case TNOTI_SERVER:
-                       if (command == TNOTI_SERVER_RUN) {
-                               refresh_object(ctx);
-                       }
+               case TNOTI_GPS:
+                       ret = dbus_plugin_gps_notification(ctx, source, object, command, data_len, data);
                        break;
 
                default:
-                       warn("unknown command (0x%x)", command);
+                       if ((command & (TCORE_NOTIFICATION | 0x0F000000)) == (TNOTI_CUSTOM)) {
+                               dbg("Custom Notification: [0x%x]", command);
+                               ret = dbus_plugin_oem_notification(ctx, source, object, command, data_len, data);
+                       } else {
+                               warn("Unknown/Unhandled Notification: [0x%x]", command);
+                       }
+
                        break;
+               }
        }
 
-       return FALSE;
+       if (ret == TRUE)
+               return TCORE_RETURN_SUCCESS;
+       else
+               return TCORE_RETURN_FAILURE;
 }
 
 
@@ -321,91 +440,111 @@ on_manager_getmodems (TelephonyManager *mgr,
                gpointer                user_data)
 {
        struct custom_data *ctx = user_data;
-       GSList *plugins;
-       GSList *cur;
-       GSList *co_list;
-       int max_count = 0;
-       int count;
-       TcorePlugin *p;
+       GSList *cp_name_list;
        gchar **list;
+       const char *name = NULL;
+       int count;
+       dbg("Entry");
 
-       plugins = tcore_server_ref_plugins(ctx->server);
-       if (!plugins) {
-               telephony_manager_complete_get_modems(mgr, invocation, NULL);
+       cp_name_list = tcore_server_get_cp_name_list(ctx->server);
+       if (cp_name_list == NULL) {
+               telephony_manager_complete_get_modems(mgr, invocation, &name);
+               return TRUE;
+       }
+
+       count = g_slist_length(cp_name_list);
+       list = g_try_malloc0(sizeof(gchar *) * (count+1));
+       if (list == NULL) {
+               err("Memory allocation failed!!");
+               telephony_manager_complete_get_modems(mgr, invocation, &name);
+               g_slist_free_full(cp_name_list, g_free);
                return TRUE;
        }
 
-       max_count = g_slist_length(plugins);
-       list = calloc(sizeof(gchar *) * max_count, 1);
        count = 0;
+       for ( ; cp_name_list ; cp_name_list = cp_name_list->next) {
+               name = cp_name_list->data;
+               list[count] = g_strdup(name);
+               dbg("list[%d]: %s", count, list[count]);
+               count++;
+       }
 
-       cur = plugins;
-       for (cur = plugins; cur; cur = cur->next) {
-               p = cur->data;
-               if (!p)
-                       continue;
+       telephony_manager_complete_get_modems(mgr, invocation, (const gchar **)list);
 
-               co_list = tcore_plugin_get_core_objects_bytype(p, CORE_OBJECT_TYPE_MODEM);
-               if (!co_list)
-                       continue;
+       /* Free memory */
+       for (;count >= 0; count--)
+               g_free(list[count]);
 
-               if (!tcore_object_get_hal(co_list->data)) {
-                       g_slist_free(co_list);
-                       continue;
-               }
-               g_slist_free(co_list);
+       g_free(list);
 
-               list[count] = g_strdup(tcore_plugin_get_description(p)->name);
-               count++;
-       }
+       /* Freeing the received list of CP names */
+       g_slist_free_full(cp_name_list, g_free);
 
-       telephony_manager_complete_get_modems(mgr, invocation, (const gchar **)list);
+       return TRUE;
+}
 
-       for (;count >= 0; count--) {
-               if (list[count]) {
-                       g_free(list[count]);
+static void on_name_lost(GDBusConnection *conn, const gchar *name, gpointer user_data)
+{
+       info("Lost the name %s on the session bus\n", name);
+}
+
+static void on_name_acquired(GDBusConnection *conn, const gchar *name, gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       Storage *strg;
+       gboolean b_set;
+       int count;
+
+       ctx->name_acquired = TRUE; /* Setting Bus acquried flag after Bus name is acquired */
+
+       info("Acquired the name %s on the session bus", name);
+       strg = tcore_server_find_storage(ctx->server, "vconf");
+
+       count = tcore_storage_get_int(strg, STORAGE_KEY_TELEPHONY_SIM_SLOT_COUNT);
+       if (count < 0) {
+               err("SIM slot count not yet set");
+       } else {
+               if (tcore_storage_get_bool(strg, STORAGE_KEY_TELEPHONY_READY) == FALSE) {
+                       b_set = tcore_storage_set_bool(strg, STORAGE_KEY_TELEPHONY_READY, TRUE);
+                       if (b_set == FALSE) {
+                               err("Fail to set telephony ready");
+
+                               /* Reset STORAGE_KEY_TELEPHONY_SIM_SLOT_COUNT */
+                               b_set = tcore_storage_set_int(strg, STORAGE_KEY_TELEPHONY_SIM_SLOT_COUNT, -1);
+                               warn("Reset STORAGE_KEY_TELEPHONY_SIM_SLOT_COUNT!!!");
+                       } else {
+#ifdef ENABLE_KPI_LOGS
+                               TIME_CHECK("Setting VCONFKEY_TELEPHONY_READY to TRUE");
+#else
+                               msg("Setting VCONFKEY_TELEPHONY_READY to TRUE");
+#endif
+                       }
                }
        }
-       free(list);
-
-       return TRUE;
 }
 
 static void on_bus_acquired(GDBusConnection *conn, const gchar *name, gpointer user_data)
 {
-       gboolean rv = FALSE;
-       gpointer handle = NULL;
-       static Storage *strg;
        struct custom_data *ctx = user_data;
-       TelephonyManager *mgr;
 
        info("dbus registered");
 
-       ctx->manager = g_dbus_object_manager_server_new (MY_DBUS_PATH);
-
        refresh_object(ctx);
 
        /* Add interface to default object path */
-       mgr = telephony_manager_skeleton_new();
-       g_signal_connect (mgr,
+       ctx->mgr = telephony_manager_skeleton_new();
+       g_signal_connect (ctx->mgr,
                        "handle-get-modems",
                        G_CALLBACK (on_manager_getmodems),
                        ctx); /* user_data */
 
-       g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(mgr), conn, MY_DBUS_PATH, NULL);
+       g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(ctx->mgr), conn, MY_DBUS_PATH, NULL);
 
        g_dbus_object_manager_server_set_connection (ctx->manager, conn);
 
-       //set telephony ready registry
-       strg = tcore_server_find_storage(ctx->server, "vconf");
-       handle = tcore_storage_create_handle(strg, "vconf");
+       dbg("Aquire DBUS - COMPLETE");
 
-       rv = tcore_storage_set_bool(strg, STORAGE_KEY_TELEPHONY_READY, TRUE);
-       if(!rv){
-               dbg("fail to set the telephony status to registry");
-       }
 
-       dbg("done to acquire the dbus");
 }
 
 struct tcore_communitor_operations ops = {
@@ -431,7 +570,7 @@ static gboolean on_init(TcorePlugin *p)
 
        dbg("i'm init!");
 
-       data = calloc(sizeof(struct custom_data), 1);
+       data = calloc(1, sizeof(struct custom_data));
        if (!data) {
                return FALSE;
        }
@@ -445,7 +584,7 @@ static gboolean on_init(TcorePlugin *p)
        data->server = tcore_plugin_ref_server(p);
 
        data->objects = g_hash_table_new(g_str_hash, g_str_equal);
-       data->cached_sat_main_menu = NULL;
+       data->cached_data = NULL;
 
        dbg("data = %p", data);
 
@@ -453,24 +592,33 @@ static gboolean on_init(TcorePlugin *p)
                        MY_DBUS_SERVICE,
                        G_BUS_NAME_OWNER_FLAGS_REPLACE,
                        on_bus_acquired,
-                       NULL, NULL,
+                       on_name_acquired, on_name_lost,
                        data,
                        NULL);
 
+       data->owner_id = id;
+       dbg("owner id=[%d]", data->owner_id);
+
+       data->manager = g_dbus_object_manager_server_new (MY_DBUS_PATH);
+       refresh_object(data);
+
        return TRUE;
 }
 
 static void on_unload(TcorePlugin *p)
 {
-       struct custom_data *data;
-       Communicator *comm;
+       struct custom_data *data = 0;
+       Communicator *comm = 0;
+       Server *s = tcore_plugin_ref_server(p);
+       GSList *list = NULL;
+       struct cached_data *object = NULL;
 
        if (!p)
                return;
 
        dbg("i'm unload");
 
-       comm = tcore_server_find_communicator(tcore_plugin_ref_server(p), "dbus");
+       comm = tcore_server_find_communicator(s, "dbus");
        if (!comm)
                return;
 
@@ -478,12 +626,29 @@ static void on_unload(TcorePlugin *p)
        if (!data)
                return;
 
+       if(data->owner_id > 0) {
+               g_bus_unown_name(data->owner_id);
+       }
+
        g_hash_table_destroy(data->objects);
 
+       for (list = data->cached_data; list; list = list->next) {
+               object = (struct cached_data *)list->data;
+               if (object == NULL)
+                       continue;
+
+               g_variant_unref(object->cached_sat_main_menu);
+               g_free(object->cp_name);
+               g_free(object);
+       }
+       g_slist_free(data->cached_data);
+
        free(data);
+
+       tcore_server_remove_communicator(s, comm);
 }
 
-struct tcore_plugin_define_desc plugin_define_desc =
+EXPORT_API struct tcore_plugin_define_desc plugin_define_desc =
 {
        .name = "NEW_DBUS_COMMUNICATOR",
        .priority = TCORE_PLUGIN_PRIORITY_HIGH,
diff --git a/src/gps.c b/src/gps.c
new file mode 100755 (executable)
index 0000000..8d7bcc7
--- /dev/null
+++ b/src/gps.c
@@ -0,0 +1,545 @@
+#include <stdio.h>
+#include <string.h>
+#include <pthread.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <time.h>
+#include <glib.h>
+#include <gio/gio.h>
+
+#include <tcore.h>
+#include <server.h>
+#include <plugin.h>
+#include <hal.h>
+#include <communicator.h>
+#include <storage.h>
+#include <queue.h>
+#include <user_request.h>
+#include <co_gps.h>
+#include <co_sim.h>
+#include <co_ps.h>
+
+#include "generated-code.h"
+#include "common.h"
+
+static gboolean
+on_gps_set_frequency_aiding (TelephonyGps *gps,
+               GDBusMethodInvocation *invocation,
+               guchar data,
+               gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur = NULL;
+       TReturn ret;
+
+       if (!check_access_control (invocation, AC_GPS, "w"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, gps, invocation);
+       dbg("data=%d",data);
+
+       tcore_user_request_set_data(ur, sizeof(data), (const char*)&data);
+       tcore_user_request_set_command(ur, TREQ_GPS_SET_FREQUENCY_AIDING);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+
+static gboolean
+on_gps_confirm_measure_pos (TelephonyGps *gps,
+               GDBusMethodInvocation *invocation,
+               const gchar *data,
+               gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur = NULL;
+       TReturn ret;
+       gboolean result = TRUE;
+       guchar *decoded_data = NULL;
+       gsize length;
+
+       if (!check_access_control (invocation, AC_GPS, "w"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, gps, invocation);
+
+       decoded_data = g_base64_decode(data, &length);
+       dbg("decoded length=%d", length);
+       tcore_user_request_set_data(ur, length, decoded_data);
+       tcore_user_request_set_command(ur, TREQ_GPS_CONFIRM_MEASURE_POS);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
+               g_free(decoded_data);
+               return TRUE;
+       }
+
+       telephony_gps_complete_confirm_measure_pos(gps, invocation, result);
+       g_free(decoded_data);
+
+       return TRUE;
+}
+
+static gboolean
+on_enable_smart_assistant(TelephonyGps *gps,
+               GDBusMethodInvocation *invocation,
+               gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur = NULL;
+       TReturn ret;
+
+       if (!check_access_control (invocation, AC_GPS, "w"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, gps, invocation);
+
+       tcore_user_request_set_command(ur, TREQ_ENABLE_SMART_ASSISTANT);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+
+static gboolean
+on_disable_smart_assistant(TelephonyGps *gps,
+               GDBusMethodInvocation *invocation,
+               gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur = NULL;
+       TReturn ret;
+
+       if (!check_access_control (invocation, AC_GPS, "w"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, gps, invocation);
+
+       tcore_user_request_set_command(ur, TREQ_DISABLE_SMART_ASSISTANT);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+
+static gboolean
+on_sync_smart_assistant_area_list(TelephonyGps *gps,
+               GDBusMethodInvocation *invocation,
+               gint count,
+               GVariant *gv,
+               gpointer user_data)
+{
+       struct tel_smart_assistant_area_list req;
+       struct custom_data *ctx = user_data;
+       UserRequest *ur = NULL;
+       TReturn ret;
+
+       GVariantIter *iter = NULL;
+       GVariant *b = NULL;
+       int i = 0;
+       gint item1, item2;
+       dbg("enter count=%d", count);
+
+       if (!check_access_control (invocation, AC_GPS, "w"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, gps, invocation);
+       memset(&req,0,sizeof(struct tel_smart_assistant_area_list));
+
+       dbg("count=%d", count);
+       if (count > SMART_ASSISTANT_AREA_LIST_MAX)
+               count = SMART_ASSISTANT_AREA_LIST_MAX;
+
+       req.count = count;
+
+       g_variant_get (gv, "v", &b);
+       g_variant_unref (gv);
+
+       g_variant_get (b, "a(ii)", &iter);
+       while(g_variant_iter_loop(iter,"(ii)",&item1, &item2)){
+               req.area[i].index = item1;
+               req.area[i].mode_state = item2;
+               i++;
+               if (i == count)
+                       break;
+       }
+       g_variant_iter_free(iter);
+
+       tcore_user_request_set_data(ur, sizeof(struct tel_smart_assistant_area_list), &req);
+       tcore_user_request_set_command(ur, TREQ_SYNC_SMART_ASSISTANT_AREA_LIST);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+
+static gboolean
+on_del_smart_assistant_area_list(TelephonyGps *gps,
+               GDBusMethodInvocation *invocation,
+               gint count,
+               GVariant *gv,
+               gpointer user_data)
+{
+       struct tel_smart_assistant_area_list req;
+       struct custom_data *ctx = user_data;
+       UserRequest *ur = NULL;
+       TReturn ret;
+
+       GVariantIter *iter = NULL;
+       GVariant *b = NULL;
+       int i = 0;
+       gint item1, item2;
+
+       if (!check_access_control (invocation, AC_GPS, "w"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, gps, invocation);
+       memset(&req,0,sizeof(struct tel_smart_assistant_area_list));
+
+       dbg("count=%d", count);
+       if (count > SMART_ASSISTANT_AREA_LIST_MAX)
+               count = SMART_ASSISTANT_AREA_LIST_MAX;
+
+       req.count = count;
+
+       g_variant_get (gv, "v", &b);
+       g_variant_unref (gv);
+
+       g_variant_get (b, "a(ii)", &iter);
+       while(g_variant_iter_loop(iter,"(ii)",&item1, &item2)){
+               req.area[i].index = item1;
+               req.area[i].mode_state = item2;
+               i++;
+               if (i == count)
+                       break;
+       }
+       g_variant_iter_free(iter);
+
+       tcore_user_request_set_data(ur, sizeof(struct tel_smart_assistant_area_list), &req);
+       tcore_user_request_set_command(ur, TREQ_DEL_SMART_ASSISTANT_AREA_LIST);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+
+static gboolean
+on_add_smart_assistant_area(TelephonyGps *gps,
+               GDBusMethodInvocation *invocation,
+               gint fn_index,
+               gint mode_state,
+               gpointer user_data)
+{
+       struct tel_smart_assistant_area req;
+       struct custom_data *ctx = user_data;
+       UserRequest *ur = NULL;
+       TReturn ret;
+
+       if (!check_access_control (invocation, AC_GPS, "w"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, gps, invocation);
+       req.index = fn_index;
+       req.mode_state = mode_state;
+       dbg("index=%d, mode_state=%d",req.index, req.mode_state);
+
+       tcore_user_request_set_data(ur, sizeof(struct tel_smart_assistant_area), &req);
+       tcore_user_request_set_command(ur, TREQ_ADD_SMART_ASSISTANT_AREA);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+static gboolean
+on_modify_smart_assistant_area(TelephonyGps *gps,
+               GDBusMethodInvocation *invocation,
+               gint fn_index,
+               gint mode_state,
+               gpointer user_data)
+{
+       struct tel_smart_assistant_area req;
+       struct custom_data *ctx = user_data;
+       UserRequest *ur = NULL;
+       TReturn ret;
+
+       if (!check_access_control (invocation, AC_GPS, "w"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, gps, invocation);
+       req.index = fn_index;
+       req.mode_state = mode_state;
+       dbg("index=%d, mode_state=%d",req.index, req.mode_state);
+
+       tcore_user_request_set_data(ur, sizeof(struct tel_smart_assistant_area), &req);
+       tcore_user_request_set_command(ur, TREQ_MODIFY_SMART_ASSISTANT_AREA);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+
+static gboolean
+on_set_smart_assistant_info(TelephonyGps *gps,
+               GDBusMethodInvocation *invocation,
+               gint fn_index,
+               gint lpp_state,
+               gpointer user_data)
+{
+       struct treq_set_smart_assistant_info req;
+       struct custom_data *ctx = user_data;
+       UserRequest *ur = NULL;
+       TReturn ret;
+
+       if (!check_access_control (invocation, AC_GPS, "w"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, gps, invocation);
+       req.index = fn_index;
+       req.lpp_state = lpp_state;
+       dbg("index=%d, lpp_state=%d",req.index, req.lpp_state);
+
+       tcore_user_request_set_data(ur, sizeof(struct treq_set_smart_assistant_info), &req);
+       tcore_user_request_set_command(ur, TREQ_SET_SMART_ASSISTANT_INFO);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+
+gboolean dbus_plugin_setup_gps_interface(TelephonyObjectSkeleton *object, struct custom_data *ctx)
+{
+       TelephonyGps *gps;
+
+       gps = telephony_gps_skeleton_new();
+       telephony_object_skeleton_set_gps(object, gps);
+
+       g_object_unref(gps);
+
+       dbg("gps = %p", gps);
+
+       g_signal_connect (gps,
+                       "handle-set-frequency-aiding",
+                       G_CALLBACK (on_gps_set_frequency_aiding),
+                       ctx);
+
+       g_signal_connect (gps,
+                       "handle-confirm-measure-pos",
+                       G_CALLBACK (on_gps_confirm_measure_pos),
+                       ctx);
+
+       g_signal_connect (gps,
+                       "handle-enable-smart-assistant",
+                       G_CALLBACK (on_enable_smart_assistant),
+                       ctx);
+
+       g_signal_connect (gps,
+                       "handle-disable-smart-assistant",
+                       G_CALLBACK (on_disable_smart_assistant),
+                       ctx);
+
+       g_signal_connect (gps,
+                       "handle-sync-smart-assistant-area-list",
+                       G_CALLBACK (on_sync_smart_assistant_area_list),
+                       ctx);
+
+       g_signal_connect (gps,
+                       "handle-del-smart-assistant-area-list",
+                       G_CALLBACK (on_del_smart_assistant_area_list),
+                       ctx);
+
+       g_signal_connect (gps,
+                       "handle-add-smart-assistant-area",
+                       G_CALLBACK (on_add_smart_assistant_area),
+                       ctx);
+
+       g_signal_connect (gps,
+                       "handle-modify-smart-assistant-area",
+                       G_CALLBACK (on_modify_smart_assistant_area),
+                       ctx);
+
+       g_signal_connect (gps,
+                       "handle-set-smart-assistant-info",
+                       G_CALLBACK (on_set_smart_assistant_info),
+                       ctx);
+
+       return TRUE;
+}
+
+gboolean dbus_plugin_gps_response(struct custom_data *ctx, UserRequest *ur, struct dbus_request_info *dbus_info, enum tcore_response_command command, unsigned int data_len, const void *data)
+{
+       const struct tresp_gps_set_frequency_aiding *resp_gps_frequency_aiding = data;
+       const struct tresp_smart_assistant_result *resp_smart_assistant_result = data;
+
+       GSList *co_list;
+       CoreObject *co_gps;
+       char *modem_name = NULL;
+       TcorePlugin *p = NULL;
+
+       modem_name = tcore_user_request_get_modem_name(ur);
+       if (!modem_name)
+               return FALSE;
+
+       p = tcore_server_find_plugin(ctx->server, modem_name);
+       free(modem_name);
+       if (!p)
+               return FALSE;
+
+       co_list = tcore_plugin_get_core_objects_bytype(p, CORE_OBJECT_TYPE_GPS);
+       if (!co_list) {
+               return FALSE;
+       }
+
+       co_gps = (CoreObject *)co_list->data;
+       g_slist_free(co_list);
+
+       if (!co_gps) {
+               return FALSE;
+       }
+
+       switch (command) {
+               case TRESP_GPS_SET_FREQUENCY_AIDING:
+                       dbg("TRESP_GPS_SET_FREQUENCY_AIDING result=%d", resp_gps_frequency_aiding->result);
+                       telephony_gps_complete_set_frequency_aiding(dbus_info->interface_object, dbus_info->invocation, resp_gps_frequency_aiding->result);
+                       break;
+
+               case TRESP_ENABLE_SMART_ASSISTANT:
+                       dbg("TRESP_ENABLE_SMART_ASSISTANT result=%d", resp_smart_assistant_result->result);
+                       telephony_gps_complete_enable_smart_assistant(dbus_info->interface_object, dbus_info->invocation, resp_smart_assistant_result->result);
+                       break;
+
+               case TRESP_DISABLE_SMART_ASSISTANT:
+                       dbg("TRESP_ENABLE_SMART_ASSISTANT result=%d", resp_smart_assistant_result->result);
+                       telephony_gps_complete_disable_smart_assistant(dbus_info->interface_object, dbus_info->invocation, resp_smart_assistant_result->result);
+                       break;
+
+               case TRESP_SYNC_SMART_ASSISTANT_AREA_LIST:
+                       dbg("TRESP_SYNC_SMART_ASSISTANT_AREA_LIST result=%d", resp_smart_assistant_result->result);
+                       telephony_gps_complete_sync_smart_assistant_area_list(dbus_info->interface_object, dbus_info->invocation, resp_smart_assistant_result->result);
+                       break;
+
+               case TRESP_DEL_SMART_ASSISTANT_AREA_LIST:
+                       dbg("TRESP_DEL_SMART_ASSISTANT_AREA_LIST result=%d", resp_smart_assistant_result->result);
+                       telephony_gps_complete_del_smart_assistant_area_list(dbus_info->interface_object, dbus_info->invocation, resp_smart_assistant_result->result);
+                       break;
+
+               case TRESP_ADD_SMART_ASSISTANT_AREA:
+                       dbg("TRESP_ADD_SMART_ASSISTANT_AREA result=%d", resp_smart_assistant_result->result);
+                       telephony_gps_complete_add_smart_assistant_area(dbus_info->interface_object, dbus_info->invocation, resp_smart_assistant_result->result);
+                       break;
+
+               case TRESP_MODIFY_SMART_ASSISTANT_AREA:
+                       dbg("TRESP_MODIFY_SMART_ASSISTANT_AREA result=%d", resp_smart_assistant_result->result);
+                       telephony_gps_complete_modify_smart_assistant_area(dbus_info->interface_object, dbus_info->invocation, resp_smart_assistant_result->result);
+                       break;
+
+               case TRESP_SET_SMART_ASSISTANT_INFO:
+                       dbg("TRESP_SET_SMART_ASSISTANT_INFO result=%d", resp_smart_assistant_result->result);
+                       telephony_gps_complete_set_smart_assistant_info(dbus_info->interface_object, dbus_info->invocation, resp_smart_assistant_result->result);
+                       break;
+
+               default:
+                       dbg("not handled cmd[0x%x]", command);
+                       break;
+       }
+
+       return TRUE;
+}
+
+gboolean dbus_plugin_gps_notification(struct custom_data *ctx, CoreObject *source, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data)
+{
+       TelephonyGps *gps;
+
+       if (!object) {
+               dbg("object is NULL");
+               return FALSE;
+       }
+       dbg("Notification!!! Command: [0x%x] CP Name: [%s]",
+                               command, tcore_server_get_cp_name_by_plugin(tcore_object_ref_plugin(source)));
+
+       gps = telephony_object_peek_gps(TELEPHONY_OBJECT(object));
+       switch (command) {
+               case TNOTI_GPS_ASSIST_DATA:
+               {
+                       gchar *encoded_data = NULL;
+                       dbg("gps(%p) TNOTI_GPS_ASSIST_DATA. data=%p, data_len=%d", gps, data, data_len);
+                       encoded_data = g_base64_encode((const guchar*)data, data_len);
+                       telephony_gps_emit_assist_data(gps, encoded_data);
+                       g_free(encoded_data);
+               }
+                       break;
+
+               case TNOTI_GPS_MEASURE_POSITION:
+               {
+                       gchar *encoded_data = NULL;
+                       dbg("gps(%p) TNOTI_GPS_MEASURE_POSITION. data=%p, data_len=%d", gps, data, data_len);
+                       encoded_data = g_base64_encode((const guchar*)data, data_len);
+                       telephony_gps_emit_measure_position(gps, encoded_data);
+                       g_free(encoded_data);
+               }
+                       break;
+
+               case TNOTI_GPS_RESET_ASSIST_DATA:
+                       dbg("gps(%p) TNOTI_GPS_RESET_ASSIST_DATA", gps);
+                       telephony_gps_emit_reset_assist_data(gps);
+                       break;
+
+               case TNOTI_GPS_FREQUENCY_AIDING_DATA:
+               {
+                       gchar *encoded_data = NULL;
+                       dbg("gps(%p) TNOTI_GPS_FREQUENCY_AIDING_DATA. data=%p, data_len=%d", gps, data, data_len);
+                       encoded_data = g_base64_encode((const guchar*)data, data_len);
+                       telephony_gps_emit_frequency_aiding(gps, encoded_data);
+                       g_free(encoded_data);
+               }
+                       break;
+
+               case TNOTI_SMART_ASSISTANT_AREA_STATUS:
+               {
+                       const struct tnoti_smart_assistant_area_status *noti = data;
+                       dbg("gps(%p) TNOTI_SMART_ASSISTANT_AREA_STATUS", gps);
+                       telephony_gps_emit_area_status(gps, noti->area_status, noti->index);
+               }
+                       break;
+
+               case TNOTI_SMART_ASSISTANT_SYNC_STATUS:
+               {
+                       const struct tnoti_smart_assistant_sync_status *noti = data;
+                       dbg("gps(%p) TNOTI_SMART_ASSISTANT_SYNC_STATUS", gps);
+                       telephony_gps_emit_sync_status(gps, noti->init_status, noti->init_fail_cause);
+               }
+                       break;
+
+               default:
+                       dbg("not handled cmd[0x%x]", command);
+                       break;
+       }
+
+       return TRUE;
+}
+
index 0e190d4..c6a3e0e 100644 (file)
@@ -1,3 +1,23 @@
+/*
+ * tel-plugin-dbus-tapi
+ *
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Ja-young Gu <jygu@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include <stdio.h>
 #include <string.h>
 #include <pthread.h>
@@ -5,7 +25,6 @@
 #include <stdlib.h>
 #include <time.h>
 #include <glib.h>
-#include <glib-object.h>
 #include <gio/gio.h>
 
 #include <tcore.h>
 #include "generated-code.h"
 #include "common.h"
 
+
 static gboolean
-on_modem_set_power (TelephonyModem *modem,
-               GDBusMethodInvocation *invocation,
-               gint mode,
-               gpointer user_data)
+on_modem_set_power (TelephonyModem *modem, GDBusMethodInvocation *invocation,
+       gint mode, gpointer user_data)
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       enum tcore_request_command command;
        TReturn ret = TCORE_RETURN_SUCCESS;
 
+       if (!check_access_control (invocation, AC_MODEM, "x"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, modem, invocation);
-       tcore_user_request_set_data(ur, 0, NULL);
 
        switch (mode) {
-               case 0:
-                       tcore_user_request_set_command(ur, TREQ_MODEM_POWER_OFF);
-                       break;
-               case 1:
-                       tcore_user_request_set_command(ur, TREQ_MODEM_POWER_ON);
-                       break;
-               case 2:
-                       tcore_user_request_set_command(ur, TREQ_MODEM_POWER_RESET);
-                       break;
-               default:
-                       ret = TCORE_RETURN_EINVAL;
-                       goto ERR;
-                       break;
+       case MODEM_STATE_ONLINE:
+               command = TREQ_MODEM_POWER_ON;
+       break;
+       case MODEM_STATE_OFFLINE:
+               command = TREQ_MODEM_POWER_OFF;
+       break;
+       case MODEM_STATE_RESET:
+               command = TREQ_MODEM_POWER_RESET;
+       break;
+       case MODEM_STATE_LOW:
+               command = TREQ_MODEM_POWER_LOW;
+       break;
+       default:
+               ret = TCORE_RETURN_EINVAL;
+               goto ERR;
        }
 
+       tcore_user_request_set_command(ur, command);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS)
                goto ERR;
@@ -57,30 +81,56 @@ on_modem_set_power (TelephonyModem *modem,
        return TRUE;
 
 ERR:
-       telephony_modem_complete_set_power(modem, invocation, ret);
+       FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+       tcore_user_request_unref(ur);
 
        return TRUE;
 }
 
 static gboolean
-on_modem_set_flight_mode (TelephonyModem *modem,
-               GDBusMethodInvocation *invocation,
-               gboolean enable,
-               gpointer user_data)
+on_modem_set_flight_mode (TelephonyModem *modem, GDBusMethodInvocation *invocation,
+       gboolean enable, gpointer user_data)
 {
        struct treq_modem_set_flightmode data;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_MODEM, "w"))
+               return TRUE;
+
        data.enable = enable;
 
        ur = MAKE_UR(ctx, modem, invocation);
-       tcore_user_request_set_data(ur, sizeof(struct treq_modem_set_flightmode), &data);
-       tcore_user_request_set_command(ur, TREQ_MODEM_SET_FLIGHTMODE);
+       tcore_user_request_set_data (ur, sizeof(struct treq_modem_set_flightmode), &data);
+       tcore_user_request_set_command (ur, TREQ_MODEM_SET_FLIGHTMODE);
+
+       ret = tcore_communicator_dispatch_request (ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref (ur);
+       }
+
+       return TRUE;
+}
+
+static gboolean
+on_modem_get_flight_mode (TelephonyModem *modem, GDBusMethodInvocation *invocation,
+       gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur = NULL;
+       TReturn ret;
+
+       if (!check_access_control (invocation, AC_MODEM, "r"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, modem, invocation);
+       tcore_user_request_set_data(ur, 0, NULL);
+       tcore_user_request_set_command(ur, TREQ_MODEM_GET_FLIGHTMODE);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_modem_complete_set_flight_mode(modem, invocation, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -88,21 +138,21 @@ on_modem_set_flight_mode (TelephonyModem *modem,
 }
 
 static gboolean
-on_modem_get_version (TelephonyModem *modem,
-               GDBusMethodInvocation *invocation,
-               gpointer user_data)
+on_modem_get_version (TelephonyModem *modem, GDBusMethodInvocation *invocation,
+       gpointer user_data)
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_MODEM, "r"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, modem, invocation);
        tcore_user_request_set_command(ur, TREQ_MODEM_GET_VERSION);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_modem_complete_get_version(modem, invocation,
-                               ret,
-                               NULL, NULL, NULL, NULL);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -110,19 +160,21 @@ on_modem_get_version (TelephonyModem *modem,
 }
 
 static gboolean
-on_modem_get_serial_number (TelephonyModem *modem,
-               GDBusMethodInvocation *invocation,
-               gpointer user_data)
+on_modem_get_serial_number (TelephonyModem *modem, GDBusMethodInvocation *invocation,
+       gpointer user_data)
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_MODEM, "r"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, modem, invocation);
        tcore_user_request_set_command(ur, TREQ_MODEM_GET_SN);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_modem_complete_get_serial_number(modem, invocation, ret, NULL);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -130,19 +182,21 @@ on_modem_get_serial_number (TelephonyModem *modem,
 }
 
 static gboolean
-on_modem_get_imei (TelephonyModem *modem,
-               GDBusMethodInvocation *invocation,
-               gpointer user_data)
+on_modem_get_imei (TelephonyModem *modem, GDBusMethodInvocation *invocation,
+       gpointer user_data)
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_MODEM, "r"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, modem, invocation);
        tcore_user_request_set_command(ur, TREQ_MODEM_GET_IMEI);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_modem_complete_get_imei(modem, invocation, ret, NULL);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -150,13 +204,16 @@ on_modem_get_imei (TelephonyModem *modem,
 }
 
 static gboolean on_modem_set_dun_pin_ctrl (TelephonyModem *modem, GDBusMethodInvocation *invocation,
-               gint arg_signal, gboolean arg_status, gpointer user_data)
+       gint arg_signal, gboolean arg_status, gpointer user_data)
 {
        struct treq_modem_set_dun_pin_control data;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_MODEM, "x"))
+               return TRUE;
+
        data.signal = arg_signal;
        data.status = arg_status;
 
@@ -165,7 +222,7 @@ static gboolean on_modem_set_dun_pin_ctrl (TelephonyModem *modem, GDBusMethodInv
        tcore_user_request_set_command(ur, TREQ_MODEM_SET_DUN_PIN_CONTROL);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_modem_complete_set_dun_pin_ctrl(modem, invocation, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -180,6 +237,8 @@ gboolean dbus_plugin_setup_modem_interface(TelephonyObjectSkeleton *object, stru
        telephony_object_skeleton_set_modem(object, modem);
        g_object_unref(modem);
 
+       dbg("modem: [%p]", modem);
+
        g_signal_connect (modem,
                        "handle-set-power",
                        G_CALLBACK (on_modem_set_power),
@@ -191,6 +250,11 @@ gboolean dbus_plugin_setup_modem_interface(TelephonyObjectSkeleton *object, stru
                        ctx);
 
        g_signal_connect (modem,
+                       "handle-get-flight-mode",
+                       G_CALLBACK (on_modem_get_flight_mode),
+                       ctx);
+
+       g_signal_connect (modem,
                        "handle-get-version",
                        G_CALLBACK (on_modem_get_version),
                        ctx);
@@ -210,108 +274,191 @@ gboolean dbus_plugin_setup_modem_interface(TelephonyObjectSkeleton *object, stru
                        G_CALLBACK (on_modem_set_dun_pin_ctrl),
                        ctx);
 
+       telephony_modem_set_power(modem, MODEM_STATE_UNKNOWN);
 
        return TRUE;
 }
 
-gboolean dbus_plugin_modem_response(struct custom_data *ctx, UserRequest *ur, struct dbus_request_info *dbus_info, enum tcore_response_command command, unsigned int data_len, const void *data)
+gboolean dbus_plugin_modem_response(struct custom_data *ctx, UserRequest *ur,
+       struct dbus_request_info *dbus_info, enum tcore_response_command command,
+       unsigned int data_len, const void *data)
 {
-       const struct tresp_modem_set_flightmode *resp_set_flight_mode = data;
-       const struct tresp_modem_set_dun_pin_control *resp_dun_pin_ctrl = data;
-       const struct tresp_modem_get_imei *resp_get_imei = data;
-       const struct tresp_modem_get_sn *resp_get_sn = data;
-       const struct tresp_modem_get_version *resp_get_version = data;
+       dbg("Response!!! Command: [0x%x] CP Name: [%s]",
+               command, GET_CP_NAME(dbus_info->invocation));
 
        switch (command) {
-               case TRESP_MODEM_SET_FLIGHTMODE:
-                       dbg("receive TRESP_MODEM_SET_FLIGHTMODE");
-                       dbg("resp->result = %d", resp_set_flight_mode->result);
-                       telephony_modem_complete_set_flight_mode(dbus_info->interface_object, dbus_info->invocation, resp_set_flight_mode->result);
-                       break;
+       case TRESP_MODEM_SET_FLIGHTMODE: {
+               const struct tresp_modem_set_flightmode *resp_set_flight_mode = data;
+               int info_set_flight_mode = 3;   /* TAPI_POWER_FLIGHT_MODE_RESP_FAIL */
+
+               dbg("TRESP_MODEM_SET_FLIGHTMODE - Result: [%s]",
+                       (resp_set_flight_mode->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
+
+               if (resp_set_flight_mode->result == TCORE_RETURN_SUCCESS) {
+                       const struct treq_modem_set_flightmode *treq_data;
+                       treq_data = tcore_user_request_ref_data(ur, NULL);
+                       if (treq_data == NULL) {
+                               warn("No Request data!!!");
+                               info_set_flight_mode = 3;       /* TAPI_POWER_FLIGHT_MODE_RESP_FAIL */
+                       }
+                       else if (treq_data->enable == TRUE) {
+                               info_set_flight_mode = 1;       /* TAPI_POWER_FLIGHT_MODE_RESP_ON */
+                       } else {
+                               info_set_flight_mode = 2;       /* TAPI_POWER_FLIGHT_MODE_RESP_OFF */
+                       }
+               }
+               dbg("Set Flight mode: [%s]", (info_set_flight_mode == 1 ? "ON"
+                       : (info_set_flight_mode == 2 ? "OFF" : "Request FAIL")));
+
+               telephony_modem_complete_set_flight_mode(dbus_info->interface_object, dbus_info->invocation,
+                       info_set_flight_mode);
+       }
+       break;
 
-               case TRESP_MODEM_POWER_ON:
-                       dbg("receive TRESP_MODEM_POWER_ON");
-                       telephony_modem_complete_set_power(dbus_info->interface_object, dbus_info->invocation, 0);
-                       break;
+       case TRESP_MODEM_GET_FLIGHTMODE: {
+               const struct tresp_modem_get_flightmode *resp_get_flight_mode = data;
 
-               case TRESP_MODEM_POWER_OFF:
-                       dbg("receive TRESP_MODEM_POWER_OFF");
-                       telephony_modem_complete_set_power(dbus_info->interface_object, dbus_info->invocation, 0);
-                       break;
+               dbg("TRESP_MODEM_GET_FLIGHTMODE - Result: [%s]",
+                       (resp_get_flight_mode->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
 
-               case TRESP_MODEM_POWER_RESET:
-                       dbg("receive TRESP_MODEM_POWER_RESET");
-                       telephony_modem_complete_set_power(dbus_info->interface_object, dbus_info->invocation, 0);
-                       break;
+               telephony_modem_complete_get_flight_mode(dbus_info->interface_object, dbus_info->invocation,
+                       resp_get_flight_mode->enable, resp_get_flight_mode->result);
+       }
+       break;
 
-               case TRESP_MODEM_GET_IMEI:
-                       dbg("receive TRESP_MODEM_GET_IMEI");
-                       telephony_modem_complete_get_imei(dbus_info->interface_object, dbus_info->invocation, resp_get_imei->result, resp_get_imei->imei);
-                       break;
+       case TRESP_MODEM_POWER_ON: {
+               dbg("TRESP_MODEM_POWER_ON");
 
-               case TRESP_MODEM_GET_SN:
-                       dbg("receive TRESP_MODEM_GET_SN");
-                       telephony_modem_complete_get_serial_number(dbus_info->interface_object, dbus_info->invocation, resp_get_sn->result, resp_get_sn->sn);
-                       break;
+               telephony_modem_complete_set_power(dbus_info->interface_object, dbus_info->invocation, 0);
+       }
+       break;
 
-               case TRESP_MODEM_GET_VERSION:
-                       dbg("receive TRESP_MODEM_GET_VERSION");
-                       telephony_modem_complete_get_version(dbus_info->interface_object, dbus_info->invocation,
-                                       resp_get_version->result,
-                                       resp_get_version->software,
-                                       resp_get_version->hardware,
-                                       resp_get_version->calibration,
-                                       resp_get_version->product_code);
-                       break;
+       case TRESP_MODEM_POWER_OFF: {
+               dbg("TRESP_MODEM_POWER_OFF");
 
-               case TRESP_MODEM_SET_DUN_PIN_CONTROL:
-                       dbg("receive TRESP_MODEM_SET_DUN_PIN_CONTROL");
-                       dbg("resp->result = %d", resp_dun_pin_ctrl->result);
-                       telephony_modem_complete_set_dun_pin_ctrl(dbus_info->interface_object, dbus_info->invocation, resp_dun_pin_ctrl->result);
-                       break;
+               telephony_modem_complete_set_power(dbus_info->interface_object, dbus_info->invocation, 0);
+       }
+       break;
+
+       case TRESP_MODEM_POWER_RESET: {
+               dbg("TRESP_MODEM_POWER_RESET");
+
+               telephony_modem_complete_set_power(dbus_info->interface_object, dbus_info->invocation, 0);
+       }
+       break;
+
+       case TRESP_MODEM_POWER_LOW: {
+               dbg("TRESP_MODEM_POWER_LOW");
 
-               default:
-                       dbg("not handled command[%d]", command);
-               break;
+               telephony_modem_complete_set_power(dbus_info->interface_object, dbus_info->invocation, 0);
+       }
+       break;
+
+       case TRESP_MODEM_GET_IMEI: {
+               const struct tresp_modem_get_imei *resp_get_imei = data;
+
+               dbg("TRESP_MODEM_GET_IMEI - Result: [%s]",
+                       (resp_get_imei->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
+
+               telephony_modem_complete_get_imei(dbus_info->interface_object, dbus_info->invocation,
+                       resp_get_imei->result, resp_get_imei->imei);
+       }
+       break;
+
+       case TRESP_MODEM_GET_SN: {
+               const struct tresp_modem_get_sn *resp_get_sn = data;
+
+               dbg("TRESP_MODEM_GET_SN - Result: [%s]",
+                       (resp_get_sn->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
+
+               telephony_modem_complete_get_serial_number(dbus_info->interface_object, dbus_info->invocation,
+                       resp_get_sn->result, resp_get_sn->sn, resp_get_sn->meid, resp_get_sn->imei, resp_get_sn->imeisv);
+       }
+       break;
+
+       case TRESP_MODEM_GET_VERSION: {
+               const struct tresp_modem_get_version *resp_get_version = data;
+
+               dbg("TRESP_MODEM_GET_VERSION - Result: [%s]",
+                       (resp_get_version->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
+
+               telephony_modem_complete_get_version(dbus_info->interface_object, dbus_info->invocation,
+                               resp_get_version->result,
+                               resp_get_version->software,
+                               resp_get_version->hardware,
+                               resp_get_version->calibration,
+                               resp_get_version->product_code);
+       }
+       break;
+
+       case TRESP_MODEM_SET_DUN_PIN_CONTROL: {
+               const struct tresp_modem_set_dun_pin_control *resp_dun_pin_ctrl = data;
+
+               dbg("TRESP_MODEM_SET_DUN_PIN_CONTROL - Result: [%s]",
+                       (resp_dun_pin_ctrl->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
+
+               telephony_modem_complete_set_dun_pin_ctrl(dbus_info->interface_object, dbus_info->invocation,
+                       resp_dun_pin_ctrl->result);
+       }
+       break;
+
+       default:
+               err("Unhandled/Unknown Response!!!");
+       break;
        }
 
        return TRUE;
 }
 
-gboolean dbus_plugin_modem_notification(struct custom_data *ctx, const char *plugin_name, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data)
+gboolean dbus_plugin_modem_notification(struct custom_data *ctx, CoreObject *source,
+       TelephonyObjectSkeleton *object, enum tcore_notification_command command,
+       unsigned int data_len, const void *data)
 {
        TelephonyModem *modem;
-       const struct tnoti_modem_power *info = data;
-       const struct tnoti_modem_dun_pin_control *pin = data;
 
        if (!object) {
                dbg("object is NULL");
                return FALSE;
        }
+       dbg("Notification!!! Command: [0x%x] CP Name: [%s]",
+               command, tcore_server_get_cp_name_by_plugin(tcore_object_ref_plugin(source)));
 
        modem = telephony_object_peek_modem(TELEPHONY_OBJECT(object));
-       dbg("modem = %p", modem);
+       dbg("modem: [%p]", modem);
 
        switch (command) {
-               case TNOTI_MODEM_POWER:
-                       dbg("modem->state = %d", info->state);
-                       telephony_modem_emit_power(modem, info->state);
-                       telephony_modem_set_power(modem, info->state);
-                       break;
+       case TNOTI_MODEM_POWER: {
+               const struct tnoti_modem_power *info = data;
 
-               case TNOTI_MODEM_DUN_PIN_CONTROL:
-                       dbg("modem dun pin ctrl noti signal(%d), status(%d)", pin->signal, pin->status);
-                       telephony_modem_emit_dun_pin_ctrl(modem, pin->signal, pin->status);
-                       break;
+               dbg("TNOTI_MODEM_POWER - Modem state: [%d]", info->state);
 
-               case TNOTI_MODEM_DUN_EXTERNAL_CALL:
-                       dbg("modem dun external call noti");
-                       telephony_modem_emit_dun_external_call(modem, TRUE);
+               if (info->state > MODEM_STATE_MAX)
                        break;
 
-               default:
-                       dbg("not handled command[0x%x]", command);
-               break;
+               telephony_modem_emit_power(modem, info->state);
+               telephony_modem_set_power(modem, info->state);
+       }
+       break;
+
+       case TNOTI_MODEM_DUN_PIN_CONTROL: {
+               const struct tnoti_modem_dun_pin_control *pin = data;
+
+               dbg("TNOTI_MODEM_DUN_PIN_CONTROL - Signal: [0x%2x] Status: [0x%2x]", pin->signal, pin->status);
+
+               telephony_modem_emit_dun_pin_ctrl(modem, pin->signal, pin->status);
+       }
+       break;
+
+       case TNOTI_MODEM_DUN_EXTERNAL_CALL: {
+               dbg("TNOTI_MODEM_DUN_EXTERNAL_CALL");
+
+               telephony_modem_emit_dun_external_call(modem, TRUE);
+       }
+       break;
+
+       default:
+               err("Unhandled/Unknown Notification!!!");
+       break;
        }
 
        return TRUE;
old mode 100644 (file)
new mode 100755 (executable)
index 8b0ee9b..e35fad0
@@ -1,3 +1,23 @@
+/*
+ * tel-plugin-dbus-tapi
+ *
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Ja-young Gu <jygu@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include <stdio.h>
 #include <string.h>
 #include <pthread.h>
@@ -5,7 +25,6 @@
 #include <stdlib.h>
 #include <time.h>
 #include <glib.h>
-#include <glib-object.h>
 #include <gio/gio.h>
 
 #include <tcore.h>
 #include "generated-code.h"
 #include "common.h"
 
-
-static char *_get_network_name_by_plmn(CoreObject *o, const char *plmn)
+static int __convert_act_to_systemtype(enum telephony_network_access_technology act)
 {
-       struct tcore_network_operator_info *noi = NULL;
-       char mcc[4] = { 0, };
-       char mnc[4] = { 0, };
+       switch (act) {
+       case NETWORK_ACT_UNKNOWN:
+               return 0;
 
-       if (!plmn)
-               return NULL;
+       case NETWORK_ACT_GSM:
+               return 1;
 
-       snprintf(mcc, 4, "%s", plmn);
-       snprintf(mnc, 4, "%s", plmn+3);
+       case NETWORK_ACT_GPRS:
+               return 2;
 
-       if (mnc[2] == '#')
-               mnc[2] = '\0';
+       case NETWORK_ACT_EGPRS:
+               return 3;
 
-       noi = tcore_network_operator_info_find(o, mcc, mnc);
-       if (noi) {
-               dbg("%s-%s: country=[%s], oper=[%s]", mcc, mnc, noi->country, noi->name);
-               return noi->name;
-       }
-       else {
-               dbg("%s-%s: no network operator name", mcc, mnc);
-       }
+       case NETWORK_ACT_UMTS:
+               return 5;
 
-       return NULL;
-}
+       case NETWORK_ACT_GSM_UTRAN:
+               return 6;
 
+       case NETWORK_ACT_IS95A:
+               return 8;
 
-static enum tcore_hook_return on_hook_location_cellinfo(Server *s, CoreObject *source, enum tcore_notification_command command, unsigned int data_len, void *data, void *user_data)
-{
-       const struct tnoti_network_location_cellinfo *info = data;
-       TelephonyNetwork *network = user_data;
-
-       if (!network)
-               return TCORE_HOOK_RETURN_CONTINUE;
+       case NETWORK_ACT_IS95B:
+               return 9;
 
-       telephony_network_set_lac(network, info->lac);
-       telephony_network_set_cell_id(network, info->cell_id);
+       case NETWORK_ACT_CDMA_1X:
+               return 10;
 
-       return TCORE_HOOK_RETURN_CONTINUE;
-}
-
-static enum tcore_hook_return on_hook_icon_info(Server *s, CoreObject *source, enum tcore_notification_command command, unsigned int data_len, void *data, void *user_data)
-{
-       const struct tnoti_network_icon_info *info = data;
-       TelephonyNetwork *network = user_data;
-
-       if (!network)
-               return TCORE_HOOK_RETURN_CONTINUE;
-
-       telephony_network_set_rssi(network, info->rssi);
-
-       return TCORE_HOOK_RETURN_CONTINUE;
-}
-
-static enum tcore_hook_return on_hook_registration_status(Server *s, CoreObject *source, enum tcore_notification_command command, unsigned int data_len, void *data, void *user_data)
-{
-       const struct tnoti_network_registration_status *info = data;
-       TelephonyNetwork *network = user_data;
+       case NETWORK_ACT_EVDO_REV0:
+               return 11;
 
-       if (!network)
-               return TCORE_HOOK_RETURN_CONTINUE;
+       case NETWORK_ACT_CDMA_1X_EVDO_REV0:
+               return 12;
 
-       telephony_network_set_circuit_status(network, info->cs_domain_status);
-       telephony_network_set_packet_status(network, info->ps_domain_status);
-       telephony_network_set_service_type(network, info->service_type);
-       telephony_network_set_roaming_status(network, info->roaming_status);
+       case NETWORK_ACT_EVDO_REVA:
+               return 13;
 
-       switch (info->service_type) {
-               case NETWORK_SERVICE_TYPE_UNKNOWN:
-               case NETWORK_SERVICE_TYPE_NO_SERVICE:
-                       telephony_network_set_network_name(network, "No Service");
-                       break;
+       case NETWORK_ACT_CDMA_1X_EVDO_REVA:
+               return 14;
 
-               case NETWORK_SERVICE_TYPE_EMERGENCY:
-                       telephony_network_set_network_name(network, "EMERGENCY");
-                       break;
+       case NETWORK_ACT_EVDV:
+               return 15;
 
-               case NETWORK_SERVICE_TYPE_SEARCH:
-                       telephony_network_set_network_name(network, "Searching...");
-                       break;
+       case NETWORK_ACT_LTE:
+               return 16;
 
-               default:
-                       break;
+       default:
+       break;
        }
 
-       return TCORE_HOOK_RETURN_CONTINUE;
+       return 0;
 }
 
-static enum tcore_hook_return on_hook_change(Server *s, CoreObject *source, enum tcore_notification_command command, unsigned int data_len, void *data, void *user_data)
+static void __update_network_name (TelephonyNetwork *network, CoreObject *o, const char *cp_name)
 {
-       const struct tnoti_network_change *info = data;
-       TelephonyNetwork *network = user_data;
-       struct tcore_network_operator_info *noi = NULL;
-       char mcc[4] = { 0, };
-       char mnc[4] = { 0, };
+       char *spnname = NULL, *nwname = NULL;
        enum telephony_network_service_type svc_type;
+       enum telephony_network_access_technology svc_act;
        enum tcore_network_name_priority network_name_priority;
-       char *tmp;
 
-       if (!network)
-               return TCORE_HOOK_RETURN_CONTINUE;
+       tcore_network_get_service_type (o, &svc_type);
+       if (svc_type != NETWORK_SERVICE_TYPE_3G) {
+               telephony_network_set_ps_type (network, TELEPHONY_HSDPA_OFF);
+       }
 
-       telephony_network_set_plmn(network, info->plmn);
-       telephony_network_set_lac(network, info->gsm.lac);
+       tcore_network_get_access_technology (o, &svc_act);
+       telephony_network_set_access_technology (network, __convert_act_to_systemtype(svc_act));
 
-       snprintf(mcc, 4, "%s", info->plmn);
-       snprintf(mnc, 4, "%s", info->plmn+3);
+       tcore_network_get_network_name_priority (o, &network_name_priority);
+       switch (network_name_priority) {
+       case TCORE_NETWORK_NAME_PRIORITY_SPN:
+               telephony_network_set_name_option (network, NETWORK_NAME_OPTION_SPN);
+       break;
 
-       if (mnc[2] == '#')
-               mnc[2] = '\0';
+       case TCORE_NETWORK_NAME_PRIORITY_NETWORK:
+               telephony_network_set_name_option (network, NETWORK_NAME_OPTION_OPERATOR);
+       break;
 
-       tcore_network_get_network_name_priority(source, &network_name_priority);
-       telephony_network_set_name_priority(network, network_name_priority);
+       case TCORE_NETWORK_NAME_PRIORITY_ANY:
+               telephony_network_set_name_option (network, NETWORK_NAME_OPTION_ANY);
+       break;
 
-       tmp = tcore_network_get_network_name(source, TCORE_NETWORK_NAME_TYPE_SPN);
-       if (tmp) {
-               telephony_network_set_spn_name(network, tmp);
-               free(tmp);
+       default:
+               telephony_network_set_name_option (network, NETWORK_NAME_OPTION_NONE);
+       break;
        }
 
-       tcore_network_get_service_type(source, &svc_type);
-       switch(svc_type) {
-               case NETWORK_SERVICE_TYPE_UNKNOWN:
-               case NETWORK_SERVICE_TYPE_NO_SERVICE:
-                       telephony_network_set_network_name(network, "No Service");
-                       break;
+       do {
+               /* spn */
+               spnname = tcore_network_get_network_name(o, TCORE_NETWORK_NAME_TYPE_SPN);
+               if (spnname) {
+                       telephony_network_set_spn_name (network, spnname);
+               }
 
-               case NETWORK_SERVICE_TYPE_EMERGENCY:
-                       telephony_network_set_network_name(network, "EMERGENCY");
+               /* nitz */
+               nwname = tcore_network_get_network_name(o, TCORE_NETWORK_NAME_TYPE_FULL);
+               if (nwname && strlen(nwname) > 0) {
+                       info("[DBUSINFO][%s] SPN:[%s] FULL:[%s] prio:[%d] act:[%d] svc_type:[%d]",
+                                       cp_name, spnname?spnname:"", nwname, network_name_priority, svc_act, svc_type);
+                       telephony_network_set_network_name (network, nwname);
                        break;
+               }
+               else {
+                       g_free(nwname);
+                       nwname = tcore_network_get_network_name(o, TCORE_NETWORK_NAME_TYPE_SHORT);
+                       if (nwname) {
+                               info("[DBUSINFO][%s] SPN:[%s] SHORT:[%s] prio:[%d] act:[%d] svc_type:[%d]",
+                                               cp_name, spnname?spnname:"", nwname, network_name_priority, svc_act, svc_type);
+                               telephony_network_set_network_name (network, nwname);
+                               break;
+                       }
+               }
+               info("[DBUSINFO][%s] NW name is not fixed yet. SPN:[%s] prio:[%d] act:[%d] svc_type:[%d]",
+                       cp_name, spnname?spnname:"", network_name_priority, svc_act, svc_type);
+       }while(0);
+       g_free(spnname);
+       g_free(nwname);
+}
 
-               case NETWORK_SERVICE_TYPE_SEARCH:
-                       telephony_network_set_network_name(network, "Searching...");
-                       break;
+static enum tcore_hook_return on_hook_ps_protocol_status(Server *s,
+       CoreObject *source, enum tcore_notification_command command,
+       unsigned int data_len, void *data, void *user_data)
+{
+       const struct tnoti_ps_protocol_status *protocol_status = data;
 
-               default:
-                       tmp = tcore_network_get_network_name(source, TCORE_NETWORK_NAME_TYPE_SHORT);
-                       if (tmp) {
-                               telephony_network_set_network_name(network, tmp);
-                               free(tmp);
-                       }
-                       else {
-                               /* pre-defined table */
-                               noi = tcore_network_operator_info_find(source, mcc, mnc);
-                               if (noi) {
-                                       dbg("%s-%s: country=[%s], oper=[%s]", mcc, mnc, noi->country, noi->name);
-                                       dbg("NWNAME = pre-define table[%s]", noi->name);
-                                       telephony_network_set_network_name(network, noi->name);
-                               }
-                               else {
-                                       dbg("%s-%s: no network operator name", mcc, mnc);
-                                       telephony_network_set_network_name(network, info->plmn);
-                               }
-                       }
-                       break;
+       TelephonyObjectSkeleton *object;
+       TelephonyNetwork *network = NULL;
+       struct custom_data *ctx = user_data;
+       const char *cp_name;
+       char *path;
+
+       enum telephony_ps_protocol_status ps_protocol_status = TELEPHONY_HSDPA_OFF;
+
+       cp_name = tcore_server_get_cp_name_by_plugin(tcore_object_ref_plugin(source));
+       if (cp_name == NULL) {
+               err("CP name is NULL");
+               return TCORE_HOOK_RETURN_CONTINUE;
        }
 
-       return TCORE_HOOK_RETURN_CONTINUE;
-}
+       info("[DBUSINFO][%s] PS_PROTOCOL_STATUS (status:[%d])", cp_name, protocol_status->status);
 
-static enum tcore_hook_return on_hook_ps_protocol_status(Server *s, CoreObject *source, enum tcore_notification_command command, unsigned int data_len, void *data, void *user_data)
-{
-       const struct tnoti_ps_protocol_status *info = data;
-       TelephonyNetwork *network = user_data;
+       path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
 
-       if (!network)
+       /* Look-up Hash table for Object */
+       object = g_hash_table_lookup(ctx->objects, path);
+       g_free(path);
+       if (object == NULL) {
+               err("Object is NOT defined!!!");
                return TCORE_HOOK_RETURN_CONTINUE;
+       }
 
-       telephony_network_set_network_type(network, info->status);
+       network = telephony_object_peek_network(TELEPHONY_OBJECT(object));
+       if (network == NULL) {
+               err("Network object is NULL!!!");
+               return TCORE_HOOK_RETURN_CONTINUE;
+       }
+
+       if (telephony_network_get_service_type (network) < NETWORK_SERVICE_TYPE_2G) {
+               telephony_network_set_ps_type(network, TELEPHONY_HSDPA_OFF);
+               return TCORE_HOOK_RETURN_CONTINUE;
+       }
+
+       switch (protocol_status->status) {
+       case TELEPHONY_HSDPA_OFF:
+               ps_protocol_status = TELEPHONY_HSDPA_OFF;
+               break;
+
+       case TELEPHONY_HSDPA_ON:
+               ps_protocol_status = TELEPHONY_HSDPA_ON;
+               break;
+
+       case TELEPHONY_HSUPA_ON:
+               ps_protocol_status = TELEPHONY_HSUPA_ON;
+               break;
+
+       case TELEPHONY_HSPA_ON:
+               ps_protocol_status = TELEPHONY_HSPA_ON;
+               break;
+
+       case TELEPHONY_HSPAP_ON:
+               ps_protocol_status = TELEPHONY_HSPAP_ON;
+               break;
+       default:
+               err("Unhandled protocol status!");
+       break;
+       }
+
+       /* Check and Set - To avoid double update */
+       if (telephony_network_get_ps_type(network) != (gint)ps_protocol_status)
+               telephony_network_set_ps_type(network, ps_protocol_status);
 
        return TCORE_HOOK_RETURN_CONTINUE;
 }
 
 static gboolean
-on_network_search (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gpointer user_data)
+on_network_search (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
 {
-#if 1
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "x"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
-       tcore_user_request_set_data(ur, 0, NULL);
+
        tcore_user_request_set_command(ur, TREQ_NETWORK_SEARCH);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_search(network, invocation, NULL, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
-#else
-       /* Dummy return */
-       GVariant *result = NULL;
-       GVariantBuilder b;
-       int i;
-       char *buf;
-
-       g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
-
-       for (i = 0; i < 3; i++) {
-               g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
-
-               g_variant_builder_add(&b, "{sv}", "plmn", g_variant_new_string("45001"));
-               g_variant_builder_add(&b, "{sv}", "act", g_variant_new_int32(4));
-               g_variant_builder_add(&b, "{sv}", "type", g_variant_new_int32(2));
-               g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string("Samsung"));
-
-               g_variant_builder_close(&b);
-       }
-
-       result = g_variant_builder_end(&b);
-
-       telephony_network_complete_search(network, invocation, result, 0);
-       g_variant_unref(result);
-#endif
 
        return TRUE;
 }
 
 static gboolean
-on_network_search_cancel (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gpointer user_data)
+on_network_search_cancel (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "x"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
-       tcore_user_request_set_data(ur, 0, NULL);
+
        tcore_user_request_set_command(ur, TREQ_NETWORK_SET_CANCEL_MANUAL_SEARCH);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_search_cancel(network, invocation, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -267,20 +285,22 @@ on_network_search_cancel (TelephonyNetwork *network,
 }
 
 static gboolean
-on_network_get_selection_mode (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gpointer user_data)
+on_network_get_selection_mode (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "r"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
-       tcore_user_request_set_data(ur, 0, NULL);
+
        tcore_user_request_set_command(ur, TREQ_NETWORK_GET_PLMN_SELECTION_MODE);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_get_selection_mode(network, invocation, -1, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -288,39 +308,32 @@ on_network_get_selection_mode (TelephonyNetwork *network,
 }
 
 static gboolean
-on_network_set_selection_mode (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gint mode,
-               const gchar *plmn,
-               gint act,
-               gpointer user_data)
+on_network_set_selection_mode (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+               gint mode, const gchar *plmn, gint act, gpointer user_data)
 {
        struct treq_network_set_plmn_selection_mode req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "w"))
+               return TRUE;
+
        memset(&req, 0, sizeof(struct treq_network_set_plmn_selection_mode));
 
-       if (mode == 0) {
-               /* Automatic */
-               req.mode = NETWORK_SELECT_MODE_GSM_AUTOMATIC;
+       if (mode == 0) {        /* Automatic */
+               req.mode = NETWORK_SELECT_MODE_AUTOMATIC;
        }
-       else if (mode == 1) {
-               /* Manual */
-               req.mode = NETWORK_SELECT_MODE_GSM_MANUAL;
+       else if (mode == 1) {   /* Manual */
+               req.mode = NETWORK_SELECT_MODE_MANUAL;
                snprintf(req.plmn, 7, "%s", plmn);
-               if (strlen(plmn) <= 5)
-                       req.plmn[5] = '#';
                req.act = act;
        }
        else {
-               telephony_network_complete_set_selection_mode(network, invocation, -1);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                return TRUE;
        }
-
-       dbg("mode = %d, plmn = [%s], act = %d",
-                       req.mode, req.plmn, req.act);
+       dbg("Mode: [%d] PLMN: [%s] AcT: [%d]", req.mode, req.plmn, req.act);
 
        ur = MAKE_UR(ctx, network, invocation);
 
@@ -328,7 +341,7 @@ on_network_set_selection_mode (TelephonyNetwork *network,
        tcore_user_request_set_command(ur, TREQ_NETWORK_SET_PLMN_SELECTION_MODE);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_set_selection_mode(network, invocation, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -337,16 +350,17 @@ on_network_set_selection_mode (TelephonyNetwork *network,
 
 
 static gboolean
-on_network_set_service_domain (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gint domain,
-               gpointer user_data)
+on_network_set_service_domain (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gint domain, gpointer user_data)
 {
        struct treq_network_set_service_domain req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "w"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
 
        req.domain = domain;
@@ -355,7 +369,7 @@ on_network_set_service_domain (TelephonyNetwork *network,
        tcore_user_request_set_command(ur, TREQ_NETWORK_SET_SERVICE_DOMAIN);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_set_service_domain(network, invocation, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -363,20 +377,22 @@ on_network_set_service_domain (TelephonyNetwork *network,
 }
 
 static gboolean
-on_network_get_service_domain (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gpointer user_data)
+on_network_get_service_domain (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "r"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
-       tcore_user_request_set_data(ur, 0, NULL);
+
        tcore_user_request_set_command(ur, TREQ_NETWORK_GET_SERVICE_DOMAIN);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_get_service_domain(network, invocation, -1, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -384,17 +400,17 @@ on_network_get_service_domain (TelephonyNetwork *network,
 }
 
 static gboolean
-on_network_set_band (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gint band,
-               gint mode,
-               gpointer user_data)
+on_network_set_band (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gint band, gint mode, gpointer user_data)
 {
        struct treq_network_set_band req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "w"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
 
        req.mode = mode;
@@ -404,7 +420,7 @@ on_network_set_band (TelephonyNetwork *network,
        tcore_user_request_set_command(ur, TREQ_NETWORK_SET_BAND);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_set_band(network, invocation, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -412,20 +428,22 @@ on_network_set_band (TelephonyNetwork *network,
 }
 
 static gboolean
-on_network_get_band (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gpointer user_data)
+on_network_get_band (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "r"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
-       tcore_user_request_set_data(ur, 0, NULL);
+
        tcore_user_request_set_command(ur, TREQ_NETWORK_GET_BAND);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_get_band(network, invocation, -1, -1, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -433,16 +451,17 @@ on_network_get_band (TelephonyNetwork *network,
 }
 
 static gboolean
-on_network_set_mode (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gint mode,
-               gpointer user_data)
+on_network_set_mode (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gint mode, gpointer user_data)
 {
        struct treq_network_set_mode req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "w"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
 
        req.mode = mode;
@@ -451,7 +470,7 @@ on_network_set_mode (TelephonyNetwork *network,
        tcore_user_request_set_command(ur, TREQ_NETWORK_SET_MODE);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_set_mode(network, invocation, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -459,20 +478,22 @@ on_network_set_mode (TelephonyNetwork *network,
 }
 
 static gboolean
-on_network_get_mode (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gpointer user_data)
+on_network_get_mode (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "r"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
-       tcore_user_request_set_data(ur, 0, NULL);
+
        tcore_user_request_set_command(ur, TREQ_NETWORK_GET_MODE);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_get_mode(network, invocation, -1, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -480,19 +501,17 @@ on_network_get_mode (TelephonyNetwork *network,
 }
 
 static gboolean
-on_network_set_preferred_plmn (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gint mode,
-               gint ef_index,
-               gint act,
-               const gchar *plmn,
-               gpointer user_data)
+on_network_set_preferred_plmn (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gint mode, gint ef_index, gint act, const gchar *plmn, gpointer user_data)
 {
        struct treq_network_set_preferred_plmn req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "w"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
 
        req.operation = mode;
@@ -509,7 +528,7 @@ on_network_set_preferred_plmn (TelephonyNetwork *network,
        tcore_user_request_set_command(ur, TREQ_NETWORK_SET_PREFERRED_PLMN);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_set_preferred_plmn(network, invocation, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -517,20 +536,22 @@ on_network_set_preferred_plmn (TelephonyNetwork *network,
 }
 
 static gboolean
-on_network_get_preferred_plmn (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gpointer user_data)
+on_network_get_preferred_plmn (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "r"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
-       tcore_user_request_set_data(ur, 0, NULL);
+
        tcore_user_request_set_command(ur, TREQ_NETWORK_GET_PREFERRED_PLMN);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_get_preferred_plmn(network, invocation, NULL, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -538,20 +559,137 @@ on_network_get_preferred_plmn (TelephonyNetwork *network,
 }
 
 static gboolean
-on_network_get_serving_network (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gpointer user_data)
+on_network_get_serving_network (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "r"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
-       tcore_user_request_set_data(ur, 0, NULL);
+
        tcore_user_request_set_command(ur, TREQ_NETWORK_GET_SERVING_NETWORK);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_get_serving_network(network, invocation, 0, NULL, 0, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+
+static gboolean
+on_network_get_neighboring_cell_info (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur = NULL;
+       TReturn ret;
+
+       if (!check_access_control (invocation, AC_NETWORK, "r"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, network, invocation);
+
+       tcore_user_request_set_command(ur, TREQ_NETWORK_GET_NEIGHBORING_CELL_INFO);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+
+static gboolean
+on_network_set_default_data_subscription (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur = NULL;
+       TReturn ret;
+
+       if (!check_access_control (invocation, AC_NETWORK, "w"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, network, invocation);
+
+       tcore_user_request_set_command(ur, TREQ_NETWORK_SET_DEFAULT_DATA_SUBSCRIPTION);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+
+static gboolean
+on_network_get_default_data_subscription (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur = NULL;
+       TReturn ret;
+
+       if (!check_access_control (invocation, AC_NETWORK, "r"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, network, invocation);
+
+       tcore_user_request_set_command( ur, TREQ_NETWORK_GET_DEFAULT_DATA_SUBSCRIPTION );
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+
+static gboolean on_network_set_default_subs(TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gint preferred_subscription, gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur;
+       TReturn ret = 0;
+
+       if (!check_access_control (invocation, AC_NETWORK, "w"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, network, invocation);
+
+       tcore_user_request_set_command( ur, TREQ_NETWORK_SET_DEFAULT_SUBSCRIPTION );
+       ret = tcore_communicator_dispatch_request( ctx->comm, ur );
+       if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+
+static gboolean on_network_get_default_subs(TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur;
+       TReturn ret = 0;
+
+       if (!check_access_control (invocation, AC_NETWORK, "r"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, network, invocation);
+
+       tcore_user_request_set_command( ur, TREQ_NETWORK_GET_DEFAULT_SUBSCRIPTION );
+       ret = tcore_communicator_dispatch_request( ctx->comm, ur );
+       if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
                tcore_user_request_unref(ur);
        }
 
@@ -631,298 +769,576 @@ gboolean dbus_plugin_setup_network_interface(TelephonyObjectSkeleton *object, st
                        G_CALLBACK (on_network_get_serving_network),
                        ctx);
 
-       tcore_server_add_notification_hook(ctx->server, TNOTI_NETWORK_LOCATION_CELLINFO, on_hook_location_cellinfo, network);
-       tcore_server_add_notification_hook(ctx->server, TNOTI_NETWORK_ICON_INFO, on_hook_icon_info, network);
-       tcore_server_add_notification_hook(ctx->server, TNOTI_NETWORK_REGISTRATION_STATUS, on_hook_registration_status, network);
-       tcore_server_add_notification_hook(ctx->server, TNOTI_NETWORK_CHANGE, on_hook_change, network);
-       tcore_server_add_notification_hook(ctx->server, TNOTI_PS_PROTOCOL_STATUS, on_hook_ps_protocol_status, network);
+       g_signal_connect (network,
+                       "handle-get-ngbr-cell-info",
+                       G_CALLBACK (on_network_get_neighboring_cell_info),
+                       ctx);
+
+       g_signal_connect (network,
+                       "handle-set-default-data-subscription",
+                       G_CALLBACK (on_network_set_default_data_subscription),
+                       ctx);
+
+       g_signal_connect (network,
+                       "handle-get-default-data-subscription",
+                       G_CALLBACK (on_network_get_default_data_subscription),
+                       ctx);
+
+       g_signal_connect (network,
+                       "handle-set-default-subscription",
+                       G_CALLBACK (on_network_set_default_subs),
+                       ctx);
+
+       g_signal_connect (network,
+                       "handle-get-default-subscription",
+                       G_CALLBACK (on_network_get_default_subs),
+                       ctx);
+
+       tcore_server_add_notification_hook(ctx->server,
+               TNOTI_PS_PROTOCOL_STATUS, on_hook_ps_protocol_status, ctx);
 
        return TRUE;
 }
 
-gboolean dbus_plugin_network_response(struct custom_data *ctx, UserRequest *ur, struct dbus_request_info *dbus_info, enum tcore_response_command command, unsigned int data_len, const void *data)
+gboolean dbus_plugin_network_response(struct custom_data *ctx, UserRequest *ur,
+       struct dbus_request_info *dbus_info, enum tcore_response_command command,
+       unsigned int data_len, const void *data)
 {
-       const struct tresp_network_search *resp_network_search = data;
-       const struct tresp_network_set_cancel_manual_search *resp_set_cancel_manual_search = data;
-       const struct tresp_network_get_plmn_selection_mode *resp_get_plmn_selection_mode = data;
-       const struct tresp_network_set_plmn_selection_mode *resp_set_plmn_selection_mode = data;
-       const struct tresp_network_set_service_domain *resp_set_service_domain = data;
-       const struct tresp_network_get_service_domain *resp_get_service_domain = data;
-       const struct tresp_network_set_band *resp_set_band = data;
-       const struct tresp_network_get_band *resp_get_band = data;
-       const struct tresp_network_set_preferred_plmn *resp_set_preferred_plmn = data;
-       const struct tresp_network_get_preferred_plmn *resp_get_preferred_plmn = data;
-       const struct tresp_network_get_serving_network *resp_get_serving_network = data;
-       const struct tresp_network_set_mode *resp_set_mode = data;
-       const struct tresp_network_get_mode *resp_get_mode = data;
-
-       int i = 0;
-       char *buf;
-
-       GSList *co_list;
-       CoreObject *co_network;
-       char *modem_name = NULL;
-       TcorePlugin *p = NULL;
-
-       modem_name = tcore_user_request_get_modem_name(ur);
-       if (!modem_name)
-               return FALSE;
+       dbg("Response!!! Command: [0x%x] CP Name: [%s]",
+               command, GET_CP_NAME(dbus_info->invocation));
 
-       p = tcore_server_find_plugin(ctx->server, modem_name);
-       free(modem_name);
-       if (!p)
-               return FALSE;
+       switch (command) {
+       case TRESP_NETWORK_SEARCH: {
+               const struct tresp_network_search *resp_network_search = data;
+               GVariant *network_search_result = NULL;
+               GVariantBuilder b;
+               int i = 0;
+
+               dbg("TRESP_NETWORK_SEARCH - Result: [%s] Count: [%d]",
+                       (resp_network_search->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"),
+                       resp_network_search->list_count);
+
+               g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+               for (i = 0; i < resp_network_search->list_count; i++) {
+                       g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+
+                       g_variant_builder_add(&b, "{sv}", "plmn", g_variant_new_string(resp_network_search->list[i].plmn));
+                       g_variant_builder_add(&b, "{sv}", "act", g_variant_new_int32(resp_network_search->list[i].act));
+                       g_variant_builder_add(&b, "{sv}", "type", g_variant_new_int32(resp_network_search->list[i].status));
+                       g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string(resp_network_search->list[i].name));
+
+                       g_variant_builder_close(&b);
+               }
+               network_search_result = g_variant_builder_end(&b);
 
-       co_list = tcore_plugin_get_core_objects_bytype(p, CORE_OBJECT_TYPE_NETWORK);
-       if (!co_list) {
-               return FALSE;
+               telephony_network_complete_search(dbus_info->interface_object, dbus_info->invocation,
+                       network_search_result, resp_network_search->result);
        }
+       break;
 
-       co_network = (CoreObject *)co_list->data;
-       g_slist_free(co_list);
+       case TRESP_NETWORK_SET_PLMN_SELECTION_MODE: {
+               const struct tresp_network_set_plmn_selection_mode *resp_set_plmn_selection_mode = data;
 
-       if (!co_network) {
-               return FALSE;
+               dbg("TRESP_SET_PLMN_SELECTION_MODE - Result: [%s]",
+                       (resp_set_plmn_selection_mode->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
+
+               telephony_network_complete_set_selection_mode(dbus_info->interface_object, dbus_info->invocation,
+                       resp_set_plmn_selection_mode->result);
        }
+       break;
 
-       switch (command) {
-               case TRESP_NETWORK_SEARCH: {
-                       GVariant *result = NULL;
-                       GVariantBuilder b;
-
-                       dbg("receive TRESP_NETWORK_SEARCH");
-                       dbg("resp->result = %d", resp_network_search->result);
-
-                       g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
-
-                       for (i = 0; i < resp_network_search->list_count; i++) {
-                               g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
-
-                               g_variant_builder_add(&b, "{sv}", "plmn", g_variant_new_string(resp_network_search->list[i].plmn));
-                               g_variant_builder_add(&b, "{sv}", "act", g_variant_new_int32(resp_network_search->list[i].act));
-                               g_variant_builder_add(&b, "{sv}", "type", g_variant_new_int32(resp_network_search->list[i].status));
-
-                               if (strlen(resp_network_search->list[i].name) > 0) {
-                                       g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string(resp_network_search->list[i].name));
-                               }
-                               else {
-                                       buf = _get_network_name_by_plmn(co_network, resp_network_search->list[i].plmn);
-                                       if (buf)
-                                               g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string(buf));
-                                       else
-                                               g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string(resp_network_search->list[i].plmn));
-                               }
-
-                               g_variant_builder_close(&b);
-                       }
+       case TRESP_NETWORK_GET_PLMN_SELECTION_MODE: {
+               const struct tresp_network_get_plmn_selection_mode *resp_get_plmn_selection_mode = data;
 
-                       result = g_variant_builder_end(&b);
+               dbg("TRESP_GET_PLMN_SELECTION_MODE - Result: [%s] Mode: [%s]",
+                       (resp_get_plmn_selection_mode->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"),
+                       (resp_get_plmn_selection_mode->mode == NETWORK_SELECT_MODE_AUTOMATIC ? "Auto" :
+                       (resp_get_plmn_selection_mode->mode == NETWORK_SELECT_MODE_MANUAL ? "Manual" :
+                       "Unknown")));
 
-                       telephony_network_complete_search(dbus_info->interface_object, dbus_info->invocation, result, resp_network_search->result);
+               switch (resp_get_plmn_selection_mode->mode) {
+               case NETWORK_SELECT_MODE_AUTOMATIC:
+                       telephony_network_complete_get_selection_mode(dbus_info->interface_object, dbus_info->invocation,
+                               0, resp_get_plmn_selection_mode->result);
+               break;
+
+               case NETWORK_SELECT_MODE_MANUAL:
+                       telephony_network_complete_get_selection_mode(dbus_info->interface_object, dbus_info->invocation,
+                               1, resp_get_plmn_selection_mode->result);
+               break;
+
+               default:
+                       telephony_network_complete_get_selection_mode(dbus_info->interface_object, dbus_info->invocation,
+                               -1, resp_get_plmn_selection_mode->result);
+               break;
                }
+       }
+       break;
 
-                       break;
+       case TRESP_NETWORK_SET_SERVICE_DOMAIN: {
+               const struct tresp_network_set_service_domain *resp_set_service_domain = data;
 
-               case TRESP_NETWORK_SET_PLMN_SELECTION_MODE:
-                       dbg("receive TRESP_SET_PLMN_SELECTION_MODE");
-                       dbg("resp->result = %d", resp_set_plmn_selection_mode->result);
-                       telephony_network_complete_set_selection_mode(dbus_info->interface_object, dbus_info->invocation, resp_set_plmn_selection_mode->result);
-                       break;
+               dbg("TRESP_NETWORK_SET_SERVICE_DOMAIN - Result: [%s]",
+                       (resp_set_service_domain->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
 
-               case TRESP_NETWORK_GET_PLMN_SELECTION_MODE:
-                       dbg("receive TRESP_GET_PLMN_SELECTION_MODE");
-                       dbg("resp->mode = %d", resp_get_plmn_selection_mode->mode);
-                       switch (resp_get_plmn_selection_mode->mode) {
-                               case NETWORK_SELECT_MODE_GLOBAL_AUTOMATIC:
-                               case NETWORK_SELECT_MODE_GSM_AUTOMATIC:
-                                       telephony_network_complete_get_selection_mode(dbus_info->interface_object, dbus_info->invocation, 0, resp_get_plmn_selection_mode->result);
-                                       break;
-
-                               case NETWORK_SELECT_MODE_GSM_MANUAL:
-                                       telephony_network_complete_get_selection_mode(dbus_info->interface_object, dbus_info->invocation, 1, resp_get_plmn_selection_mode->result);
-                                       break;
-
-                               default:
-                                       telephony_network_complete_get_selection_mode(dbus_info->interface_object, dbus_info->invocation, -1, resp_get_plmn_selection_mode->result);
-                                       break;
-                       }
-                       break;
+               telephony_network_complete_set_service_domain(dbus_info->interface_object, dbus_info->invocation,
+                       resp_set_service_domain->result);
+       }
+       break;
 
-               case TRESP_NETWORK_SET_SERVICE_DOMAIN:
-                       dbg("receive TRESP_NETWORK_SET_SERVICE_DOMAIN");
-                       dbg("resp->result = %d", resp_set_service_domain->result);
-                       telephony_network_complete_set_service_domain(dbus_info->interface_object, dbus_info->invocation, resp_set_service_domain->result);
-                       break;
+       case TRESP_NETWORK_GET_SERVICE_DOMAIN: {
+               const struct tresp_network_get_service_domain *resp_get_service_domain = data;
 
-               case TRESP_NETWORK_GET_SERVICE_DOMAIN:
-                       dbg("receive TRESP_NETWORK_GET_SERVICE_DOMAIN");
-                       dbg("resp->domain = %d", resp_get_service_domain->domain);
-                       telephony_network_complete_get_service_domain(dbus_info->interface_object, dbus_info->invocation, resp_get_service_domain->domain, resp_get_service_domain->result);
-                       break;
+               dbg("TRESP_NETWORK_GET_SERVICE_DOMAIN - Result: [%s] Domain: [%d]",
+                       (resp_get_service_domain->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"),
+                       resp_get_service_domain->domain);
 
-               case TRESP_NETWORK_SET_BAND:
-                       dbg("receive TRESP_NETWORK_SET_BAND");
-                       dbg("resp->result = %d", resp_set_band->result);
-                       telephony_network_complete_set_band(dbus_info->interface_object, dbus_info->invocation, resp_set_band->result);
-                       break;
+               telephony_network_complete_get_service_domain(dbus_info->interface_object, dbus_info->invocation,
+                       resp_get_service_domain->domain, resp_get_service_domain->result);
+       }
+       break;
 
-               case TRESP_NETWORK_GET_BAND:
-                       dbg("receive TRESP_NETWORK_GET_BAND");
-                       dbg("resp->mode = %d", resp_get_band->mode);
-                       dbg("resp->band = %d", resp_get_band->band);
-                       telephony_network_complete_get_band(dbus_info->interface_object, dbus_info->invocation, resp_get_band->band, resp_get_band->mode, resp_get_band->result);
-                       break;
+       case TRESP_NETWORK_SET_BAND: {
+               const struct tresp_network_set_band *resp_set_band = data;
 
-               case TRESP_NETWORK_SET_MODE:
-                       dbg("receive TRESP_NETWORK_SET_MODE");
-                       dbg("resp->result = %d", resp_set_mode->result);
-                       telephony_network_complete_set_mode(dbus_info->interface_object, dbus_info->invocation, resp_set_mode->result);
-                       break;
+               dbg("TRESP_NETWORK_SET_BAND - Result: [%s]",
+                       (resp_set_band->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
 
-               case TRESP_NETWORK_GET_MODE:
-                       dbg("receive TRESP_NETWORK_GET_MODE");
-                       dbg("resp->mode = %d", resp_get_mode->mode);
-                       telephony_network_complete_get_mode(dbus_info->interface_object, dbus_info->invocation, resp_get_mode->mode, resp_get_mode->result);
-                       break;
+               telephony_network_complete_set_band(dbus_info->interface_object, dbus_info->invocation,
+                       resp_set_band->result);
+       }
+       break;
 
-               case TRESP_NETWORK_SET_PREFERRED_PLMN:
-                       dbg("receive TRESP_NETWORK_SET_PREFERRED_PLMN");
-                       dbg("resp->result = %d", resp_set_preferred_plmn->result);
-                       telephony_network_complete_set_preferred_plmn(dbus_info->interface_object, dbus_info->invocation, resp_set_preferred_plmn->result);
-                       break;
+       case TRESP_NETWORK_GET_BAND: {
+               const struct tresp_network_get_band *resp_get_band = data;
 
-               case TRESP_NETWORK_GET_PREFERRED_PLMN:
-                       dbg("receive TRESP_NETWORK_GET_PREFERRED_PLMN");
-                       dbg("resp->result = %d", resp_get_preferred_plmn->result);
-                       {
-                               GVariant *result = NULL;
-                               GVariantBuilder b;
+               dbg("TRESP_NETWORK_GET_BAND - Result: [%s] Mode: [%s] Band: [%d]",
+                       (resp_get_band->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"),
+                       (resp_get_band->mode == NETWORK_BAND_MODE_PREFERRED ? "Preferred" :
+                       (resp_get_band->mode == NETWORK_BAND_MODE_ONLY ? "Only" :
+                       "Unknown")), resp_get_band->band);
 
-                               g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+               telephony_network_complete_get_band(dbus_info->interface_object, dbus_info->invocation,
+                       resp_get_band->band, resp_get_band->mode, resp_get_band->result);
+       }
+       break;
 
-                               for (i = 0; i < resp_get_preferred_plmn->list_count; i++) {
-                                       g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+       case TRESP_NETWORK_SET_MODE: {
+               const struct tresp_network_set_mode *resp_set_mode = data;
 
-                                       g_variant_builder_add(&b, "{sv}", "plmn",
-                                                       g_variant_new_string(resp_get_preferred_plmn->list[i].plmn));
-                                       g_variant_builder_add(&b, "{sv}", "act", g_variant_new_int32(resp_get_preferred_plmn->list[i].act));
-                                       g_variant_builder_add(&b, "{sv}", "index",
-                                                       g_variant_new_int32(resp_get_preferred_plmn->list[i].ef_index));
+               dbg("TRESP_NETWORK_SET_MODE - Result: [%s]",
+                       (resp_set_mode->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
 
-                                       buf = _get_network_name_by_plmn(co_network, resp_get_preferred_plmn->list[i].plmn);
-                                       if (buf)
-                                               g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string(buf));
-                                       else
-                                               g_variant_builder_add(&b, "{sv}", "name",
-                                                               g_variant_new_string(resp_get_preferred_plmn->list[i].plmn));
+               telephony_network_complete_set_mode(dbus_info->interface_object, dbus_info->invocation,
+                       resp_set_mode->result);
+       }
+       break;
 
-                                       g_variant_builder_close(&b);
-                               }
+       case TRESP_NETWORK_GET_MODE: {
+               const struct tresp_network_get_mode *resp_get_mode = data;
 
-                               result = g_variant_builder_end(&b);
+               dbg("TRESP_NETWORK_GET_MODE - Result: [%s] Mode: [%d]",
+                       (resp_get_mode->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"),
+                       resp_get_mode->mode);
 
-                               telephony_network_complete_get_preferred_plmn(dbus_info->interface_object, dbus_info->invocation,
-                                               result, resp_get_preferred_plmn->result);
-                       }
-                       break;
+               telephony_network_complete_get_mode(dbus_info->interface_object, dbus_info->invocation,
+                       resp_get_mode->mode, resp_get_mode->result);
+       }
+       break;
 
-               case TRESP_NETWORK_SET_CANCEL_MANUAL_SEARCH:
-                       dbg("receive TRESP_NETWORK_SET_CANCEL_MANUAL_SEARCH");
-                       dbg("resp->result = %d", resp_set_cancel_manual_search->result);
-                       telephony_network_complete_search_cancel(dbus_info->interface_object, dbus_info->invocation, resp_set_cancel_manual_search->result);
-                       break;
+       case TRESP_NETWORK_GET_NEIGHBORING_CELL_INFO: {
+               const struct tresp_network_get_neighboring_cell_info *resp_get_ngbr_cell_info = data;
+               GVariant *neighboring_cell_info_result = NULL;
+               GVariant *value = NULL;
+               GVariantBuilder b;
+               enum telephony_network_access_technology act;
+               int i = 0;
 
-               case TRESP_NETWORK_GET_SERVING_NETWORK:
-                       dbg("receive TRESP_NETWORK_GET_SERVING_NETWORK");
-                       dbg("resp->act = %d", resp_get_serving_network->act);
-                       dbg("resp->plmn = %s", resp_get_serving_network->plmn);
-                       dbg("resp->lac = %d", resp_get_serving_network->gsm.lac);
-                       telephony_network_complete_get_serving_network(dbus_info->interface_object, dbus_info->invocation,
-                                       resp_get_serving_network->act,
-                                       resp_get_serving_network->plmn,
-                                       resp_get_serving_network->gsm.lac,
-                                       resp_get_serving_network->result);
-                       break;
+               dbg("TRESP_NETWORK_GET_NEIGHBORING_CELL_INFO - Result: [%s]",
+                       (resp_get_ngbr_cell_info->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
 
-               default:
-                       dbg("not handled cmd[0x%x]", command);
-                       break;
+               act = resp_get_ngbr_cell_info->info.serving.act;
+
+               g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+
+               /* Fill Serving cell parameter */
+               value = g_variant_new("(iii)",
+                               resp_get_ngbr_cell_info->info.serving.act,
+                               resp_get_ngbr_cell_info->info.serving.mcc,
+                               resp_get_ngbr_cell_info->info.serving.mnc);
+               g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+               g_variant_builder_add(&b, "{sv}", "serving", value);
+               g_variant_builder_close(&b);
+
+               if (act >= NETWORK_ACT_GSM && act <= NETWORK_ACT_EGPRS) {
+                       value = g_variant_new("(iiiii)",
+                                       resp_get_ngbr_cell_info->info.serving.cell.geran.cell_id,
+                                       resp_get_ngbr_cell_info->info.serving.cell.geran.lac,
+                                       resp_get_ngbr_cell_info->info.serving.cell.geran.bcch,
+                                       resp_get_ngbr_cell_info->info.serving.cell.geran.bsic,
+                                       resp_get_ngbr_cell_info->info.serving.cell.geran.rxlev);
+                       g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+                       g_variant_builder_add(&b, "{sv}", "g_serving", value);
+                       g_variant_builder_close(&b);
+
+               }
+               else if (act >= NETWORK_ACT_UMTS && act <= NETWORK_ACT_GSM_UTRAN) {
+                       value = g_variant_new("(iiiii)",
+                                       resp_get_ngbr_cell_info->info.serving.cell.umts.cell_id,
+                                       resp_get_ngbr_cell_info->info.serving.cell.umts.lac,
+                                       resp_get_ngbr_cell_info->info.serving.cell.umts.arfcn,
+                                       resp_get_ngbr_cell_info->info.serving.cell.umts.psc,
+                                       resp_get_ngbr_cell_info->info.serving.cell.umts.rscp);
+                       g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+                       g_variant_builder_add(&b, "{sv}", "u_serving", value);
+                       g_variant_builder_close(&b);
+               }
+               else if (act == NETWORK_ACT_LTE) {
+                       value = g_variant_new("(iiiii)",
+                                       resp_get_ngbr_cell_info->info.serving.cell.lte.cell_id,
+                                       resp_get_ngbr_cell_info->info.serving.cell.lte.lac,
+                                       resp_get_ngbr_cell_info->info.serving.cell.lte.earfcn,
+                                       resp_get_ngbr_cell_info->info.serving.cell.lte.tac,
+                                       resp_get_ngbr_cell_info->info.serving.cell.lte.rssi);
+                       g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+                       g_variant_builder_add(&b, "{sv}", "l_serving", value);
+                       g_variant_builder_close(&b);
+               }
+
+               /* Fill GERAN neighbor cell parameter */
+               for (i = 0; i < resp_get_ngbr_cell_info->info.geran_list_count; i++) {
+                       value = g_variant_new("(iiiii)",
+                               resp_get_ngbr_cell_info->info.geran_list[i].cell_id,
+                               resp_get_ngbr_cell_info->info.geran_list[i].lac,
+                               resp_get_ngbr_cell_info->info.geran_list[i].bcch,
+                               resp_get_ngbr_cell_info->info.geran_list[i].bsic,
+                               resp_get_ngbr_cell_info->info.geran_list[i].rxlev);
+                       g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+                       g_variant_builder_add(&b, "{sv}", "geran", value);
+                       g_variant_builder_close(&b);
+               }
+
+               /* Fill UMTS neighbor cell parameter */
+               for (i = 0; i < resp_get_ngbr_cell_info->info.umts_list_count; i++) {
+                       value = g_variant_new("(iiiii)",
+                               resp_get_ngbr_cell_info->info.umts_list[i].cell_id,
+                               resp_get_ngbr_cell_info->info.umts_list[i].lac,
+                               resp_get_ngbr_cell_info->info.umts_list[i].arfcn,
+                               resp_get_ngbr_cell_info->info.umts_list[i].psc,
+                               resp_get_ngbr_cell_info->info.umts_list[i].rscp);
+                       g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+                       g_variant_builder_add(&b, "{sv}", "umts", value);
+                       g_variant_builder_close(&b);
+               }
+               neighboring_cell_info_result = g_variant_builder_end(&b);
+
+               telephony_network_complete_get_ngbr_cell_info(dbus_info->interface_object, dbus_info->invocation,
+                       neighboring_cell_info_result, resp_get_ngbr_cell_info->result);
+       }
+       break;
+
+       case TRESP_NETWORK_SET_PREFERRED_PLMN: {
+               const struct tresp_network_set_preferred_plmn *resp_set_preferred_plmn = data;
+
+               dbg("TRESP_NETWORK_SET_PREFERRED_PLMN - Result: [%s]",
+                       (resp_set_preferred_plmn->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
+
+               telephony_network_complete_set_preferred_plmn(dbus_info->interface_object, dbus_info->invocation,
+                       resp_set_preferred_plmn->result);
+       }
+       break;
+
+       case TRESP_NETWORK_GET_PREFERRED_PLMN: {
+               const struct tresp_network_get_preferred_plmn *resp_get_preferred_plmn = data;
+               GVariant *preferred_plmn_result = NULL;
+               GVariantBuilder b;
+               int i = 0;
+
+               dbg("TRESP_NETWORK_GET_PREFERRED_PLMN - Result: [%s] Count: [%d]",
+                       (resp_get_preferred_plmn->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"),
+                       resp_get_preferred_plmn->list_count);
+
+               g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+               for (i = 0; i < resp_get_preferred_plmn->list_count; i++) {
+                       g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+
+                       g_variant_builder_add(&b, "{sv}", "plmn",
+                                       g_variant_new_string(resp_get_preferred_plmn->list[i].plmn));
+                       g_variant_builder_add(&b, "{sv}", "act", g_variant_new_int32(resp_get_preferred_plmn->list[i].act));
+                       g_variant_builder_add(&b, "{sv}", "index",
+                                       g_variant_new_int32(resp_get_preferred_plmn->list[i].ef_index));
+                       g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string(resp_get_preferred_plmn->list[i].name));
+
+                       g_variant_builder_close(&b);
+               }
+               preferred_plmn_result = g_variant_builder_end(&b);
+
+               telephony_network_complete_get_preferred_plmn(dbus_info->interface_object, dbus_info->invocation,
+                               preferred_plmn_result, resp_get_preferred_plmn->result);
+       }
+       break;
+
+       case TRESP_NETWORK_SET_CANCEL_MANUAL_SEARCH: {
+               const struct tresp_network_set_cancel_manual_search *resp_set_cancel_manual_search = data;
+
+               dbg("TRESP_NETWORK_SET_CANCEL_MANUAL_SEARCH - Result: [%s]",
+                       (resp_set_cancel_manual_search->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
+
+               telephony_network_complete_search_cancel(dbus_info->interface_object, dbus_info->invocation,
+                       resp_set_cancel_manual_search->result);
+       }
+       break;
+
+       case TRESP_NETWORK_GET_SERVING_NETWORK: {
+               const struct tresp_network_get_serving_network *resp_get_serving_network = data;
+
+               dbg("TRESP_NETWORK_GET_SERVING_NETWORK - Result: [%s] AcT: [%d] PLMN: [%s] LAC: [%d])",
+                       (resp_get_serving_network->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"),
+                       resp_get_serving_network->act, resp_get_serving_network->plmn, resp_get_serving_network->gsm.lac);
+
+               telephony_network_complete_get_serving_network(dbus_info->interface_object, dbus_info->invocation,
+                               resp_get_serving_network->act, resp_get_serving_network->plmn,
+                               resp_get_serving_network->gsm.lac, resp_get_serving_network->result);
+       }
+       break;
+
+       case TRESP_NETWORK_SET_DEFAULT_DATA_SUBSCRIPTION: {
+               const struct tresp_network_set_default_data_subscription *resp_set_default_data_subs = data;
+
+               dbg("TRESP_NETWORK_SET_DEFAULT_SUBSCRIPTION - Result: [%s]",
+                       (resp_set_default_data_subs->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
+
+               telephony_network_complete_set_default_data_subscription(dbus_info->interface_object, dbus_info->invocation,
+                       resp_set_default_data_subs->result);
+       }
+       break;
+
+       case TRESP_NETWORK_GET_DEFAULT_DATA_SUBSCRIPTION: {
+               const struct tresp_network_get_default_data_subs *resp_get_default_data_subs = data;
+
+               dbg("TRESP_NETWORK_GET_DEFAULT_SUBSCRIPTION - Result: [%s] 'default' Data subscription: [%s]",
+                       (resp_get_default_data_subs->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"),
+                       (resp_get_default_data_subs->default_subs == NETWORK_DEFAULT_DATA_SUBS_SIM1 ? "SIM1" :
+                       (resp_get_default_data_subs->default_subs == NETWORK_DEFAULT_DATA_SUBS_SIM2 ? "SIM2" :
+                       "Unknown")));
+
+               telephony_network_complete_get_default_data_subscription(dbus_info->interface_object, dbus_info->invocation,
+                       resp_get_default_data_subs->default_subs, resp_get_default_data_subs->result);
+       }
+       break;
+
+       case TRESP_NETWORK_SET_DEFAULT_SUBSCRIPTION: {
+               const struct tresp_network_set_default_subs *resp_set_default_subs = data;
+
+               dbg("TRESP_NETWORK_SET_DEFAULT_SUBSCRIPTION - Result: [%s]",
+                       (resp_set_default_subs->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
+
+               telephony_network_complete_set_default_subscription(dbus_info->interface_object, dbus_info->invocation,
+                       resp_set_default_subs->result );
+       }
+       break;
+
+       case TRESP_NETWORK_GET_DEFAULT_SUBSCRIPTION: {
+               const struct tresp_network_get_default_subs *resp_get_default_subs = data;
+
+               dbg("TRESP_NETWORK_GET_DEFAULT_SUBSCRIPTION - Result: [%s] 'default' subscription: [%s]",
+                       (resp_get_default_subs->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"),
+                       (resp_get_default_subs->default_subs == NETWORK_DEFAULT_SUBS_SIM1 ? "SIM1" :
+                       (resp_get_default_subs->default_subs == NETWORK_DEFAULT_SUBS_SIM2 ? "SIM2" :
+                       "Unknown")));
+
+               telephony_network_complete_get_default_subscription(dbus_info->interface_object, dbus_info->invocation,
+                       resp_get_default_subs->default_subs, resp_get_default_subs->result );
+       }
+       break;
+
+       default:
+               err("Unhandled/Unknown Response!!!");
+       break;
        }
 
        return TRUE;
 }
 
-gboolean dbus_plugin_network_notification(struct custom_data *ctx, const char *plugin_name, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data)
+gboolean dbus_plugin_network_notification(struct custom_data *ctx, CoreObject *source,
+       TelephonyObjectSkeleton *object, enum tcore_notification_command command,
+       unsigned int data_len, const void *data)
 {
        TelephonyNetwork *network;
-       const struct tnoti_network_registration_status *registration = data;
-       const struct tnoti_network_change *change = data;
-       const struct tnoti_network_icon_info *icon_info = data;
-       const struct tnoti_network_timeinfo *time_info = data;
-       const struct tnoti_network_identity *identity = data;
-       const struct tnoti_network_location_cellinfo *location = data;
-
-       if (!object) {
-               dbg("object is NULL");
-               return FALSE;
-       }
+       const char *cp_name;
+
+       cp_name = tcore_server_get_cp_name_by_plugin(tcore_object_ref_plugin(source));
 
        network = telephony_object_peek_network(TELEPHONY_OBJECT(object));
-       dbg("network = %p", network);
+       if (network == NULL) {
+               err("Network object is NULL!!!");
+               return FALSE;
+       }
 
        switch (command) {
-               case TNOTI_NETWORK_REGISTRATION_STATUS:
-                       telephony_network_emit_registration_status(network,
-                                       registration->cs_domain_status,
-                                       registration->ps_domain_status,
-                                       registration->service_type,
-                                       registration->roaming_status);
-                       break;
+       case TNOTI_NETWORK_REGISTRATION_STATUS: {
+               const struct tnoti_network_registration_status *reg = data;
 
-               case TNOTI_NETWORK_CHANGE:
-                       telephony_network_emit_change(network,
-                                       change->act,
-                                       change->plmn,
-                                       change->gsm.lac);
-                       break;
+               info("[DBUSINFO][%s] NET_REGI_STATUS. (cs:[%d] ps:[%d] svc:[%d] roam:[%d])",
+                       cp_name, reg->cs_domain_status, reg->ps_domain_status, reg->service_type, reg->roaming_status);
 
-               case TNOTI_NETWORK_ICON_INFO:
-                       telephony_network_emit_info(network,
-                                       icon_info->rssi,
-                                       icon_info->battery);
-                       break;
+#ifdef ENABLE_KPI_LOGS
+               /* We ignore No SIM present case for KPI */
+               if (reg->cs_domain_status == NETWORK_SERVICE_DOMAIN_STATUS_FULL
+                       && telephony_network_get_circuit_status(network) != NETWORK_SERVICE_DOMAIN_STATUS_FULL)
+                       TIME_CHECK("[%s] CS Network Full", cp_name);
 
-               case TNOTI_NETWORK_TIMEINFO:
-                       telephony_network_emit_time_info(network,
-                                       time_info->year,
-                                       time_info->month,
-                                       time_info->day,
-                                       time_info->hour,
-                                       time_info->minute,
-                                       time_info->second,
-                                       time_info->wday,
-                                       time_info->gmtoff,
-                                       time_info->dstoff,
-                                       time_info->isdst,
-                                       time_info->plmn);
-                       break;
+               if (reg->ps_domain_status == NETWORK_SERVICE_DOMAIN_STATUS_FULL
+                       && telephony_network_get_packet_status(network) != NETWORK_SERVICE_DOMAIN_STATUS_FULL)
+                       TIME_CHECK("[%s] PS Network Full", cp_name);
+#endif
 
-               case TNOTI_NETWORK_IDENTITY:
-                       telephony_network_emit_identity(network,
-                                       identity->plmn,
-                                       identity->short_name,
-                                       identity->full_name);
-                       break;
+               /* Update properties */
+               telephony_network_set_circuit_status (network, reg->cs_domain_status);
+               telephony_network_set_packet_status (network, reg->ps_domain_status);
+               telephony_network_set_service_type (network, reg->service_type);
+               telephony_network_set_roaming_status (network, reg->roaming_status);
+
+               /* Update Network name */
+               __update_network_name(network, source, cp_name);
+
+               /* Emit Signal */
+               telephony_network_emit_registration_status(network,
+                               reg->cs_domain_status,
+                               reg->ps_domain_status,
+                               reg->service_type,
+                               reg->roaming_status);
+       }
+       break;
 
-               case TNOTI_NETWORK_LOCATION_CELLINFO:
-                       telephony_network_emit_cell_info(network,
-                                       location->lac,
-                                       location->cell_id);
-                       break;
+       case TNOTI_NETWORK_CHANGE: {
+               const struct tnoti_network_change *change = data;
 
-               default:
-                       dbg("not handled cmd[0x%x]", command);
-                       break;
+               info("[DBUSINFO][%s] NET_CHANGE. (plmn:[%s] lac:[%d])",
+                       cp_name, change->plmn, change->gsm.lac);
+
+               /* Update properties */
+               telephony_network_set_plmn (network, change->plmn);
+               telephony_network_set_lac (network, change->gsm.lac);
+
+               /* Update Network name */
+               __update_network_name(network, source, cp_name);
+
+               /* Emit Signal */
+               telephony_network_emit_change(network,
+                               change->act,
+                               change->plmn);
+       }
+       break;
+
+       case TNOTI_NETWORK_TIMEINFO: {
+               const struct tnoti_network_timeinfo *time_info = data;
+
+               info("[DBUSINFO][%s] NET_TIMEINFO", cp_name);
+
+               /* Emit signal */
+               telephony_network_emit_time_info(network,
+                               time_info->year,
+                               time_info->month,
+                               time_info->day,
+                               time_info->hour,
+                               time_info->minute,
+                               time_info->second,
+                               time_info->wday,
+                               time_info->gmtoff,
+                               time_info->dstoff,
+                               time_info->isdst,
+                               time_info->plmn);
+       }
+       break;
+
+       case TNOTI_NETWORK_ICON_INFO: {
+               const struct tnoti_network_icon_info *icon_info = data;
+
+               /* Update property */
+               if (icon_info->type & NETWORK_ICON_INFO_RSSI) {
+                       info("[DBUSINFO][%s] NET_ICON_INFO (Ant:[%d])", cp_name, icon_info->rssi);
+                       telephony_network_set_sig_level (network, icon_info->rssi);
+               }
+       }
+       break;
+
+       case TNOTI_NETWORK_IDENTITY: {
+               const struct tnoti_network_identity *identity = data;
+
+               info("[DBUSINFO][%s] NET_IDENTITY (long:[%s] short:[%s] plmn:[%s])",
+                       cp_name, identity->full_name, identity->short_name, identity->plmn);
+
+               /* Update properties */
+               telephony_network_set_plmn (network, identity->plmn);
+
+               /* Update Network name */
+               __update_network_name (network, source, cp_name);
+
+               /* Emit Signal */
+               telephony_network_emit_identity(network,
+                               identity->plmn,
+                               identity->short_name,
+                               identity->full_name);
+       }
+       break;
+
+       case TNOTI_NETWORK_LOCATION_CELLINFO: {
+               const struct tnoti_network_location_cellinfo *location = data;
+
+               info("[DBUSINFO][%s] NET_LOCATION_CELLINFO (lac:[%d] cell_id:[%d])",
+                       cp_name, location->lac, location->cell_id);
+
+               /* Update properties */
+               telephony_network_set_lac (network, location->lac);
+               telephony_network_set_cell_id (network, location->cell_id);
+
+               /* Emit signal */
+               telephony_network_emit_cell_info(network,
+                               location->lac,
+                               location->cell_id);
+       }
+       break;
+
+       case TNOTI_NETWORK_SIGNAL_STRENGTH: {
+               const struct tnoti_network_signal_strength *signal_strength = data;
+
+               info("[DBUSINFO][%s] NET_SIGNAL_STRENGTH (dbm:[%d])", cp_name, signal_strength->dbm);
+
+               /* Update properties */
+               telephony_network_set_sig_dbm (network, signal_strength->dbm);
+
+               /* Emit signal */
+               telephony_network_emit_signal_strength(network,
+                               signal_strength->dbm);
+       }
+       break;
+
+       case TNOTI_NETWORK_DEFAULT_DATA_SUBSCRIPTION: {
+               const struct tnoti_network_default_data_subs *default_data_subs_info = data;
+
+               info("[DBUSINFO][%s] NET_DEFAULT_DATA_SUBSCRIPTION (default:[%d])", cp_name, default_data_subs_info->default_subs);
+
+               /* Emit signal */
+               telephony_network_emit_default_data_subscription(network,
+                               default_data_subs_info->default_subs);
+       }
+       break;
+
+       case TNOTI_NETWORK_DEFAULT_SUBSCRIPTION: {
+               const struct tnoti_network_default_subs *default_subs_info = data;
+
+               info("[DBUSINFO][%s] NET_DEFAULT_SUBSCRIPTION (default:[%d])", cp_name, default_subs_info->default_subs);
+
+               /* Emit signal */
+               telephony_network_emit_default_subscription(network,
+                               default_subs_info->default_subs);
+       }
+       break;
+
+       default:
+               err("Unhandled/Unknown Notification!!!");
+       break;
        }
 
        return TRUE;
diff --git a/src/oem.c b/src/oem.c
new file mode 100644 (file)
index 0000000..3b3b20c
--- /dev/null
+++ b/src/oem.c
@@ -0,0 +1,155 @@
+#include <stdio.h>
+#include <string.h>
+#include <pthread.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <time.h>
+#include <glib.h>
+#include <gio/gio.h>
+
+#include <tcore.h>
+#include <server.h>
+#include <plugin.h>
+#include <hal.h>
+#include <communicator.h>
+#include <queue.h>
+#include <user_request.h>
+
+#include "generated-code.h"
+#include "common.h"
+
+#define TYPE_FACTORY           0x00020000
+#define MAKE_REQ_CMD(id)       (TREQ_CUSTOM|TYPE_FACTORY|id)
+#define GET_OEM_ID(cmd)        (cmd&0x0000FFFF)
+
+static void _emit_oem_response(struct dbus_request_info *dbus_info, int oem_id, const void *data, unsigned int data_len)
+{
+       if (!dbus_info || !oem_id || !data || !data_len) {
+               dbg("Invalid Data! dbus_info=%p, oem_id=0x%x, data=%p, data_len=%d", dbus_info, oem_id, data, data_len);
+               return ;
+       }
+
+       if (dbus_info->interface_object) {
+               gchar *encoded_data = g_base64_encode((const guchar*)data, data_len);
+               if (dbus_info->invocation) {
+                       telephony_oem_complete_send_oem_data_with_response(dbus_info->interface_object, dbus_info->invocation, oem_id, encoded_data);
+               } else {
+                       telephony_oem_emit_oem_data(dbus_info->interface_object, oem_id, encoded_data);
+               }
+               g_free(encoded_data);
+       }
+}
+
+static void _emit_oem_notification(TelephonyOEM *oem, int oem_id, const void *data, unsigned int data_len)
+{
+       gchar *encoded_data = NULL;
+
+       if (!oem || !oem_id || !data || !data_len) {
+               dbg("Invalid Data! oem=%p, oem_id=0x%x, data=%p, data_len=%d", oem, oem_id, data, data_len);
+               return ;
+       }
+
+       encoded_data = g_base64_encode((const guchar*)data, data_len);
+       telephony_oem_emit_oem_data(oem, oem_id, encoded_data);
+       g_free(encoded_data);
+}
+
+static gboolean
+send_oem_data(TelephonyOEM *oem,
+       GDBusMethodInvocation *invocation,
+       gint arg_oem_id,
+       const gchar *arg_data,
+       gpointer user_data,
+       gboolean remove_invocation)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur = NULL;
+       TReturn ret;
+       gint result = 1;
+       guchar *decoded_data = NULL;
+       gsize length;
+
+       if (!check_access_control (invocation, AC_MODEM, "w"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, oem, invocation);
+       decoded_data = g_base64_decode(arg_data, &length);
+
+       tcore_user_request_set_data(ur, length, decoded_data);
+       g_free(decoded_data);
+
+       tcore_user_request_set_command(ur, MAKE_REQ_CMD(arg_oem_id));
+
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
+               return TRUE;
+       }
+
+       if (remove_invocation) {
+               struct dbus_request_info *dbus_info = tcore_user_request_ref_user_info(ur);
+               if (dbus_info)
+                       dbus_info->invocation = NULL;
+
+               telephony_oem_complete_send_oem_data(oem, invocation, result);
+       }
+       return TRUE;
+}
+
+static gboolean
+on_send_oem_data (TelephonyOEM *oem,
+       GDBusMethodInvocation *invocation,
+       gint arg_oem_id,
+       const gchar *arg_data,
+       gpointer user_data)
+{
+       return send_oem_data(oem, invocation, arg_oem_id, arg_data, user_data, TRUE);
+}
+
+static gboolean
+on_send_oem_data_with_response (TelephonyOEM *oem,
+       GDBusMethodInvocation *invocation,
+       gint arg_oem_id,
+       const gchar *arg_data,
+       gpointer user_data)
+{
+       return send_oem_data(oem, invocation, arg_oem_id, arg_data, user_data, FALSE);
+}
+
+gboolean dbus_plugin_setup_oem_interface(TelephonyObjectSkeleton *object, struct custom_data *ctx)
+{
+       TelephonyOEM *oem;
+
+       oem = telephony_oem_skeleton_new();
+       telephony_object_skeleton_set_oem(object, oem);
+
+       g_object_unref(oem);
+
+       dbg("oem = %p", oem);
+
+       g_signal_connect (oem,
+                       "handle-send-oem-data",
+                       G_CALLBACK (on_send_oem_data),
+                       ctx);
+
+       g_signal_connect (oem,
+                       "handle-send-oem-data-with-response",
+                       G_CALLBACK (on_send_oem_data_with_response),
+                       ctx);
+
+       return TRUE;
+}
+
+gboolean dbus_plugin_oem_response(struct custom_data *ctx, UserRequest *ur, struct dbus_request_info *dbus_info, enum tcore_response_command command, unsigned int data_len, const void *data)
+{
+       _emit_oem_response(dbus_info, GET_OEM_ID(command), data, data_len);
+       return TRUE;
+}
+
+gboolean dbus_plugin_oem_notification(struct custom_data *ctx, CoreObject *source, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data)
+{
+       _emit_oem_notification(telephony_object_peek_oem(TELEPHONY_OBJECT(object)), GET_OEM_ID(command), data, data_len);
+       return TRUE;
+}
+
old mode 100644 (file)
new mode 100755 (executable)
index 8acd56e..543b930
@@ -1,5 +1,5 @@
 /*
- * tel-plugin-socket-communicator
+ * tel-plugin-dbus-tapi
  *
  * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
  *
@@ -22,7 +22,6 @@
 #include <string.h>
 #include <stdlib.h>
 #include <errno.h>
-#include <glib-object.h>
 
 #include <tcore.h>
 #include <server.h>
 
 #include "generated-code.h"
 #include "common.h"
+#include "sat_manager.h"
+
+static const char* dbg_dbus_pb_type_name[] = {"PB_TYPE_FDN", "PB_TYPE_ADN", "PB_TYPE_SDN",
+               "PB_TYPE_USIM", "PB_TYPE_AAS", "PB_TYPE_GAS", };
+static const char* dbg_dbus_pb_adf_field_name[] = { "NO VALUE 0", "PB_FIELD_NAME", "PB_FIELD_NUMBER",
+               "PB_FIELD_ANR1", "PB_FIELD_ANR2", "PB_FIELD_ANR3", "PB_FIELD_EMAIL1",
+               "PB_FIELD_EMAIL2", "PB_FIELD_EMAIL3", "PB_FIELD_EMAIL4", "PB_FIELD_SNE",
+               "PB_FIELD_GRP", "PB_FIELD_PBC" };
+static const char* dbg_dbus_pb_ton_name[] = { "PB_TON_UNKNOWN", "PB_TON_INTERNATIONAL",
+               "PB_TON_NATIONAL", "PB_TON_NETWORK_SPECIFIC", "PB_TON_DEDICATED_ACCESS",
+               "PB_TON_ALPHA_NUMERIC", "PB_TON_ABBREVIATED_NUMBER",
+               "PB_TON_RESERVED_FOR_EXT", };
 
 static gboolean on_phonebook_get_init_status(TelephonyPhonebook *phonebook, GDBusMethodInvocation *invocation, gpointer user_data)
 {
@@ -48,23 +59,37 @@ static gboolean on_phonebook_get_init_status(TelephonyPhonebook *phonebook, GDBu
        CoreObject *co_pb = NULL;
        TcorePlugin *plugin = NULL;
 
-       dbg("Func Entrance");
+       if (!check_access_control (invocation, AC_PHONEBOOK, "r"))
+               return TRUE;
 
-       plugin = tcore_server_find_plugin(ctx->server, TCORE_PLUGIN_DEFAULT);
+       plugin = tcore_server_find_plugin(ctx->server, GET_CP_NAME(invocation));
        co_list = tcore_plugin_get_core_objects_bytype(plugin, CORE_OBJECT_TYPE_PHONEBOOK);
        if (!co_list) {
                dbg("error- co_list is NULL");
+               FAIL_RESPONSE(invocation, DEFAULT_MSG_REQ_FAILED);
+               return TRUE;
        }
        co_pb = (CoreObject *)co_list->data;
        g_slist_free(co_list);
 
        if (!co_pb) {
                dbg("error- co_pb is NULL");
+               FAIL_RESPONSE(invocation, DEFAULT_MSG_REQ_FAILED);
+               return TRUE;
        }
 
        pb_status = tcore_phonebook_get_status(co_pb);
        list = tcore_phonebook_get_support_list(co_pb);
 
+       if (!list) {
+               dbg("Supported phonebook list is NULL");
+               FAIL_RESPONSE(invocation, DEFAULT_MSG_REQ_FAILED);
+               return TRUE;
+       }
+
+       dbg("fdn[%d],adn[%d],sdn[%d],usim[%d],aas[%d],gas[%d]"
+               ,list->b_fdn,list->b_adn,list->b_sdn,list->b_usim,list->b_aas,list->b_gas);
+
        telephony_phonebook_complete_get_init_status(phonebook, invocation,
                        pb_status,
                        list->b_fdn,
@@ -74,6 +99,8 @@ static gboolean on_phonebook_get_init_status(TelephonyPhonebook *phonebook, GDBu
                        list->b_aas,
                        list->b_gas);
 
+       g_free(list);
+
        return TRUE;
 }
 
@@ -81,18 +108,46 @@ static gboolean on_phonebook_get_count(TelephonyPhonebook *phonebook, GDBusMetho
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
-
+       TReturn ret;
        struct treq_phonebook_get_count pb_count;
+       TcorePlugin *plugin = NULL;
+       GSList *co_list = NULL;
+       CoreObject *co_pb = NULL;
+       gboolean pb_status = FALSE;
+
+       if (!check_access_control (invocation, AC_PHONEBOOK, "r"))
+               return TRUE;
+
+       plugin = tcore_server_find_plugin(ctx->server, GET_CP_NAME(invocation));
+       co_list = tcore_plugin_get_core_objects_bytype(plugin, CORE_OBJECT_TYPE_PHONEBOOK);
+       if (!co_list) {
+               dbg("error- co_list is NULL");
+               FAIL_RESPONSE(invocation, DEFAULT_MSG_REQ_FAILED);
+               return TRUE;
+       }
+       co_pb = (CoreObject *)co_list->data;
+       g_slist_free(co_list);
+
+       pb_status = tcore_phonebook_get_status(co_pb);
+
+       if(pb_status == FALSE) {
+               dbg("pb_init is not completed yet.");
+               telephony_phonebook_complete_get_count(phonebook, invocation, PB_ACCESS_CONDITION_NOT_SATISFIED, 0, 0, 0);
+               return TRUE;
+       }
 
        ur = MAKE_UR(ctx, phonebook, invocation);
        memset(&pb_count, 0, sizeof(struct treq_phonebook_get_count));
 
        pb_count.phonebook_type = arg_req_type;
-
+       dbg("req phonebook_type[%d][%s]", pb_count.phonebook_type, dbg_dbus_pb_type_name[pb_count.phonebook_type]);
        tcore_user_request_set_data(ur, sizeof(struct treq_phonebook_get_count), &pb_count);
        tcore_user_request_set_command(ur, TREQ_PHONEBOOK_GETCOUNT);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
-
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if(ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE(invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
+       }
        return TRUE;
 }
 
@@ -100,17 +155,47 @@ static gboolean on_phonebook_get_info(TelephonyPhonebook *phonebook, GDBusMethod
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
-
+       TReturn ret;
        struct treq_phonebook_get_info pb_info;
+       TcorePlugin *plugin = NULL;
+       GSList *co_list = NULL;
+       CoreObject *co_pb = NULL;
+       gboolean pb_status = FALSE;
+
+       if (!check_access_control (invocation, AC_PHONEBOOK, "r"))
+               return TRUE;
+
+       plugin = tcore_server_find_plugin(ctx->server, GET_CP_NAME(invocation));
+       co_list = tcore_plugin_get_core_objects_bytype(plugin, CORE_OBJECT_TYPE_PHONEBOOK);
+       if (!co_list) {
+               dbg("error- co_list is NULL");
+               FAIL_RESPONSE(invocation, DEFAULT_MSG_REQ_FAILED);
+               return TRUE;
+       }
+       co_pb = (CoreObject *)co_list->data;
+       g_slist_free(co_list);
+
+       pb_status = tcore_phonebook_get_status(co_pb);
+
+       if(pb_status == FALSE) {
+               dbg("pb_init is not completed yet.");
+               telephony_phonebook_complete_get_info(phonebook, invocation, PB_ACCESS_CONDITION_NOT_SATISFIED, 0, 0, 0, 0, 0, 0);
+               return TRUE;
+       }
 
        ur = MAKE_UR(ctx, phonebook, invocation);
        memset(&pb_info, 0, sizeof(struct treq_phonebook_get_info));
 
        pb_info.phonebook_type = arg_req_type;
-
+       dbg("req phonebook_type[%d][%s]", pb_info.phonebook_type, dbg_dbus_pb_type_name[pb_info.phonebook_type]);
        tcore_user_request_set_data(ur, sizeof(struct treq_phonebook_get_info), &pb_info);
        tcore_user_request_set_command(ur, TREQ_PHONEBOOK_GETMETAINFO);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if(ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -119,10 +204,46 @@ static gboolean on_phonebook_get_usim_info(TelephonyPhonebook *phonebook, GDBusM
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       TReturn ret;
+       TcorePlugin *plugin = NULL;
+       GSList *co_list = NULL;
+       CoreObject *co_pb = NULL;
+       gboolean pb_status = FALSE;
+
+       if (!check_access_control (invocation, AC_PHONEBOOK, "r"))
+               return TRUE;
+
+       plugin = tcore_server_find_plugin(ctx->server, GET_CP_NAME(invocation));
+       co_list = tcore_plugin_get_core_objects_bytype(plugin, CORE_OBJECT_TYPE_PHONEBOOK);
+       if (!co_list) {
+               dbg("error- co_list is NULL");
+               FAIL_RESPONSE(invocation, DEFAULT_MSG_REQ_FAILED);
+               return TRUE;
+       }
+       co_pb = (CoreObject *)co_list->data;
+       g_slist_free(co_list);
+
+       pb_status = tcore_phonebook_get_status(co_pb);
+
+       if(pb_status == FALSE) {
+               GVariant *gv = NULL;
+               GVariantBuilder b;
+               dbg("pb_init is not completed yet.");
+               g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+               gv = g_variant_builder_end(&b);
+               telephony_phonebook_complete_get_usim_meta_info (phonebook, invocation, PB_ACCESS_CONDITION_NOT_SATISFIED, gv);
+               return TRUE;
+       }
+
        ur = MAKE_UR(ctx, phonebook, invocation);
        tcore_user_request_set_data(ur, 0, NULL);
        tcore_user_request_set_command(ur, TREQ_PHONEBOOK_GETUSIMINFO);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if(ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
        return TRUE;
 }
 
@@ -131,77 +252,162 @@ static gboolean on_phonebook_read_record(TelephonyPhonebook *phonebook, GDBusMet
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
-
+       TReturn ret;
        struct treq_phonebook_read_record pb_read;
+       TcorePlugin *plugin = NULL;
+       GSList *co_list = NULL;
+       CoreObject *co_pb = NULL;
+       gboolean pb_status = FALSE;
+
+       if (!check_access_control (invocation, AC_PHONEBOOK, "r"))
+               return TRUE;
+
+       plugin = tcore_server_find_plugin(ctx->server, GET_CP_NAME(invocation));
+       co_list = tcore_plugin_get_core_objects_bytype(plugin, CORE_OBJECT_TYPE_PHONEBOOK);
+       if (!co_list) {
+               dbg("error- co_list is NULL");
+               FAIL_RESPONSE(invocation, DEFAULT_MSG_REQ_FAILED);
+               return TRUE;
+       }
+       co_pb = (CoreObject *)co_list->data;
+       g_slist_free(co_list);
+
+       pb_status = tcore_phonebook_get_status(co_pb);
+
+       if(pb_status == FALSE) {
+               dbg("pb_init is not completed yet.");
+               telephony_phonebook_complete_read_record(phonebook, invocation, PB_ACCESS_CONDITION_NOT_SATISFIED,
+                               0, 0, 0, NULL, 0, NULL, 0, NULL, 0, NULL, 0, NULL, 0, NULL, 0, NULL, NULL, NULL, NULL, 0);
+               return TRUE;
+       }
 
        ur = MAKE_UR(ctx, phonebook, invocation);
        memset(&pb_read, 0, sizeof(struct treq_phonebook_read_record));
 
        pb_read.index = (unsigned short)arg_index;
        pb_read.phonebook_type = arg_req_type;
+       dbg("req phonebook_type[%d][%s] index[%d]",
+               pb_read.phonebook_type, dbg_dbus_pb_type_name[pb_read.phonebook_type], pb_read.index);
 
        tcore_user_request_set_data(ur, sizeof(struct treq_phonebook_read_record), &pb_read);
        tcore_user_request_set_command(ur, TREQ_PHONEBOOK_READRECORD);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
-
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if(ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
        return TRUE;
 }
 
 static gboolean on_phonebook_update_record(TelephonyPhonebook *phonebook, GDBusMethodInvocation *invocation,
                gint arg_type, gint arg_index, const gchar *arg_name, gint arg_dcs,
-               const gchar *arg_number, gint arg_ton, const gchar *arg_number2, gint arg_number2_ton,
+               const gchar *arg_number, gint arg_ton,
+               const gchar *arg_sne, gint arg_sne_dcs,
+               const gchar *arg_number2, gint arg_number2_ton,
                const gchar *arg_number3,gint arg_number3_ton, const gchar *arg_number4, gint arg_number4_ton,
                const gchar *arg_email1, const gchar *arg_email2, const gchar *arg_email3, const gchar *arg_email4,
                gint arg_group_index, gpointer user_data)
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
-
+       TReturn ret;
        struct treq_phonebook_update_record pb_update;
+       TcorePlugin *plugin = NULL;
+       GSList *co_list = NULL;
+       CoreObject *co_pb = NULL;
+       gboolean pb_status = FALSE;
+       int temp_len = 0;
+
+       if (!check_access_control (invocation, AC_PHONEBOOK, "x"))
+               return TRUE;
+
+       plugin = tcore_server_find_plugin(ctx->server, GET_CP_NAME(invocation));
+       co_list = tcore_plugin_get_core_objects_bytype(plugin, CORE_OBJECT_TYPE_PHONEBOOK);
+       if (!co_list) {
+               dbg("error- co_list is NULL");
+               FAIL_RESPONSE(invocation, DEFAULT_MSG_REQ_FAILED);
+               return TRUE;
+       }
+       co_pb = (CoreObject *)co_list->data;
+       g_slist_free(co_list);
+
+       pb_status = tcore_phonebook_get_status(co_pb);
+
+       if(pb_status == FALSE) {
+               dbg("pb_init is not completed yet.");
+               telephony_phonebook_complete_update_record(phonebook, invocation, PB_ACCESS_CONDITION_NOT_SATISFIED);
+               return TRUE;
+       }
 
-       ur = MAKE_UR(ctx, phonebook, invocation);
        memset(&pb_update, 0, sizeof(struct treq_phonebook_update_record));
 
-       dbg("arg_type[%d]",arg_type);
-       dbg("arg_index[%d]",arg_index);
-       dbg("arg_name[%s]",arg_name);
-       dbg("arg_dcs[%d]",arg_dcs);
-       dbg("arg_number[%s]",arg_number);
-       dbg("arg_ton[%d]",arg_ton);
+       dbg("pb_type[%d] index[%d] name[%s] number[%s] email[%s]",
+               arg_type,arg_index,arg_name, arg_number, arg_email1);
 
        pb_update.index = (unsigned short)arg_index;
        pb_update.phonebook_type = arg_type;
 
-       if(strlen(arg_name)){
-               snprintf((char *)pb_update.name, strlen(arg_name)+1, "%s", arg_name);
-               pb_update.dcs = arg_dcs;
+       if(arg_name != NULL && strlen(arg_name)){
+               pb_update.dcs = PB_TEXT_ASCII;
+               pb_update.name_len = strlen(arg_name);
+               if(pb_update.name_len > PHONEBOOK_NAME_BYTE_MAX)
+                       pb_update.name_len = PHONEBOOK_NAME_BYTE_MAX;
+               memcpy(pb_update.name, arg_name, pb_update.name_len);
        }
-
-       if(strlen(arg_number)){
-               snprintf((char *)pb_update.number, strlen(arg_number)+1, "%s", arg_number);
+       if(arg_sne != NULL && strlen(arg_sne)){
+               pb_update.sne_dcs = PB_TEXT_ASCII;
+               pb_update.sne_len = strlen(arg_sne);
+               if(pb_update.sne_len > PHONEBOOK_NAME_BYTE_MAX)
+                       pb_update.sne_len = PHONEBOOK_NAME_BYTE_MAX;
+               memcpy(pb_update.sne, arg_sne, pb_update.sne_len);
+       }
+       if(arg_number != NULL && (temp_len=strlen(arg_number))){
                pb_update.ton = arg_ton;
+               if(temp_len > PHONEBOOK_NUMBER_BYTE_MAX)
+                       temp_len = PHONEBOOK_NUMBER_BYTE_MAX;
+               memcpy(pb_update.number, arg_number, temp_len);
        }
-
-       if(strlen(arg_number2)){
-               snprintf((char *)pb_update.anr1, strlen(arg_number2)+1, "%s", arg_number2);
+       if(arg_number2 != NULL && (temp_len=strlen(arg_number2))){
                pb_update.anr1_ton = arg_number2_ton;
+               if(temp_len > PHONEBOOK_NUMBER_BYTE_MAX)
+                       temp_len = PHONEBOOK_NUMBER_BYTE_MAX;
+               memcpy(pb_update.anr1, arg_number2, temp_len);
+       }
+
+       if(arg_number3 != NULL && (temp_len=strlen(arg_number3))){
+               pb_update.anr2_ton = arg_number3_ton;
+               if(temp_len > PHONEBOOK_NUMBER_BYTE_MAX)
+                       temp_len = PHONEBOOK_NUMBER_BYTE_MAX;
+               memcpy(pb_update.anr2, arg_number3, temp_len);
        }
 
-       if(strlen(arg_number3)){
-               snprintf((char *)pb_update.anr1, strlen(arg_number3)+1, "%s", arg_number3);
-               pb_update.anr1_ton = arg_number3_ton;
+       if(arg_number4 != NULL && (temp_len=strlen(arg_number4))){
+               pb_update.anr3_ton = arg_number4_ton;
+               if(temp_len > PHONEBOOK_NUMBER_BYTE_MAX)
+                       temp_len = PHONEBOOK_NUMBER_BYTE_MAX;
+               memcpy(pb_update.anr3, arg_number4, temp_len);
        }
 
-       if(strlen(arg_number4)){
-               snprintf((char *)pb_update.anr1, strlen(arg_number4)+1, "%s", arg_number4);
-               pb_update.anr1_ton = arg_number4_ton;
+       if(arg_email1 != NULL && strlen(arg_email1)){
+               pb_update.email1_len = strlen(arg_email1);
+               if(pb_update.email1_len > PHONEBOOK_EMAIL_BYTE_MAX)
+                       pb_update.email1_len = PHONEBOOK_EMAIL_BYTE_MAX;
+               memcpy(pb_update.email1, arg_email1, pb_update.email1_len);
        }
+       /* Additional e-mail fields (email 2,3,4) cannot be used to CP*/
 
        pb_update.group_index = (unsigned short)arg_group_index;
 
+       ur = MAKE_UR(ctx, phonebook, invocation);
        tcore_user_request_set_data(ur, sizeof(struct treq_phonebook_update_record), &pb_update);
        tcore_user_request_set_command(ur, TREQ_PHONEBOOK_UPDATERECORD);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if(ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -211,18 +417,50 @@ static gboolean on_phonebook_delete_record(TelephonyPhonebook *phonebook, GDBusM
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
-
+       TReturn ret;
        struct treq_phonebook_delete_record pb_delete;
+       TcorePlugin *plugin = NULL;
+       GSList *co_list = NULL;
+       CoreObject *co_pb = NULL;
+       gboolean pb_status = FALSE;
+
+       if (!check_access_control (invocation, AC_PHONEBOOK, "x"))
+               return TRUE;
+
+       plugin = tcore_server_find_plugin(ctx->server, GET_CP_NAME(invocation));
+       co_list = tcore_plugin_get_core_objects_bytype(plugin, CORE_OBJECT_TYPE_PHONEBOOK);
+       if (!co_list) {
+               dbg("error- co_list is NULL");
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               return TRUE;
+       }
+       co_pb = (CoreObject *)co_list->data;
+       g_slist_free(co_list);
+
+       pb_status = tcore_phonebook_get_status(co_pb);
+
+       if(pb_status == FALSE) {
+               dbg("pb_init is not completed yet.");
+               telephony_phonebook_complete_delete_record(phonebook, invocation, PB_ACCESS_CONDITION_NOT_SATISFIED);
+               return TRUE;
+       }
 
        ur = MAKE_UR(ctx, phonebook, invocation);
        memset(&pb_delete, 0, sizeof(struct treq_phonebook_delete_record));
 
        pb_delete.index = (unsigned short)arg_index;
        pb_delete.phonebook_type = arg_type;
+       dbg("req phonebook_type[%d][%s] index[%d]",
+               pb_delete.phonebook_type, dbg_dbus_pb_type_name[pb_delete.phonebook_type], pb_delete.index);
 
        tcore_user_request_set_data(ur, sizeof(struct treq_phonebook_delete_record), &pb_delete);
        tcore_user_request_set_command(ur, TREQ_PHONEBOOK_DELETERECORD);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if(ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -286,34 +524,40 @@ gboolean dbus_plugin_phonebook_response(struct custom_data *ctx, UserRequest *ur
        const struct tresp_phonebook_update_record *resp_pbupdate = data;
        const struct tresp_phonebook_delete_record *resp_pbdelete = data;
 
-       dbg("application command = [0x%x], data_len = %d", command, data_len);
-
        switch (command) {
                case TRESP_PHONEBOOK_GETCOUNT:
-                       dbg("dbus comm - TRESP_PHONEBOOK_GETCOUNT");
-                       dbg("used[%d]total[%d]", resp_pbcnt->used_count, resp_pbcnt->total_count);
+                       dbg("GETCOUNT (type[%d][%s] used[%d]total[%d])",
+                               resp_pbcnt->type, dbg_dbus_pb_type_name[resp_pbcnt->type],
+                               resp_pbcnt->used_count, resp_pbcnt->total_count);
                        telephony_phonebook_complete_get_count(dbus_info->interface_object, dbus_info->invocation,
                                        resp_pbcnt->result, resp_pbcnt->type, resp_pbcnt->used_count, resp_pbcnt->total_count);
                        break;
 
                case TRESP_PHONEBOOK_GETMETAINFO:
-                       dbg("dbus comm - TRESP_PHONEBOOK_GETMETAINFO");
-                       dbg("index min[%d]max[%d], num len max[%d] text len max[%d]", resp_entry->index_min, resp_entry->index_max, resp_entry->number_length_max, resp_entry->text_length_max);
+                       dbg("GETMETAINFO (type[%d][%s])", resp_entry->type, dbg_dbus_pb_type_name[resp_entry->type]);
+                       dbg("index(min[%d]max[%d]), num_max[%d] text(max[%d]used[%d])",
+                               resp_entry->index_min, resp_entry->index_max, resp_entry->number_length_max, resp_entry->text_length_max, resp_entry->used_count);
                        telephony_phonebook_complete_get_info(dbus_info->interface_object, dbus_info->invocation,
                                        resp_entry->result, resp_entry->type, resp_entry->index_min, resp_entry->index_max,
-                                       resp_entry->number_length_max, resp_entry->text_length_max);
+                                       resp_entry->number_length_max, resp_entry->text_length_max, resp_entry->used_count);
                        break;
 
                case TRESP_PHONEBOOK_GETUSIMINFO:{
                        GVariant *gv = NULL;
                        GVariantBuilder b;
                        int i;
-                       dbg("resp comm - TRESP_PHONEBOOK_GETUSIMINFO");
+                       dbg("GETUSIMINFO");
                        g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
 
                        for(i=0;i < resp_capa->field_count; i++){
                                g_variant_builder_open(&b,G_VARIANT_TYPE("a{sv}"));
-                               g_variant_builder_add(&b, "{sv}", "filed_type", g_variant_new_int32(resp_capa->field_list[i].field));
+                               dbg("type[%d][%s] index_max[%d] text_max[%d] used_count[%d]",
+                                       resp_capa->field_list[i].field,
+                                       dbg_dbus_pb_adf_field_name[resp_capa->field_list[i].field],
+                                       resp_capa->field_list[i].index_max,
+                                       resp_capa->field_list[i].text_max,
+                                       resp_capa->field_list[i].used_count);
+                               g_variant_builder_add(&b, "{sv}", "field_type", g_variant_new_int32(resp_capa->field_list[i].field));
                                g_variant_builder_add(&b, "{sv}", "index_max", g_variant_new_int32(resp_capa->field_list[i].index_max));
                                g_variant_builder_add(&b, "{sv}", "text_max", g_variant_new_int32(resp_capa->field_list[i].text_max));
                                g_variant_builder_add(&b, "{sv}", "used_count", g_variant_new_int32(resp_capa->field_list[i].used_count));
@@ -324,33 +568,87 @@ gboolean dbus_plugin_phonebook_response(struct custom_data *ctx, UserRequest *ur
                        telephony_phonebook_complete_get_usim_meta_info (dbus_info->interface_object, dbus_info->invocation,
                                        resp_capa->result,
                                        gv);
-                       g_variant_unref(gv);
                }
                        break;
 
-               case TRESP_PHONEBOOK_READRECORD:
-                       dbg("dbus comm - TRESP_PHONEBOOK_READRECORD");
-                       dbg("resp_pbread->index[%d]",resp_pbread->index );
-                       dbg("resp_pbread->next_index[%d]",resp_pbread->next_index );
-                       dbg("resp_pbread->name[%s]",resp_pbread->name );
-                       dbg("resp_pbread->dcs[%d]",resp_pbread->dcs );
-                       dbg("resp_pbread->number[%s]",resp_pbread->number );
-                       dbg("resp_pbread->ton[%d]",resp_pbread->ton );
+               case TRESP_PHONEBOOK_READRECORD: {
+                       unsigned char dest_pb_name[PHONEBOOK_NAME_BYTE_MAX + 1];
+                       unsigned char dest_pb_sne[PHONEBOOK_NAME_BYTE_MAX + 1];
+                       unsigned char dest_pb_email1[PHONEBOOK_EMAIL_BYTE_MAX + 1];
+                       memset(dest_pb_name, 0x00, PHONEBOOK_NAME_BYTE_MAX + 1);
+                       memset(dest_pb_sne, 0x00, PHONEBOOK_NAME_BYTE_MAX + 1);
+                       memset(dest_pb_email1, 0x00, PHONEBOOK_EMAIL_BYTE_MAX + 1);
+                       /* Additional e-mail fields (email 2,3,4) cannot be used to CP*/
+
+                       dbg("READRECORD (type[%d][%s] index[%d][%d])",
+                               resp_pbread->phonebook_type, dbg_dbus_pb_type_name[resp_pbread->phonebook_type], resp_pbread->index,resp_pbread->next_index);
+
+                       if (resp_pbread->name_len > 0) {
+                               dbg("name:[%s] len:[%d]",resp_pbread->name, resp_pbread->name_len);
+                               memcpy(dest_pb_name,resp_pbread->name,resp_pbread->name_len);
+                       }
+
+                       dbg("number:[%s] ton:[%d][%s])",
+                               resp_pbread->number,resp_pbread->ton, dbg_dbus_pb_ton_name[resp_pbread->ton] );
+
+                       if(resp_pbread->phonebook_type == PB_TYPE_USIM) {
+                               if (resp_pbread->sne_len > 0) {
+                                       dbg("sne:[%s] sne_len:[%d]", resp_pbread->sne,resp_pbread->sne_len);
+                                       memcpy(dest_pb_sne,resp_pbread->sne,resp_pbread->sne_len);
+                               }
+
+                               if (strlen((const char*)resp_pbread->anr1) != 0 || strlen((const char*)resp_pbread->anr2) != 0 || strlen((const char*)resp_pbread->anr3) != 0) {
+                                       dbg("anr1:([%s],ton[%d][%s])",resp_pbread->anr1,resp_pbread->anr1_ton, dbg_dbus_pb_ton_name[resp_pbread->anr1_ton]);
+                                       dbg("anr2:([%s],ton[%d][%s])",resp_pbread->anr2,resp_pbread->anr2_ton, dbg_dbus_pb_ton_name[resp_pbread->anr2_ton]);
+                                       dbg("anr3:([%s],ton[%d][%s])",resp_pbread->anr3,resp_pbread->anr3_ton, dbg_dbus_pb_ton_name[resp_pbread->anr3_ton]);
+                               }
+                               if (resp_pbread->email1_len > 0) {
+                                       dbg("email1:[%s] len:[%d]",resp_pbread->email1, resp_pbread->email1_len);
+                                       memcpy(dest_pb_email1, resp_pbread->email1, resp_pbread->email1_len);
+                               }
+                               /* Additional e-mail fields (email 2,3,4) cannot be used to CP*/
+                       }
+
+                       /*
+                        * Check whether NAME, SNE string values are invalid utf-8 string or not,
+                        * because if invalid it will be converted to "[INVALID UTF-8]" automatically by g_variant_new_string().
+                        */
+                       if (g_utf8_validate((const gchar *)dest_pb_name, -1, NULL) == FALSE) {
+                               tcore_util_hex_dump("[INVALID_UTF8_NAME] ", strlen((const char*)dest_pb_name), dest_pb_name);
+                               dbg("Empty NAME field.");
+                               memset(dest_pb_name, 0x00, PHONEBOOK_NAME_BYTE_MAX + 1);
+                       }
+                       if(resp_pbread->phonebook_type == PB_TYPE_USIM) {
+                               if (g_utf8_validate((const gchar *)dest_pb_sne, -1, NULL) == FALSE) {
+                                       tcore_util_hex_dump("[INVALID_UTF8_SNE] ", strlen((const char*)dest_pb_sne), dest_pb_sne);
+                                       dbg("Empty SNE field.");
+                                       memset(dest_pb_sne, 0x00, PHONEBOOK_NAME_BYTE_MAX + 1);
+                               }
+                       }
 
                        telephony_phonebook_complete_read_record(dbus_info->interface_object, dbus_info->invocation,
-                                       resp_pbread->result, resp_pbread->phonebook_type, resp_pbread->index, resp_pbread->next_index, (const gchar *)resp_pbread->name,
-                                       resp_pbread->dcs, (const gchar *)resp_pbread->number, resp_pbread->ton, (const gchar *)resp_pbread->anr1, resp_pbread->anr1_ton,
-                                       (const gchar *)resp_pbread->anr2, resp_pbread->anr2_ton, (const gchar *)resp_pbread->anr3, resp_pbread->anr3_ton,
-                                       (const gchar *)resp_pbread->email1, (const gchar *)resp_pbread->email2, (const gchar *)resp_pbread->email3, (const gchar *)resp_pbread->email4, resp_pbread->group_index);
-                       break;
+                                                               resp_pbread->result, resp_pbread->phonebook_type, resp_pbread->index, resp_pbread->next_index,
+                                                               (const gchar *)dest_pb_name, resp_pbread->dcs,
+                                                               (const gchar *)resp_pbread->number, resp_pbread->ton,
+                                                               (const gchar *)dest_pb_sne, resp_pbread->sne_dcs,
+                                                               (const gchar *)resp_pbread->anr1, resp_pbread->anr1_ton,
+                                                               (const gchar *)resp_pbread->anr2, resp_pbread->anr2_ton,
+                                                               (const gchar *)resp_pbread->anr3, resp_pbread->anr3_ton,
+                                                               (const gchar *)dest_pb_email1,
+                                                               (const gchar *)resp_pbread->email2,
+                                                               (const gchar *)resp_pbread->email3,
+                                                               (const gchar *)resp_pbread->email4,
+                                                               resp_pbread->group_index);
+
+               }       break;
 
                case TRESP_PHONEBOOK_UPDATERECORD:
-                       dbg("dbus comm - TRESP_PHONEBOOK_UPDATERECORD");
+                       dbg("UPDATERECORD (result[%d])", resp_pbupdate->result);
                        telephony_phonebook_complete_update_record(dbus_info->interface_object, dbus_info->invocation,resp_pbupdate->result);
                        break;
 
                case TRESP_PHONEBOOK_DELETERECORD:
-                       dbg("dbus comm - TRESP_PHONEBOOK_DELETERECORD");
+                       dbg("DELETERECORD (result[%d])", resp_pbdelete->result);
                        telephony_phonebook_complete_delete_record(dbus_info->interface_object, dbus_info->invocation, resp_pbdelete->result);
                        break;
 
@@ -362,24 +660,34 @@ gboolean dbus_plugin_phonebook_response(struct custom_data *ctx, UserRequest *ur
        return TRUE;
 }
 
-gboolean dbus_plugin_phonebook_notification(struct custom_data *ctx, const char *plugin_name,
+gboolean dbus_plugin_phonebook_notification(struct custom_data *ctx, CoreObject *source,
                TelephonyObjectSkeleton *object, enum tcore_notification_command command,
                unsigned int data_len, const void *data)
 {
        TelephonyPhonebook *phonebook;
        const struct tnoti_phonebook_status *n_pb_status = data;
+       const char *cp_name;
 
-       if (!object) {
-               dbg("object is NULL");
-               return FALSE;
-       }
+       cp_name = tcore_server_get_cp_name_by_plugin(tcore_object_ref_plugin(source));
 
        phonebook = telephony_object_peek_phonebook(TELEPHONY_OBJECT(object));
-       dbg("phonebook = %p", phonebook);
-
        switch (command) {
                case TNOTI_PHONEBOOK_STATUS :
-                       telephony_phonebook_emit_status(phonebook, n_pb_status->b_init);
+
+#ifdef ENABLE_KPI_LOGS
+                       if (n_pb_status->b_init == TRUE)
+                               TIME_CHECK("[%s] PBM Service Ready", cp_name);
+#endif
+
+                       telephony_phonebook_emit_status(phonebook,
+                               n_pb_status->b_init,
+                               n_pb_status->support_list.b_fdn,
+                               n_pb_status->support_list.b_adn,
+                               n_pb_status->support_list.b_sdn,
+                               n_pb_status->support_list.b_usim,
+                               n_pb_status->support_list.b_aas,
+                               n_pb_status->support_list.b_gas);
+
                        break;
 
                default:
index 65911c0..74197ce 100644 (file)
--- a/src/sap.c
+++ b/src/sap.c
@@ -1,5 +1,5 @@
 /*
- * tel-plugin-socket-communicator
+ * tel-plugin-dbus-tapi
  *
  * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
  *
@@ -22,7 +22,6 @@
 #include <string.h>
 #include <stdlib.h>
 #include <errno.h>
-#include <glib-object.h>
 
 #include <tcore.h>
 #include <server.h>
@@ -44,9 +43,12 @@ static gboolean on_sap_connect(TelephonySap *sap, GDBusMethodInvocation *invocat
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
-
+       TReturn ret;
        struct treq_sap_req_connect req_conn;
 
+       if (!check_access_control (invocation, AC_SAP, "x"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, sap, invocation);
        memset(&req_conn, 0, sizeof(struct treq_sap_req_connect));
 
@@ -54,7 +56,12 @@ static gboolean on_sap_connect(TelephonySap *sap, GDBusMethodInvocation *invocat
 
        tcore_user_request_set_data(ur, sizeof(struct treq_sap_req_connect), &req_conn);
        tcore_user_request_set_command(ur, TREQ_SAP_REQ_CONNECT);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if(ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -63,15 +70,20 @@ static gboolean on_sap_disconnect(TelephonySap *sap, GDBusMethodInvocation *invo
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       TReturn ret;
 
-       struct treq_sap_req_disconnect req_disconn;
+       if (!check_access_control (invocation, AC_SAP, "x"))
+               return TRUE;
 
        ur = MAKE_UR(ctx, sap, invocation);
-       memset(&req_disconn, 0, sizeof(struct treq_sap_req_disconnect));
 
-       tcore_user_request_set_data(ur, sizeof(struct treq_sap_req_disconnect), &req_disconn);
        tcore_user_request_set_command(ur, TREQ_SAP_REQ_DISCONNECT);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if(ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -80,15 +92,20 @@ static gboolean on_sap_get_status(TelephonySap *sap, GDBusMethodInvocation *invo
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       TReturn ret;
 
-       struct treq_sap_req_status req_status;
+       if (!check_access_control (invocation, AC_SAP, "r"))
+               return TRUE;
 
        ur = MAKE_UR(ctx, sap, invocation);
-       memset(&req_status, 0, sizeof(struct treq_sap_req_status));
 
-       tcore_user_request_set_data(ur, sizeof(struct treq_sap_req_status), &req_status);
        tcore_user_request_set_command(ur, TREQ_SAP_REQ_STATUS);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if(ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -97,15 +114,20 @@ static gboolean on_sap_get_atr(TelephonySap *sap, GDBusMethodInvocation *invocat
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       TReturn ret;
 
-       struct treq_sap_req_atr req_atr;
+       if (!check_access_control (invocation, AC_SAP, "r"))
+               return TRUE;
 
        ur = MAKE_UR(ctx, sap, invocation);
-       memset(&req_atr, 0, sizeof(struct treq_sap_req_atr));
 
-       tcore_user_request_set_data(ur, sizeof(struct treq_sap_req_atr), &req_atr);
        tcore_user_request_set_command(ur, TREQ_SAP_REQ_ATR);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if(ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -116,13 +138,17 @@ static gboolean on_sap_transfer_apdu(TelephonySap *sap, GDBusMethodInvocation *i
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        struct treq_sap_transfer_apdu t_apdu;
-
+       TReturn ret;
        GVariantIter *iter = NULL;
        GVariant *inner_gv = NULL;
        guchar rt_i;
        int i =0;
 
        dbg("Func Entrance");
+
+       if (!check_access_control (invocation, AC_SAP, "x"))
+               return TRUE;
+
        memset(&t_apdu, 0, sizeof(struct treq_sap_transfer_apdu));
 
        inner_gv = g_variant_get_variant(arg_req_apdu);
@@ -143,7 +169,12 @@ static gboolean on_sap_transfer_apdu(TelephonySap *sap, GDBusMethodInvocation *i
        ur = MAKE_UR(ctx, sap, invocation);
        tcore_user_request_set_data(ur, sizeof(struct treq_sap_transfer_apdu), &t_apdu);
        tcore_user_request_set_command(ur, TREQ_SAP_TRANSFER_APDU);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if(ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -153,9 +184,12 @@ static gboolean on_sap_set_protocol(TelephonySap *sap, GDBusMethodInvocation *in
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
-
+       TReturn ret;
        struct treq_sap_set_protocol set_protocol;
 
+       if (!check_access_control (invocation, AC_SAP, "w"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, sap, invocation);
        memset(&set_protocol, 0, sizeof(struct treq_sap_set_protocol));
 
@@ -163,7 +197,12 @@ static gboolean on_sap_set_protocol(TelephonySap *sap, GDBusMethodInvocation *in
 
        tcore_user_request_set_data(ur, sizeof(struct treq_sap_set_protocol), &set_protocol);
        tcore_user_request_set_command(ur, TREQ_SAP_SET_PROTOCOL);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if(ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -173,9 +212,12 @@ static gboolean on_sap_set_power(TelephonySap *sap, GDBusMethodInvocation *invoc
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
-
+       TReturn ret;
        struct treq_sap_set_power set_power;
 
+       if (!check_access_control (invocation, AC_SAP, "w"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, sap, invocation);
        memset(&set_power, 0, sizeof(struct treq_sap_set_power));
 
@@ -183,7 +225,12 @@ static gboolean on_sap_set_power(TelephonySap *sap, GDBusMethodInvocation *invoc
 
        tcore_user_request_set_data(ur, sizeof(struct treq_sap_set_power), &set_power);
        tcore_user_request_set_command(ur, TREQ_SAP_SET_POWER);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if(ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -192,15 +239,20 @@ static gboolean on_sap_get_card_reader_status(TelephonySap *sap, GDBusMethodInvo
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       TReturn ret;
 
-       struct treq_sap_req_cardreaderstatus req_reader;
+       if (!check_access_control (invocation, AC_SAP, "r"))
+               return TRUE;
 
        ur = MAKE_UR(ctx, sap, invocation);
-       memset(&req_reader, 0, sizeof(struct treq_sap_req_cardreaderstatus));
 
-       tcore_user_request_set_data(ur, sizeof(struct treq_sap_req_cardreaderstatus), &req_reader);
        tcore_user_request_set_command(ur, TREQ_SAP_REQ_CARDREADERSTATUS);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if(ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -293,19 +345,18 @@ gboolean dbus_plugin_sap_response(struct custom_data *ctx, UserRequest *ur,
                        break;
 
                case TRESP_SAP_REQ_ATR: {
-                       GVariantBuilder *builder = NULL;
+                       GVariantBuilder builder;
                        GVariant * atr_gv = NULL;
                        GVariant *inner_gv = NULL;
                        int i =0;
 
                        dbg("dbus comm - TRESP_SAP_REQ_ATR");
-                       builder = g_variant_builder_new (G_VARIANT_TYPE ("ay"));
+                       g_variant_builder_init(&builder, G_VARIANT_TYPE ("ay"));
                        for(i = 0; i < (int)sap_atr->atr_length; i++) {
                                dbg("sap_atr->atr[%d][0x%02x]", i,sap_atr->atr[i]);
-                               g_variant_builder_add (builder, "y", sap_atr->atr[i]);
+                               g_variant_builder_add (&builder, "y", sap_atr->atr[i]);
                        }
-                       inner_gv = g_variant_builder_end(builder);
-/*                     g_variant_builder_unref (builder);*/
+                       inner_gv = g_variant_builder_end(&builder);
                        atr_gv = g_variant_new("v", inner_gv);
 
                        telephony_sap_complete_get_atr(dbus_info->interface_object, dbus_info->invocation,
@@ -314,19 +365,18 @@ gboolean dbus_plugin_sap_response(struct custom_data *ctx, UserRequest *ur,
                        break;
 
                case TRESP_SAP_TRANSFER_APDU: {
-                       GVariantBuilder *builder = NULL;
+                       GVariantBuilder builder;
                        GVariant * apdu_gv = NULL;
                        GVariant *inner_gv = NULL;
                        int i =0;
 
                        dbg("dbus comm - TRESP_SAP_TRANSFER_APDU");
-                       builder = g_variant_builder_new (G_VARIANT_TYPE ("ay"));
+                       g_variant_builder_init(&builder, G_VARIANT_TYPE ("ay"));
                        for(i = 0; i < (int)sap_apdu->resp_apdu_length; i++) {
                                dbg("sap_apdu->resp_adpdu[%d][0x%02x]", i,sap_apdu->resp_adpdu[i]);
-                               g_variant_builder_add (builder, "y", sap_apdu->resp_adpdu[i]);
+                               g_variant_builder_add (&builder, "y", sap_apdu->resp_adpdu[i]);
                        }
-                       inner_gv = g_variant_builder_end(builder);
-/*                     g_variant_builder_unref (builder);*/
+                       inner_gv = g_variant_builder_end(&builder);
                        apdu_gv = g_variant_new("v", inner_gv);
 
                        telephony_sap_complete_transfer_apdu(dbus_info->interface_object, dbus_info->invocation,
@@ -360,7 +410,7 @@ gboolean dbus_plugin_sap_response(struct custom_data *ctx, UserRequest *ur,
        return TRUE;
 }
 
-gboolean dbus_plugin_sap_notification(struct custom_data *ctx, const char *plugin_name,
+gboolean dbus_plugin_sap_notification(struct custom_data *ctx, CoreObject *source,
                TelephonyObjectSkeleton *object, enum tcore_notification_command command,
                unsigned int data_len, const void *data)
 {
@@ -374,9 +424,6 @@ gboolean dbus_plugin_sap_notification(struct custom_data *ctx, const char *plugi
        }
 
        sap = telephony_object_peek_sap(TELEPHONY_OBJECT(object));
-       dbg("sap = %p", sap);
-
-       dbg("notification !!! (command = 0x%x, data_len = %d)", command, data_len);
 
        switch (command) {
                case TNOTI_SAP_STATUS:
old mode 100644 (file)
new mode 100755 (executable)
index 02b6ed3..41b15c1
--- a/src/sat.c
+++ b/src/sat.c
@@ -22,7 +22,6 @@
 #include <string.h>
 #include <stdlib.h>
 #include <errno.h>
-#include <glib-object.h>
 
 #include <tcore.h>
 #include <server.h>
 #include "common.h"
 #include "sat_manager.h"
 #include "sat_ui_support/sat_ui_support.h"
+#include "package-manager.h"
+
+static void _sat_set_main_menu(struct custom_data *ctx, const char *cp_name, GVariant *main_menu)
+{
+       GSList *list = NULL;
+       struct cached_data *object = NULL;
+
+       for (list = ctx->cached_data; list; list = list->next) {
+               object = (struct cached_data *) list->data;
+               if (object == NULL)
+                       continue;
+
+               if (g_strcmp0(object->cp_name, cp_name) == 0 ) {
+                       /* need to free the previous main_menu */
+                       g_variant_unref(object->cached_sat_main_menu);
+                       object->cached_sat_main_menu = main_menu;
+                       return;
+               }
+       }
+
+       /* If 'object' is NOT created, then create the object and add to the list */
+       object = g_try_malloc0(sizeof(struct cached_data));
+       if (NULL == object) {
+               err(" Malloc Failed");
+               return;
+       }
+       object->cp_name = g_strdup(cp_name);
+       object->cached_sat_main_menu = main_menu;
+
+       ctx->cached_data = g_slist_append(ctx->cached_data, (gpointer) object);
+}
+
+static GVariant *_sat_get_main_menu(struct custom_data *ctx, const char *cp_name)
+{
+       GSList *list = NULL;
+       struct cached_data *object;
+
+       /*
+        * List of Objects in 'ctx',
+        * compare cp_name with modem_name stored in 'ctx'
+        * if matching return main_menu of that object.
+        */
+       for (list = ctx->cached_data; list; list = list->next) {
+               object = (struct cached_data *)list->data;
+               if (object == NULL)
+                       continue;
+
+               if (g_strcmp0(object->cp_name, cp_name) == 0)
+                       return object->cached_sat_main_menu;
+       }
+
+       return NULL;
+}
 
 static gboolean on_sat_get_main_menu_info(TelephonySAT *sat, GDBusMethodInvocation *invocation,
                gpointer user_data)
@@ -50,20 +102,35 @@ static gboolean on_sat_get_main_menu_info(TelephonySAT *sat, GDBusMethodInvocati
        gint result = 1, command_id, item_cnt;
        gboolean b_present, b_help_info, b_updated;
        GVariant *items;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       GVariant *icon_id = NULL;
+       GVariant *icon_list = NULL;
+#endif
+       if (!check_access_control (invocation, AC_SAT, "r"))
+               return TRUE;
 
-
-       if(!ctx->cached_sat_main_menu){
+       main_menu = _sat_get_main_menu(ctx, GET_CP_NAME(invocation));
+       if(!main_menu){
                dbg("no main menu");
                return FALSE;
        }
 
-       main_menu = ctx->cached_sat_main_menu;
 
+
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       g_variant_get(main_menu, "(ibs@vibb@v@v)", &command_id, &b_present, &title, &items, &item_cnt,
+                       &b_help_info, &b_updated, &icon_id, &icon_list);
+
+       telephony_sat_complete_get_main_menu_info(sat, invocation, result, command_id, b_present, title,
+                       items, item_cnt, b_help_info, b_updated, icon_id, icon_list);
+#else
        g_variant_get(main_menu, "(ibs@vibb)", &command_id, &b_present, &title, &items, &item_cnt,
                        &b_help_info, &b_updated);
 
        telephony_sat_complete_get_main_menu_info(sat, invocation, result, command_id, b_present, title,
                        items, item_cnt, b_help_info, b_updated);
+#endif
+       g_free(title);
 
        return TRUE;
 }
@@ -73,13 +140,16 @@ static gboolean on_sat_send_display_status(TelephonySAT *sat, GDBusMethodInvocat
                gpointer user_data)
 {
        TcorePlugin *plg = NULL;
-       char *plugin_name;
+       char *cp_name;
        struct custom_data *ctx = user_data;
        gboolean result = FALSE;
        gint out_param = 1;
 
-       plugin_name = GET_PLUGIN_NAME(invocation);
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       if (!check_access_control (invocation, AC_SAT, "x"))
+               return TRUE;
+
+       cp_name = GET_CP_NAME(invocation);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                out_param = 0;
@@ -102,15 +172,18 @@ static gboolean on_sat_send_user_confirm(TelephonySAT *sat, GDBusMethodInvocatio
                GVariant *arg_additional_data, gpointer user_data)
 {
        TcorePlugin *plg = NULL;
-       char *plugin_name;
+       char *cp_name;
        struct custom_data *ctx = user_data;
 
        gboolean result = FALSE;
        gint out_param = 1;
        GVariant *confirm_data = NULL;
 
-       plugin_name = GET_PLUGIN_NAME(invocation);
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       if (!check_access_control (invocation, AC_SAT, "x"))
+               return TRUE;
+
+       cp_name = GET_CP_NAME(invocation);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                out_param = 0;
@@ -136,14 +209,17 @@ static gboolean on_sat_send_app_exec_result(TelephonySAT *sat, GDBusMethodInvoca
                gpointer user_data)
 {
        TcorePlugin *plg = NULL;
-       char *plugin_name;
+       char *cp_name;
        struct custom_data *ctx = user_data;
 
        gboolean result = FALSE;
        gint out_param = 1;
 
-       plugin_name = GET_PLUGIN_NAME(invocation);
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       if (!check_access_control (invocation, AC_SAT, "x"))
+               return TRUE;
+
+       cp_name = GET_CP_NAME(invocation);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                out_param = 0;
@@ -166,11 +242,14 @@ static gboolean on_sat_select_menu(TelephonySAT *sat, GDBusMethodInvocation *inv
                guchar arg_item_identifier, gboolean arg_help_request,
                gpointer user_data)
 {
+       TReturn rv;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
-
        struct treq_sat_envelop_cmd_data envelop_data;
 
+       if (!check_access_control (invocation, AC_SAT, "x"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, sat, invocation);
        memset(&envelop_data, 0, sizeof(struct treq_sat_envelop_cmd_data));
        envelop_data.sub_cmd = ENVELOP_MENU_SELECTION;
@@ -181,7 +260,12 @@ static gboolean on_sat_select_menu(TelephonySAT *sat, GDBusMethodInvocation *inv
 
        tcore_user_request_set_data(ur, sizeof(struct treq_sat_envelop_cmd_data), &envelop_data);
        tcore_user_request_set_command(ur, TREQ_SAT_REQ_ENVELOPE);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       rv = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if(rv != TCORE_RETURN_SUCCESS){
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", rv);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -190,21 +274,37 @@ static gboolean on_sat_download_event(TelephonySAT *sat, GDBusMethodInvocation *
                gint arg_event_download_type, gint arg_src_device,gint arg_dest_device,
                GVariant *arg_download_data, gpointer user_data)
 {
+       gboolean b_event = FALSE;
+       TReturn rv;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
 
        struct treq_sat_envelop_cmd_data envelop_data;
 
+       if (!check_access_control (invocation, AC_SAT, "x"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, sat, invocation);
        memset(&envelop_data, 0, sizeof(struct treq_sat_envelop_cmd_data));
        envelop_data.sub_cmd = ENVELOP_EVENT_DOWNLOAD;
        envelop_data.envelop_data.event_download.event = arg_event_download_type;
-       sat_manager_handle_event_download_envelop(arg_event_download_type, arg_src_device, arg_dest_device,
-                       &envelop_data.envelop_data.event_download, arg_download_data);
+       b_event = sat_manager_handle_event_download_envelop(arg_event_download_type, arg_src_device, arg_dest_device,
+                               &envelop_data.envelop_data.event_download, arg_download_data);
+
+       if(!b_event){
+               telephony_sat_complete_download_event(sat, invocation, -1, ENVELOPE_FAILED);
+               tcore_user_request_unref(ur);
+               return TRUE;
+       }
 
        tcore_user_request_set_data(ur, sizeof(struct treq_sat_envelop_cmd_data), &envelop_data);
        tcore_user_request_set_command(ur, TREQ_SAT_REQ_ENVELOPE);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       rv = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if(rv != TCORE_RETURN_SUCCESS){
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", rv);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -287,672 +387,1174 @@ gboolean dbus_plugin_sat_response(struct custom_data *ctx, UserRequest *ur,
        return TRUE;
 }
 
-gboolean dbus_plugin_sat_notification(struct custom_data *ctx, const char *plugin_name,
+gboolean dbus_plugin_sat_notification(struct custom_data *ctx, CoreObject *source,
                TelephonyObjectSkeleton *object, enum tcore_notification_command command,
                unsigned int data_len, const void *data)
 {
-       TcorePlugin *plg = NULL;
        TelephonySAT *sat;
-       struct tnoti_sat_proactive_ind *p_ind = (struct tnoti_sat_proactive_ind *)data;
+       const char *cp_name;
+       enum dbus_tapi_sim_slot_id slot_id;
 
-       if (!object) {
-               dbg("object is NULL");
+       if (!object || !ctx) {
+               dbg("NULL data is detected!!");
                return FALSE;
        }
+       cp_name  = tcore_server_get_cp_name_by_plugin(tcore_object_ref_plugin(source));
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
-       if (!plg){
-               dbg("there is no valid plugin at this point");
-               return FALSE;
-       }
+       slot_id = get_sim_slot_id_by_cp_name((char *)cp_name);
+       dbg("slot_id: [%d]", slot_id);
 
        sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
-       dbg("sat = %p", sat);
-
-       dbg("notification !!! (command = 0x%x, data_len = %d)", command, data_len);
 
-       if (command == TNOTI_SAT_SESSION_END) {
+       //session end notification
+       switch (command) {
+               case TNOTI_SAT_SESSION_END: {
 
                dbg("notified sat session end evt");
-               sat_manager_init_queue(ctx);
-
-               sat_ui_support_terminate_sat_ui();
-               telephony_sat_emit_end_proactive_session(sat, SAT_PROATV_CMD_TYPE_END_PROACTIVE_SESSION);
-               return TRUE;
-       }
-
-       //Proactive Command Notification
-       dbg("notified sat proactive command(%d)", p_ind->cmd_type);
+               sat_manager_init_queue(ctx, cp_name);
 
-       switch (p_ind->cmd_type) {
-               case SAT_PROATV_CMD_SETUP_MENU:{
-                       gboolean rv = FALSE;
-                       GVariant *menu_info = NULL;
-                       GVariant *resp = NULL;
-                       GVariant *exec_result = NULL;
-
-                       gchar *title;
-                       gint command_id, menu_cnt;
-                       gboolean b_present, b_helpinfo, b_updated;
-                       GVariant *items;
+                       //sat_ui_support_terminate_sat_ui();
+                       telephony_sat_emit_end_proactive_session(sat, SAT_PROATV_CMD_TYPE_END_PROACTIVE_SESSION);
+                       return TRUE;
+               }
+               break;
 
-                       menu_info = sat_manager_caching_setup_menu_info(ctx, plugin_name, (struct tel_sat_setup_menu_tlv*) &p_ind->proactive_ind_data.setup_menu);
-                       ctx->cached_sat_main_menu = menu_info;
+               //call control notification
+               case TNOTI_SAT_CALL_CTRL_RESULT: {
+                       struct tnoti_sat_call_control_result_ind *cc_result_noti = NULL;
+                       gint call_ctrl_result = 0, bc_repeat_indicator = 0, ton = 0x0F, npi=0X0F;
+                       gchar *text = NULL, *call_num = NULL, *ss_string = NULL, *sub_addr = NULL, *ccp1 = NULL, *ccp2 = NULL;
 
-                       if(!menu_info){
-                               dbg("no main menu data");
-                               sat_ui_support_remove_desktop_file();
-                               return TRUE;
+                       cc_result_noti = (struct tnoti_sat_call_control_result_ind *)data;
+                       if (cc_result_noti == NULL) {
+                               err("Indication data is NULL");
+                               return FALSE;
                        }
+                       dbg("sat call control result notification");
 
-                       dbg("menu_info type_format(%s)", g_variant_get_type_string(menu_info));
-                       g_variant_get(menu_info, "(ibs@vibb)", &command_id, &b_present, &title, &items,
-                                       &menu_cnt, &b_helpinfo, &b_updated);
+               call_ctrl_result = cc_result_noti->cc_result;
+               bc_repeat_indicator = cc_result_noti->bc_repeat_type.bc_indi_repeat_type;
 
-                       rv = sat_ui_support_create_desktop_file(title);
-                       rv = TRUE;
-                       dbg("return value (%d)", rv);
-                       if(rv)
-                               resp = g_variant_new("(i)", RESULT_SUCCESS);
+               if(cc_result_noti->address.dialing_number_len > 0){
+                       ton = cc_result_noti->address.ton;
+                       npi = cc_result_noti->address.npi;
+                       if(ton == TON_INTERNATIONAL)
+                               call_num = g_strdup_printf("+%s", cc_result_noti->address.dialing_number);
                        else
-                               resp = g_variant_new("(i)", RESULT_ME_UNABLE_TO_PROCESS_COMMAND);
-
-                       exec_result = g_variant_new_variant(resp);
-                       sat_manager_handle_app_exec_result(ctx, plg, command_id, SAT_PROATV_CMD_SETUP_MENU, exec_result);
-
-                       //sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_SETUP_MENU, menu_info);
-
-                       telephony_sat_emit_setup_menu(sat, command_id, b_present, title, items, menu_cnt,
-                                       b_helpinfo, b_updated);
-               } break;
-
-               case SAT_PROATV_CMD_DISPLAY_TEXT:{
-                       GVariant *display_text = NULL;
-
-                       gint command_id, text_len, duration;
-                       gboolean high_priority, user_rsp_required, immediately_rsp;
-                       gchar text[SAT_TEXT_STRING_LEN_MAX];
-                       GVariant *icon_id = NULL;
-
-                       display_text = sat_manager_display_text_noti(ctx, plugin_name, (struct tel_sat_display_text_tlv*) &p_ind->proactive_ind_data.display_text);
-
-                       if(!display_text){
-                               dbg("no display text data");
-                               return TRUE;
-                       }
-
-                       dbg("display text type_format(%s)", g_variant_get_type_string(display_text));
-                       g_variant_get(display_text, "(isiibbb@v)", &command_id, &text, &text_len, &duration,
-                                               &high_priority, &user_rsp_required, &immediately_rsp, &icon_id);
-
-                       sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_DISPLAY_TEXT, display_text);
-
-                       telephony_sat_emit_display_text(sat, command_id, text, text_len, duration,
-                                       high_priority, user_rsp_required, immediately_rsp);
-
-               } break;
-
-               case SAT_PROATV_CMD_SELECT_ITEM:{
-                       GVariant *select_menu = NULL;
-
-                       gboolean help_info ;
-                       gchar *selected_text;
-                       gint command_id, default_item_id, menu_cnt, text_len =0;
-                       GVariant *menu_items, *icon_id, *icon_list;
-
-                       select_menu = sat_manager_select_item_noti(ctx, plugin_name, (struct tel_sat_select_item_tlv*) &p_ind->proactive_ind_data.select_item);
-
-                       if(!select_menu){
-                               dbg("no select menu data");
-                               return TRUE;
-                       }
-
-                       dbg("select menu type_format(%s)", g_variant_get_type_string(select_menu));
-                       g_variant_get(select_menu, "(ibsiii@v@v@v)", &command_id, &help_info, &selected_text,
-                                       &text_len, &default_item_id, &menu_cnt, &menu_items, &icon_id, &icon_list);
-
-                       sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_SELECT_ITEM, select_menu);
-
-                       telephony_sat_emit_select_item (sat, command_id, help_info, selected_text, text_len,
-                                       default_item_id, menu_cnt, menu_items);
-               } break;
-
-               case SAT_PROATV_CMD_GET_INKEY:{
-                       GVariant *get_inkey = NULL;
-
-                       gint command_id, key_type, input_character_mode;
-                       gint text_len, duration;
-                       gboolean b_numeric, b_help_info;
-                       gchar *text;
-                       GVariant *icon_id;
-
-                       get_inkey = sat_manager_get_inkey_noti(ctx, plugin_name, (struct tel_sat_get_inkey_tlv*) &p_ind->proactive_ind_data.get_inkey);
-
-                       if(!get_inkey){
-                               dbg("no get inkey data");
-                               return TRUE;
-                       }
-
-                       dbg("get inkey type_format(%s)", g_variant_get_type_string(get_inkey));
-                       g_variant_get(get_inkey, "(iiibbsii@v)", &command_id, &key_type, &input_character_mode,
-                                       &b_numeric,&b_help_info, &text, &text_len, &duration, &icon_id);
-
-                       sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_GET_INKEY, get_inkey);
-
-                       telephony_sat_emit_get_inkey(sat, command_id, key_type, input_character_mode,
-                                       b_numeric, b_help_info, text, text_len, duration);
-               } break;
-
-               case SAT_PROATV_CMD_GET_INPUT:{
-                       GVariant *get_input = NULL;
-
-                       gint command_id, input_character_mode;
-                       gint text_len, def_text_len, rsp_len_min, rsp_len_max;
-                       gboolean b_numeric, b_help_info, b_echo_input;
-                       gchar *text, *def_text;
-                       GVariant *icon_id;
-
-                       get_input = sat_manager_get_input_noti(ctx, plugin_name, (struct tel_sat_get_input_tlv*) &p_ind->proactive_ind_data.get_input);
-
-                       if(!get_input){
-                               dbg("no get input data");
-                               return TRUE;
-                       }
-
-                       dbg("get input type_format(%s)", g_variant_get_type_string(get_input));
-                       g_variant_get(get_input, "(iibbbsiiisi@v)", &command_id, &input_character_mode, &b_numeric, &b_help_info, &b_echo_input,
-                                       &text, &text_len, &rsp_len_max, &rsp_len_min, &def_text, &def_text_len, &icon_id);
-
-                       sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_GET_INPUT, get_input);
-
-                       telephony_sat_emit_get_input(sat, command_id, input_character_mode, b_numeric, b_help_info,
-                                       b_echo_input, text, text_len, rsp_len_max, rsp_len_min, def_text, def_text_len);
-               } break;
-
-               case SAT_PROATV_CMD_PLAY_TONE:{
-                       GVariant *play_tone = NULL;
-
-                       gint command_id, tone_type, duration;
-                       gint text_len;
-                       gchar* text;
-                       GVariant *icon_id;
-
-                       play_tone = sat_manager_play_tone_noti(ctx, plugin_name, (struct tel_sat_play_tone_tlv*) &p_ind->proactive_ind_data.play_tone);
-
-                       if(!play_tone){
-                               dbg("no play tone data");
-                               return TRUE;
-                       }
-
-                       dbg("play tone type_format(%s)", g_variant_get_type_string(play_tone));
-                       g_variant_get(play_tone, "(isi@vii)", &command_id, &text, &text_len, &icon_id, &tone_type, &duration);
-
-                       dbg("check display text : text(%s) text len(%d)", text, text_len);
-                       if(text_len > 1 && (g_strcmp0(text,"") != 0) ){
-                               GVariant *ui_info = NULL;
-                               gboolean user_confirm = FALSE;
-                               dbg("text should be displayed by ui");
-                               dbg("play tone is pending!!!")
-
-                               ui_info = g_variant_new("(isib)", command_id, text, text_len, user_confirm);
-                               sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_NONE, ui_info);
-                               return TRUE;
-                       }
-
-                       telephony_sat_emit_play_tone(sat, command_id, text, text_len, tone_type, duration);
-               } break;
-
-               case SAT_PROATV_CMD_SEND_SMS:{
-                       GVariant *send_sms = NULL;
-
-                       gint command_id, ton, npi, tpdu_type;
-                       gboolean b_packing_required;
-                       gint text_len, number_len, tpdu_data_len;
-                       gchar* text, *dialling_number;
-                       GVariant *tpdu_data, *icon_id;
-
-                       send_sms = sat_manager_send_sms_noti(ctx, plugin_name, (struct tel_sat_send_sms_tlv*) &p_ind->proactive_ind_data.send_sms);
-
-                       if(!send_sms){
-                               dbg("no send sms data");
-                               return TRUE;
-                       }
-
-                       dbg("send sms type_format(%s)", g_variant_get_type_string(send_sms));
-                       g_variant_get(send_sms, "(isi@vbiisii@vi)", &command_id, &text, &text_len, &icon_id, &b_packing_required, &ton, &npi,
-                                       &dialling_number, &number_len, &tpdu_type, &tpdu_data, &tpdu_data_len);
-
-                       dbg("check display text : text(%s) text len(%d)", text, text_len);
-                       if(text_len > 1 && (g_strcmp0(text,"") != 0) ){
-                               GVariant *ui_info = NULL;
-                               gboolean user_confirm = FALSE;
-                               dbg("text should be displayed by ui");
-                               dbg("send sms is pending!!!")
-
-                               ui_info = g_variant_new("(isib)", command_id, text, text_len, user_confirm);
-                               sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_NONE, ui_info);
-                               return TRUE;
-                       }
-
-                       telephony_sat_emit_send_sms(sat, command_id, text, text_len, b_packing_required,
-                                       ton, npi, dialling_number, number_len, tpdu_type, tpdu_data, tpdu_data_len);
-               } break;
-
-               case SAT_PROATV_CMD_SEND_SS:{
-                       GVariant *send_ss = NULL;
-
-                       gint command_id, ton, npi;
-                       gint text_len, ss_str_len;
-                       gchar* text, *ss_string;
-
-                       GVariant *icon_id;
-
-                       send_ss = sat_manager_send_ss_noti(ctx, plugin_name, (struct tel_sat_send_ss_tlv*) &p_ind->proactive_ind_data.send_ss);
-
-                       if(!send_ss){
-                               dbg("no send ss data");
-                               return TRUE;
-                       }
-
-                       dbg("send ss type_format(%s)", g_variant_get_type_string(send_ss));
-                       g_variant_get(send_ss, "(isi@viiis)", &command_id, &text, &text_len, &icon_id,
-                                       &ton, &npi, &ss_str_len, &ss_string);
-
-                       dbg("check display text : text(%s) text len(%d)", text, text_len);
-                       if(text_len > 1 && (g_strcmp0(text,"") != 0) ){
-                               GVariant *ui_info = NULL;
-                               gboolean user_confirm = FALSE;
-                               dbg("text should be displayed by ui");
-                               dbg("send ss is pending!!!")
-
-                               ui_info = g_variant_new("(isib)", command_id, text, text_len, user_confirm);
-                               sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_NONE, ui_info);
-                               return TRUE;
-                       }
-
-                       telephony_sat_emit_send_ss(sat, command_id, text, text_len, ton, npi, ss_string);
-               } break;
-
-               case SAT_PROATV_CMD_SEND_USSD:{
-                       GVariant *send_ussd = NULL;
-
-                       gint command_id;
-                       gint text_len, ussd_str_len;
-                       gchar* text, *ussd_string;
-
-                       GVariant *icon_id;
-
-                       send_ussd = sat_manager_send_ussd_noti(ctx, plugin_name, (struct tel_sat_send_ussd_tlv*) &p_ind->proactive_ind_data.send_ussd);
-
-                       if(!send_ussd){
-                               dbg("no send ussd data");
-                               return TRUE;
-                       }
-
-                       dbg("send ussd type_format(%s)", g_variant_get_type_string(send_ussd));
-                       g_variant_get(send_ussd, "(isi@vis)", &command_id, &text, &text_len, &icon_id, &ussd_str_len, &ussd_string);
-
-                       dbg("check display text : text(%s) text len(%d)", text, text_len);
-                       if(text_len > 1 && (g_strcmp0(text,"") != 0) ){
-                               GVariant *ui_info = NULL;
-                               gboolean user_confirm = FALSE;
-                               dbg("text should be displayed by ui");
-                               dbg("send ussd is pending!!!")
-
-                               ui_info = g_variant_new("(isib)", command_id, text, text_len, user_confirm);
-                               sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_NONE, ui_info);
-                               return TRUE;
-                       }
-
-                       telephony_sat_emit_setup_ussd(sat, command_id, text, text_len, ussd_string);
-               } break;
-
-               case SAT_PROATV_CMD_SETUP_CALL:{
-                       GVariant *setup_call = NULL;
-
-                       gint command_id, call_type, text_len, duration;
-                       gchar *text, *call_number;
-                       GVariant *icon_id;
-
-                       setup_call = sat_manager_setup_call_noti(ctx, plugin_name, (struct tel_sat_setup_call_tlv*) &p_ind->proactive_ind_data.setup_call);
-
-                       if(!setup_call){
-                               dbg("no setup call data");
-                               return TRUE;
-                       }
-
-                       dbg("setup call type_format(%s)", g_variant_get_type_string(setup_call));
-                       g_variant_get(setup_call, "(isi@visi)", &command_id, &text, &text_len, &icon_id, &call_type, &call_number, &duration);
-
-                       dbg("check display text : text(%s) text len(%d)", text, text_len);
-                       if(text_len > 1 && (g_strcmp0(text,"") != 0) ){
-                               GVariant *ui_info = NULL;
-                               gboolean user_confirm = TRUE;
-                               dbg("text should be displayed by ui");
-                               dbg("setup call is pending!!!")
-
-                               ui_info = g_variant_new("(isib)", command_id, text, text_len, user_confirm);
-                               sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_NONE, ui_info);
-                               return TRUE;
-                       }
-
-                       telephony_sat_emit_setup_call(sat, command_id, text, text_len, call_type,
-                                       call_number, duration);
-               }break;
-
-               case SAT_PROATV_CMD_SETUP_EVENT_LIST:{
-                       GVariant *event_list = NULL;
-
-                       gint event_cnt;
-                       GVariant *evt_list;
-
-                       event_list = sat_manager_setup_event_list_noti(ctx, plugin_name, (struct tel_sat_setup_event_list_tlv*) &p_ind->proactive_ind_data.setup_event_list);
-
-                       if(!event_list){
-                               dbg("no setup event list data");
-                               return TRUE;
-                       }
-
-                       dbg("setup event list type_format(%s)", g_variant_get_type_string(event_list));
-                       g_variant_get(event_list, "(i@v)", &event_cnt, &evt_list);
-
-                       telephony_sat_emit_setup_event_list(sat, event_cnt, evt_list);
-               } break;
-
-               case SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT:{
-                       GVariant *setup_idle_mode = NULL;
-
-                       gint command_id, text_len;
-                       gchar* text;
-                       GVariant *icon_id;
+                               call_num = g_strdup(cc_result_noti->address.dialing_number);
+                       ss_string = g_strdup("");
+               }
+               else if(cc_result_noti->ss_string.string_len > 0){
+                       ton = cc_result_noti->ss_string.ton;
+                       npi = cc_result_noti->ss_string.npi;
+                       call_num = g_strdup("");
+                       ss_string = g_strdup(cc_result_noti->ss_string.ss_string);
+               }
+
+               if(cc_result_noti->alpha_id.alpha_data_len > 0){
+                       text = g_strdup(cc_result_noti->alpha_id.alpha_data);
+               }
+               else{
+                       text = g_strdup("");
+               }
+
+               if(cc_result_noti->sub_address.subaddress_len > 0){
+                       sub_addr = g_strdup(cc_result_noti->sub_address.subaddress);
+               }
+               else{
+                       sub_addr = g_strdup("");
+               }
+
+               if(cc_result_noti->ccp1.data_len > 0){
+                       ccp1 = g_strdup(cc_result_noti->ccp1.data);
+               }
+               else{
+                       ccp1 = g_strdup("");
+               }
+
+
+               if(cc_result_noti->ccp2.data_len > 0){
+                       ccp2 = g_strdup(cc_result_noti->ccp2.data);
+               }
+               else{
+                       ccp2 = g_strdup("");
+               }
+
+               telephony_sat_emit_call_control_result(sat, call_ctrl_result, text, ton, npi, call_num,
+                       ss_string, sub_addr, ccp1, ccp2, bc_repeat_indicator);
+
+                       g_free(text); g_free(call_num); g_free(ss_string); g_free(sub_addr); g_free(ccp1); g_free(ccp2);
+                       return TRUE;
+               }
+               break;
 
-                       setup_idle_mode = sat_manager_setup_idle_mode_text_noti(ctx, plugin_name, (struct tel_sat_setup_idle_mode_text_tlv*) &p_ind->proactive_ind_data.setup_idle_mode_text);
+               case TNOTI_SAT_MO_SM_CTRL_RESULT: {
+                       struct tnoti_sat_mo_sm_control_result_ind *mo_sm_result_noti = NULL;
+                       gint call_ctrl_result = 0;
+                       gint rp_dst_ton = 0x0F, rp_dst_npi = 0X0F, tp_dst_ton = 0x0F, tp_dst_npi = 0X0F;
+                       gchar *text = NULL, *rp_dst_call_num = NULL, *tp_dst_call_num = NULL;
 
-                       if(!setup_idle_mode){
-                               dbg("no setup idle mode text data");
-                               return TRUE;
+                       mo_sm_result_noti = (struct tnoti_sat_mo_sm_control_result_ind *)data;
+                       if (mo_sm_result_noti == NULL) {
+                               err("Indication data is NULL");
+                               return FALSE;
                        }
+                       dbg("sat mo sm control result notification");
 
-                       dbg("setup idle mode text type_format(%s)", g_variant_get_type_string(setup_idle_mode));
-                       g_variant_get(setup_idle_mode, "(isi@v)", &command_id, &text, &text_len, &icon_id);
+               call_ctrl_result = mo_sm_result_noti->cc_result;
 
-                       if(text_len > 1 && (g_strcmp0(text,"") != 0) ){
-                               GVariant *ui_info = NULL;
-                               gboolean user_confirm = TRUE;
-                               dbg("text should be displayed by ui");
-                               dbg("setup idle mode text is displayed!!!")
+               if(mo_sm_result_noti->rp_dst_address.dialing_number_len > 0){
+                       rp_dst_ton = mo_sm_result_noti->rp_dst_address.ton;
+                       rp_dst_npi = mo_sm_result_noti->rp_dst_address.npi;
+                       if(rp_dst_ton == TON_INTERNATIONAL)
+                               rp_dst_call_num = g_strdup_printf("+%s", mo_sm_result_noti->rp_dst_address.dialing_number);
+                       else
+                               rp_dst_call_num = g_strdup(mo_sm_result_noti->rp_dst_address.dialing_number);
+               } else {
+                       rp_dst_call_num = g_strdup("");
+               }
+
+               if(mo_sm_result_noti->tp_dst_address.dialing_number_len > 0){
+                       tp_dst_ton = mo_sm_result_noti->tp_dst_address.ton;
+                       tp_dst_npi = mo_sm_result_noti->tp_dst_address.npi;
+                       if(tp_dst_ton == TON_INTERNATIONAL)
+                               tp_dst_call_num = g_strdup_printf("+%s", mo_sm_result_noti->tp_dst_address.dialing_number);
+                       else
+                               tp_dst_call_num = g_strdup(mo_sm_result_noti->tp_dst_address.dialing_number);
+               } else {
+                       tp_dst_call_num = g_strdup("");
+               }
+
+               if(mo_sm_result_noti->alpha_id.alpha_data_len > 0){
+                       text = g_strdup(mo_sm_result_noti->alpha_id.alpha_data);
+               }
+               else{
+                       text = g_strdup("");
+               }
+
+               telephony_sat_emit_mo_sm_control_result(sat, call_ctrl_result, text,
+                       rp_dst_ton, rp_dst_npi, rp_dst_call_num, tp_dst_ton, tp_dst_npi, tp_dst_call_num);
+
+                       g_free(text); g_free(rp_dst_call_num); g_free(tp_dst_call_num);
+                       return TRUE;
+               }
+               break;
 
-                               ui_info = g_variant_new("(isib)", command_id, text, text_len, user_confirm);
-                               sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_NONE, ui_info);
-                               return TRUE;
+               //Proactive Command Notification
+               case TNOTI_SAT_PROACTIVE_CMD: {
+                       struct tnoti_sat_proactive_ind *p_ind;
+                       TcorePlugin *plg;
+                       plg = tcore_object_ref_plugin(source);
+                       if (plg == NULL) {
+                               dbg("there is no valid plugin at this point");
+                               return FALSE;
                        }
 
-                       telephony_sat_emit_setup_idle_mode_text(sat, command_id, text, text_len);
-               } break;
-
-               case SAT_PROATV_CMD_OPEN_CHANNEL:{
-                       GVariant *open_channel = NULL;
-
-                       gint command_id, bearer_type, protocol_type, dest_addr_type;
-                       gboolean immediate_link, auto_reconnection, bg_mode;
-                       gint text_len, buffer_size, port_number;
-                       gchar *text, *dest_address;
-                       GVariant *icon_id;
-                       GVariant *bearer_param;
-                       GVariant *bearer_detail;
-
-                       open_channel = sat_manager_open_channel_noti(ctx, plugin_name, (struct tel_sat_open_channel_tlv*) &p_ind->proactive_ind_data.open_channel);
-
-                       if(!open_channel){
-                               dbg("no open channel data");
-                               return TRUE;
+                       if (cp_name == NULL) {
+                               dbg("CP name is NULL");
+                               return FALSE;
                        }
 
-                       dbg("open channel type_format(%s)", g_variant_get_type_string(open_channel));
-                       g_variant_get(open_channel,"(isi@vbbbi@viiiis@v)", &command_id, &text, &text_len, &icon_id, &immediate_link, &auto_reconnection, &bg_mode,
-                                       &bearer_type, &bearer_param, &buffer_size, &protocol_type, &port_number, &dest_addr_type, &dest_address, &bearer_detail);
-
-                       dbg("check display text : text(%s) text len(%d)", text, text_len);
-                       if(text_len > 1 && (g_strcmp0(text,"") != 0) ){
-                               GVariant *ui_info = NULL;
-                               gboolean user_confirm = TRUE;
-                               dbg("text should be displayed by ui");
-                               dbg("open channel text is displayed!!!")
-
-                               ui_info = g_variant_new("(isib)", command_id, text, text_len, user_confirm);
-                               sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_NONE, ui_info);
-                               return TRUE;
+                       p_ind = (struct tnoti_sat_proactive_ind *)data;
+                       if (p_ind == NULL) {
+                               dbg("Indication data is NULL");
+                               return FALSE;
                        }
-
-                       telephony_sat_emit_open_channel(sat, command_id, text, text_len, immediate_link, auto_reconnection, bg_mode,
-                                               bearer_type, bearer_param, buffer_size, protocol_type, port_number, dest_addr_type, dest_address, bearer_detail);
-               } break;
-
-               case SAT_PROATV_CMD_CLOSE_CHANNEL:{
-                       GVariant *close_channel = NULL;
-
-                       gint command_id, channel_id, text_len;
-                       gchar *text;
-                       GVariant *icon_id;
-
-                       close_channel = sat_manager_close_channel_noti(ctx, plugin_name, (struct tel_sat_close_channel_tlv*) &p_ind->proactive_ind_data.close_channel);
-
-                       if(!close_channel){
-                               dbg("no close channel data");
-                               return TRUE;
+                       dbg("notified sat proactive command(%d)", p_ind->cmd_type);
+
+                       switch (p_ind->cmd_type) {
+                               case SAT_PROATV_CMD_SETUP_MENU:{
+                                       GVariant *menu_info = NULL;
+                                       gchar *title;
+                                       gint command_id, menu_cnt;
+                                       gboolean b_present, b_helpinfo, b_updated;
+                                       GVariant *items;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       GVariant *icon_id = NULL;
+                                       GVariant *icon_list = NULL;
+#endif
+                                       menu_info = sat_manager_caching_setup_menu_info(ctx, cp_name,
+                                                                       (struct tel_sat_setup_menu_tlv*)&p_ind->proactive_ind_data.setup_menu);
+
+                                       dbg("menu_info type_format(%s)", g_variant_get_type_string(menu_info));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       g_variant_get(menu_info, "(ibs@vibb@v@v)", &command_id, &b_present, &title, &items,
+                                                       &menu_cnt, &b_helpinfo, &b_updated, &icon_id, &icon_list);
+#else
+                                       g_variant_get(menu_info, "(ibs@vibb)", &command_id, &b_present, &title, &items,
+                                                       &menu_cnt, &b_helpinfo, &b_updated);
+#endif
+                                       if(!menu_cnt){
+                                               dbg("no main menu data");
+                                               /* No need to cache anything so make store NULL in cached_sat_main_menu */
+                                               _sat_set_main_menu(ctx, cp_name, NULL);
+                                               g_variant_unref(menu_info);
+                                       } else {
+                                               _sat_set_main_menu(ctx, cp_name, menu_info);
+                                       }
+                                       if(b_updated) {
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                               telephony_sat_emit_setup_menu(sat, command_id, b_present, title, items, menu_cnt,
+                                                       b_helpinfo, b_updated, icon_id, icon_list);
+#else
+                                               telephony_sat_emit_setup_menu(sat, command_id, b_present, title, items, menu_cnt,
+                                                       b_helpinfo, b_updated);
+#endif
+                                       }
+                                       g_free(title);
+                               } break;
+
+                               case SAT_PROATV_CMD_DISPLAY_TEXT:{
+                                       GVariant *display_text = NULL;
+
+                                       gint command_id, text_len, duration;
+                                       gboolean high_priority, user_rsp_required, immediately_rsp;
+                                       gchar* text = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       GVariant *icon_id = NULL;
+#endif
+                                       int ret;
+
+                                       display_text = sat_manager_display_text_noti(ctx, cp_name, (struct tel_sat_display_text_tlv*) &p_ind->proactive_ind_data.display_text, p_ind->decode_err_code);
+
+                                       if(!display_text){
+                                               dbg("no display text data");
+                                               return TRUE;
+                                       }
+
+                                       dbg("display text type_format(%s)", g_variant_get_type_string(display_text));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       g_variant_get(display_text, "(isiibbb@v)", &command_id, &text, &text_len, &duration,
+                                                               &high_priority, &user_rsp_required, &immediately_rsp, &icon_id);
+#else
+                                       g_variant_get(display_text, "(isiibbb)", &command_id, &text, &text_len, &duration,
+                                                               &high_priority, &user_rsp_required, &immediately_rsp);
+#endif
+                                       ret = sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_DISPLAY_TEXT, display_text, slot_id);
+                                       if(!ret) {
+                                               int rv;
+                                               dbg("fail to launch sat-ui, remove the queued data!!\n");
+                                               if(!sat_manager_handle_sat_ui_launch_fail(ctx, cp_name, p_ind))
+                                                       dbg("Fail to send terminal response\n");
+                                               rv = sat_manager_remove_cmd_by_id(ctx, command_id);
+                                               if(!rv)
+                                                       dbg("fail to dequeue data\n");
+                                       }
+
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       telephony_sat_emit_display_text(sat, command_id, text, text_len, duration,
+                                                       high_priority, user_rsp_required, immediately_rsp, icon_id);
+#else
+                                       telephony_sat_emit_display_text(sat, command_id, text, text_len, duration,
+                                                       high_priority, user_rsp_required, immediately_rsp);
+#endif
+                                       g_free(text);
+                               } break;
+
+                               case SAT_PROATV_CMD_SELECT_ITEM:{
+                                       GVariant *select_menu = NULL;
+
+                                       gboolean help_info ;
+                                       gchar *selected_text = NULL;
+                                       gint command_id, default_item_id, menu_cnt, text_len =0;
+                                       GVariant *menu_items;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       GVariant *icon_id, *icon_list;
+#endif
+                                       int ret;
+
+                                       select_menu = sat_manager_select_item_noti(ctx, cp_name, (struct tel_sat_select_item_tlv*) &p_ind->proactive_ind_data.select_item);
+
+                                       if(!select_menu){
+                                               dbg("no select menu data");
+                                               return TRUE;
+                                       }
+
+                                       dbg("select menu type_format(%s)", g_variant_get_type_string(select_menu));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       g_variant_get(select_menu, "(ibsiii@v@v@v)", &command_id, &help_info, &selected_text,
+                                                       &text_len, &default_item_id, &menu_cnt, &menu_items, &icon_id, &icon_list);
+#else
+                                       g_variant_get(select_menu, "(ibsiii@v)", &command_id, &help_info, &selected_text,
+                                                       &text_len, &default_item_id, &menu_cnt, &menu_items);
+#endif
+                                       ret = sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_SELECT_ITEM, select_menu, slot_id);
+                                       if(!ret) {
+                                               int rv;
+                                               dbg("fail to launch sat-ui, remove the queued data!!\n");
+                                               if(!sat_manager_handle_sat_ui_launch_fail(ctx, cp_name, p_ind))
+                                                       dbg("Fail to send terminal response\n");
+                                               rv = sat_manager_remove_cmd_by_id(ctx, command_id);
+                                               if(!rv)
+                                                       dbg("fail to dequeue data\n");
+                                       }
+
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       telephony_sat_emit_select_item (sat, command_id, help_info, selected_text, text_len,
+                                                       default_item_id, menu_cnt, menu_items, icon_id, icon_list);
+#else
+                                       telephony_sat_emit_select_item (sat, command_id, help_info, selected_text, text_len,
+                                                       default_item_id, menu_cnt, menu_items);
+#endif
+                                       g_free(selected_text);
+                               } break;
+
+                               case SAT_PROATV_CMD_GET_INKEY:{
+                                       GVariant *get_inkey = NULL;
+                                       gint command_id, key_type, input_character_mode;
+                                       gint text_len, duration;
+                                       gboolean b_numeric, b_help_info;
+                                       gchar *text = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       GVariant *icon_id;
+#endif
+                                       int ret;
+
+                                       get_inkey = sat_manager_get_inkey_noti(ctx, cp_name, (struct tel_sat_get_inkey_tlv*) &p_ind->proactive_ind_data.get_inkey, p_ind->decode_err_code);
+
+                                       if(!get_inkey){
+                                               dbg("no get inkey data");
+                                               return TRUE;
+                                       }
+
+                                       dbg("get inkey type_format(%s)", g_variant_get_type_string(get_inkey));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       g_variant_get(get_inkey, "(iiibbsii@v)", &command_id, &key_type, &input_character_mode,
+                                                       &b_numeric,&b_help_info, &text, &text_len, &duration, &icon_id);
+#else
+                                       g_variant_get(get_inkey, "(iiibbsii)", &command_id, &key_type, &input_character_mode,
+                                                       &b_numeric,&b_help_info, &text, &text_len, &duration);
+#endif
+                                       ret = sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_GET_INKEY, get_inkey, slot_id);
+                                       if(!ret) {
+                                               int rv;
+                                               dbg("fail to launch sat-ui, remove the queued data!!\n");
+                                               if(!sat_manager_handle_sat_ui_launch_fail(ctx, cp_name, p_ind))
+                                                       dbg("Fail to send terminal response\n");
+                                               rv = sat_manager_remove_cmd_by_id(ctx, command_id);
+                                               if(!rv)
+                                                       dbg("fail to dequeue data\n");
+                                       }
+
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       telephony_sat_emit_get_inkey(sat, command_id, key_type, input_character_mode,
+                                                       b_numeric, b_help_info, text, text_len, duration, icon_id);
+#else
+                                       telephony_sat_emit_get_inkey(sat, command_id, key_type, input_character_mode,
+                                                       b_numeric, b_help_info, text, text_len, duration);
+#endif
+                                       g_free(text);
+                               } break;
+
+                               case SAT_PROATV_CMD_GET_INPUT:{
+                                       GVariant *get_input = NULL;
+                                       gint command_id, input_character_mode;
+                                       gint text_len, def_text_len, rsp_len_min, rsp_len_max;
+                                       gboolean b_numeric, b_help_info, b_echo_input;
+                                       gchar *text = NULL, *def_text = NULL;
+                                       int ret;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       GVariant *icon_id;
+#endif
+                                       get_input = sat_manager_get_input_noti(ctx, cp_name, (struct tel_sat_get_input_tlv*) &p_ind->proactive_ind_data.get_input, p_ind->decode_err_code);
+
+                                       if(!get_input){
+                                               dbg("no get input data");
+                                               return TRUE;
+                                       }
+
+                                       dbg("get input type_format(%s)", g_variant_get_type_string(get_input));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       g_variant_get(get_input, "(iibbbsiiisi@v)", &command_id, &input_character_mode, &b_numeric, &b_help_info, &b_echo_input,
+                                                       &text, &text_len, &rsp_len_max, &rsp_len_min, &def_text, &def_text_len, &icon_id);
+#else
+                                       g_variant_get(get_input, "(iibbbsiiisi)", &command_id, &input_character_mode, &b_numeric, &b_help_info, &b_echo_input,
+                                                       &text, &text_len, &rsp_len_max, &rsp_len_min, &def_text, &def_text_len);
+#endif
+                                       ret = sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_GET_INPUT, get_input, slot_id);
+                                       if(!ret) {
+                                               int rv;
+                                               dbg("fail to launch sat-ui, remove the queued data!!\n");
+                                               if(!sat_manager_handle_sat_ui_launch_fail(ctx, cp_name, p_ind))
+                                                       dbg("Fail to send terminal response\n");
+                                               rv = sat_manager_remove_cmd_by_id(ctx, command_id);
+                                               if(!rv)
+                                                       dbg("fail to dequeue data\n");
+                                       }
+
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       telephony_sat_emit_get_input(sat, command_id, input_character_mode, b_numeric, b_help_info,
+                                                       b_echo_input, text, text_len, rsp_len_max, rsp_len_min, def_text, def_text_len, icon_id);
+#else
+                                       telephony_sat_emit_get_input(sat, command_id, input_character_mode, b_numeric, b_help_info,
+                                                       b_echo_input, text, text_len, rsp_len_max, rsp_len_min, def_text, def_text_len);
+#endif
+                                       g_free(text);
+                                       g_free(def_text);
+                               } break;
+
+                               case SAT_PROATV_CMD_PLAY_TONE:{
+                                       GVariant *play_tone = NULL;
+                                       gint command_id, tone_type, duration;
+                                       gint text_len;
+                                       gchar* text = NULL;
+                                       int ret;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       GVariant *icon_id;
+#endif
+                                       play_tone = sat_manager_play_tone_noti(ctx, cp_name, (struct tel_sat_play_tone_tlv*) &p_ind->proactive_ind_data.play_tone);
+
+                                       if(!play_tone){
+                                               dbg("no play tone data");
+                                               return TRUE;
+                                       }
+
+                                       dbg("play tone type_format(%s)", g_variant_get_type_string(play_tone));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       g_variant_get(play_tone, "(isi@vii)", &command_id, &text, &text_len, &icon_id, &tone_type, &duration);
+#else
+                                       g_variant_get(play_tone, "(isiii)", &command_id, &text, &text_len, &tone_type, &duration);
+#endif
+                                       ret = sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_PLAY_TONE, play_tone, slot_id);
+                                       if(!ret) {
+                                               int rv;
+                                               dbg("fail to launch sat-ui, remove the queued data!!\n");
+                                               if(!sat_manager_handle_sat_ui_launch_fail(ctx, cp_name, p_ind))
+                                                       dbg("Fail to send terminal response\n");
+                                               rv = sat_manager_remove_cmd_by_id(ctx, command_id);
+                                               if(!rv)
+                                                       dbg("fail to dequeue data\n");
+                                       }
+
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       telephony_sat_emit_play_tone(sat, command_id, text, text_len, icon_id, tone_type, duration);
+#else
+                                       telephony_sat_emit_play_tone(sat, command_id, text, text_len, tone_type, duration);
+#endif
+                                       g_free(text);
+                               } break;
+
+                               case SAT_PROATV_CMD_SEND_SMS:{
+                                       GVariant *send_sms = NULL;
+
+                                       gint command_id, ton, npi, tpdu_type;
+                                       gboolean b_packing_required;
+                                       gint text_len, number_len, tpdu_data_len;
+                                       gchar* text = NULL, *dialling_number = NULL;
+                                       GVariant *tpdu_data;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       GVariant *icon_id;
+#endif
+                                       send_sms = sat_manager_send_sms_noti(ctx, cp_name, (struct tel_sat_send_sms_tlv*) &p_ind->proactive_ind_data.send_sms);
+
+                                       if(!send_sms){
+                                               dbg("no send sms data");
+                                               return TRUE;
+                                       }
+
+                                       dbg("send sms type_format(%s)", g_variant_get_type_string(send_sms));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       g_variant_get(send_sms, "(isi@vbiisii@vi)", &command_id, &text, &text_len, &icon_id, &b_packing_required, &ton, &npi,
+                                                       &dialling_number, &number_len, &tpdu_type, &tpdu_data, &tpdu_data_len);
+#else
+                                       g_variant_get(send_sms, "(isibiisii@vi)", &command_id, &text, &text_len, &b_packing_required, &ton, &npi,
+                                                       &dialling_number, &number_len, &tpdu_type, &tpdu_data, &tpdu_data_len);
+#endif
+                                       dbg("check display text : text(%s) text len(%d)", text, text_len);
+                                       if(text_len > 1 && (g_strcmp0(text,"") != 0) ){
+                                               GVariant *ui_info = NULL;
+                                               gboolean user_confirm = FALSE;
+                                               int ret;
+                                               dbg("text should be displayed by ui");
+                                               dbg("send sms is pending!!!");
+
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                               ui_info = g_variant_new("(isibv)", command_id, text, text_len, user_confirm, icon_id);
+#else
+                                               ui_info = g_variant_new("(isib)", command_id, text, text_len, user_confirm);
+#endif
+                                               ret = sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_SEND_SMS, ui_info, slot_id);
+                                               if(!ret) {
+                                                       int rv;
+                                                       dbg("fail to launch sat-ui, remove the queued data!!\n");
+                                                       if(!sat_manager_handle_sat_ui_launch_fail(ctx, cp_name, p_ind))
+                                                               dbg("Fail to send terminal response\n");
+                                                       rv = sat_manager_remove_cmd_by_id(ctx, command_id);
+                                                       if(!rv)
+                                                               dbg("fail to dequeue data\n");
+                                               }
+                                               g_free(text);
+                                               g_free(dialling_number);
+                                               return TRUE;
+                                       }
+#if !defined(TIZEN_PLATFORM_USE_QCOM_QMI)
+                                       telephony_sat_emit_send_sms(sat, command_id, text, text_len, b_packing_required,
+                                                       ton, npi, dialling_number, number_len, tpdu_type, tpdu_data, tpdu_data_len);
+#endif
+                                       g_free(text);
+                                       g_free(dialling_number);
+                               } break;
+
+                               case SAT_PROATV_CMD_SEND_SS:{
+                                       GVariant *send_ss = NULL;
+
+                                       gint command_id, ton, npi;
+                                       gint text_len, ss_str_len;
+                                       gchar* text = NULL, *ss_string = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       GVariant *icon_id;
+#endif
+                                       send_ss = sat_manager_send_ss_noti(ctx, cp_name, (struct tel_sat_send_ss_tlv*) &p_ind->proactive_ind_data.send_ss);
+
+                                       if(!send_ss){
+                                               dbg("no send ss data");
+                                               return TRUE;
+                                       }
+
+                                       dbg("send ss type_format(%s)", g_variant_get_type_string(send_ss));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       g_variant_get(send_ss, "(isi@viiis)", &command_id, &text, &text_len, &icon_id,
+                                                       &ton, &npi, &ss_str_len, &ss_string);
+#else
+                                       g_variant_get(send_ss, "(isiiiis)", &command_id, &text, &text_len,
+                                                       &ton, &npi, &ss_str_len, &ss_string);
+#endif
+                                       dbg("check display text : text(%s) text len(%d)", text, text_len);
+                                       if(text_len > 1 && (g_strcmp0(text,"") != 0) ){
+                                               GVariant *ui_info = NULL;
+                                               gboolean user_confirm = FALSE;
+                                               int ret;
+                                               dbg("text should be displayed by ui");
+                                               dbg("send ss is pending!!!");
+
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                               ui_info = g_variant_new("(isibv)", command_id, text, text_len, user_confirm, icon_id);
+#else
+                                               ui_info = g_variant_new("(isib)", command_id, text, text_len, user_confirm);
+#endif
+                                               ret = sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_NONE, ui_info, slot_id);
+                                               if(!ret) {
+                                                       int rv;
+                                                       dbg("fail to launch sat-ui, remove the queued data!!\n");
+                                                       if(!sat_manager_handle_sat_ui_launch_fail(ctx, cp_name, p_ind))
+                                                               dbg("Fail to send terminal response\n");
+                                                       rv = sat_manager_remove_cmd_by_id(ctx, command_id);
+                                                       if(!rv)
+                                                               dbg("fail to dequeue data\n");
+                                               }
+                                               g_free(text);
+                                               g_free(ss_string);
+                                               return TRUE;
+                                       }
+#if !defined(TIZEN_PLATFORM_USE_QCOM_QMI)
+                                       telephony_sat_emit_send_ss(sat, command_id, text, text_len, ton, npi, ss_string);
+                                       //tizen ciss
+                                       sat_ui_support_launch_ciss_application(SAT_PROATV_CMD_SEND_SS, send_ss, slot_id);
+#endif
+                                       g_free(text);
+                                       g_free(ss_string);
+                               } break;
+
+                               case SAT_PROATV_CMD_SEND_USSD:{
+                                       GVariant *send_ussd = NULL;
+
+                                       gint command_id;
+                                       gint text_len, ussd_str_len;
+                                       guchar dcs;
+                                       gchar* text = NULL, *ussd_string = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       GVariant *icon_id;
+#endif
+                                       send_ussd = sat_manager_send_ussd_noti(ctx, cp_name, (struct tel_sat_send_ussd_tlv*) &p_ind->proactive_ind_data.send_ussd);
+
+                                       if(!send_ussd){
+                                               dbg("no send ussd data");
+                                               return TRUE;
+                                       }
+
+                                       dbg("send ussd type_format(%s)", g_variant_get_type_string(send_ussd));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       g_variant_get(send_ussd, "(isi@vyis)", &command_id, &text, &text_len, &icon_id, &dcs, &ussd_str_len, &ussd_string);
+#else
+                                       g_variant_get(send_ussd, "(isiyis)", &command_id, &text, &text_len, &dcs, &ussd_str_len, &ussd_string);
+#endif
+                                       dbg("check display text : text(%s) text len(%d)", text, text_len);
+                                       if(text_len > 1 && (g_strcmp0(text,"") != 0) ){
+                                               GVariant *ui_info = NULL;
+                                               gboolean user_confirm = FALSE;
+                                               int ret;
+                                               dbg("text should be displayed by ui");
+                                               dbg("send ussd is pending!!!");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                               ui_info = g_variant_new("(isibv)", command_id, text, text_len, user_confirm, icon_id);
+#else
+                                               ui_info = g_variant_new("(isib)", command_id, text, text_len, user_confirm);
+#endif
+                                               ret = sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_NONE, ui_info, slot_id);
+                                               if(!ret) {
+                                                       int rv;
+                                                       dbg("fail to launch sat-ui, remove the queued data!!\n");
+                                                       if(!sat_manager_handle_sat_ui_launch_fail(ctx, cp_name, p_ind))
+                                                               dbg("Fail to send terminal response\n");
+                                                       rv = sat_manager_remove_cmd_by_id(ctx, command_id);
+                                                       if(!rv)
+                                                               dbg("fail to dequeue data\n");
+                                               }
+                                               g_free(text);
+                                               g_free(ussd_string);
+                                               return TRUE;
+                                       }
+#if !defined(TIZEN_PLATFORM_USE_QCOM_QMI)
+                                       telephony_sat_emit_setup_ussd(sat, command_id, text, text_len, dcs, ussd_string);
+                                       //tizen ciss ui
+                                       sat_ui_support_launch_ciss_application(SAT_PROATV_CMD_SEND_USSD, send_ussd, slot_id);
+#endif
+                                       g_free(text);
+                                       g_free(ussd_string);
+                               } break;
+
+                               case SAT_PROATV_CMD_SETUP_CALL:{
+                                       GVariant *setup_call = NULL;
+
+                                       gint command_id, call_type, confirmed_text_len, text_len, duration;
+                                       gchar *confirmed_text, *text = NULL, *call_number = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       GVariant *icon_id;
+#endif
+                                       setup_call = sat_manager_setup_call_noti(ctx, cp_name, (struct tel_sat_setup_call_tlv*) &p_ind->proactive_ind_data.setup_call);
+
+                                       if(!setup_call){
+                                               dbg("no setup call data");
+                                               return TRUE;
+                                       }
+
+                                       dbg("setup call type_format(%s)", g_variant_get_type_string(setup_call));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       g_variant_get(setup_call, "(isisi@visi)", &command_id, &confirmed_text, &confirmed_text_len, &text, &text_len, &icon_id, &call_type, &call_number, &duration);
+#else
+                                       g_variant_get(setup_call, "(isisiisi)", &command_id, &confirmed_text, &confirmed_text_len, &text, &text_len, &call_type, &call_number, &duration);
+#endif
+                                       dbg("check display text : text(%s) text len(%d)", confirmed_text, confirmed_text_len);
+                                       if(confirmed_text_len > 1 && (g_strcmp0(confirmed_text,"") != 0) ){
+                                               GVariant *ui_info = NULL;
+                                               gboolean user_confirm = TRUE;
+                                               int ret;
+                                               dbg("text should be displayed by ui");
+                                               dbg("setup call is pending!!!");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                               ui_info = g_variant_new("(isibv)", command_id, confirmed_text, confirmed_text_len, user_confirm, icon_id);
+#else
+                                               ui_info = g_variant_new("(isib)", command_id, confirmed_text, confirmed_text_len, user_confirm);
+#endif
+                                               ret = sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_NONE, ui_info, slot_id);
+                                               if(!ret) {
+                                                       int rv;
+                                                       dbg("fail to launch sat-ui, remove the queued data!!\n");
+                                                       if(!sat_manager_handle_sat_ui_launch_fail(ctx, cp_name, p_ind))
+                                                               dbg("Fail to send terminal response\n");
+                                                       rv = sat_manager_remove_cmd_by_id(ctx, command_id);
+                                                       if(!rv)
+                                                               dbg("fail to dequeue data\n");
+                                               }
+                                               g_free(text);
+                                               g_free(call_number);
+                                               return TRUE;
+                                       }
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       telephony_sat_emit_setup_call(sat, command_id, confirmed_text, confirmed_text_len,text, text_len, icon_id, call_type, call_number, duration);
+#else
+                                       telephony_sat_emit_setup_call(sat, command_id, confirmed_text, confirmed_text_len,text, text_len, call_type, call_number, duration);
+#endif
+                                       g_free(text);
+                                       g_free(call_number);
+
+                                       //tizen call ui in no alpha id case
+                                       sat_ui_support_launch_call_application(SAT_PROATV_CMD_SETUP_CALL, setup_call, slot_id);
+
+                               }break;
+
+                               case SAT_PROATV_CMD_SETUP_EVENT_LIST:{
+                                       GVariant *event_list = NULL;
+
+                                       gint event_cnt;
+                                       GVariant *evt_list;
+
+                                       event_list = sat_manager_setup_event_list_noti(ctx, cp_name, (struct tel_sat_setup_event_list_tlv*) &p_ind->proactive_ind_data.setup_event_list);
+
+                                       if(!event_list){
+                                               dbg("no setup event list data");
+                                               return TRUE;
+                                       }
+
+                                       dbg("setup event list type_format(%s)", g_variant_get_type_string(event_list));
+                                       g_variant_get(event_list, "(i@v)", &event_cnt, &evt_list);
+
+                                       telephony_sat_emit_setup_event_list(sat, event_cnt, evt_list);
+
+                                       //bip proactive command is only handled by BIP Manager
+                                       {
+                                               GDBusConnection *conn = NULL;
+                                               const gchar *g_path = NULL;
+
+                                               conn = g_dbus_object_manager_server_get_connection(ctx->manager);
+                                               g_path = g_dbus_object_get_object_path(G_DBUS_OBJECT(object));
+
+                                               /* TODO: SAT Event Downloader should execute event_list as well. */
+                                               sat_ui_support_exec_evtdw(conn, g_path, SAT_PROATV_CMD_SETUP_EVENT_LIST, event_list);
+                                               sat_ui_support_exec_bip(conn, g_path, SAT_PROATV_CMD_SETUP_EVENT_LIST, event_list);
+                                       }
+                               } break;
+
+                               case SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT:{
+                                       GVariant *setup_idle_mode = NULL;
+                                       int ret;
+
+                                       gint command_id, text_len;
+                                       gchar* text = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       GVariant *icon_id;
+#endif
+                                       setup_idle_mode = sat_manager_setup_idle_mode_text_noti(ctx, cp_name, (struct tel_sat_setup_idle_mode_text_tlv*) &p_ind->proactive_ind_data.setup_idle_mode_text, p_ind->decode_err_code);
+
+                                       if(!setup_idle_mode){
+                                               dbg("no setup idle mode text data");
+                                               return TRUE;
+                                       }
+
+                                       dbg("setup idle mode text type_format(%s)", g_variant_get_type_string(setup_idle_mode));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       g_variant_get(setup_idle_mode, "(isi@v)", &command_id, &text, &text_len, &icon_id);
+#else
+                                       g_variant_get(setup_idle_mode, "(isi)", &command_id, &text, &text_len);
+#endif
+
+                                       ret = sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT, setup_idle_mode, slot_id);
+                                       if(!ret) {
+                                               int rv;
+                                               dbg("fail to launch sat-ui, remove the queued data!!\n");
+                                               if(!sat_manager_handle_sat_ui_launch_fail(ctx, cp_name, p_ind))
+                                                       dbg("Fail to send terminal response\n");
+                                               rv = sat_manager_remove_cmd_by_id(ctx, command_id);
+                                               if(!rv)
+                                                       dbg("fail to dequeue data\n");
+                                       }
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       telephony_sat_emit_setup_idle_mode_text(sat, command_id, text, text_len, icon_id);
+#else
+                                       telephony_sat_emit_setup_idle_mode_text(sat, command_id, text, text_len);
+#endif
+                                       g_free(text);
+                               } break;
+
+                               case SAT_PROATV_CMD_OPEN_CHANNEL:{
+                                       GVariant *open_channel = NULL;
+
+                                       gint command_id, bearer_type, protocol_type, dest_addr_type;
+                                       gboolean immediate_link, auto_reconnection, bg_mode;
+                                       gint text_len, buffer_size, port_number;
+                                       gchar *text = NULL, *dest_address;
+                                       GVariant *bearer_param;
+                                       GVariant *bearer_detail;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       GVariant *icon_id;
+#endif
+                                       open_channel = sat_manager_open_channel_noti(ctx, cp_name, (struct tel_sat_open_channel_tlv*) &p_ind->proactive_ind_data.open_channel);
+
+                                       if(!open_channel){
+                                               dbg("no open channel data");
+                                               return TRUE;
+                                       }
+
+                                       dbg("open channel type_format(%s)", g_variant_get_type_string(open_channel));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       g_variant_get(open_channel,"(isi@vbbbi@viiiis@v)", &command_id, &text, &text_len, &icon_id, &immediate_link, &auto_reconnection, &bg_mode,
+                                                       &bearer_type, &bearer_param, &buffer_size, &protocol_type, &port_number, &dest_addr_type, &dest_address, &bearer_detail);
+#else
+                                       g_variant_get(open_channel,"(isibbbi@viiiis@v)", &command_id, &text, &text_len, &immediate_link, &auto_reconnection, &bg_mode,
+                                                       &bearer_type, &bearer_param, &buffer_size, &protocol_type, &port_number, &dest_addr_type, &dest_address, &bearer_detail);
+#endif
+                                       dbg("check display text : text(%s) text len(%d)", text, text_len);
+                                       if(text_len > 1 && (g_strcmp0(text,"") != 0) ){
+                                               GVariant *ui_info = NULL;
+                                               gboolean user_confirm = TRUE;
+                                               int ret;
+                                               dbg("text should be displayed by ui");
+                                               dbg("open channel text is displayed!!!");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                               ui_info = g_variant_new("(isibv)", command_id, text, text_len, user_confirm, icon_id);
+#else
+                                               ui_info = g_variant_new("(isib)", command_id, text, text_len, user_confirm);
+#endif
+                                               ret = sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_NONE, ui_info, slot_id);
+                                                       if(!ret) {
+                                                       int rv;
+                                                       dbg("fail to launch sat-ui, remove the queued data!!\n");
+                                                       if(!sat_manager_handle_sat_ui_launch_fail(ctx, cp_name, p_ind))
+                                                               dbg("Fail to send terminal response\n");
+                                                       rv = sat_manager_remove_cmd_by_id(ctx, command_id);
+                                                       if(!rv)
+                                                               dbg("fail to dequeue data\n");
+                                               }
+                                               g_free(text);
+                                               g_free(dest_address);
+                                               return TRUE;
+                                       }
+                                       g_free(text);
+                                       g_free(dest_address);
+
+                                       /*telephony_sat_emit_open_channel(sat, command_id, text, text_len, immediate_link, auto_reconnection, bg_mode,
+                                                               bearer_type, bearer_param, buffer_size, protocol_type, port_number, dest_addr_type, dest_address, bearer_detail);*/
+#if !defined(TIZEN_PLATFORM_USE_QCOM_QMI)
+                                       //bip proactive command is only handled by BIP Manager
+                                       {
+                                               GDBusConnection *conn = NULL;
+                                               const gchar *g_path = NULL;
+
+                                               conn = g_dbus_object_manager_server_get_connection(ctx->manager);
+                                               g_path = g_dbus_object_get_object_path(G_DBUS_OBJECT(object));
+
+                                               sat_ui_support_exec_bip(conn, g_path, SAT_PROATV_CMD_OPEN_CHANNEL, open_channel);
+                                       }
+#endif
+                               } break;
+
+                               case SAT_PROATV_CMD_CLOSE_CHANNEL:{
+                                       GVariant *close_channel = NULL;
+
+                                       gint command_id, channel_id, text_len;
+                                       gchar *text = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       GVariant *icon_id;
+#endif
+                                       close_channel = sat_manager_close_channel_noti(ctx, cp_name, (struct tel_sat_close_channel_tlv*) &p_ind->proactive_ind_data.close_channel);
+
+                                       if(!close_channel){
+                                               dbg("no close channel data");
+                                               return TRUE;
+                                       }
+
+                                       //TODO check the data for sat-ui
+
+                                       dbg("close channel type_format(%s)", g_variant_get_type_string(close_channel));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       g_variant_get(close_channel, "(isi@vi)", &command_id, &text, &text_len, &icon_id, &channel_id);
+#else
+                                       g_variant_get(close_channel, "(isii)", &command_id, &text, &text_len, &channel_id);
+#endif
+
+                                       /*telephony_sat_emit_close_channel(sat, command_id, text, text_len, channel_id);*/
+
+                                       //bip proactive command is only handled by BIP Manager
+                                       {
+                                               GDBusConnection *conn = NULL;
+                                               const gchar *g_path = NULL;
+
+                                               conn = g_dbus_object_manager_server_get_connection(ctx->manager);
+                                               g_path = g_dbus_object_get_object_path(G_DBUS_OBJECT(object));
+
+                                               sat_ui_support_exec_bip(conn, g_path, SAT_PROATV_CMD_CLOSE_CHANNEL, close_channel);
+                                       }
+
+                                       g_free(text);
+                               } break;
+
+                               case SAT_PROATV_CMD_RECEIVE_DATA:{
+                                       GVariant *receive_data = NULL;
+
+                                       gint command_id, text_len, channel_id, channel_data_len = 0;
+                                       gchar *text = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       GVariant *icon_id;
+#endif
+                                       receive_data = sat_manager_receive_data_noti(ctx, cp_name, (struct tel_sat_receive_channel_tlv*) &p_ind->proactive_ind_data.receive_data);
+
+                                       if(!receive_data){
+                                               dbg("no receive data data");
+                                               return TRUE;
+                                       }
+
+                                       //TODO check the data for sat-ui
+
+                                       dbg("receive data type_format(%s)", g_variant_get_type_string(receive_data));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       g_variant_get(receive_data, "(isi@vii)", &command_id, &text, &text_len, &icon_id, &channel_id, &channel_data_len);
+#else
+                                       g_variant_get(receive_data, "(isiii)", &command_id, &text, &text_len, &channel_id, &channel_data_len);
+#endif
+                                       /*telephony_sat_emit_receive_data(sat, command_id, text, text_len, channel_id, channel_data_len);*/
+
+                                       //bip proactive command is only handled by BIP Manager
+                                       {
+                                               GDBusConnection *conn = NULL;
+                                               const gchar *g_path = NULL;
+
+                                               conn = g_dbus_object_manager_server_get_connection(ctx->manager);
+                                               g_path = g_dbus_object_get_object_path(G_DBUS_OBJECT(object));
+
+                                               sat_ui_support_exec_bip(conn, g_path, SAT_PROATV_CMD_RECEIVE_DATA, receive_data);
+                                       }
+                                       g_free(text);
+                               } break;
+
+                               case SAT_PROATV_CMD_SEND_DATA:{
+                                       GVariant *send_data = NULL;
+
+                                       gint command_id, channel_id, text_len, channel_data_len;
+                                       gboolean send_data_immediately;
+                                       gchar *text = NULL;
+                                       GVariant *channel_data;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       GVariant *icon_id;
+#endif
+                                       send_data = sat_manager_send_data_noti(ctx, cp_name, (struct tel_sat_send_channel_tlv*) &p_ind->proactive_ind_data.send_data);
+
+                                       if(!send_data){
+                                               dbg("no send data data");
+                                               return TRUE;
+                                       }
+
+                                       //TODO check the data for sat-ui
+
+                                       dbg("send data type_format(%s)", g_variant_get_type_string(send_data));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       g_variant_get(send_data, "(isi@vib@vi)", &command_id, &text, &text_len, &icon_id, &channel_id, &send_data_immediately, &channel_data, &channel_data_len);
+#else
+                                       g_variant_get(send_data, "(isiib@vi)", &command_id, &text, &text_len, &channel_id, &send_data_immediately, &channel_data, &channel_data_len);
+#endif
+                                       /*telephony_sat_emit_send_data(sat, command_id, text, text_len, channel_id, send_data_immediately, channel_data, channel_data_len);*/
+
+                                       //bip proactive command is only handled by BIP Manager
+                                       {
+                                               GDBusConnection *conn = NULL;
+                                               const gchar *g_path = NULL;
+
+                                               conn = g_dbus_object_manager_server_get_connection(ctx->manager);
+                                               g_path = g_dbus_object_get_object_path(G_DBUS_OBJECT(object));
+
+                                               sat_ui_support_exec_bip(conn, g_path, SAT_PROATV_CMD_SEND_DATA, send_data);
+                                       }
+                                       g_free(text);
+                               } break;
+
+                               case SAT_PROATV_CMD_GET_CHANNEL_STATUS:{
+                                       GVariant *channel_status = NULL;
+
+                                       gint command_id;
+
+                                       channel_status = sat_manager_get_channel_status_noti(ctx, cp_name, (struct tel_sat_get_channel_status_tlv*) &p_ind->proactive_ind_data.get_channel_status);
+
+                                       if(!channel_status){
+                                               dbg("no get channel status data");
+                                               return TRUE;
+                                       }
+
+                                       //TODO check the data for sat-ui
+
+                                       dbg("get channel status type_format(%s)", g_variant_get_type_string(channel_status));
+                                       g_variant_get(channel_status, "(i)", &command_id);
+
+                                       /*telephony_sat_emit_get_channel_status(sat, command_id);*/
+
+                                       //bip proactive command is only handled by BIP Manager
+                                       {
+                                               GDBusConnection *conn = NULL;
+                                               const gchar *g_path = NULL;
+
+                                               conn = g_dbus_object_manager_server_get_connection(ctx->manager);
+                                               g_path = g_dbus_object_get_object_path(G_DBUS_OBJECT(object));
+
+                                               sat_ui_support_exec_bip(conn, g_path, SAT_PROATV_CMD_GET_CHANNEL_STATUS, channel_status);
+                                       }
+                               } break;
+
+                               case SAT_PROATV_CMD_REFRESH:{
+                                       GVariant *refresh = NULL;
+                                       gint command_id = 0;
+                                       gint refresh_type =0;
+                                       GVariant *file_list = NULL;
+                                       int ret;
+
+                                       refresh = sat_manager_refresh_noti(ctx, cp_name, (struct tel_sat_refresh_tlv*) &p_ind->proactive_ind_data.refresh);
+
+                                       if(!refresh){
+                                               dbg("no refresh data");
+                                               return TRUE;
+                                       }
+
+                                       dbg("refresh type_format(%s)", g_variant_get_type_string(refresh));
+                                       g_variant_get(refresh, "(ii@v)", &command_id, &refresh_type, &file_list);
+
+                                       telephony_sat_emit_refresh(sat, command_id, refresh_type, file_list);
+                                       ret = sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_REFRESH, refresh, slot_id);
+                                       if(!ret) {
+                                               int rv;
+                                               dbg("fail to launch sat-ui, remove the queued data!!\n");
+                                               if(!sat_manager_handle_sat_ui_launch_fail(ctx, cp_name, p_ind))
+                                                       dbg("Fail to send terminal response\n");
+                                               rv = sat_manager_remove_cmd_by_id(ctx, command_id);
+                                               if(!rv)
+                                                       dbg("fail to dequeue data\n");
+                                       }
+                               }break;
+
+                               case SAT_PROATV_CMD_MORE_TIME:{
+                                       sat_manager_more_time_noti(ctx, cp_name, (struct tel_sat_more_time_tlv*) &p_ind->proactive_ind_data.more_time);
+                                       telephony_sat_emit_more_time(sat);
+                               }break;
+
+                               case SAT_PROATV_CMD_SEND_DTMF:{
+                                       GVariant *send_dtmf = NULL;
+                                       gint command_id = 0;
+                                       gint text_len = 0, dtmf_str_len = 0;
+                                       gchar *text = NULL;
+                                       gchar *dtmf_str = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       GVariant *icon_id = NULL;
+#endif
+                                       send_dtmf = sat_manager_send_dtmf_noti(ctx, cp_name, (struct tel_sat_send_dtmf_tlv*) &p_ind->proactive_ind_data.send_dtmf);
+                                       if(!send_dtmf){
+                                               dbg("no send_dtmf data");
+                                               return TRUE;
+                                       }
+
+                                       dbg("send_dtmf type_format(%s)", g_variant_get_type_string(send_dtmf));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       g_variant_get(send_dtmf, "(isi@vis)", &command_id, &text, &text_len, &icon_id, &dtmf_str_len, &dtmf_str);
+#else
+                                       g_variant_get(send_dtmf, "(isiis)", &command_id, &text, &text_len, &dtmf_str_len, &dtmf_str);
+#endif
+                                       if(text_len > 1 && (g_strcmp0(text,"") != 0) ){
+                                               GVariant *ui_info = NULL;
+                                               gboolean user_confirm = FALSE;
+                                               int ret;
+                                               dbg("text should be displayed by ui");
+                                               dbg("send dtmf is displayed!!!");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                               ui_info = g_variant_new("(isibv)", command_id, text, text_len, user_confirm, icon_id);
+#else
+                                               ui_info = g_variant_new("(isib)", command_id, text, text_len, user_confirm);
+#endif
+                                               ret = sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_SEND_DTMF, ui_info, slot_id);
+                                               if(!ret) {
+                                                       int rv;
+                                                       dbg("fail to launch sat-ui, remove the queued data!!\n");
+                                                       if(!sat_manager_handle_sat_ui_launch_fail(ctx, cp_name, p_ind))
+                                                               dbg("Fail to send terminal response\n");
+                                                       rv = sat_manager_remove_cmd_by_id(ctx, command_id);
+                                                       if(!rv)
+                                                               dbg("fail to dequeue data\n");
+                                               }
+                                               g_free(text);
+                                               g_free(dtmf_str);
+                                               return TRUE;
+                                       }
+#if !defined(TIZEN_PLATFORM_USE_QCOM_QMI)
+                                       telephony_sat_emit_send_dtmf(sat, command_id, text, text_len, dtmf_str, dtmf_str_len);
+#endif
+                                       g_free(text);
+                                       g_free(dtmf_str);
+                               }break;
+
+                               case SAT_PROATV_CMD_LAUNCH_BROWSER:{
+                                       GVariant *launch_browser = NULL;
+                                       gint command_id = 0;
+                                       gint browser_launch_type = 0, browser_id = 0;
+                                       gint url_len = 0, text_len = 0, gateway_proxy_len =0;
+                                       gchar *url = NULL;
+                                       gchar *text = NULL;
+                                       gchar *gateway_proxy = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       GVariant *icon_id = NULL;
+#endif
+                                       launch_browser = sat_manager_launch_browser_noti(ctx, cp_name, (struct tel_sat_launch_browser_tlv*) &p_ind->proactive_ind_data.launch_browser);
+                                       if(!launch_browser){
+                                               dbg("no launch_browser data");
+                                               return TRUE;
+                                       }
+
+                                       dbg("launch_browser type_format(%s)", g_variant_get_type_string(launch_browser));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                       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);
+#else
+                                       g_variant_get(launch_browser, "(iiisisisi)", &command_id, &browser_launch_type, &browser_id, &url, &url_len, &gateway_proxy, &gateway_proxy_len, &text, &text_len);
+#endif
+                                       //Popup is mendatory option in browser case
+                                       {
+                                               GVariant *ui_info = NULL;
+                                               gboolean user_confirm = TRUE;
+                                               int ret;
+                                               dbg("text should be displayed by ui");
+                                               dbg("launch browser is displayed!!!");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                                               ui_info = g_variant_new("(isibv)", command_id, text, text_len, user_confirm, icon_id);
+#else
+                                               ui_info = g_variant_new("(isib)", command_id, text, text_len, user_confirm);
+#endif
+                                               ret = sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_LAUNCH_BROWSER, ui_info, slot_id);
+                                               if(!ret) {
+                                                       int rv;
+                                                       dbg("fail to launch sat-ui, remove the queued data!!\n");
+                                                       if(!sat_manager_handle_sat_ui_launch_fail(ctx, cp_name, p_ind))
+                                                               dbg("Fail to send terminal response\n");
+                                                       rv = sat_manager_remove_cmd_by_id(ctx, command_id);
+                                                       if(!rv)
+                                                               dbg("fail to dequeue data\n");
+                                               }
+                                               g_free(url);
+                                               g_free(text);
+                                               g_free(gateway_proxy);
+                                               return TRUE;
+                                       }
+                               }break;
+
+                               case SAT_PROATV_CMD_PROVIDE_LOCAL_INFO:{
+                                       GVariant *provide_info = NULL;
+                                       gint info_type = 0;
+
+                                       provide_info = sat_manager_provide_local_info_noti(ctx, cp_name, (struct tel_sat_provide_local_info_tlv*) &p_ind->proactive_ind_data.provide_local_info);
+                                       if(!provide_info){
+                                               dbg("no provide_info data");
+                                               return TRUE;
+                                       }
+
+                                       dbg("provide_info type_format(%s)", g_variant_get_type_string(provide_info));
+                                       g_variant_get(provide_info, "(i)", &info_type);
+
+                                       telephony_sat_emit_provide_local_info(sat, info_type);
+                               }break;
+
+                               case SAT_PROATV_CMD_LANGUAGE_NOTIFICATION:{
+                                       GVariant *language_noti = NULL;
+                                       gint command_id = 0;
+                                       gint language = 0;
+                                       gboolean b_specified = FALSE;
+
+                                       language_noti = sat_manager_language_notification_noti(ctx, cp_name, (struct tel_sat_language_notification_tlv*) &p_ind->proactive_ind_data.language_notification);
+                                       if(!language_noti){
+                                               dbg("no language_noti data");
+                                               return TRUE;
+                                       }
+
+                                       dbg("language_noti type_format(%s)", g_variant_get_type_string(language_noti));
+                                       g_variant_get(language_noti, "(iib)", &command_id, &language, &b_specified);
+
+                                       sat_manager_update_language(ctx, cp_name, language_noti);
+
+                                       telephony_sat_emit_language_notification(sat, command_id, language, b_specified);
+                               }break;
+
+                               default:{
+                                       gboolean rv = FALSE;
+                                       rv = sat_manager_processing_unsupport_proactive_command(ctx, cp_name, (struct tel_sat_unsupproted_command_tlv*) &p_ind->proactive_ind_data.unsupport_cmd);
+                                       dbg("not handled ind->cmd_type[0x%x] send error tr result(%d)", p_ind->cmd_type, rv);
+                               }break;
                        }
-
-                       //TODO check the data for sat-ui
-
-                       dbg("close channel type_format(%s)", g_variant_get_type_string(close_channel));
-                       g_variant_get(close_channel, "(isi@vi)", &command_id, &text, &text_len, &icon_id, &channel_id);
-
-                       telephony_sat_emit_close_channel(sat, command_id, text, text_len, channel_id);
                } break;
-
-               case SAT_PROATV_CMD_RECEIVE_DATA:{
-                       GVariant *receive_data = NULL;
-
-                       gint command_id, text_len, channel_id, channel_data_len = 0;
-                       gchar *text;
-                       GVariant *icon_id;
-
-                       receive_data = sat_manager_receive_data_noti(ctx, plugin_name, (struct tel_sat_receive_channel_tlv*) &p_ind->proactive_ind_data.receive_data);
-
-                       if(!receive_data){
-                               dbg("no receive data data");
-                               return TRUE;
-                       }
-
-                       //TODO check the data for sat-ui
-
-                       dbg("receive data type_format(%s)", g_variant_get_type_string(receive_data));
-                       g_variant_get(receive_data, "(isi@vii)", &command_id, &text, &text_len, &icon_id, &channel_id, &channel_data_len);
-
-                       telephony_sat_emit_receive_data(sat, command_id, text, text_len, channel_id, channel_data_len);
-               } break;
-
-               case SAT_PROATV_CMD_SEND_DATA:{
-                       GVariant *send_data = NULL;
-
-                       gint command_id, channel_id, text_len, channel_data_len;
-                       gboolean send_data_immediately;
-                       gchar *text;
-                       GVariant *channel_data;
-                       GVariant *icon_id;
-
-                       send_data = sat_manager_send_data_noti(ctx, plugin_name, (struct tel_sat_send_channel_tlv*) &p_ind->proactive_ind_data.send_data);
-
-                       if(!send_data){
-                               dbg("no send data data");
-                               return TRUE;
-                       }
-
-                       //TODO check the data for sat-ui
-
-                       dbg("send data type_format(%s)", g_variant_get_type_string(send_data));
-                       g_variant_get(send_data, "(isi@vib@vi)", &command_id, &text, &text_len, &icon_id, &channel_id, &send_data_immediately, &channel_data, &channel_data_len);
-
-                       telephony_sat_emit_send_data(sat, command_id, text, text_len, channel_id, send_data_immediately, channel_data, channel_data_len);
-               } break;
-
-               case SAT_PROATV_CMD_GET_CHANNEL_STATUS:{
-                       GVariant *channel_status = NULL;
-
-                       gint command_id;
-
-                       channel_status = sat_manager_get_channel_status_noti(ctx, plugin_name, (struct tel_sat_get_channel_status_tlv*) &p_ind->proactive_ind_data.get_channel_status);
-
-                       if(!channel_status){
-                               dbg("no get channel status data");
-                               return TRUE;
-                       }
-
-                       //TODO check the data for sat-ui
-
-                       dbg("get channel status type_format(%s)", g_variant_get_type_string(channel_status));
-                       g_variant_get(channel_status, "(i)", &command_id);
-
-                       telephony_sat_emit_get_channel_status(sat, command_id);
-               } break;
-
-               case SAT_PROATV_CMD_REFRESH:{
-                       GVariant *refresh = NULL;
-                       gint command_id = 0;
-                       gint refresh_type =0;
-                       GVariant *file_list = NULL;
-
-                       GVariant *ui_info = NULL;
-                       gboolean user_confirm = FALSE;
-                       gchar info[] = "refresh from SIM TOOLKIT";
-
-                       refresh = sat_manager_refresh_noti(ctx, plugin_name, (struct tel_sat_refresh_tlv*) &p_ind->proactive_ind_data.refresh);
-
-                       if(!refresh){
-                               dbg("no refresh data");
-                               return TRUE;
-                       }
-
-                       dbg("refresh type_format(%s)", g_variant_get_type_string(refresh));
-                       g_variant_get(refresh, "(ii@v)", &command_id, &refresh_type, &file_list);
-
-                       dbg("check refresh_type(%d)", refresh_type);
-                       dbg("text should be displayed by ui");
-
-                       ui_info = g_variant_new("(isib)", command_id, info, strlen(info), user_confirm);
-                       sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_NONE, ui_info);
-
-                       telephony_sat_emit_refresh(sat, command_id, refresh_type, file_list);
-               }break;
-
-               case SAT_PROATV_CMD_MORE_TIME:{
-                       sat_manager_more_time_noti(ctx, plugin_name, (struct tel_sat_more_time_tlv*) &p_ind->proactive_ind_data.more_time);
-                       telephony_sat_emit_more_time(sat);
-               }break;
-
-               case SAT_PROATV_CMD_SEND_DTMF:{
-                       GVariant *send_dtmf = NULL;
-                       gint command_id = 0;
-                       gint text_len = 0, dtmf_str_len = 0;
-                       gchar *text = NULL;
-                       gchar *dtmf_str = NULL;
-                       GVariant *icon_id = NULL;
-
-                       send_dtmf = sat_manager_send_dtmf_noti(ctx, plugin_name, (struct tel_sat_send_dtmf_tlv*) &p_ind->proactive_ind_data.send_dtmf);
-                       if(!send_dtmf){
-                               dbg("no send_dtmf data");
-                               return TRUE;
-                       }
-
-                       dbg("send_dtmf type_format(%s)", g_variant_get_type_string(send_dtmf));
-                       g_variant_get(send_dtmf, "(isi@vis)", &command_id, &text, &text_len, &icon_id, &dtmf_str, &dtmf_str_len);
-
-                       if(text_len > 1 && (g_strcmp0(text,"") != 0) ){
-                               GVariant *ui_info = NULL;
-                               gboolean user_confirm = FALSE;
-                               dbg("text should be displayed by ui");
-                               dbg("send dtmf is displayed!!!")
-
-                               ui_info = g_variant_new("(isib)", command_id, text, text_len, user_confirm);
-                               sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_NONE, ui_info);
-                               return TRUE;
-                       }
-
-                       telephony_sat_emit_send_dtmf(sat, command_id, text, text_len, dtmf_str, dtmf_str_len);
-               }break;
-
-               case SAT_PROATV_CMD_LAUNCH_BROWSER:{
-                       GVariant *launch_browser = NULL;
-                       gint command_id = 0;
-                       gint browser_id = 0;
-                       gint url_len = 0, text_len = 0, gateway_proxy_len =0;
-                       gchar *url = NULL;
-                       gchar *text = NULL;
-                       gchar *gateway_proxy = NULL;
-                       GVariant *icon_id = NULL;
-
-                       launch_browser = sat_manager_launch_browser_noti(ctx, plugin_name, (struct tel_sat_launch_browser_tlv*) &p_ind->proactive_ind_data.launch_browser);
-                       if(!launch_browser){
-                               dbg("no launch_browser data");
-                               return TRUE;
-                       }
-
-                       dbg("launch_browser type_format(%s)", g_variant_get_type_string(launch_browser));
-                       g_variant_get(launch_browser, "(iisisisi@v)", &command_id, &browser_id, &url, &url_len, &gateway_proxy, &gateway_proxy_len, &text, &text_len, &icon_id);
-
-                       if(text_len > 1 && (g_strcmp0(text,"") != 0) ){
-                               GVariant *ui_info = NULL;
-                               gboolean user_confirm = TRUE;
-                               dbg("text should be displayed by ui");
-                               dbg("launch browser is displayed!!!")
-
-                               ui_info = g_variant_new("(isib)", command_id, text, text_len, user_confirm);
-                               sat_ui_support_launch_sat_ui(SAT_PROATV_CMD_NONE, ui_info);
-                               return TRUE;
-                       }
-
-                       telephony_sat_emit_launch_browser(sat, command_id, browser_id, url, url_len, gateway_proxy, gateway_proxy_len, text, text_len);
-               }break;
-
-               case SAT_PROATV_CMD_PROVIDE_LOCAL_INFO:{
-                       GVariant *provide_info = NULL;
-                       gint command_id = 0;
-                       gint info_type = 0;
-
-                       provide_info = sat_manager_provide_local_info_noti(ctx, plugin_name, (struct tel_sat_provide_local_info_tlv*) &p_ind->proactive_ind_data.provide_local_info);
-                       if(!provide_info){
-                               dbg("no provide_info data");
-                               return TRUE;
-                       }
-
-                       dbg("provide_info type_format(%s)", g_variant_get_type_string(provide_info));
-                       g_variant_get(provide_info, "(ii)", &command_id, &info_type);
-
-                       telephony_sat_emit_provide_local_info(sat, command_id, info_type);
-               }break;
-
-               case SAT_PROATV_CMD_LANGUAGE_NOTIFICATION:{
-                       GVariant *language_noti = NULL;
-                       gint command_id = 0;
-                       gint language = 0;
-                       gboolean b_specified = FALSE;
-
-                       language_noti = sat_manager_language_notification_noti(ctx, plugin_name, (struct tel_sat_language_notification_tlv*) &p_ind->proactive_ind_data.language_notification);
-                       if(!language_noti){
-                               dbg("no language_noti data");
-                               return TRUE;
-                       }
-
-                       dbg("language_noti type_format(%s)", g_variant_get_type_string(language_noti));
-                       g_variant_get(language_noti, "(iib)", &command_id, &language, &b_specified);
-
-                       telephony_sat_emit_language_notification(sat, command_id, language, b_specified);
-               }break;
-
                default:
-                       dbg("not handled ind->cmd_type[0x%x]", p_ind->cmd_type);
-                       break;
+                       err("Unhandled Notification: [0x%x]", command);
+               break;
        }
 
        return TRUE;
 }
+
index bcda369..bd058bd 100755 (executable)
 #include <string.h>
 #include <stdlib.h>
 #include <errno.h>
-#include <glib-object.h>
+#include <sys/time.h>
 
 #include <tcore.h>
 #include <server.h>
 #include <plugin.h>
+#include <storage.h>
 #include <hal.h>
 #include <communicator.h>
 #include <core_object.h>
 #include <user_request.h>
 #include <util.h>
 #include <co_sat.h>
+#include <co_call.h>
+#include <co_network.h>
 #include <type/call.h>
 #include <type/sim.h>
 
+#include <libxml/xmlmemory.h>
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+
 #include "generated-code.h"
 #include "common.h"
 #include "sat_manager.h"
 #include "sat_ui_support/sat_ui_support.h"
 
 #define SAT_DEF_CMD_Q_MAX 10
-#define SAT_TIME_OUT 60000
+#define SAT_DEF_CMD_Q_MIN 0
+#define SAT_TIME_OUT 30000
+#define TIZEN_SAT_DELAY_TO_CLEAN_MSG 15000
+#define SAT_USC2_INPUT_LEN_MAX 70
+#define SAT_EVENT_DOWNLOAD_MAX 9
+
+#define LANGUAGE_XML_PATH "/opt/usr/apps/org.tizen.setting/data/langlist.xml"
+
+#define SAT_CMD_Q_CHECK(index) \
+       if (index < SAT_DEF_CMD_Q_MIN || index > SAT_DEF_CMD_Q_MAX-1) { warn("invalid index!!"); return FALSE; }
+
+static gboolean _sat_manager_handle_open_channel_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data);
+
+static struct sat_manager_queue_data *sat_queue[SAT_DEF_CMD_Q_MAX] = {NULL, };
+gboolean g_evt_list[SAT_EVENT_DOWNLOAD_MAX] = {0};
+
+static unsigned char _convert_decimal_to_bcd(int dec)
+{
+       int tmp1, tmp0;
+       unsigned char tmp3;
+
+       tmp1 = dec/10;
+       tmp0 = dec - tmp1*10;
+       tmp3 = tmp0 << 4;
+       tmp3 += tmp1;
+
+       dbg("input decimal(%d), bcd(%d%d), endian(%x)", dec, tmp1, tmp0, tmp3);
+       return tmp3;
+}
+
+static const gchar* _convert_sim_lang_to_string(enum tel_sim_language_type lang)
+{
+       dbg("convert lang(%d)", lang);
+       switch(lang){
+               case SIM_LANG_GERMAN:
+                       return "de_DE.UTF-8";
+               case SIM_LANG_ENGLISH:
+                       return "en_GB.UTF-8";
+               case SIM_LANG_ITALIAN:
+                       return "it_IT.UTF-8";
+               case SIM_LANG_FRENCH:
+                       return "fr_FR.UTF-8";
+               case SIM_LANG_SPANISH:
+                       return "es_ES.UTF-8";
+               case SIM_LANG_DUTCH:
+                       return "nl_NL.UTF-8";
+               case SIM_LANG_SWEDISH:
+                       return "sv_SE.UTF-8";
+               case SIM_LANG_DANISH:
+                       return "da_DK.UTF-8";
+               case SIM_LANG_PORTUGUESE:
+                       return "pt_PT.UTF-8";
+               case SIM_LANG_FINNISH:
+                       return "fi_FI.UTF-8";
+               case SIM_LANG_NORWEGIAN:
+                       return "nb_NO.UTF-8";
+               case SIM_LANG_GREEK:
+                       return "el_GR.UTF-8";
+               case SIM_LANG_TURKISH:
+                       return "tr_TR.UTF-8";
+               case SIM_LANG_HUNGARIAN:
+                       return "hu_HU.UTF-8";
+               case SIM_LANG_POLISH:
+                       return "pl_PL.UTF-8";
+               case SIM_LANG_KOREAN:
+                       return "ko_KR.UTF-8";
+               case SIM_LANG_CHINESE:
+                       return "zh_CH.UTF-8";
+               case SIM_LANG_RUSSIAN:
+                       return "ru_RU.UTF-8";
+               case SIM_LANG_JAPANESE:
+                       return "ja_JP.UTF-8";
+               default:
+                       return NULL;
+       }//end of switch
+
+       return NULL;
+}
+
+static enum tel_sim_language_type _convert_string_to_sim_lang(const gchar* lang_str)
+{
+       dbg("convert lang(%s)", lang_str);
+
+       if (g_str_equal(lang_str, "de_DE.UTF-8") == TRUE) {
+               return SIM_LANG_GERMAN;
+       }
+       else if (g_str_equal(lang_str, "en_GB.UTF-8") == TRUE) {
+               return SIM_LANG_ENGLISH;
+       }
+       else if (g_str_equal(lang_str, "it_IT.UTF-8") == TRUE) {
+               return SIM_LANG_ITALIAN;
+       }
+       else if (g_str_equal(lang_str, "fr_FR.UTF-8") == TRUE) {
+               return SIM_LANG_FRENCH;
+       }
+       else if (g_str_equal(lang_str, "es_ES.UTF-8") == TRUE) {
+               return SIM_LANG_SPANISH;
+       }
+       else if (g_str_equal(lang_str, "nl_NL.UTF-8") == TRUE) {
+               return SIM_LANG_DUTCH;
+       }
+       else if (g_str_equal(lang_str, "sv_SE.UTF-8") == TRUE) {
+               return SIM_LANG_SWEDISH;
+       }
+       else if (g_str_equal(lang_str, "da_DK.UTF-8") == TRUE) {
+               return SIM_LANG_DANISH;
+       }
+       else if (g_str_equal(lang_str, "pt_PT.UTF-8") == TRUE) {
+               return SIM_LANG_PORTUGUESE;
+       }
+       else if (g_str_equal(lang_str, "fi_FI.UTF-8") == TRUE) {
+               return SIM_LANG_FINNISH;
+       }
+       else if (g_str_equal(lang_str, "nb_NO.UTF-8") == TRUE) {
+               return SIM_LANG_NORWEGIAN;
+       }
+       else if (g_str_equal(lang_str, "el_GR.UTF-8") == TRUE) {
+               return SIM_LANG_GREEK;
+       }
+       else if (g_str_equal(lang_str, "tr_TR.UTF-8") == TRUE) {
+               return SIM_LANG_TURKISH;
+       }
+       else if (g_str_equal(lang_str, "hu_HU.UTF-8") == TRUE) {
+               return SIM_LANG_HUNGARIAN;
+       }
+       else if (g_str_equal(lang_str, "pl_PL.UTF-8") == TRUE) {
+               return SIM_LANG_POLISH;
+       }
+       else if (g_str_equal(lang_str, "ko_KR.UTF-8") == TRUE) {
+               return SIM_LANG_KOREAN;
+       }
+       else if (g_str_equal(lang_str, "zh_CH.UTF-8") == TRUE) {
+               return SIM_LANG_CHINESE;
+       }
+       else if (g_str_equal(lang_str, "ru_RU.UTF-8") == TRUE) {
+               return SIM_LANG_RUSSIAN;
+       }
+       else if (g_str_equal(lang_str, "ja_JP.UTF-8") == TRUE) {
+               return SIM_LANG_JAPANESE;
+       }
+
+       dbg("there is no matched language");
+       return SIM_LANG_UNSPECIFIED;
+}
+
+static unsigned char _convert_hex_char_to_int(char c)
+{
+       if (c >= '0' && c <= '9')
+               return (c - '0');
+       else if (c >= 'A' && c <= 'F')
+               return (c - 'A' + 10);
+       else if (c >= 'a' && c <= 'f')
+               return (c - 'a' + 10);
+       else {
+               dbg("invalid charater!!");
+               return -1;
+       }
+}
+
+static char* _convert_hex_string_to_bytes(char *s)
+{
+       char *ret;
+       int i;
+       int sz;
+
+       if (s == NULL)
+               return NULL;
+
+       sz = strlen(s);
+       ret = calloc(1, (sz / 2) + 1);
+       if (ret == NULL) 
+               return NULL;
+
+       dbg("Convert String to Binary!!");
+
+       for (i = 0; i < sz; i += 2) {
+               ret[i / 2] = (char) ((_convert_hex_char_to_int(s[i]) << 4) | _convert_hex_char_to_int(s[i + 1]));
+       }
+
+       return ret;
+}
 
 static unsigned int _get_time_in_ms(struct tel_sat_duration *dr)
 {
@@ -68,75 +255,166 @@ static unsigned int _get_time_in_ms(struct tel_sat_duration *dr)
        return 0;
 }
 
-static int _get_queue_size(struct custom_data *ctx)
+static int _get_queue_empty_index(void)
 {
-       int temp;
-       temp = (int)g_queue_get_length(&ctx->queue_sat);
-       dbg("[SAT]SAT Command Queue current Size [%d], MAX SIZE [%d]\n", temp,  SAT_DEF_CMD_Q_MAX);
-       return temp;
+       int cnt = 0;
+       int i;
+       int local_index = -1;
+
+       for(i =0; i<SAT_DEF_CMD_Q_MAX ; i++) {
+               if(sat_queue[i]) {
+                       dbg("index[%d] is being used",i);
+                       cnt++;
+               }
+       }
+       for(i =0; i<SAT_DEF_CMD_Q_MAX ; i++) {
+               if(!sat_queue[i]) {
+                       dbg("found empty slot [%p] at index [%d]", sat_queue[i] ,i);
+                       local_index = i;
+                       break;
+               }
+       }
+       dbg("[SAT]SAT Command Queue current length [%d], MAX [%d]. \n", cnt, SAT_DEF_CMD_Q_MAX);
+       return local_index;
 }
 
 static gboolean _push_data(struct custom_data *ctx, struct sat_manager_queue_data *cmd_obj)
 {
-       struct sat_manager_queue_data* item = NULL;
-       if (_get_queue_size(ctx) == (SAT_DEF_CMD_Q_MAX - 1)) {
-               dbg("[SAT] FAILED TO ENQUEUE - QUEUE FULL!\n");
+       struct sat_manager_queue_data *item;
+       int local_index = cmd_obj->cmd_id;
+
+       SAT_CMD_Q_CHECK(local_index);
+
+       if (sat_queue[local_index]) {
+               dbg("[SAT] sat_queue[%d] is not null [%p].\n", sat_queue[local_index]);
                return FALSE;
        }
 
-       item = g_new(struct sat_manager_queue_data, 1);
+       item = g_new0(struct sat_manager_queue_data, 1);
 
-       if (item == NULL) {
+       if(!item) {
                dbg("[SAT] FAILED TO ALLOC QUEUE ITEM!\n");
                return FALSE;
        }
 
-       memcpy((void*)item, cmd_obj, sizeof(struct sat_manager_queue_data));
-       g_queue_push_tail(&ctx->queue_sat, item);
+       memcpy((void*)item, (void*)cmd_obj, sizeof(struct sat_manager_queue_data));
+       sat_queue[local_index] = item;
+       dbg("push data to queue at index[%d], [%p].\n",local_index, item);
        return TRUE;
 }
 
 static gboolean _pop_nth_data(struct custom_data *ctx, struct sat_manager_queue_data *cmd_obj, int command_id)
 {
-       struct sat_manager_queue_data *item = NULL;
+       struct sat_manager_queue_data *item;
+       int local_index = command_id;
+
+       SAT_CMD_Q_CHECK(local_index);
 
-       if (g_queue_is_empty(&ctx->queue_sat))
+       if(!sat_queue[local_index]) {
+               dbg("[SAT] sat_queue[%d] is null !!\n", local_index);
                return FALSE;
+       }
 
-       item = g_queue_pop_nth(&ctx->queue_sat, command_id);
-       memcpy((void*)cmd_obj, item, sizeof(struct sat_manager_queue_data));
-       g_free(item);
+       item = sat_queue[local_index];
 
+       memcpy((void*)cmd_obj, (void*)item, sizeof(struct sat_manager_queue_data));
+       dbg("pop data from queue at index[%d],[%p].\n",local_index, item);
+       sat_queue[local_index] = NULL;
+       g_free(item);
        return TRUE;
 }
 
 static gboolean _peek_nth_data(struct custom_data *ctx, struct sat_manager_queue_data *cmd_obj, int command_id)
 {
-       gpointer element = NULL;
+       struct sat_manager_queue_data *item = NULL;
 
-       if (g_queue_is_empty(&ctx->queue_sat)) {
-               dbg("[SAT] queue_sat is empty.")
-               return FALSE;
-       }
+       int local_index = command_id;
 
-       element = g_queue_peek_nth(&ctx->queue_sat, command_id);
-       if (element==NULL) {
-               dbg("[SAT] queue_sat has no element with command_id [%d].\n", command_id);
+       SAT_CMD_Q_CHECK(local_index);
+
+       if(!sat_queue[local_index]) {
+               dbg("[SAT] sat_queue[%d] is null !!\n", local_index);
                return FALSE;
        }
 
-       memcpy((void*)cmd_obj, element, sizeof(struct sat_manager_queue_data));
+       item = sat_queue[local_index];
+       memcpy((void*)cmd_obj, (void*)item, sizeof(struct sat_manager_queue_data));
+       dbg("peek data from queue at index[%d],[%p].\n",local_index, item);
        return TRUE;
 }
 
-void sat_manager_init_queue(struct custom_data *ctx)
+static gboolean _sat_manager_check_language_set(const char* lan)
+{
+       xmlNode *cur_node = NULL;
+       xmlNodePtr cur;
+       void *xml_doc = NULL,*xml_root_node = NULL;
+       char *id = NULL;
+       gboolean ret = FALSE;
+
+       dbus_plugin_util_load_xml(LANGUAGE_XML_PATH, "langlist", &xml_doc, &xml_root_node);
+       if (!xml_root_node) {
+               err("[LANGUAGE LIST] Load error - Root node is NULL.");
+               goto EXIT;
+       }
+
+       cur = xml_root_node;
+       /* Compare language */
+       for(cur_node = cur; cur_node; cur_node = cur_node->next) {
+               if (cur_node->type == XML_ELEMENT_NODE) {
+                       id = (char *)xmlGetProp(cur_node, (const xmlChar *)"id");
+                       if (id && g_str_has_prefix(lan, id)) {
+                               dbg("Supported: id[%s], lan[%s]", id, lan);
+                               ret = TRUE;
+                               goto EXIT;
+                       }
+               }
+       }
+       warn("Not supported language[%s]", lan);
+EXIT:
+       dbus_plugin_util_unload_xml(&xml_doc, &xml_root_node);
+       return ret;
+}
+
+void sat_manager_init_queue(struct custom_data *ctx, const char *cp_name)
 {
-       g_queue_init(&ctx->queue_sat);
+       int i;
+
+       dbg("Entered into queue");
+       for(i=0;i<SAT_DEF_CMD_Q_MAX;i++) {
+               struct sat_manager_queue_data * item = sat_queue[i];
+               if(item != NULL && !g_strcmp0(cp_name,item->cp_name)) {
+                       dbg("item[%d]: cmd_type[%d]", i, item->cmd_type);
+#if defined(TIZEN_PLATFORM_USE_QCOM_QMI)
+                       switch(item->cmd_type) {
+                               case SAT_PROATV_CMD_SEND_SMS:
+                               case SAT_PROATV_CMD_SEND_SS:
+                               case SAT_PROATV_CMD_SEND_USSD:
+                               case SAT_PROATV_CMD_SEND_DTMF: {
+                                       dbg("[SAT] set noti flag");
+                                       item->noti_required = TRUE;
+                                       return;
+                                       } break;
+                               default:
+                                       break;
+                       }
+#endif
+                       g_free(item->cp_name);
+                       g_free(item);
+                       sat_queue[i] = NULL;
+               }
+       }
 }
 
 static gboolean sat_manager_enqueue_cmd(struct custom_data *ctx, struct sat_manager_queue_data *cmd_obj)
 {
-       cmd_obj->cmd_id = g_queue_get_length(&ctx->queue_sat);
+       int id;
+
+       id = _get_queue_empty_index();
+       if(id < 0) {
+               dbg("Fail to get empty index.\n");
+               return FALSE;
+       }
+       cmd_obj->cmd_id = id;
        return _push_data(ctx, cmd_obj);
 }
 
@@ -153,29 +431,29 @@ static gboolean sat_manager_queue_peek_data_by_id(struct custom_data *ctx, struc
 static gboolean sat_manager_check_availiable_event_list(struct tel_sat_setup_event_list_tlv *event_list_tlv)
 {
        gboolean rv = TRUE;
-       int index = 0;
+       int local_index = 0;
 
-       for(index = 0; index < event_list_tlv->event_list.event_list_cnt; index++){
-               if(event_list_tlv->event_list.evt_list[index] == EVENT_USER_ACTIVITY){
+       for(local_index = 0; local_index < event_list_tlv->event_list.event_list_cnt; local_index++){
+               if(event_list_tlv->event_list.evt_list[local_index] == EVENT_USER_ACTIVITY){
                        dbg("do user activity");
                }
-               else if(event_list_tlv->event_list.evt_list[index] == EVENT_IDLE_SCREEN_AVAILABLE){
+               else if(event_list_tlv->event_list.evt_list[local_index] == EVENT_IDLE_SCREEN_AVAILABLE){
                        dbg("do idle screen");
                }
-               else if(event_list_tlv->event_list.evt_list[index] == EVENT_LANGUAGE_SELECTION){
+               else if(event_list_tlv->event_list.evt_list[local_index] == EVENT_LANGUAGE_SELECTION){
                        dbg("do language selection");
                }
-               else if(event_list_tlv->event_list.evt_list[index] == EVENT_BROWSER_TERMINATION){
+               else if(event_list_tlv->event_list.evt_list[local_index] == EVENT_BROWSER_TERMINATION){
                        dbg("do browser termination");
                }
-               else if(event_list_tlv->event_list.evt_list[index] == EVENT_DATA_AVAILABLE){
+               else if(event_list_tlv->event_list.evt_list[local_index] == EVENT_DATA_AVAILABLE){
                        dbg("do data available (bip)");
                }
-               else if(event_list_tlv->event_list.evt_list[index] == EVENT_CHANNEL_STATUS){
+               else if(event_list_tlv->event_list.evt_list[local_index] == EVENT_CHANNEL_STATUS){
                        dbg("do channel status (bip)");
                }
                else{
-                       dbg("unmanaged event (%d)", event_list_tlv->event_list.evt_list[index]);
+                       dbg("unmanaged event (%d)", event_list_tlv->event_list.evt_list[local_index]);
                        rv = FALSE;
                }
        }
@@ -183,12 +461,37 @@ static gboolean sat_manager_check_availiable_event_list(struct tel_sat_setup_eve
        return rv;
 }
 
+#if defined(TIZEN_PLATFORM_USE_QCOM_QMI)
+static TReturn sat_manager_send_user_confirmation(Communicator *comm, TcorePlugin *target_plg, struct treq_sat_user_confirmation_data *conf_data)
+{
+       TReturn rv = TCORE_RETURN_SUCCESS;
+       UserRequest *ur = NULL;
+
+       ur = tcore_user_request_new(comm, tcore_server_get_cp_name_by_plugin(target_plg));
+       if (!ur) {
+               dbg("ur is NULL");
+               return TCORE_RETURN_FAILURE;
+       }
+
+       tcore_user_request_set_command(ur, TREQ_SAT_REQ_USERCONFIRMATION);
+       tcore_user_request_set_data(ur, sizeof(struct treq_sat_user_confirmation_data), (void *)conf_data);
+       rv = tcore_communicator_dispatch_request(comm, ur);
+       if (rv != TCORE_RETURN_SUCCESS) {
+               dbg("fail to send terminal response",rv);
+               tcore_user_request_unref(ur);
+               rv = TCORE_RETURN_FAILURE;
+       }
+
+       return rv;
+}
+#endif
+
 static TReturn sat_manager_send_terminal_response(Communicator *comm, TcorePlugin *target_plg, struct treq_sat_terminal_rsp_data *tr)
 {
        TReturn rv = TCORE_RETURN_SUCCESS;
        UserRequest *ur = NULL;
 
-       ur = tcore_user_request_new(comm, tcore_plugin_get_description(target_plg)->name);
+       ur = tcore_user_request_new(comm, tcore_server_get_cp_name_by_plugin(target_plg));
        if (!ur) {
                dbg("ur is NULL");
                return TCORE_RETURN_FAILURE;
@@ -199,223 +502,249 @@ static TReturn sat_manager_send_terminal_response(Communicator *comm, TcorePlugi
        rv = tcore_communicator_dispatch_request(comm, ur);
        if (rv != TCORE_RETURN_SUCCESS) {
                dbg("fail to send terminal response",rv);
+               tcore_user_request_unref(ur);
                rv = TCORE_RETURN_FAILURE;
        }
 
        return rv;
 }
 
-GVariant* sat_manager_caching_setup_menu_info(struct custom_data *ctx, const char *plugin_name, struct tel_sat_setup_menu_tlv* setup_menu_tlv)
+gboolean sat_manager_remove_cmd_by_id(struct custom_data *ctx, int cmd_id)
+{
+       struct sat_manager_queue_data *item;
+       int local_index = cmd_id;
+
+       if(!sat_queue[local_index]) {
+               dbg("[SAT] sat_queue[%d] is already null !!\n", local_index);
+               return FALSE;
+       }
+       item = sat_queue[local_index];
+
+       dbg("remove data from queue at index[%d],[%p].\n",local_index, item);
+       sat_queue[local_index] = NULL;
+       g_free(item->cp_name);
+       g_free(item);
+       return TRUE;
+}
+
+GVariant* sat_manager_caching_setup_menu_info(struct custom_data *ctx, const char *cp_name, struct tel_sat_setup_menu_tlv* setup_menu_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *setup_menu_info = NULL;
        struct sat_manager_queue_data q_data;
 
-       gint command_id = 0, menu_cnt = 0, title_len =0;
+       gushort title_len = 0;
+       gint command_id = 0, menu_cnt = 0;
        gboolean menu_present = FALSE, help_info = FALSE, updated = FALSE;
        gchar main_title[SAT_ALPHA_ID_LEN_MAX];
-       GVariantBuilder *v_builder = NULL;
+       GVariantBuilder v_builder;
        GVariant *menu_items = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       int local_index = 0;
+       GVariant *icon_id = NULL;
+       GVariant *icon_list = NULL;
+       GVariant *icon_list_info = NULL;
+       GVariantBuilder v_builder_icon;
+       GVariantBuilder v_builder_icon_list_data;
+#endif
+       /* To check menu update */
+       GSList *list = NULL;
+       struct cached_data *object;
+       struct treq_sat_terminal_rsp_data tr;
 
        dbg("interpreting setup menu notification");
        memset(&main_title, 0 , SAT_ALPHA_ID_LEN_MAX);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if ((setup_menu_tlv->icon_id.is_exist)
-                       && (setup_menu_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
-                       && (!setup_menu_tlv->alpha_id.is_exist || setup_menu_tlv->alpha_id.alpha_data_len == 0)){
-
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("exceptional case to fix gcf case 2.4 command not understood");
-
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = setup_menu_tlv->command_detail.cmd_num;
-               tr->cmd_type = setup_menu_tlv->command_detail.cmd_type;
-
-               memcpy((void*)&tr->terminal_rsp_data.setup_menu.command_detail, &setup_menu_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.setup_menu.device_id.src = setup_menu_tlv->device_id.dest;
-               tr->terminal_rsp_data.setup_menu.device_id.dest = setup_menu_tlv->device_id.src;
-               tr->terminal_rsp_data.setup_menu.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+       /* check menu info is already updated */
+       for (list = ctx->cached_data; list; list = list->next) {
+               object = (struct cached_data *) list->data;
+               if (object == NULL)
+                       continue;
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
-               return NULL;
-       }
-
-       //check menu update
-       if(ctx->cached_sat_main_menu){
-               dbg("main menu info is updated");
-               updated = TRUE;
+               if (g_strcmp0(object->cp_name, cp_name) == 0) {
+                       if(object->cached_sat_main_menu) {
+                               dbg("main menu info is updated");
+                               updated = TRUE;
+                       }
+               }
        }
 
-       //menu item count
-       menu_cnt = setup_menu_tlv->menu_item_cnt;
-       if(!menu_cnt){
-               /*
-                * support GCF case 27.22.4.8.1 - 1.1 setup menu
-                */
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("no item");
+       //check the validation of content
+       if(!setup_menu_tlv->menu_item_cnt || !setup_menu_tlv->menu_item[0].text_len){
+               //support GCF case 27.22.4.8.1 - 1.1 setup menu
 
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = setup_menu_tlv->command_detail.cmd_num;
-               tr->cmd_type = setup_menu_tlv->command_detail.cmd_type;
+               dbg("no menu item updated menu(%d)", updated);
 
-               memcpy((void*)&tr->terminal_rsp_data.setup_menu.command_detail, &setup_menu_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.setup_menu.device_id.src = setup_menu_tlv->device_id.dest;
-               tr->terminal_rsp_data.setup_menu.device_id.dest = setup_menu_tlv->device_id.src;
-               tr->terminal_rsp_data.setup_menu.result_type = RESULT_SUCCESS;
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = setup_menu_tlv->command_detail.cmd_num;
+               tr.cmd_type = setup_menu_tlv->command_detail.cmd_type;
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
-               return NULL;
-       }
+               memcpy((void*)&tr.terminal_rsp_data.setup_menu.command_detail,
+                               &setup_menu_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.setup_menu.device_id.src = setup_menu_tlv->device_id.dest;
+               tr.terminal_rsp_data.setup_menu.device_id.dest = setup_menu_tlv->device_id.src;
 
-       //check the validation of content
-       if(setup_menu_tlv->menu_item_cnt == 1 && setup_menu_tlv->menu_item[0].text_len == 0){
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("item removed");
+               if(updated){
+                       tr.terminal_rsp_data.setup_menu.result_type = RESULT_SUCCESS;
+               }else{
+                       tr.terminal_rsp_data.setup_menu.result_type = RESULT_BEYOND_ME_CAPABILITIES;
+               }
 
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = setup_menu_tlv->command_detail.cmd_num;
-               tr->cmd_type = setup_menu_tlv->command_detail.cmd_type;
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+               //return NULL;
+       }
 
-               memcpy((void*)&tr->terminal_rsp_data.setup_menu.command_detail, &setup_menu_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.setup_menu.device_id.src = setup_menu_tlv->device_id.dest;
-               tr->terminal_rsp_data.setup_menu.device_id.dest = setup_menu_tlv->device_id.src;
-               tr->terminal_rsp_data.setup_menu.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
-               return NULL;
-       }
+       help_info = setup_menu_tlv->command_detail.cmd_qualifier.setup_menu.help_info;
+       menu_present = setup_menu_tlv->command_detail.cmd_qualifier.setup_menu.select_preference;
+       menu_cnt = setup_menu_tlv->menu_item_cnt;
 
        //get title
        if(setup_menu_tlv->alpha_id.alpha_data_len)
-               sat_mgr_convert_string((unsigned char*)&main_title,(unsigned short *)&title_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&main_title, (unsigned short*)&title_len,
                        setup_menu_tlv->alpha_id.dcs.a_format,
                        (unsigned char*)&setup_menu_tlv->alpha_id.alpha_data,
                        (unsigned short)setup_menu_tlv->alpha_id.alpha_data_len);
        dbg("sat main menu title(%s)",main_title);
 
-       v_builder = g_variant_builder_new(G_VARIANT_TYPE ("a(si)"));
+       g_variant_builder_init(&v_builder, G_VARIANT_TYPE ("a(si)"));
 
        //get menu items
        if(!setup_menu_tlv->next_act_ind_list.cnt){
-               int index = 0;
+               int local_index = 0;
 
                dbg("setup_menu_tlv->next_act_ind_list.cnt == 0");
 
-               for(index = 0; index < menu_cnt; index++){
-                       gint item_len;
+               for(local_index = 0; local_index < menu_cnt; local_index++){
+                       gushort item_len;
                        gchar item_str[SAT_ITEM_TEXT_LEN_MAX + 1];
 
-                       if(!setup_menu_tlv->alpha_id.alpha_data_len)
-                               setup_menu_tlv->alpha_id.dcs.a_format = ALPHABET_FROMAT_8BIT_DATA;
-
                        memset(&item_str, 0 , SAT_ITEM_TEXT_LEN_MAX + 1);
-                       sat_mgr_convert_string((unsigned char*)&item_str, (unsigned short *)&item_len,
-                               setup_menu_tlv->alpha_id.dcs.a_format,
-                               (unsigned char*)&setup_menu_tlv->menu_item[index].text,
-                               (unsigned short)setup_menu_tlv->menu_item[index].text_len);
+                       tcore_util_convert_string_to_utf8((unsigned char*)&item_str, (unsigned short *)&item_len,
+                               setup_menu_tlv->menu_item[local_index].dcs.a_format,
+                               (unsigned char*)&setup_menu_tlv->menu_item[local_index].text,
+                               (unsigned short)setup_menu_tlv->menu_item[local_index].text_len);
 
-                       dbg( "index(%d) item_id(%d) item_string(%s)", index, setup_menu_tlv->menu_item[index].item_id, item_str);
+                       dbg( "index(%d) item_id(%d) item_string(%s)", local_index, setup_menu_tlv->menu_item[local_index].item_id, item_str);
 
                        //g_variant_builder_add(v_builder, "(sy)", &item_str, setup_menu_tlv->menu_item[index].item_id);
-                       g_variant_builder_add(v_builder, "(si)", item_str, (gint32)(setup_menu_tlv->menu_item[index].item_id));
+                       g_variant_builder_add(&v_builder, "(si)", item_str, (gint32)(setup_menu_tlv->menu_item[local_index].item_id));
                }
        }
        else{
-               int index = 0;
+               int local_index = 0;
 
-               dbg("setup_menu_tlv->next_act_ind_list.cnt == 0");
+               dbg("setup_menu_tlv->next_act_ind_list.cnt != 0");
 
-               for(index = 0; index < menu_cnt; index++){
-                       gint item_len;
+               for(local_index = 0; local_index < menu_cnt; local_index++){
+                       gushort item_len;
                        gchar item_str[SAT_ITEM_TEXT_LEN_MAX + 1];
 
-                       if(setup_menu_tlv->alpha_id.alpha_data_len == 0)
-                               setup_menu_tlv->alpha_id.dcs.a_format = ALPHABET_FROMAT_8BIT_DATA;
-
                        memset(&item_str, '\0' , SAT_ITEM_TEXT_LEN_MAX + 1);
-                       sat_mgr_convert_string((unsigned char*)&item_str, (unsigned short *)&item_len,
-                               setup_menu_tlv->alpha_id.dcs.a_format,
-                               (unsigned char*)&setup_menu_tlv->menu_item[index].text,
-                               (unsigned short)setup_menu_tlv->menu_item[index].text_len);
-
-                       if( setup_menu_tlv->next_act_ind_list.indicator_list[index] == SAT_PROATV_CMD_SEND_SMS) {
-                               g_strlcat(item_str," [Send SMS]", 11);
-                       }
-                       else if (setup_menu_tlv->next_act_ind_list.indicator_list[index]== SAT_PROATV_CMD_SETUP_CALL) {
-                               g_strlcat(item_str," [Set Up Call]", 14);
-                       }
-                       else if (setup_menu_tlv->next_act_ind_list.indicator_list[index]== SAT_PROATV_CMD_LAUNCH_BROWSER){
-                               g_strlcat(item_str," [Launch Browser]", 17);
-                       }
-                       else if (setup_menu_tlv->next_act_ind_list.indicator_list[index]== SAT_PROATV_CMD_PROVIDE_LOCAL_INFO)   {
-                               g_strlcat(item_str," [Provide Terminal Information]", 31);
-                       }
+                       tcore_util_convert_string_to_utf8((unsigned char*)&item_str, (unsigned short *)&item_len,
+                               setup_menu_tlv->menu_item[local_index].dcs.a_format,
+                               (unsigned char*)&setup_menu_tlv->menu_item[local_index].text,
+                               (unsigned short)setup_menu_tlv->menu_item[local_index].text_len);
 
-                       dbg( "index(%d) item_id(%d) item_string(%s)", index, setup_menu_tlv->menu_item[index].item_id, item_str);
+                       dbg( "index(%d) item_id(%d) item_string(%s)", local_index, setup_menu_tlv->menu_item[local_index].item_id, item_str);
 
-                       //g_variant_builder_add(v_builder, "(sy)", g_strdup(item_str), setup_menu_tlv->menu_item[index].item_id);
-                       g_variant_builder_add(v_builder, "(si)", item_str, (gint32)(setup_menu_tlv->menu_item[index].item_id));
+                       //g_variant_builder_add(v_builder, "(sy)", g_strdup(item_str), setup_menu_tlv->menu_item[local_index].item_id);
+                       g_variant_builder_add(&v_builder, "(si)", item_str, (gint32)(setup_menu_tlv->menu_item[local_index].item_id));
                }
-
        }
-       menu_items = g_variant_builder_end(v_builder);
+
+       menu_items = g_variant_builder_end(&v_builder);
 
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_SETUP_MENU;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.setupMenuInd), setup_menu_tlv, sizeof(struct tel_sat_setup_menu_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(setup_menu_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", setup_menu_tlv->icon_id.is_exist, setup_menu_tlv->icon_id.icon_qualifer, (gint32) setup_menu_tlv->icon_id.icon_identifier, (gint32) setup_menu_tlv->icon_id.icon_info.width,
+                       (gint32) setup_menu_tlv->icon_id.icon_info.height, setup_menu_tlv->icon_id.icon_info.ics, setup_menu_tlv->icon_id.icon_info.icon_data_len, setup_menu_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
+
+       /* Icon list data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiv)"));
+       if(setup_menu_tlv->icon_list.is_exist) {
+               g_variant_builder_init(&v_builder_icon_list_data, G_VARIANT_TYPE ("a(iiiiis)"));
+               for(local_index= 0; local_index< (int)setup_menu_tlv->icon_list.icon_cnt; local_index++){
+                       g_variant_builder_add(&v_builder_icon_list_data, "(iiiiis)", (gint32) setup_menu_tlv->icon_list.icon_id_list[local_index], (gint32) setup_menu_tlv->icon_list.icon_info[local_index].width,
+                               (gint32) setup_menu_tlv->icon_list.icon_info[local_index].height, setup_menu_tlv->icon_list.icon_info[local_index].ics, setup_menu_tlv->icon_list.icon_info[local_index].icon_data_len, setup_menu_tlv->icon_list.icon_info[local_index].icon_file);
+               }
+               icon_list_info = g_variant_builder_end(&v_builder_icon_list_data);
+
+               g_variant_builder_add(&v_builder_icon, "(biiv)", setup_menu_tlv->icon_list.is_exist, setup_menu_tlv->icon_list.icon_qualifer, (gint32) setup_menu_tlv->icon_list.icon_cnt, icon_list_info);
+       }
+       icon_list = g_variant_builder_end(&v_builder_icon);
+
+       setup_menu_info = g_variant_new("(ibsvibbvv)", command_id, menu_present, main_title, menu_items,
+                       menu_cnt, help_info, updated, icon_id, icon_list);
+#else
        setup_menu_info = g_variant_new("(ibsvibb)", command_id, menu_present, main_title, menu_items,
                        menu_cnt, help_info, updated);
-
+#endif
        return setup_menu_info;
 }
 
-GVariant* sat_manager_display_text_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_display_text_tlv* display_text_tlv)
+GVariant* sat_manager_display_text_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_display_text_tlv* display_text_tlv, int decode_error)
 {
        TcorePlugin *plg = NULL;
        GVariant *display_text = NULL;
        struct sat_manager_queue_data q_data;
 
-       gint command_id = 0, text_len =0, duration= 0, tmp_duration = 0;
+       gushort text_len = 0;
+       gint command_id = 0, duration= 0, tmp_duration = 0;
        gboolean immediately_rsp = FALSE, high_priority = FALSE, user_rsp_required = FALSE;
-       gchar text[SAT_TEXT_STRING_LEN_MAX];
+       gchar text[SAT_TEXT_STRING_LEN_MAX+1];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting display text notification");
-       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
+       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX+1);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if ( (display_text_tlv->icon_id.is_exist && display_text_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
-                       || !display_text_tlv->text.string_length ){
+       if(!display_text_tlv->text.string_length ||
+               (display_text_tlv->text.string_length > 0 && decode_error != TCORE_SAT_SUCCESS)){
+               struct treq_sat_terminal_rsp_data tr;
 
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("[SAT]  exceptional case to fix gcf case 2.4 command not understood");
+               dbg("displat text - invalid parameter of TLVs is found!!");
 
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = display_text_tlv->command_detail.cmd_num;
-               tr->cmd_type = display_text_tlv->command_detail.cmd_type;
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = display_text_tlv->command_detail.cmd_num;
+               tr.cmd_type = display_text_tlv->command_detail.cmd_type;
 
-               memcpy((void*)&tr->terminal_rsp_data.display_text.command_detail, &display_text_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.display_text.device_id.src = DEVICE_ID_ME;
-               tr->terminal_rsp_data.display_text.device_id.dest = display_text_tlv->device_id.src;
-               tr->terminal_rsp_data.display_text.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+               memcpy((void*) &tr.terminal_rsp_data.display_text.command_detail,
+                       &display_text_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+
+               tr.terminal_rsp_data.display_text.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.display_text.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.display_text.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
                return NULL;
        }
 
@@ -425,32 +754,42 @@ GVariant* sat_manager_display_text_noti(struct custom_data *ctx, const char *plu
                duration = SAT_TIME_OUT;
        }
        else{
-               duration = 15000;
+               /* Set by default if duration is not provided. */
+               duration = TIZEN_SAT_DELAY_TO_CLEAN_MSG;
        }
 
        //immediate response requested
-       if (!display_text_tlv->immediate_response_requested)
+       if (display_text_tlv->immediate_response_requested)
                immediately_rsp = TRUE;
 
        //high priority
        if (display_text_tlv->command_detail.cmd_qualifier.display_text.text_priority == TEXT_PRIORITY_HIGH)
                high_priority = TRUE;
-       dbg("user rsp required(%d), immediately rsp(%d) priority(%d)",user_rsp_required, immediately_rsp, high_priority);
 
        //get text
-       sat_mgr_convert_string((unsigned char*) &text, (unsigned short *) &text_len,
+       tcore_util_convert_string_to_utf8((unsigned char*) &text, (unsigned short *) &text_len,
                        display_text_tlv->text.dcs.a_format,
                        (unsigned char*) &display_text_tlv->text.string,
                        (unsigned short) display_text_tlv->text.string_length);
        dbg("sat display text(%s)",text);
 
        //duration
-       if(!display_text_tlv->duration.time_interval){
+       if(display_text_tlv->duration.time_interval){
                tmp_duration = _get_time_in_ms(&display_text_tlv->duration);
        }
 
-       if(tmp_duration > 0)
+       /* duration is required only when clear message after a delay
+        * 27.22.4.1.7.4.2 DISPLAY TEXT ( Variable Timeout )
+        */
+       if(tmp_duration > 0) {
                duration = tmp_duration;
+       }
+
+       if(immediately_rsp && user_rsp_required)
+               duration = 0;
+
+       dbg("user rsp required(%d), immediately rsp(%d) duration (%d), priority(%d)",
+               user_rsp_required, immediately_rsp, duration, high_priority);
 
 /*      ETSI TS 102 223 6.4.1 DISPLAY TEXT
         If help information is requested by the user, this command may be used to display help information on the screen. The
@@ -465,60 +804,81 @@ GVariant* sat_manager_display_text_noti(struct custom_data *ctx, const char *plu
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_DISPLAY_TEXT;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.displayTextInd), display_text_tlv, sizeof(struct tel_sat_display_text_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(display_text_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", display_text_tlv->icon_id.is_exist, display_text_tlv->icon_id.icon_qualifer, (gint32) display_text_tlv->icon_id.icon_identifier, (gint32) display_text_tlv->icon_id.icon_info.width,
+                       (gint32) display_text_tlv->icon_id.icon_info.height, display_text_tlv->icon_id.icon_info.ics, display_text_tlv->icon_id.icon_info.icon_data_len, display_text_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
        display_text = g_variant_new("(isiibbbv)", command_id, text, text_len, duration,
-                       high_priority, user_rsp_required, immediately_rsp, icon_id);
+               high_priority, user_rsp_required, immediately_rsp, icon_id);
+#else
+       display_text = g_variant_new("(isiibbb)", command_id, text, text_len, duration,
+               high_priority, user_rsp_required, immediately_rsp);
+#endif
 
        return display_text;
 }
 
-GVariant* sat_manager_select_item_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_select_item_tlv* select_item_tlv)
+GVariant* sat_manager_select_item_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_select_item_tlv* select_item_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *select_item = NULL;
        struct sat_manager_queue_data q_data;
 
-       int index = 0;
-       gint command_id = 0, default_item_id = 0, menu_cnt = 0, text_len =0;
+       gushort text_len = 0;
+       gint command_id = 0, default_item_id = 0, menu_cnt = 0;
        gboolean help_info = FALSE;
-       gchar text[SAT_TEXT_STRING_LEN_MAX];
-       GVariantBuilder *v_builder = NULL;
+       gchar text[SAT_TEXT_STRING_LEN_MAX+1];
+       GVariantBuilder v_builder;
        GVariant *menu_items = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       int local_index = 0;
        GVariant *icon_id = NULL;
        GVariant *icon_list = NULL;
-
+       GVariant *icon_list_info = NULL;
+       GVariantBuilder v_builder_icon;
+       GVariantBuilder v_builder_icon_list;
+#else
+       int local_index = 0;
+#endif
        dbg("interpreting select item notification");
-       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
+       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX+1);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if ((select_item_tlv->icon_id.is_exist)
-                       && (select_item_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
-                       && ( !select_item_tlv->alpha_id.is_exist || select_item_tlv->alpha_id.alpha_data_len == 0) ) {
+       if(!select_item_tlv->menu_item_cnt || !select_item_tlv->menu_item[0].text_len){
+               struct treq_sat_terminal_rsp_data tr;
 
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("[SAT]  exceptional case to fix gcf case 2.4 command not understood");
+               dbg("select item - mandatory field does not exist");
 
-               tr = (struct treq_sat_terminal_rsp_data *) calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = select_item_tlv->command_detail.cmd_num;
+               tr.cmd_type = select_item_tlv->command_detail.cmd_type;
 
-               tr->cmd_number = select_item_tlv->command_detail.cmd_num;
-               tr->cmd_type = select_item_tlv->command_detail.cmd_type;
+               memcpy((void*) &tr.terminal_rsp_data.select_item.command_detail,
+                       &select_item_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
 
-               memcpy((void*) &tr->terminal_rsp_data.select_item.command_detail, &select_item_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.select_item.device_id.src = select_item_tlv->device_id.dest;
-               tr->terminal_rsp_data.select_item.device_id.dest = select_item_tlv->device_id.src;
-               tr->terminal_rsp_data.select_item.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+               tr.terminal_rsp_data.select_item.device_id.src = select_item_tlv->device_id.dest;
+               tr.terminal_rsp_data.select_item.device_id.dest = select_item_tlv->device_id.src;
+               tr.terminal_rsp_data.select_item.result_type = RESULT_BEYOND_ME_CAPABILITIES;
+
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
                return NULL;
        }
 
@@ -526,13 +886,13 @@ GVariant* sat_manager_select_item_noti(struct custom_data *ctx, const char *plug
        help_info = select_item_tlv->command_detail.cmd_qualifier.select_item.help_info;
 
        if(!select_item_tlv->alpha_id.is_exist){
-               dbg("set the item dcs value to ALPHABET_FROMAT_8BIT_DATA");
-               select_item_tlv->alpha_id.dcs.a_format = ALPHABET_FROMAT_8BIT_DATA;
+               dbg("set the item dcs value to ALPHABET_FORMAT_8BIT_DATA");
+               select_item_tlv->alpha_id.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
        }
 
        // select item text
        if(select_item_tlv->alpha_id.is_exist && select_item_tlv->alpha_id.alpha_data_len > 0)
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                select_item_tlv->alpha_id.dcs.a_format,
                                (unsigned char*)&select_item_tlv->alpha_id.alpha_data,
                                (unsigned short)select_item_tlv->alpha_id.alpha_data_len);
@@ -547,92 +907,109 @@ GVariant* sat_manager_select_item_noti(struct custom_data *ctx, const char *plug
        dbg( "menu item count(%d)", menu_cnt);
 
        //items
-       v_builder = g_variant_builder_new(G_VARIANT_TYPE ("a(iis)"));
-       for(index= 0; index< menu_cnt; index++){
-               gint item_len;
+       g_variant_builder_init(&v_builder, G_VARIANT_TYPE ("a(iis)"));
+       for(local_index= 0; local_index< menu_cnt; local_index++){
+               gushort item_len;
                gchar item_str[SAT_ITEM_TEXT_LEN_MAX + 1];
 
                memset(&item_str, 0 , SAT_ITEM_TEXT_LEN_MAX + 1);
 
-               sat_mgr_convert_string((unsigned char*) &item_str, (unsigned short *) &item_len,
-                               select_item_tlv->alpha_id.dcs.a_format,
-                               (unsigned char*) &select_item_tlv->menu_item[index].text,
-                               (unsigned short) select_item_tlv->menu_item[index].text_len);
-
-               if (select_item_tlv->item_next_act_ind_list.cnt != 0) {
-                       if( select_item_tlv->item_next_act_ind_list.indicator_list[index] == SAT_PROATV_CMD_SEND_SMS) {
-                               g_strlcat(item_str," [Send SMS]", 11);
-                       }
-                       else if (select_item_tlv->item_next_act_ind_list.indicator_list[index]== SAT_PROATV_CMD_SETUP_CALL) {
-                               g_strlcat(item_str," [Set Up Call]", 14);
-                       }
-                       else if (select_item_tlv->item_next_act_ind_list.indicator_list[index]== SAT_PROATV_CMD_LAUNCH_BROWSER){
-                               g_strlcat(item_str," [Launch Browser]", 17);
-                       }
-                       else if (select_item_tlv->item_next_act_ind_list.indicator_list[index]== SAT_PROATV_CMD_PROVIDE_LOCAL_INFO)     {
-                               g_strlcat(item_str," [Provide Terminal Information]", 31);
-                       }
-               }
+               tcore_util_convert_string_to_utf8((unsigned char*) &item_str, (unsigned short *) &item_len,
+                               select_item_tlv->menu_item[local_index].dcs.a_format,
+                               (unsigned char*) &select_item_tlv->menu_item[local_index].text,
+                               (unsigned short) select_item_tlv->menu_item[local_index].text_len);
 
-               item_len = strlen(item_str);
-               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);
-               g_variant_builder_add(v_builder, "(iis)", (gint32)(select_item_tlv->menu_item[index].item_id), item_len, item_str);
+               dbg( "index(%d) item_id(%d) item_len(%d) item_string(%s)", local_index, select_item_tlv->menu_item[local_index].item_id, item_len, item_str);
+               g_variant_builder_add(&v_builder, "(iis)", (gint32)(select_item_tlv->menu_item[local_index].item_id), item_len, item_str);
        }
-       menu_items = g_variant_builder_end(v_builder);
+       menu_items = g_variant_builder_end(&v_builder);
 
        // generate command id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_SELECT_ITEM;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.selectItemInd), select_item_tlv, sizeof(struct tel_sat_select_item_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new_variant(menu_items);
-       icon_list = g_variant_new_variant(menu_items);
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(select_item_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", select_item_tlv->icon_id.is_exist, select_item_tlv->icon_id.icon_qualifer, (gint32) select_item_tlv->icon_id.icon_identifier, (gint32) select_item_tlv->icon_id.icon_info.width,
+                       (gint32) select_item_tlv->icon_id.icon_info.height, select_item_tlv->icon_id.icon_info.ics, select_item_tlv->icon_id.icon_info.icon_data_len, select_item_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
+
+       /* Icon list data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiv)"));
+       if(select_item_tlv->icon_list.is_exist) {
+               g_variant_builder_init(&v_builder_icon_list, G_VARIANT_TYPE ("a(iiiiis)"));
+               for(local_index= 0; local_index< (int)select_item_tlv->icon_list.icon_cnt; local_index++){
+                       g_variant_builder_add(&v_builder_icon_list, "(iiiiis)", (gint32) select_item_tlv->icon_list.icon_id_list[local_index], (gint32) select_item_tlv->icon_list.icon_info[local_index].width,
+                               (gint32) select_item_tlv->icon_list.icon_info[local_index].height, select_item_tlv->icon_list.icon_info[local_index].ics, select_item_tlv->icon_list.icon_info[local_index].icon_data_len, select_item_tlv->icon_list.icon_info[local_index].icon_file);
+               }
+               icon_list_info = g_variant_builder_end(&v_builder_icon_list);
+
+               g_variant_builder_add(&v_builder_icon, "(biiv)", select_item_tlv->icon_list.is_exist, select_item_tlv->icon_list.icon_qualifer, (gint32) select_item_tlv->icon_list.icon_cnt, icon_list_info);
+
+       }
+       icon_list = g_variant_builder_end(&v_builder_icon);
 
        select_item = g_variant_new("(ibsiiivvv)", command_id, help_info, text, text_len,
                        default_item_id, menu_cnt, menu_items, icon_id, icon_list);
-
+#else
+       select_item = g_variant_new("(ibsiiiv)", command_id, help_info, text, text_len,
+                       default_item_id, menu_cnt, menu_items);
+#endif
        return select_item;
 }
 
-GVariant* sat_manager_get_inkey_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_get_inkey_tlv* get_inkey_tlv)
+GVariant* sat_manager_get_inkey_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_get_inkey_tlv* get_inkey_tlv, int decode_error)
 {
        TcorePlugin *plg = NULL;
        GVariant *get_inkey = NULL;
        struct sat_manager_queue_data q_data;
 
        gint command_id = 0, key_type = 0, input_character_mode = 0;
-       gint text_len = 0, duration = 0, tmp_duration = 0;
+       gushort text_len = 0;
+       gint duration = 0, tmp_duration = 0;
        gboolean b_numeric = FALSE, b_help_info = FALSE;
-       gchar text[SAT_TEXT_STRING_LEN_MAX];
+       gchar text[SAT_TEXT_STRING_LEN_MAX+1];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting get inkey notification");
-       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
+       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX+1);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if (get_inkey_tlv->icon_id.is_exist && !get_inkey_tlv->text.string_length
-                       && (get_inkey_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)){
+       if(!get_inkey_tlv->text.string_length ||
+               (get_inkey_tlv->text.string_length > 0 && decode_error != TCORE_SAT_SUCCESS)){
+               struct treq_sat_terminal_rsp_data tr;
 
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("[SAT]  exceptional case to fix gcf case 2.4 command not understood");
+               dbg("get inkey - invalid parameter of TLVs is found!!");
 
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = get_inkey_tlv->command_detail.cmd_num;
-               tr->cmd_type = get_inkey_tlv->command_detail.cmd_type;
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = get_inkey_tlv->command_detail.cmd_num;
+               tr.cmd_type = get_inkey_tlv->command_detail.cmd_type;
 
-               memcpy((void*)&tr->terminal_rsp_data.get_inkey.command_detail, &get_inkey_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.get_inkey.device_id.src = get_inkey_tlv->device_id.dest;
-               tr->terminal_rsp_data.get_inkey.device_id.dest = get_inkey_tlv->device_id.src;
-               tr->terminal_rsp_data.get_inkey.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+               memcpy((void*) &tr.terminal_rsp_data.get_inkey.command_detail,
+                       &get_inkey_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+
+               tr.terminal_rsp_data.get_inkey.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.get_inkey.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.get_inkey.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
                return NULL;
        }
 
@@ -655,7 +1032,7 @@ GVariant* sat_manager_get_inkey_noti(struct custom_data *ctx, const char *plugin
        b_help_info = get_inkey_tlv->command_detail.cmd_qualifier.get_inkey.help_info;
 
        //text & text len
-       sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+       tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                                                get_inkey_tlv->text.dcs.a_format ,
                                                                (unsigned char*)&get_inkey_tlv->text.string,
                                                                (unsigned short)get_inkey_tlv->text.string_length);
@@ -670,54 +1047,83 @@ GVariant* sat_manager_get_inkey_noti(struct custom_data *ctx, const char *plugin
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_GET_INKEY;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.getInkeyInd), get_inkey_tlv, sizeof(struct tel_sat_get_inkey_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(get_inkey_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", get_inkey_tlv->icon_id.is_exist, get_inkey_tlv->icon_id.icon_qualifer, (gint32) get_inkey_tlv->icon_id.icon_identifier, (gint32) get_inkey_tlv->icon_id.icon_info.width,
+                               (gint32) get_inkey_tlv->icon_id.icon_info.height, get_inkey_tlv->icon_id.icon_info.ics, get_inkey_tlv->icon_id.icon_info.icon_data_len, get_inkey_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
        get_inkey = g_variant_new("(iiibbsiiv)", command_id, key_type, input_character_mode, b_numeric,
                        b_help_info, text, text_len, duration, icon_id);
-
+#else
+       get_inkey = g_variant_new("(iiibbsii)", command_id, key_type, input_character_mode, b_numeric,
+                       b_help_info, text, text_len, duration);
+#endif
        return get_inkey;
 }
 
-GVariant* sat_manager_get_input_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_get_input_tlv* get_input_tlv)
+GVariant* sat_manager_get_input_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_get_input_tlv* get_input_tlv, int decode_error)
 {
        TcorePlugin *plg = NULL;
        GVariant *get_input = NULL;
        struct sat_manager_queue_data q_data;
 
        gint command_id = 0, input_character_mode = 0;
-       gint text_len = 0, def_text_len = 0, rsp_len_min = 0, rsp_len_max = 0;
+       gushort text_len = 0, def_text_len = 0;
+       gint rsp_len_min = 0, rsp_len_max = 0;
        gboolean b_numeric = FALSE, b_help_info = FALSE, b_echo_input = FALSE;
-       gchar text[SAT_TEXT_STRING_LEN_MAX], def_text[SAT_TEXT_STRING_LEN_MAX];
+       gchar text[SAT_TEXT_STRING_LEN_MAX+1];
+       gchar def_text[SAT_TEXT_STRING_LEN_MAX+1];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting get input notification");
-       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
+       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX+1);
+       memset(&def_text, 0 , SAT_TEXT_STRING_LEN_MAX+1);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if(get_input_tlv->icon_id.is_exist && get_input_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY ){
+#if GCF //disable the text length prb for GCF
+       if(
+               (get_input_tlv->text.string_length > 0 && decode_error != TCORE_SAT_SUCCESS) ||
+               (!get_input_tlv->rsp_len.max) || (get_input_tlv->rsp_len.min > get_input_tlv->rsp_len.max)){
+#else
+       if(!get_input_tlv->text.string_length ||
+               (get_input_tlv->text.string_length > 0 && decode_error != TCORE_SAT_SUCCESS) ||
+               (!get_input_tlv->rsp_len.max) || (get_input_tlv->rsp_len.min > get_input_tlv->rsp_len.max)){
+#endif
+               struct treq_sat_terminal_rsp_data tr;
 
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("[SAT]  exceptional case to fix gcf case 2.4 command not understood");
+               dbg("get input - invalid parameter of TLVs is found!!");
 
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = get_input_tlv->command_detail.cmd_num;
-               tr->cmd_type = get_input_tlv->command_detail.cmd_type;
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = get_input_tlv->command_detail.cmd_num;
+               tr.cmd_type = get_input_tlv->command_detail.cmd_type;
 
-               memcpy((void*)&tr->terminal_rsp_data.get_input.command_detail, &get_input_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.get_input.device_id.src = get_input_tlv->device_id.dest;
-               tr->terminal_rsp_data.get_input.device_id.dest = get_input_tlv->device_id.src;
-               tr->terminal_rsp_data.get_input.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+               memcpy((void*) &tr.terminal_rsp_data.get_input.command_detail,
+                       &get_input_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+
+               tr.terminal_rsp_data.get_input.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.get_input.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.get_input.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
                return NULL;
        }
 
@@ -738,87 +1144,88 @@ GVariant* sat_manager_get_input_noti(struct custom_data *ctx, const char *plugin
 
        //text & text len
        if(get_input_tlv->text.string_length){
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                get_input_tlv->text.dcs.a_format ,
                                (unsigned char*)&get_input_tlv->text.string,
                                (unsigned short)get_input_tlv->text.string_length);
                dbg("get input text(%s)",text);
        }
-       else{
-               memcpy(text,"", 1);
-               text_len = 0;
-       }
 
        //response length min & max
        rsp_len_min = get_input_tlv->rsp_len.min;
        rsp_len_max = get_input_tlv->rsp_len.max;
 
+       /* 27.22.4.3.4 Expected Seq.4.2 */
+       if(input_character_mode == INPUT_ALPHABET_TYPE_UCS2 && rsp_len_max > SAT_USC2_INPUT_LEN_MAX)
+               rsp_len_max = SAT_USC2_INPUT_LEN_MAX;
+
        //default text & default text len
        if(get_input_tlv->default_text.string_length){
-               sat_mgr_convert_string((unsigned char*)&def_text,(unsigned short *)&def_text_len,
-                               get_input_tlv->text.dcs.a_format ,
+               int temp_len = get_input_tlv->default_text.string_length;
+               if(temp_len > rsp_len_max) {
+                       dbg("get input def_text_len(%d) is larger than rsp_len_max(%d)", temp_len, rsp_len_max);
+                       get_input_tlv->default_text.string_length = rsp_len_max;
+               }
+               tcore_util_convert_string_to_utf8((unsigned char*)&def_text,(unsigned short *)&def_text_len,
+                               get_input_tlv->default_text.dcs.a_format ,
                                (unsigned char*)&get_input_tlv->default_text.string,
                                (unsigned short)get_input_tlv->default_text.string_length);
-               dbg("get input default text(%s)",text);
+               dbg("get input default text(%s)",def_text);
        }
 
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_GET_INPUT;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.getInputInd), get_input_tlv, sizeof(struct tel_sat_get_input_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(get_input_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", get_input_tlv->icon_id.is_exist, get_input_tlv->icon_id.icon_qualifer, (gint32) get_input_tlv->icon_id.icon_identifier, (gint32) get_input_tlv->icon_id.icon_info.width,
+                                       (gint32) get_input_tlv->icon_id.icon_info.height, get_input_tlv->icon_id.icon_info.ics, get_input_tlv->icon_id.icon_info.icon_data_len, get_input_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
        get_input = g_variant_new("(iibbbsiiisiv)", command_id, input_character_mode, b_numeric, b_help_info,
                        b_echo_input, text, text_len, rsp_len_max, rsp_len_min, def_text, def_text_len, icon_id);
-
+#else
+       get_input = g_variant_new("(iibbbsiiisi)", command_id, input_character_mode, b_numeric, b_help_info,
+                       b_echo_input, text, text_len, rsp_len_max, rsp_len_min, def_text, def_text_len);
+#endif
        return get_input;
 }
 
-GVariant* sat_manager_play_tone_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_play_tone_tlv* play_tone_tlv)
+GVariant* sat_manager_play_tone_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_play_tone_tlv* play_tone_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *play_tone = NULL;
        struct sat_manager_queue_data q_data;
 
        gint command_id = 0, tone_type = 0, duration = 0, tmp_duration = 0;
-       gint text_len = 0;
-       gchar text[SAT_TEXT_STRING_LEN_MAX];
+       gushort text_len = 0;
+       gchar text[SAT_TEXT_STRING_LEN_MAX+1];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting play tone notification");
-       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
+       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX+1);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if( (play_tone_tlv->icon_id.is_exist) && ( play_tone_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
-                       && (!play_tone_tlv->alpha_id.is_exist || !play_tone_tlv->alpha_id.alpha_data_len))
-       {
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("[SAT]  exceptional case to fix gcf case 2.4 command not understood");
-
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = play_tone_tlv->command_detail.cmd_num;
-               tr->cmd_type = play_tone_tlv->command_detail.cmd_type;
-
-               memcpy((void*)&tr->terminal_rsp_data.play_tone.command_detail, &play_tone_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.play_tone.device_id.src = play_tone_tlv->device_id.dest;
-               tr->terminal_rsp_data.play_tone.device_id.dest = play_tone_tlv->device_id.src;
-               tr->terminal_rsp_data.play_tone.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
-
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
-               return NULL;
-       }
-
        //text and text len
        if( play_tone_tlv->alpha_id.is_exist && play_tone_tlv->alpha_id.alpha_data_len){
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                play_tone_tlv->alpha_id.dcs.a_format,
                                (unsigned char*)&play_tone_tlv->alpha_id.alpha_data,
                                (unsigned short)play_tone_tlv->alpha_id.alpha_data_len);
@@ -837,64 +1244,59 @@ GVariant* sat_manager_play_tone_noti(struct custom_data *ctx, const char *plugin
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_PLAY_TONE;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.play_tone), play_tone_tlv, sizeof(struct tel_sat_play_tone_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(play_tone_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", play_tone_tlv->icon_id.is_exist, play_tone_tlv->icon_id.icon_qualifer, (gint32) play_tone_tlv->icon_id.icon_identifier, (gint32) play_tone_tlv->icon_id.icon_info.width,
+                                       (gint32) play_tone_tlv->icon_id.icon_info.height, play_tone_tlv->icon_id.icon_info.ics, play_tone_tlv->icon_id.icon_info.icon_data_len, play_tone_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
        play_tone = g_variant_new("(isivii)", command_id, text, text_len, icon_id, tone_type, duration);
-
+#else
+       play_tone = g_variant_new("(isiii)", command_id, text, text_len, tone_type, duration);
+#endif
        return play_tone;
 }
 
-GVariant* sat_manager_send_sms_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_send_sms_tlv* send_sms_tlv)
+GVariant* sat_manager_send_sms_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_send_sms_tlv* send_sms_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *send_sms = NULL;
        struct sat_manager_queue_data q_data;
 
-       int index = 0;
+       int local_index = 0;
        gint command_id = 0, ton = 0, npi = 0, tpdu_type = 0;
        gboolean b_packing_required = FALSE;
-       gint text_len = 0, number_len = 0, tpdu_data_len= 0;
+       gushort text_len = 0, number_len = 0, tpdu_data_len= 0;
        gchar text[SAT_TEXT_STRING_LEN_MAX], dialling_number[SAT_DIALING_NUMBER_LEN_MAX];
-       GVariantBuilder *builder = NULL;
+       GVariantBuilder builder;
        GVariant *tpdu_data = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting send sms notification");
        memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
        memset(&dialling_number, 0 , SAT_DIALING_NUMBER_LEN_MAX);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if( (send_sms_tlv->icon_id.is_exist) && ( send_sms_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
-                       && (!send_sms_tlv->alpha_id.is_exist || !send_sms_tlv->alpha_id.alpha_data_len))
-       {
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("[SAT]  exceptional case to fix gcf case 2.4 command not understood");
-
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = send_sms_tlv->command_detail.cmd_num;
-               tr->cmd_type = send_sms_tlv->command_detail.cmd_type;
-
-               memcpy((void*)&tr->terminal_rsp_data.send_sms.command_detail, &send_sms_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.send_sms.device_id.src = send_sms_tlv->device_id.dest;
-               tr->terminal_rsp_data.send_sms.device_id.dest = send_sms_tlv->device_id.src;
-               tr->terminal_rsp_data.send_sms.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
-
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
-               return NULL;
-       }
-
        //text and text len
        if( send_sms_tlv->alpha_id.is_exist && send_sms_tlv->alpha_id.alpha_data_len){
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                send_sms_tlv->alpha_id.dcs.a_format,
                                (unsigned char*)&send_sms_tlv->alpha_id.alpha_data,
                                (unsigned short)send_sms_tlv->alpha_id.alpha_data_len);
@@ -917,70 +1319,85 @@ GVariant* sat_manager_send_sms_noti(struct custom_data *ctx, const char *plugin_
        //tpdu data : type, data, data len
        tpdu_type = send_sms_tlv->sms_tpdu.tpdu_type;
        tpdu_data_len = send_sms_tlv->sms_tpdu.data_len;
-       builder = g_variant_builder_new(G_VARIANT_TYPE ("ay"));
-       for (index = 0; index < tpdu_data_len; index++) {
-               g_variant_builder_add(builder, "y", send_sms_tlv->sms_tpdu.data[index]);
+       g_variant_builder_init(&builder, G_VARIANT_TYPE ("ay"));
+       for (local_index= 0; local_index < tpdu_data_len; local_index++) {
+               g_variant_builder_add(&builder, "y", send_sms_tlv->sms_tpdu.data[local_index]);
        }
-       tpdu_data = g_variant_builder_end(builder);
+       tpdu_data = g_variant_builder_end(&builder);
 
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_SEND_SMS;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.sendSMSInd), send_sms_tlv, sizeof(struct tel_sat_send_sms_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(send_sms_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", send_sms_tlv->icon_id.is_exist, send_sms_tlv->icon_id.icon_qualifer, (gint32) send_sms_tlv->icon_id.icon_identifier, (gint32) send_sms_tlv->icon_id.icon_info.width,
+                                       (gint32) send_sms_tlv->icon_id.icon_info.height, send_sms_tlv->icon_id.icon_info.ics, send_sms_tlv->icon_id.icon_info.icon_data_len, send_sms_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
        send_sms = g_variant_new("(isivbiisiivi)", command_id, text, text_len, icon_id, b_packing_required,
                        ton, npi, dialling_number, number_len, tpdu_type, tpdu_data, tpdu_data_len);
-
+#else
+       send_sms = g_variant_new("(isibiisiivi)", command_id, text, text_len, b_packing_required,
+                       ton, npi, dialling_number, number_len, tpdu_type, tpdu_data, tpdu_data_len);
+#endif
        return send_sms;
 }
 
-GVariant* sat_manager_send_ss_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_send_ss_tlv* send_ss_tlv)
+GVariant* sat_manager_send_ss_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_send_ss_tlv* send_ss_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *send_ss = NULL;
        struct sat_manager_queue_data q_data;
 
        gint command_id = 0, ton = 0, npi = 0;
-       gint text_len, ss_str_len;
+       gushort text_len = 0;
+       gint ss_str_len = 0;
        gchar text[SAT_TEXT_STRING_LEN_MAX], ss_string[SAT_SS_STRING_LEN_MAX];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting send ss notification");
        memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
        memset(&ss_string, 0 , SAT_SS_STRING_LEN_MAX);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if( (send_ss_tlv->icon_id.is_exist) && ( send_ss_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
-                       && (!send_ss_tlv->alpha_id.is_exist || !send_ss_tlv->alpha_id.alpha_data_len))
-       {
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("[SAT]  exceptional case to fix gcf case 2.4 command not understood");
+       if(!send_ss_tlv->alpha_id.is_exist &&
+               (send_ss_tlv->icon_id.is_exist && send_ss_tlv->icon_id.icon_qualifer != ICON_QUALI_SELF_EXPLANATORY)){
+               struct treq_sat_terminal_rsp_data tr;
+               dbg("no alpha id and no self explanatory");
 
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = send_ss_tlv->command_detail.cmd_num;
-               tr->cmd_type = send_ss_tlv->command_detail.cmd_type;
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = send_ss_tlv->command_detail.cmd_num;
+               tr.cmd_type = send_ss_tlv->command_detail.cmd_type;
 
-               memcpy((void*)&tr->terminal_rsp_data.send_ss.command_detail, &send_ss_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.send_ss.device_id.src = send_ss_tlv->device_id.dest;
-               tr->terminal_rsp_data.send_ss.device_id.dest = send_ss_tlv->device_id.src;
-               tr->terminal_rsp_data.send_ss.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+               memcpy((void*)&tr.terminal_rsp_data.send_ss.command_detail, &send_ss_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.send_ss.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.send_ss.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.send_ss.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
                return NULL;
        }
 
        //text and text len
        if( send_ss_tlv->alpha_id.is_exist && send_ss_tlv->alpha_id.alpha_data_len){
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                send_ss_tlv->alpha_id.dcs.a_format,
                                (unsigned char*)&send_ss_tlv->alpha_id.alpha_data,
                                (unsigned short)send_ss_tlv->alpha_id.alpha_data_len);
@@ -993,64 +1410,94 @@ GVariant* sat_manager_send_ss_noti(struct custom_data *ctx, const char *plugin_n
        ss_str_len = send_ss_tlv->ss_string.string_len;
        memcpy(ss_string, send_ss_tlv->ss_string.ss_string, SAT_SS_STRING_LEN_MAX);
 
+       if(!ss_str_len || (ss_str_len > SAT_SS_STRING_LEN_MAX) ){
+               struct treq_sat_terminal_rsp_data tr;
+               dbg("no ss string");
+
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = send_ss_tlv->command_detail.cmd_num;
+               tr.cmd_type = send_ss_tlv->command_detail.cmd_type;
+
+               memcpy((void*)&tr.terminal_rsp_data.send_ss.command_detail, &send_ss_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.send_ss.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.send_ss.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.send_ss.result_type = RESULT_BEYOND_ME_CAPABILITIES;
+
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+               return NULL;
+       }
+
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_SEND_SS;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.send_ss), send_ss_tlv, sizeof(struct tel_sat_send_ss_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
-
-       send_ss = g_variant_new("(isiviiis)", command_id, text, text_len, icon_id,
-                       ton, npi, ss_str_len, ss_string);
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(send_ss_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", send_ss_tlv->icon_id.is_exist, send_ss_tlv->icon_id.icon_qualifer, (gint32) send_ss_tlv->icon_id.icon_identifier, (gint32) send_ss_tlv->icon_id.icon_info.width,
+                                       (gint32) send_ss_tlv->icon_id.icon_info.height, send_ss_tlv->icon_id.icon_info.ics, send_ss_tlv->icon_id.icon_info.icon_data_len, send_ss_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
+       send_ss = g_variant_new("(isiviiis)", command_id, text, text_len, icon_id, ton, npi, ss_str_len, ss_string);
+#else
+       send_ss = g_variant_new("(isiiiis)", command_id, text, text_len, ton, npi, ss_str_len, ss_string);
+#endif
        return send_ss;
 }
 
-GVariant* sat_manager_send_ussd_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_send_ussd_tlv* send_ussd_tlv)
+GVariant* sat_manager_send_ussd_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_send_ussd_tlv* send_ussd_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *send_ussd = NULL;
        struct sat_manager_queue_data q_data;
 
        gint command_id = 0;
-       gint text_len, ussd_str_len;
+       guchar dcs = 0;
+       gushort text_len = 0, ussd_str_len = 0;
        gchar text[SAT_TEXT_STRING_LEN_MAX], ussd_string[SAT_USSD_STRING_LEN_MAX];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting send ussd notification");
        memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
        memset(&ussd_string, 0 , SAT_USSD_STRING_LEN_MAX);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if( (send_ussd_tlv->icon_id.is_exist) && ( send_ussd_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
-                       && (!send_ussd_tlv->alpha_id.is_exist || !send_ussd_tlv->alpha_id.alpha_data_len))
-       {
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("[SAT]  exceptional case to fix gcf case 2.4 command not understood");
+       if(!send_ussd_tlv->alpha_id.is_exist &&
+               (send_ussd_tlv->icon_id.is_exist && send_ussd_tlv->icon_id.icon_qualifer != ICON_QUALI_SELF_EXPLANATORY)){
+               struct treq_sat_terminal_rsp_data tr;
+               dbg("no alpha id and no self explanatory");
 
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = send_ussd_tlv->command_detail.cmd_num;
-               tr->cmd_type = send_ussd_tlv->command_detail.cmd_type;
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = send_ussd_tlv->command_detail.cmd_num;
+               tr.cmd_type = send_ussd_tlv->command_detail.cmd_type;
 
-               memcpy((void*)&tr->terminal_rsp_data.send_ussd.command_detail, &send_ussd_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.send_ussd.device_id.src = send_ussd_tlv->device_id.dest;
-               tr->terminal_rsp_data.send_ussd.device_id.dest = send_ussd_tlv->device_id.src;
-               tr->terminal_rsp_data.send_ussd.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+               memcpy((void*)&tr.terminal_rsp_data.send_ussd.command_detail, &send_ussd_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.send_ussd.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.send_ussd.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.send_ussd.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
                return NULL;
        }
 
        //text and text len
        if( send_ussd_tlv->alpha_id.is_exist && send_ussd_tlv->alpha_id.alpha_data_len){
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                send_ussd_tlv->alpha_id.dcs.a_format,
                                (unsigned char*)&send_ussd_tlv->alpha_id.alpha_data,
                                (unsigned short)send_ussd_tlv->alpha_id.alpha_data_len);
@@ -1058,40 +1505,77 @@ GVariant* sat_manager_send_ussd_noti(struct custom_data *ctx, const char *plugin
        }
 
        //ussd string
-       sat_mgr_convert_string((unsigned char*)&ussd_string,(unsigned short *)&ussd_str_len,
+       dcs = send_ussd_tlv->ussd_string.dsc.raw_dcs;
+       tcore_util_convert_string_to_utf8((unsigned char*)&ussd_string,(unsigned short *)&ussd_str_len,
                                send_ussd_tlv->ussd_string.dsc.a_format,
                                (unsigned char*)&send_ussd_tlv->ussd_string.ussd_string,
                                (unsigned short)send_ussd_tlv->ussd_string.string_len);
 
+
+       if(!ussd_str_len || (ussd_str_len > SAT_USSD_STRING_LEN_MAX) ){
+               struct treq_sat_terminal_rsp_data tr;
+               dbg("no ss string");
+
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = send_ussd_tlv->command_detail.cmd_num;
+               tr.cmd_type = send_ussd_tlv->command_detail.cmd_type;
+
+               memcpy((void*)&tr.terminal_rsp_data.send_ussd.command_detail, &send_ussd_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.send_ussd.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.send_ussd.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.send_ussd.result_type = RESULT_BEYOND_ME_CAPABILITIES;
+
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+               return NULL;
+       }
+
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_SEND_USSD;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.send_ussd), send_ussd_tlv, sizeof(struct tel_sat_send_ussd_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
-
-       send_ussd = g_variant_new("(isivis)", command_id, text, text_len, icon_id, ussd_str_len, ussd_string);
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(send_ussd_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", send_ussd_tlv->icon_id.is_exist, send_ussd_tlv->icon_id.icon_qualifer, (gint32) send_ussd_tlv->icon_id.icon_identifier, (gint32) send_ussd_tlv->icon_id.icon_info.width,
+                                       (gint32) send_ussd_tlv->icon_id.icon_info.height, send_ussd_tlv->icon_id.icon_info.ics, send_ussd_tlv->icon_id.icon_info.icon_data_len, send_ussd_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
+       send_ussd = g_variant_new("(isivyis)", command_id, text, text_len, icon_id, dcs, ussd_str_len, ussd_string);
+#else
+       send_ussd = g_variant_new("(isiyis)", command_id, text, text_len, dcs, ussd_str_len, ussd_string);
+#endif
        return send_ussd;
 }
 
-GVariant* sat_manager_setup_call_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_setup_call_tlv* setup_call_tlv)
+GVariant* sat_manager_setup_call_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_setup_call_tlv* setup_call_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *setup_call = NULL;
        struct sat_manager_queue_data q_data;
+       struct treq_sat_terminal_rsp_data tr;
 
-       gint command_id = 0, call_type = 0, text_len = 0, duration = 0;
-       gchar text[SAT_TEXT_STRING_LEN_MAX], call_number[SAT_DIALING_NUMBER_LEN_MAX];
+       gushort text_len = 0, confirm_text_len = 0;
+       gint command_id = 0, call_type = 0, duration = 0;
+       gchar confirm_text[SAT_TEXT_STRING_LEN_MAX], text[SAT_TEXT_STRING_LEN_MAX], call_number[SAT_DIALING_NUMBER_LEN_MAX];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting setup call notification");
+       memset(&confirm_text, 0 , SAT_TEXT_STRING_LEN_MAX);
        memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
        memset(&call_number, 0 , SAT_DIALING_NUMBER_LEN_MAX);
+       memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
@@ -1099,39 +1583,43 @@ GVariant* sat_manager_setup_call_noti(struct custom_data *ctx, const char *plugi
 
        if(setup_call_tlv->duration.time_interval > 0)
        {
-               struct treq_sat_terminal_rsp_data *tr = NULL;
                dbg("[SAT] redial is not supported.\n");
-
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = setup_call_tlv->command_detail.cmd_num;
-               tr->cmd_type = setup_call_tlv->command_detail.cmd_type;
-
-               memcpy((void*)&tr->terminal_rsp_data.setup_call.command_detail, &setup_call_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.setup_call.device_id.src = setup_call_tlv->device_id.dest;
-               tr->terminal_rsp_data.setup_call.device_id.dest = setup_call_tlv->device_id.src;
-               tr->terminal_rsp_data.setup_call.result_type = RESULT_BEYOND_ME_CAPABILITIES;
-
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
-               return NULL;
+               tr.terminal_rsp_data.setup_call.result_type = RESULT_BEYOND_ME_CAPABILITIES;
+               goto SEND_TR;
        }
 
        //check for subaddress field
        if(setup_call_tlv->subaddress.subaddress_len > 0)
        {
-               struct treq_sat_terminal_rsp_data *tr = NULL;
                dbg("[SAT] Sub address is not supported > 0)");
+               tr.terminal_rsp_data.setup_call.result_type = RESULT_BEYOND_ME_CAPABILITIES;
+               goto SEND_TR;
+               return NULL;
+       }
 
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = setup_call_tlv->command_detail.cmd_num;
-               tr->cmd_type = setup_call_tlv->command_detail.cmd_type;
-
-               memcpy((void*)&tr->terminal_rsp_data.setup_call.command_detail, &setup_call_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.setup_call.device_id.src = setup_call_tlv->device_id.dest;
-               tr->terminal_rsp_data.setup_call.device_id.dest = setup_call_tlv->device_id.src;
-               tr->terminal_rsp_data.setup_call.result_type = RESULT_BEYOND_ME_CAPABILITIES;
+       if(setup_call_tlv->command_detail.cmd_qualifier.setup_call.setup_call == SETUP_CALL_IF_ANOTHER_CALL_NOT_BUSY ||
+          setup_call_tlv->command_detail.cmd_qualifier.setup_call.setup_call == SETUP_CALL_IF_ANOTHER_CALL_NOT_BUSY_WITH_REDIAL)
+       {
+               GSList *co_list = NULL;
+               CoreObject *co_call = NULL;
+               int total_call_cnt = 0;
+
+               co_list = tcore_plugin_get_core_objects_bytype(plg, CORE_OBJECT_TYPE_CALL);
+               if ( !co_list ) {
+                       dbg("[ error ] co_list : 0");
+                       tr.terminal_rsp_data.setup_call.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+                       goto SEND_TR;
+               }
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
-               return NULL;
+               co_call = (CoreObject *)co_list->data;
+               g_slist_free(co_list);
+               total_call_cnt = tcore_call_object_total_length(co_call);
+               if (total_call_cnt){
+                       dbg("[SAT] Another call in progress hence rejecting. total_call_cnt: %d", total_call_cnt);
+                       tr.terminal_rsp_data.setup_call.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+                       tr.terminal_rsp_data.setup_call.me_problem_type = ME_PROBLEM_ME_BUSY_ON_CALL;
+                       goto SEND_TR;
+               }
        }
 
        //call type
@@ -1139,25 +1627,20 @@ GVariant* sat_manager_setup_call_noti(struct custom_data *ctx, const char *plugi
 
        //call display data
        if(setup_call_tlv->call_setup_alpha_id.alpha_data_len != 0){
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                setup_call_tlv->call_setup_alpha_id.dcs.a_format,
                                (unsigned char*)&setup_call_tlv->call_setup_alpha_id.alpha_data,
                                (unsigned short)setup_call_tlv->call_setup_alpha_id.alpha_data_len);
        }
-       else{
-               if(setup_call_tlv->user_confirm_alpha_id.alpha_data_len != 0){
-                       sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
-                                       setup_call_tlv->user_confirm_alpha_id.dcs.a_format,
-                                       (unsigned char*)&setup_call_tlv->user_confirm_alpha_id.alpha_data,
-                                       (unsigned short)setup_call_tlv->user_confirm_alpha_id.alpha_data_len);
-               }
-               else{
-                       memcpy(text, setup_call_tlv->address.dialing_number, setup_call_tlv->address.dialing_number_len);
-                       text_len = setup_call_tlv->address.dialing_number_len;
-               }
-       }
        dbg("setup call display text (%s)",text);
 
+       if(setup_call_tlv->user_confirm_alpha_id.alpha_data_len != 0){
+               tcore_util_convert_string_to_utf8((unsigned char*)&confirm_text,(unsigned short *)&confirm_text_len,
+                               setup_call_tlv->user_confirm_alpha_id.dcs.a_format,
+                               (unsigned char*)&setup_call_tlv->user_confirm_alpha_id.alpha_data,
+                               (unsigned short)setup_call_tlv->user_confirm_alpha_id.alpha_data_len);
+       }
+
        //call number
        if(setup_call_tlv->address.ton == TON_INTERNATIONAL){
                call_number[0] = '+';
@@ -1166,7 +1649,7 @@ GVariant* sat_manager_setup_call_noti(struct custom_data *ctx, const char *plugi
        else{
                memcpy(call_number,setup_call_tlv->address.dialing_number, setup_call_tlv->address.dialing_number_len);
        }
-       dbg("setup call call number(%s)",setup_call_tlv->address.dialing_number);
+       dbg("setup call call number: origin(%s), final(%s)",setup_call_tlv->address.dialing_number, call_number);
 
        //duration
        if(setup_call_tlv->duration.time_interval > 0)
@@ -1175,32 +1658,53 @@ GVariant* sat_manager_setup_call_noti(struct custom_data *ctx, const char *plugi
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_SETUP_CALL;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.setup_call), setup_call_tlv, sizeof(struct tel_sat_setup_call_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
-
-       setup_call = g_variant_new("(isivisi)", command_id, text, text_len, icon_id, call_type, call_number, duration);
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(setup_call_tlv->call_setup_icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", setup_call_tlv->call_setup_icon_id.is_exist, setup_call_tlv->call_setup_icon_id.icon_qualifer, (gint32) setup_call_tlv->call_setup_icon_id.icon_identifier, (gint32) setup_call_tlv->call_setup_icon_id.icon_info.width,
+                                       (gint32) setup_call_tlv->call_setup_icon_id.icon_info.height, setup_call_tlv->call_setup_icon_id.icon_info.ics, setup_call_tlv->call_setup_icon_id.icon_info.icon_data_len, setup_call_tlv->call_setup_icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
+       setup_call = g_variant_new("(isisivisi)", command_id, confirm_text, confirm_text_len, text, text_len, icon_id, call_type, call_number, duration);
+#else
+       setup_call = g_variant_new("(isisiisi)", command_id, confirm_text, confirm_text_len, text, text_len, call_type, call_number, duration);
+#endif
        return setup_call;
+
+SEND_TR:
+       tr.cmd_number = setup_call_tlv->command_detail.cmd_num;
+       tr.cmd_type = setup_call_tlv->command_detail.cmd_type;
+       memcpy((void*)&tr.terminal_rsp_data.setup_call.command_detail, &setup_call_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+       tr.terminal_rsp_data.setup_call.device_id.src = DEVICE_ID_ME;
+       tr.terminal_rsp_data.setup_call.device_id.dest = setup_call_tlv->device_id.src;
+       sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+       return NULL;
 }
 
-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)
+GVariant* sat_manager_setup_event_list_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_setup_event_list_tlv *event_list_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *event_list = NULL;
 
-       int index = 0;
+       int local_index = 0;
        gboolean rv = FALSE;
        gint event_cnt = 0;
-       GVariantBuilder *builder = NULL;
+       GVariantBuilder builder;
        GVariant *evt_list = NULL;
        struct treq_sat_terminal_rsp_data *tr = NULL;
 
        dbg("interpreting event list notification");
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
@@ -1209,18 +1713,25 @@ GVariant* sat_manager_setup_event_list_noti(struct custom_data *ctx, const char
        //event cnt
        event_cnt = event_list_tlv->event_list.event_list_cnt;
        dbg("event cnt(%d)", event_cnt);
+       // reset evnet list
+       memset(g_evt_list, 0, SAT_EVENT_DOWNLOAD_MAX);
 
        //get event
-       builder = g_variant_builder_new(G_VARIANT_TYPE ("ai"));
-       for (index = 0; index < event_cnt; index++) {
-               g_variant_builder_add(builder, "i", event_list_tlv->event_list.evt_list[index]);
+       g_variant_builder_init(&builder, G_VARIANT_TYPE ("ai"));
+       for (local_index = 0; local_index < event_cnt; local_index++) {
+               g_variant_builder_add(&builder, "i", event_list_tlv->event_list.evt_list[local_index]);
+               if(event_list_tlv->event_list.evt_list[local_index] >= SAT_EVENT_DOWNLOAD_MAX)
+                       continue;
+               g_evt_list[event_list_tlv->event_list.evt_list[local_index]] = TRUE;
        }
-       evt_list = g_variant_builder_end(builder);
+       evt_list = g_variant_builder_end(&builder);
 
        event_list = g_variant_new("(iv)", event_cnt, evt_list);
 
        //send TR - does not need from application's response
        tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return NULL;
        tr->cmd_number = event_list_tlv->command_detail.cmd_num;
        tr->cmd_type = event_list_tlv->command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.setup_event_list.command_detail, &event_list_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
@@ -1230,55 +1741,59 @@ GVariant* sat_manager_setup_event_list_noti(struct custom_data *ctx, const char
        tr->terminal_rsp_data.setup_event_list.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
 
        rv = sat_manager_check_availiable_event_list(event_list_tlv);
-       if(!rv){
-               tr->terminal_rsp_data.setup_event_list.result_type = RESULT_SUCCESS_WITH_MISSING_INFO;
-       }
+       dbg("rv of sat_manager_check_availiable_event_list()=[%d]", rv);
 
        sat_manager_send_terminal_response(ctx->comm, plg, tr);
+       g_free(tr);
 
        return event_list;
 }
 
-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)
+GVariant* sat_manager_setup_idle_mode_text_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_setup_idle_mode_text_tlv *idle_mode_tlv, int decode_error)
 {
        TcorePlugin *plg = NULL;
        GVariant *idle_mode = NULL;
        struct sat_manager_queue_data q_data;
 
        gint command_id = 0;
-       gint text_len;
-       gchar text[SAT_TEXT_STRING_LEN_MAX];
+       gushort text_len = 0;
+       gchar text[SAT_TEXT_STRING_LEN_MAX+1];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting setup idle mode text notification");
-       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
+       memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX+1);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if( ((idle_mode_tlv->icon_id.is_exist) && ( idle_mode_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY))
-                       || idle_mode_tlv->text.string_length == 0 )
-       {
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("[SAT]  exceptional case to fix gcf case 2.4 command not understood");
 
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = idle_mode_tlv->command_detail.cmd_num;
-               tr->cmd_type = idle_mode_tlv->command_detail.cmd_type;
+       if(!idle_mode_tlv->text.string_length && decode_error != TCORE_SAT_SUCCESS){
+               struct treq_sat_terminal_rsp_data tr;
 
-               memcpy((void*)&tr->terminal_rsp_data.setup_idle_mode_text.command_detail, &idle_mode_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.setup_idle_mode_text.device_id.src = idle_mode_tlv->device_id.dest;
-               tr->terminal_rsp_data.setup_idle_mode_text.device_id.dest = idle_mode_tlv->device_id.src;
-               tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+               dbg("setup idle mode text - invalid parameter of TLVs is found!!");
+
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = idle_mode_tlv->command_detail.cmd_num;
+               tr.cmd_type = idle_mode_tlv->command_detail.cmd_type;
+
+               memcpy((void*) &tr.terminal_rsp_data.setup_idle_mode_text.command_detail,
+                       &idle_mode_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+
+               tr.terminal_rsp_data.setup_idle_mode_text.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.setup_idle_mode_text.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
                return NULL;
        }
 
-       sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+       tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                        idle_mode_tlv->text.dcs.a_format,
                        (unsigned char*)&idle_mode_tlv->text.string,
                        (unsigned short)idle_mode_tlv->text.string_length);
@@ -1288,41 +1803,107 @@ GVariant* sat_manager_setup_idle_mode_text_noti(struct custom_data *ctx, const c
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.idle_mode), idle_mode_tlv, sizeof(struct tel_sat_setup_idle_mode_text_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(idle_mode_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", idle_mode_tlv->icon_id.is_exist, idle_mode_tlv->icon_id.icon_qualifer, (gint32) idle_mode_tlv->icon_id.icon_identifier, (gint32) idle_mode_tlv->icon_id.icon_info.width,
+                                       (gint32) idle_mode_tlv->icon_id.icon_info.height, idle_mode_tlv->icon_id.icon_info.ics, idle_mode_tlv->icon_id.icon_info.icon_data_len, idle_mode_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
        idle_mode = g_variant_new("(isiv)", command_id, text, text_len, icon_id);
-
+#else
+       idle_mode = g_variant_new("(isi)", command_id, text, text_len);
+#endif
        return idle_mode;
 }
 
-GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_open_channel_tlv *open_channel_tlv)
+GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_open_channel_tlv *open_channel_tlv)
 {
        TcorePlugin *plg = NULL;
+       CoreObject *co_call = NULL;
+       CoreObject *co_network = NULL;
+
+       GSList* call_active_list = NULL;
+       enum telephony_network_access_technology result = 0;
+
        GVariant *open_channel = NULL;
        struct sat_manager_queue_data q_data;
 
        gint command_id = 0, bearer_type = 0, protocol_type = 0, dest_addr_type = 0;
        gboolean immediate_link = FALSE, auto_reconnection = FALSE, bg_mode = FALSE;
-       gint text_len = 0, buffer_size = 0, port_number = 0;
+       gushort text_len = 0;
+       gint buffer_size = 0, port_number = 0;
        gchar text[SAT_ALPHA_ID_LEN_MAX], dest_address[SAT_OTHER_ADDR_LEN_MAX];
-       GVariant *icon_id = NULL;
        GVariant *bearer_param = NULL;
        GVariant *bearer_detail = NULL;
-
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       GVariant *icon_id = NULL;
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting open channel notification");
        memset(&text, 0 , SAT_ALPHA_ID_LEN_MAX);
        memset(&dest_address, 0 , SAT_OTHER_ADDR_LEN_MAX);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
+       co_call = tcore_plugin_ref_core_object(plg, CORE_OBJECT_TYPE_CALL);
+       co_network = tcore_plugin_ref_core_object(plg, CORE_OBJECT_TYPE_NETWORK);
+       if(!co_call || !co_network){
+               struct treq_sat_terminal_rsp_data tr;
+               dbg("call or network co_obj does not exist");
+
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = open_channel_tlv->command_detail.cmd_num;
+               tr.cmd_type = open_channel_tlv->command_detail.cmd_type;
+
+               memcpy((void*)&tr.terminal_rsp_data.open_channel.command_detail, &open_channel_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.open_channel.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.open_channel.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.open_channel.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               tr.terminal_rsp_data.open_channel.me_problem_type = ME_PROBLEM_NO_SERVICE;
+
+               memcpy((void*)&tr.terminal_rsp_data.open_channel.bearer_desc, &open_channel_tlv->bearer_desc, sizeof(struct tel_sat_bearer_description));
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+
+               return NULL;
+       }
+
+       call_active_list = tcore_call_object_find_by_status(co_call, TCORE_CALL_STATUS_ACTIVE);
+       tcore_network_get_access_technology(co_network,&result);
+       if(result < NETWORK_ACT_UMTS && call_active_list){
+               struct treq_sat_terminal_rsp_data tr;
+               dbg("call is busy in not 3G state atc(%d)", result);
+
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = open_channel_tlv->command_detail.cmd_num;
+               tr.cmd_type = open_channel_tlv->command_detail.cmd_type;
+
+               memcpy((void*)&tr.terminal_rsp_data.open_channel.command_detail, &open_channel_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.open_channel.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.open_channel.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.open_channel.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               tr.terminal_rsp_data.open_channel.me_problem_type = ME_PROBLEM_ME_BUSY_ON_CALL;
+
+               memcpy((void*)&tr.terminal_rsp_data.open_channel.bearer_desc, &open_channel_tlv->bearer_desc, sizeof(struct tel_sat_bearer_description));
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+               g_slist_free(call_active_list);
+               return NULL;
+       }
+
+
        //immediate link
        immediate_link = open_channel_tlv->command_detail.cmd_qualifier.open_channel.immediate_link;
 
@@ -1334,7 +1915,7 @@ GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plu
 
        //open channel text
        if(open_channel_tlv->alpha_id.is_exist && open_channel_tlv->alpha_id.alpha_data_len > 0)
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                open_channel_tlv->alpha_id.dcs.a_format,
                                (unsigned char*)&open_channel_tlv->alpha_id.alpha_data,
                                (unsigned short)open_channel_tlv->alpha_id.alpha_data_len);
@@ -1353,7 +1934,8 @@ GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plu
 
        //data destination address
        dest_addr_type = open_channel_tlv->data_destination_address.address_type;
-       memcpy(dest_address, open_channel_tlv->data_destination_address.address, open_channel_tlv->data_destination_address.address_len);
+       memcpy(dest_address,  open_channel_tlv->data_destination_address.address,
+                       open_channel_tlv->data_destination_address.address_len);
        dbg("destination IP address (%s)", dest_address);
 
        //bearer type
@@ -1367,7 +1949,7 @@ GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plu
 
                        //bearer detail
                        gint ton = 0, npi = 0, time_duration1 = 0, time_duration2 = 0, other_addr_type = 0;
-                       gint login_len = 0, pwd_len = 0;
+                       gushort login_len = 0, pwd_len = 0;
                        gchar dialling_number[SAT_DIALING_NUMBER_LEN_MAX], sub_addr[SAT_SUB_ADDR_LEN_MAX];
                        gchar other_address[SAT_OTHER_ADDR_LEN_MAX];
                        gchar login[SAT_TEXT_STRING_LEN_MAX], pwd[SAT_TEXT_STRING_LEN_MAX];
@@ -1398,12 +1980,12 @@ GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plu
                        other_addr_type = open_channel_tlv->bearer_detail.cs_bearer.other_address.address_type;
                        memcpy(other_address, open_channel_tlv->bearer_detail.cs_bearer.other_address.address, open_channel_tlv->bearer_detail.cs_bearer.other_address.address_len);
 
-                       sat_mgr_convert_string((unsigned char*) &login, (unsigned short *) &login_len,
+                       tcore_util_convert_string_to_utf8((unsigned char*) &login, (unsigned short *) &login_len,
                                        open_channel_tlv->bearer_detail.cs_bearer.text_user_login.dcs.a_format,
                                        (unsigned char*) &open_channel_tlv->bearer_detail.cs_bearer.text_user_login.string,
                                        (unsigned short) open_channel_tlv->bearer_detail.cs_bearer.text_user_login.string_length);
 
-                       sat_mgr_convert_string((unsigned char*) &pwd, (unsigned short *) &pwd_len,
+                       tcore_util_convert_string_to_utf8((unsigned char*) &pwd, (unsigned short *) &pwd_len,
                                        open_channel_tlv->bearer_detail.cs_bearer.text_user_pwd.dcs.a_format,
                                        (unsigned char*) &open_channel_tlv->bearer_detail.cs_bearer.text_user_pwd.string,
                                        (unsigned short) open_channel_tlv->bearer_detail.cs_bearer.text_user_pwd.string_length);
@@ -1418,7 +2000,7 @@ GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plu
 
                        //bearer detail
                        gint other_addr_type = 0;
-                       gint login_len = 0, pwd_len = 0;
+                       gushort login_len = 0, pwd_len = 0;
                        gchar network_access_name[SAT_NET_ACC_NAM_LEN_MAX];
                        gchar other_address[SAT_OTHER_ADDR_LEN_MAX];
                        gchar login[SAT_TEXT_STRING_LEN_MAX], pwd[SAT_TEXT_STRING_LEN_MAX];
@@ -1438,17 +2020,17 @@ GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plu
 
                        bearer_param = g_variant_new("(iiiiii)", precedence_class, delay_class, reliability_class, peak_class, mean_class, pdp_type);
 
-                       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);
-
+                       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);
                        other_addr_type = open_channel_tlv->bearer_detail.ps_bearer.other_address.address_type;
                        memcpy(other_address, open_channel_tlv->bearer_detail.ps_bearer.other_address.address, open_channel_tlv->bearer_detail.ps_bearer.other_address.address_len);
 
-                       sat_mgr_convert_string((unsigned char*) &login, (unsigned short *) &login_len,
+                       tcore_util_convert_string_to_utf8((unsigned char*) &login, (unsigned short *) &login_len,
                                        open_channel_tlv->bearer_detail.ps_bearer.text_user_login.dcs.a_format,
                                        (unsigned char*) &open_channel_tlv->bearer_detail.ps_bearer.text_user_login.string,
                                        (unsigned short) open_channel_tlv->bearer_detail.ps_bearer.text_user_login.string_length);
 
-                       sat_mgr_convert_string((unsigned char*) &pwd, (unsigned short *) &pwd_len,
+                       tcore_util_convert_string_to_utf8((unsigned char*) &pwd, (unsigned short *) &pwd_len,
                                        open_channel_tlv->bearer_detail.ps_bearer.text_user_pwd.dcs.a_format,
                                        (unsigned char*) &open_channel_tlv->bearer_detail.ps_bearer.text_user_pwd.string,
                                        (unsigned short) open_channel_tlv->bearer_detail.ps_bearer.text_user_pwd.string_length);
@@ -1461,7 +2043,7 @@ GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plu
 
                        //bearer detail
                        gint other_addr_type = 0;
-                       gint login_len = 0, pwd_len = 0;
+                       gushort login_len = 0, pwd_len = 0;
                        gchar other_address[SAT_OTHER_ADDR_LEN_MAX];
                        gchar login[SAT_TEXT_STRING_LEN_MAX], pwd[SAT_TEXT_STRING_LEN_MAX];
 
@@ -1475,12 +2057,12 @@ GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plu
                        other_addr_type = open_channel_tlv->bearer_detail.default_bearer.other_address.address_type;
                        memcpy(other_address, open_channel_tlv->bearer_detail.default_bearer.other_address.address, open_channel_tlv->bearer_detail.default_bearer.other_address.address_len);
 
-                       sat_mgr_convert_string((unsigned char*) &login, (unsigned short *) &login_len,
+                       tcore_util_convert_string_to_utf8((unsigned char*) &login, (unsigned short *) &login_len,
                                        open_channel_tlv->bearer_detail.default_bearer.text_user_login.dcs.a_format,
                                        (unsigned char*) &open_channel_tlv->bearer_detail.default_bearer.text_user_login.string,
                                        (unsigned short) open_channel_tlv->bearer_detail.default_bearer.text_user_login.string_length);
 
-                       sat_mgr_convert_string((unsigned char*) &pwd, (unsigned short *) &pwd_len,
+                       tcore_util_convert_string_to_utf8((unsigned char*) &pwd, (unsigned short *) &pwd_len,
                                        open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.dcs.a_format,
                                        (unsigned char*) &open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.string,
                                        (unsigned short) open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.string_length);
@@ -1492,7 +2074,7 @@ GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plu
                        //bearer param
 
                        //bearer detail
-                       gint pwd_len = 0;
+                       gushort pwd_len = 0;
                        gint remote_address_type =0, time_duration1 = 0, time_duration2 = 0;
                        gchar remote_address[SAT_REMOTE_ENTITY_ADDR_LEN_MAX];
                        gchar pwd[SAT_TEXT_STRING_LEN_MAX];
@@ -1506,7 +2088,7 @@ GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plu
                        time_duration1 = _get_time_in_ms(&open_channel_tlv->bearer_detail.local_bearer.duration1);
                        time_duration2 = _get_time_in_ms(&open_channel_tlv->bearer_detail.local_bearer.duration2);
 
-                       sat_mgr_convert_string((unsigned char*) &pwd, (unsigned short *) &pwd_len,
+                       tcore_util_convert_string_to_utf8((unsigned char*) &pwd, (unsigned short *) &pwd_len,
                                                                                        open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.dcs.a_format,
                                                                                        (unsigned char*) &open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.string,
                                                                                        (unsigned short) open_channel_tlv->bearer_detail.default_bearer.text_user_pwd.string_length);
@@ -1525,33 +2107,56 @@ GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plu
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_OPEN_CHANNEL;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.open_channel), open_channel_tlv, sizeof(struct tel_sat_open_channel_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
+#if defined(TIZEN_SUPPORT_STK_HIDE_ALPHA_ID)
+               dbg("orange request - do not show the popup");
+               _sat_manager_handle_open_channel_confirm(ctx, plg, command_id, USER_CONFIRM_YES, NULL);
+               return open_channel;
+#endif
+
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(open_channel_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", open_channel_tlv->icon_id.is_exist, open_channel_tlv->icon_id.icon_qualifer, (gint32) open_channel_tlv->icon_id.icon_identifier, (gint32) open_channel_tlv->icon_id.icon_info.width,
+                                       (gint32) open_channel_tlv->icon_id.icon_info.height, open_channel_tlv->icon_id.icon_info.ics, open_channel_tlv->icon_id.icon_info.icon_data_len, open_channel_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
+       //execute bip
+       //sat_ui_support_exec_bip();
 
        open_channel = g_variant_new("(isivbbbiviiiisv)", command_id, text, text_len, icon_id, immediate_link, auto_reconnection, bg_mode,
                        bearer_type, bearer_param, buffer_size, protocol_type, port_number, dest_addr_type, dest_address, bearer_detail);
-
+#else
+       open_channel = g_variant_new("(isibbbiviiiisv)", command_id, text, text_len, immediate_link, auto_reconnection, bg_mode,
+                       bearer_type, bearer_param, buffer_size, protocol_type, port_number, dest_addr_type, dest_address, bearer_detail);
+#endif
        return open_channel;
 }
 
-GVariant* sat_manager_close_channel_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_close_channel_tlv *close_channel_tlv)
+GVariant* sat_manager_close_channel_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_close_channel_tlv *close_channel_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *close_channel = NULL;
        struct sat_manager_queue_data q_data;
 
        gint command_id = 0, channel_id = 0;
-       gint text_len = 0;
+       gushort text_len = 0;
        gchar text[SAT_ALPHA_ID_LEN_MAX];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting close channel notification");
        memset(&text, 0 , SAT_ALPHA_ID_LEN_MAX);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
@@ -1562,7 +2167,7 @@ GVariant* sat_manager_close_channel_noti(struct custom_data *ctx, const char *pl
 
        //close channel text
        if(close_channel_tlv->alpha_id.is_exist && close_channel_tlv->alpha_id.alpha_data_len > 0)
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                close_channel_tlv->alpha_id.dcs.a_format,
                                (unsigned char*)&close_channel_tlv->alpha_id.alpha_data,
                                (unsigned short)close_channel_tlv->alpha_id.alpha_data_len);
@@ -1571,32 +2176,47 @@ GVariant* sat_manager_close_channel_noti(struct custom_data *ctx, const char *pl
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_CLOSE_CHANNEL;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.close_channel), close_channel_tlv, sizeof(struct tel_sat_close_channel_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(close_channel_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", close_channel_tlv->icon_id.is_exist, close_channel_tlv->icon_id.icon_qualifer, (gint32) close_channel_tlv->icon_id.icon_identifier, (gint32) close_channel_tlv->icon_id.icon_info.width,
+                                       (gint32) close_channel_tlv->icon_id.icon_info.height, close_channel_tlv->icon_id.icon_info.ics, close_channel_tlv->icon_id.icon_info.icon_data_len, close_channel_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
        close_channel = g_variant_new("(isivi)", command_id, text, text_len, icon_id, channel_id);
-
+#else
+       close_channel = g_variant_new("(isii)", command_id, text, text_len, channel_id);
+#endif
        return close_channel;
 }
 
-GVariant* sat_manager_receive_data_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_receive_channel_tlv *receive_data_tlv)
+GVariant* sat_manager_receive_data_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_receive_channel_tlv *receive_data_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *receive_data = NULL;
        struct sat_manager_queue_data q_data;
 
        gint command_id = 0, channel_id = 0;
-       gint text_len = 0, channel_data_len = 0;
+       gushort text_len = 0;
+       gint channel_data_len = 0;
        gchar text[SAT_ALPHA_ID_LEN_MAX];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting receive data notification");
        memset(&text, 0 , SAT_ALPHA_ID_LEN_MAX);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
@@ -1607,7 +2227,7 @@ GVariant* sat_manager_receive_data_noti(struct custom_data *ctx, const char *plu
 
        //receive data text
        if(receive_data_tlv->alpha_id.is_exist && receive_data_tlv->alpha_id.alpha_data_len > 0)
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                receive_data_tlv->alpha_id.dcs.a_format,
                                (unsigned char*)&receive_data_tlv->alpha_id.alpha_data,
                                (unsigned short)receive_data_tlv->alpha_id.alpha_data_len);
@@ -1618,36 +2238,50 @@ GVariant* sat_manager_receive_data_noti(struct custom_data *ctx, const char *plu
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_RECEIVE_DATA;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.receive_data), receive_data_tlv, sizeof(struct tel_sat_receive_channel_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(receive_data_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", receive_data_tlv->icon_id.is_exist, receive_data_tlv->icon_id.icon_qualifer, (gint32) receive_data_tlv->icon_id.icon_identifier, (gint32) receive_data_tlv->icon_id.icon_info.width,
+                                       (gint32) receive_data_tlv->icon_id.icon_info.height, receive_data_tlv->icon_id.icon_info.ics, receive_data_tlv->icon_id.icon_info.icon_data_len, receive_data_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
        receive_data = g_variant_new("(isivii)", command_id, text, text_len, icon_id, channel_id, channel_data_len);
-
+#else
+       receive_data = g_variant_new("(isiii)", command_id, text, text_len, channel_id, channel_data_len);
+#endif
        return receive_data;
 }
 
-GVariant* sat_manager_send_data_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_send_channel_tlv *send_data_tlv)
+GVariant* sat_manager_send_data_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_send_channel_tlv *send_data_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *send_data = NULL;
        struct sat_manager_queue_data q_data;
 
-       int index = 0;
+       int local_index = 0;
        gint command_id = 0, channel_id = 0, data_len = 0;
        gboolean send_data_immediately = FALSE;
-       gint text_len = 0;
+       gushort text_len = 0;
        gchar text[SAT_ALPHA_ID_LEN_MAX];
-       GVariantBuilder *builder = NULL;
+       GVariantBuilder builder;
        GVariant *channel_data = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting send data notification");
        memset(&text, 0 , SAT_ALPHA_ID_LEN_MAX);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
@@ -1661,7 +2295,7 @@ GVariant* sat_manager_send_data_noti(struct custom_data *ctx, const char *plugin
 
        //send data text
        if(send_data_tlv->alpha_id.is_exist && send_data_tlv->alpha_id.alpha_data_len > 0)
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                send_data_tlv->alpha_id.dcs.a_format,
                                (unsigned char*)&send_data_tlv->alpha_id.alpha_data,
                                (unsigned short)send_data_tlv->alpha_id.alpha_data_len);
@@ -1669,28 +2303,40 @@ GVariant* sat_manager_send_data_noti(struct custom_data *ctx, const char *plugin
 
        //channel data, data len
        data_len = send_data_tlv->channel_data.data_string_len;
-       builder = g_variant_builder_new(G_VARIANT_TYPE ("ay"));
-       for (index = 0; index < data_len; index++) {
-               dbg("send data index(%d) data(0x%x)",index, send_data_tlv->channel_data.data_string[index]);
-               g_variant_builder_add(builder, "y", send_data_tlv->channel_data.data_string[index]);
+       g_variant_builder_init(&builder, G_VARIANT_TYPE ("ay"));
+       for (local_index = 0; local_index < data_len; local_index++) {
+               //dbg("send data index(%d) data(0x%x)",index, send_data_tlv->channel_data.data_string[index]);
+               g_variant_builder_add(&builder, "y", send_data_tlv->channel_data.data_string[local_index]);
        }
-       channel_data = g_variant_builder_end(builder);
+       channel_data = g_variant_builder_end(&builder);
 
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_SEND_DATA;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.send_data), send_data_tlv, sizeof(struct tel_sat_send_channel_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(send_data_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", send_data_tlv->icon_id.is_exist, send_data_tlv->icon_id.icon_qualifer, (gint32) send_data_tlv->icon_id.icon_identifier, (gint32) send_data_tlv->icon_id.icon_info.width,
+                                       (gint32) send_data_tlv->icon_id.icon_info.height, send_data_tlv->icon_id.icon_info.ics, send_data_tlv->icon_id.icon_info.icon_data_len, send_data_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
        send_data = g_variant_new("(isivibvi)", command_id, text, text_len, icon_id, channel_id, send_data_immediately, channel_data, data_len);
-
+#else
+       send_data = g_variant_new("(isiibvi)", command_id, text, text_len, channel_id, send_data_immediately, channel_data, data_len);
+#endif
        return send_data;
 }
 
-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)
+GVariant* sat_manager_get_channel_status_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_get_channel_status_tlv *get_channel_status_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *get_channel_status = NULL;
@@ -1700,7 +2346,7 @@ GVariant* sat_manager_get_channel_status_noti(struct custom_data *ctx, const cha
 
        dbg("interpreting get channel status notification");
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
@@ -1709,8 +2355,11 @@ GVariant* sat_manager_get_channel_status_noti(struct custom_data *ctx, const cha
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_GET_CHANNEL_STATUS;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.get_channel_status), get_channel_status_tlv, sizeof(struct tel_sat_get_channel_status_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
        get_channel_status = g_variant_new("(i)", command_id);
@@ -1718,21 +2367,23 @@ GVariant* sat_manager_get_channel_status_noti(struct custom_data *ctx, const cha
        return get_channel_status;
 }
 
-GVariant* sat_manager_refresh_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_refresh_tlv *refresh_tlv)
+GVariant* sat_manager_refresh_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_refresh_tlv *refresh_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *refresh = NULL;
+#if !defined(TIZEN_SUPPORT_STK_HIDE_ALPHA_ID)
        struct sat_manager_queue_data q_data;
+#endif
 
        gint command_id = 0;
        gint refresh_type =0;
-       GVariantBuilder *builder = NULL;
+       GVariantBuilder builder;
        GVariant *file_list = NULL;
-       int index = 0;
+       int local_index = 0;
 
        dbg("interpreting refresh notification");
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
@@ -1740,38 +2391,52 @@ GVariant* sat_manager_refresh_noti(struct custom_data *ctx, const char *plugin_n
 
        refresh_type = refresh_tlv->command_detail.cmd_qualifier.refresh.refresh;
 
-       builder = g_variant_builder_new(G_VARIANT_TYPE ("ai"));
-       for (index = 0; index < refresh_tlv->file_list.file_count; index++) {
-               g_variant_builder_add(builder, "i", refresh_tlv->file_list.file_id[index]);
+       if(refresh_type != SIM_REFRESH_CMD_FCN) {
+               dbg("reset event list.");
+               memset(g_evt_list, 0, SAT_EVENT_DOWNLOAD_MAX);
+       }
+
+       g_variant_builder_init(&builder, G_VARIANT_TYPE ("ai"));
+       for (local_index = 0; local_index < refresh_tlv->file_list.file_count; local_index++) {
+               g_variant_builder_add(&builder, "i", refresh_tlv->file_list.file_id[local_index]);
        }
-       file_list = g_variant_builder_end(builder);
+       file_list = g_variant_builder_end(&builder);
 
        //enqueue data and generate cmd_id
-       memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
-       q_data.cmd_type = SAT_PROATV_CMD_REFRESH;
-       memcpy((void*)&(q_data.cmd_data.refresh), refresh_tlv, sizeof(struct tel_sat_refresh_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
-       command_id = q_data.cmd_id;
+#if !defined(TIZEN_SUPPORT_STK_HIDE_ALPHA_ID)
+               memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
+               q_data.cmd_type = SAT_PROATV_CMD_REFRESH;
+               q_data.cp_name = g_strdup(cp_name);
+               memcpy((void*)&(q_data.cmd_data.refresh), refresh_tlv, sizeof(struct tel_sat_refresh_tlv));
+               if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+                       g_free(q_data.cp_name);
+               }
+               command_id = q_data.cmd_id;
+#endif
 
        refresh = g_variant_new("(iiv)", command_id, refresh_type, file_list);
 
        return refresh;
 }
 
-void sat_manager_more_time_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_more_time_tlv *more_time_tlv)
+void sat_manager_more_time_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_more_time_tlv *more_time_tlv)
 {
        TcorePlugin *plg = NULL;
        struct treq_sat_terminal_rsp_data *tr = NULL;
 
        dbg("interpreting more time notification");
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return;
        }
+
        //send TR - does not need from application's response
        tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return;
+
        tr->cmd_number = more_time_tlv->command_detail.cmd_num;
        tr->cmd_type = more_time_tlv->command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.more_time.command_detail, &more_time_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
@@ -1781,51 +2446,79 @@ void sat_manager_more_time_noti(struct custom_data *ctx, const char *plugin_name
        tr->terminal_rsp_data.more_time.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
 
        sat_manager_send_terminal_response(ctx->comm, plg, tr);
+       g_free(tr);
+
+       return;
 }
 
-GVariant* sat_manager_send_dtmf_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_send_dtmf_tlv *send_dtmf_tlv)
+GVariant* sat_manager_send_dtmf_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_send_dtmf_tlv *send_dtmf_tlv)
 {
        TcorePlugin *plg = NULL;
+       CoreObject *co_call = NULL;
+       GSList* call_active_list = NULL;
+
        GVariant *send_dtmf = NULL;
        struct sat_manager_queue_data q_data;
 
        gint command_id = 0;
-       gint text_len =0, dtmf_str_len =0;
+       gushort text_len =0;
+       gint dtmf_str_len =0;
        gchar text[SAT_TEXT_STRING_LEN_MAX], dtmf_str[SAT_DTMF_STRING_LEN_MAX];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting send dtmf notification");
        memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
        memset(&dtmf_str, 0 , SAT_DTMF_STRING_LEN_MAX);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if( (send_dtmf_tlv->icon_id.is_exist) && ( send_dtmf_tlv->icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
-                       && (!send_dtmf_tlv->alpha_id.is_exist || !send_dtmf_tlv->alpha_id.alpha_data_len))
-       {
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("[SAT]  exceptional case to fix gcf case 2.4 command not understood");
+       co_call = tcore_plugin_ref_core_object(plg, CORE_OBJECT_TYPE_CALL);
+       if(!co_call){
+               struct treq_sat_terminal_rsp_data tr;
+               dbg("call object does not exist");
 
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = send_dtmf_tlv->command_detail.cmd_num;
-               tr->cmd_type = send_dtmf_tlv->command_detail.cmd_type;
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = send_dtmf_tlv->command_detail.cmd_num;
+               tr.cmd_type = send_dtmf_tlv->command_detail.cmd_type;
 
-               memcpy((void*)&tr->terminal_rsp_data.send_dtmf.command_detail, &send_dtmf_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.send_dtmf.device_id.src = send_dtmf_tlv->device_id.dest;
-               tr->terminal_rsp_data.send_dtmf.device_id.dest = send_dtmf_tlv->device_id.src;
-               tr->terminal_rsp_data.send_dtmf.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+               memcpy((void*)&tr.terminal_rsp_data.send_dtmf.command_detail, &send_dtmf_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.send_dtmf.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.send_dtmf.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.send_dtmf.result_type = RESULT_BEYOND_ME_CAPABILITIES;
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+               return NULL;
+       }
+
+       call_active_list = tcore_call_object_find_by_status(co_call, TCORE_CALL_STATUS_ACTIVE);
+       if(!call_active_list){
+               struct treq_sat_terminal_rsp_data tr;
+               dbg("no active call");
+
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = send_dtmf_tlv->command_detail.cmd_num;
+               tr.cmd_type = send_dtmf_tlv->command_detail.cmd_type;
+
+               memcpy((void*)&tr.terminal_rsp_data.send_dtmf.command_detail, &send_dtmf_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.send_dtmf.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.send_dtmf.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.send_dtmf.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               tr.terminal_rsp_data.send_dtmf.me_problem_type = ME_PROBLEM_NOT_IN_SPEECH_CALL;
+
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
                return NULL;
        }
+       g_slist_free(call_active_list);
 
        //text and text len
        if( send_dtmf_tlv->alpha_id.is_exist && send_dtmf_tlv->alpha_id.alpha_data_len){
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                send_dtmf_tlv->alpha_id.dcs.a_format,
                                (unsigned char*)&send_dtmf_tlv->alpha_id.alpha_data,
                                (unsigned short)send_dtmf_tlv->alpha_id.alpha_data_len);
@@ -1839,59 +2532,127 @@ GVariant* sat_manager_send_dtmf_noti(struct custom_data *ctx, const char *plugin
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_SEND_DTMF;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.send_dtmf), send_dtmf_tlv, sizeof(struct tel_sat_send_dtmf_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
-
-       send_dtmf = g_variant_new("(isivis)", command_id, text, text_len, icon_id,
-                       dtmf_str_len, dtmf_str);
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(send_dtmf_tlv->icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", send_dtmf_tlv->icon_id.is_exist, send_dtmf_tlv->icon_id.icon_qualifer, (gint32) send_dtmf_tlv->icon_id.icon_identifier, (gint32) send_dtmf_tlv->icon_id.icon_info.width,
+                                       (gint32) send_dtmf_tlv->icon_id.icon_info.height, send_dtmf_tlv->icon_id.icon_info.ics, send_dtmf_tlv->icon_id.icon_info.icon_data_len, send_dtmf_tlv->icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
 
+       send_dtmf = g_variant_new("(isivis)", command_id, text, text_len, icon_id, dtmf_str_len, dtmf_str);
+#else
+       send_dtmf = g_variant_new("(isiis)", command_id, text, text_len, dtmf_str_len, dtmf_str);
+#endif
        return send_dtmf;
 }
 
-GVariant* sat_manager_launch_browser_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_launch_browser_tlv *launch_browser_tlv)
+GVariant* sat_manager_launch_browser_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_launch_browser_tlv *launch_browser_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *launch_browser = NULL;
        struct sat_manager_queue_data q_data;
 
+#if GCF_SAT_BROWSER_WITH_SINGLE_SESSION
+       gboolean b_app_running = FALSE;
+#endif
        gint command_id = 0;
-       gint browser_id = 0;
-       gint url_len =0, text_len =0, gateway_proxy_len =0;
+       gint browser_launch_type = 0, browser_id = 0;
+       gint url_len =0;
+       gushort text_len =0, gateway_proxy_len =0;
        gchar url[SAT_URL_LEN_MAX], text[SAT_TEXT_STRING_LEN_MAX], gateway_proxy[SAT_TEXT_STRING_LEN_MAX];
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariantBuilder v_builder_icon;
+#endif
        dbg("interpreting launch browser notification");
        memset(&url, 0 , SAT_URL_LEN_MAX);
        memset(&text, 0 , SAT_TEXT_STRING_LEN_MAX);
        memset(&gateway_proxy, 0 , SAT_TEXT_STRING_LEN_MAX);
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
-       if( (launch_browser_tlv->user_confirm_icon_id.is_exist) && ( launch_browser_tlv->user_confirm_icon_id.icon_qualifer == ICON_QUALI_NOT_SELF_EXPLANATORY)
-                       && (!launch_browser_tlv->user_confirm_alpha_id.is_exist || !launch_browser_tlv->user_confirm_alpha_id.alpha_data_len))
-       {
-               struct treq_sat_terminal_rsp_data *tr = NULL;
-               dbg("[SAT]  exceptional case to fix gcf case 2.4 command not understood");
+       if(!launch_browser_tlv->user_confirm_alpha_id.is_exist &&
+               (launch_browser_tlv->user_confirm_icon_id.is_exist && launch_browser_tlv->user_confirm_icon_id.icon_qualifer != ICON_QUALI_SELF_EXPLANATORY)){
+               struct treq_sat_terminal_rsp_data tr;
+               dbg("no alpha id and no self explanatory");
 
-               tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-               tr->cmd_number = launch_browser_tlv->command_detail.cmd_num;
-               tr->cmd_type = launch_browser_tlv->command_detail.cmd_type;
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = launch_browser_tlv->command_detail.cmd_num;
+               tr.cmd_type = launch_browser_tlv->command_detail.cmd_type;
 
-               memcpy((void*)&tr->terminal_rsp_data.launch_browser.command_detail, &launch_browser_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
-               tr->terminal_rsp_data.launch_browser.device_id.src = launch_browser_tlv->device_id.dest;
-               tr->terminal_rsp_data.launch_browser.device_id.dest = launch_browser_tlv->device_id.src;
-               tr->terminal_rsp_data.launch_browser.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+               memcpy((void*)&tr.terminal_rsp_data.launch_browser.command_detail, &launch_browser_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.launch_browser.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.launch_browser.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.launch_browser.result_type = RESULT_COMMAND_DATA_NOT_UNDERSTOOD_BY_ME;
+
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+               return NULL;
+       }
+
+#if GCF_SAT_BROWSER_WITH_SINGLE_SESSION
+       b_app_running = sat_ui_check_app_is_running("org.tizen.browser");
+#endif
+       //browser launch type
+       browser_launch_type = launch_browser_tlv->command_detail.cmd_qualifier.launch_browser.launch_browser;
+
+       /* ORA PLM P131004-00081:Launch browser while session already opened.
+        * Tizen-SAT looks at command qualifier only when ME in GCF mode.
+        *
+        * 2013.12.10 : Now, GCF certificate permits device option that "Terminal supports
+        * browser with multiple sessions/taps" so we don't need GCF feature anymore and
+        * therefore disabled here.
+        */
+#if GCF_SAT_BROWSER_WITH_SINGLE_SESSION
+       if(browser_launch_type == LAUNCH_BROWSER_IF_NOT_ALREADY_LAUNCHED && b_app_running){
+               struct treq_sat_terminal_rsp_data tr;
+               dbg("browser is already running type(%d)", browser_launch_type);
+
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = launch_browser_tlv->command_detail.cmd_num;
+               tr.cmd_type = launch_browser_tlv->command_detail.cmd_type;
+
+               memcpy((void*)&tr.terminal_rsp_data.launch_browser.command_detail, &launch_browser_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.launch_browser.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.launch_browser.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.launch_browser.result_type = RESULT_LAUNCH_BROWSER_GENERIC_ERROR_CODE;
+               tr.terminal_rsp_data.launch_browser.browser_problem_type = BROWSER_PROBLEM_BROWSER_UNAVAILABLE;
+
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+
+               return NULL;
+       }
+       else if( (browser_launch_type == LAUNCH_BROWSER_USE_EXISTING_BROWSER || browser_launch_type == LAUNCH_BROWSER_CLOSE_AND_LAUNCH_NEW_BROWSER) && !b_app_running){
+               struct treq_sat_terminal_rsp_data tr;
+               dbg("browser is not running type(%d)", browser_launch_type);
+
+               memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+               tr.cmd_number = launch_browser_tlv->command_detail.cmd_num;
+               tr.cmd_type = launch_browser_tlv->command_detail.cmd_type;
+
+               memcpy((void*)&tr.terminal_rsp_data.launch_browser.command_detail, &launch_browser_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+               tr.terminal_rsp_data.launch_browser.device_id.src = DEVICE_ID_ME;
+               tr.terminal_rsp_data.launch_browser.device_id.dest = DEVICE_ID_SIM;
+               tr.terminal_rsp_data.launch_browser.result_type = RESULT_LAUNCH_BROWSER_GENERIC_ERROR_CODE;
+               tr.terminal_rsp_data.launch_browser.browser_problem_type = BROWSER_PROBLEM_BROWSER_UNAVAILABLE;
+
+               sat_manager_send_terminal_response(ctx->comm, plg, &tr);
 
-               sat_manager_send_terminal_response(ctx->comm, plg, tr);
                return NULL;
        }
+#endif
 
        //browser id
        browser_id = launch_browser_tlv->browser_id;
@@ -1909,7 +2670,7 @@ GVariant* sat_manager_launch_browser_noti(struct custom_data *ctx, const char *p
                dbg("launch browser gateway_proxy digit type string (%s)",gateway_proxy);
        } else {
                if( launch_browser_tlv->gateway_proxy_text.string_length){
-                       sat_mgr_convert_string((unsigned char*)&gateway_proxy,(unsigned short *)&gateway_proxy_len,
+                       tcore_util_convert_string_to_utf8((unsigned char*)&gateway_proxy,(unsigned short *)&gateway_proxy_len,
                                        launch_browser_tlv->gateway_proxy_text.dcs.a_format,
                                        (unsigned char*)&launch_browser_tlv->gateway_proxy_text.string,
                                        (unsigned short)launch_browser_tlv->gateway_proxy_text.string_length);
@@ -1919,7 +2680,7 @@ GVariant* sat_manager_launch_browser_noti(struct custom_data *ctx, const char *p
 
        //user confirm text and user confirm text len
        if( launch_browser_tlv->user_confirm_alpha_id.is_exist && launch_browser_tlv->user_confirm_alpha_id.alpha_data_len){
-               sat_mgr_convert_string((unsigned char*)&text,(unsigned short *)&text_len,
+               tcore_util_convert_string_to_utf8((unsigned char*)&text,(unsigned short *)&text_len,
                                launch_browser_tlv->user_confirm_alpha_id.dcs.a_format,
                                (unsigned char*)&launch_browser_tlv->user_confirm_alpha_id.alpha_data,
                                (unsigned short)launch_browser_tlv->user_confirm_alpha_id.alpha_data_len);
@@ -1929,50 +2690,153 @@ GVariant* sat_manager_launch_browser_noti(struct custom_data *ctx, const char *p
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_LAUNCH_BROWSER;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.launch_browser), launch_browser_tlv, sizeof(struct tel_sat_launch_browser_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
-       icon_id = g_variant_new("()");
-
-       launch_browser = g_variant_new("(iisisisiv)",
-                       command_id, browser_id, url, url_len, gateway_proxy, gateway_proxy_len, text, text_len, icon_id);
-
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       /* Icon data extraction */
+       g_variant_builder_init(&v_builder_icon, G_VARIANT_TYPE ("a(biiiiiis)"));
+       if(launch_browser_tlv->user_confirm_icon_id.is_exist) {
+               g_variant_builder_add(&v_builder_icon, "(biiiiiis)", launch_browser_tlv->user_confirm_icon_id.is_exist, launch_browser_tlv->user_confirm_icon_id.icon_qualifer, (gint32) launch_browser_tlv->user_confirm_icon_id.icon_identifier, (gint32) launch_browser_tlv->user_confirm_icon_id.icon_info.width,
+                                       (gint32) launch_browser_tlv->user_confirm_icon_id.icon_info.height, launch_browser_tlv->user_confirm_icon_id.icon_info.ics, launch_browser_tlv->user_confirm_icon_id.icon_info.icon_data_len, launch_browser_tlv->user_confirm_icon_id.icon_info.icon_file);
+       }
+       icon_id = g_variant_builder_end(&v_builder_icon);
+
+       launch_browser = g_variant_new("(iiisisisiv)",
+                       command_id, browser_launch_type, browser_id, url, url_len, gateway_proxy, gateway_proxy_len, text, text_len, icon_id);
+#else
+       launch_browser = g_variant_new("(iiisisisi)",
+                       command_id, browser_launch_type, browser_id, url, url_len, gateway_proxy, gateway_proxy_len, text, text_len);
+#endif
        return launch_browser;
 }
 
-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)
+GVariant* sat_manager_provide_local_info_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_provide_local_info_tlv *provide_local_info_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *provide_info = NULL;
-       struct sat_manager_queue_data q_data;
 
-       gint command_id = 0;
        gint info_type =0;
+       struct treq_sat_terminal_rsp_data *tr = NULL;
 
        dbg("interpreting provide local info notification");
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
        }
 
+       provide_info = g_variant_new("(i)", info_type);
+
+       //send TR - does not need from application's response
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return NULL;
+
+       tr->cmd_number = provide_local_info_tlv->command_detail.cmd_num;
+       tr->cmd_type = provide_local_info_tlv->command_detail.cmd_type;
+       memcpy((void*)&tr->terminal_rsp_data.provide_local_info.command_detail, &provide_local_info_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+       tr->terminal_rsp_data.provide_local_info.device_id.src = provide_local_info_tlv->device_id.dest;
+       tr->terminal_rsp_data.provide_local_info.device_id.dest = provide_local_info_tlv->device_id.src;
+       tr->terminal_rsp_data.provide_local_info.other_info = TRUE;
+
        info_type = provide_local_info_tlv->command_detail.cmd_qualifier.provide_local_info.provide_local_info;
 
-       //enqueue data and generate cmd_id
-       memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
-       q_data.cmd_type = SAT_PROATV_CMD_PROVIDE_LOCAL_INFO;
-       memcpy((void*)&(q_data.cmd_data.provide_local_info), provide_local_info_tlv, sizeof(struct tel_sat_provide_local_info_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
-       command_id = q_data.cmd_id;
+       switch(info_type){
+               case LOCAL_INFO_DATE_TIME_AND_TIMEZONE:{
+                       int err = 0; int gmt = 0, n_flg = 0;
+                       struct timezone c_tz;
+                       struct timeval c_time;
 
-       provide_info = g_variant_new("(ii)", command_id, info_type);
+                       time_t time_val;
+                       struct tm time_info;
+
+                       time(&time_val);
+
+                       tzset();
+                       err = gettimeofday(&c_time, &c_tz);
+                       localtime_r(&time_val, &time_info);
+
+                       //set the time information
+                       tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.year =
+                               _convert_decimal_to_bcd(time_info.tm_year+1900-2000);
+
+                       tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.month =
+                                       _convert_decimal_to_bcd(time_info.tm_mon+1);
+
+                       tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.day =
+                                       _convert_decimal_to_bcd(time_info.tm_mday);
+
+                       tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.hour =
+                                       _convert_decimal_to_bcd(time_info.tm_hour);
+
+                       tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.minute =
+                                       _convert_decimal_to_bcd(time_info.tm_min);
+
+                       tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.second =
+                                       _convert_decimal_to_bcd(time_info.tm_sec);
+
+                       gmt = c_tz.tz_minuteswest/60;
+                       if(gmt < 0){
+                               gmt = gmt * -1;
+                               n_flg = 1;
+                       }
+
+                       if(err != 0){
+                               tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.timeZone = 0xFF;
+                       }
+                       else{
+                               tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.timeZone =
+                                       _convert_decimal_to_bcd(gmt);
+
+                               if(n_flg == 1){
+                                       tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.timeZone += 0x80;
+                               }
+
+                               if(time_info.tm_isdst > 0){
+                                       tr->terminal_rsp_data.provide_local_info.other.date_time_and_timezone.timeZone += 0x40;
+                               }
+                       }
+
+                       tr->terminal_rsp_data.provide_local_info.result_type = RESULT_SUCCESS;
+                       tr->terminal_rsp_data.provide_local_info.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
+               } break;
+               case LOCAL_INFO_LANGUAGE:{
+                       Server *s = NULL;
+                       static Storage *strg;
+                       gchar *lang_str = NULL;
+                       enum tel_sim_language_type lang_type = SIM_LANG_UNSPECIFIED;
+
+                       tr->terminal_rsp_data.provide_local_info.result_type = RESULT_SUCCESS;
+                       tr->terminal_rsp_data.provide_local_info.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
+
+                       s = ctx->server;
+                       strg = tcore_server_find_storage(s, "vconf");
+                       lang_str = tcore_storage_get_string(strg, STORAGE_KEY_LANGUAGE_SET);
+                       if(lang_str)
+                               lang_type = _convert_string_to_sim_lang(lang_str);
+
+                       tr->terminal_rsp_data.provide_local_info.other.language = lang_type;
+               } break;
+               default :{
+                       tr->terminal_rsp_data.provide_local_info.other_info = FALSE;
+                       tr->terminal_rsp_data.provide_local_info.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+                       tr->terminal_rsp_data.provide_local_info.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
+               } break;
+       }
+
+       sat_manager_send_terminal_response(ctx->comm, plg, tr);
+       g_free(tr);
 
        return provide_info;
 }
 
-GVariant* sat_manager_language_notification_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_language_notification_tlv *language_notification_tlv)
+GVariant* sat_manager_language_notification_noti(struct custom_data *ctx, const char *cp_name, struct tel_sat_language_notification_tlv *language_notification_tlv)
 {
        TcorePlugin *plg = NULL;
        GVariant *language_noti = NULL;
@@ -1984,7 +2848,7 @@ GVariant* sat_manager_language_notification_noti(struct custom_data *ctx, const
 
        dbg("interpreting langauge notification");
 
-       plg = tcore_server_find_plugin(ctx->server, plugin_name);
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
        if (!plg){
                dbg("there is no valid plugin at this point");
                return NULL;
@@ -2001,8 +2865,11 @@ GVariant* sat_manager_language_notification_noti(struct custom_data *ctx, const
        //enqueue data and generate cmd_id
        memset(&q_data, 0x00, sizeof(struct sat_manager_queue_data));
        q_data.cmd_type = SAT_PROATV_CMD_LANGUAGE_NOTIFICATION;
+       q_data.cp_name = g_strdup(cp_name);
        memcpy((void*)&(q_data.cmd_data.language_notification), language_notification_tlv, sizeof(struct tel_sat_language_notification_tlv));
-       sat_manager_enqueue_cmd(ctx, &q_data);
+       if(FALSE == sat_manager_enqueue_cmd(ctx, &q_data)){
+               g_free(q_data.cp_name);
+       }
        command_id = q_data.cmd_id;
 
        language_noti = g_variant_new("(iib)", command_id, language, b_specified);
@@ -2010,6 +2877,136 @@ GVariant* sat_manager_language_notification_noti(struct custom_data *ctx, const
        return language_noti;
 }
 
+gboolean sat_manager_processing_unsupport_proactive_command(struct custom_data *ctx, const char *cp_name, struct tel_sat_unsupproted_command_tlv *unsupport_tlv)
+{
+       TcorePlugin *plg = NULL;
+       struct treq_sat_terminal_rsp_data tr;
+
+       dbg("[SAT] unsupport proactive command (%d)", unsupport_tlv->command_detail.cmd_type);
+
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
+       if (!plg){
+               dbg("there is no valid plugin at this point");
+               return FALSE;
+       }
+
+       memset(&tr, 0x00, sizeof(struct treq_sat_terminal_rsp_data));
+       tr.cmd_number = unsupport_tlv->command_detail.cmd_num;
+       tr.cmd_type = unsupport_tlv->command_detail.cmd_type;
+
+       memcpy((void*)&tr.terminal_rsp_data.unsupport_cmd.command_detail, &unsupport_tlv->command_detail, sizeof(struct tel_sat_cmd_detail_info));
+       tr.terminal_rsp_data.unsupport_cmd.device_id.src = DEVICE_ID_ME;
+       tr.terminal_rsp_data.unsupport_cmd.device_id.dest = DEVICE_ID_SIM;
+       tr.terminal_rsp_data.unsupport_cmd.result_type = RESULT_BEYOND_ME_CAPABILITIES;
+
+       sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+
+       return TRUE;
+}
+
+gboolean sat_manager_handle_sat_ui_launch_fail(struct custom_data *ctx, const char *cp_name, struct tnoti_sat_proactive_ind *p_ind)
+{
+       TReturn rv = TCORE_RETURN_FAILURE;
+       TcorePlugin *plg = NULL;
+       struct treq_sat_terminal_rsp_data tr;
+
+       dbg("[SAT] proactive command (%d)", p_ind->cmd_type);
+
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
+       if (!plg){
+               dbg("there is no valid plugin at this point");
+               return FALSE;
+       }
+
+       memset(&tr, 0x00, sizeof(struct treq_sat_terminal_rsp_data));
+       tr.cmd_number = p_ind->cmd_number;
+       tr.cmd_type = p_ind->cmd_type;
+
+       switch (p_ind->cmd_type) {
+               case SAT_PROATV_CMD_DISPLAY_TEXT: {
+                       memcpy((void*)&tr.terminal_rsp_data.display_text.command_detail, &p_ind->proactive_ind_data.display_text.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.display_text.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.display_text.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.display_text.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               case SAT_PROATV_CMD_SELECT_ITEM: {
+                       memcpy((void*)&tr.terminal_rsp_data.select_item.command_detail, &p_ind->proactive_ind_data.select_item.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.select_item.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.select_item.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.select_item.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               case SAT_PROATV_CMD_GET_INKEY: {
+                       memcpy((void*)&tr.terminal_rsp_data.get_inkey.command_detail, &p_ind->proactive_ind_data.get_inkey.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.get_inkey.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.get_inkey.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.get_inkey.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               case SAT_PROATV_CMD_GET_INPUT: {
+                       memcpy((void*)&tr.terminal_rsp_data.get_input.command_detail, &p_ind->proactive_ind_data.get_input.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.get_input.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.get_input.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.get_input.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               case SAT_PROATV_CMD_PLAY_TONE: {
+                       memcpy((void*)&tr.terminal_rsp_data.play_tone.command_detail, &p_ind->proactive_ind_data.play_tone.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.play_tone.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.play_tone.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.play_tone.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               case SAT_PROATV_CMD_SEND_SMS: {
+                       memcpy((void*)&tr.terminal_rsp_data.send_sms.command_detail, &p_ind->proactive_ind_data.send_sms.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.send_sms.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.send_sms.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.send_sms.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               case SAT_PROATV_CMD_SEND_SS: {
+                       memcpy((void*)&tr.terminal_rsp_data.send_ss.command_detail, &p_ind->proactive_ind_data.send_ss.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.send_ss.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.send_ss.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.send_ss.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               case SAT_PROATV_CMD_SEND_USSD: {
+                       memcpy((void*)&tr.terminal_rsp_data.send_ussd.command_detail, &p_ind->proactive_ind_data.send_ussd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.send_ussd.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.send_ussd.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.send_ussd.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               case SAT_PROATV_CMD_SETUP_CALL: {
+                       memcpy((void*)&tr.terminal_rsp_data.setup_call.command_detail, &p_ind->proactive_ind_data.setup_call.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.setup_call.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.setup_call.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.setup_call.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               case SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT: {
+                       memcpy((void*)&tr.terminal_rsp_data.setup_idle_mode_text.command_detail, &p_ind->proactive_ind_data.setup_idle_mode_text.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.setup_idle_mode_text.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.setup_idle_mode_text.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               case SAT_PROATV_CMD_OPEN_CHANNEL: {
+                       memcpy((void*)&tr.terminal_rsp_data.open_channel.command_detail, &p_ind->proactive_ind_data.open_channel.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.open_channel.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.open_channel.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.open_channel.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               case SAT_PROATV_CMD_LAUNCH_BROWSER: {
+                       memcpy((void*)&tr.terminal_rsp_data.launch_browser.command_detail, &p_ind->proactive_ind_data.launch_browser.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+                       tr.terminal_rsp_data.launch_browser.device_id.src = DEVICE_ID_ME;
+                       tr.terminal_rsp_data.launch_browser.device_id.dest = DEVICE_ID_SIM;
+                       tr.terminal_rsp_data.launch_browser.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+               } break;
+               default:
+                       dbg("unsupported command.");
+                       break;
+       }
+
+       rv = sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+       if(rv != TCORE_RETURN_SUCCESS)
+               return FALSE;
+
+       return TRUE;
+}
+
 static gboolean _sat_manager_handle_setup_menu_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
 {
        TReturn rv = TCORE_RETURN_FAILURE;
@@ -2019,7 +3016,6 @@ static gboolean _sat_manager_handle_setup_menu_result(struct custom_data *ctx, T
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -2040,6 +3036,10 @@ static gboolean _sat_manager_handle_setup_menu_result(struct custom_data *ctx, T
        dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
        g_variant_get(exec_result, "(i)", &resp);
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
+
        tr->cmd_number = q_data.cmd_data.setupMenuInd.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.setupMenuInd.command_detail.cmd_type;
 
@@ -2054,8 +3054,13 @@ static gboolean _sat_manager_handle_setup_menu_result(struct custom_data *ctx, T
        switch(resp){
                case RESULT_SUCCESS:
                        tr->terminal_rsp_data.setup_menu.result_type = RESULT_SUCCESS;
-                       if (q_data.cmd_data.setupMenuInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
+
+                       if(q_data.cmd_data.setupMenuInd.text_attribute.b_txt_attr || q_data.cmd_data.setupMenuInd.text_attribute_list.list_cnt > 0)
+                               tr->terminal_rsp_data.setup_menu.result_type = RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION;
+
+                       if(q_data.cmd_data.setupMenuInd.icon_id.is_exist)
                                tr->terminal_rsp_data.setup_menu.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
+
                        tr->terminal_rsp_data.setup_menu.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
                        break;
 
@@ -2079,6 +3084,8 @@ static gboolean _sat_manager_handle_setup_menu_result(struct custom_data *ctx, T
                result = FALSE;
        }
 
+       g_free(tr);
+
        return result;
 }
 
@@ -2091,7 +3098,6 @@ static gboolean _sat_manager_handle_display_text_result(struct custom_data *ctx,
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -2112,15 +3118,26 @@ static gboolean _sat_manager_handle_display_text_result(struct custom_data *ctx,
        dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
        g_variant_get(exec_result, "(ii)",&resp, &me_problem);
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
+
        tr->cmd_number = q_data.cmd_data.displayTextInd.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.displayTextInd.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.display_text.command_detail, &q_data.cmd_data.displayTextInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
-       tr->terminal_rsp_data.display_text.device_id.src = q_data.cmd_data.displayTextInd.device_id.dest;
-       tr->terminal_rsp_data.display_text.device_id.dest = q_data.cmd_data.displayTextInd.device_id.src;
+       tr->terminal_rsp_data.display_text.device_id.src = DEVICE_ID_ME;
+       tr->terminal_rsp_data.display_text.device_id.dest = DEVICE_ID_SIM;
 
        switch (resp) {
                case RESULT_SUCCESS:
                        tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS;
+
+                       if(q_data.cmd_data.displayTextInd.text_attribute.b_txt_attr)
+                               tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION;
+
+                       if (q_data.cmd_data.displayTextInd.icon_id.is_exist)
+                               tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
+
                        tr->terminal_rsp_data.display_text.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
                        break;
 
@@ -2136,9 +3153,6 @@ static gboolean _sat_manager_handle_display_text_result(struct custom_data *ctx,
                        break;
        }
 
-       if (q_data.cmd_data.displayTextInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
-               tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
-
        result = TRUE;
        rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
        if(rv != TCORE_RETURN_SUCCESS){
@@ -2146,6 +3160,8 @@ static gboolean _sat_manager_handle_display_text_result(struct custom_data *ctx,
                result = FALSE;
        }
 
+       g_free(tr);
+
        return result;
 }
 
@@ -2154,11 +3170,10 @@ static gboolean _sat_manager_handle_play_tone_result(struct custom_data *ctx, Tc
        TReturn rv = TCORE_RETURN_FAILURE;
        gboolean result = FALSE;
 
-       gint resp, me_problem;
+       gint resp;
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -2177,18 +3192,26 @@ static gboolean _sat_manager_handle_play_tone_result(struct custom_data *ctx, Tc
        }
 
        dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
-       g_variant_get(exec_result, "(ii)",&resp, &me_problem);
+       g_variant_get(exec_result, "(i)",&resp);
+
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
 
        tr->cmd_number = q_data.cmd_data.play_tone.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.play_tone.command_detail.cmd_type;
        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));
-       tr->terminal_rsp_data.play_tone.device_id.src = q_data.cmd_data.play_tone.device_id.dest;
-       tr->terminal_rsp_data.play_tone.device_id.dest = q_data.cmd_data.play_tone.device_id.src;
+       tr->terminal_rsp_data.play_tone.device_id.src = DEVICE_ID_ME;
+       tr->terminal_rsp_data.play_tone.device_id.dest = DEVICE_ID_SIM;
 
        switch (resp) {
                case RESULT_SUCCESS:
                        tr->terminal_rsp_data.play_tone.result_type = RESULT_SUCCESS;
-                       if (q_data.cmd_data.play_tone.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
+
+                       if(q_data.cmd_data.play_tone.text_attribute.b_txt_attr)
+                               tr->terminal_rsp_data.play_tone.result_type = RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION;
+
+                       if (q_data.cmd_data.play_tone.icon_id.is_exist)
                                tr->terminal_rsp_data.play_tone.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
 
                        tr->terminal_rsp_data.play_tone.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
@@ -2206,14 +3229,11 @@ static gboolean _sat_manager_handle_play_tone_result(struct custom_data *ctx, Tc
 
                default:
                        tr->terminal_rsp_data.play_tone.result_type = resp;
-                       tr->terminal_rsp_data.play_tone.me_problem_type = me_problem;
-                       dbg("[SAT] wrong result from app exec resp(%d) me_problem(%d)", resp, me_problem);
+                       tr->terminal_rsp_data.play_tone.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
+                       dbg("[SAT] wrong result from app exec resp(%d)", resp);
                        break;
        }
 
-       if (q_data.cmd_data.displayTextInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
-               tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
-
        result = TRUE;
        rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
        if(rv != TCORE_RETURN_SUCCESS){
@@ -2221,6 +3241,7 @@ static gboolean _sat_manager_handle_play_tone_result(struct custom_data *ctx, Tc
                result = FALSE;
        }
 
+       g_free(tr);
        return result;
 }
 
@@ -2233,7 +3254,6 @@ static gboolean _sat_manager_handle_send_sms_result(struct custom_data *ctx, Tco
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -2254,16 +3274,20 @@ static gboolean _sat_manager_handle_send_sms_result(struct custom_data *ctx, Tco
        dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
        g_variant_get(exec_result, "(i)",&resp);
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
+
        tr->cmd_number = q_data.cmd_data.sendSMSInd.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.sendSMSInd.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.send_sms.command_detail, &q_data.cmd_data.sendSMSInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
-       tr->terminal_rsp_data.send_sms.device_id.src = q_data.cmd_data.sendSMSInd.device_id.dest;
+       tr->terminal_rsp_data.send_sms.device_id.src = DEVICE_ID_ME;
        tr->terminal_rsp_data.send_sms.device_id.dest = q_data.cmd_data.sendSMSInd.device_id.src;
 
        switch (resp) {
                case RESULT_SUCCESS:
                        tr->terminal_rsp_data.send_sms.result_type = RESULT_SUCCESS;
-                       if (q_data.cmd_data.sendSMSInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
+                       if (q_data.cmd_data.sendSMSInd.icon_id.is_exist)
                                tr->terminal_rsp_data.send_sms.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
 
                        break;
@@ -2293,6 +3317,11 @@ static gboolean _sat_manager_handle_send_sms_result(struct custom_data *ctx, Tco
                        tr->terminal_rsp_data.send_sms.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
                        break;
 
+               case RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING:
+                       tr->terminal_rsp_data.send_sms.result_type = RESULT_ERROR_REQUIRED_VALUES_ARE_MISSING;
+                       tr->terminal_rsp_data.send_sms.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
+                       break;
+
                case RESULT_SMS_RP_ERROR:
                        tr->terminal_rsp_data.send_sms.result_type = RESULT_SMS_RP_ERROR;
                        tr->terminal_rsp_data.send_sms.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
@@ -2311,6 +3340,8 @@ static gboolean _sat_manager_handle_send_sms_result(struct custom_data *ctx, Tco
                result = FALSE;
        }
 
+       g_free(tr);
+
 /*     if( q_data.cmd_data.sendSMSInd.alpha_id.alpha_data_len && q_data.cmd_data.sendSMSInd.alpha_id.is_exist)
                sat_ui_support_terminate_sat_ui();*/
 
@@ -2322,12 +3353,12 @@ static gboolean _sat_manager_handle_send_ss_result(struct custom_data *ctx, Tcor
        TReturn rv = TCORE_RETURN_FAILURE;
        gboolean result = FALSE;
 
-       gint resp, ss_problem;
+       gint resp, me_problem, ss_cause, call_ctrl_problem, ss_str_len;
+       GVariant *ss_str = NULL;
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
        //call ctrl action, result data object, text
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -2346,25 +3377,66 @@ static gboolean _sat_manager_handle_send_ss_result(struct custom_data *ctx, Tcor
        }
 
        dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
-       g_variant_get(exec_result, "(ii)",&resp, &ss_problem);
+       g_variant_get(exec_result, "(iii@vii)", &resp, &me_problem, &ss_cause, &ss_str, &ss_str_len, &call_ctrl_problem);
+
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
 
        tr->cmd_number = q_data.cmd_data.send_ss.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.send_ss.command_detail.cmd_type;
        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));
-       tr->terminal_rsp_data.send_ss.device_id.src = q_data.cmd_data.send_ss.device_id.dest;
+       tr->terminal_rsp_data.send_ss.device_id.src = DEVICE_ID_ME;
        tr->terminal_rsp_data.send_ss.device_id.dest = q_data.cmd_data.send_ss.device_id.src;
 
        switch (resp) {
                case RESULT_SUCCESS:
                        tr->terminal_rsp_data.send_ss.result_type = RESULT_SUCCESS;
-                       if (q_data.cmd_data.send_ss.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
+                       if (q_data.cmd_data.send_ss.icon_id.is_exist)
                                tr->terminal_rsp_data.send_ss.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
 
+                       if(ss_str_len > 0 && ss_str){
+                               int local_index = 0;
+                               guchar data;
+                               GVariantIter *iter = NULL;
+                               GVariant *intermediate = NULL;
+                               char *tmp = NULL;
+
+                               intermediate = g_variant_get_variant(ss_str);
+                               dbg("ss string format(%s)", g_variant_get_type_string(intermediate));
+
+                               g_variant_get(intermediate, "ay", &iter);
+                               while( g_variant_iter_loop (iter, "y", &data)){
+                                       dbg("index(%d) data(%c)", local_index, data);
+                                       tr->terminal_rsp_data.send_ss.text.string[local_index] = data;
+                                       local_index++;
+                               }
+                               g_variant_iter_free(iter);
+                               g_variant_unref(intermediate);
+
+                               tr->terminal_rsp_data.send_ss.text.string_length = local_index;
+                               tmp = _convert_hex_string_to_bytes(tr->terminal_rsp_data.send_ss.text.string);
+                               memset(tr->terminal_rsp_data.send_ss.text.string, 0x00,
+                                       sizeof(tr->terminal_rsp_data.send_ss.text.string));
+                               if(tmp) {
+                                       memcpy(tr->terminal_rsp_data.send_ss.text.string, tmp,
+                                               tr->terminal_rsp_data.send_ss.text.string_length);
+                                       g_free(tmp);
+                               }
+                               else {
+                                       err("memcpy failed");
+                               }
+                               dbg("SS string len:%d", tr->terminal_rsp_data.send_ss.text.string_length);
+                       }
                        break;
 
                case RESULT_SS_RETURN_ERROR:
                        tr->terminal_rsp_data.send_ss.result_type = RESULT_SS_RETURN_ERROR;
-                       tr->terminal_rsp_data.send_ss.ss_problem = ss_problem;
+                       if (ss_cause == SATK_SS_PROBLEM_FACILITY_NOT_SUPPORTED) {
+                                tr->terminal_rsp_data.send_ss.ss_problem = SATK_SS_PROBLEM_FACILITY_NOT_SUPPORTED;
+                        } else {
+                                tr->terminal_rsp_data.send_ss.ss_problem = SATK_SS_PROBLEM_NO_SPECIFIC_CAUSE;
+                        }
                        break;
 
                case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
@@ -2384,10 +3456,39 @@ static gboolean _sat_manager_handle_send_ss_result(struct custom_data *ctx, Tcor
                dbg("fail to send terminal response");
                result = FALSE;
        }
+       g_free(tr);
+
+#if defined(TIZEN_PLATFORM_USE_QCOM_QMI)
+       if( q_data.cmd_data.send_ss.alpha_id.alpha_data_len && q_data.cmd_data.send_ss.alpha_id.is_exist ) {
+               char *path;
+               const gchar *cp_name;
+               TelephonySAT *sat;
+               TelephonyObjectSkeleton *object;
+
+               dbg("AlphaID is present, terminate SAT-UI.");
+               cp_name = tcore_server_get_cp_name_by_plugin(plg);
+               if (cp_name == NULL) {
+                       err("CP name is NULL");
+                       goto Exit;
+               }
 
-       if( q_data.cmd_data.send_ss.alpha_id.alpha_data_len && q_data.cmd_data.send_ss.alpha_id.is_exist )
-               sat_ui_support_terminate_sat_ui();
+               dbg("CP Name: [%s]", cp_name);
+               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
 
+               /* Look-up Hash table for Object */
+               object = g_hash_table_lookup(ctx->objects, path);
+               dbg("Path: [%s] Interface object: [%p]", path, object);
+               g_free(path);
+               if (object == NULL) {
+                       err("Object is NOT defined!!!");
+                       goto Exit;
+               }
+
+               sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
+               telephony_sat_emit_end_proactive_session(sat, SAT_PROATV_CMD_TYPE_END_PROACTIVE_SESSION);
+       }
+Exit:
+#endif
        return result;
 }
 
@@ -2396,12 +3497,12 @@ static gboolean _sat_manager_handle_send_ussd_result(struct custom_data *ctx, Tc
        TReturn rv = TCORE_RETURN_FAILURE;
        gboolean result = FALSE;
 
-       gint resp, ussd_problem;
+       gint resp, me_problem, ss_cause, ussd_str_len;
+       GVariant *ussd_str = NULL;
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
        //call ctrl action, result data object, text, result2, text2
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -2420,26 +3521,140 @@ static gboolean _sat_manager_handle_send_ussd_result(struct custom_data *ctx, Tc
        }
 
        dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
-       g_variant_get(exec_result, "(ii)",&resp, &ussd_problem);
+       g_variant_get(exec_result, "(iii@vi)", &resp, &me_problem, &ss_cause, &ussd_str, &ussd_str_len);
+
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
 
        tr->cmd_number = q_data.cmd_data.send_ussd.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.send_ussd.command_detail.cmd_type;
        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));
-       tr->terminal_rsp_data.send_ussd.device_id.src = q_data.cmd_data.send_ussd.device_id.dest;
+       tr->terminal_rsp_data.send_ussd.device_id.src = DEVICE_ID_ME;
        tr->terminal_rsp_data.send_ussd.device_id.dest = q_data.cmd_data.send_ussd.device_id.src;
 
        switch (resp) {
                case RESULT_SUCCESS:
                        tr->terminal_rsp_data.send_ussd.result_type = RESULT_SUCCESS;
-                       if (q_data.cmd_data.send_ussd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
+                       if (q_data.cmd_data.send_ussd.icon_id.is_exist)
                                tr->terminal_rsp_data.send_ussd.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
 
+                       if(ussd_str_len > 0 && ussd_str){
+                               int local_index = 0, i = 0;
+                               guchar data;
+                               GVariantIter *iter = NULL;
+                               GVariant *intermediate = NULL;
+                               enum alphabet_format alpha_format;
+
+                               intermediate = g_variant_get_variant(ussd_str);
+                               dbg("ussd string format(%s)", g_variant_get_type_string(intermediate));
+
+                               g_variant_get(intermediate, "ay", &iter);
+                               while( g_variant_iter_loop (iter, "y", &data)){
+                                       dbg("local_index(%d) data(%c)", local_index, data);
+                                       tr->terminal_rsp_data.send_ussd.text.string[local_index] = data;
+                                       local_index++;
+                               }
+
+                               if(local_index >=1 )
+                                       tr->terminal_rsp_data.send_ussd.text.string_length = local_index-1;
+                               tr->terminal_rsp_data.send_ussd.text.dcs.raw_dcs = q_data.cmd_data.send_ussd.ussd_string.dsc.raw_dcs;
+                               /*bits 2 & 3 indicate the character set being used */
+                               switch (tr->terminal_rsp_data.send_ussd.text.dcs.raw_dcs & 0x0C) {
+                                       case 0x00:
+                                       case 0x0C:
+                                               alpha_format = ALPHABET_FORMAT_SMS_DEFAULT;
+                                               break;
+
+                                       case 0x04:
+                                               alpha_format = ALPHABET_FORMAT_8BIT_DATA;
+                                               break;
+
+                                       case 0X08:
+                                               alpha_format = ALPHABET_FORMAT_UCS2;
+                                               break;
+
+                                       default:
+                                               alpha_format = ALPHABET_FORMAT_RESERVED;
+                                               break;
+                               }
+                               dbg("string :[%s] len:[%d] dcs:[%d] alpha_format:[%d]", tr->terminal_rsp_data.send_ussd.text.string, tr->terminal_rsp_data.send_ussd.text.string_length,
+                                       tr->terminal_rsp_data.send_ussd.text.dcs.raw_dcs, alpha_format);
+                               g_variant_iter_free(iter);
+                               g_variant_unref(intermediate);
+                               switch(alpha_format){
+                                       case ALPHABET_FORMAT_SMS_DEFAULT:
+                                               /* As per the test spec TS 151.010-04 raw dcs for SMS default is 0 */
+                                               tr->terminal_rsp_data.send_ussd.text.dcs.raw_dcs = ALPHABET_FORMAT_SMS_DEFAULT;
+                                               if (tr->terminal_rsp_data.send_ussd.text.string_length > 0){
+                                                       int tmp_len;
+                                                       char tmp_str[SAT_TEXT_STRING_LEN_MAX + 1];
+                                                       char  *packed_data;
+
+                                                       dbg("UTF 8 to GSM SMS default");
+                                                       tcore_util_convert_utf8_to_gsm((unsigned char*)tmp_str, &tmp_len,
+                                                               (unsigned char*)tr->terminal_rsp_data.send_ussd.text.string,
+                                                               tr->terminal_rsp_data.send_ussd.text.string_length);
+                                                       packed_data = (char*) tcore_util_pack_gsm7bit((const unsigned char *)tmp_str, tmp_len);
+                                                       memset(tr->terminal_rsp_data.send_ussd.text.string, 0x00,
+                                                               sizeof(tr->terminal_rsp_data.send_ussd.text.string));
+                                                       if(packed_data){
+                                                               memcpy((void*)tr->terminal_rsp_data.send_ussd.text.string, packed_data, strlen(packed_data));
+                                                               tr->terminal_rsp_data.send_ussd.text.string_length = strlen(packed_data);
+                                                               g_free(packed_data);
+                                                       }
+                                               }
+                                               dbg("final ussd len:%d", tr->terminal_rsp_data.send_ussd.text.string_length);
+                                               for(i = 0; i< tr->terminal_rsp_data.send_ussd.text.string_length; i++)
+                                                       dbg("string :%c \n", tr->terminal_rsp_data.send_ussd.text.string[i]);
+                                               break;
+                                       case ALPHABET_FORMAT_8BIT_DATA: {
+                                               gint output_data_len = 0;
+                                               gchar output_data[SAT_USSD_STRING_LEN_MAX];
+                                               dbg("UTF 8 to GSM 8 BIT DATA");
+                                               tcore_util_convert_utf8_to_gsm((unsigned char*)output_data,&output_data_len,
+                                                       (unsigned char*)tr->terminal_rsp_data.send_ussd.text.string,
+                                                       tr->terminal_rsp_data.send_ussd.text.string_length);
+                                               memset(tr->terminal_rsp_data.send_ussd.text.string, 0x00,
+                                                       sizeof(tr->terminal_rsp_data.send_ussd.text.string));
+                                               if(output_data_len > 0){
+                                                       memcpy((void*)tr->terminal_rsp_data.send_ussd.text.string, output_data, output_data_len);
+                                                       tr->terminal_rsp_data.send_ussd.text.string_length = output_data_len;
+                                               }
+                                               dbg("final ussd len:%d", tr->terminal_rsp_data.send_ussd.text.string_length);
+                                               for(i = 0; i< tr->terminal_rsp_data.send_ussd.text.string_length; i++)
+                                                       dbg("string :%c \n", tr->terminal_rsp_data.send_ussd.text.string[i]);
+                                               }
+                                               break;
+                                       case ALPHABET_FORMAT_UCS2: {
+                                               char *tmp = NULL;
+                                               int str_len = 0;
+                                               dbg("UCS2 DATA");
+                                               tcore_util_convert_utf8_to_ucs2(&tmp,
+                                                               &str_len, (unsigned char*)tr->terminal_rsp_data.send_ussd.text.string,
+                                                               tr->terminal_rsp_data.send_ussd.text.string_length);
+                                               memset(tr->terminal_rsp_data.send_ussd.text.string, 0x00,
+                                                       sizeof(tr->terminal_rsp_data.send_ussd.text.string));
+                                               memcpy(tr->terminal_rsp_data.send_ussd.text.string, tmp, str_len);
+                                               tr->terminal_rsp_data.send_ussd.text.string_length = str_len;
+                                               dbg("final ussd len:%d", tr->terminal_rsp_data.send_ussd.text.string_length);
+                                               for(i = 0; i< tr->terminal_rsp_data.send_ussd.text.string_length; i++)
+                                                       dbg("string :%c \n", tr->terminal_rsp_data.send_ussd.text.string[i]);
+                                               g_free(tmp);
+                                       }
+                                               break;
+                                       default:
+                                               break;
+                               }
+                       }
                        break;
 
                case RESULT_SS_RETURN_ERROR:
                case RESULT_USSD_RETURN_ERROR:
                        tr->terminal_rsp_data.send_ussd.result_type = RESULT_USSD_RETURN_ERROR;
-                       tr->terminal_rsp_data.send_ussd.ussd_problem = ussd_problem;
+                       if(ss_cause == SATK_USSD_PROBLEM_UNKNOWN_ALPHABET)
+                               tr->terminal_rsp_data.send_ussd.ussd_problem = ss_cause;
+
                        break;
 
                case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:
@@ -2454,7 +3669,7 @@ static gboolean _sat_manager_handle_send_ussd_result(struct custom_data *ctx, Tc
 
                default:
                        tr->terminal_rsp_data.send_ussd.result_type = RESULT_USSD_RETURN_ERROR;
-                       tr->terminal_rsp_data.send_ussd.ussd_problem = SATK_SS_PROBLEM_NO_SPECIFIC_CAUSE;
+                       tr->terminal_rsp_data.send_ussd.ussd_problem = SATK_USSD_PROBLEM_NO_SPECIFIC_CAUSE;
                        break;
        }
 
@@ -2464,10 +3679,41 @@ static gboolean _sat_manager_handle_send_ussd_result(struct custom_data *ctx, Tc
                dbg("fail to send terminal response");
                result = FALSE;
        }
+       g_free(tr);
+
+#if defined(TIZEN_PLATFORM_USE_QCOM_QMI)
+       if( q_data.cmd_data.send_ussd.alpha_id.alpha_data_len && q_data.cmd_data.send_ussd.alpha_id.is_exist ) {
+               char *path;
+               const gchar *cp_name;
+               TelephonySAT *sat;
+               TelephonyObjectSkeleton *object;
+
+               dbg("AlphaID is present, terminate SAT-UI.");
+               //emit session end signal
+               cp_name = tcore_server_get_cp_name_by_plugin(plg);
+               if (cp_name == NULL) {
+                       err("CP name is NULL");
+                       goto Exit;
+               }
 
-       if( q_data.cmd_data.send_ussd.alpha_id.alpha_data_len && q_data.cmd_data.send_ussd.alpha_id.is_exist )
-               sat_ui_support_terminate_sat_ui();
+               dbg("CP Name: [%s]", cp_name);
+               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
 
+               /* Look-up Hash table for Object */
+               object = g_hash_table_lookup(ctx->objects, path);
+               dbg("Path: [%s] Interface object: [%p]", path, object);
+               g_free(path);
+               if (object == NULL) {
+                       err("Object is NOT defined!!!");
+                       goto Exit;
+               }
+
+               sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
+               telephony_sat_emit_end_proactive_session(sat, SAT_PROATV_CMD_TYPE_END_PROACTIVE_SESSION);
+       }
+
+Exit:
+#endif
        return result;
 }
 
@@ -2480,7 +3726,6 @@ static gboolean _sat_manager_handle_setup_call_result(struct custom_data *ctx, T
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -2501,17 +3746,20 @@ static gboolean _sat_manager_handle_setup_call_result(struct custom_data *ctx, T
        dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
        g_variant_get(exec_result, "(iiii)",&resp, &me_problem, &cc_problem, &call_cause);
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
+
        tr->cmd_number = q_data.cmd_data.setup_call.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.setup_call.command_detail.cmd_type;
        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));
-       tr->terminal_rsp_data.setup_call.device_id.src = q_data.cmd_data.setup_call.device_id.dest;
+       tr->terminal_rsp_data.setup_call.device_id.src = DEVICE_ID_ME;
        tr->terminal_rsp_data.setup_call.device_id.dest = q_data.cmd_data.setup_call.device_id.src;
 
        switch (resp) {
                case RESULT_SUCCESS:
                        tr->terminal_rsp_data.setup_call.result_type = RESULT_SUCCESS;
-                       if (q_data.cmd_data.setup_call.call_setup_icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR ||
-                                       q_data.cmd_data.setup_call.call_setup_icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR )
+                       if (q_data.cmd_data.setup_call.call_setup_icon_id.is_exist || q_data.cmd_data.setup_call.user_confirm_icon_id.is_exist)
                                tr->terminal_rsp_data.setup_call.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
                        tr->terminal_rsp_data.setup_call.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
                        tr->terminal_rsp_data.setup_call.cc_problem_type = CC_PROBLEM_NO_SPECIFIC_CAUSE;
@@ -2519,13 +3767,13 @@ static gboolean _sat_manager_handle_setup_call_result(struct custom_data *ctx, T
 
                case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
                        tr->terminal_rsp_data.setup_call.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
-                       tr->terminal_rsp_data.send_sms.me_problem_type = me_problem;
+                       tr->terminal_rsp_data.setup_call.me_problem_type = me_problem;
                        break;
 
                case RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND:{
                        tr->terminal_rsp_data.setup_call.result_type = RESULT_NETWORK_UNABLE_TO_PROCESS_COMMAND;
                        switch(call_cause){
-                               case CALL_CAUSE_BUSY:
+                               case CALL_ERROR_BUSY:
                                        tr->terminal_rsp_data.setup_call.network_problem_type = NETWORK_PROBLEM_USER_BUSY;
                                break;
                                default :
@@ -2567,6 +3815,7 @@ static gboolean _sat_manager_handle_setup_call_result(struct custom_data *ctx, T
                result = FALSE;
        }
 
+       g_free(tr);
        return result;
 }
 
@@ -2575,12 +3824,12 @@ static gboolean _sat_manager_handle_setup_idle_mode_text_result(struct custom_da
        TReturn rv = TCORE_RETURN_FAILURE;
        gboolean result = FALSE;
 
-       gint resp, me_problem;
-       struct treq_sat_terminal_rsp_data *tr;
+       gint resp;
+       struct treq_sat_terminal_rsp_data tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
+       memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
                dbg("[SAT] command dequeue failed. didn't find in command Q!!");
@@ -2598,36 +3847,33 @@ static gboolean _sat_manager_handle_setup_idle_mode_text_result(struct custom_da
        }
 
        dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
-       g_variant_get(exec_result, "(ii)",&resp, &me_problem);
+       g_variant_get(exec_result, "(i)",&resp);
 
-       tr->cmd_number = q_data.cmd_data.idle_mode.command_detail.cmd_num;
-       tr->cmd_type = q_data.cmd_data.idle_mode.command_detail.cmd_type;
-       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));
-       tr->terminal_rsp_data.setup_idle_mode_text.device_id.src = q_data.cmd_data.idle_mode.device_id.dest;
-       tr->terminal_rsp_data.setup_idle_mode_text.device_id.dest = q_data.cmd_data.idle_mode.device_id.src;
+       tr.cmd_number = q_data.cmd_data.idle_mode.command_detail.cmd_num;
+       tr.cmd_type = q_data.cmd_data.idle_mode.command_detail.cmd_type;
+       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));
+       tr.terminal_rsp_data.setup_idle_mode_text.device_id.src = q_data.cmd_data.idle_mode.device_id.dest;
+       tr.terminal_rsp_data.setup_idle_mode_text.device_id.dest = q_data.cmd_data.idle_mode.device_id.src;
 
        switch (resp) {
                case RESULT_SUCCESS:
-                       tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS;
-                       if (q_data.cmd_data.idle_mode.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
-                               tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
+                       tr.terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS;
+                       if (q_data.cmd_data.idle_mode.icon_id.is_exist)
+                               tr.terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
 
                        break;
                default:
-                       tr->terminal_rsp_data.setup_idle_mode_text.result_type = resp;
-                       tr->terminal_rsp_data.setup_idle_mode_text.me_problem_type = me_problem;
+                       tr.terminal_rsp_data.setup_idle_mode_text.result_type = resp;
                        break;
        }
 
        result = TRUE;
-       rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
+       rv = sat_manager_send_terminal_response(ctx->comm, plg, &tr);
        if(rv != TCORE_RETURN_SUCCESS){
                dbg("fail to send terminal response");
                result = FALSE;
        }
 
-       sat_ui_support_terminate_sat_ui();
-
        return result;
 }
 
@@ -2644,7 +3890,6 @@ static gboolean sat_manager_handle_open_channel_result(struct custom_data *ctx,
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -2669,6 +3914,9 @@ static gboolean sat_manager_handle_open_channel_result(struct custom_data *ctx,
 
        bearer_desc = g_variant_get_variant(desc_tmp);
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
        tr->cmd_number = q_data.cmd_data.open_channel.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.open_channel.command_detail.cmd_type;
        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));
@@ -2748,8 +3996,10 @@ static gboolean sat_manager_handle_open_channel_result(struct custom_data *ctx,
 
                        tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.local_link_bearer_param.service_type = service_type;
 
-                       if(!service_record)
+                       if(service_record) {
                                memcpy(tr->terminal_rsp_data.open_channel.bearer_desc.bearer_parameter.local_link_bearer_param.service_record, service_record, strlen(service_record));
+                               g_free(service_record);
+                       }
 
                }break;
                default:
@@ -2763,6 +4013,7 @@ static gboolean sat_manager_handle_open_channel_result(struct custom_data *ctx,
                result = FALSE;
        }
 
+       g_free(tr);
        return result;
 }
 
@@ -2776,7 +4027,6 @@ static gboolean sat_manager_handle_close_channel_result(struct custom_data *ctx,
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -2797,6 +4047,9 @@ static gboolean sat_manager_handle_close_channel_result(struct custom_data *ctx,
        dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
        g_variant_get(exec_result, "(iii)",&resp, &me_problem, &bip_problem);
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
        tr->cmd_number = q_data.cmd_data.close_channel.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.close_channel.command_detail.cmd_type;
        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));
@@ -2832,6 +4085,7 @@ static gboolean sat_manager_handle_close_channel_result(struct custom_data *ctx,
                result = FALSE;
        }
 
+       g_free(tr);
        return result;
 }
 
@@ -2848,7 +4102,6 @@ static gboolean sat_manager_handle_receive_data_result(struct custom_data *ctx,
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -2869,6 +4122,9 @@ static gboolean sat_manager_handle_receive_data_result(struct custom_data *ctx,
        dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
        g_variant_get(exec_result, "(iiiiibv)",&resp, &me_problem, &bip_problem, &data_str_len, &data_len, &other_info, &received_data);
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
        tr->cmd_number = q_data.cmd_data.receive_data.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.receive_data.command_detail.cmd_type;
        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));
@@ -2901,7 +4157,7 @@ static gboolean sat_manager_handle_receive_data_result(struct custom_data *ctx,
        tr->terminal_rsp_data.receive_data.channel_data.data_string_len = data_str_len;
 
        if(received_data){
-               int index = 0;
+               int local_index = 0;
                guchar data;
                GVariantIter *iter = NULL;
 
@@ -2909,13 +4165,13 @@ static gboolean sat_manager_handle_receive_data_result(struct custom_data *ctx,
 
                g_variant_get(received_data, "ay", &iter);
                while( g_variant_iter_loop (iter, "y", &data)){
-                       dbg("index(%d) data(%d)", index, data);
-                       tr->terminal_rsp_data.receive_data.channel_data.data_string[index] = data;
-                       index++;
+                       //dbg("index(%d) data(%d)", index, data);
+                       tr->terminal_rsp_data.receive_data.channel_data.data_string[local_index] = data;
+                       local_index++;
                }
                g_variant_iter_free(iter);
 
-               dbg("the last index data(%d), data_total_len(%d)", index, data_str_len);
+               dbg("the last index data(%d), data_total_len(%d)", local_index, data_str_len);
        }
 
        result = TRUE;
@@ -2925,6 +4181,7 @@ static gboolean sat_manager_handle_receive_data_result(struct custom_data *ctx,
                result = FALSE;
        }
 
+       g_free(tr);
        return result;
 }
 
@@ -2939,7 +4196,6 @@ static gboolean sat_manager_handle_send_data_result(struct custom_data *ctx, Tco
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -2960,6 +4216,9 @@ static gboolean sat_manager_handle_send_data_result(struct custom_data *ctx, Tco
        dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
        g_variant_get(exec_result, "(iiii)",&resp, &me_problem, &bip_problem, &data_len);
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
        tr->cmd_number = q_data.cmd_data.send_data.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.send_data.command_detail.cmd_type;
        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));
@@ -2997,6 +4256,7 @@ static gboolean sat_manager_handle_send_data_result(struct custom_data *ctx, Tco
                result = FALSE;
        }
 
+       g_free(tr);
        return result;
 }
 
@@ -3011,7 +4271,6 @@ static gboolean sat_manager_handle_get_channel_status_result(struct custom_data
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -3033,6 +4292,9 @@ static gboolean sat_manager_handle_get_channel_status_result(struct custom_data
        g_variant_get(exec_result, "(iiiiii)",&resp, &me_problem, &bip_problem,
                        &channel_id, &channel_status, &channel_status_info);
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
        tr->cmd_number = q_data.cmd_data.get_channel_status.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.get_channel_status.command_detail.cmd_type;
        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));
@@ -3072,6 +4334,7 @@ static gboolean sat_manager_handle_get_channel_status_result(struct custom_data
                result = FALSE;
        }
 
+       g_free(tr);
        return result;
 }
 
@@ -3080,65 +4343,60 @@ static gboolean sat_manager_handle_send_dtmf_result(struct custom_data *ctx, Tco
        TReturn rv = TCORE_RETURN_FAILURE;
        gboolean result = FALSE;
 
+       gint resp;
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
        tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
                dbg("[SAT] command dequeue failed. didn't find in command Q!!");
+               g_free(tr);
                return result;
        }
 
        if(!exec_result){
                dbg("[SAT] get channel status data is null");
+               g_free(tr);
                return result;
        }
 
        if (!plg){
                dbg("there is no valid plugin at this point");
+               g_free(tr);
                return result;
        }
 
+       dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
+       g_variant_get(exec_result, "(i)",&resp);
 
-       result = TRUE;
-       rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
-       if(rv != TCORE_RETURN_SUCCESS){
-               dbg("fail to send terminal response");
-               result = FALSE;
-       }
-
-       return result;
-}
-
-static gboolean sat_manager_handle_launch_browser_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
-{
-       TReturn rv = TCORE_RETURN_FAILURE;
-       gboolean result = FALSE;
-
-       struct treq_sat_terminal_rsp_data *tr;
-       struct sat_manager_queue_data q_data;
+       tr->cmd_number = q_data.cmd_data.send_dtmf.command_detail.cmd_num;
+       tr->cmd_type = q_data.cmd_data.send_dtmf.command_detail.cmd_type;
+       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));
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-       memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
+       tr->terminal_rsp_data.send_dtmf.device_id.src = DEVICE_ID_ME;
+       tr->terminal_rsp_data.send_dtmf.device_id.dest = q_data.cmd_data.send_dtmf.device_id.src;
 
-       if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
-               dbg("[SAT] command dequeue failed. didn't find in command Q!!");
-               return result;
-       }
+       tr->terminal_rsp_data.send_dtmf.result_type = resp;
+       switch (resp) {
+               case RESULT_SUCCESS:
+                       if (q_data.cmd_data.send_dtmf.icon_id.is_exist)
+                               tr->terminal_rsp_data.send_dtmf.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
+                       break;
 
-       if(!exec_result){
-               dbg("[SAT] get channel status data is null");
-               return result;
-       }
+               case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+                       tr->terminal_rsp_data.send_dtmf.me_problem_type = ME_PROBLEM_NOT_IN_SPEECH_CALL;
+                       break;
 
-       if (!plg){
-               dbg("there is no valid plugin at this point");
-               return result;
+               default:
+                       tr->terminal_rsp_data.send_dtmf.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+                       tr->terminal_rsp_data.send_dtmf.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
+                       break;
        }
 
-
        result = TRUE;
        rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
        if(rv != TCORE_RETURN_SUCCESS){
@@ -3146,18 +4404,19 @@ static gboolean sat_manager_handle_launch_browser_result(struct custom_data *ctx
                result = FALSE;
        }
 
+       g_free(tr);
        return result;
 }
 
-static gboolean sat_manager_handle_provide_local_info_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
+static gboolean sat_manager_handle_launch_browser_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
 {
        TReturn rv = TCORE_RETURN_FAILURE;
        gboolean result = FALSE;
 
+       gint resp, browser_problem;
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -3175,43 +4434,43 @@ static gboolean sat_manager_handle_provide_local_info_result(struct custom_data
                return result;
        }
 
-
-       result = TRUE;
-       rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
-       if(rv != TCORE_RETURN_SUCCESS){
-               dbg("fail to send terminal response");
-               result = FALSE;
-       }
-
-       return result;
-}
-
-static gboolean sat_manager_handle_language_notification_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, GVariant *exec_result)
-{
-       TReturn rv = TCORE_RETURN_FAILURE;
-       gboolean result = FALSE;
-
-       struct treq_sat_terminal_rsp_data *tr;
-       struct sat_manager_queue_data q_data;
+       dbg("exec_result type_format(%s)", g_variant_get_type_string(exec_result));
+       g_variant_get(exec_result, "(ii)",&resp,&browser_problem);
 
        tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-       memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
-
-       if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
-               dbg("[SAT] command dequeue failed. didn't find in command Q!!");
+       if (!tr)
                return result;
-       }
+       tr->cmd_number = q_data.cmd_data.launch_browser.command_detail.cmd_num;
+       tr->cmd_type = q_data.cmd_data.launch_browser.command_detail.cmd_type;
+       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));
 
-       if(!exec_result){
-               dbg("[SAT] get channel status data is null");
-               return result;
-       }
+       tr->terminal_rsp_data.launch_browser.device_id.src = q_data.cmd_data.launch_browser.device_id.dest;
+       tr->terminal_rsp_data.launch_browser.device_id.dest = q_data.cmd_data.launch_browser.device_id.src;
 
-       if (!plg){
-               dbg("there is no valid plugin at this point");
-               return result;
-       }
+       tr->terminal_rsp_data.launch_browser.result_type = resp;
+       switch (resp) {
+               case RESULT_SUCCESS:
+                       if (q_data.cmd_data.launch_browser.user_confirm_icon_id.is_exist)
+                               tr->terminal_rsp_data.launch_browser.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
+
+                       tr->terminal_rsp_data.launch_browser.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
+                       tr->terminal_rsp_data.launch_browser.browser_problem_type = BROWSER_PROBLEM_NO_SPECIFIC_CAUSE;
+                       break;
+               case RESULT_ME_UNABLE_TO_PROCESS_COMMAND:
+                       tr->terminal_rsp_data.launch_browser.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
+                       tr->terminal_rsp_data.launch_browser.browser_problem_type = BROWSER_PROBLEM_NO_SPECIFIC_CAUSE;
+                       break;
 
+               case RESULT_LAUNCH_BROWSER_GENERIC_ERROR_CODE:
+                       tr->terminal_rsp_data.launch_browser.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
+                       tr->terminal_rsp_data.launch_browser.browser_problem_type = browser_problem;
+                       break;
+               default:
+                       tr->terminal_rsp_data.launch_browser.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+                       tr->terminal_rsp_data.launch_browser.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
+                       tr->terminal_rsp_data.launch_browser.browser_problem_type = BROWSER_PROBLEM_NO_SPECIFIC_CAUSE;
+                       break;
+       }
 
        result = TRUE;
        rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
@@ -3220,6 +4479,7 @@ static gboolean sat_manager_handle_language_notification_result(struct custom_da
                result = FALSE;
        }
 
+       g_free(tr);
        return result;
 }
 
@@ -3293,21 +4553,11 @@ gboolean sat_manager_handle_app_exec_result(struct custom_data *ctx, TcorePlugin
                        result = sat_manager_handle_launch_browser_result(ctx, plg, command_id, resp);
                        break;
 
-               case SAT_PROATV_CMD_PROVIDE_LOCAL_INFO:
-                       result = sat_manager_handle_provide_local_info_result(ctx, plg, command_id, resp);
-                       break;
-
-               case SAT_PROATV_CMD_LANGUAGE_NOTIFICATION:
-                       result = sat_manager_handle_language_notification_result(ctx, plg, command_id, resp);
-                       break;
-
                default:
                        dbg("[SAT] invalid command type(%d)", command_type);
                        break;
        }
 
-       sat_ui_support_terminate_sat_ui();
-
        return result;
 }
 
@@ -3316,11 +4566,10 @@ static gboolean _sat_manager_handle_menu_select_confirm(struct custom_data *ctx,
        TReturn rv = TCORE_RETURN_FAILURE;
        gboolean result = FALSE;
 
-       gint item_id;
+       gint item_id=0;
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -3334,7 +4583,7 @@ static gboolean _sat_manager_handle_menu_select_confirm(struct custom_data *ctx,
        }
 
        if(addtional_data){
-               int index = 0;
+               int local_index = 0;
                guchar data;
                GVariantIter *iter = NULL;
                GVariant *inner_gv = NULL;
@@ -3344,14 +4593,17 @@ static gboolean _sat_manager_handle_menu_select_confirm(struct custom_data *ctx,
 
                g_variant_get(inner_gv, "ay", &iter);
                while( g_variant_iter_loop (iter, "y", &data)){
-                       dbg("index(%d) data(%d)", index, data);
+                       dbg("index(%d) data(%d)", local_index, data);
                        item_id = data;
-                       index++;
+                       local_index++;
                }
                g_variant_iter_free(iter);
                g_variant_unref(inner_gv);
        }
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
        tr->cmd_number = q_data.cmd_data.selectItemInd.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.selectItemInd.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.select_item.command_detail, &q_data.cmd_data.selectItemInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
@@ -3365,7 +4617,10 @@ static gboolean _sat_manager_handle_menu_select_confirm(struct custom_data *ctx,
                        tr->terminal_rsp_data.select_item.result_type = RESULT_SUCCESS;
                        tr->terminal_rsp_data.select_item.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
 
-                       if (q_data.cmd_data.selectItemInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
+                       if(q_data.cmd_data.selectItemInd.text_attribute.b_txt_attr || q_data.cmd_data.selectItemInd.text_attribute_list.list_cnt > 0)
+                               tr->terminal_rsp_data.select_item.result_type = RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION;
+
+                       if (q_data.cmd_data.selectItemInd.icon_id.is_exist)
                                tr->terminal_rsp_data.select_item.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
 
                        break;
@@ -3402,6 +4657,8 @@ static gboolean _sat_manager_handle_menu_select_confirm(struct custom_data *ctx,
                result = FALSE;
        }
 
+       g_free(tr);
+
        return result;
 }
 
@@ -3413,7 +4670,6 @@ static gboolean _sat_manager_handle_display_text_confirm(struct custom_data *ctx
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
@@ -3426,10 +4682,9 @@ static gboolean _sat_manager_handle_display_text_confirm(struct custom_data *ctx
                return result;
        }
 
-       if (q_data.cmd_data.displayTextInd.immediate_response_requested){
-               return TRUE;
-       }
-
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
        tr->cmd_number = q_data.cmd_data.displayTextInd.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.displayTextInd.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.display_text.command_detail, &q_data.cmd_data.displayTextInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
@@ -3441,7 +4696,10 @@ static gboolean _sat_manager_handle_display_text_confirm(struct custom_data *ctx
                        tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS;
                        tr->terminal_rsp_data.display_text.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
 
-                       if (q_data.cmd_data.displayTextInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
+                       if(q_data.cmd_data.displayTextInd.text_attribute.b_txt_attr)
+                               tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION;
+
+                       if (q_data.cmd_data.displayTextInd.icon_id.is_exist)
                                tr->terminal_rsp_data.display_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
                } break;
 
@@ -3474,6 +4732,8 @@ static gboolean _sat_manager_handle_display_text_confirm(struct custom_data *ctx
                result = FALSE;
        }
 
+       g_free(tr);
+
        return result;
 }
 
@@ -3487,7 +4747,6 @@ static gboolean _sat_manager_handle_get_inkey_confirm(struct custom_data *ctx, T
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
        memset(inkey_data, 0, SAT_TEXT_STRING_LEN_MAX);
 
@@ -3502,7 +4761,7 @@ static gboolean _sat_manager_handle_get_inkey_confirm(struct custom_data *ctx, T
        }
 
        if(addtional_data){
-               int index = 0;
+               int local_index = 0;
                guchar data;
                GVariantIter *iter = NULL;
                GVariant *inner_gv = NULL;
@@ -3512,15 +4771,18 @@ static gboolean _sat_manager_handle_get_inkey_confirm(struct custom_data *ctx, T
 
                g_variant_get(inner_gv, "ay", &iter);
                while( g_variant_iter_loop (iter, "y", &data)){
-                       dbg("index(%d) data(%d)", index, data);
-                       inkey_data[index] = data;
-                       index++;
+                       dbg("index(%d) data(%d)", local_index, data);
+                       inkey_data[local_index] = data;
+                       local_index++;
                }
                g_variant_iter_free(iter);
                g_variant_unref(inner_gv);
-               inkey_data_len = index;
+               inkey_data_len = local_index;
        }
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
        tr->cmd_number = q_data.cmd_data.getInkeyInd.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.getInkeyInd.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.get_inkey.command_detail, &q_data.cmd_data.getInkeyInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
@@ -3531,12 +4793,15 @@ static gboolean _sat_manager_handle_get_inkey_confirm(struct custom_data *ctx, T
                case USER_CONFIRM_YES:
                        tr->terminal_rsp_data.get_inkey.result_type = RESULT_SUCCESS;
 
-                       if (q_data.cmd_data.getInkeyInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
+                       if(q_data.cmd_data.getInkeyInd.text_attribute.b_txt_attr)
+                               tr->terminal_rsp_data.get_inkey.result_type = RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION;
+
+                       if (q_data.cmd_data.getInkeyInd.icon_id.is_exist)
                                tr->terminal_rsp_data.get_inkey.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
 
                        if (q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_inkey.inkey_type == INKEY_TYPE_YES_NO_REQUESTED) {
                                tr->terminal_rsp_data.get_inkey.text.dcs.m_class = MSG_CLASS_RESERVED;
-                               tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FROMAT_8BIT_DATA;
+                               tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
                                tr->terminal_rsp_data.get_inkey.text.string_length = 1;
                                tr->terminal_rsp_data.get_inkey.text.string[0] = 0x01;
                        }
@@ -3546,7 +4811,7 @@ static gboolean _sat_manager_handle_get_inkey_confirm(struct custom_data *ctx, T
 
                                if (!q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_inkey.alphabet_set){
                                        tr->terminal_rsp_data.get_inkey.text.is_digit_only = TRUE;
-                                       tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FROMAT_8BIT_DATA;
+                                       tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
                                        tr->terminal_rsp_data.get_inkey.text.dcs.m_class = MSG_CLASS_RESERVED;
 
                                        memcpy((void*)tr->terminal_rsp_data.get_inkey.text.string, inkey_data, inkey_data_len);
@@ -3561,26 +4826,32 @@ static gboolean _sat_manager_handle_get_inkey_confirm(struct custom_data *ctx, T
                                                char tmp_str[SAT_TEXT_STRING_LEN_MAX + 1], *packed_data;
 
                                                dbg("sat gsm7 encoding");
-                                               sat_mgr_convert_utf8_to_gsm((unsigned char*) tmp_str, &tmp_len, (unsigned char*)inkey_data, inkey_data_len);
+                                               tcore_util_convert_utf8_to_gsm((unsigned char*) tmp_str, &tmp_len, (unsigned char*)inkey_data, inkey_data_len);
                                                packed_data = (char*) tcore_util_pack_gsm7bit((const unsigned char *)tmp_str, tmp_len);
 
-                                               tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FROMAT_8BIT_DATA;
-                                               tr->terminal_rsp_data.get_inkey.text.string_length = strlen(packed_data);
-                                               memcpy((void*) tr->terminal_rsp_data.get_inkey.text.string, packed_data, strlen(packed_data));
+                                               if(packed_data){
+                                                       tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
+                                                       tr->terminal_rsp_data.get_inkey.text.string_length = strlen(packed_data);
+                                                       memcpy((void*) tr->terminal_rsp_data.get_inkey.text.string, packed_data, strlen(packed_data));
 
-                                               if (packed_data) g_free(packed_data);
+                                                       g_free(packed_data);
+                                               }
                                        }
                                        else if(q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_inkey.alphabet_type == INPUT_ALPHABET_TYPE_UCS2 )
                                        {
+                                               char *tmp = NULL;
                                                dbg("UCS2 DATA");
 
-                                               tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FROMAT_UCS2;
-                                               sat_mgr_convert_utf8_to_ucs2((unsigned char*)tr->terminal_rsp_data.get_inkey.text.string,
+                                               tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_UCS2;
+                                               tcore_util_convert_utf8_to_ucs2(&tmp,
                                                                &tr->terminal_rsp_data.get_inkey.text.string_length, (unsigned char*)inkey_data, inkey_data_len);
+
+                                               memcpy(tr->terminal_rsp_data.get_inkey.text.string, tmp, tr->terminal_rsp_data.get_inkey.text.string_length);
+                                               g_free(tmp);
                                        }
                                        else
                                        {
-                                               tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FROMAT_RESERVED;
+                                               tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_RESERVED;
                                                dbg("[SAT] invalid DCS[%d]",tr->terminal_rsp_data.get_inkey.text.dcs.a_format);
                                        }
                                }
@@ -3598,7 +4869,7 @@ static gboolean _sat_manager_handle_get_inkey_confirm(struct custom_data *ctx, T
                        if (q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_inkey.inkey_type == INKEY_TYPE_YES_NO_REQUESTED) {
                                tr->terminal_rsp_data.get_inkey.result_type = RESULT_SUCCESS;
                                tr->terminal_rsp_data.get_inkey.text.dcs.m_class = MSG_CLASS_RESERVED;
-                               tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FROMAT_8BIT_DATA;
+                               tr->terminal_rsp_data.get_inkey.text.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
                                tr->terminal_rsp_data.get_inkey.text.string_length = 1;
                                tr->terminal_rsp_data.get_inkey.text.string[0] = 0x00;
                        }
@@ -3606,10 +4877,6 @@ static gboolean _sat_manager_handle_get_inkey_confirm(struct custom_data *ctx, T
 
                case USER_CONFIRM_TIMEOUT:
                        tr->terminal_rsp_data.get_inkey.result_type = RESULT_NO_RESPONSE_FROM_USER;
-                       if (q_data.cmd_data.getInkeyInd.duration.time_interval > 0){
-                               tr->terminal_rsp_data.get_inkey.duration.time_interval = q_data.cmd_data.getInkeyInd.duration.time_interval;
-                               tr->terminal_rsp_data.get_inkey.duration.time_unit = q_data.cmd_data.getInkeyInd.duration.time_unit;
-                       }
                        break;
 
                case USER_CONFIRM_END:
@@ -3628,6 +4895,8 @@ static gboolean _sat_manager_handle_get_inkey_confirm(struct custom_data *ctx, T
                result = FALSE;
        }
 
+       g_free(tr);
+
        return result;
 }
 
@@ -3641,24 +4910,21 @@ static gboolean _sat_manager_handle_get_input_confirm(struct custom_data *ctx, T
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
        memset(input_data, 0, SAT_TEXT_STRING_LEN_MAX);
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
                dbg("[SAT] command dequeue failed. didn't find in command Q!!");
-               g_free(tr);
                return result;
        }
 
        if (!plg){
                dbg("there is no valid plugin at this point");
-               g_free(tr);
                return result;
        }
 
        if(addtional_data){
-               int index = 0;
+               int local_index = 0;
                guchar data;
                GVariantIter *iter = NULL;
                GVariant *inner_gv = NULL;
@@ -3668,15 +4934,19 @@ static gboolean _sat_manager_handle_get_input_confirm(struct custom_data *ctx, T
 
                g_variant_get(inner_gv, "ay", &iter);
                while( g_variant_iter_loop (iter, "y", &data)){
-                       dbg("index(%d) data(%d)", index, data);
-                       input_data[index] = data;
-                       index++;
+                       dbg("index(%d) data(%d)", local_index, data);
+                       input_data[local_index] = data;
+                       local_index++;
                }
                g_variant_iter_free(iter);
                g_variant_unref(inner_gv);
-               input_data_len = index;
+               input_data_len = local_index;
        }
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
+
        tr->cmd_number = q_data.cmd_data.getInputInd.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.getInputInd.command_detail.cmd_type;
        memcpy((void*)&tr->terminal_rsp_data.get_input.command_detail, &q_data.cmd_data.getInputInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
@@ -3692,27 +4962,32 @@ static gboolean _sat_manager_handle_get_input_confirm(struct custom_data *ctx, T
                                tr->terminal_rsp_data.get_input.text.is_digit_only = TRUE;
                        }
 
-                       if (q_data.cmd_data.getInputInd.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
+                       if(q_data.cmd_data.getInputInd.text_attribute.b_txt_attr)
+                               tr->terminal_rsp_data.get_input.result_type = RESULT_SUCCESS_WITH_PARTIAL_COMPREHENSION;
+
+                       if (q_data.cmd_data.getInputInd.icon_id.is_exist)
                                tr->terminal_rsp_data.get_input.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
 
                        if(!q_data.cmd_data.getInputInd.command_detail.cmd_qualifier.get_input.user_input_unpacked_format){
                                dbg("[SAT] packing to SMS7 default");
 
                                tr->terminal_rsp_data.get_input.text.string_length = 0;
-                               tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FROMAT_SMS_DEFAULT;
+                               tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FORMAT_SMS_DEFAULT;
 
                                if (input_data_len > 0){
                                        int tmp_len;
                                        char tmp_str[SAT_TEXT_STRING_LEN_MAX + 1], *packed_data;
 
                                        dbg("sat gsm7 encoding");
-                                       sat_mgr_convert_utf8_to_gsm((unsigned char*)tmp_str, &tmp_len, (unsigned char*)input_data, input_data_len);
+                                       tcore_util_convert_utf8_to_gsm((unsigned char*)tmp_str, &tmp_len, (unsigned char*)input_data, input_data_len);
                                        packed_data = (char*) tcore_util_pack_gsm7bit((const unsigned char *)tmp_str, tmp_len);
 
-                                       memcpy((void*)tr->terminal_rsp_data.get_input.text.string, packed_data, strlen(packed_data));
-                                       tr->terminal_rsp_data.get_input.text.string_length = strlen(packed_data);
+                                       if(packed_data){
+                                               memcpy((void*)tr->terminal_rsp_data.get_input.text.string, packed_data, strlen(packed_data));
+                                               tr->terminal_rsp_data.get_input.text.string_length = strlen(packed_data);
 
-                                       if (packed_data) g_free(packed_data);
+                                               g_free(packed_data);
+                                       }
                                }
 
                        }
@@ -3722,20 +4997,22 @@ static gboolean _sat_manager_handle_get_input_confirm(struct custom_data *ctx, T
 
                                if(q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_input.alphabet_type == INPUT_ALPHABET_TYPE_SMS_DEFAULT){
 
-                                       tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FROMAT_8BIT_DATA;
-                                       sat_mgr_convert_utf8_to_gsm((unsigned char*)tr->terminal_rsp_data.get_input.text.string,
+                                       tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FORMAT_8BIT_DATA;
+                                       tcore_util_convert_utf8_to_gsm((unsigned char*)tr->terminal_rsp_data.get_input.text.string,
                                                        &tr->terminal_rsp_data.get_input.text.string_length, (unsigned char*)input_data, input_data_len);
 
                                }
                                else if(q_data.cmd_data.getInkeyInd.command_detail.cmd_qualifier.get_input.alphabet_type == INPUT_ALPHABET_TYPE_UCS2 ){
+                                       char *tmp = NULL;
 
-                                       tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FROMAT_UCS2;
-                                       sat_mgr_convert_utf8_to_ucs2((unsigned char*)tr->terminal_rsp_data.get_input.text.string,
-                                                       &tr->terminal_rsp_data.get_input.text.string_length, (unsigned char*)input_data, input_data_len);
+                                       tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FORMAT_UCS2;
+                                       tcore_util_convert_utf8_to_ucs2(&tmp, &tr->terminal_rsp_data.get_input.text.string_length, (unsigned char*)input_data, input_data_len);
 
+                                       memcpy(tr->terminal_rsp_data.get_input.text.string, tmp, tr->terminal_rsp_data.get_input.text.string_length);
+                                       g_free(tmp);
                                }
                                else{
-                                       tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FROMAT_RESERVED;
+                                       tr->terminal_rsp_data.get_input.text.dcs.a_format = ALPHABET_FORMAT_RESERVED;
                                        dbg("[SAT] invalid DCS[%d]",tr->terminal_rsp_data.get_input.text.dcs.a_format);
                                }
                        } break;
@@ -3767,6 +5044,8 @@ static gboolean _sat_manager_handle_get_input_confirm(struct custom_data *ctx, T
                result = FALSE;
        }
 
+       g_free(tr);
+
        return result;
 }
 
@@ -3780,24 +5059,21 @@ static gboolean _sat_manager_handle_setup_call_confirm(struct custom_data *ctx,
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
        memset(input_data, 0, SAT_TEXT_STRING_LEN_MAX);
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
                dbg("[SAT] command dequeue failed. didn't find in command Q!!");
-               g_free(tr);
                return result;
        }
 
        if (!plg){
                dbg("there is no valid plugin at this point");
-               g_free(tr);
                return result;
        }
 
-       if(addtional_data){
-               int index = 0;
+       if (addtional_data) {
+               int local_index = 0;
                guchar data;
                GVariantIter *iter = NULL;
                GVariant *inner_gv = NULL;
@@ -3807,19 +5083,24 @@ static gboolean _sat_manager_handle_setup_call_confirm(struct custom_data *ctx,
 
                g_variant_get(inner_gv, "ay", &iter);
                while( g_variant_iter_loop (iter, "y", &data)){
-                       dbg("index(%d) data(%d)", index, data);
-                       input_data[index] = data;
-                       index++;
+                       dbg("index(%d) data(%d)", local_index, data);
+                       input_data[local_index] = data;
+                       local_index++;
                }
                g_variant_iter_free(iter);
                g_variant_unref(inner_gv);
-               input_data_len = index;
+               input_data_len = local_index;
+               dbg("input_data_len=[%d]", input_data_len);
        }
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
+
        tr->cmd_number = q_data.cmd_data.setup_call.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.setup_call.command_detail.cmd_type;
        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));
-       tr->terminal_rsp_data.setup_call.device_id.src = q_data.cmd_data.setup_call.device_id.dest;
+       tr->terminal_rsp_data.setup_call.device_id.src = DEVICE_ID_ME;
        tr->terminal_rsp_data.setup_call.device_id.dest = q_data.cmd_data.setup_call.device_id.src;
 
        switch(confirm_type){
@@ -3828,45 +5109,70 @@ static gboolean _sat_manager_handle_setup_call_confirm(struct custom_data *ctx,
                        TelephonySAT *sat;
                        TelephonyObjectSkeleton *object;
 
-                       gchar *plg_name = NULL;
+                       const gchar *cp_name;
                        GVariant *setup_call = NULL;
 
-                       gint command_id, call_type, text_len, duration;
-                       gchar *text, *call_number;
+                       gint command_id, call_type, confirmed_text_len, text_len, duration;
+                       gchar *confirmed_text = NULL, *text = NULL, *call_number = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
                        GVariant *icon_id;
-
-                       plg_name = tcore_plugin_ref_plugin_name(plg);
-                       if (plg_name) {
-                               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
+#endif
+                       enum dbus_tapi_sim_slot_id slot_id;
+                       gboolean call_app_rv;
+
+                       cp_name = tcore_server_get_cp_name_by_plugin(plg);
+                       if (cp_name == NULL) {
+                               err("CP name is NULL");
+                               goto Exit;
                        }
-                       else {
-                               path = g_strdup_printf("%s", MY_DBUS_PATH);
-                       }
-                       dbg("path = [%s]", path);
 
+                       dbg("CP Name: [%s]", cp_name);
+                       path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
+
+                       /* Look-up Hash table for Object */
                        object = g_hash_table_lookup(ctx->objects, path);
+                       dbg("Path: [%s] Interface object: [%p]", path, object);
+                       g_free(path);
+                       if (object == NULL) {
+                               err("Object is NOT defined!!!");
+                               goto Exit;
+                       }
+
                        sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
 
-                       setup_call = sat_manager_setup_call_noti(ctx, plg_name, &q_data.cmd_data.setup_call);
+                       setup_call = sat_manager_setup_call_noti(ctx, cp_name, &q_data.cmd_data.setup_call);
 
                        dbg("setup call type_format(%s)", g_variant_get_type_string(setup_call));
-                       g_variant_get(setup_call, "(isi@visi)", &command_id, &text, &text_len, &icon_id, &call_type, &call_number, &duration);
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                       g_variant_get(setup_call, "(isisi@visi)", &command_id, &confirmed_text, &confirmed_text_len, &text, &text_len, &icon_id, &call_type, &call_number, &duration);
 
-                       telephony_sat_emit_setup_call(sat, command_id, text, text_len, call_type,
+                       telephony_sat_emit_setup_call(sat, command_id, confirmed_text, confirmed_text_len, text, text_len, icon_id, call_type,
                                        call_number, duration);
+#else
+                       g_variant_get(setup_call, "(isisiisi)", &command_id, &confirmed_text, &confirmed_text_len, &text, &text_len, &call_type, &call_number, &duration);
 
-                       sat_ui_support_launch_call_application(q_data.cmd_data.setup_call.command_detail.cmd_type, setup_call);
-                       return TRUE;
-               }break;
+                       telephony_sat_emit_setup_call(sat, command_id, confirmed_text, confirmed_text_len, text, text_len, call_type,
+                                       call_number, duration);
+#endif
+                       g_free(confirmed_text);
+                       g_free(text);
+                       g_free(call_number);
+
+                       slot_id = get_sim_slot_id_by_cp_name((char *)tcore_server_get_cp_name_by_plugin(plg));
+                       dbg("slot_id: [%d]", slot_id);
+
+                       call_app_rv = sat_ui_support_launch_call_application(q_data.cmd_data.setup_call.command_detail.cmd_type, setup_call, slot_id);
+                       free (tr);
+
+                       return call_app_rv;
+               }
 
                case USER_CONFIRM_NO_OR_CANCEL:{
-                       tr->terminal_rsp_data.setup_call.result_type = RESULT_USER_DID_NOT_ACCEPT_CALL_SETUP_REQ;
-                       tr->terminal_rsp_data.setup_call.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
-                       tr->terminal_rsp_data.setup_call.cc_problem_type = CC_PROBLEM_NO_SPECIFIC_CAUSE;
+                       tr->terminal_rsp_data.setup_call.result_type = RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER;
                }break;
 
                case USER_CONFIRM_END:{
-                       tr->terminal_rsp_data.setup_call.result_type = RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER;
+                       tr->terminal_rsp_data.setup_call.result_type = RESULT_USER_DID_NOT_ACCEPT_CALL_SETUP_REQ;
                }break;
 
                case USER_CONFIRM_HELP_INFO:
@@ -3881,7 +5187,8 @@ static gboolean _sat_manager_handle_setup_call_confirm(struct custom_data *ctx,
                dbg("fail to send terminal response");
                result = FALSE;
        }
-
+Exit:
+       free (tr);
        return result;
 }
 
@@ -3893,25 +5200,26 @@ static gboolean _sat_manager_handle_send_dtmf_confirm(struct custom_data *ctx, T
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
                dbg("[SAT] command dequeue failed. didn't find in command Q!!");
-               g_free(tr);
                return result;
        }
 
        if (!plg){
                dbg("there is no valid plugin at this point");
-               g_free(tr);
                return result;
        }
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
+
        tr->cmd_number = q_data.cmd_data.send_dtmf.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.send_dtmf.command_detail.cmd_type;
        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));
-       tr->terminal_rsp_data.send_dtmf.device_id.src = q_data.cmd_data.send_dtmf.device_id.dest;
+       tr->terminal_rsp_data.send_dtmf.device_id.src = DEVICE_ID_ME;
        tr->terminal_rsp_data.send_dtmf.device_id.dest = q_data.cmd_data.send_dtmf.device_id.src;
 
        dbg("confirm_type[%d]", confirm_type);
@@ -3933,6 +5241,7 @@ static gboolean _sat_manager_handle_send_dtmf_confirm(struct custom_data *ctx, T
                dbg("fail to send terminal response");
                result = FALSE;
        }
+       g_free(tr);
 
        return result;
 }
@@ -3945,21 +5254,22 @@ static gboolean _sat_manager_handle_launch_browser_confirm(struct custom_data *c
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
                dbg("[SAT] command dequeue failed. didn't find in command Q!!");
-               g_free(tr);
                return result;
        }
 
        if (!plg){
                dbg("there is no valid plugin at this point");
-               g_free(tr);
                return result;
        }
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
+
        tr->cmd_number = q_data.cmd_data.launch_browser.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.launch_browser.command_detail.cmd_type;
        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));
@@ -3974,44 +5284,69 @@ static gboolean _sat_manager_handle_launch_browser_confirm(struct custom_data *c
                        TelephonySAT *sat;
                        TelephonyObjectSkeleton *object;
 
-                       gchar *plg_name = NULL;
+                       const gchar *cp_name;
                        GVariant *launch_browser = NULL;
 
                        gint command_id = 0;
-                       gint browser_id = 0;
+                       gint browser_launch_type = 0, browser_id = 0;
                        gint url_len = 0, text_len = 0, gateway_proxy_len =0;
                        gchar *url = NULL;
                        gchar *text = NULL;
                        gchar *gateway_proxy = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
                        GVariant *icon_id = NULL;
+#endif
+                       enum dbus_tapi_sim_slot_id slot_id;
 
-                       plg_name = tcore_plugin_ref_plugin_name(plg);
-                       if (plg_name) {
-                               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
-                       } else {
-                               path = g_strdup_printf("%s", MY_DBUS_PATH);
+                       cp_name = tcore_server_get_cp_name_by_plugin(plg);
+                       if (cp_name == NULL) {
+                               err("CP name is NULL");
+                               goto Exit;
                        }
-                       dbg("path = [%s]", path);
 
+                       dbg("CP Name: [%s]", cp_name);
+                       path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
+
+                       /* Look-up Hash table for Object */
                        object = g_hash_table_lookup(ctx->objects, path);
+                       dbg("Path: [%s] Interface object: [%p]", path, object);
+                       g_free(path);
+                       if (object == NULL) {
+                               err("Object is NOT defined!!!");
+                               goto Exit;
+                       }
                        sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
 
-                       launch_browser = sat_manager_launch_browser_noti(ctx, plg_name, &q_data.cmd_data.launch_browser);
+                       launch_browser = sat_manager_launch_browser_noti(ctx, cp_name, &q_data.cmd_data.launch_browser);
 
                        dbg("launch_browser type_format(%s)", g_variant_get_type_string(launch_browser));
-                       g_variant_get(launch_browser, "(iisisisi@v)", &command_id, &browser_id, &url, &url_len, &gateway_proxy, &gateway_proxy_len, &text, &text_len, &icon_id);
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                       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);
+
+                       telephony_sat_emit_launch_browser(sat, command_id, browser_launch_type, browser_id, url, url_len, gateway_proxy, gateway_proxy_len, text, text_len, icon_id);
+#else
+                       g_variant_get(launch_browser, "(iiisisisi)", &command_id, &browser_launch_type, &browser_id, &url, &url_len, &gateway_proxy, &gateway_proxy_len, &text, &text_len);
 
-                       telephony_sat_emit_launch_browser(sat, command_id, browser_id, url, url_len, gateway_proxy, gateway_proxy_len, text, text_len);
+                       telephony_sat_emit_launch_browser(sat, command_id, browser_launch_type, browser_id, url, url_len, gateway_proxy, gateway_proxy_len, text, text_len);
+#endif
+                       g_free(url);
+                       g_free(text);
+                       g_free(gateway_proxy);
 
-                       sat_ui_support_launch_browser_application(q_data.cmd_data.launch_browser.command_detail.cmd_type, launch_browser);
+                       slot_id = get_sim_slot_id_by_cp_name((char*)tcore_server_get_cp_name_by_plugin(plg));
+                       dbg("slot_id: [%d]", slot_id);
+
+                       sat_ui_support_launch_browser_application(q_data.cmd_data.launch_browser.command_detail.cmd_type, launch_browser, slot_id);
+
+                       g_free(tr);
                        return TRUE;
                }break;
 
                case USER_CONFIRM_NO_OR_CANCEL:
-               case USER_CONFIRM_END:
                        tr->terminal_rsp_data.launch_browser.result_type = RESULT_BACKWARD_MOVE_BY_USER;
-                       tr->terminal_rsp_data.launch_browser.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
-                       tr->terminal_rsp_data.launch_browser.browser_problem_type = BROWSER_PROBLEM_NO_SPECIFIC_CAUSE;
+                       break;
+               case USER_CONFIRM_END:
+                       tr->terminal_rsp_data.launch_browser.result_type = RESULT_PROACTIVE_SESSION_TERMINATED_BY_USER;
                        break;
 
                default:
@@ -4025,10 +5360,11 @@ static gboolean _sat_manager_handle_launch_browser_confirm(struct custom_data *c
                dbg("fail to send terminal response");
                result = FALSE;
        }
-
+Exit:
+       g_free(tr);
        return result;
 }
-
+#if !defined(TIZEN_PLATFORM_USE_QCOM_QMI)
 static gboolean _sat_manager_handle_open_channel_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data)
 {
        TReturn rv = TCORE_RETURN_FAILURE;
@@ -4037,21 +5373,22 @@ static gboolean _sat_manager_handle_open_channel_confirm(struct custom_data *ctx
        struct treq_sat_terminal_rsp_data *tr;
        struct sat_manager_queue_data q_data;
 
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
        memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
 
        if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
                dbg("[SAT] command dequeue failed. didn't find in command Q!!");
-               g_free(tr);
                return result;
        }
 
        if (!plg){
                dbg("there is no valid plugin at this point");
-               g_free(tr);
                return result;
        }
 
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
+
        tr->cmd_number = q_data.cmd_data.open_channel.command_detail.cmd_num;
        tr->cmd_type = q_data.cmd_data.open_channel.command_detail.cmd_type;
        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));
@@ -4063,41 +5400,68 @@ static gboolean _sat_manager_handle_open_channel_confirm(struct custom_data *ctx
        switch(confirm_type){
                case USER_CONFIRM_YES:{
                        char *path;
-                       TelephonySAT *sat;
                        TelephonyObjectSkeleton *object;
 
-                       gchar *plg_name = NULL;
+                       const gchar *cp_name;
 
                        GVariant *open_channel = NULL;
 
                        gint command_id, bearer_type, protocol_type, dest_addr_type;
                        gboolean immediate_link, auto_reconnection, bg_mode;
                        gint text_len, buffer_size, port_number;
-                       gchar *text, *dest_address;
+                       gchar *text = NULL, *dest_address = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
                        GVariant *icon_id;
+#endif
                        GVariant *bearer_param;
                        GVariant *bearer_detail;
 
                        //emit send_dtmf signal
-                       plg_name = tcore_plugin_ref_plugin_name(plg);
-                       if (plg_name) {
-                               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
-                       } else {
-                               path = g_strdup_printf("%s", MY_DBUS_PATH);
+                       cp_name = tcore_server_get_cp_name_by_plugin(plg);
+                       if (cp_name == NULL) {
+                               err("CP name is NULL");
+                               goto Exit;
                        }
-                       dbg("path = [%s]", path);
 
+                       dbg("CP Name: [%s]", cp_name);
+                       path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
+
+                       /* Look-up Hash table for Object */
                        object = g_hash_table_lookup(ctx->objects, path);
-                       sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
+                       dbg("Path: [%s] Interface object: [%p]", path, object);
+                       g_free(path);
+                       if (object == NULL) {
+                               err("Object is NOT defined!!!");
+                               goto Exit;
+                       }
 
-                       open_channel = sat_manager_open_channel_noti(ctx, plg_name, &q_data.cmd_data.open_channel);
+                       open_channel = sat_manager_open_channel_noti(ctx, cp_name, &q_data.cmd_data.open_channel);
 
                        dbg("open channel type_format(%s)", g_variant_get_type_string(open_channel));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
                        g_variant_get(open_channel,"(isi@vbbbi@viiiis@v)", &command_id, &text, &text_len, &icon_id, &immediate_link, &auto_reconnection, &bg_mode,
                                        &bearer_type, &bearer_param, &buffer_size, &protocol_type, &port_number, &dest_addr_type, &dest_address, &bearer_detail);
+#else
+                       g_variant_get(open_channel,"(isibbbi@viiiis@v)", &command_id, &text, &text_len, &immediate_link, &auto_reconnection, &bg_mode,
+                                       &bearer_type, &bearer_param, &buffer_size, &protocol_type, &port_number, &dest_addr_type, &dest_address, &bearer_detail);
+#endif
+                       /*telephony_sat_emit_open_channel(sat, command_id, text, text_len, immediate_link, auto_reconnection, bg_mode,
+                                       bearer_type, bearer_param, buffer_size, protocol_type, port_number, dest_addr_type, dest_address, bearer_detail);*/
+
+                       g_free(text);
+                       g_free(dest_address);
+                       //BIP Manager
+                       {
+                               GDBusConnection *conn = NULL;
+                               const gchar *g_path = NULL;
+
+                               conn = g_dbus_object_manager_server_get_connection(ctx->manager);
+                               g_path = g_dbus_object_get_object_path(G_DBUS_OBJECT(object));
+
+                               sat_ui_support_exec_bip(conn, g_path, SAT_PROATV_CMD_OPEN_CHANNEL, open_channel);
+                       }
 
-                       telephony_sat_emit_open_channel(sat, command_id, text, text_len, immediate_link, auto_reconnection, bg_mode,
-                                       bearer_type, bearer_param, buffer_size, protocol_type, port_number, dest_addr_type, dest_address, bearer_detail);
+                       g_free(tr);
 
                        return TRUE;
                }break;
@@ -4120,10 +5484,57 @@ static gboolean _sat_manager_handle_open_channel_confirm(struct custom_data *ctx
                dbg("fail to send terminal response");
                result = FALSE;
        }
-
+Exit:
+       g_free(tr);
        return result;
 }
+#else
+static gboolean _sat_manager_handle_open_channel_confirm(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint confirm_type, GVariant *addtional_data)
+{
+       TReturn rv = TCORE_RETURN_FAILURE;
+       gboolean result = FALSE;
 
+       struct treq_sat_user_confirmation_data *conf_data;
+       struct sat_manager_queue_data q_data;
+
+       memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
+
+       if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
+               dbg("[SAT] command dequeue failed. didn't find in command Q!!");
+               return result;
+       }
+
+       if (!plg){
+               dbg("there is no valid plugin at this point");
+               return result;
+       }
+
+       conf_data = (struct treq_sat_user_confirmation_data *)calloc(1, sizeof(struct treq_sat_user_confirmation_data));
+       if (!conf_data)
+               return result;
+
+       dbg("confirm_type[%d]", confirm_type);
+
+       switch(confirm_type){
+               case USER_CONFIRM_YES:
+               case USER_CONFIRM_NO_OR_CANCEL:
+               case USER_CONFIRM_END:
+                       conf_data->user_conf = confirm_type;
+                       break;
+               default:
+                       dbg("Not handled confirm type!");
+                       break;
+       }
+       result = TRUE;
+       rv = sat_manager_send_user_confirmation(ctx->comm, plg, conf_data);
+       if(rv != TCORE_RETURN_SUCCESS){
+               dbg("fail to send user confirmation message");
+               result = FALSE;
+       }
+       g_free(conf_data);
+       return result;
+}
+#endif
 gboolean sat_manager_handle_user_confirm(struct custom_data *ctx, TcorePlugin *plg, GVariant *user_confirm_data)
 {
        gboolean rv = FALSE;
@@ -4186,112 +5597,222 @@ static gboolean _sat_manager_handle_play_tone_ui_display_status(struct custom_da
        TelephonySAT *sat;
        TelephonyObjectSkeleton *object;
 
-       gchar *plg_name = NULL;
+       const gchar *cp_name;
        GVariant *play_tone = NULL;
 
 
        gint command_id, tone_type, duration;
        gint text_len;
        gchar* text;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id;
-
+#endif
        if(!display_status){
                struct treq_sat_terminal_rsp_data *tr = NULL;
                dbg("[SAT] fail to show ui display for play tone");
 
                tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+               if (!tr)
+                       return FALSE;
 
                tr->cmd_number = q_data->cmd_data.play_tone.command_detail.cmd_num;
                tr->cmd_type = q_data->cmd_data.play_tone.command_detail.cmd_type;
                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));
 
-               tr->terminal_rsp_data.play_tone.device_id.src = q_data->cmd_data.play_tone.device_id.dest;
+               tr->terminal_rsp_data.play_tone.device_id.src = DEVICE_ID_ME;
                tr->terminal_rsp_data.play_tone.device_id.dest = q_data->cmd_data.play_tone.device_id.src;
                tr->terminal_rsp_data.play_tone.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
 
                sat_manager_send_terminal_response(ctx->comm, plg, tr);
+               free (tr);
+
                return TRUE;
        }
 
        //emit play tone signal
-       plg_name = tcore_plugin_ref_plugin_name(plg);
-       if (plg_name) {
-               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
-       }
-       else {
-               path = g_strdup_printf("%s", MY_DBUS_PATH);
+       cp_name = tcore_server_get_cp_name_by_plugin(plg);
+       if (cp_name == NULL) {
+               err("CP name is NULL");
+               return FALSE;
        }
-       dbg("path = [%s]", path);
 
+       dbg("CP Name: [%s]", cp_name);
+       path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
+
+       /* Look-up Hash table for Object */
        object = g_hash_table_lookup(ctx->objects, path);
+       dbg("Path: [%s] Interface object: [%p]", path, object);
+       g_free(path);
+       if (object == NULL) {
+               err("Object is NOT defined!!!");
+               return FALSE;
+       }
        sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
 
-       play_tone = sat_manager_play_tone_noti(ctx, plg_name, &q_data->cmd_data.play_tone);
+       play_tone = sat_manager_play_tone_noti(ctx, cp_name, &q_data->cmd_data.play_tone);
 
        dbg("play tone type_format(%s)", g_variant_get_type_string(play_tone));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        g_variant_get(play_tone, "(isi@vii)", &command_id, &text, &text_len, &icon_id, &tone_type, &duration);
 
+       telephony_sat_emit_play_tone(sat, command_id, text, text_len, icon_id, tone_type, duration);
+#else
+       g_variant_get(play_tone, "(isiii)", &command_id, &text, &text_len, &tone_type, &duration);
+
        telephony_sat_emit_play_tone(sat, command_id, text, text_len, tone_type, duration);
+#endif
+       g_free(text);
 
        return TRUE;
 }
 
+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)
+{
+       TReturn rv = TCORE_RETURN_FAILURE;
+       gboolean result = FALSE;
+
+       struct treq_sat_terminal_rsp_data *tr;
+
+       if (!plg){
+               dbg("there is no valid plugin at this point");
+               return result;
+       }
+
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return result;
+
+       tr->cmd_number = q_data->cmd_data.idle_mode.command_detail.cmd_num;
+       tr->cmd_type = q_data->cmd_data.idle_mode.command_detail.cmd_type;
+       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));
+       tr->terminal_rsp_data.setup_idle_mode_text.device_id.src = q_data->cmd_data.idle_mode.device_id.dest;
+       tr->terminal_rsp_data.setup_idle_mode_text.device_id.dest = q_data->cmd_data.idle_mode.device_id.src;
+
+       tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS;
+       if (q_data->cmd_data.idle_mode.icon_id.is_exist)
+               tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
+
+       //fail to display text
+       if(!display_status){
+               dbg("[SAT] fail to show ui display for setup_idle_mode_text");
+               tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+       }
+
+       result = TRUE;
+       rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
+       if(rv != TCORE_RETURN_SUCCESS){
+               dbg("fail to send terminal response");
+               result = FALSE;
+       }
+       g_free(tr);
+
+       return result;
+}
+
+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)
+{
+       struct treq_sat_terminal_rsp_data tr;
+
+       memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
+
+       tr.cmd_number = q_data->cmd_data.refresh.command_detail.cmd_num;
+       tr.cmd_type = q_data->cmd_data.refresh.command_detail.cmd_type;
+       memcpy((void*)&tr.terminal_rsp_data.refresh.command_detail, &q_data->cmd_data.refresh.command_detail, sizeof(struct tel_sat_cmd_detail_info));
+       tr.terminal_rsp_data.refresh.device_id.src = q_data->cmd_data.refresh.device_id.dest;
+       tr.terminal_rsp_data.refresh.device_id.dest = q_data->cmd_data.refresh.device_id.src;
+
+       if(!display_status){
+               dbg("fail to show ui for refresh");
+               tr.terminal_rsp_data.refresh.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
+       }
+       else{
+               dbg("success to show ui for refresh");
+               tr.terminal_rsp_data.refresh.result_type = RESULT_SUCCESS;
+               tr.terminal_rsp_data.refresh.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
+       }
+
+       dbg("send refresh tr");
+       sat_manager_send_terminal_response(ctx->comm, plg, &tr);
+       return TRUE;
+}
+
+
+#if !defined(TIZEN_PLATFORM_USE_QCOM_QMI)
 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)
 {
        char *path;
        TelephonySAT *sat;
        TelephonyObjectSkeleton *object;
 
-       gchar *plg_name = NULL;
+       const char *cp_name;
        GVariant *send_sms = NULL;
 
-
        gint command_id, ton, npi, tpdu_type;
        gboolean b_packing_required;
        gint text_len, number_len, tpdu_data_len;
        gchar* text, *dialling_number;
-       GVariant *tpdu_data, *icon_id;
+       GVariant *tpdu_data;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       GVariant *icon_id;
+#endif
 
        if(!display_status){
                struct treq_sat_terminal_rsp_data *tr = NULL;
                dbg("[SAT] fail to show ui display for send sms");
 
                tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+               if (!tr)
+                       return FALSE;
 
                tr->cmd_number = q_data->cmd_data.sendSMSInd.command_detail.cmd_num;
                tr->cmd_type = q_data->cmd_data.sendSMSInd.command_detail.cmd_type;
                memcpy((void*)&tr->terminal_rsp_data.send_sms.command_detail, &q_data->cmd_data.sendSMSInd.command_detail, sizeof(struct tel_sat_cmd_detail_info));
 
-               tr->terminal_rsp_data.send_sms.device_id.src = q_data->cmd_data.sendSMSInd.device_id.dest;
+               tr->terminal_rsp_data.send_sms.device_id.src = DEVICE_ID_ME;
                tr->terminal_rsp_data.send_sms.device_id.dest = q_data->cmd_data.sendSMSInd.device_id.src;
                tr->terminal_rsp_data.send_sms.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
 
                sat_manager_send_terminal_response(ctx->comm, plg, tr);
+               free (tr);
+
                return TRUE;
        }
 
        //emit send sms signal
-       plg_name = tcore_plugin_ref_plugin_name(plg);
-       if (plg_name) {
-               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
-       }
-       else {
-               path = g_strdup_printf("%s", MY_DBUS_PATH);
+       cp_name = tcore_server_get_cp_name_by_plugin(plg);
+       if (cp_name == NULL) {
+               err("CP name is NULL");
+               return FALSE;
        }
-       dbg("path = [%s]", path);
 
+       dbg("CP Name: [%s]", cp_name);
+       path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
+
+       /* Look-up Hash table for Object */
        object = g_hash_table_lookup(ctx->objects, path);
+       dbg("Path: [%s] Interface object: [%p]", path, object);
+       g_free(path);
+       if (object == NULL) {
+               err("Object is NOT defined!!!");
+               return FALSE;
+       }
        sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
 
-       send_sms = sat_manager_send_sms_noti(ctx, plg_name, &q_data->cmd_data.sendSMSInd);
+       send_sms = sat_manager_send_sms_noti(ctx, cp_name, &q_data->cmd_data.sendSMSInd);
 
        dbg("send sms type_format(%s)", g_variant_get_type_string(send_sms));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        g_variant_get(send_sms, "(isi@vbiisii@vi)", &command_id, &text, &text_len, &icon_id, &b_packing_required, &ton, &npi,
                        &dialling_number, &number_len, &tpdu_type, &tpdu_data, &tpdu_data_len);
-
+#else
+       g_variant_get(send_sms, "(isibiisii@vi)", &command_id, &text, &text_len, &b_packing_required, &ton, &npi,
+                       &dialling_number, &number_len, &tpdu_type, &tpdu_data, &tpdu_data_len);
+#endif
        telephony_sat_emit_send_sms(sat, command_id, text, text_len, b_packing_required,
                        ton, npi, dialling_number, number_len, tpdu_type, tpdu_data, tpdu_data_len);
 
+       g_free(text);
+       g_free(dialling_number);
        return TRUE;
 }
 
@@ -4301,53 +5822,76 @@ static gboolean _sat_manager_handle_send_ss_ui_display_status(struct custom_data
        TelephonySAT *sat;
        TelephonyObjectSkeleton *object;
 
-       gchar *plg_name = NULL;
+       const gchar *cp_name;
        GVariant *send_ss = NULL;
 
-
        gint command_id, ton, npi;
        gint text_len, ss_str_len;
-       gchar* text, *ss_string;
+       gchar* text = NULL, *ss_string = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id;
+#endif
+       enum dbus_tapi_sim_slot_id slot_id;
 
        if(!display_status){
                struct treq_sat_terminal_rsp_data *tr = NULL;
                dbg("[SAT] fail to show ui display for send ss");
 
                tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+               if (!tr)
+                       return FALSE;
 
                tr->cmd_number = q_data->cmd_data.send_ss.command_detail.cmd_num;
                tr->cmd_type = q_data->cmd_data.send_ss.command_detail.cmd_type;
                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));
 
-               tr->terminal_rsp_data.send_ss.device_id.src = q_data->cmd_data.send_ss.device_id.dest;
+               tr->terminal_rsp_data.send_ss.device_id.src = DEVICE_ID_ME;
                tr->terminal_rsp_data.send_ss.device_id.dest = q_data->cmd_data.send_ss.device_id.src;
                tr->terminal_rsp_data.send_ss.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
 
                sat_manager_send_terminal_response(ctx->comm, plg, tr);
+               free (tr);
+
                return TRUE;
        }
 
        //emit send ss signal
-       plg_name = tcore_plugin_ref_plugin_name(plg);
-       if (plg_name) {
-               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
-       }
-       else {
-               path = g_strdup_printf("%s", MY_DBUS_PATH);
+       cp_name = tcore_server_get_cp_name_by_plugin(plg);
+       if (cp_name == NULL) {
+               err("CP name is NULL");
+               return FALSE;
        }
-       dbg("path = [%s]", path);
 
+       dbg("CP Name: [%s]", cp_name);
+       path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
+
+       /* Look-up Hash table for Object */
        object = g_hash_table_lookup(ctx->objects, path);
+       dbg("Path: [%s] Interface object: [%p]", path, object);
+       g_free(path);
+       if (object == NULL) {
+               err("Object is NOT defined!!!");
+               return FALSE;
+       }
        sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
 
-       send_ss = sat_manager_send_ss_noti(ctx, plg_name, &q_data->cmd_data.send_ss);
+       send_ss = sat_manager_send_ss_noti(ctx, cp_name, &q_data->cmd_data.send_ss);
 
        dbg("send ss type_format(%s)", g_variant_get_type_string(send_ss));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        g_variant_get(send_ss, "(isi@viiis)", &command_id, &text, &text_len, &icon_id,
                        &ton, &npi, &ss_str_len, &ss_string);
-
+#else
+       g_variant_get(send_ss, "(isiiiis)", &command_id, &text, &text_len,
+                       &ton, &npi, &ss_str_len, &ss_string);
+#endif
        telephony_sat_emit_send_ss(sat, command_id, text, text_len, ton, npi, ss_string);
+       g_free(text);
+       g_free(ss_string);
+
+       slot_id = get_sim_slot_id_by_cp_name((char *)tcore_server_get_cp_name_by_plugin(plg));
+       dbg("slot_id: [%d]", slot_id);
+       sat_ui_support_launch_ciss_application(SAT_PROATV_CMD_SEND_SS, send_ss, slot_id);
 
        return TRUE;
 }
@@ -4358,175 +5902,148 @@ static gboolean _sat_manager_handle_send_ussd_ui_display_status(struct custom_da
        TelephonySAT *sat;
        TelephonyObjectSkeleton *object;
 
-       gchar *plg_name = NULL;
+       const gchar *cp_name;
        GVariant *send_ussd = NULL;
 
        gint command_id;
+       guchar dcs;
        gint text_len, ussd_str_len;
-       gchar* text, *ussd_string;
+       gchar* text = NULL, *ussd_string = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id;
+#endif
+       enum dbus_tapi_sim_slot_id slot_id;
 
        if(!display_status){
                struct treq_sat_terminal_rsp_data *tr = NULL;
                dbg("[SAT] fail to show ui display for send ussd");
 
                tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+               if (!tr)
+                       return FALSE;
 
                tr->cmd_number = q_data->cmd_data.send_ussd.command_detail.cmd_num;
                tr->cmd_type = q_data->cmd_data.send_ussd.command_detail.cmd_type;
                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));
 
-               tr->terminal_rsp_data.send_ussd.device_id.src = q_data->cmd_data.send_ussd.device_id.dest;
+               tr->terminal_rsp_data.send_ussd.device_id.src = DEVICE_ID_ME;
                tr->terminal_rsp_data.send_ussd.device_id.dest = q_data->cmd_data.send_ussd.device_id.src;
                tr->terminal_rsp_data.send_ussd.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
 
                sat_manager_send_terminal_response(ctx->comm, plg, tr);
+               g_free(tr);
+
                return TRUE;
        }
 
        //emit send ussd signal
-       plg_name = tcore_plugin_ref_plugin_name(plg);
-       if (plg_name) {
-               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
-       }
-       else {
-               path = g_strdup_printf("%s", MY_DBUS_PATH);
+       cp_name = tcore_server_get_cp_name_by_plugin(plg);
+       if (cp_name == NULL) {
+               err("CP name is NULL");
+               return FALSE;
        }
-       dbg("path = [%s]", path);
 
+       dbg("CP Name: [%s]", cp_name);
+       path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
+
+       /* Look-up Hash table for Object */
        object = g_hash_table_lookup(ctx->objects, path);
+       dbg("Path: [%s] Interface object: [%p]", path, object);
+       g_free(path);
+       if (object == NULL) {
+               err("Object is NOT defined!!!");
+               return FALSE;
+       }
        sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
 
-       send_ussd = sat_manager_send_ussd_noti(ctx, plg_name, &q_data->cmd_data.send_ussd);
+       send_ussd = sat_manager_send_ussd_noti(ctx, cp_name, &q_data->cmd_data.send_ussd);
 
        dbg("send ussd type_format(%s)", g_variant_get_type_string(send_ussd));
-       g_variant_get(send_ussd, "(isi@vis)", &command_id, &text, &text_len, &icon_id, &ussd_str_len, &ussd_string);
-
-       telephony_sat_emit_setup_ussd(sat, command_id, text, text_len, ussd_string);
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       g_variant_get(send_ussd, "(isi@vyis)", &command_id, &text, &text_len, &icon_id, &dcs, &ussd_str_len, &ussd_string);
+#else
+       g_variant_get(send_ussd, "(isiyis)", &command_id, &text, &text_len, &dcs, &ussd_str_len, &ussd_string);
+#endif
+       telephony_sat_emit_setup_ussd(sat, command_id, text, text_len, dcs, ussd_string);
+       g_free(text);
+       g_free(ussd_string);
+
+       slot_id = get_sim_slot_id_by_cp_name((char *)tcore_server_get_cp_name_by_plugin(plg));
+       dbg("slot_id: [%d]", slot_id);
+       sat_ui_support_launch_ciss_application(SAT_PROATV_CMD_SEND_USSD, send_ussd,slot_id);
 
        return TRUE;
 }
 
-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)
-{
-       TReturn rv = TCORE_RETURN_FAILURE;
-       gboolean result = FALSE;
-
-       struct treq_sat_terminal_rsp_data *tr;
-
-       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
-
-       if (!plg){
-               dbg("there is no valid plugin at this point");
-               return result;
-       }
-
-       tr->cmd_number = q_data->cmd_data.idle_mode.command_detail.cmd_num;
-       tr->cmd_type = q_data->cmd_data.idle_mode.command_detail.cmd_type;
-       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));
-       tr->terminal_rsp_data.setup_idle_mode_text.device_id.src = q_data->cmd_data.idle_mode.device_id.dest;
-       tr->terminal_rsp_data.setup_idle_mode_text.device_id.dest = q_data->cmd_data.idle_mode.device_id.src;
-
-       tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS;
-               if (q_data->cmd_data.idle_mode.icon_id.icon_info.ics == IMAGE_CODING_SCHEME_COLOUR)
-                               tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_SUCCESS_BUT_REQUESTED_ICON_NOT_DISPLAYED;
-
-       //fail to display text
-       if(!display_status){
-               dbg("[SAT] fail to show ui display for setup_idle_mode_text");
-               tr->terminal_rsp_data.setup_idle_mode_text.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
-       }
-
-       result = TRUE;
-       rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
-       if(rv != TCORE_RETURN_SUCCESS){
-               dbg("fail to send terminal response");
-               result = FALSE;
-       }
-
-       sat_ui_support_terminate_sat_ui();
-
-       return result;
-}
-
-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)
-{
-       struct treq_sat_terminal_rsp_data tr;
-
-       memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
-
-       tr.cmd_number = q_data->cmd_data.refresh.command_detail.cmd_num;
-       tr.cmd_type = q_data->cmd_data.refresh.command_detail.cmd_type;
-       memcpy((void*)&tr.terminal_rsp_data.refresh.command_detail, &q_data->cmd_data.refresh.command_detail, sizeof(struct tel_sat_cmd_detail_info));
-       tr.terminal_rsp_data.refresh.device_id.src = q_data->cmd_data.refresh.device_id.dest;
-       tr.terminal_rsp_data.refresh.device_id.dest = q_data->cmd_data.refresh.device_id.src;
-
-       if(!display_status){
-               dbg("fail to show ui for refresh");
-               tr.terminal_rsp_data.refresh.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
-       }
-       else{
-               dbg("success to show ui for refresh");
-               tr.terminal_rsp_data.more_time.result_type = RESULT_SUCCESS;
-               tr.terminal_rsp_data.more_time.me_problem_type = ME_PROBLEM_NO_SPECIFIC_CAUSE;
-       }
-
-       dbg("send refresh tr");
-       sat_manager_send_terminal_response(ctx->comm, plg, &tr);
-       return TRUE;
-}
-
 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)
 {
        char *path;
        TelephonySAT *sat;
        TelephonyObjectSkeleton *object;
 
-       gchar *plg_name = NULL;
+       const gchar *cp_name;
 
        GVariant *send_dtmf = NULL;
        gint command_id = 0;
        gint text_len = 0, dtmf_str_len = 0;
        gchar *text = NULL;
        gchar *dtmf_str = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+#endif
        if(!display_status){
                struct treq_sat_terminal_rsp_data *tr = NULL;
                dbg("[SAT] fail to show ui display for send_dtmf");
 
                tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+               if (!tr)
+                       return FALSE;
 
                tr->cmd_number = q_data->cmd_data.send_dtmf.command_detail.cmd_num;
                tr->cmd_type = q_data->cmd_data.send_dtmf.command_detail.cmd_type;
                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));
 
-               tr->terminal_rsp_data.send_dtmf.device_id.src = q_data->cmd_data.send_dtmf.device_id.dest;
+               tr->terminal_rsp_data.send_dtmf.device_id.src = DEVICE_ID_ME;
                tr->terminal_rsp_data.send_dtmf.device_id.dest = q_data->cmd_data.send_dtmf.device_id.src;
                tr->terminal_rsp_data.send_dtmf.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
 
                sat_manager_send_terminal_response(ctx->comm, plg, tr);
+               g_free(tr);
+
                return TRUE;
        }
 
        //emit send_dtmf signal
-       plg_name = tcore_plugin_ref_plugin_name(plg);
-       if (plg_name) {
-               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
-       } else {
-               path = g_strdup_printf("%s", MY_DBUS_PATH);
+       cp_name = tcore_server_get_cp_name_by_plugin(plg);
+       if (cp_name == NULL) {
+               err("CP name is NULL");
+               return FALSE;
        }
-       dbg("path = [%s]", path);
 
+       dbg("CP Name: [%s]", cp_name);
+       path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
+
+       /* Look-up Hash table for Object */
        object = g_hash_table_lookup(ctx->objects, path);
+       dbg("Path: [%s] Interface object: [%p]", path, object);
+       g_free(path);
+       if (object == NULL) {
+               err("Object is NOT defined!!!");
+               return FALSE;
+       }
        sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
 
-       send_dtmf = sat_manager_send_dtmf_noti(ctx, plg_name, &q_data->cmd_data.send_dtmf);
+       send_dtmf = sat_manager_send_dtmf_noti(ctx, cp_name, &q_data->cmd_data.send_dtmf);
 
        dbg("send_dtmf type_format(%s)", g_variant_get_type_string(send_dtmf));
-       g_variant_get(send_dtmf, "(isi@vis)", &command_id, &text, &text_len, &icon_id, &dtmf_str, &dtmf_str_len);
-
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       g_variant_get(send_dtmf, "(isi@vis)", &command_id, &text, &text_len, &icon_id, &dtmf_str_len, &dtmf_str);
+#else
+       g_variant_get(send_dtmf, "(isiis)", &command_id, &text, &text_len, &dtmf_str_len, &dtmf_str);
+#endif
        telephony_sat_emit_send_dtmf(sat, command_id, text, text_len, dtmf_str, dtmf_str_len);
+       g_free(text);
+       g_free(dtmf_str);
 
        return TRUE;
 }
@@ -4534,10 +6051,9 @@ static gboolean _sat_manager_handle_send_dtmf_ui_display_status(struct custom_da
 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)
 {
        char *path;
-       TelephonySAT *sat;
        TelephonyObjectSkeleton *object;
 
-       gchar *plg_name = NULL;
+       const gchar *cp_name;
 
        GVariant *open_channel = NULL;
 
@@ -4545,15 +6061,19 @@ static gboolean _sat_manager_handle_open_channel_ui_display_status(struct custom
        gboolean immediate_link, auto_reconnection, bg_mode;
        gint text_len, buffer_size, port_number;
        gchar *text, *dest_address;
-       GVariant *icon_id;
        GVariant *bearer_param;
        GVariant *bearer_detail;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       GVariant *icon_id;
+#endif
 
        if(!display_status){
                struct treq_sat_terminal_rsp_data *tr = NULL;
                dbg("[SAT] fail to show ui display for open channel");
 
                tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+               if (!tr)
+                       return FALSE;
 
                tr->cmd_number = q_data->cmd_data.open_channel.command_detail.cmd_num;
                tr->cmd_type = q_data->cmd_data.open_channel.command_detail.cmd_type;
@@ -4564,29 +6084,55 @@ static gboolean _sat_manager_handle_open_channel_ui_display_status(struct custom
                tr->terminal_rsp_data.open_channel.result_type = RESULT_ME_UNABLE_TO_PROCESS_COMMAND;
 
                sat_manager_send_terminal_response(ctx->comm, plg, tr);
+               g_free(tr);
+
                return TRUE;
        }
 
        //emit send_dtmf signal
-       plg_name = tcore_plugin_ref_plugin_name(plg);
-       if (plg_name) {
-               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, plg_name);
-       } else {
-               path = g_strdup_printf("%s", MY_DBUS_PATH);
+       cp_name = tcore_server_get_cp_name_by_plugin(plg);
+       if (cp_name == NULL) {
+               err("CP name is NULL");
+               return FALSE;
        }
-       dbg("path = [%s]", path);
 
+       dbg("CP Name: [%s]", cp_name);
+       path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
+
+       /* Look-up Hash table for Object */
        object = g_hash_table_lookup(ctx->objects, path);
-       sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
+       dbg("Path: [%s] Interface object: [%p]", path, object);
+       g_free(path);
+       if (object == NULL) {
+               err("Object is NOT defined!!!");
+               return FALSE;
+       }
 
-       open_channel = sat_manager_open_channel_noti(ctx, plg_name, &q_data->cmd_data.open_channel);
+       open_channel = sat_manager_open_channel_noti(ctx, cp_name, &q_data->cmd_data.open_channel);
 
        dbg("open channel type_format(%s)", g_variant_get_type_string(open_channel));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        g_variant_get(open_channel,"(isi@vbbbi@viiiis@v)", &command_id, &text, &text_len, &icon_id, &immediate_link, &auto_reconnection, &bg_mode,
                        &bearer_type, &bearer_param, &buffer_size, &protocol_type, &port_number, &dest_addr_type, &dest_address, &bearer_detail);
+#else
+       g_variant_get(open_channel,"(isibbbi@viiiis@v)", &command_id, &text, &text_len, &immediate_link, &auto_reconnection, &bg_mode,
+                       &bearer_type, &bearer_param, &buffer_size, &protocol_type, &port_number, &dest_addr_type, &dest_address, &bearer_detail);
+#endif
+       /*telephony_sat_emit_open_channel(sat, command_id, text, text_len, immediate_link, auto_reconnection, bg_mode,
+                       bearer_type, bearer_param, buffer_size, protocol_type, port_number, dest_addr_type, dest_address, bearer_detail);*/
+       g_free(text);
+       g_free(dest_address);
 
-       telephony_sat_emit_open_channel(sat, command_id, text, text_len, immediate_link, auto_reconnection, bg_mode,
-                       bearer_type, bearer_param, buffer_size, protocol_type, port_number, dest_addr_type, dest_address, bearer_detail);
+       //BIP Manager
+       {
+               GDBusConnection *conn = NULL;
+               const gchar *g_path = NULL;
+
+               conn = g_dbus_object_manager_server_get_connection(ctx->manager);
+               g_path = g_dbus_object_get_object_path(G_DBUS_OBJECT(object));
+
+               sat_ui_support_exec_bip(conn, g_path, SAT_PROATV_CMD_OPEN_CHANNEL, open_channel);
+       }
 
        return TRUE;
 }
@@ -4641,16 +6187,141 @@ gboolean sat_manager_handle_ui_display_status(struct custom_data *ctx, TcorePlug
 
        return result;
 }
+#else
+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)
+{
+       TReturn rv = TCORE_RETURN_FAILURE;
+       gboolean result = FALSE;
+       struct treq_sat_user_confirmation_data *conf_data;
+
+       if (!plg){
+               dbg("there is no valid plugin at this point");
+               return result;
+       }
+
+       conf_data = (struct treq_sat_user_confirmation_data *)calloc(1, sizeof(struct treq_sat_user_confirmation_data));
+       if (!conf_data)
+               return result;
+
+       dbg("display_status[%d]", display_status);
+
+       if(display_status)
+               conf_data->user_conf = USER_CONFIRM_YES;
+       else
+               conf_data->user_conf = USER_CONFIRM_NO_OR_CANCEL;
+
+       result = TRUE;
+       rv = sat_manager_send_user_confirmation(ctx->comm, plg, conf_data);
+       if(rv != TCORE_RETURN_SUCCESS){
+               dbg("fail to send user confirmation message");
+               result = FALSE;
+       }
+       g_free(conf_data);
+       return result;
+}
+
+gboolean sat_manager_handle_ui_display_status(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gboolean display_status)
+{
+       gboolean result = FALSE;
+       struct sat_manager_queue_data q_data;
+
+       dbg("[SAT] ui display status : command id(%d) display status(%d)", command_id, display_status);
+       memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
+
+       if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
+               dbg("[SAT] command peek data from queue is failed. didn't find in command Q!!");
+               return result;
+       }
+
+       if (!plg){
+               dbg("there is no valid plugin at this point");
+               return result;
+       }
+
+       switch(q_data.cmd_type){
+               case SAT_PROATV_CMD_PLAY_TONE:
+                       result = _sat_manager_handle_play_tone_ui_display_status(ctx, plg, &q_data, display_status);
+                       break;
+               case SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT:
+                       result = _sat_manager_handle_setup_idle_mode_text_ui_display_status(ctx, plg, &q_data, display_status);
+                       break;
+               case SAT_PROATV_CMD_REFRESH:
+                       result = _sat_manager_handle_refresh_ui_display_status(ctx, plg, &q_data, display_status);
+                       break;
+               case SAT_PROATV_CMD_OPEN_CHANNEL:
+                       result = _sat_manager_handle_open_channel_ui_display_status(ctx, plg, &q_data, display_status);
+                       break;
+               case SAT_PROATV_CMD_SEND_SMS:
+               case SAT_PROATV_CMD_SEND_SS:
+               case SAT_PROATV_CMD_SEND_USSD:
+               case SAT_PROATV_CMD_SEND_DTMF:
+                       dbg("[SAT] command(0x%x) will be handled by CP", q_data.cmd_type);
+                       result = TRUE;
+                       if(q_data.noti_required) {
+                               TelephonySAT *sat;
+                               TelephonyObjectSkeleton *object;
+                               const gchar *cp_name;
+                               gchar *path = NULL;
+
+                               dbg("Noti flag is set, send session end evt.");
+                               //emit session end
+
+                               cp_name = tcore_server_get_cp_name_by_plugin(plg);
+                               if (cp_name == NULL) {
+                                       err("CP name is NULL");
+                                       return FALSE;
+                               }
+
+                               dbg("CP Name: [%s]", cp_name);
+                               path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
+
+                               /* Look-up Hash table for Object */
+                               object = g_hash_table_lookup(ctx->objects, path);
+                               dbg("Path: [%s] Interface object: [%p]", path, object);
+                               g_free(path);
+                               if (object == NULL) {
+                                       err("Object is NOT defined!!!");
+                                       return FALSE;
+                               }
+
+                               sat = telephony_object_peek_sat(TELEPHONY_OBJECT(object));
+                               telephony_sat_emit_end_proactive_session(sat, SAT_PROATV_CMD_TYPE_END_PROACTIVE_SESSION);
+                       }
+                       break;
+               default:
+                       dbg("[SAT] cannot handle ui display status command(0x%x)", q_data.cmd_type);
+                       break;
+       }
+       return result;
+}
 
+#endif
 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)
 {
+       gboolean rv = FALSE;
        GVariant *data = NULL;
 
        dbg("download data type_format(%s)", g_variant_get_type_string(download_data));
        g_variant_get(download_data, "v", &data);
 
+
+       if(g_evt_list[event_type] == TRUE){
+               dbg("event (%d) shoud be passed to sim", event_type);
+               rv = TRUE;
+       }
+
+       if(!rv){
+               dbg("(%d) event does not requested by sim", event_type);
+               return FALSE;
+       }
+
        switch(event_type)
        {
+               case EVENT_USER_ACTIVITY:
+                       dbg("data type_format(%s)", g_variant_get_type_string(data));
+                       evt_download->device_identitie.src = src_dev;
+                       evt_download->device_identitie.dest = dest_dev;
+                       break;
                case EVENT_IDLE_SCREEN_AVAILABLE:
                        dbg("data type_format(%s)", g_variant_get_type_string(data));
                        g_variant_get(data, "(b)", &evt_download->idle_screen);
@@ -4704,3 +6375,85 @@ gboolean sat_manager_handle_event_download_envelop(int event_type,  int src_dev,
 
        return TRUE;
 }
+
+gboolean sat_manager_update_language(struct custom_data *ctx, const char *cp_name, GVariant *language_noti)
+{
+       Server *s = NULL;
+       TcorePlugin *plg = NULL;
+       static Storage *strg;
+
+       TReturn rv = TCORE_RETURN_FAILURE;
+       gboolean result = FALSE;
+       const gchar *lang_str = NULL;
+       gint command_id, language;
+       gboolean b_specified;
+
+       struct treq_sat_terminal_rsp_data *tr;
+       struct sat_manager_queue_data q_data;
+
+       s = ctx->server;
+       strg = tcore_server_find_storage(s, "vconf");
+
+       plg = tcore_server_find_plugin(ctx->server, cp_name);
+       if (!plg){
+               dbg("there is no valid plugin at this point");
+               return result;
+       }
+
+       memset(&q_data, 0, sizeof(struct sat_manager_queue_data));
+
+       dbg("language_noti type_format(%s)", g_variant_get_type_string(language_noti));
+       g_variant_get(language_noti, "(iib)", &command_id, &language, &b_specified);
+
+       if (sat_manager_dequeue_cmd_by_id(ctx, &q_data, command_id) == FALSE) {
+               dbg("[SAT] command dequeue failed. didn't find in command Q!!");
+               return result;
+       }
+
+       if(q_data.cmd_type != SAT_PROATV_CMD_LANGUAGE_NOTIFICATION){
+               dbg("[SAT] Language Noti dequeue failed. didn't find in command Q!!");
+               return result;
+       }
+
+       if (b_specified) {
+               lang_str = _convert_sim_lang_to_string((enum tel_sim_language_type)language);
+               if(!lang_str){
+                       dbg("language is not exist");
+               }
+               dbg("converted lang (%s)", lang_str);
+
+               if(_sat_manager_check_language_set(lang_str)) {
+                       dbg("supprted language, set vconf.");
+                       result = tcore_storage_set_string(strg,STORAGE_KEY_LANGUAGE_SET, (const char*)lang_str);
+                       if(!result){
+                               dbg("fail to update language");
+                       }
+               }
+       }
+
+       /* TR should be sent with success result
+        * regardless of language is specified or not.
+        */
+       tr = (struct treq_sat_terminal_rsp_data *)calloc(1, sizeof(struct treq_sat_terminal_rsp_data));
+       if (!tr)
+               return FALSE;
+
+       tr->cmd_number = q_data.cmd_data.language_notification.command_detail.cmd_num;
+       tr->cmd_type = q_data.cmd_data.language_notification.command_detail.cmd_type;
+       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));
+       tr->terminal_rsp_data.language_notification.device_id.src = DEVICE_ID_ME;
+       tr->terminal_rsp_data.language_notification.device_id.dest = DEVICE_ID_SIM;
+       tr->terminal_rsp_data.language_notification.result_type = RESULT_SUCCESS;
+
+       result = TRUE;
+       rv = sat_manager_send_terminal_response(ctx->comm, plg, tr);
+       if(rv != TCORE_RETURN_SUCCESS){
+               dbg("fail to send terminal response");
+               g_free(tr);
+               result = FALSE;
+               return result;
+       }
+
+       g_free(tr);
+       return result;
+}
index 54620c7..7fb1d36 100644 (file)
@@ -1,3 +1,23 @@
+/*
+ * tel-plugin-dbus-tapi
+ *
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Ja-young Gu <jygu@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #ifndef SAT_MANAGER_H_
 #define SAT_MANAGER_H_
 
@@ -28,6 +48,7 @@ typedef union {
        struct tel_sat_receive_channel_tlv receive_data;
        struct tel_sat_send_channel_tlv send_data;
        struct tel_sat_get_channel_status_tlv get_channel_status;
+       struct tel_sat_unsupproted_command_tlv unsupport_cmd;
 } sat_manager_proactive_data;
 
 /**
@@ -37,32 +58,37 @@ struct sat_manager_queue_data {
        enum tel_sat_proactive_cmd_type cmd_type; /**<Type of Command*/
        int cmd_id; /**<Command Id*/
        sat_manager_proactive_data cmd_data; /**<Proactive Cmd Ind Info*/
+       gboolean noti_required; /* for missing SESSION END noti*/
+       char *cp_name; /**<cp_name*/
 };
 
 
 /*================================================================================================*/
 
-void sat_manager_init_queue(struct custom_data *ctx);
+// queue handling
+void sat_manager_init_queue(struct custom_data *ctx, const char *cp_name);
+gboolean sat_manager_remove_cmd_by_id(struct custom_data *ctx, int cmd_id);
 
 //application request handling
 gboolean sat_manager_handle_user_confirm(struct custom_data *ctx, TcorePlugin *plg, GVariant *user_confirm_data);
 gboolean sat_manager_handle_app_exec_result(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gint command_type, GVariant *exec_result);
 gboolean sat_manager_handle_ui_display_status(struct custom_data *ctx, TcorePlugin *plg, gint command_id, gboolean display_status);
 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);
+gboolean sat_manager_update_language(struct custom_data *ctx, const char *plugin_name, GVariant *language_noti);
 
 //proactive command processing
 GVariant* sat_manager_caching_setup_menu_info(struct custom_data *ctx, const char *plugin_name, struct tel_sat_setup_menu_tlv* setup_menu_tlv);
-GVariant* sat_manager_display_text_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_display_text_tlv* display_text_tlv);
+GVariant* sat_manager_display_text_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_display_text_tlv* display_text_tlv, int decode_error);
 GVariant* sat_manager_select_item_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_select_item_tlv* select_item_tlv);
-GVariant* sat_manager_get_inkey_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_get_inkey_tlv* get_inkey_tlv);
-GVariant* sat_manager_get_input_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_get_input_tlv* get_input_tlv);
+GVariant* sat_manager_get_inkey_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_get_inkey_tlv* get_inkey_tlv, int decode_error);
+GVariant* sat_manager_get_input_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_get_input_tlv* get_input_tlv, int decode_error);
 GVariant* sat_manager_play_tone_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_play_tone_tlv* play_tone_tlv);
 GVariant* sat_manager_send_sms_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_send_sms_tlv* send_sms_tlv);
 GVariant* sat_manager_send_ss_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_send_ss_tlv* send_ss_tlv);
 GVariant* sat_manager_send_ussd_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_send_ussd_tlv* send_ussd_tlv);
 GVariant* sat_manager_setup_call_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_setup_call_tlv* setup_call_tlv);
 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);
-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);
+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, int decode_error);
 GVariant* sat_manager_open_channel_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_open_channel_tlv *open_channel_tlv);
 GVariant* sat_manager_close_channel_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_close_channel_tlv *close_channel_tlv);
 GVariant* sat_manager_receive_data_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_receive_channel_tlv *receive_data_tlv);
@@ -74,10 +100,7 @@ GVariant* sat_manager_send_dtmf_noti(struct custom_data *ctx, const char *plugin
 GVariant* sat_manager_launch_browser_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_launch_browser_tlv *launch_browser_tlv);
 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);
 GVariant* sat_manager_language_notification_noti(struct custom_data *ctx, const char *plugin_name, struct tel_sat_language_notification_tlv *language_notification_tlv);
-
-void sat_mgr_convert_utf8_to_gsm(unsigned char *dest, int *dest_len, unsigned char* src, unsigned int src_len);
-void sat_mgr_convert_utf8_to_ucs2(unsigned char* dest, int* dest_len,  unsigned char* src, int src_len);
-void sat_mgr_convert_string(unsigned char *dest, unsigned short *dest_len,
-               enum alphabet_format dcs, unsigned char *src, unsigned short src_len);
+gboolean sat_manager_processing_unsupport_proactive_command(struct custom_data *ctx, const char *plugin_name, struct tel_sat_unsupproted_command_tlv *unsupport_tlv);
+gboolean sat_manager_handle_sat_ui_launch_fail(struct custom_data *ctx, const char *plugin_name, struct tnoti_sat_proactive_ind *p_ind);
 
 #endif /* SAT_MANAGER_H_ */
old mode 100644 (file)
new mode 100755 (executable)
index 307cf2f..0d4a339
@@ -1,5 +1,5 @@
 /*
- * libslp-tapi
+ * tel-plugin-dbus_tapi
  *
  * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved.
  *
@@ -388,7 +388,7 @@ typedef enum {
  * End type used as in parameter in the end call API.
  */
 typedef enum {
-       TAPI_CALL_END = 0,      
+       TAPI_CALL_END = 0,
        TAPI_CALL_END_ALL,
        TAPI_CALL_END_ACTIVE_ALL,
        TAPI_CALL_END_HOLD_ALL,
@@ -468,18 +468,27 @@ typedef enum {
 } TelCallNameMode_t;
 
 /**
- * @enum TelCallSSNocliCause_t
+ * @enum TelCallNocliCause_t
  * This enumeration defines the value for "No Cli cause".
  */
 typedef enum {
-       TAPI_SS_NO_CLI_CAUSE_UNAVAILABLE = 0x00,                /**< Unavailable */
-       TAPI_SS_NO_CLI_CAUSE_REJECTBY_USER = 0x01,              /**< Rejected by User */
-       TAPI_SS_NO_CLI_CAUSE_INTERACTION_OTHERSERVICES = 0x02, /**<  Other services */
-       TAPI_SS_NO_CLI_CAUSE_COINLINE_PAYPHONE = 0x03,  /**< Coin line phone */
-       TAPI_SS_NO_CLI_CAUSE_MAX                                                /**< maximum usage */
-} TelCallSSNocliCause_t;
+       TAPI_CALL_NO_CLI_CAUSE_NONE = -1,        /**< None */
+       TAPI_CALL_NO_CLI_CAUSE_UNAVAILABLE = 0x00,              /**< Unavailable */
+       TAPI_CALL_NO_CLI_CAUSE_REJECTBY_USER = 0x01,            /**< Rejected by User */
+       TAPI_CALL_NO_CLI_CAUSE_INTERACTION_OTHERSERVICES = 0x02, /**<  Other services */
+       TAPI_CALL_NO_CLI_CAUSE_COINLINE_PAYPHONE = 0x03,        /**< Coin line phone */
+} TelCallNocliCause_t;
 
 /**
+ * @enum TelCallCliMode_t
+ * This enumeration defines the value for "Cli mode".
+ */
+typedef enum {
+       TAPI_CALL_PRES_AVAIL,           /** <Presentation Allowed */
+       TAPI_CALL_PRES_RESTRICTED,      /**<Presentation Restricted */
+       TAPI_CALL_NUM_UNAVAIL,          /**<Number Not Available */
+}TelCallCliMode_t;
+/**
  * Fwded Ind Type used for MO and Mt from SS Noti Info
  */
 typedef enum {
@@ -687,7 +696,8 @@ typedef struct {
        char szCallingPartyNumber[TAPI_CALL_DIALDIGIT_LEN_MAX + 1]; /**< caller number,null terminated ASCII */
        TelCallingNameInfo_t CallingNameInfo;   /**< Call name info. If there is no information from network, this information will be NULL.*/
        TelCallRedirectionInfo_t RedirectInfo;  /**< The data for the Call Redirect information. If there is no information from network, this information will be NULL.  */
-       TelCallSSNocliCause_t CliCause;         /**< No of CLI cause */
+       TelCallCliMode_t CliMode;               /**<CLI Mode> */
+       TelCallNocliCause_t CliCause;           /**< No of CLI cause */
        int fwded;                                                              /**< True or false. If Incoming call is a forwarded call, then true else false. */
        TelCallActiveLine_t ActiveLine;         /**< Current Active Line */
 } TelCallIncomingCallInfo_t;
@@ -697,7 +707,8 @@ typedef struct {
  */
 typedef struct {
        TelCallMtSSInfo_t type; /* Type of the SS Info presnet. */
-       TelCallSSNocliCause_t no_cli_cause;
+       TelCallCliMode_t CliMode;               /**<CLI Mode> */
+       TelCallNocliCause_t no_cli_cause;
 } TelCallMtSsInfo_t; // not used
 
 typedef struct {
@@ -720,7 +731,8 @@ typedef struct {
  * This structure contains the connected number information.
  */
 typedef struct {
-       TelCallSSNocliCause_t no_cli_cause; /**< Cause when no CLI number. */
+       TelCallCliMode_t CliMode;               /**<CLI Mode> */
+       TelCallNocliCause_t no_cli_cause; /**< Cause when no CLI number. */
        unsigned char dcs;                                      /**< DCS */
        unsigned char number_type;                      /**< Number type */
        TelCallNameMode_t name_mode;            /**< Display mode of the name. */
@@ -781,6 +793,12 @@ typedef enum {
 } TelSoundVolume_t;
 
 typedef enum {
+       TAPI_SOUND_RECORDING_OFF,
+       TAPI_SOUND_RECORDING_ON,
+
+} TelSoundRecording_t;
+
+typedef enum {
        TAPI_SOUND_DEVICE_RECEIVER = 0x00,
        TAPI_SOUND_DEVICE_SPEAKER_PHONE = 0x10,
        TAPI_SOUND_DEVICE_HFK = 0x20,
@@ -805,32 +823,63 @@ typedef struct {
        TelSoundVolume_t volume;
 } TelCallVolumeInfo_t;
 
+typedef enum {
+       TAPI_SOUND_PATH_HANDSET                 =0x01,          /**<Audio path is handset*/
+       TAPI_SOUND_PATH_HEADSET         =0x02,          /**<Audio path is handset*/
+       TAPI_SOUND_PATH_HANDSFREE               =0x03,          /**<Audio path is Handsfree*/
+       TAPI_SOUND_PATH_BLUETOOTH               =0x04,  /**<Audio path is bluetooth*/
+       TAPI_SOUND_PATH_STEREO_BLUETOOTH   =0x05,       /**<Audio path is stereo bluetooth*/
+       TAPI_SOUND_PATH_SPK_PHONE               =0x06,  /**<Audio path is speaker phone*/
+       TAPI_SOUND_PATH_HEADSET_3_5PI       =0x07,      /**<Audio path is headset_3_5PI*/
+       TAPI_SOUND_PATH_BT_NSEC_OFF         =0x08,
+       TAPI_SOUND_PATH_MIC1                =0x09,
+       TAPI_SOUND_PATH_MIC2                =0x0A,
+       TAPI_SOUND_PATH_HEADSET_HAC         =0x0B,
+} TelSoundPath_t;
+
 typedef struct {
-       enum PathType {
-               TAPI_SOUND_PATH_HANDSET                 =0x01,          /**<Audio path is handset*/
-               TAPI_SOUND_PATH_HEADSET         =0x02,          /**<Audio path is handset*/
-               TAPI_SOUND_PATH_HANDSFREE               =0x03,          /**<Audio path is Handsfree*/
-               TAPI_SOUND_PATH_BLUETOOTH               =0x04,  /**<Audio path is bluetooth*/
-               TAPI_SOUND_PATH_STEREO_BLUETOOTH   =0x05,       /**<Audio path is stereo bluetooth*/
-               TAPI_SOUND_PATH_SPK_PHONE               =0x06,  /**<Audio path is speaker phone*/
-               TAPI_SOUND_PATH_HEADSET_3_5PI       =0x07,      /**<Audio path is headset_3_5PI*/
-               TAPI_SOUND_PATH_BT_NSEC_OFF         =0x08,
-               TAPI_SOUND_PATH_MIC1                =0x09,
-               TAPI_SOUND_PATH_MIC2                =0x0A,
-               TAPI_SOUND_PATH_HEADSET_HAC         =0x0B,
-       } type;
+       TelSoundPath_t path;
        enum ExtraVolumeStatus {
                TAPI_SOUND_EX_VOLUME_OFF,
                TAPI_SOUND_EX_VOLUME_ON,
        } ex_volume;
-} TelSoundPath_t;
-
+} TelCallSoundPathInfo_t;
 
 typedef enum {
        TAPI_SOUND_MUTE_STATUS_OFF,
        TAPI_SOUND_MUTE_STATUS_ON,
 } TelSoundMuteStatus_t;
 
+typedef enum {
+       TAPI_SOUND_NOISE_REDUCTION_OFF,
+       TAPI_SOUND_NOISE_REDUCTION_ON,
+} TelSoundNoiseReduction_t;
+
+typedef enum {
+       TAPI_SOUND_EQUALIZATION_MODE_OFF,
+       TAPI_SOUND_EQUALIZATION_MODE_ON,
+       TAPI_SOUND_EQUALIZATION_MODE_FLAG_OFF,
+       TAPI_SOUND_EQUALIZATION_MODE_FLAG_ON,
+       TAPI_SOUND_EQUALIZATION_MODE_SOFT1,
+       TAPI_SOUND_EQUALIZATION_MODE_SOFT2,
+} TelSoundEqualizationMode_t;
+
+typedef enum {
+       TAPI_SOUND_DIRECTION_LEFT,
+       TAPI_SOUND_DIRECTION_RIGHT,
+} TelSoundDirection_t;
+
+
+#define MAX_SOUND_EQ_PARAMETER_SIZE 6
+typedef struct {
+       TelSoundEqualizationMode_t mode;
+       TelSoundDirection_t direction;
+       unsigned short parameter[MAX_SOUND_EQ_PARAMETER_SIZE];
+} TelCallSoundEqualization_t;
+
+
+
+
 typedef struct {
        unsigned int id;
 } TelCallAnswerCnf_t;
@@ -873,11 +922,6 @@ typedef struct {
        TelSoundMuteStatus_t status;
 } TelCallGetMuteStatusResp_t;
 
-typedef struct {
-       int code;
-       unsigned char data[ TAPI_CALL_CUSTOM_SERVICE_DATA_MAX ];
-       unsigned int data_len;
-} TelCallCustomServiceCnf_t;
 
 
 
@@ -913,10 +957,68 @@ typedef struct {
 } TelCallStatusWaitingNoti_t;
 
 typedef struct {
-       int code;
-       unsigned char data[ TAPI_CALL_CUSTOM_SERVICE_DATA_MAX ];
-       unsigned int data_len;
-} TelCallCustomServiceNoti_t;
+       unsigned int id;
+} TelCallInfoWaitingNoti_t;
+
+typedef struct {
+       unsigned int id;
+} TelCallInfoForwardedNoti_t;
+
+typedef struct {
+       unsigned int id;
+} TelCallInfoForwardedCallNoti_t;
+
+typedef struct {
+       unsigned int id;
+} TelCallInfoBarredIncomingNoti_t;
+
+typedef struct {
+       unsigned int id;
+} TelCallInfoBarredOutgoingNoti_t;
+
+typedef struct {
+       unsigned int id;
+} TelCallInfoForwardConditionalNoti_t;
+
+typedef struct {
+       unsigned int id;
+} TelCallInfoForwardUnconditionalNoti_t;
+
+typedef struct {
+       unsigned int id;
+} TelCallInfoActiveNoti_t;
+
+typedef struct {
+       unsigned int id;
+} TelCallInfoHeldNoti_t;
+
+typedef struct {
+       unsigned int id;
+} TelCallInfoJoinedNoti_t;
+
+typedef struct {
+       TelSoundPath_t path;
+} TelCallSoundPathNoti_t;
+
+typedef enum {
+       TAPI_CALL_SOUND_RINGBACK_TONE_START,
+       TAPI_CALL_SOUND_RINGBACK_TONE_END,
+} TelCallSoundRingbackToneNoti_t;
+
+typedef enum {
+       TAPI_CALL_SOUND_WBAMR_STATUS_OFF,
+       TAPI_CALL_SOUND_WBAMR_STATUS_ON,
+} TelCallSoundWbamrNoti_t;
+
+typedef struct {
+       TelSoundNoiseReduction_t status;
+} TelCallSoundNoiseReductionNoti_t;
+
+typedef struct {
+       TelSoundEqualizationMode_t mode;
+       TelSoundDirection_t direction;
+} TelCallSoundEqualizationNoti_t;
+
 
 #ifdef __cplusplus
 }
index cb5411f..8badfbc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * libtapi
+ * tel-plugin-dbus_tapi
  *
  * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved.
  *
index 0b25164..2567817 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * libslp-tapi
+ * tel-plugin-dbus_tapi
  *
  * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved.
  *
index 3d07eb6..8fbf727 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * libslp-tapi
+ * tel-plugin-dbus_tapi
  *
  * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved.
  *
@@ -41,6 +41,7 @@
 #include <TelSatObj.h>
 #include <TelSatProactvCmd.h>
 #include <TelSatEnvelope.h>
+#include <TelSim.h>
 
 #ifdef __cplusplus
 extern "C"
@@ -176,6 +177,7 @@ typedef struct
        unsigned int                                    duration;                                       /**<the duration of display */
        int                                                     bIsPriorityHigh;                        /**<indicates whether the text is to be displayed if some other app is using the screen.*/
        int                                                     bIsUserRespRequired;            /**<indicates whether user response required or Not*/
+       int                                                     b_immediately_resp;
        TelSatIconIdentifierInfo_t      iconId;                                         /**< Icon Identifier */
 }TelSatDisplayTextInd_t;
 
@@ -221,7 +223,7 @@ typedef struct
        int                                             commandId;      /**<Proactive Command Number sent by USIM*/
        TelSatTextInfo_t                        text;           /**<character data to display on screen*/
        TelSatToneInfo_t                        tone;           /**<tone info   */
-       TelSatDurationInfo_t            duration;       /**<the duration for playing tone*/
+       unsigned int                            duration;       /**<the duration for playing tone*/
        TelSatIconIdentifierInfo_t      iconId;         /**<Icon Identifier*/
 }TelSatPlayToneInd_t;
 
@@ -299,6 +301,7 @@ typedef struct
 typedef struct
 {
        int                                                     commandId;                      /**<Proactive Command Number sent by USIM*/
+       unsigned int                            duration;                       /**<the duration of display*/
        TelSatCmdQualiRefresh_t         refreshType;            /**<refresh mode*/
 }TelSatRefreshIndUiInfo_t;
 
@@ -312,7 +315,7 @@ typedef struct
        TelSatRefreshAppType_t          appType;                                                                /**<concerned application type */
        TelSatCmdQualiRefresh_t         refreshMode;                                                    /**<refresh mode*/
        unsigned char                                   fileCount;                                                              /**<refresh file count*/
-//     TelSimFileID_t                          fileId[TAPI_SAT_REFRESH_FILE_LIST];             /**<refresh file identifier*/
+       TelSimFileID_t                          fileId[TAPI_SAT_REFRESH_FILE_LIST];             /**<refresh file identifier*/
 }TelSatRefreshInd_t;
 
 //     Telephony END PROACTIVE COMMAND INFO
@@ -345,6 +348,8 @@ typedef struct
 typedef struct
 {
        int                                     commandId;              /**<Proactive Command Number sent by USIM*/
+       TelSimTypeOfNum_t ton; /**<     type of number          */
+       TelSimNumberingPlanIdentity_t npi; /**< number plan identity            */
        unsigned short          ssStringLen;
        unsigned char           ssString[TAPI_SAT_DEF_SS_LEN_MAX+1];
 }TelSatSendSsIndSsData_t;
index 0232bff..32903ca 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * libslp-tapi
+ * tel-plugin-dbus_tapi
  *
  * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved.
  *
index 7c75233..6648cfc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * libslp-tapi
+ * tel-plugin-dbus_tapi
  *
  * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved.
  *
@@ -48,7 +48,7 @@ extern "C"
 #define TAPI_SAT_TEXT_STRING_LEN_MAX                                   500      /**<   max length of text string -when the string data is in 7Bit packed format, this length is not enough to support the maximum size so should increase the value to a value > 275 */
 #define TAPI_SAT_SUB_ADDR_LEN_MAX                                              30       /**<   max length of sub address               */
 #define TAPI_SAT_CCP_DATA_LEN_MAX                                              30       /**<   max length of ccp data          */
-#define TAPI_SAT_ITEM_TEXT_LEN_MAX                                             45       /**<   max length of item text                 */
+#define TAPI_SAT_ITEM_TEXT_LEN_MAX                                             255      /**<   max length of item text                 */
 #define TAPI_SAT_SMS_TPDU_SMS_DATA_LEN_MAX                             175      /**<   max length of sms tpdu data             */
 #define TAPI_SAT_SS_STRING_LEN_MAX                                             160      /**<   max length of ss string         */
 #define TAPI_SAT_USSD_STRING_LEN_MAX                                   255      /**<   max length of ussd string               */
index 86ad042..545b093 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * libslp-tapi
+ * tel-plugin-dbus_tapi
  *
  * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved.
  *
index 7b598f5..66593d0 100644 (file)
@@ -34,7 +34,6 @@
 #define _TELSIM_H_
 
 #include <TelDefines.h>
-//#include <TapiCommon.h>
 
 #ifdef __cplusplus
 extern "C"
@@ -50,6 +49,9 @@ extern "C"
 /** Dialing number max length */
 #define TAPI_SIM_XDN_DIALING_NUMBER_LEN        20
 
+/** MSISDN number max length */
+#define TAPI_SIM_MSISDN_DIALING_NUMBER_LEN     26
+
 /** CSP profile entry count max length */
 #define TAPI_SIM_CPHS_CUSTOMER_SERVICE_PROFILE_ENTRY_COUNT_MAX 11
 
@@ -60,14 +62,35 @@ extern "C"
 #define TAPI_SIM_AUTH_MAX_RESP_DATA_LEN 128
 
 /** SAP APDU max length */
-#define TAPI_SIM_APDU_MAX_LEN 256+2 // to be fine tuned according to lower layers, 2bytes for SW1 & SW2 should be added
+/** 2048 is for QMI definition. (1024 : general length, 1024 : extra length for additional response) */
+#define TAPI_SIM_APDU_MAX_LEN 2048
 
 /** SIM 3G Phone book EF Max count */
 #define TAPI_SIM_PB_3G_FILE_MAX_COUNT 13
 
+/** SIM Phone book Record name max length */
+#define TAPI_SIM_PB_RECORD_NAME_MAX_LEN 255
+
+/** SIM Phone book Record number max length */
+#define TAPI_SIM_PB_RECORD_NUMBER_MAX_LEN 255
+
+/** SIM Phone book Record email max length */
+#define TAPI_SIM_PB_RECORD_EMAIL_MAX_LEN 255
+
 /** SAP Answer to Reset data max length */
 #define TAPI_SIM_SAP_ATR_DATA  256
 
+#define TAPI_SIM_NET_FULL_NAME_MAX_LEN 40
+
+#define TAPI_SIM_NET_SHORT_NAME_MAX_LEN 10
+
+#define        TAPI_SIM_MSP_CNT_MAX 2
+
+#define TAPI_SIM_OPERATION_TIMEOUT 1234
+
+#define TAPI_SIM_SST_SERVICE_CNT_MAX 56
+
+#define TAPI_SIM_UST_SERVICE_CNT_MAX 64
 
 /**
  * @enum TelSimCardType_t
@@ -82,6 +105,59 @@ typedef enum {
 } TelSimCardType_t;
 
 /**
+ * @enum TelSimFileID_t
+ * This enumeration defines the card type.
+ */
+typedef enum {
+       TAPI_SIM_EF_DIR = 0x2F00, /**< Root Directory for the USIM */
+       TAPI_SIM_EF_ICCID = 0x2FE2, /**< the ICC Identification file    */
+       TAPI_SIM_EF_IMSI = 0x6F07, /**< the IMSI file                */
+       TAPI_SIM_EF_SST = 0x6F38, /**< the SIM Service Table file   */
+       TAPI_SIM_EF_EST = 0x6F56, /**< the Enabled Service Table file   */
+       TAPI_SIM_EF_OPLMN_ACT = 0x6F61, /**< the OPLMN List file*/
+       TAPI_SIM_EF_GID1 = 0x6F3E, /**< the Group Identifier Level 1 */
+       TAPI_SIM_EF_GID2 = 0x6F3F, /**< the Group Identifier Level 2 */
+
+       TAPI_SIM_EF_ELP = 0x2F05, /**< the Extended Language Preference file */
+       TAPI_SIM_EF_LP = 0x6F05, /**< SIM: Language preference */
+       TAPI_SIM_EF_ECC = 0x6FB7, /**< the Emergency Call Codes     */
+       TAPI_SIM_EF_SPN = 0x6F46, /**< the Service Provider Name    */
+       TAPI_SIM_EF_SPDI = 0x6FCD, /**< the Service provider display information*/
+       TAPI_SIM_EF_PNN = 0x6FC5, /**< the PLMN Network Name File*/
+       TAPI_SIM_EF_OPL = 0x6FC6, /**< the Operator PLMN List File*/
+       TAPI_SIM_EF_MSISDN = 0x6F40, /**< MSISDN */
+
+       TAPI_SIM_EF_SMS = 0x6F3C, /** < Short Messages file */
+       TAPI_SIM_EF_SMSP = 0x6F42, /** < SMS Parameter */
+       TAPI_SIM_EF_SMSS = 0x6F43, /** < SMS Status */
+       TAPI_SIM_EF_CBMI = 0x6F45, /** < Cell Broadcast Message Identifier */
+       TAPI_SIM_EF_MBDN = 0x6FC7, /** < SIM Mail Box Dialing Number file */
+
+       TAPI_SIM_EF_USIM_MBI = 0x6FC9, /** < Mailbox Identifier -linear fixed*/
+       TAPI_SIM_EF_USIM_MWIS = 0x6FCA, /** < Message Waiting Indication Status -linear fixed*/
+       TAPI_SIM_EF_USIM_CFIS = 0x6FCB, /** < Call forward indication status -linear fixed*/
+
+       /* CPHS FILE ID */
+       TAPI_SIM_EF_CPHS_VOICE_MSG_WAITING = 0x6F11, /** < CPHS voice MSG waiting indication  */
+       TAPI_SIM_EF_CPHS_SERVICE_STRING_TABLE = 0x6F12, /** < CPHS service string table  */
+       TAPI_SIM_EF_CPHS_CALL_FORWARD_FLAGS = 0x6F13, /** < CPHS call forward flags  */
+       TAPI_SIM_EF_CPHS_OPERATOR_NAME_STRING = 0x6F14, /** < CPHS operator name string  */
+       TAPI_SIM_EF_CPHS_CUSTOMER_SERVICE_PROFILE = 0x6F15, /** < CPHS customer service profile  */
+       TAPI_SIM_EF_CPHS_CPHS_INFO = 0x6F16, /** < CPHS information  */
+       TAPI_SIM_EF_CPHS_MAILBOX_NUMBERS = 0x6F17, /** < CPHS mail box numbers  */
+       TAPI_SIM_EF_CPHS_OPERATOR_NAME_SHORT_FORM_STRING = 0x6F18, /** < CPHS operator name short form string  */
+       TAPI_SIM_EF_CPHS_INFORMATION_NUMBERS = 0x6F19, /** < CPHS information numbers  */
+       /*  CPHS ALS FILE ID */
+       TAPI_SIM_EF_CPHS_DYNAMICFLAGS = 0x6F9F, /** < CPHS Dynamics flags  */
+       TAPI_SIM_EF_CPHS_DYNAMIC2FLAG = 0x6F92, /** < CPHS Dynamics2 flags  */
+       TAPI_SIM_EF_CPHS_CUSTOMER_SERVICE_PROFILE_LINE2 = 0x6F98, /** < CPHS CSP2  */
+
+       /* Invalid File ID, All the file ID are less than this Value*/
+       TAPI_SIM_EF_INVALID = 0xFFFF, /**< Invalid file.*/
+       TAPI_SIM_EF_OTHERS, /**< Element to indicate an unknown file.*/
+}TelSimFileID_t;
+
+/**
  * @enum TelSimFacilityStatus_t
  * This enumeration defines the pin status.
  */
@@ -98,7 +174,7 @@ typedef enum {
 typedef enum {
        TAPI_SIM_PIN_OPERATION_SUCCESS, /**< Operation involving PIN (verification/change/enable/disable, etc) is successful.  */
        TAPI_SIM_BUSY, /**< SIM is busy  */
-       TAPI_SIM_CARD_ERROR, /**< SIM card error - Permanently blocked and general errors   */
+       TAPI_SIM_CARD_ERROR, /**< SIM card error - General errors   */
        TAPI_SIM_INCOMPATIBLE_PIN_OPERATION, /**< SIM Incompatible pin operation that is in case when invalid SIM command is given or incorrect parameters are supplied to the SIM. */
        TAPI_SIM_PIN_INCORRECT_PASSWORD, /**< SIM PIN  Incorrect password */
        TAPI_SIM_PUK_INCORRECT_PASSWORD, /**< SIM PUK Incorrect Password */
@@ -109,6 +185,7 @@ typedef enum {
        TAPI_SIM_SPCK_REQUIRED, /**< Service Provider Control Key Required */
        TAPI_SIM_CCK_REQUIRED, /**< Corporate Control Key Required */
        TAPI_SIM_LOCK_REQUIRED, /**<  PH-SIM (phone-SIM) locked state **/
+       TAPI_SIM_PERM_BLOCKED /**< Permanently Blocked **/
 } TelSimPinOperationResult_t;
 
 /**
@@ -237,7 +314,9 @@ typedef enum {
        TAPI_SIM_STATUS_SIM_SPCK_REQUIRED = 0x09, /**<  Service Provider Control Key required state **/
        TAPI_SIM_STATUS_SIM_CCK_REQUIRED = 0x0a, /**<  Corporate Control Key required state **/
        TAPI_SIM_STATUS_CARD_REMOVED = 0x0b, /**<  Card removed **/
-       TAPI_SIM_STATUS_SIM_LOCK_REQUIRED = 0x0c /**<  PH-SIM (phone-SIM) locked state **/
+       TAPI_SIM_STATUS_SIM_LOCK_REQUIRED = 0x0c, /**<  PH-SIM (phone-SIM) locked state **/
+       TAPI_SIM_STATUS_CARD_CRASHED = 0x0d, /**< Runtime SIM card error **/
+       TAPI_SIM_STATUS_UNKNOWN = 0xff /**<  Unknown status. It can be initial status **/
 } TelSimCardStatus_t;
 
 /**
@@ -284,10 +363,12 @@ typedef enum {
  * This enum gives mailbox type.
  */
 typedef enum {
-       TAPI_SIM_MAILBOX_VOICE = 0x01, /**< CFIS voice*/
-       TAPI_SIM_MAILBOX_VOICE2 = 0x02, /**< CFIS voice*/
-       TAPI_SIM_MAILBOX_FAX = 0x03, /**< CFIS fax*/
-       TAPI_SIM_MAILBOX_DATA = 0x04, /**< CFIS data*/
+       TAPI_SIM_MAILBOX_VOICE = 0x01, /**< Voicemail*/
+       TAPI_SIM_MAILBOX_FAX = 0x02, /**< Fax*/
+       TAPI_SIM_MAILBOX_EMAIL = 0x03, /**< Email*/
+       TAPI_SIM_MAILBOX_OTHER = 0x04, /**< Other*/
+       TAPI_SIM_MAILBOX_VIDEO = 0x05, /**< Videomail*/
+       TAPI_SIM_MAILBOX_DATA = 0x06, /**< Data*/
 } TelSimMailboxType_t;
 
 /**
@@ -482,23 +563,204 @@ typedef enum {
 } TelSimPbType_t;
 
 /**
- * @enum tapi_pb_storage_field_tag_type_t
+ * @enum TelSimPb3GFileType_t
  *  This enumeration defines the different storage field types in 3G Phone book.
  */
 typedef enum {
        /* for 3G phone storage field type */
        TAPI_PB_3G_NAME = 0x01, /**< Name */
        TAPI_PB_3G_NUMBER, /**< Number */
-       TAPI_PB_3G_ANR, /**< Another number */
-       TAPI_PB_3G_EMAIL, /**< Email */
-       TAPI_PB_3G_SNE, /**< Second name entry */
-       TAPI_PB_3G_GRP, /**< Group file */
+       TAPI_PB_3G_ANR1, /**< First Another number*/
+       TAPI_PB_3G_ANR2, /**< Second Another number */
+       TAPI_PB_3G_ANR3, /**< Third Another number */
+       TAPI_PB_3G_EMAIL1, /**< First Email */
+       TAPI_PB_3G_EMAIL2, /**< Second Email */
+       TAPI_PB_3G_EMAIL3, /**< Third Email */
+       TAPI_PB_3G_EMAIL4, /**< Fourth Email */
+       TAPI_PB_3G_SNE, /**< Second name entry of main name*/
+       TAPI_PB_3G_GRP, /**< Group  */
        TAPI_PB_3G_PBC, /** <1 byte control info and 1 byte hidden info*/
-       TAPI_PB_3G_ANRA, /**< Another number */
-       TAPI_PB_3G_ANRB, /**< Another number */
 } TelSimPb3GFileType_t;
 
 /**
+ * @enum TelSimSSTService_t
+ *  This enumeration defines the list of SST services in SIM Service Table. (GSM)
+ */
+typedef enum {
+       // service 1 ~ 8
+       TAPI_SIM_SST_CHV1_DISABLE_FUNC = 0,     /**< CHV1 disable function */
+       TAPI_SIM_SST_ADN,                                       /**< abbreviated Dialing number */
+       TAPI_SIM_SST_FDN,                                       /**< fixed Dialing number */
+       TAPI_SIM_SST_SMS,                                       /**< short message storage */
+       TAPI_SIM_SST_AOC,                                       /**< advice of charge */
+       TAPI_SIM_SST_CCP,                                       /**< capability configuration parameters */
+       TAPI_SIM_SST_PLMN_SELECTOR,                     /**< plmn selector */
+       TAPI_SIM_SST_RFU1,                                      /**< rfu */
+
+       // service 9 ~ 16
+       TAPI_SIM_SST_MSISDN = 8,                        /**< msisdn */
+       TAPI_SIM_SST_EXT1,                                      /**< extension1 */
+       TAPI_SIM_SST_EXT2,                                      /**< extension2 */
+       TAPI_SIM_SST_SMS_PARAMS,                                /**< sms parameteres */
+       TAPI_SIM_SST_LND,                                       /**< last number dialed */
+       TAPI_SIM_SST_CELL_BROADCAST_MSG_ID,     /**< cell broadcast message identifier */
+       TAPI_SIM_SST_GID_LV1,                           /**< group identifier level 1 */
+       TAPI_SIM_SST_GID_LV2,                           /**< group identifier level 2 */
+
+       // service 17 ~ 24
+       TAPI_SIM_SST_SPN = 16,                          /**< service provider name */
+       TAPI_SIM_SST_SDN,                                       /**< service Dialing number */
+       TAPI_SIM_SST_EXT3,                                      /**< extension3 */
+       TAPI_SIM_SST_RFU2,                                      /**< rfu */
+       TAPI_SIM_SST_VGCS_GID_LIST,                     /**< vgcs group identifier (EF-VGCS, EF-VGCSS) */
+       TAPI_SIM_SST_VBS_GID_LIST,                      /**< vbs group identifier (EF-VBS, EF-VBSS) */
+       TAPI_SIM_SST_ENHANCED_MULTI_LV_PRECEDENCE_PREEMPTION_SRVC,      /**< enhanced multi-level precedence and pre-emption service */
+       TAPI_SIM_SST_AUTO_ANSWER_FOR_EMLPP,     /**< automatic answer fro eMLPP */
+
+       // service 25 ~ 32,
+       TAPI_SIM_SST_DATA_DOWNLOAD_VIA_SMS_CB = 24,     /**< data download via sms-cb */
+       TAPI_SIM_SST_DATA_DOWNLOAD_VIA_SMS_PP,          /**< data download via sms-pp */
+       TAPI_SIM_SST_MENU_SELECTION,                                    /**< menu selection */
+       TAPI_SIM_SST_CALL_CTRL,                                         /**< call control */
+       TAPI_SIM_SST_PROACTIVE_SIM,                                     /**< proactive sim command */
+       TAPI_SIM_SST_CELL_BROADCAST_MSG_ID_RANGES,      /**< cell broadcast message identifier ranges */
+       TAPI_SIM_SST_BDN,                                                       /**< barred Dialing numbers */
+       TAPI_SIM_SST_EXT4,                                                      /**< extension 4 */
+
+       // service 33 ~ 40
+       TAPI_SIM_SST_DEPERSONALIZATION_CTRL_KEYS = 32,  /**< de-personalization control keys */
+       TAPI_SIM_SST_COOPERATIVE_NETWORK_LIST,                  /**< co-operative network list */
+       TAPI_SIM_SST_SMS_STATUS_REPORTS,                                        /**< short message status reports */
+       TAPI_SIM_SST_NIA,                                       /**< network's indication of alerting in the MS (NIA) */
+       TAPI_SIM_SST_MO_SMS_CTRL_BY_SIM,                /**< mobile-originated short message control by sim */
+       TAPI_SIM_SST_GPRS,                                      /**< gprs */
+       TAPI_SIM_SST_IMG,                                       /**< image */
+       TAPI_SIM_SST_SOLSA,                                     /**< support of local service area */
+
+       // service 41 ~ 48
+       TAPI_SIM_SST_USSD_STR_DATA_OBJECT_SUPPORTED_IN_CALL_CTRL = 40,  /**< ussd string data object supported in call control */
+       TAPI_SIM_SST_RUN_AT_CMD_CMD,                                                    /**< RUN AT COMMAND command */
+       TAPI_SIM_SST_USER_CTRLED_PLMN_SELECTOR_WACT,                    /**< user controlled PLMN selector with Access technology */
+       TAPI_SIM_SST_OPERATOR_CTRLED_PLMN_SELECTOR_WACT,                /**< operator controlled PLMN selector with Access technology */
+       TAPI_SIM_SST_HPLMN_SELECTOR_WACT,                       /**< HPLMN selector with access technology */
+       TAPI_SIM_SST_CPBCCH_INFO,                                       /**< CPBCCH information */
+       TAPI_SIM_SST_INVESTIGATION_SCAN,                                /**< investigation scan */
+       TAPI_SIM_SST_EXTENDED_CAPA_CONF_PARAMS,         /**< extended capability configuration parameters */
+
+       //      service 49 ~ 56
+       TAPI_SIM_SST_MEXE = 48,                         /**< MExE */
+       TAPI_SIM_SST_RPLMN_LAST_USED_ACCESS_TECH,       /**< RPLMN last used access technology */
+       TAPI_SIM_SST_PLMN_NETWORK_NAME,         /*PLMN Network Name*/
+       TAPI_SIM_SST_OPERATOR_PLMN_LIST,                /*Operator PLMN List*/
+       TAPI_SIM_SST_MBDN,                                      /*Mailbox Dialling Numbers*/
+       TAPI_SIM_SST_MWIS,                                      /*Message Waiting Indication Status*/
+       TAPI_SIM_SST_CFIS,                                      /*Call Forwarding Indication Status*/
+       TAPI_SIM_SST_SPDI,                                      /*Service Provider Display Information*/
+} TelSimSSTService_t;
+
+/**
+ * @enum TelSimUSTService_t
+ *  This enumeration defines the list of UST services in SIM Service Table. (USIM)
+ */
+typedef enum {
+       // service 1 ~ 8
+       TAPI_SIM_UST_LOCAL_PB = 0,              /**< local phone book */
+       TAPI_SIM_UST_FDN,                               /**< fixed Dialing number */
+       TAPI_SIM_UST_EXT2,                              /**< extension2 */
+       TAPI_SIM_UST_SDN,                               /**< service Dialing number */
+       TAPI_SIM_UST_EXT3,                              /**< extension3 */
+       TAPI_SIM_UST_BDN,                               /**< barred Dialing numbers */
+       TAPI_SIM_UST_EXT4,                              /**< extension 4 */
+       TAPI_SIM_UST_OUTGOING_CALL_INFO,        /**< outgoing call information */
+
+       // service 9 ~ 16
+       TAPI_SIM_UST_INCOMING_CALL_INFO = 8,            /**< incoming call information */
+       TAPI_SIM_UST_SMS,                                               /**< short message storage */
+       TAPI_SIM_UST_SMS_STATUS_REPORTS,                        /**< short message status reports */
+       TAPI_SIM_UST_SMS_PARAMS,                                        /**< sms parameteres */
+       TAPI_SIM_UST_AOC,                                               /**< advice of charge */
+       TAPI_SIM_UST_CCP,                                               /**< capability configuration parameters */
+       TAPI_SIM_UST_CELL_BROADCAST_MSG_ID,             /**< cell broadcast message identifier */
+       TAPI_SIM_UST_CELL_BROADCAST_MSG_ID_RANGES,      /**< cell broadcast message identifier ranges */
+
+       // service 17 ~ 24
+       TAPI_SIM_UST_GID_LV1 = 16,                                              /**< group identifier level 1 */
+       TAPI_SIM_UST_GID_LV2,                                                   /**< group identifier level 2 */
+       TAPI_SIM_UST_SPN,                                                               /**< service provider name */
+       TAPI_SIM_UST_USER_CTRLED_PLMN_SELECTOR_WACT,            /**< user controlled PLMN selector with Access technology */
+       TAPI_SIM_UST_MSISDN,                                                                                    /**< msisdn */
+       TAPI_SIM_UST_IMG,                                                                                       /**< image */
+       TAPI_SIM_UST_SOLSA,                                                                                     /**< support of local service area */
+       TAPI_SIM_UST_ENHANCED_MULTI_LV_PRECEDENCE_PREEMPTION_SRVC,      /**< enhanced multi-level precedence and pre-emption service */
+
+       // service 25 ~ 32
+       TAPI_SIM_UST_AUTO_ANSWER_FOR_EMLPP = 24,        /**< automatic answer fro eMLPP */
+       TAPI_SIM_UST_RFU1,                                              /**< rfu */
+       TAPI_SIM_UST_GSM_ACCESS,                                        /**< gsm access */
+       TAPI_SIM_UST_DATA_DOWNLOAD_VIA_SMS_PP,  /**< data download via sms-pp */
+       TAPI_SIM_UST_DATA_DOWNLOAD_VIA_SMS_CB,  /**< data download via sms-cb */
+       TAPI_SIM_UST_CALL_CTRL,                                 /**< call control by usim*/
+       TAPI_SIM_UST_MO_SMS_CTRL,                               /**< mobile-originated short message control by usim */
+       TAPI_SIM_UST_RUN_AT_CMD_CMD,                            /**< RUN AT COMMAND command */
+
+       // service 33 ~ 40
+       TAPI_SIM_UST_SHALL_BE_SET_TO_ONE = 32,  /**< shall be set to 1 */
+       TAPI_SIM_UST_ENABLED_SRVC_TABLE,                        /**< enabled service table */
+       TAPI_SIM_UST_ACL,                                               /**< APN control list */
+       TAPI_SIM_UST_DEPERSONALIZATION_CTRL_KEYS,       /**< de-personalization control keys */
+       TAPI_SIM_UST_COOPERATIVE_NETWORK_LIST,          /**< co-operative network list */
+       TAPI_SIM_UST_GSM_SEC_CONTEXT,                           /**< gsm security context */
+       TAPI_SIM_UST_CPBCCH_INFO,                                       /**< CPBCCH information */
+       TAPI_SIM_UST_INVESTIGATION_SCAN,                                /**< investigation scan */
+
+       // service 41 ~ 48
+       TAPI_SIM_UST_MEXE = 40,                                                         /**< MExE */
+       TAPI_SIM_UST_OPERATOR_CTRLED_PLMN_SELECTOR_WACT,                /**< operator controlled PLMN selector with Access technology */
+       TAPI_SIM_UST_HPLMN_SELECTOR_WACT,       /**< HPLMN selector with access technology */
+       TAPI_SIM_UST_EXT5,                                      /**< extension 5 */
+       TAPI_SIM_UST_PLMN_NETWORK_NAME,         /*PLMN Network Name*/
+       TAPI_SIM_UST_OPERATOR_PLMN_LIST,                /*Operator PLMN List*/
+       TAPI_SIM_UST_MBDN,                                      /*Mailbox Dialling Numbers*/
+       TAPI_SIM_UST_MWIS,                                      /*Message Waiting Indication Status*/
+
+       // service 49 ~ 56
+       TAPI_SIM_UST_CFIS = 48,                                         /*Call Forwarding Indication Status*/
+       TAPI_SIM_UST_RPLMN_LAST_USED_ACCESS_TECH,       /**< RPLMN last used access technology */
+       TAPI_SIM_UST_SPDI,                                                      /*Service Provider Display Information*/
+       TAPI_SIM_UST_MMS,                                                       /**< multi media messaging service */
+       TAPI_SIM_UST_EXT8,                                                      /**< extension 8 */
+       TAPI_SIM_UST_CALL_CTRL_ON_GPRS,                         /**< call control on gprs by usim */
+       TAPI_SIM_UST_MMS_USER_CONNECTIVITY_PARAMS,      /**< mms user connectivity parameters */
+       TAPI_SIM_UST_NIA,                                                       /**< network's indication of alerting in the MS (NIA) */
+
+       // service 57 ~ 64
+       TAPI_SIM_UST_VGCS_GID_LIST = 56,                /**< vgcs group identifier List (EF-VGCS, EF-VGCSS) */
+       TAPI_SIM_UST_VBS_GID_LIST,                      /**< vbs group identifier List (EF-VBS, EF-VBSS) */
+       TAPI_SIM_UST_PSEUDONYM,
+       TAPI_SIM_UST_USER_CTRLED_PLMN_SELECTOR_IWLAN,                   /**< user controlled PLMN selector for I-WLAN access */
+       TAPI_SIM_UST_OPERATOR_CTRLED_PLMN_SELECTOR_IWLAN,               /**< operator controlled PLMN selector for I-WLAN access */
+       TAPI_SIM_UST_USER_CTRLED_WSID_LIST,
+       TAPI_SIM_UST_OPERATOR_CTRLED_WSID_LIST,
+       TAPI_SIM_UST_VGCS_SEC,
+} TelSimUSTService_t;
+
+typedef struct {
+       char service[TAPI_SIM_SST_SERVICE_CNT_MAX];     // should access with 'enum TelSimSSTService_t' as index
+} TelSimSST_t;
+
+typedef struct {
+       char service[TAPI_SIM_UST_SERVICE_CNT_MAX];     // should access with 'enum TelSimUSTService_t' as index
+} TelSimUST_t;
+
+typedef struct {
+       TelSimCardType_t sim_type;
+       union {
+               TelSimSST_t sst;
+               TelSimUST_t ust;
+       } table;
+} TelSimServiceTable_t;
+
+/**
  * This data structure defines the data for the Imsi information.
  */
 typedef struct {
@@ -518,43 +780,108 @@ typedef struct {
        TelSimEcc_t list[15];
 }TelSimEccList_t;
 
-/**
- *This data structure defines the data which is provided a unique identification number for the (U)ICC.
- */
 typedef struct {
        int icc_length; /**< Integrated Circuit Card number length */
        char icc_num[TAPI_SIM_ICCID_LEN_MAX]; /**< Integrated Circuit Card number */
 } TelSimIccIdInfo_t;
 
 typedef struct {
-       int line1;
-       int line2;
-}TelSimCallForwardingInfo_t;
+       int b_cphs;
+       int rec_index; /**< index which stands for the location where record is saved in SIM*/
+       int profile_num; /**< SIM profile index*/
+       TelSimMailboxType_t mb_type;
+       int alpha_id_max_len; /**< alpha max length in SIM - READ ONLY*/
+       char alpha_id[TAPI_SIM_XDN_ALPHA_ID_MAX_LEN + 1]; /**< Alpha Identifier */
+       TelSimTypeOfNum_t ton; /**< Type Of Number */
+       TelSimNumberingPlanIdentity_t npi; /**< Number Plan Identity */
+       char num[TAPI_SIM_XDN_DIALING_NUMBER_LEN + 1]; /**< Dialing Number/SSC String */
+       unsigned char cc_id; /**< Capability/Configuration Identifier */
+       unsigned char ext1_id; /**< Extensiion1 Record Identifier */
+}TelSimMailBoxNumber_t;
+
+typedef struct {
+       int count;
+       TelSimMailBoxNumber_t list[TAPI_SIM_MSP_CNT_MAX*5]; //max is 10
+}TelSimMailboxList_t;
 
 typedef struct {
-       int line1;
-       int line2;
-       int fax;
-       int video;
-}TelSimMessageWaitingInfo_t;
+       int rec_index;
+       unsigned char msp_num; /**< MSP number*/
+       unsigned char cfu_status; /**< call forwarding unconditional indication status*/
+       TelSimTypeOfNum_t ton; /**< TON*/
+       TelSimNumberingPlanIdentity_t npi; /**< NPI*/
+       char cfu_num[TAPI_SIM_XDN_DIALING_NUMBER_LEN + 1];/**< Dialing Number/SSC String*/
+       unsigned char cc2_id; /**< Capability/Configuration2 Record Identifier */
+       unsigned char ext7_id; /**< Extension 7 Record Identifier */
+}TelSimCfis_t;
 
 typedef struct {
-       TelSimMailboxType_t type;
-       char name[TAPI_SIM_XDN_DIALING_NUMBER_LEN+1];
-       char number[TAPI_SIM_XDN_ALPHA_ID_MAX_LEN+1];
-       TelSimTypeOfNum_t ton;
-}TelSimMailboxInfo_t;
+       int profile_count;
+       TelSimCfis_t cf[TAPI_SIM_MSP_CNT_MAX];
+}TelSimCfisList_t;
 
 typedef struct {
-       int count;
-       TelSimMailboxInfo_t list[4]; //max is 4
-}TelSimMailboxList_t;
+       int b_line1; /**< CallForwardUnconditionalLine 1 */
+       int b_line2; /**< CallForwardUnconditionalLine 2 */
+       int b_fax; /**< CallForwardUnconditional FAX */
+       int b_data; /**<CallForwardUnconditional data*/
+}TelSimCphsCf_t;
+
+typedef struct {
+       int b_cphs;
+       TelSimCfisList_t cf_list;
+       TelSimCphsCf_t cphs_cf;
+}TelSimCallForwardingResp_t;
+
+typedef struct {
+       int b_cphs;
+       union {
+               TelSimCfis_t cf;
+               TelSimCphsCf_t cphs_cf;
+       } cf_data_u;
+}TelSimCallForwardingReq_t;
+
+typedef struct {
+       int rec_index;
+       unsigned char indicator_status; /**< Indicator Type*/
+       int voice_count; /**< VoiceMail Count*/
+       int fax_count; /**< FAX Count*/
+       int email_count; /**< Email Count*/
+       int other_count; /**< Other Count*/
+       int video_count; /**< VideoMail Count*/
+}TelSimMwis_t;
+
+typedef struct {
+       int profile_count;
+       TelSimMwis_t mw[TAPI_SIM_MSP_CNT_MAX];
+}TelSimMwisList_t;
+
+typedef struct {
+       int b_voice1; /**< VoiceMsgLine1 message waiting flag */
+       int b_voice2; /**< VoiceMsgLine2 message waiting flag */
+       int b_fax; /**< FAX message waiting flag */
+       int b_data; /**< Data message waiting flag */
+}TelSimCphsMw_t;
+
+typedef struct {
+       int b_cphs;
+       TelSimMwisList_t mw_list;
+       TelSimCphsMw_t cphs_mw;
+}TelSimMessageWaitingResp_t;
+
+typedef struct {
+       int b_cphs;
+       union {
+               TelSimMwis_t mw;
+               TelSimCphsMw_t cphs_mw;
+       } mw_data_u;
+}TelSimMessageWaitingReq_t;
 
 /**
  *     This data structure represents MSISDN information
  */
 typedef struct {
-       char num[TAPI_SIM_XDN_DIALING_NUMBER_LEN + 1]; /**< MSISDN number. If not exist, Null string will be returned*/
+       char num[TAPI_SIM_MSISDN_DIALING_NUMBER_LEN + 1]; /**< MSISDN number. If not exist, Null string will be returned*/
        char name[TAPI_SIM_XDN_ALPHA_ID_MAX_LEN + 1]; /**< MSISDN name. If not exist, Null string will be returned*/
 } TelSimSubscriberInfo_t;
 
@@ -574,6 +901,16 @@ typedef struct {
        TelSimOplmnwact_t list[30]; //max is 30
 }TelSimOplmnwactList_t;
 
+typedef struct {
+       unsigned char display_condition; /**< display condition (1 byte) */
+       unsigned char spn[TAPI_SIM_NET_FULL_NAME_MAX_LEN + 1]; /**< SPN */
+}TelSimSpn_t;
+
+typedef struct {
+       unsigned char full_name[TAPI_SIM_NET_FULL_NAME_MAX_LEN + 1];
+       unsigned char short_name[TAPI_SIM_NET_SHORT_NAME_MAX_LEN + 1];
+}TelSimCphsNetName_t;
+
 /**
  *This is used for authentication request procedure.
  */
@@ -653,7 +990,7 @@ typedef struct {
  * This data structure defines the data for the apdu.
  */
 typedef struct {
-       unsigned char apdu_len;
+       unsigned short apdu_len;
        unsigned char* apdu;
 } TelSimApdu_t;
 
@@ -661,7 +998,7 @@ typedef struct {
  * This data structure defines the data for the Response of sending apdu.
  */
 typedef struct {
-       unsigned char apdu_resp_len;
+       unsigned short apdu_resp_len;
        unsigned char apdu_resp[TAPI_SIM_APDU_MAX_LEN];
 } TelSimApduResp_t;
 
@@ -669,13 +1006,10 @@ typedef struct {
  * This data structure defines the data for the Response of sending apdu.
  */
 typedef struct {
-       unsigned char atr_resp_len;
+       unsigned short atr_resp_len;
        unsigned char atr_resp[TAPI_SIM_APDU_MAX_LEN];
 } TelSimAtrResp_t;
 
-
-/**CPHS related structs **/
-
 /**
  *     This sturcture gives information of available optional CPHS SIM files.
  */
@@ -725,41 +1059,6 @@ typedef struct {
 } TelSimCphsInfo_t;
 
 /*
- DATA FIELD -6F 11: Voice message waiting flag
- Access Conditions:
- READ  CHV1
- UPDATE        CHV1
- */
-/**
- *
- * This struct gives CPHS voice message waiting flag information .
- */
-typedef struct {
-       int bWaitVoiceMsgLine1; /**< VoiceMsgLine 1 */
-       int bWaitVoiceMsgLine2; /**< VoiceMsgLine 2 */
-       int bWaitFaxMsg; /**< FAX Msg */
-       int bWaitDataMsg; /**< Data Msg */
-} TelSimCphsVoiceMsgWaitFlagInfo_t;
-
-/*
- DATA FIELD -6F 13: Call forwarding flags
- Access Conditions:
- READ  CHV1
- UPDATE        CHV1
- */
-/**
- * This struct gives CPHS call forwarding flag information.
- */
-typedef struct {
-       int bCallForwardUnconditionalLine1; /**< CallForwardUnconditionalLine 1 */
-       int bCallForwardUnconditionalLine2; /**< CallForwardUnconditionalLine 2 */
-       int bCallForwardUnconditionalFax; /**< CallForwardUnconditional FAX */
-       int bCallForwardUnconditionalData; /**<CallForwardUnconditional data*/
-       int bCallForwardUnconditionalSms; /**< CallForwardUnconditional SMS */
-       int bCallForwardUnconditionalBearer; /**< CallForwardUnconditional bearer*/
-} TelSimCphsCallForwardingFlagInfo_t;
-
-/*
  DATA FIELD -6F 19: Information Numbers
  Access Conditions:
  READ  CHV1
@@ -966,36 +1265,46 @@ typedef struct {
  */
 typedef struct {
        int b_fdn; /**< Fixed Dialing Number */
-       int b_adn; /**< SIM - ADN(2G phonebook   */
+       int b_adn; /**< SIM - ADN(2G phonebook, Under DF phonebook       */
        int b_sdn; /**< Service Dialing Number  */
        int b_3g; /**< USIM - 3G phonebook */
        int b_aas; /**< Additional number Alpha String phonebook */
        int b_gas; /**< Grouping information Alpha String phonebook */
 } TelSimPbList_t;
 
+/**
+ * This data structure gives the phone book status of current SIM.
+ */
+typedef struct {
+       int init_completed;
+       TelSimPbList_t pb_list;
+} TelSimPbStatus_t;
+
 typedef struct {
        TelSimPbType_t phonebook_type;
        unsigned short index;
        unsigned short next_index; //this field is not used in add/update case
 
-       unsigned char name[60];
+       unsigned char name[TAPI_SIM_PB_RECORD_NAME_MAX_LEN+1];
        TelSimTextEncrypt_t dcs;
 
-       unsigned char number[40];
+       unsigned char number[TAPI_SIM_PB_RECORD_NUMBER_MAX_LEN+1];
        TelSimTypeOfNum_t ton;
 
        /* following field is valid in only USIM*/
-       unsigned char anr1[40];
+       unsigned char sne[TAPI_SIM_PB_RECORD_NAME_MAX_LEN+1];
+       TelSimTextEncrypt_t sne_dcs;
+       unsigned char anr1[TAPI_SIM_PB_RECORD_NUMBER_MAX_LEN+1];
        TelSimTypeOfNum_t anr1_ton;
-       unsigned char anr2[40];
+       unsigned char anr2[TAPI_SIM_PB_RECORD_NUMBER_MAX_LEN+1];
        TelSimTypeOfNum_t anr2_ton;
-       unsigned char anr3[40];
+       unsigned char anr3[TAPI_SIM_PB_RECORD_NUMBER_MAX_LEN+1];
        TelSimTypeOfNum_t anr3_ton;
 
-       unsigned char email1[60];
-       unsigned char email2[60];
-       unsigned char email3[60];
-       unsigned char email4[60];
+       unsigned char email1[TAPI_SIM_PB_RECORD_EMAIL_MAX_LEN+1];
+       unsigned char email2[TAPI_SIM_PB_RECORD_EMAIL_MAX_LEN+1];
+       unsigned char email3[TAPI_SIM_PB_RECORD_EMAIL_MAX_LEN+1];
+       unsigned char email4[TAPI_SIM_PB_RECORD_EMAIL_MAX_LEN+1];
 
        unsigned short group_index; //GRP
        unsigned short pb_control; //PBC
@@ -1019,6 +1328,7 @@ typedef struct {
        unsigned short PbIndexMax; /**< Phone book maximum index */
        unsigned short PbNumLenMax; /**< Phone number maximum length */
        unsigned short PbTextLenMax; /**< Text maximum length */
+       unsigned short PbUsedCount; /**< Phone book used record count */
 } TelSimPbEntryInfo_t;
 
 /**
@@ -1026,10 +1336,10 @@ typedef struct {
  This structure gives 3G phone book capability information.
  */
 typedef struct {
-       TelSimPb3GFileType_t FileType3G; /**< 3G phonebook file type */
-       unsigned short PbIndexMax; /**< max index */
-       unsigned short PbTextMax; /**< max text length */
-       unsigned short TotalRecordCount; /**< total record count */
+       TelSimPb3GFileType_t field_type; /**< 3G phonebook file type */
+       unsigned short index_max; /**< max index */
+       unsigned short text_max; /**< max text length */
+       unsigned short used_count; /**< used record count */
 } TelSimPb3GFileTypeCapabiltyInfo_t;
 
 /**
@@ -1038,7 +1348,7 @@ typedef struct {
  * It refers to EF_PBR
  */
 typedef struct {
-       unsigned char FileTypeCount; /**< phonebook file type count */
+       unsigned short FileTypeCount; /**< phonebook file type count */
        TelSimPb3GFileTypeCapabiltyInfo_t FileTypeInfo[TAPI_SIM_PB_3G_FILE_MAX_COUNT]; /**< phonebook file type information */
 } TelSimPbCapabilityInfo_t;
 
old mode 100644 (file)
new mode 100755 (executable)
index 772e156..5a9a673
@@ -1,5 +1,5 @@
 /*
- * libslp-tapi
+ * tel-plugin-dbus_tapi
  *
  * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved.
  *
@@ -82,7 +82,7 @@ typedef enum {
        TAPI_SS_CB_TYPE_BOIC_NOT_HC, /* 0x03 : Barring Outgoing International Calls
                                                                 except to Home Country */
        TAPI_SS_CB_TYPE_BAIC,                /* 0x04 : Barring All Incoming Calls */
-       TAPI_SS_CB_TYPE_BIC_ROAM,       /* 0x05 : Barring Incoming Calls when roam, 
+       TAPI_SS_CB_TYPE_BIC_ROAM,       /* 0x05 : Barring Incoming Calls when roam,
                                                                        outside of the Home Country */
        TAPI_SS_CB_TYPE_AB,                   /* 0x06 : All Barring Services */
        TAPI_SS_CB_TYPE_AOB,                 /* 0x07 : All Outgoing Barring Services */
@@ -153,7 +153,7 @@ typedef enum {
        TAPI_SS_CLASS_ALL_CS_ASYNC=0x25,              /* 0x25 : All Circuit switched async */
        TAPI_SS_CLASS_ALL_DEDI_PS=0x26,                /* 0x26 : All Dedicated packet Access */
        TAPI_SS_CLASS_ALL_DEDI_PAD=0x27,              /* 0x27 : All Dedicated PAD Access */
-       TAPI_SS_CLASS_ALL_DATA_CDA=0x28,                /*0x28 : All Data CDA*/  
+       TAPI_SS_CLASS_ALL_DATA_CDA=0x28,                /*0x28 : All Data CDA*/
 
        /* PLMN SPECIFIC TELESERVICE */
        TAPI_SS_CLASS_PLMN_TELE_ALL = 0x50,         /*0x50 : PLMN specific teleservices*/
@@ -221,45 +221,51 @@ typedef enum {
  *  Describes whether a supplementary service request was a success or a failure; and if it failed, why.
  */
 typedef enum {
-       TAPI_SS_SUCCESS, /**<  SS operation was successful */
-       TAPI_SS_TIMEREXPIRE, /**< SS operation timer expired on network. */
-       TAPI_SS_UNKNOWNSUBSCRIBER, /**< SS error indicating unknown/illegal subscriber.  */
-       TAPI_SS_BEARERSERVICENOTPROVISIONED, /**<The network returns this error when it is requested to  @n
+       TAPI_SS_SUCCESS=0x0, /**<  SS operation was successful */
+
+       TAPI_SS_UNKNOWNSUBSCRIBER= 0x01, /**< SS error indicating unknown/illegal subscriber.  */
+       TAPI_SS_ILLEGALSUBSCRIBER= 0x09, /**<This error is returned when illegality of the access has been @n
+        established by use of authentication procedure. */
+
+       TAPI_SS_BEARERSERVICENOTPROVISIONED= 0x0a, /**<The network returns this error when it is requested to  @n
         perform an operation on a supplementary service  */
-       TAPI_SS_TELESERVICENOTPROVISIONED, /**<The network returns this error when it is requested to perform  @n
+       TAPI_SS_TELESERVICENOTPROVISIONED= 0x0b, /**<The network returns this error when it is requested to perform  @n
         an operation on a supplementary service  */
-       TAPI_SS_ILLEGALSSOPERATION, /**<This error is returned by the network when it is requested to perform an illegal operation @n
+       TAPI_SS_ILLEGALEQUIPMENT= 0x0c, /**<This error is returned when the IMEI check procedure has shown that  @n
+        the IMEI is blacklisted or not whitelisted  */
+       TAPI_SS_CALLBARRED= 0x0d, /**< This error is returned by the network to the MS when call independent subscriber control procedures are barred by the operator */
+       TAPI_SS_ILLEGALSSOPERATION=0x10, /**<This error is returned by the network when it is requested to perform an illegal operation @n
         which is defined as not applicable for the relevant supplementary service */
-       TAPI_SS_ERRORSTATUS, /**<This error is returned by the network when it is requested to perform an operation @n
+       TAPI_SS_ERRORSTATUS= 0x11, /**<This error is returned by the network when it is requested to perform an operation @n
         which is not compatible with the current status of the relevant supplementary service. */
-       TAPI_SS_NOTAVAILABLE, /**< SS not available in network */
-       TAPI_SS_SUBSCRIPTIONVIOLATION, /**< SS service subscription violation. */
-       TAPI_SS_INCOMPATIBILITY, /**< This error is returned by the network when it is requested for a supplementary service operation incompatible with the @n
+       TAPI_SS_NOTAVAILABLE= 0x12, /**< SS not available in network */
+       TAPI_SS_SUBSCRIPTIONVIOLATION= 0x13, /**< SS service subscription violation. */
+       TAPI_SS_INCOMPATIBILITY= 0x14, /**< This error is returned by the network when it is requested for a supplementary service operation incompatible with the @n
         status of another supplementary service or with the teleservice or bearer service for which the operation is requested */
-       TAPI_SS_SYSTEMFAILURE, /**< This error is returned by the network, when it cannot perform an operation because of a failure in the network */
-       TAPI_SS_DATAMISSING, /**< This error is returned by the network when an optional parameter is missing in an invoke component @n
+       TAPI_SS_FACILITYNOTSUPPORTED= 0x15, /**< SS service facility not supported  */
+       TAPI_SS_ABSENTSUBSCRIBER= 0x1b, /**< This error is returned when the subscriber has activated the detach service or the system detects the absence condition */
+
+       TAPI_SS_SYSTEMFAILURE= 0x22, /**< This error is returned by the network, when it cannot perform an operation because of a failure in the network */
+       TAPI_SS_DATAMISSING= 0x23, /**< This error is returned by the network when an optional parameter is missing in an invoke component @n
         or an inner data structure, while it is required by the context of the request. */
-       TAPI_SS_UNEXPECTEDDATAVALUE, /**< SS error indicating unexpected data value on network side *//**< SS operation barred.  */
-       TAPI_SS_PWREGISTRATIONFAILURE, /**< SS error indicating change password failure. */
-       TAPI_SS_NEGATIVEPWCHECK, /**< SS error indicating negative password check.  */
-       TAPI_SS_FACILITYNOTSUPPORTED, /**< SS service facility not supported  */
-       TAPI_SS_RESOURCESNOTAVAILABLE, /**< SS error indicating resources not available in network.  */
-       TAPI_SS_MAXNOMPTYEXCEEDED, /**< SS error indicating Maximum MPTY is reached.  */
-       TAPI_SS_CALLBARRED, /**< This error is returned by the network to the MS when call independent subscriber control procedures are barred by the operator */
-       TAPI_SS_NUMBEROFPWATTEMPTSVIOLATION, /**< SS error indicating barring password attempts violated.  */
-       TAPI_SS_ABSENTSUBSCRIBER, /**< This error is returned when the subscriber has activated the detach service or the system detects the absence condition */
-       TAPI_SS_ILLEGALSUBSCRIBER, /**<This error is returned when illegality of the access has been @n
-        established by use of authentication procedure. */
-       TAPI_SS_ILLEGALEQUIPMENT, /**<This error is returned when the IMEI check procedure has shown that  @n
-        the IMEI is blacklisted or not whitelisted  */
-       TAPI_SS_USSDBUSY, /**< SS error indicating USSD Busy(Already SS / USSD is ongoing).  */
-       TAPI_SS_UNKNOWNALPHABET, /**< SS error indicating unknown SS data coding of alphabet */
-       TAPI_SS_INVALIDDEFLECTEDTONUMBER, /**< SS error indicating the invalid deflected to number.  */
-       TAPI_SS_DEFLECTIONTOSERVEDSUBSCRIBER, /**< This error is returned if a diversion to the served  @n
+       TAPI_SS_UNEXPECTEDDATAVALUE= 0x24, /**< SS error indicating unexpected data value on network side *//**< SS operation barred.  */
+       TAPI_SS_PWREGISTRATIONFAILURE= 0x25, /**< SS error indicating change password failure. */
+       TAPI_SS_NEGATIVEPWCHECK= 0x26, /**< SS error indicating negative password check.  */
+       TAPI_SS_NUMBEROFPWATTEMPTSVIOLATION= 0x2b, /**< SS error indicating barring password attempts violated.  */
+
+       TAPI_SS_UNKNOWNALPHABET= 0x47, /**< SS error indicating unknown SS data coding of alphabet */
+       TAPI_SS_USSDBUSY= 0x48, /**< SS error indicating USSD Busy(Already SS / USSD is ongoing).  */
+
+       TAPI_SS_REJECTEDBYUSER= 0x79, /**< SS operation rejected by user.  */
+       TAPI_SS_REJECTEDBYNETWORK=0x7a, /**< SS operation rejected by network.  */
+       TAPI_SS_DEFLECTIONTOSERVEDSUBSCRIBER= 0x7b, /**< This error is returned if a diversion to the served  @n
         subscriber's number was requested.  */
-       TAPI_SS_SPECIALSERVICECODE, /**< This error is returned if diversion to a special service code was requested.  */
-       TAPI_SS_REJECTEDBYUSER, /**< SS operation rejected by user.  */
-       TAPI_SS_REJECTEDBYNETWORK, /**< SS operation rejected by network.  */
+       TAPI_SS_SPECIALSERVICECODE= 0x7c, /**< This error is returned if diversion to a special service code was requested.  */
+       TAPI_SS_INVALIDDEFLECTEDTONUMBER= 0x7d, /**< SS error indicating the invalid deflected to number.  */
+       TAPI_SS_MAXNOMPTYEXCEEDED= 0x7e, /**< SS error indicating Maximum MPTY is reached.  */
+       TAPI_SS_RESOURCESNOTAVAILABLE= 0x7f, /**< SS error indicating resources not available in network.  */
+
+       TAPI_SS_TIMEREXPIRE, /**< SS operation timer expired on network. */
        TAPI_SS_NET_NOT_ALLOWED_EMERGENCY_CALLS_ONLY, /**< SS operation is not allowed by network.  */
        TAPI_SS_UNKNOWNERROR, /**< SS error indicating unknown error  */
        TAPI_SS_OEM_NOT_SUPPORTED /**< If oem do not support any of SS requests, then this error will be returned back */
@@ -270,9 +276,9 @@ typedef enum {
  *   These enumerated values should be used as masks
  */
 typedef enum {
-       TAPI_SS_STATUS_ACTIVE, /**< Provisioned & registered & active */
-       TAPI_SS_STATUS_REGISTERED, /**< Provisioned & registered (but not active/active-quiescent */
+       TAPI_SS_STATUS_REGISTERED = 0x01, /**< Provisioned & registered (but not active/active-quiescent */
        TAPI_SS_STATUS_PROVISIONED, /**<Provisioned but not registered (or active/active-quiescent) */
+       TAPI_SS_STATUS_ACTIVE, /**< Provisioned & registered & active */
        TAPI_SS_STATUS_QUIESCENT, /**< Provisioned & registered & active but quiescent */
        TAPI_SS_STATUS_NOTHING /**< Not provisioned */
 } TelSsStatus_t;
@@ -281,7 +287,7 @@ typedef enum {
  * These are the four types of identity presentation / restriction services.
  */
 typedef enum {
-       TAPI_CALLING_LINE_IDENTITY_PRESENTATION, /**< identify the party calling this phone */
+       TAPI_CALLING_LINE_IDENTITY_PRESENTATION= 0x01, /**< identify the party calling this phone */
        TAPI_CALLING_LINE_IDENTITY_RESTRICTION, /**< hide the identity of this phone when calling others */
        TAPI_CONNECTED_LINE_IDENTITY_PRESENTATION, /**< identify the party to whom the calling party (this phone) is connected */
        TAPI_CONNECTED_LINE_IDENTITY_RESTRICTION, /**< restrict yourself from being identified by incoming calls, such as forwarded calls */
@@ -324,6 +330,15 @@ typedef enum {
        TAPI_SS_AOC_TYPE_PUC = 0x08 /**< Specifies the Price per unit and currency.*/
 } TelSsAocType_t;
 
+typedef enum {
+       TAPI_SS_TYPE_BARRING = 0x00,
+       TAPI_SS_TYPE_FORWARDING,
+       TAPI_SS_TYPE_WAITING,
+       TAPI_SS_TYPE_CLI,
+       TAPI_SS_TYPE_SEND_USSD,
+       TAPI_SS_TYPE_MAX
+}TelSsInfoType_t;
+
 /**
  *  This structure  defines the different parameters related to forward info.
  */
@@ -363,6 +378,14 @@ typedef struct {
 } TelSsWaitingInfo_t;
 
 /**
+ *  This structure  defines the SUPS information message notification type.
+ */
+typedef struct {
+       TelSsCause_t Cause; /**< Cause */
+       TelSsInfoType_t SsType; /**< SUPS Information  */
+} TelSsInfo_t;
+
+/**
  * This structure defines the release complete message notification type.
  */
 typedef struct {
@@ -413,7 +436,7 @@ typedef struct {
                TelSsForwardWhen_t ForwardCondition; /**< Call forward types providing various conditions when call can be forwarded */
                int bCallForwardingNumberPresent; /**< Call forwarding number present or not */
                unsigned char NoReplyWaitTime;
-               unsigned char szCallForwardingNumber[TAPI_CALL_DIALDIGIT_LEN_MAX]; /**< forwarded number.[Null Terminated string]*/
+               unsigned char szCallForwardingNumber[TAPI_CALL_DIALDIGIT_LEN_MAX + 1]; /**< forwarded number.[Null Terminated string]*/
        } record[TAPI_SS_RECORD_NUM_MAX]; /**< Specifies the  Maximum of TAPI_SS_RECORD_NUM_MAX records. */
 } TelSsForwardResp_t;
 
old mode 100644 (file)
new mode 100755 (executable)
index 4dbd3a0..8d7e684
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/xattr.h>
 #include <errno.h>
-#include <glib-object.h>
-#include <gio/gio.h>
-
 #include <aul.h>
+#include <appsvc.h>
 #include <bundle.h>
 
 #include "TelSat.h"
 #include "sat_ui_support.h"
+#include "package-manager.h"
+
+struct sat_ui_app_launch_data {
+       bundle *bundle_data; /**<bundle data*/
+       char *slot_info; /**<slot info*/
+};
 
-static gboolean _sat_ui_support_processing_setup_menu_ind(GVariant *data)
+static gpointer __launch_sat_ui_app(gpointer data)
 {
-       gint rv;
+       gint rv = 0;
+       int i = 0;
+       struct sat_ui_app_launch_data *app_data = (struct sat_ui_app_launch_data *)data;
+
+       if(!app_data) {
+               err("app_data does not exist");
+               goto EXIT;
+       }
+       if(!app_data->bundle_data) {
+               err("bundle_data not present");
+               goto EXIT;
+       }
+       if(!app_data->slot_info) {
+               err("slot_info not present");
+               goto EXIT;
+       }
+
+       for (i=0; i<RETRY_MAXCOUNT; i++)
+       {
+               if(g_str_has_suffix(app_data->slot_info , "0")){
+                       dbg("slot 0");
+                       rv = aul_launch_app("org.tizen.sat-ui", app_data->bundle_data);
+               } else if (g_str_has_suffix(app_data->slot_info , "1")){
+                       dbg("slot 1");
+                       rv = aul_launch_app("org.tizen.sat-ui-2", app_data->bundle_data);
+               } else {
+                       err("invalid sim slot id");
+                       break;
+               }
+
+               dbg("AUL return value:[%d]", rv);
+               if ((rv == AUL_R_ECOMM) || (rv == AUL_R_ETERMINATING)) {
+                       err("Need to retry.");
+                       usleep(RELAUNCH_INTERVAL);
+               } else {
+                       dbg("AUL launches SAT UI app");
+                       break;
+               }
+       }
+
+EXIT:
+       if (app_data) {
+               bundle_free(app_data->bundle_data);
+               g_free(app_data->slot_info);
+               g_free(app_data);
+               app_data = NULL;
+       }
+       return NULL;
+}
+
+static gboolean __dispatch_on_new_thread(gchar *name, GThreadFunc thread_cb, gpointer thread_data)
+{
+       GThread *thread;
+       if (!name || !thread_cb) {
+               err("Wrong Input Parameter");
+               return FALSE;
+       }
+       thread = g_thread_new(name, thread_cb, thread_data);
+       if (thread == NULL){
+               return FALSE;
+       }else{
+               dbg("Thread %p is created for %s", thread, name);
+       }
+
+       return TRUE;
+}
+
+static gboolean __sat_ui_support_app_launch(bundle *bundle_data, char *slot_info)
+{
+       struct sat_ui_app_launch_data *app_data = NULL;
+
+       app_data= g_malloc0(sizeof(struct sat_ui_app_launch_data));
+       if (!app_data) {
+               err("malloc failed");
+               return FALSE;
+       }
+       app_data->bundle_data = bundle_data;
+       app_data->slot_info = g_strdup(slot_info);
+
+       if (FALSE == __dispatch_on_new_thread((gchar *)"SAT UI app", __launch_sat_ui_app, (gpointer)app_data)) {
+               err("Unable to create thread");
+               bundle_free(app_data->bundle_data);
+               g_free(app_data->slot_info);
+               g_free(app_data);
+               app_data = NULL;
+               return FALSE;
+       }
+       return TRUE;
+}
+
+static gboolean _sat_ui_support_processing_setup_menu_ind(GVariant *data, char *slot_info)
+{
+       gboolean rv = FALSE;
        bundle *bundle_data = 0;
        gchar *encoded_data = NULL, *cmd_type = NULL;
        TelSatSetupMenuInfo_t setup_menu;
 
-       gchar *title;
+       gchar *title = NULL;
        gint command_id, item_cnt;
        gboolean b_present, b_helpinfo, b_updated;
-       GVariant *items = NULL, *icon_id, *icon_list;
-
+       GVariant *items = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       GVariant *icon_id, *icon_list;
+       int local_index = 0, icon_index = 0;
+       /* Used to get menu items */
+       GVariant *unbox;
+       GVariantIter *iter, *iter2;
+       gchar *item_str;
+       gint item_id;
+       /* Used to get icon data */
+       gboolean is_exist;
+       gint icon_quali, icon_identifier, width, height, ics, icon_data_len;
+       gchar *icon_data = NULL;
+       /* Used to get icon list data */
+       GVariant *unbox_list, *unbox_list_info ;
+       GVariant *icon_list_info;
+       gboolean is_list_exist;
+       gint icon_list_quali, list_cnt, icon_list_identifier, list_width, list_height, list_ics, icon_list_data_len;
+       gchar *icon_list_data = NULL;
+#else
+       int local_index = 0;
+       GVariant *unbox;
+       GVariantIter *iter;
+       gchar *item_str;
+       gint item_id;
+#endif
        memset(&setup_menu, 0, sizeof(TelSatSetupMenuInfo_t));
 
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        g_variant_get(data, "(ibs@vibb@v@v)", &command_id, &b_present, &title, &items, &item_cnt,
                                &b_helpinfo, &b_updated, &icon_id, &icon_list);
-
+#else
+       g_variant_get(data, "(ibs@vibb)", &command_id, &b_present, &title, &items, &item_cnt,
+                               &b_helpinfo, &b_updated);
+#endif
        setup_menu.commandId = command_id;
        setup_menu.bIsMainMenuPresent = (b_present ? 1 : 0);
        memcpy(setup_menu.satMainTitle, title, TAPI_SAT_DEF_TITLE_LEN_MAX+1);
+       g_free(title);
+
        setup_menu.satMainMenuNum = item_cnt;
        if(items && item_cnt > 0){
-               int index = 0;
-               GVariant *unbox;
-               GVariantIter *iter;
-
-               gchar *item_str;
-               gint item_id;
                unbox = g_variant_get_variant(items);
                dbg("items(%p) items type_format(%s)", items, g_variant_get_type_string(unbox));
 
                g_variant_get(unbox, "a(si)", &iter);
                while(g_variant_iter_loop(iter,"(si)",&item_str, &item_id)){
-                       setup_menu.satMainMenuItem[index].itemId = item_id;
-                       memcpy(setup_menu.satMainMenuItem[index].itemString, item_str, TAPI_SAT_DEF_ITEM_STR_LEN_MAX + 6);
-                       index++;
+                       setup_menu.satMainMenuItem[local_index].itemId = item_id;
+                       memcpy(setup_menu.satMainMenuItem[local_index].itemString, item_str, TAPI_SAT_DEF_ITEM_STR_LEN_MAX + 6);
+                       local_index++;
                }
                g_variant_iter_free(iter);
        }
        setup_menu.bIsSatMainMenuHelpInfo = (b_helpinfo ? 1 : 0);
        setup_menu.bIsUpdatedSatMainMenu = (b_updated ? 1 : 0);
 
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       if(icon_id) {
+               unbox = g_variant_get_variant(icon_id);
+               g_variant_get(unbox, "a(biiiiiis)", &iter);
+
+               while(g_variant_iter_loop(iter,"(biiiiiis)", &is_exist, &icon_quali, &icon_identifier, &width, &height, &ics, &icon_data_len, &icon_data)){
+                       if(!is_exist)
+                               break;
+                       setup_menu.iconId.bIsPresent = is_exist;
+                       setup_menu.iconId.iconQualifier = icon_quali;
+                       setup_menu.iconId.iconIdentifier = icon_identifier;
+                       setup_menu.iconId.iconInfo.width = width;
+                       setup_menu.iconId.iconInfo.height = height;
+                       setup_menu.iconId.iconInfo.ics = ics;
+                       if(icon_data_len > 0) {
+                               setup_menu.iconId.iconInfo.iconDataLen = icon_data_len;
+                               memcpy(setup_menu.iconId.iconInfo.iconFile, icon_data, icon_data_len);
+                       }
+                       dbg("icon exist(%d), icon_quali: (%d), icon_id: (%d), width: (%d), height: (%d), ics: (%d), icon_data_len: (%d)", setup_menu.iconId.bIsPresent, setup_menu.iconId.iconQualifier, setup_menu.iconId.iconIdentifier, setup_menu.iconId.iconInfo.width,
+                               setup_menu.iconId.iconInfo.height, setup_menu.iconId.iconInfo.ics, setup_menu.iconId.iconInfo.iconDataLen);
+               }
+               g_variant_iter_free(iter);
+       }
+
+       if(icon_list){
+               unbox_list = g_variant_get_variant(icon_list);
+               g_variant_get(unbox_list, "a(biiv)", &iter);
+
+               while(g_variant_iter_loop(iter,"(biiv)", &is_list_exist, &icon_list_quali, &list_cnt, &icon_list_info)){
+                       if(!is_list_exist)
+                               break;
+                       setup_menu.iconIdList.bIsPresent = is_list_exist;
+                       setup_menu.iconIdList.iconListQualifier = icon_list_quali;
+                       setup_menu.iconIdList.iconCount = list_cnt;
+
+                       unbox_list_info = g_variant_get_variant(icon_list_info);
+                       g_variant_get(unbox_list_info, "a(iiiiis)", &iter2);
+
+                       while(g_variant_iter_loop(iter2,"(iiiiis)",&icon_list_identifier, &list_width, &list_height, &list_ics, &icon_list_data_len, &icon_list_data)){
+                               setup_menu.iconIdList.iconIdentifierList[icon_index]= icon_identifier;
+                               setup_menu.iconIdList.iconInfo[icon_index].width = list_width;
+                               setup_menu.iconIdList.iconInfo[icon_index].height = list_height;
+                               setup_menu.iconIdList.iconInfo[icon_index].ics = list_ics;
+                               if(icon_list_data_len > 0) {
+                                       setup_menu.iconIdList.iconInfo[icon_index].iconDataLen = icon_list_data_len;
+                                       memcpy(setup_menu.iconIdList.iconInfo[icon_index].iconFile, icon_list_data, icon_list_data_len);
+                               }
+                               icon_index++;
+                       }
+                       g_variant_iter_free(iter2);
+               }
+               g_variant_iter_free(iter);
+       }
+#endif
        cmd_type = g_strdup_printf("%d", SAT_PROATV_CMD_SETUP_MENU);
        encoded_data = g_base64_encode((const guchar*)&setup_menu, sizeof(TelSatSetupMenuInfo_t));
 
@@ -60,41 +237,78 @@ static gboolean _sat_ui_support_processing_setup_menu_ind(GVariant *data)
        bundle_add(bundle_data, "KEY_EXEC_TYPE", "1");
        bundle_add(bundle_data, "cmd_type", cmd_type);
        bundle_add(bundle_data, "data", encoded_data);
+       bundle_add(bundle_data, "slot_id", slot_info);
 
-       rv = aul_launch_app("com.samsung.sat-ui", bundle_data);
-       dbg("setup menu ind (%d)", rv);
+       rv = __sat_ui_support_app_launch(bundle_data, slot_info);
 
-       bundle_free(bundle_data);
        g_free(encoded_data);
        g_free(cmd_type);
 
-       return TRUE;
+       return rv;
 }
 
-static gboolean _sat_ui_support_processing_display_text_ind(GVariant *data)
+static gboolean _sat_ui_support_processing_display_text_ind(GVariant *data, char *slot_info)
 {
-       gint rv;
+       gboolean rv = FALSE;
        bundle *bundle_data = 0;
        gchar *encoded_data = NULL, *cmd_type = NULL;
        TelSatDisplayTextInd_t display_text;
 
-       gchar* text;
+       gchar* text = NULL;
        gint command_id, text_len, duration;
        gboolean high_priority, user_rsp_required, immediately_rsp;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id = NULL;
-
+       GVariant *unbox = NULL;
+       gboolean is_exist;
+       gint icon_quali, icon_identifier, width, height, ics, icon_data_len;
+       gchar *icon_data = NULL;
+       GVariantIter *iter;
+#endif
        memset(&display_text, 0, sizeof(TelSatDisplayTextInd_t));
 
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        g_variant_get(data, "(isiibbb@v)", &command_id, &text, &text_len, &duration,
                &high_priority, &user_rsp_required, &immediately_rsp, &icon_id);
-
+#else
+       g_variant_get(data, "(isiibbb)", &command_id, &text, &text_len, &duration,
+               &high_priority, &user_rsp_required, &immediately_rsp);
+#endif
        display_text.commandId = command_id;
        memcpy(display_text.text.string, text, TAPI_SAT_DEF_TEXT_STRING_LEN_MAX+1);
+       g_free(text);
+
        display_text.text.stringLen = text_len;
        display_text.duration = duration;
        display_text.bIsPriorityHigh = (high_priority ? 1 : 0);
        display_text.bIsUserRespRequired = (user_rsp_required ? 1 : 0);
-       dbg("duration(%d) user_rsp(%d)", duration, user_rsp_required);
+       display_text.b_immediately_resp = (immediately_rsp ? 1 : 0);
+
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       if(icon_id) {
+               unbox = g_variant_get_variant(icon_id);
+               g_variant_get(unbox, "a(biiiiiis)", &iter);
+
+               while(g_variant_iter_loop(iter,"(biiiiiis)", &is_exist, &icon_quali, &icon_identifier, &width, &height, &ics, &icon_data_len, &icon_data)) {
+                       if(!is_exist)
+                               break;
+                       display_text.iconId.bIsPresent = is_exist;
+                       display_text.iconId.iconQualifier = icon_quali;
+                       display_text.iconId.iconIdentifier = icon_identifier;
+                       display_text.iconId.iconInfo.width = width;
+                       display_text.iconId.iconInfo.height = height;
+                       display_text.iconId.iconInfo.ics = ics;
+                       if(icon_data_len > 0) {
+                               display_text.iconId.iconInfo.iconDataLen = icon_data_len;
+                               memcpy(display_text.iconId.iconInfo.iconFile, icon_data, icon_data_len);
+                       }
+                       dbg("icon exist(%d), icon_quali: (%d), icon_id: (%d), width: (%d), height: (%d), ics: (%d), icon_data_len: (%d)", display_text.iconId.bIsPresent, display_text.iconId.iconQualifier, display_text.iconId.iconIdentifier, display_text.iconId.iconInfo.width,
+                               display_text.iconId.iconInfo.height, display_text.iconId.iconInfo.ics, display_text.iconId.iconInfo.iconDataLen);
+               }
+               g_variant_iter_free(iter);
+       }
+#endif
+       dbg("duration(%d) user_rsp(%d) immediately_rsp(%d)", duration, user_rsp_required, immediately_rsp);
 
        cmd_type = g_strdup_printf("%d", SAT_PROATV_CMD_DISPLAY_TEXT);
        encoded_data = g_base64_encode((const guchar*)&display_text, sizeof(TelSatDisplayTextInd_t));
@@ -103,60 +317,137 @@ static gboolean _sat_ui_support_processing_display_text_ind(GVariant *data)
        bundle_add(bundle_data, "KEY_EXEC_TYPE", "1");
        bundle_add(bundle_data, "cmd_type", cmd_type);
        bundle_add(bundle_data, "data", encoded_data);
+       bundle_add(bundle_data, "slot_id", slot_info);
 
-       rv = aul_launch_app("com.samsung.sat-ui", bundle_data);
-       dbg("display text ind (%d)", rv);
+       rv = __sat_ui_support_app_launch(bundle_data, slot_info);
 
-       bundle_free(bundle_data);
        g_free(encoded_data);
        g_free(cmd_type);
 
-       return TRUE;
+       return rv;
 }
 
-static gboolean _sat_ui_support_processing_select_item_ind(GVariant *data)
+static gboolean _sat_ui_support_processing_select_item_ind(GVariant *data, char *slot_info)
 {
-       gint rv;
+       gboolean rv = FALSE;
        bundle *bundle_data = 0;
        gchar *encoded_data = NULL, *cmd_type = NULL;
        TelSatSelectItemInd_t select_item;
 
        gboolean help_info ;
-       gchar *selected_text;
+       gchar *selected_text = NULL;
        gint command_id, default_item_id, menu_cnt, text_len =0;
-       GVariant *menu_items, *icon_id, *icon_list;
-
+       GVariant *menu_items;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       GVariant *icon_id, *icon_list;
+       int local_index = 0, icon_index = 0;
+       /* Used to get menu items */
+       GVariant *unbox;
+       GVariantIter *iter, *iter2;
+       gchar *item_str;
+       gint item_id, item_len;
+       /* Used to get icon data */
+       gboolean is_exist;
+       gint icon_quali, icon_identifier, width, height, ics, icon_data_len;
+       gchar *icon_data = NULL;
+       /* Used to get icon list data */
+       GVariant *unbox_list, *unbox_list_info ;
+       GVariant *icon_list_info;
+       gboolean is_list_exist;
+       gint icon_list_quali, list_cnt, icon_list_identifier, list_width, list_height, list_ics, icon_list_data_len;
+       gchar *icon_list_data = NULL;
+#else
+       int local_index = 0;
+       GVariant *unbox;
+       GVariantIter *iter;
+       gchar *item_str;
+       gint item_id, item_len;
+#endif
        memset(&select_item, 0, sizeof(TelSatSelectItemInd_t));
 
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        g_variant_get(data, "(ibsiii@v@v@v)", &command_id, &help_info, &selected_text,
                &text_len, &default_item_id, &menu_cnt, &menu_items, &icon_id, &icon_list);
-
+#else
+       g_variant_get(data, "(ibsiii@v)", &command_id, &help_info, &selected_text,
+               &text_len, &default_item_id, &menu_cnt, &menu_items);
+#endif
        select_item.commandId = command_id;
        select_item.bIsHelpInfoAvailable = (help_info ? 1 : 0);
-       memcpy(select_item.text.string, selected_text, TAPI_SAT_DEF_TITLE_LEN_MAX+1);
+       memcpy(select_item.text.string, selected_text, TAPI_SAT_DEF_TEXT_STRING_LEN_MAX+1);
+       g_free(selected_text);
+
        select_item.text.stringLen = text_len;
        select_item.defaultItemIndex = default_item_id;
        select_item.menuItemCount = menu_cnt;
        if(menu_items && menu_cnt > 0){
-               int index = 0;
-               GVariant *unbox;
-               GVariantIter *iter;
-
-               gchar *item_str;
-               gint item_id, item_len;
                unbox = g_variant_get_variant(menu_items);
                dbg("items(%p) items type_format(%s)", menu_items, g_variant_get_type_string(unbox));
 
                g_variant_get(unbox, "a(iis)", &iter);
                while(g_variant_iter_loop(iter,"(iis)",&item_id, &item_len, &item_str)){
-                       select_item.menuItem[index].itemId = item_id;
-                       select_item.menuItem[index].textLen = item_len;
-                       memcpy(select_item.menuItem[index].text, item_str, TAPI_SAT_ITEM_TEXT_LEN_MAX + 1);
-                       index++;
+                       select_item.menuItem[local_index].itemId = item_id;
+                       select_item.menuItem[local_index].textLen = item_len;
+                       memcpy(select_item.menuItem[local_index].text, item_str, TAPI_SAT_ITEM_TEXT_LEN_MAX + 1);
+                       local_index++;
+               }
+               g_variant_iter_free(iter);
+       }
+
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       if(icon_id) {
+               unbox = g_variant_get_variant(icon_id);
+               g_variant_get(unbox, "a(biiiiiis)", &iter);
+
+               while(g_variant_iter_loop(iter,"(biiiiiis)", &is_exist, &icon_quali, &icon_identifier, &width, &height, &ics, &icon_data_len, &icon_data)) {
+                       if(!is_exist)
+                               break;
+                       select_item.iconId.bIsPresent = is_exist;
+                       select_item.iconId.iconQualifier = icon_quali;
+                       select_item.iconId.iconIdentifier = icon_identifier;
+                       select_item.iconId.iconInfo.width = width;
+                       select_item.iconId.iconInfo.height = height;
+                       select_item.iconId.iconInfo.ics = ics;
+                       if(icon_data_len > 0) {
+                               select_item.iconId.iconInfo.iconDataLen = icon_data_len;
+                               memcpy(select_item.iconId.iconInfo.iconFile, icon_data, icon_data_len);
+                       }
+                       dbg("icon exist(%d), icon_quali: (%d), icon_id: (%d), width: (%d), height: (%d), ics: (%d), icon_data_len: (%d)", select_item.iconId.bIsPresent, select_item.iconId.iconQualifier, select_item.iconId.iconIdentifier, select_item.iconId.iconInfo.width,
+                                       select_item.iconId.iconInfo.height, select_item.iconId.iconInfo.ics, select_item.iconId.iconInfo.iconDataLen);
                }
                g_variant_iter_free(iter);
        }
 
+       if(icon_list){
+               unbox_list = g_variant_get_variant(icon_list);
+               g_variant_get(unbox_list, "a(biiv)", &iter);
+
+               while(g_variant_iter_loop(iter,"(biiv)", &is_list_exist, &icon_list_quali, &list_cnt, &icon_list_info)) {
+                       if(!is_list_exist)
+                               break;
+                       select_item.iconIdList.bIsPresent = is_list_exist;
+                       select_item.iconIdList.iconListQualifier = icon_list_quali;
+                       select_item.iconIdList.iconCount = list_cnt;
+
+                       unbox_list_info = g_variant_get_variant(icon_list_info);
+                       g_variant_get(unbox_list_info, "a(iiiiis)", &iter2);
+
+                       while(g_variant_iter_loop(iter2,"(iiiiis)",&icon_list_identifier, &list_width, &list_height, &list_ics, &icon_list_data_len, &icon_list_data)){
+                               select_item.iconIdList.iconIdentifierList[icon_index]= icon_identifier;
+                               select_item.iconIdList.iconInfo[icon_index].width = list_width;
+                               select_item.iconIdList.iconInfo[icon_index].height = list_height;
+                               select_item.iconIdList.iconInfo[icon_index].ics = list_ics;
+                               if(icon_list_data_len > 0) {
+                                       select_item.iconIdList.iconInfo[icon_index].iconDataLen = icon_list_data_len;
+                                       memcpy(select_item.iconIdList.iconInfo[icon_index].iconFile, icon_list_data, icon_list_data_len);
+                               }
+                               icon_index++;
+                       }
+                       g_variant_iter_free(iter2);
+               }
+               g_variant_iter_free(iter);
+       }
+#endif
        cmd_type = g_strdup_printf("%d", SAT_PROATV_CMD_SELECT_ITEM);
        encoded_data = g_base64_encode((const guchar*)&select_item, sizeof(TelSatSelectItemInd_t));
 
@@ -164,20 +455,19 @@ static gboolean _sat_ui_support_processing_select_item_ind(GVariant *data)
        bundle_add(bundle_data, "KEY_EXEC_TYPE", "1");
        bundle_add(bundle_data, "cmd_type", cmd_type);
        bundle_add(bundle_data, "data", encoded_data);
+       bundle_add(bundle_data, "slot_id", slot_info);
 
-       rv = aul_launch_app("com.samsung.sat-ui", bundle_data);
-       dbg("select item aul (%d)", rv);
+       rv = __sat_ui_support_app_launch(bundle_data, slot_info);
 
-       bundle_free(bundle_data);
        g_free(encoded_data);
        g_free(cmd_type);
 
-       return TRUE;
+       return rv;
 }
 
-static gboolean _sat_ui_support_processing_get_inkey_ind(GVariant *data)
+static gboolean _sat_ui_support_processing_get_inkey_ind(GVariant *data, char *slot_info)
 {
-       gint rv;
+       gboolean rv = FALSE;
        bundle *bundle_data = 0;
        gchar *encoded_data = NULL, *cmd_type = NULL;
        TelSatGetInkeyInd_t get_inkey;
@@ -185,23 +475,59 @@ static gboolean _sat_ui_support_processing_get_inkey_ind(GVariant *data)
        gint command_id, key_type, input_character_mode;
        gint text_len, duration;
        gboolean b_numeric, b_help_info;
-       gchar *text;
+       gchar *text = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id;
-
+       GVariant *unbox = NULL;
+       gboolean is_exist;
+       gint icon_quali, icon_identifier, width, height, ics, icon_data_len;
+       gchar *icon_data = NULL;
+       GVariantIter *iter;
+#endif
        memset(&get_inkey, 0, sizeof(TelSatGetInkeyInd_t));
 
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        g_variant_get(data, "(iiibbsii@v)", &command_id, &key_type, &input_character_mode,
                &b_numeric,&b_help_info, &text, &text_len, &duration, &icon_id);
-
+#else
+       g_variant_get(data, "(iiibbsii)", &command_id, &key_type, &input_character_mode,
+               &b_numeric,&b_help_info, &text, &text_len, &duration);
+#endif
        get_inkey.commandId = command_id;
        get_inkey.keyType = key_type;
        get_inkey.inputCharMode = input_character_mode;
        get_inkey.bIsNumeric = (b_numeric ? 1 : 0);
        get_inkey.bIsHelpInfoAvailable = (b_help_info ? 1 : 0);
        memcpy(get_inkey.text.string, text, TAPI_SAT_DEF_TEXT_STRING_LEN_MAX+1);
+       g_free(text);
+
        get_inkey.text.stringLen = text_len;
        get_inkey.duration = duration;
 
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       if(icon_id) {
+               unbox = g_variant_get_variant(icon_id);
+               g_variant_get(unbox, "a(biiiiiis)", &iter);
+
+               while(g_variant_iter_loop(iter,"(biiiiiis)", &is_exist, &icon_quali, &icon_identifier, &width, &height, &ics, &icon_data_len, &icon_data)) {
+                       if(!is_exist)
+                       break;
+                       get_inkey.iconId.bIsPresent = is_exist;
+                       get_inkey.iconId.iconQualifier = icon_quali;
+                       get_inkey.iconId.iconIdentifier = icon_identifier;
+                       get_inkey.iconId.iconInfo.width = width;
+                       get_inkey.iconId.iconInfo.height = height;
+                       get_inkey.iconId.iconInfo.ics = ics;
+                       if(icon_data_len > 0) {
+                               get_inkey.iconId.iconInfo.iconDataLen = icon_data_len;
+                               memcpy(get_inkey.iconId.iconInfo.iconFile, icon_data, icon_data_len);
+                       }
+                       dbg("icon exist(%d), icon_quali: (%d), icon_id: (%d), width: (%d), height: (%d), ics: (%d), icon_data_len: (%d)", get_inkey.iconId.bIsPresent, get_inkey.iconId.iconQualifier, get_inkey.iconId.iconIdentifier, get_inkey.iconId.iconInfo.width,
+                               get_inkey.iconId.iconInfo.height, get_inkey.iconId.iconInfo.ics, get_inkey.iconId.iconInfo.iconDataLen);
+               }
+               g_variant_iter_free(iter);
+       }
+#endif
        cmd_type = g_strdup_printf("%d", SAT_PROATV_CMD_GET_INKEY);
        encoded_data = g_base64_encode((const guchar*)&get_inkey, sizeof(TelSatGetInkeyInd_t));
 
@@ -209,20 +535,19 @@ static gboolean _sat_ui_support_processing_get_inkey_ind(GVariant *data)
        bundle_add(bundle_data, "KEY_EXEC_TYPE", "1");
        bundle_add(bundle_data, "cmd_type", cmd_type);
        bundle_add(bundle_data, "data", encoded_data);
+       bundle_add(bundle_data, "slot_id", slot_info);
 
-       rv = aul_launch_app("com.samsung.sat-ui", bundle_data);
-       dbg("get inkey aul (%d)", rv);
+       rv = __sat_ui_support_app_launch(bundle_data, slot_info);
 
-       bundle_free(bundle_data);
        g_free(encoded_data);
        g_free(cmd_type);
 
-       return TRUE;
+       return rv;
 }
 
-static gboolean _sat_ui_support_processing_get_input_ind(GVariant *data)
+static gboolean _sat_ui_support_processing_get_input_ind(GVariant *data, char *slot_info)
 {
-       gint rv;
+       gboolean rv = FALSE;
        bundle *bundle_data = 0;
        gchar *encoded_data = NULL, *cmd_type = NULL;
        TelSatGetInputInd_t get_input;
@@ -230,14 +555,24 @@ static gboolean _sat_ui_support_processing_get_input_ind(GVariant *data)
        gint command_id, input_character_mode;
        gint text_len, def_text_len, rsp_len_min, rsp_len_max;
        gboolean b_numeric, b_help_info, b_echo_input;
-       gchar *text, *def_text;
+       gchar *text = NULL, *def_text = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        GVariant *icon_id;
-
+       GVariant *unbox = NULL;
+       gboolean is_exist;
+       gint icon_quali, icon_identifier, width, height, ics, icon_data_len;
+       gchar *icon_data = NULL;
+       GVariantIter *iter;
+#endif
        memset(&get_input, 0, sizeof(TelSatGetInputInd_t));
 
+#if defined(TIZEN_SUPPORT_SAT_ICON)
        g_variant_get(data, "(iibbbsiiisi@v)", &command_id, &input_character_mode, &b_numeric, &b_help_info, &b_echo_input,
                &text, &text_len, &rsp_len_max, &rsp_len_min, &def_text, &def_text_len, &icon_id);
-
+#else
+       g_variant_get(data, "(iibbbsiiisi)", &command_id, &input_character_mode, &b_numeric, &b_help_info, &b_echo_input,
+               &text, &text_len, &rsp_len_max, &rsp_len_min, &def_text, &def_text_len);
+#endif
        get_input.commandId = command_id;
        get_input.inputCharMode = input_character_mode;
        get_input.bIsNumeric = (b_numeric ? 1 : 0);
@@ -249,7 +584,33 @@ static gboolean _sat_ui_support_processing_get_input_ind(GVariant *data)
        get_input.respLen.min = rsp_len_min;
        memcpy(get_input.defaultText.string, def_text, TAPI_SAT_DEF_TEXT_STRING_LEN_MAX+1);
        get_input.defaultText.stringLen = def_text_len;
-
+       g_free(text);
+       g_free(def_text);
+
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       if(icon_id) {
+               unbox = g_variant_get_variant(icon_id);
+               g_variant_get(unbox, "a(biiiiiis)", &iter);
+
+               while(g_variant_iter_loop(iter,"(biiiiiis)", &is_exist, &icon_quali, &icon_identifier, &width, &height, &ics, &icon_data_len, &icon_data)) {
+                       if(!is_exist)
+                               break;
+                       get_input.iconId.bIsPresent = is_exist;
+                       get_input.iconId.iconQualifier = icon_quali;
+                       get_input.iconId.iconIdentifier = icon_identifier;
+                       get_input.iconId.iconInfo.width = width;
+                       get_input.iconId.iconInfo.height = height;
+                       get_input.iconId.iconInfo.ics = ics;
+                       if(icon_data_len > 0) {
+                               get_input.iconId.iconInfo.iconDataLen = icon_data_len;
+                               memcpy(get_input.iconId.iconInfo.iconFile, icon_data, icon_data_len);
+                       }
+                       dbg("icon exist(%d), icon_quali: (%d), icon_id: (%d), width: (%d), height: (%d), ics: (%d), icon_data_len: (%d)", get_input.iconId.bIsPresent, get_input.iconId.iconQualifier, get_input.iconId.iconIdentifier, get_input.iconId.iconInfo.width,
+                               get_input.iconId.iconInfo.height, get_input.iconId.iconInfo.ics, get_input.iconId.iconInfo.iconDataLen);
+               }
+               g_variant_iter_free(iter);
+       }
+#endif
        cmd_type = g_strdup_printf("%d", SAT_PROATV_CMD_GET_INPUT);
        encoded_data = g_base64_encode((const guchar*)&get_input, sizeof(TelSatGetInputInd_t));
 
@@ -257,56 +618,291 @@ static gboolean _sat_ui_support_processing_get_input_ind(GVariant *data)
        bundle_add(bundle_data, "KEY_EXEC_TYPE", "1");
        bundle_add(bundle_data, "cmd_type", cmd_type);
        bundle_add(bundle_data, "data", encoded_data);
+       bundle_add(bundle_data, "slot_id", slot_info);
 
-       rv = aul_launch_app("com.samsung.sat-ui", bundle_data);
-       dbg("get input aul (%d)", rv);
+       rv = __sat_ui_support_app_launch(bundle_data, slot_info);
+
+       g_free(encoded_data);
+       g_free(cmd_type);
+
+       return rv;
+}
+
+static gboolean _sat_ui_support_processing_refresh_ind(GVariant *data, char *slot_info)
+{
+       gboolean rv = FALSE;
+       bundle *bundle_data = 0;
+       gchar *encoded_data = NULL, *cmd_type = NULL;
+       TelSatRefreshIndUiInfo_t refresh_info;
+
+       gint command_id = 0;
+       gint refresh_type =0;
+       GVariant *file_list = NULL;
+
+       memset(&refresh_info, 0, sizeof(TelSatRefreshIndUiInfo_t));
+
+       dbg("refresh type_format(%s)", g_variant_get_type_string(data));
+       g_variant_get(data, "(ii@v)", &command_id, &refresh_type, &file_list);
+
+       refresh_info.commandId = command_id;
+
+       refresh_info.duration = 3000;
+
+#if defined(TIZEN_SUPPORT_STK_HIDE_ALPHA_ID)
+       refresh_info.duration = 0;
+#endif
+
+       refresh_info.refreshType = refresh_type;
+
+       cmd_type = g_strdup_printf("%d", SAT_PROATV_CMD_REFRESH);
+       encoded_data = g_base64_encode((const guchar*)&refresh_info, sizeof(TelSatRefreshIndUiInfo_t));
+
+       bundle_data = bundle_create();
+       bundle_add(bundle_data, "KEY_EXEC_TYPE", "1");
+       bundle_add(bundle_data, "cmd_type", cmd_type);
+       bundle_add(bundle_data, "data", encoded_data);
+       bundle_add(bundle_data, "slot_id", slot_info);
+
+       rv = __sat_ui_support_app_launch(bundle_data, slot_info);
+
+       g_free(encoded_data);
+       g_free(cmd_type);
+
+       return rv;
+}
+
+static gboolean _sat_ui_support_processing_play_tone_ind(GVariant *data, char *slot_info)
+{
+       gboolean rv = FALSE;
+       bundle *bundle_data = 0;
+       gchar *encoded_data = NULL, *cmd_type = NULL;
+       TelSatPlayToneInd_t play_tone_info;
+
+       gint command_id, tone_type, duration;
+       gint text_len;
+       gchar* text = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       GVariant *icon_id;
+       GVariant *unbox = NULL;
+       gboolean is_exist;
+       gint icon_quali, icon_identifier, width, height, ics, icon_data_len;
+       gchar *icon_data = NULL;
+       GVariantIter *iter;
+#endif
+       memset(&play_tone_info, 0, sizeof(TelSatPlayToneInd_t));
+
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       g_variant_get(data, "(isi@vii)", &command_id, &text, &text_len, &icon_id, &tone_type, &duration);
+#else
+       g_variant_get(data, "(isiii)", &command_id, &text, &text_len, &tone_type, &duration);
+#endif
+       play_tone_info.commandId = command_id;
+       play_tone_info.duration = duration;
+       play_tone_info.text.stringLen = text_len;
+       memcpy(play_tone_info.text.string, text, TAPI_SAT_DEF_TEXT_STRING_LEN_MAX+1);
+       g_free(text);
+
+       play_tone_info.tone.type = tone_type;
+
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       if(icon_id) {
+               unbox = g_variant_get_variant(icon_id);
+               g_variant_get(unbox, "a(biiiiiis)", &iter);
+
+               while(g_variant_iter_loop(iter,"(biiiiiis)", &is_exist, &icon_quali, &icon_identifier, &width, &height, &ics, &icon_data_len, &icon_data)) {
+                       if(!is_exist)
+                               break;
+                       play_tone_info.iconId.bIsPresent = is_exist;
+                       play_tone_info.iconId.iconQualifier = icon_quali;
+                       play_tone_info.iconId.iconIdentifier = icon_identifier;
+                       play_tone_info.iconId.iconInfo.width = width;
+                       play_tone_info.iconId.iconInfo.height = height;
+                       play_tone_info.iconId.iconInfo.ics = ics;
+                       if(icon_data_len > 0) {
+                               play_tone_info.iconId.iconInfo.iconDataLen = icon_data_len;
+                               memcpy(play_tone_info.iconId.iconInfo.iconFile, icon_data, icon_data_len);
+                       }
+                       dbg("icon exist(%d), icon_quali: (%d), icon_id: (%d), width: (%d), height: (%d), ics: (%d), icon_data_len: (%d)", play_tone_info.iconId.bIsPresent, play_tone_info.iconId.iconQualifier, play_tone_info.iconId.iconIdentifier, play_tone_info.iconId.iconInfo.width,
+                               play_tone_info.iconId.iconInfo.height, play_tone_info.iconId.iconInfo.ics, play_tone_info.iconId.iconInfo.iconDataLen);
+               }
+               g_variant_iter_free(iter);
+       }
+#endif
+       cmd_type = g_strdup_printf("%d", SAT_PROATV_CMD_PLAY_TONE);
+       encoded_data = g_base64_encode((const guchar*)&play_tone_info, sizeof(TelSatPlayToneInd_t));
+
+       bundle_data = bundle_create();
+       bundle_add(bundle_data, "KEY_EXEC_TYPE", "1");
+       bundle_add(bundle_data, "cmd_type", cmd_type);
+       bundle_add(bundle_data, "data", encoded_data);
+       bundle_add(bundle_data, "slot_id", slot_info);
+
+       rv = __sat_ui_support_app_launch(bundle_data, slot_info);
 
-       bundle_free(bundle_data);
        g_free(encoded_data);
        g_free(cmd_type);
 
+       return rv;
+}
+
+static gboolean _sat_ui_support_processing_idle_mode_text_ind(GVariant *data, char *slot_info)
+{
+       gboolean rv = FALSE;
+       bundle *bundle_data = 0;
+       gchar *encoded_data = NULL, *cmd_type = NULL;
+       TelSatSetupIdleModeTextInd_t idle_mode_text_info;
+
+       gint command_id, text_len;
+       gchar* text = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       GVariant *icon_id;
+       GVariant *unbox = NULL;
+       gboolean is_exist;
+       gint icon_quali, icon_identifier, width, height, ics, icon_data_len;
+       gchar *icon_data = NULL;
+       GVariantIter *iter;
+#endif
+       memset(&idle_mode_text_info, 0, sizeof(TelSatSetupIdleModeTextInd_t));
+
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       g_variant_get(data, "(isi@v)", &command_id, &text, &text_len, &icon_id);
+#else
+       g_variant_get(data, "(isi)", &command_id, &text, &text_len);
+#endif
+       idle_mode_text_info.commandId = command_id;
+       idle_mode_text_info.text.stringLen = text_len;
+       memcpy(idle_mode_text_info.text.string, text, TAPI_SAT_DEF_TEXT_STRING_LEN_MAX+1);
+       g_free(text);
+
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       if(icon_id) {
+               unbox = g_variant_get_variant(icon_id);
+               g_variant_get(unbox, "a(biiiiiis)", &iter);
+
+               while(g_variant_iter_loop(iter,"(biiiiiis)", &is_exist, &icon_quali, &icon_identifier, &width, &height, &ics, &icon_data_len, &icon_data)) {
+                       if(!is_exist)
+                               break;
+                       idle_mode_text_info.iconId.bIsPresent = is_exist;
+                       idle_mode_text_info.iconId.iconQualifier = icon_quali;
+                       idle_mode_text_info.iconId.iconIdentifier = icon_identifier;
+                       idle_mode_text_info.iconId.iconInfo.width = width;
+                       idle_mode_text_info.iconId.iconInfo.height = height;
+                       idle_mode_text_info.iconId.iconInfo.ics = ics;
+                       if(icon_data_len > 0) {
+                               idle_mode_text_info.iconId.iconInfo.iconDataLen = icon_data_len;
+                               memcpy(idle_mode_text_info.iconId.iconInfo.iconFile, icon_data, icon_data_len);
+                       }
+                       dbg("icon exist(%d), icon_quali: (%d), icon_id: (%d), width: (%d), height: (%d), ics: (%d), icon_data_len: (%d)", idle_mode_text_info.iconId.bIsPresent, idle_mode_text_info.iconId.iconQualifier, idle_mode_text_info.iconId.iconIdentifier, idle_mode_text_info.iconId.iconInfo.width,
+                               idle_mode_text_info.iconId.iconInfo.height, idle_mode_text_info.iconId.iconInfo.ics, idle_mode_text_info.iconId.iconInfo.iconDataLen);
+               }
+               g_variant_iter_free(iter);
+       }
+#endif
+       cmd_type = g_strdup_printf("%d", SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT);
+       encoded_data = g_base64_encode((const guchar*)&idle_mode_text_info, sizeof(TelSatSetupIdleModeTextInd_t));
+
+       bundle_data = bundle_create();
+       bundle_add(bundle_data, "KEY_EXEC_TYPE", "1");
+       bundle_add(bundle_data, "cmd_type", cmd_type);
+       bundle_add(bundle_data, "data", encoded_data);
+       bundle_add(bundle_data, "slot_id", slot_info);
+
+       rv = __sat_ui_support_app_launch(bundle_data, slot_info);
+
+       g_free(encoded_data);
+       g_free(cmd_type);
+
+       /* P130527-4589 (I8800): Megafone Russia SIM cards.
+        * Need to check for debug without execption handling.
+        */
+       if (rv != TRUE) {
+               err("result is error");
+       }
+
        return TRUE;
 }
 
-static gboolean _sat_ui_support_processing_ui_info_ind(GVariant *data)
+static gboolean _sat_ui_support_processing_ui_info_ind(enum tel_sat_proactive_cmd_type cmd, GVariant *data, char *slot_info)
 {
-       gint rv;
-       gint cmd = 0;
+       gboolean rv = FALSE;
        bundle *bundle_data = 0;
        gchar *encoded_data = NULL, *cmd_type = NULL;
        TelSatSendUiInfo_t ui_info;
 
        gint command_id, text_len;
        gboolean user_confirm;
-       gchar *text;
-
+       gchar *text = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       GVariant *unbox = NULL;
+       gboolean is_exist;
+       gint icon_quali, icon_identifier, width, height, ics, icon_data_len;
+       gchar *icon_data = NULL;
+       GVariant *icon_id = NULL;
+       GVariantIter *iter;
+#endif
        memset(&ui_info, 0, sizeof(TelSatSendUiInfo_t));
 
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       g_variant_get(data, "(isib@v)", &command_id, &text, &text_len, &user_confirm, &icon_id);
+#else
        g_variant_get(data, "(isib)", &command_id, &text, &text_len, &user_confirm);
+#endif
        dbg("command_id(%d) data(%s) len(%d) user_confirm(%d)", command_id, text, text_len, user_confirm);
 
        ui_info.commandId = command_id;
        memcpy(ui_info.text.string, text, TAPI_SAT_DEF_TEXT_STRING_LEN_MAX+1);
+       g_free(text);
+
        ui_info.text.stringLen = text_len;
        ui_info.user_confirm = (user_confirm ? 1 : 0);
 
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+       if(icon_id) {
+               unbox = g_variant_get_variant(icon_id);
+               g_variant_get(unbox, "a(biiiiiis)", &iter);
+
+               while(g_variant_iter_loop(iter,"(biiiiiis)", &is_exist, &icon_quali, &icon_identifier, &width, &height, &ics, &icon_data_len, &icon_data)) {
+                       if(!is_exist)
+                               break;
+                       ui_info.iconId.bIsPresent = is_exist;
+                       ui_info.iconId.iconQualifier = icon_quali;
+                       ui_info.iconId.iconIdentifier = icon_identifier;
+                       ui_info.iconId.iconInfo.width = width;
+                       ui_info.iconId.iconInfo.height = height;
+                       ui_info.iconId.iconInfo.ics = ics;
+                       if(icon_data_len > 0) {
+                               ui_info.iconId.iconInfo.iconDataLen = icon_data_len;
+                               memcpy(ui_info.iconId.iconInfo.iconFile, icon_data, icon_data_len);
+                       }
+                       dbg("icon exist(%d), icon_quali: (%d), icon_id: (%d), width: (%d), height: (%d), ics: (%d), icon_data_len: (%d)", ui_info.iconId.bIsPresent, ui_info.iconId.iconQualifier, ui_info.iconId.iconIdentifier, ui_info.iconId.iconInfo.width,
+                               ui_info.iconId.iconInfo.height, ui_info.iconId.iconInfo.ics, ui_info.iconId.iconInfo.iconDataLen);
+               }
+               g_variant_iter_free(iter);
+       }
+#endif
        cmd_type = g_strdup_printf("%d", cmd);
        encoded_data = g_base64_encode((const guchar*)&ui_info, sizeof(TelSatSendUiInfo_t));
 
-
        bundle_data = bundle_create();
        bundle_add(bundle_data, "KEY_EXEC_TYPE", "1");
        bundle_add(bundle_data, "cmd_type", cmd_type);
        bundle_add(bundle_data, "data", encoded_data);
+       bundle_add(bundle_data, "slot_id", slot_info);
 
-       rv = aul_launch_app("com.samsung.sat-ui", bundle_data);
-       dbg("ui info aul (%d)", rv);
+       rv = __sat_ui_support_app_launch(bundle_data, slot_info);
 
-       bundle_free(bundle_data);
        g_free(encoded_data);
        g_free(cmd_type);
 
-       return TRUE;
+       return rv;
+}
+
+gboolean sat_ui_check_app_is_running(const char* app_id)
+{
+       gboolean rv = FALSE;
+       rv = aul_app_is_running(app_id);
+       dbg("check the app(%s) is running rv(%d)", app_id, rv);
+       return rv;
 }
 
 gboolean sat_ui_support_terminate_sat_ui()
@@ -321,7 +917,7 @@ gboolean sat_ui_support_terminate_sat_ui()
        bundle_add(bundle_data, "KEY_EXEC_TYPE", "1");
        bundle_add(bundle_data, "cmd_type", cmd_type);
 
-       rv = aul_launch_app("com.samsung.sat-ui", bundle_data);
+       rv = aul_launch_app("org.tizen.sat-ui", bundle_data);
        dbg("session end aul (%d)", rv);
 
        bundle_free(bundle_data);
@@ -330,29 +926,44 @@ gboolean sat_ui_support_terminate_sat_ui()
        return TRUE;
 }
 
-gboolean sat_ui_support_launch_sat_ui(enum tel_sat_proactive_cmd_type cmd_type, GVariant *data)
+gboolean sat_ui_support_launch_sat_ui(enum tel_sat_proactive_cmd_type cmd_type, GVariant *data, enum dbus_tapi_sim_slot_id slot_id)
 {
        gboolean result = FALSE;
-       sat_ui_support_create_desktop_file("temp");
+       char slot_info[2] = {0,};
+
+       snprintf(slot_info, 2, "%d", slot_id);
+       dbg("slot_id : [%s]", slot_info);
 
        switch(cmd_type){
                case SAT_PROATV_CMD_NONE:
-                       result = _sat_ui_support_processing_ui_info_ind(data);
+               case SAT_PROATV_CMD_SEND_DTMF:
+               case SAT_PROATV_CMD_LAUNCH_BROWSER:
+               case SAT_PROATV_CMD_SEND_SMS:
+                       result = _sat_ui_support_processing_ui_info_ind(cmd_type, data, slot_info);
                break;
                case SAT_PROATV_CMD_SETUP_MENU:
-                       result = _sat_ui_support_processing_setup_menu_ind(data);
+                       result = _sat_ui_support_processing_setup_menu_ind(data, slot_info);
                break;
                case SAT_PROATV_CMD_DISPLAY_TEXT:
-                       result = _sat_ui_support_processing_display_text_ind(data);
+                       result = _sat_ui_support_processing_display_text_ind(data, slot_info);
                break;
                case SAT_PROATV_CMD_SELECT_ITEM:
-                       result = _sat_ui_support_processing_select_item_ind(data);
+                       result = _sat_ui_support_processing_select_item_ind(data, slot_info);
                break;
                case SAT_PROATV_CMD_GET_INKEY:
-                       result = _sat_ui_support_processing_get_inkey_ind(data);
+                       result = _sat_ui_support_processing_get_inkey_ind(data, slot_info);
                break;
                case SAT_PROATV_CMD_GET_INPUT:
-                       result = _sat_ui_support_processing_get_input_ind(data);
+                       result = _sat_ui_support_processing_get_input_ind(data, slot_info);
+               break;
+               case SAT_PROATV_CMD_REFRESH:
+                       result = _sat_ui_support_processing_refresh_ind(data, slot_info);
+               break;
+               case SAT_PROATV_CMD_PLAY_TONE:
+                       result = _sat_ui_support_processing_play_tone_ind(data, slot_info);
+               break;
+               case SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT:
+                       result = _sat_ui_support_processing_idle_mode_text_ind(data, slot_info);
                break;
                case SAT_PROATV_CMD_SETUP_EVENT_LIST:
                break;
@@ -364,115 +975,247 @@ gboolean sat_ui_support_launch_sat_ui(enum tel_sat_proactive_cmd_type cmd_type,
        return result;
 }
 
-gboolean sat_ui_support_launch_call_application(enum tel_sat_proactive_cmd_type cmd_type, GVariant *data)
+gboolean sat_ui_support_launch_call_application(enum tel_sat_proactive_cmd_type cmd_type, GVariant *data, enum dbus_tapi_sim_slot_id slot_id)
 {
-       gint rv;
        char buffer[300];
+       char slot_info[2] = {0,};
        bundle *bundle_data = 0;
 
        dbg("launch call application by aul");
+       bundle_data = bundle_create();
+
+       appsvc_set_operation(bundle_data, APPSVC_OPERATION_CALL);
+       appsvc_set_uri(bundle_data,"tel:MT");
 
        switch(cmd_type){
                case SAT_PROATV_CMD_SETUP_CALL:{
-                       gint command_id, call_type, text_len, duration;
-                       gchar *text, *call_number;
+                       gint command_id, call_type, confirm_text_len, text_len, duration;
+                       gchar *confirm_text = NULL, *text = NULL, *call_number = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
                        GVariant *icon_id;
-
+#endif
                        dbg("setup call type_format(%s)", g_variant_get_type_string(data));
-                       g_variant_get(data, "(isi@visi)", &command_id, &text, &text_len, &icon_id, &call_type, &call_number, &duration);
-
-                       bundle_add(bundle_data, "launch-type","SATSETUPCALL");
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                       g_variant_get(data, "(isisi@visi)", &command_id, &confirm_text, &confirm_text_len, &text, &text_len, &icon_id, &call_type, &call_number, &duration);
+#else
+                       g_variant_get(data, "(isisiisi)", &command_id, &confirm_text, &confirm_text_len, &text, &text_len, &call_type, &call_number, &duration);
+#endif
+                       appsvc_add_data(bundle_data, "launch-type","SATSETUPCALL");
 
                        snprintf(buffer, 300, "%d",command_id);
-                       bundle_add(bundle_data, "cmd_id",buffer);
+                       appsvc_add_data(bundle_data, "cmd_id",buffer);
                        dbg("cmd_id(%s)",buffer);
 
                        snprintf(buffer, 300, "%d",call_type);
-                       bundle_add(bundle_data, "cmd_qual", buffer);
+                       appsvc_add_data(bundle_data, "cmd_qual", buffer);
                        dbg("cmd_qual(%s)",buffer);
 
                        snprintf(buffer, 300, "%s", text);
-                       bundle_add(bundle_data, "disp_text", buffer);
+                       appsvc_add_data(bundle_data, "disp_text", buffer);
                        dbg("disp_text(%s)",buffer);
 
                        snprintf(buffer, 300, "%s", call_number);
-                       bundle_add(bundle_data, "call_num", buffer);
+                       appsvc_add_data(bundle_data, "call_num", buffer);
                        dbg("call_num(%s)",buffer);
 
                        snprintf(buffer, 300, "%d", duration);
-                       bundle_add(bundle_data, "dur", buffer);
+                       appsvc_add_data(bundle_data, "dur", buffer);
                        dbg("dur(%s)",buffer);
+
+                       g_free(confirm_text);
+                       g_free(text);
+                       g_free(call_number);
                } break;
 
                default:
+                       bundle_free(bundle_data);
                        return FALSE;
                break;
        }
 
-       rv = aul_launch_app("com.samsung.call",bundle_data);
+       snprintf(slot_info, 2, "%d", slot_id);
+       appsvc_add_data(bundle_data, "slot_id", slot_info);
+       dbg("slot_id : [%s]", slot_info);
+
+       appsvc_run_service(bundle_data, 0, NULL, NULL);
+       dbg("call app is called");
        bundle_free(bundle_data);
 
        return TRUE;
 }
 
-gboolean sat_ui_support_launch_browser_application(enum tel_sat_proactive_cmd_type cmd_type, GVariant *data)
+gboolean sat_ui_support_launch_browser_application(enum tel_sat_proactive_cmd_type cmd_type, GVariant *data, enum dbus_tapi_sim_slot_id slot_id)
 {
-       gint rv;
        char buffer[300];
+       char slot_info[2] = {0,};
        bundle *bundle_data = 0;
 
        dbg("launch browser application by aul");
+       bundle_data = bundle_create();
 
-       /*TODO : need to make a sync with app engineer*/
+       appsvc_set_operation(bundle_data, APPSVC_OPERATION_VIEW);
 
        switch(cmd_type){
                case SAT_PROATV_CMD_LAUNCH_BROWSER:{
-                       gint command_id, call_type, text_len, duration;
-                       gchar *text, *call_number;
-                       GVariant *icon_id;
-
-                       dbg("setup call type_format(%s)", g_variant_get_type_string(data));
-                       g_variant_get(data, "(isi@visi)", &command_id, &text, &text_len, &icon_id, &call_type, &call_number, &duration);
-
-                       bundle_add(bundle_data, "launch-type","SATSETUPCALL");
+                       gint command_id, launch_type, browser_id;
+                       gint url_len, text_len, gateway_proxy_len;
+                       gchar *url = NULL, *text = NULL, *gateway_proxy = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                       GVariant *icon_id = NULL;
+#endif
+                       dbg("launch_browser type_format(%s)", g_variant_get_type_string(data));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                       g_variant_get(data, "(iiisisisi@v)", &command_id, &launch_type, &browser_id, &url, &url_len, &gateway_proxy, &gateway_proxy_len, &text, &text_len, &icon_id);
+#else
+                       g_variant_get(data, "(iiisisisi)", &command_id, &launch_type, &browser_id, &url, &url_len, &gateway_proxy, &gateway_proxy_len, &text, &text_len);
+#endif
+                       if(!url || strlen(url) < 7){
+                               g_free(url);
+                               url = g_strdup("http://");
+                       }
+                       dbg("url (%s)", url);
+                       appsvc_set_uri(bundle_data, url);
+                       g_free(url);
+
+                       snprintf(buffer, 300, "%d",TRUE);
+                       appsvc_add_data(bundle_data, "sat",buffer);
 
                        snprintf(buffer, 300, "%d",command_id);
-                       bundle_add(bundle_data, "cmd_id",buffer);
+                       appsvc_add_data(bundle_data, "cmd_id",buffer);
                        dbg("cmd_id(%s)",buffer);
 
-                       snprintf(buffer, 300, "%d",call_type);
-                       bundle_add(bundle_data, "cmd_qual", buffer);
-                       dbg("cmd_qual(%s)",buffer);
+                       snprintf(buffer, 300, "%d",launch_type);
+                       appsvc_add_data(bundle_data, "launch_type", buffer);
+                       dbg("launch_type(%s)",buffer);
 
-                       snprintf(buffer, 300, "%s", text);
-                       bundle_add(bundle_data, "disp_text", buffer);
-                       dbg("disp_text(%s)",buffer);
+                       snprintf(buffer, 300, "%s", gateway_proxy);
+                       appsvc_add_data(bundle_data, "proxy", buffer);
+                       dbg("proxy(%s)",buffer);
 
-                       snprintf(buffer, 300, "%s", call_number);
-                       bundle_add(bundle_data, "call_num", buffer);
-                       dbg("call_num(%s)",buffer);
+                       g_free(text);
+                       g_free(gateway_proxy);
 
-                       snprintf(buffer, 300, "%d", duration);
-                       bundle_add(bundle_data, "dur", buffer);
-                       dbg("dur(%s)",buffer);
                } break;
 
                default:
+                       bundle_free(bundle_data);
                        return FALSE;
                break;
        }
 
-       rv = aul_launch_app("com.samsung.call",bundle_data);
+       snprintf(slot_info, 2, "%d", slot_id);
+       appsvc_add_data(bundle_data, "slot_id", slot_info);
+       dbg("slot_id(%s)", slot_info);
+
+       appsvc_run_service(bundle_data, 0, NULL, NULL);
+       dbg("browser app is called");
        bundle_free(bundle_data);
 
        return TRUE;
 }
 
-gboolean sat_ui_support_launch_setting_application(enum tel_sat_proactive_cmd_type cmd_type, GVariant *data)
+gboolean sat_ui_support_launch_ciss_application(enum tel_sat_proactive_cmd_type cmd_type, GVariant *data, enum dbus_tapi_sim_slot_id slot_id)
+{
+       bundle *bundle_data = 0;
+       gchar *encoded_data = NULL, *cmd = NULL;
+       char slot_info[2] = {0,};
+
+       dbg("launch ciss application by aul");
+       bundle_data = bundle_create();
+       appsvc_set_pkgname(bundle_data, "org.tizen.ciss");
+
+       switch(cmd_type){
+               case SAT_PROATV_CMD_SEND_SS:{
+                       TelSatSendSsIndSsData_t ss_info;
+
+                       gint command_id, ton, npi;
+                       gint text_len, ss_str_len;
+                       gchar* text = NULL, *ss_string = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                       GVariant *icon_id;
+#endif
+                       dbg("launch ciss ui for send ss proactive cmd");
+
+                       memset(&ss_info, 0, sizeof(TelSatSendSsIndSsData_t));
+
+                       dbg("send ss type_format(%s)", g_variant_get_type_string(data));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                       g_variant_get(data, "(isi@viiis)", &command_id, &text, &text_len, &icon_id, &ton, &npi, &ss_str_len, &ss_string);
+#else
+                       g_variant_get(data, "(isiiiis)", &command_id, &text, &text_len, &ton, &npi, &ss_str_len, &ss_string);
+#endif
+                       ss_info.commandId = command_id;
+                       ss_info.ton = ton;
+                       ss_info.npi = npi;
+                       memcpy(ss_info.ssString, ss_string, TAPI_SAT_DEF_SS_LEN_MAX+1);
+                       ss_info.ssStringLen = ss_str_len;
+                       g_free(text);
+                       g_free(ss_string);
+
+                       cmd = g_strdup_printf("%d", cmd_type);
+                       encoded_data = g_base64_encode((const guchar*)&ss_info, sizeof(TelSatSendSsIndSsData_t));
+               } break;
+
+               case SAT_PROATV_CMD_SEND_USSD:{
+                       TelSatSendUssdIndUssdData_t ussd_info;
+
+                       gint command_id;
+                       gint text_len, ussd_str_len;
+                       guchar dcs;
+                       gchar* text = NULL, *ussd_string = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                       GVariant *icon_id;
+#endif
+                       dbg("launch ciss ui for send ussd proactive cmd");
+
+                       memset(&ussd_info, 0, sizeof(TelSatSendUssdIndUssdData_t));
+
+                       dbg("send ussd type_format(%s)", g_variant_get_type_string(data));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                       g_variant_get(data, "(isi@vyis)", &command_id, &text, &text_len, &icon_id, &dcs, &ussd_str_len, &ussd_string);
+#else
+                       g_variant_get(data, "(isiyis)", &command_id, &text, &text_len, &dcs, &ussd_str_len, &ussd_string);
+#endif
+                       ussd_info.commandId = command_id;
+                       ussd_info.rawDcs = dcs;
+                       memcpy(ussd_info.ussdString, ussd_string, TAPI_SAT_DEF_USSD_LEN_MAX+1);
+                       ussd_info.ussdStringLen = ussd_str_len;
+                       g_free(text);
+                       g_free(ussd_string);
+
+                       cmd = g_strdup_printf("%d", cmd_type);
+                       encoded_data = g_base64_encode((const guchar*)&ussd_info, sizeof(TelSatSendUssdIndUssdData_t));
+               } break;
+
+               default:
+                       bundle_free(bundle_data);
+                       return FALSE;
+               break;
+       }
+
+       snprintf(slot_info, 2, "%d", slot_id);
+       dbg("slot_id : [%s]", slot_info);
+
+       appsvc_add_data(bundle_data, "CISS_LAUNCHING_MODE", "RESP");
+       appsvc_add_data(bundle_data, "KEY_EVENT_TYPE", cmd);
+       appsvc_add_data(bundle_data, "KEY_ENCODED_DATA", encoded_data);
+       appsvc_add_data(bundle_data, "KEY_SLOT_ID", slot_info);
+       g_free(encoded_data);
+       g_free(cmd);
+
+       appsvc_run_service(bundle_data, 0, NULL, NULL);
+       dbg("ciss is called");
+       bundle_free(bundle_data);
+
+       return TRUE;
+}
+
+gboolean sat_ui_support_launch_setting_application(enum tel_sat_proactive_cmd_type cmd_type, GVariant *data, enum dbus_tapi_sim_slot_id slot_id)
 {
        gint rv;
        char buffer[300];
        bundle *bundle_data = 0;
+       char slot_info[2] = {0,};
 
        dbg("launch setting application by aul");
 
@@ -481,12 +1224,16 @@ gboolean sat_ui_support_launch_setting_application(enum tel_sat_proactive_cmd_ty
        switch(cmd_type){
                case SAT_PROATV_CMD_LANGUAGE_NOTIFICATION:{
                        gint command_id, call_type, text_len, duration;
-                       gchar *text, *call_number;
+                       gchar *text = NULL, *call_number = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
                        GVariant *icon_id;
-
+#endif
                        dbg("setup call type_format(%s)", g_variant_get_type_string(data));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
                        g_variant_get(data, "(isi@visi)", &command_id, &text, &text_len, &icon_id, &call_type, &call_number, &duration);
-
+#else
+                       g_variant_get(data, "(isiisi)", &command_id, &text, &text_len, &call_type, &call_number, &duration);
+#endif
                        bundle_add(bundle_data, "launch-type","SATSETUPCALL");
 
                        snprintf(buffer, 300, "%d",command_id);
@@ -508,6 +1255,9 @@ gboolean sat_ui_support_launch_setting_application(enum tel_sat_proactive_cmd_ty
                        snprintf(buffer, 300, "%d", duration);
                        bundle_add(bundle_data, "dur", buffer);
                        dbg("dur(%s)",buffer);
+
+                       g_free(text);
+                       g_free(call_number);
                } break;
 
                case SAT_PROATV_CMD_PROVIDE_LOCAL_INFO:
@@ -518,73 +1268,173 @@ gboolean sat_ui_support_launch_setting_application(enum tel_sat_proactive_cmd_ty
                break;
        }
 
-       rv = aul_launch_app("com.samsung.call",bundle_data);
+       snprintf(slot_info, 2, "%d", slot_id);
+       dbg("slot_id : [%s]", slot_info);
+       bundle_add(bundle_data, "slot_id", slot_info);
+
+       rv = aul_launch_app("org.tizen.call",bundle_data);
+       dbg("rv of aul_launch_app()=[%d]", rv);
        bundle_free(bundle_data);
 
        return TRUE;
 }
 
-gboolean sat_ui_support_create_desktop_file(const gchar *title)
+gboolean sat_ui_support_exec_bip(GDBusConnection *connection, const gchar *path, enum tel_sat_proactive_cmd_type cmd_type, GVariant *data)
 {
-       int rv = 0;
-       FILE *b_check, *f_out;
+       gboolean rv = FALSE;
+       gchar *signal_name = NULL;
+       GVariant *out_param = NULL;
 
-       if(!title){
-               dbg("title does not exist");
-               return FALSE;
-       }
+       switch(cmd_type){
+               case SAT_PROATV_CMD_OPEN_CHANNEL:{
+                       gint command_id, bearer_type, protocol_type, dest_addr_type;
+                       gboolean immediate_link, auto_reconnection, bg_mode;
+                       gint text_len, buffer_size, port_number;
+                       gchar *text = NULL, *dest_address = NULL;
+                       GVariant *bearer_param;
+                       GVariant *bearer_detail;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                       GVariant *icon_id;
+#endif
+                       dbg("open channel type_format(%s)", g_variant_get_type_string(data));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                       g_variant_get(data,"(isi@vbbbiviiiisv)", &command_id, &text, &text_len, &icon_id, &immediate_link, &auto_reconnection, &bg_mode,
+                                       &bearer_type, &bearer_param, &buffer_size, &protocol_type, &port_number, &dest_addr_type, &dest_address, &bearer_detail);
+#else
+                       g_variant_get(data,"(isibbbiviiiisv)", &command_id, &text, &text_len, &immediate_link, &auto_reconnection, &bg_mode,
+                                                               &bearer_type, &bearer_param, &buffer_size, &protocol_type, &port_number, &dest_addr_type, &dest_address, &bearer_detail);
+#endif
+                       out_param = g_variant_new("(isibbbiviiiisv)", command_id, text, text_len, immediate_link, auto_reconnection, bg_mode,
+                               bearer_type, bearer_param, buffer_size, protocol_type, port_number, dest_addr_type, dest_address, bearer_detail);
+                       signal_name = g_strdup("OpenChannel");
+
+                       g_free(text);
+                       g_free(dest_address);
+               } break;
+               case SAT_PROATV_CMD_CLOSE_CHANNEL:{
+                       gint command_id, channel_id, text_len;
+                       gchar *text = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                       GVariant *icon_id;
+#endif
+                       dbg("close channel type_format(%s)", g_variant_get_type_string(data));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                       g_variant_get(data, "(isi@vi)", &command_id, &text, &text_len, &icon_id, &channel_id);
+#else
+                       g_variant_get(data, "(isii)", &command_id, &text, &text_len, &channel_id);
+#endif
+                       out_param = g_variant_new("(isii)", command_id, text, text_len, channel_id);
+                       signal_name = g_strdup("CloseChannel");
+
+                       g_free(text);
+               } break;
+               case SAT_PROATV_CMD_RECEIVE_DATA:{
+                       gint command_id, text_len, channel_id, channel_data_len = 0;
+                       gchar *text = NULL;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                       GVariant *icon_id;
+#endif
+                       dbg("receive data type_format(%s)", g_variant_get_type_string(data));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                       g_variant_get(data, "(isi@vii)", &command_id, &text, &text_len, &icon_id, &channel_id, &channel_data_len);
+#else
+                       g_variant_get(data, "(isiii)", &command_id, &text, &text_len, &channel_id, &channel_data_len);
+#endif
+                       out_param = g_variant_new("(isiii)", command_id, text, text_len, channel_id, channel_data_len);
+                       signal_name = g_strdup("ReceiveData");
+
+                       g_free(text);
+               } break;
+               case SAT_PROATV_CMD_SEND_DATA:{
+                       gint command_id, channel_id, text_len, channel_data_len;
+                       gboolean send_data_immediately;
+                       gchar *text = NULL;
+                       GVariant *channel_data;
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                       GVariant *icon_id;
+#endif
+                       dbg("send data type_format(%s)", g_variant_get_type_string(data));
+#if defined(TIZEN_SUPPORT_SAT_ICON)
+                       g_variant_get(data, "(isi@vibvi)", &command_id, &text, &text_len, &icon_id, &channel_id, &send_data_immediately, &channel_data, &channel_data_len);
+#else
+                       g_variant_get(data, "(isiibvi)", &command_id, &text, &text_len, &channel_id, &send_data_immediately, &channel_data, &channel_data_len);
+#endif
+                       out_param = g_variant_new("(isiibvi)", command_id, text, text_len, channel_id, send_data_immediately, channel_data, channel_data_len);
+                       signal_name = g_strdup("SendData");
+
+                       g_free(text);
+               } break;
+               case SAT_PROATV_CMD_GET_CHANNEL_STATUS:{
+                       gint command_id;
 
-       b_check = fopen("/opt/share/applications/com.samsung.sat-ui.desktop", "r");
-       if(b_check && !(g_strcmp0(title,"temp")) ){
-               dbg("desktop file aleady exist");
-               fclose(b_check);
-               return TRUE;
-       }
+                       dbg("get channel status type_format(%s)", g_variant_get_type_string(data));
+                       g_variant_get(data, "(i)", &command_id);
 
-       if(b_check)
-               fclose(b_check);
+                       out_param = g_variant_new("(i)", command_id);
+                       signal_name = g_strdup("GetChannelStatus");
+               } break;
+               case SAT_PROATV_CMD_SETUP_EVENT_LIST:{
+                       gint event_cnt;
+                       GVariant *evt_list;
 
-       f_out = fopen("/tmp/com.samsung.sat-ui.desktop", "w");
-       if(!f_out){
-               dbg("fail to create sat-ui desktop file");
-               return FALSE;
+                       dbg("setup event list type_format(%s)", g_variant_get_type_string(data));
+                       g_variant_get(data, "(iv)", &event_cnt, &evt_list);
+
+                       out_param = g_variant_new("(iv)", event_cnt, evt_list);
+                       signal_name = g_strdup("SetupEventList");
+               } break;
+               default:
+                       dbg("no matched command");
+                       return FALSE;
+               break;
        }
 
-       fprintf(f_out, "Package=com.samsung.sat-ui\n");
-       fprintf(f_out, "Name=%s\n",title);
-       fprintf(f_out, "Type=Application\n");
-       fprintf(f_out, "Version=0.2.2\n");
-       fprintf(f_out, "Exec=/usr/apps/com.samsung.sat-ui/bin/sat-ui KEY_EXEC_TYPE 0\n");
-       fprintf(f_out, "Icon=com.samsung.sat-ui.png\n");
-       fprintf(f_out, "X-Tizen-TaskManage=True\n");
-       fprintf(f_out, "X-Tizen-Multiple=False\n");
-       fprintf(f_out, "X-Tizen-Removable=False\n");
-       fprintf(f_out, "Comment=SIM Application UI\n");
-       fclose(f_out);
-
-       rv = system("/bin/cp /tmp/com.samsung.sat-ui.desktop /opt/share/applications/");
-       dbg("the result to create desktop file (%d)", rv);
-       rv = system("/bin/rm /tmp/com.samsung.sat-ui.desktop");
-
-       if(rv == -1 || rv == 127)
-        return FALSE;
+       dbg("dbus conn(%p), path(%s)", connection, path);
+       rv = g_dbus_connection_emit_signal(connection, "org.tizen.bip-manager", path, "org.tizen.telephony.SAT", signal_name, out_param, NULL);
+       g_free(signal_name);
 
-       return TRUE;
+       dbg("send signal to bip-mananger result (%d)", rv);
+
+       return rv;
 }
 
-gboolean sat_ui_support_remove_desktop_file(void)
+gboolean sat_ui_support_exec_evtdw(GDBusConnection *connection, const gchar *path, enum tel_sat_proactive_cmd_type cmd_type, GVariant *data)
 {
-       int rv = 0;
-       FILE *b_check;
+       gboolean rv = FALSE;
+       gchar *signal_name = NULL;
+       GVariant *out_param = NULL;
+       gchar *interface_name = NULL;
+       gint event_cnt;
+       GVariant *evt_list;
+
+       dbg("dbus conn(%p), path(%s)", connection, path);
+
+       if(g_str_has_suffix(path , "0")){
+               interface_name = g_strdup("org.tizen.sat-event-downloader");
+
+       } else if (g_str_has_suffix(path , "1")){
+               interface_name = g_strdup("org.tizen.sat-event-downloader-2");
+       } else {
+               err("invalid sim slot id");
+               return FALSE;
+       }
+
+       if (cmd_type == SAT_PROATV_CMD_SETUP_EVENT_LIST){
+               dbg("setup event list type_format(%s)", g_variant_get_type_string(data));
+               g_variant_get(data, "(iv)", &event_cnt, &evt_list);
 
-       b_check = fopen("/opt/share/applications/com.samsung.sat-ui.desktop", "r");
-       if(!b_check){
-               dbg("desktop file does not exist");
-               return TRUE;
+               out_param = g_variant_new("(iv)", event_cnt, evt_list);
+               signal_name = g_strdup("SetupEventList");
+       } else {
+               err("invalid cmd_type:[%d]", cmd_type);
+               g_free(interface_name);
+               return FALSE;
        }
 
-       rv = system("/bin/rm /opt/share/applications/com.samsung.sat-ui.desktop");
-       dbg("the result to remove desktop file (%d)", rv);
+       rv = g_dbus_connection_emit_signal(connection, interface_name, path, "org.tizen.telephony.SAT", signal_name, out_param, NULL);
+       dbg("send signal to sat-event-downloader result (%d)", rv);
 
-       return TRUE;
+       g_free(interface_name);
+       g_free(signal_name);
+       return rv;
 }
old mode 100644 (file)
new mode 100755 (executable)
index 91786c1..e1a06af
@@ -2,16 +2,29 @@
 #define SAT_UI_SUPPORT_H_
 
 #include <glib.h>
+#include <gio/gio.h>
 
 #include <tcore.h>
+#include <storage.h>
+#include <server.h>
 #include <type/sat.h>
+#include "../common.h"
+
+#define PKG_ID_SAT_UI "org.tizen.sat-ui"
+#define PKG_ID_SAT_UI_2 "org.tizen.sat-ui-2"
+
+#define RELAUNCH_INTERVAL 50*1000 //100ms
+#define RETRY_MAXCOUNT 3
 
 gboolean sat_ui_support_terminate_sat_ui(void);
-gboolean sat_ui_support_launch_call_application(enum tel_sat_proactive_cmd_type cmd_type, GVariant *data);
-gboolean sat_ui_support_launch_browser_application(enum tel_sat_proactive_cmd_type cmd_type, GVariant *data);
-gboolean sat_ui_support_launch_setting_application(enum tel_sat_proactive_cmd_type cmd_type, GVariant *data);
-gboolean sat_ui_support_launch_sat_ui(enum tel_sat_proactive_cmd_type cmd_type, GVariant *data);
-gboolean sat_ui_support_create_desktop_file(const gchar *title);
-gboolean sat_ui_support_remove_desktop_file(void);
+gboolean sat_ui_check_app_is_running(const char* app_id);
+gboolean sat_ui_support_launch_call_application(enum tel_sat_proactive_cmd_type cmd_type, GVariant *data, enum dbus_tapi_sim_slot_id slot_id);
+gboolean sat_ui_support_launch_browser_application(enum tel_sat_proactive_cmd_type cmd_type, GVariant *data, enum dbus_tapi_sim_slot_id slot_id);
+gboolean sat_ui_support_launch_ciss_application(enum tel_sat_proactive_cmd_type cmd_type, GVariant *data, enum dbus_tapi_sim_slot_id slot_id);
+gboolean sat_ui_support_launch_setting_application(enum tel_sat_proactive_cmd_type cmd_type, GVariant *data, enum dbus_tapi_sim_slot_id slot_id);
+gboolean sat_ui_support_launch_sat_ui(enum tel_sat_proactive_cmd_type cmd_type, GVariant *data, enum dbus_tapi_sim_slot_id slot_id);
+gboolean sat_ui_support_exec_bip(GDBusConnection *connection, const gchar *path, enum tel_sat_proactive_cmd_type cmd_type, GVariant *data);
+gboolean sat_ui_support_exec_evtdw(GDBusConnection *connection, const gchar *path, enum tel_sat_proactive_cmd_type cmd_type, GVariant *data);
+gboolean sat_ui_support_storage_init(Server *server);
 
 #endif /* SAT_UI_SUPPORT_H_ */
diff --git a/src/sat_util.c b/src/sat_util.c
deleted file mode 100644 (file)
index d366b62..0000000
+++ /dev/null
@@ -1,714 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-#include <assert.h>
-
-#include <iconv.h>
-#include <glib.h>
-
-#include "sat_manager.h"
-#include "util.h"
-
-#define        tabGsmUniMax2 9
-#define        tabGsmUniMax 42
-
-static void _convert_gsm_to_utf8(unsigned char *dest, unsigned short *dest_len,        unsigned char *src, unsigned int src_len);
-
-static gboolean _convert_gsm_to_unicode(unsigned short *dest, int dest_len, unsigned char *src, unsigned int src_len);
-static gboolean _convert_unicode_to_gsm(unsigned char* dest, int dest_len, unsigned short* src, int src_len);
-
-static char* _convert_ucs_to_utf8(unsigned char *src, int src_len);
-static int _convert_utf8_to_unicode(unsigned short* dest, unsigned char* src, unsigned int src_len);
-
-static unsigned short* _convert_process_unicode(unsigned short *dest, int dest_buf_len,        unsigned char *src, unsigned long src_len);
-
-static int _convert_ucs2_to_gsm(unsigned char* dest, unsigned short* src, unsigned int src_len);
-static int _convert_gsm_to_ucs2(unsigned short* dest, unsigned char* src, unsigned int src_len);
-
-static gboolean _find_gsm_code_exception_table(unsigned short src);
-static int _get_gsm_code_size(unsigned short* src, int src_len);
-static unsigned short* _swap_byte_order(unsigned short *dest, unsigned short *src, int len);
-
-typedef struct {
-       char gsm;
-       unsigned short unicode;
-} GsmUniTable;
-
-const GsmUniTable gsm_unicode2_table[] = {
-               { 0x14, 0x005E }, { 0x28, 0x007B }, { 0x29, 0x007D }, { 0x2F, 0x005C },
-               { 0x3C, 0x005B }, { 0x3D, 0x007E }, { 0x3E, 0x005D }, { 0x40, 0x007C },
-               { 0x65, 0x20AC } };
-
-const GsmUniTable gsm_unicode_table[] = {
-               { 0x00, 0x0040 }, { 0x01, 0x00A3 }, { 0x02, 0x0024 }, { 0x03, 0x00A5 },
-               { 0x04, 0x00E8 }, { 0x05, 0x00E9 }, { 0x06, 0x00F9 }, { 0x07, 0x00EC }, { 0x08, 0x00F2 },
-               { 0x09, 0x00E7 }, { 0x0B, 0x00D8 }, { 0x0C, 0x00F8 }, { 0x0E, 0x00C5 }, { 0x0F, 0x00E5 },
-               { 0x10, 0x0394 }, { 0x11, 0x005F }, { 0x12, 0x03A6 }, { 0x13, 0x0393 }, { 0x14, 0x039B },
-               { 0x15, 0x03A9 }, { 0x16, 0x03A0 }, { 0x17, 0x03A8 }, { 0x18, 0x03A3 }, { 0x19, 0x0398 },
-               { 0x1A, 0x039E }, { 0x1C, 0x00C6 }, { 0x1D, 0x00E6 }, { 0x1E, 0x00DF }, { 0x1F, 0x00C9 },
-               { 0x24, 0x00A4 }, { 0x40, 0x00A1 }, { 0x5B, 0x00C4 }, { 0x5C, 0x00D6 }, { 0x5D, 0x00D1 },
-               { 0x5E, 0x00DC }, { 0x5F, 0x00A7 }, { 0x60, 0x00BF }, { 0x7B, 0x00E4 }, { 0x7C, 0x00F6 },
-               { 0x7D, 0x00F1 }, { 0x7E, 0x00FC }, { 0x7F, 0x00E0 }, };
-
-static int _convert_utf8_to_unicode(unsigned short* dest, unsigned char* src, unsigned int src_len)
-{
-       unsigned short* org = NULL;
-       unsigned char hi = 0;
-       unsigned char mid = 0;
-       unsigned char low = 0;
-
-       if ((NULL == dest) || (NULL == src)) {
-               dbg( "[SAT] INPUT PARAM NULL");
-               return -1;
-       }
-
-       org = dest;
-
-       while (src_len > 0 && (*src != '\0')) {
-               if (*src < 0x80) {
-                       *dest = (*src & 0x7F);
-                       dest++;
-                       src++;
-                       src_len--;
-               } else if (((0xC0 <= *src) && (*src < 0xE0)) && (*(src + 1) >= 0x80)) {
-                       hi = *src & 0x1F;
-                       low = *(src+1) & 0x3F;
-                       *dest = (hi << 6) | low;
-                       dest++;
-                       src += 2;
-                       src_len -= 2;
-               } else if ((*src >= 0xE0) && (*(src + 1) >= 0x80) && (*(src + 2) >= 0x80)) {
-                       hi = *src & 0x0F;
-                       mid = *(src+1) & 0x3F;
-                       low = *(src+2) & 0x3F;
-                       *dest = (hi << 12) | (mid << 6) | low;
-                       dest++;
-                       src += 3;
-                       src_len -= 3;
-               } else {
-                       *dest = (*src & 0x7F);
-                       dest++;
-                       src++;
-                       src_len--;
-                       dbg( "[SAT] utf8 incorrect range");
-               }
-       }
-       *dest = 0;
-       return (dest - org);
-}
-
-static gboolean _find_gsm_code_exception_table(unsigned short src)
-{
-       if ((src >= 0x0020 && src <= 0x0023)
-                       || (src >= 0x0025 && src <= 0x003F)
-                       || (src >= 0x0041 && src <= 0x005A)
-                       || (src >= 0x0061 && src <= 0x007A)
-                       || src == 0x000A || src == 0x000D)
-               return TRUE;
-       return FALSE;
-}
-
-static int _get_gsm_code_size(unsigned short* src, int src_len)
-{
-       gboolean in_table = FALSE;
-       gboolean in_sec_table = FALSE;
-       int i, gsm_len = 0;
-
-       if (NULL == src) {
-               dbg( "INPUT PARAM was NULL");
-               return -1;
-       }
-
-       for (; src_len > 0 && src; src_len--) {
-               if (_find_gsm_code_exception_table(*src) == TRUE) {
-                       src++;
-                       gsm_len++;
-                       continue;
-               }
-               in_table = FALSE;
-               for (i = 0; i < tabGsmUniMax; i++) {
-                       if (*src == gsm_unicode_table[i].unicode) {
-                               src++;
-                               in_table = TRUE;
-                               gsm_len++;
-                               break;
-                       }
-               }
-               if (in_table == FALSE) {
-                       in_sec_table = FALSE;
-                       for (i = 0; i < tabGsmUniMax2; i++) {/* second table */
-                               if (*src == gsm_unicode2_table[i].unicode) {
-                                       src++;
-                                       in_table = TRUE;
-                                       in_sec_table = TRUE;
-                                       gsm_len += 2;
-                                       break;
-                               }
-                       }
-                       if (in_sec_table == FALSE) {/* second*/
-                               if (_find_gsm_code_exception_table(*src) == FALSE) {
-                                       dbg( "GSM Char[%d], gsm_len[%d]", *src, gsm_len);
-                                       return -1;
-                               }
-                               src++;
-                               gsm_len++;
-                       }
-               }
-       }
-       return gsm_len;
-}
-
-static int _convert_ucs2_to_gsm(unsigned char* dest, unsigned short* src, unsigned int src_len)
-{
-       unsigned char* rear = NULL;
-       unsigned short* p;
-       unsigned char temp;
-       gboolean in_table = FALSE;
-       gboolean in_sec_table = FALSE;
-       int i, gc_len = 0;
-
-       if ((!dest) || (!src) || (0x00 == src_len)) {
-               dbg( "Warning: Wrong Input");
-               return -1;
-       }
-
-       rear = dest;
-       p = src;
-
-       for (; src_len > 0 && p; src_len--) {
-               in_table = FALSE;
-               for (i = 0; i < tabGsmUniMax; i++) { /* is in table  */
-                       if (*p == gsm_unicode_table[i].unicode) {
-                               temp = (unsigned char) (gsm_unicode_table[i].gsm);
-                               *rear = temp;
-                               rear++;
-                               p++;
-                               in_table = TRUE;
-                               gc_len++;
-                               break;
-                       }
-               }
-               if (in_table == FALSE) {
-                       in_sec_table = FALSE;
-                       for (i = 0; i < tabGsmUniMax2; i++) { /* second table*/
-                               if (*p == gsm_unicode2_table[i].unicode) {
-                                       *rear = 0x1B;
-                                       rear++;
-                                       temp = (unsigned char) (gsm_unicode2_table[i].gsm);
-                                       *rear = temp;
-                                       rear++;
-                                       p++;
-                                       in_table = TRUE;
-                                       in_sec_table = TRUE;
-                                       gc_len += 2;
-                                       break;
-                               }
-                       }
-                       if (in_sec_table == FALSE) { /* second */
-                               if (_find_gsm_code_exception_table(*p) == FALSE)
-                                       return -1;
-                               temp = (unsigned char) (*p); /* isn't in table */
-                               *rear = temp;
-                               rear++;
-                               p++;
-                               gc_len++;
-                       }
-               }
-       }
-       src = p;
-       return gc_len;
-}
-
-static gboolean _convert_unicode_to_gsm(unsigned char* dest, int dest_len, unsigned short* src, int src_len)
-{
-       char* tmp_str;
-       int gc_len = 0;
-
-       if ((NULL == dest) || (NULL == src)) {
-               dbg( "INPUT PARAM was NULL");
-               return FALSE;
-       }
-
-       if (src_len == 0)
-               return FALSE;
-
-       gc_len = _get_gsm_code_size(src, src_len);
-       if (0 >= gc_len) {
-               dbg( "Warning: Error[%d] while finding the GSM Code Size", gc_len);
-               return FALSE;
-       }
-
-       if (dest_len < gc_len) {
-               if (dest_len == sizeof(void*)) {
-                       dbg( "Out buffer size seems to be small (%s)", dest);
-               } else {
-                       dbg("Buffer size is too small (%s): dest_len(%d), gc_len(%d)", dest, dest_len, gc_len);
-               }
-               return FALSE;
-       }
-
-       tmp_str = calloc(1, (unsigned short) gc_len);
-       if (tmp_str == NULL) {
-               dbg( "Memory Allocation Failed!");
-               return FALSE;
-       }
-
-       gc_len = _convert_ucs2_to_gsm((unsigned char*) tmp_str, src, src_len);
-       if (gc_len != -1) {
-               memcpy((char*) dest, (char*) tmp_str, gc_len);
-               free(tmp_str);
-               return TRUE;
-       }
-
-       free(tmp_str);
-       return FALSE;
-}
-
-void sat_mgr_convert_utf8_to_gsm(unsigned char *dest, int *dest_len, unsigned char* src, unsigned int src_len)
-{
-       unsigned short *uc = NULL;
-       int gc_len = 0;
-       int uc_len = 0;
-       gboolean ret = FALSE;
-
-       if (src == NULL || src_len == 0) {
-               dbg( "WARNING: Invalid Parameter");
-               return;
-       }
-
-       uc = (unsigned short*) calloc(src_len + 1, sizeof(unsigned short));
-       if (!uc) {
-               dbg( "WARNING: calloc Failed");
-               return;
-       }
-
-       /*Converting from UTF8 => UNICODE*/
-       uc_len = _convert_utf8_to_unicode(uc, src, src_len);
-       dbg( "uc_len:[%d]", uc_len);
-       if(uc_len == -1) {
-               dbg( "_convert_utf8_to_unicode returns false!");
-               free(uc);
-               return;
-       }
-
-       /*Finding the GSMCode Size*/
-       gc_len = _get_gsm_code_size(uc, uc_len);
-       dbg( "gc_len:[%d]", gc_len);
-       if ( gc_len == -1) {
-               dbg( "SM- DATA is not in GSM7BIT Character Set & Error:[%d]",   gc_len);
-               free(uc);
-               return;
-       }
-
-       *dest_len = gc_len;
-       /*Converting from UNICODE ==> GSM CODE */
-       ret = _convert_unicode_to_gsm((unsigned char*) dest, *dest_len, uc, uc_len);
-       if (ret == FALSE) {
-               dbg( "_convert_unicode_to_gsm Failed");
-               *dest_len = 0x00;
-               free(uc);
-               return;
-       }
-
-       if(uc)
-               free(uc);
-}
-
-void sat_mgr_convert_utf8_to_ucs2(unsigned char* dest, int* dest_len,  unsigned char* src, int src_len)
-{
-       gsize byte_converted = 0;
-       gsize byte_read = 0;
-       gchar* str_converted = NULL;
-       GError *error = NULL;
-       int i;
-       char tmp_char;
-
-       if (dest == NULL || dest_len == NULL || src == NULL) {
-               dbg( "Invalid Input Parameter");
-               return;
-       }
-
-       /*Converting from UTF8 => UCS-2 using the g_convert*/
-       str_converted = (gchar*) g_convert((gchar*) src, (gsize) src_len,
-                                                                                                                                               (gchar*) "UCS-2", (gchar*) "UTF8",
-                                                                                                                                               (gsize*) &byte_read, (gsize*) &byte_converted,
-                                                                                                                                               &error);
-       if (str_converted == NULL) {
-               dbg( "str_converted is NULL");
-               if (error != NULL) {
-                       dbg( "Problem while conversion UTF8 => UCS2, ErrorCode[%d]", error->code);
-               }
-               return;
-       }
-
-       dbg( "src_len[%u], byte_read[%u], byte_converted[%u]", src_len, byte_read, byte_converted);
-       *dest_len = (int) byte_converted;
-
-       if (byte_converted % 2 != 0) {
-               dbg( "string length is wrong!");
-       } else {
-               for (i = 0; i < (int)byte_converted; i++) {
-                       if (i % 2 == 0) {
-                               tmp_char = str_converted[i];
-                               str_converted[i] = str_converted[i + 1];
-                               str_converted[i + 1] = tmp_char;
-                       }
-               }
-       }
-       memcpy((unsigned char*) dest, (unsigned char*) str_converted, byte_converted);
-       g_free(str_converted);
-       return;
-}
-
-static int _convert_ucs2_to_utf8(char *out, unsigned short *out_len, char *in, unsigned short in_len)
-{
-       char *p_o = NULL;
-       size_t src_len = in_len;
-       size_t dest_len = in_len*3;
-       short *dest = NULL;
-       short *src = NULL;
-       int i = 0;
-
-       iconv_t cd = iconv_open("UTF-8", "UCS2");
-       if (cd == (iconv_t) (-1)) {
-               perror("iconv_open");
-               return 0;
-       }
-//For byte swap - start
-       src = (short*)malloc(in_len);
-       memcpy(src, in, in_len);
-       dest = (short*)malloc(in_len);
-    memset(dest, 0, in_len);
-    for(i=0; i<in_len/2; i++){
-        dest[i] = ((src[i] << 8) + (src[i] >> 8));
-    }
-    memcpy(in, dest, in_len);
-    free(dest);
-    free(src);
- //For byte swap - end
-
-       p_o = out;
-
-       dbg("expected input bytes:%d dest_len:%d\n", src_len, dest_len);
-
-       if (iconv(cd, &in, &src_len, &p_o, &dest_len) == (size_t)(-1)) {
-               dbg("failed to iconv errno:%d", errno);
-       } else {
-               dbg("remained input bytes:%d processed bytes:%d", src_len, in_len*3-dest_len);
-               out[in_len*3-dest_len] = '\0';
-       }
-       *out_len = in_len*3-dest_len;
-       dbg("out_len[%d], output[%s]", *out_len, out);
-       iconv_close(cd);
-       return 0;
-}
-
-void sat_mgr_convert_string(unsigned char *dest, unsigned short *dest_len,
-               enum alphabet_format dcs, unsigned char *src, unsigned short src_len)
-{
-       int tmp_str_len = 0;
-       unsigned char* tmp_dest_str = dest;
-       unsigned short* in_buf = NULL;
-
-       /*get string length*/
-       /* 0xFF is the end of string */
-       while (src[tmp_str_len] != 0xFF && tmp_str_len < src_len) {
-               tmp_str_len++;
-       }
-       /* last space character must be deleted */
-       while (src[tmp_str_len - 1] == 0x20 && tmp_str_len > 0) {
-               tmp_str_len--;
-       }
-
-       dbg( "[SAT] alphabetFormat : [0x%x]", dcs);
-       dbg( "[SAT] tmp_str_len[%d] src_len[%d]", tmp_str_len, src_len);
-
-       switch (dcs) {
-               case ALPHABET_FROMAT_SMS_DEFAULT:
-                       tmp_dest_str = (unsigned char*)tcore_util_unpack_gsm7bit((const unsigned char *)src, src_len);
-                       _convert_gsm_to_utf8(dest, dest_len, tmp_dest_str, strlen((const char*)tmp_dest_str));
-                       break;
-
-               case ALPHABET_FROMAT_8BIT_DATA:
-                       _convert_gsm_to_utf8(dest, dest_len, src, tmp_str_len);
-                       break;
-
-               case ALPHABET_FROMAT_UCS2:{
-                       if (src[0] == 0x80) {
-                               dbg("UCS2:[0x%2x] prefix case", src[0]);
-                               _convert_ucs2_to_utf8((char*) dest, dest_len, (char*) (src + 1), src_len - 1);
-                       } else if (src[0] == 0x81 || src[0] == 0x82) {
-                               dbg("UCS2:[0x%2x] prefix case", src[0]);
-                               *dest_len = tmp_str_len;
-                               in_buf = (unsigned short*) malloc(tmp_str_len * sizeof(unsigned short) + 1);
-                               if (!in_buf) {
-                                       dbg( "[SAT] Error:malloc failed");
-                                       return;
-                               }
-                               _convert_process_unicode(in_buf, (tmp_str_len * sizeof(unsigned short) + 1), src,
-                                               tmp_str_len);
-                               dest = (unsigned char*) _convert_ucs_to_utf8((unsigned char *) in_buf, tmp_str_len);
-                               if (in_buf) free(in_buf);
-
-                               if (!dest) {
-                                       dbg( "[SAT] WARNING: dest str is NULL");
-                                       return;
-                               }
-                               memcpy(tmp_dest_str, dest, SAT_TEXT_STRING_LEN_MAX);
-
-                               if (tmp_dest_str != dest) {
-                                       dbg( "[SAT] destination string address changed hence freeing");
-                                       free(dest);
-                                       dest = NULL;
-                               }
-                               dbg( "[SAT] string[%s]", dest);
-                               dbg( "[SAT] out put string[%s]", tmp_dest_str);
-                               dbg( "[SAT] string pointer after parsing dcs[0x%x]", dest);
-                               dbg( "[SAT] string length[%d]", *dest_len);
-                       } else {
-                               dbg("UCS2: no prefix case");
-                               _convert_ucs2_to_utf8((char*) dest, dest_len, (char*) src, src_len);
-                       }
-               }
-                       break;
-
-               default:
-                       dbg("not handled alpha format[%d]", dcs);
-                       break;
-       }
-
-}
-
-static int _convert_gsm_to_ucs2(unsigned short* dest, unsigned char* src, unsigned int src_len)
-{
-       int index;
-       unsigned short* org;
-
-       org = dest;
-
-       for(index=0; index < (int)src_len; index++){
-               int table_index=0;
-               gboolean b_tabled = FALSE;
-
-               /*
-                * if the first byte is 0x1B, it is the escape character.
-                * The byte value shoulbe be changed to unicode.
-                */
-               if(*src == 0x1B){
-                       src++; index++;//move to next byte
-                       for(table_index=0; table_index < tabGsmUniMax2; table_index++){
-                               if(*src == gsm_unicode2_table[table_index].gsm){
-                                       *dest = gsm_unicode2_table[table_index].unicode;
-                                       b_tabled = TRUE;
-                                       break;
-                               }
-                       }
-
-                       //if matched data is not in table, it should be changed to NULL;
-                       if(!b_tabled){
-                               *dest = 0x0020;
-                       }
-               }
-               else{
-                       for(table_index=0; table_index < tabGsmUniMax; table_index++){
-                               if(*src == gsm_unicode_table[table_index].gsm){
-                                       *dest = gsm_unicode_table[table_index].unicode;
-                                       b_tabled = TRUE;
-                                       break;
-                               }
-                       }
-
-                       //if matched data is not in table, it is using original value;
-                       if(!b_tabled){
-                               *dest = *src;
-                       }
-               }
-
-               //move to next position
-               src++; dest++;
-       }
-
-       dbg("[SAT] cvt sr(%s), the size of data (%d) ", org, dest - org);
-       return (dest - org);
-}
-
-static gboolean _convert_gsm_to_unicode(unsigned short *dest, int dest_len, unsigned char *src, unsigned int src_len)
-{
-       int index, tmp_len;
-
-       if(!dest || !src) {
-               dbg( "[SAT] dest(%p) or src(%p) is null",dest, src);
-               return FALSE;
-       }
-
-       if(!src_len){
-               dest[0] = '\0';
-               return TRUE;
-       }
-
-       dbg("[SAT] source string (%s) len(%d)", src, src_len);
-
-       for(index = 0; index < (int)src_len; index++){
-               if(src[index] == 0x1B)
-                       src_len--;
-       }
-       dbg("[SAT] strlen excluding escape character (%d)", src_len);
-
-       tmp_len = _convert_gsm_to_ucs2(dest, src, src_len);
-       dest[tmp_len] = '\0';
-
-       return TRUE;
-}
-
-static char* _convert_ucs_to_utf8(unsigned char* src, int src_len)
-{
-       char* utf_str = NULL;
-       iconv_t cd = NULL;
-       size_t ileft = 0;
-       size_t oleft = 0;
-       int err = 0;
-
-       char* pIn = NULL;
-       char* in_buf = NULL;
-       char* out_buf = NULL;
-
-       if (!src) {
-               dbg("src is null");
-               return NULL;
-       }
-
-       ileft = src_len * 2;//over allocate as utf-8 may occupy 3 bytes
-       oleft = src_len * 3;//over allocate as utf-8 may occupy 3 bytes
-       pIn = in_buf = (char*) malloc(ileft + 2);
-       utf_str = out_buf = (char *) malloc(oleft + 1);
-
-       memset(in_buf, 0x00, ileft + 2);
-       memset(out_buf, 0x00, oleft + 1);
-       memcpy(in_buf, src, ileft);
-
-       in_buf[ileft] = '\0';
-
-       cd = iconv_open("UTF-8", "UCS-2");
-       err = iconv(cd, (char**) &in_buf, &ileft, &out_buf, &oleft);
-
-       utf_str[src_len * 2 - ileft] = '\0';
-       iconv_close(cd);
-       free(pIn);
-       return utf_str;
-}
-
-static void _convert_gsm_to_utf8(unsigned char* dest, unsigned short* dest_len, unsigned char* src, unsigned int src_len)
-{
-       int tmp_len = 0;
-       char *target_tmp = NULL;
-       unsigned char *raw_unicode = NULL;
-       unsigned short tmp_dest[SAT_TEXT_STRING_LEN_MAX];
-
-       memset(tmp_dest, 0 , SAT_TEXT_STRING_LEN_MAX);
-
-       _convert_gsm_to_unicode(tmp_dest, SAT_TEXT_STRING_LEN_MAX, src, src_len);
-       while(tmp_dest[tmp_len] != '\0')
-               tmp_len++;
-       tmp_len++; // add null character
-
-       tmp_len = tmp_len*2; //for byte align
-       raw_unicode = (unsigned char*)malloc(tmp_len);
-       memset(raw_unicode, 0, tmp_len);
-
-       memcpy(raw_unicode, (unsigned char*)tmp_dest, tmp_len);
-
-       *dest_len = tmp_len;
-       target_tmp = _convert_ucs_to_utf8(raw_unicode, tmp_len);
-       if(!target_tmp){
-               dbg( "str is NULL");
-               return;
-       }
-
-       memcpy(dest, target_tmp, strlen((const char*)target_tmp));
-       dbg("final utf8 str (%s), length (%d)", dest, tmp_len);
-       return;
-}
-
-/*
- * UCS2 character decoding for SIM alpha identifier as defined ETSI 102 221.
- */
-static unsigned short* _convert_process_unicode(unsigned short* dest, int dest_buf_len,        unsigned char* src, unsigned long src_len)
-{
-       int i, j, base = 0, str_len = 0, shift =0;
-       unsigned short tmp_str[255 + 1];
-
-       switch (src[0]) {
-               case 0x80: {
-                       str_len = (src_len - 1) / 2;
-                       memcpy(tmp_str, &src[1], src_len - 1);
-                       tmp_str[str_len] = '\0';
-                       _swap_byte_order(dest, tmp_str, str_len);
-                       dest[str_len] = '\0';
-                       return dest;
-               }
-
-               case 0x81: {
-                       str_len = (int) src[1];
-                       base = (int) src[2];
-                       j = 3;
-                       shift = 7;
-               }
-                       break;
-
-               case 0x82: {
-                       str_len = (int) src[1];
-                       base = (int) (src[2] << 8 | src[3]);
-                       j = 4;
-                       shift = 0;
-               }
-                       break;
-
-               default: {
-                       for (i = 0; i < (int) src_len; i++) {
-                               if (src[i] == 0xFF) {
-                                       src_len = i;
-                                       break;
-                               }
-                       }
-                       str_len = (src_len) / 2;
-                       memcpy(tmp_str, &src[0], src_len);
-                       tmp_str[str_len] = '\0';
-                       _swap_byte_order(dest, tmp_str, str_len);
-                       dest[str_len] = '\0';
-                       return dest;
-                       break;
-               }
-       }
-
-       dbg( "[SAT] str_len[%d], dest_buf_len[%d]", str_len, dest_buf_len);
-
-       for (i = 0; i < str_len && i < dest_buf_len; i++, j++) {
-               if (src[j] <= 0x7F) {/* GSM Code */
-                       if (src[j] == 0x1B) {/* 2Byte GSM Code */
-                               _convert_gsm_to_unicode(&dest[i], 2, &src[j], 2);
-                               j++;
-                       } else {
-                               _convert_gsm_to_unicode(&dest[i], 2, &src[j], 1);
-                       }
-               } else {
-                       dest[i] = (unsigned short) ((base << shift)     + (src[j] & 0x7F));
-                       dbg( "[SAT] converted0x%x\n", src[j]);
-                       dbg( "[SAT] converted0x%x\n", dest[i]);
-               }
-       }
-       dest[i] = '\0';
-       return dest;
-}
-
-static unsigned short* _swap_byte_order(unsigned short* dest, unsigned short* src, int src_len)
-{
-       int i;
-       for (i = 0; i < src_len; i++) {
-               if (src[i] == '\0')
-                       break;
-               dest[i] = ((src[i] << 8) + (src[i] >> 8));
-       }
-       dest[i] = '\0';
-       return dest;
-}
old mode 100644 (file)
new mode 100755 (executable)
index 54242e7..e8539e6
--- a/src/sim.c
+++ b/src/sim.c
@@ -1,5 +1,5 @@
 /*
- * tel-plugin-socket-communicator
+ * tel-plugin-dbus-tapi
  *
  * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
  *
@@ -23,7 +23,6 @@
 #include <stdlib.h>
 #include <errno.h>
 #include <glib.h>
-#include <glib-object.h>
 #include <gio/gio.h>
 
 #include <tcore.h>
 #include "generated-code.h"
 #include "common.h"
 
+#define DBUS_SIM_STATUS_ERROR "SIM STATUS ERROR"
+#define DBUS_SIM_NOT_FOUND "SIM NOT FOUND"
+#define DBUS_SIM_PERM_BLOCKED "SIM PERM BLOCKED"
+#define DBUS_SIM_CARD_ERROR "SIM CARD ERROR"
+#define DBUS_SIM_NOT_INITIALIZED "SIM NOT INITIALIZED"
+#define DBUS_SIM_INIT_COMPLETED "SIM INIT COMPLETED"
+#define DBUS_SIM_LOCKED "SIM LOCKED"
+#define DBUS_SIM_NOT_READY "SIM NOT READY"
+#define DBUS_SIM_RESPONSE_DATA_ERROR "SIM RESPONSE DATA ERROR"
+#define DBUS_SIM_SERVICE_IS_DISABLED "SIM SERVICE IS DISABLED"
+
+#define DBUS_SIM_GET_COSIM(invocation, co_sim, server) { \
+       co_sim = __get_sim_co_by_cp_name(server, GET_CP_NAME(invocation)); \
+       if (!co_sim) { \
+               err("SIM Core object is NULL"); \
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED); \
+               return TRUE; \
+       } \
+}
+
+#define DBUS_SIM_CHECK_SIM_STATUS(op_type, co_sim) {\
+       if (__check_sim_state(op_type, tcore_sim_get_status(co_sim)) == FALSE) { \
+               err("Invalid SIM status"); \
+               __return_fail_response(invocation, tcore_sim_get_status(co_sim)); \
+               return TRUE; \
+       } \
+}
+
+#define DBUS_SIM_CHECK_SIM_SERVICE_TABLE(op_type, co_sim) {\
+       gboolean b_cphs = FALSE; \
+       b_cphs = tcore_sim_get_cphs_status(co_sim); \
+       if (b_cphs && op_type != GET_MSISDN) { \
+               dbg("CPHS SIM... Do not check SST"); \
+       } else { \
+               struct tel_sim_service_table* svct = tcore_sim_get_service_table(co_sim); \
+               if (svct != NULL) { \
+                       if (__check_sim_service_table(op_type, svct) == FALSE) { \
+                               err("'Service' is disabled in SST"); \
+                               FAIL_RESPONSE(invocation, DBUS_SIM_SERVICE_IS_DISABLED); \
+                               free(svct); \
+                               return TRUE; \
+                       } else { \
+                               dbg("Request to modem"); \
+                               free(svct); \
+                       } \
+               } \
+       } \
+}
+
+#define DBUS_SIM_CHECK_DISPATCH_RET(ret, invocation, ur) {\
+       if (ret != TCORE_RETURN_SUCCESS) { \
+               if (ret == TCORE_RETURN_SIM_DISABLED_IN_SST) { \
+                       err("'Service' is disabled in SST"); \
+                       FAIL_RESPONSE (invocation, DBUS_SIM_SERVICE_IS_DISABLED); \
+               } else { \
+                       err("Dispatch request failed: [0x%x]", ret); \
+                       FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED); \
+               } \
+               tcore_user_request_unref(ur); \
+       } \
+}
 
-static gboolean dbus_sim_data_request(struct custom_data *ctx, enum tel_sim_status sim_status )
+enum dbus_tapi_sim_gdbus_method_name {
+       GET_INIT_STATUS = 1,
+       GET_CARD_TYPE,
+       GET_IMSI,
+       GET_ECC,
+       GET_ICCID = 5,
+       GET_LANGUAGE,
+       SET_LANGUAGE,
+       GET_CALL_FORWARDING,
+       SET_CALL_FORWARDING,
+       GET_MESSAGE_WAITING = 10,
+       SET_MESSAGE_WAITING,
+       GET_MAILBOX,
+       SET_MAILBOX,
+       GET_CPHS_INFO,
+       GET_SVCT = 15,
+       GET_MSISDN,
+       GET_OPLMWACT,
+       GET_SPN,
+       GET_CPHS_NET_NAME,
+       AUTHENTICATION = 20,
+       VERIFY_SEC,
+       VERIFY_PUK,
+       CHANGE_PIN,
+       DISABLE_FACILITY,
+       ENABLE_FACILITY = 25,
+       GET_FACILITY,
+       GET_LOCK_INFO,
+       TRANSFER_APDU,
+       GET_ATR,
+       GET_FIELDS = 30,        //for get various data at once
+       GET_GID,
+       SET_POWERSTATE,
+
+       //for notification
+       STATUS = 100,
+       REFRESHED,
+};
+
+#if 0
+static gboolean __is_valid_sim_status(enum tel_sim_status sim_status)
 {
-       UserRequest *ur = NULL;
-       TcorePlugin *plugin = NULL;
+       switch(sim_status) {
+       case SIM_STATUS_INIT_COMPLETED:
+       case SIM_STATUS_INITIALIZING:
+       case SIM_STATUS_PIN_REQUIRED:
+       case SIM_STATUS_PUK_REQUIRED:
+       case SIM_STATUS_LOCK_REQUIRED:
+       case SIM_STATUS_CARD_BLOCKED:
+       case SIM_STATUS_NCK_REQUIRED:
+       case SIM_STATUS_NSCK_REQUIRED:
+       case SIM_STATUS_SPCK_REQUIRED:
+       case SIM_STATUS_CCK_REQUIRED:
+               return TRUE;
+       default:
+               return FALSE;
+       }
+}
+#endif
 
-       switch(sim_status){
-               case SIM_STATUS_INITIALIZING :
-               case SIM_STATUS_PIN_REQUIRED :
-               case SIM_STATUS_PUK_REQUIRED :
-               case SIM_STATUS_CARD_BLOCKED :
-               case SIM_STATUS_NCK_REQUIRED :
-               case SIM_STATUS_NSCK_REQUIRED :
-               case SIM_STATUS_SPCK_REQUIRED :
-               case SIM_STATUS_CCK_REQUIRED :
-               case SIM_STATUS_LOCK_REQUIRED :
-                       if(ctx->sim_recv_first_status == FALSE){
-                               dbg("received sim status at first time");
-                               plugin = tcore_server_find_plugin(ctx->server, TCORE_PLUGIN_DEFAULT);
-
-                               dbg("req - TREQ_SIM_GET_ECC ");
-                               ur = tcore_user_request_new(ctx->comm, tcore_plugin_get_description(plugin)->name);
-                               tcore_user_request_set_command(ur, TREQ_SIM_GET_ECC);
-                               tcore_communicator_dispatch_request(ctx->comm, ur);
-                               ctx->sim_recv_first_status = TRUE;
-                       }
-                       break;
+static CoreObject *__get_sim_co_by_cp_name(Server *server, char *cp_name)
+{
+       TcorePlugin *plugin = NULL;
 
-               default :
-                       break;
+       if (!server) {
+               err("server is NULL");
+               return NULL;
        }
-       return TRUE;
+
+       plugin = tcore_server_find_plugin(server, cp_name);
+       return tcore_plugin_ref_core_object(plugin, CORE_OBJECT_TYPE_SIM);
 }
 
-static gboolean on_sim_get_init_status(TelephonySim *sim, GDBusMethodInvocation *invocation,
-               gpointer user_data)
+static CoreObject* __get_sim_co_from_ur(Server *server, UserRequest *ur)
 {
-       struct custom_data *ctx = user_data;
-       gint tmp_cardstatus = 0xff;
-       gboolean b_changed = FALSE;
-       GSList *co_list = NULL;
        CoreObject *co_sim = NULL;
-       TcorePlugin *plugin = NULL;
+       char *modem_name = NULL;
 
-       dbg("Func Entrance");
+       modem_name = tcore_user_request_get_modem_name(ur);
+       if (!modem_name) {
+               err("Modem name is NULL");
+               return co_sim;
+       }
+
+       co_sim = __get_sim_co_by_cp_name(server, modem_name);
+       free(modem_name);
+
+       return co_sim;
+}
+
+static gboolean __check_sim_state(enum dbus_tapi_sim_gdbus_method_name method, enum tel_sim_status sim_status)
+{
+       gboolean ret = TRUE;
+
+       if ((int)sim_status < SIM_STATUS_CARD_ERROR) {
+               err("SIM status is NOT valid");
+               return FALSE;
+       }
+
+       switch (method) {
+       case GET_CARD_TYPE:
+       case GET_ECC:
+       case GET_ICCID:
+       case GET_LANGUAGE:
+       case GET_CPHS_INFO:
+       case GET_SPN:
+       case AUTHENTICATION:
+       case TRANSFER_APDU:
+       case GET_ATR:
+       // Regarding Lock facilities
+       case CHANGE_PIN:
+       case ENABLE_FACILITY:
+       case DISABLE_FACILITY:
+       case GET_FACILITY:
+       case GET_LOCK_INFO:
+       case VERIFY_SEC:
+       case VERIFY_PUK:
+               if (sim_status == SIM_STATUS_CARD_ERROR
+                               || sim_status == SIM_STATUS_CARD_BLOCKED
+                               || sim_status == SIM_STATUS_CARD_NOT_PRESENT
+                               || sim_status == SIM_STATUS_CARD_REMOVED
+                               || sim_status == SIM_STATUS_UNKNOWN
+                               || sim_status == SIM_STATUS_CARD_POWEROFF) {
+                       ret = FALSE;
+               }
+       break;
+       case GET_IMSI:
+       case GET_SVCT:
+       case GET_MSISDN:
+       case GET_OPLMWACT:
+       case GET_CPHS_NET_NAME:
+       case GET_CALL_FORWARDING:
+       case SET_CALL_FORWARDING:
+       case GET_MESSAGE_WAITING:
+       case SET_MESSAGE_WAITING:
+       case GET_MAILBOX:
+       case SET_MAILBOX:
+       case SET_LANGUAGE:
+       case GET_FIELDS:
+       case GET_GID:
+               if (sim_status != SIM_STATUS_INIT_COMPLETED) {
+                       ret = FALSE;
+               }
+       break;
+       case SET_POWERSTATE:
+               if (sim_status != SIM_STATUS_INIT_COMPLETED
+                               && sim_status != SIM_STATUS_INITIALIZING
+                               && sim_status != SIM_STATUS_PIN_REQUIRED
+                               && sim_status != SIM_STATUS_CARD_BLOCKED
+                               && sim_status != SIM_STATUS_CARD_POWEROFF) {
+                       ret = FALSE;
+               }
+       break;
+       case GET_INIT_STATUS:
+       case STATUS:
+       case REFRESHED:
+       default:
+               err("Unhandled/Unknown operation: [%d]", method);
+       break;
+       }
+       return ret;
+}
+
+static gboolean __check_sim_service_table(enum dbus_tapi_sim_gdbus_method_name method, struct tel_sim_service_table *svct)
+{
+       gboolean ret = TRUE;
 
-       plugin = tcore_server_find_plugin(ctx->server, TCORE_PLUGIN_DEFAULT);
-       co_list = tcore_plugin_get_core_objects_bytype(plugin, CORE_OBJECT_TYPE_SIM);
-       if (!co_list) {
-               dbg("error- co_list is NULL");
+       switch (method) {
+       case GET_MSISDN:
+               if ( !(svct->sim_type == SIM_TYPE_GSM && svct->table.sst.service[SIM_SST_MSISDN]) &&
+                               !(svct->sim_type == SIM_TYPE_USIM && svct->table.ust.service[SIM_UST_MSISDN]) ) {
+                       ret = FALSE;
+               }
+       break;
+       case GET_CALL_FORWARDING:
+       case SET_CALL_FORWARDING:
+               if ( !(svct->sim_type == SIM_TYPE_GSM && svct->table.sst.service[SIM_SST_CFIS]) &&
+                               !(svct->sim_type == SIM_TYPE_USIM && svct->table.ust.service[SIM_UST_CFIS]) ) {
+                       ret = FALSE;
+               }
+       break;
+       case GET_MESSAGE_WAITING:
+       case SET_MESSAGE_WAITING:
+               if ( !(svct->sim_type == SIM_TYPE_GSM && svct->table.sst.service[SIM_SST_MWIS]) &&
+                               !(svct->sim_type == SIM_TYPE_USIM && svct->table.ust.service[SIM_UST_MWIS]) ) {
+                       ret = FALSE;
+               }
+       break;
+       case GET_MAILBOX:
+       case SET_MAILBOX:
+               if ( !(svct->sim_type == SIM_TYPE_GSM && svct->table.sst.service[SIM_SST_MBDN]) &&
+                               !(svct->sim_type == SIM_TYPE_USIM && svct->table.ust.service[SIM_UST_MBDN]) ) {
+                       ret = FALSE;
+               }
+       break;
+       default:
+               err("Unhandled/Unknown operation: [%d]", method);
+       break;
        }
-       co_sim = (CoreObject *)co_list->data;
-       g_slist_free(co_list);
 
-       if (!co_sim) {
-               dbg("error- co_sim is NULL");
+       return ret;
+}
+
+static void __return_fail_response(GDBusMethodInvocation *invocation, enum tel_sim_status sim_status)
+{
+       dbg("SIM Status: [%d]", sim_status);
+
+       switch (sim_status) {
+       case SIM_STATUS_CARD_NOT_PRESENT:
+       case SIM_STATUS_CARD_REMOVED:
+               FAIL_RESPONSE(invocation, DBUS_SIM_NOT_FOUND);
+       break;
+       case SIM_STATUS_CARD_BLOCKED:
+               FAIL_RESPONSE(invocation, DBUS_SIM_PERM_BLOCKED);
+       break;
+       case SIM_STATUS_CARD_ERROR:
+       case SIM_STATUS_CARD_CRASHED:
+               FAIL_RESPONSE(invocation, DBUS_SIM_CARD_ERROR);
+       break;
+       case SIM_STATUS_INITIALIZING:
+               FAIL_RESPONSE(invocation, DBUS_SIM_NOT_INITIALIZED);
+       break;
+       case SIM_STATUS_INIT_COMPLETED:
+               FAIL_RESPONSE(invocation, DBUS_SIM_INIT_COMPLETED);
+       break;
+       case SIM_STATUS_PIN_REQUIRED:
+       case SIM_STATUS_PUK_REQUIRED:
+       case SIM_STATUS_NCK_REQUIRED:
+       case SIM_STATUS_NSCK_REQUIRED:
+       case SIM_STATUS_SPCK_REQUIRED:
+       case SIM_STATUS_CCK_REQUIRED:
+       case SIM_STATUS_LOCK_REQUIRED:
+               FAIL_RESPONSE(invocation, DBUS_SIM_LOCKED);
+       break;
+       case SIM_STATUS_UNKNOWN:
+               FAIL_RESPONSE(invocation, DBUS_SIM_NOT_READY);
+       break;
+       default:
+               dbg("Unhandled/Unknown status: [%d]", sim_status);
+               FAIL_RESPONSE(invocation, DBUS_SIM_STATUS_ERROR);
+       break;
        }
+}
+
+static gboolean on_sim_get_init_status(TelephonySim *sim, GDBusMethodInvocation *invocation,
+       gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       enum tel_sim_status sim_status = SIM_STATUS_UNKNOWN;
+       gboolean sim_changed = FALSE;
+       CoreObject *co_sim = NULL;
+
+       if (!check_access_control (invocation, AC_SIM, "r"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
 
-       tmp_cardstatus = tcore_sim_get_status(co_sim);
-       b_changed = tcore_sim_get_identification(co_sim);
-       dbg("sim init info - cardstatus[%d],changed[%d]", tmp_cardstatus, b_changed);
+       sim_status = tcore_sim_get_status(co_sim);
+       sim_changed = tcore_sim_get_identification(co_sim);
+       dbg("SIM - Status: [%d] Changed: [%s]",
+               sim_status, (sim_changed ? "Yes" : "No"));
 
-       telephony_sim_complete_get_init_status(sim, invocation, tmp_cardstatus, b_changed);
+       telephony_sim_complete_get_init_status(sim, invocation, sim_status, sim_changed);
 
        return TRUE;
 }
 
 static gboolean on_sim_get_card_type(TelephonySim *sim, GDBusMethodInvocation *invocation,
-               gpointer user_data)
+       gpointer user_data)
 {
        struct custom_data *ctx = user_data;
-       enum tel_sim_type type = SIM_TYPE_UNKNOWN;
-       GSList *co_list = NULL;
+       enum tel_sim_type sim_type = SIM_TYPE_UNKNOWN;
        CoreObject *co_sim = NULL;
-       TcorePlugin *plugin = NULL;
-
-       dbg("Func Entrance");
 
-       plugin = tcore_server_find_plugin(ctx->server, TCORE_PLUGIN_DEFAULT);
-       co_list = tcore_plugin_get_core_objects_bytype(plugin, CORE_OBJECT_TYPE_SIM);
-       if (!co_list) {
-               dbg("error- co_list is NULL");
-       }
-       co_sim = (CoreObject *)co_list->data;
-       g_slist_free(co_list);
-
-       if (!co_sim) {
-               dbg("error- co_sim is NULL");
-       }
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(GET_CARD_TYPE, co_sim);
 
-       type = tcore_sim_get_type(co_sim);
+       sim_type = tcore_sim_get_type(co_sim);
 
-       telephony_sim_complete_get_card_type(sim, invocation, type);
+       telephony_sim_complete_get_card_type(sim, invocation, sim_type);
 
        return TRUE;
 }
@@ -142,27 +390,23 @@ static gboolean on_sim_get_imsi(TelephonySim *sim, GDBusMethodInvocation *invoca
 {
        struct custom_data *ctx = user_data;
        struct tel_sim_imsi *n_imsi;
-       GSList *co_list = NULL;
        CoreObject *co_sim = NULL;
-       TcorePlugin *plugin = NULL;
 
-       dbg("Func Entrance");
-       plugin = tcore_server_find_plugin(ctx->server, TCORE_PLUGIN_DEFAULT);
-       co_list = tcore_plugin_get_core_objects_bytype(plugin, CORE_OBJECT_TYPE_SIM);
-       if (!co_list) {
-               dbg("error- co_list is NULL");
-       }
-       co_sim = (CoreObject *)co_list->data;
-       g_slist_free(co_list);
+       if (!check_access_control (invocation, AC_SIM, "r"))
+               return TRUE;
 
-       if (!co_sim) {
-               dbg("error- co_sim is NULL");
-       }
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(GET_IMSI, co_sim);
 
        n_imsi = tcore_sim_get_imsi(co_sim);
-       dbg("n_imsi->plmn[%s]", n_imsi->plmn);
-       dbg("n_imsi->msin[%s]", n_imsi->msin);
-       telephony_sim_complete_get_imsi(sim, invocation, n_imsi->plmn, n_imsi->msin);
+       if (!n_imsi) {
+               FAIL_RESPONSE (invocation, DBUS_SIM_RESPONSE_DATA_ERROR);
+               return TRUE;
+       } else {
+               telephony_sim_complete_get_imsi(sim, invocation, n_imsi->plmn, n_imsi->msin);
+               free(n_imsi);
+       }
+
        return TRUE;
 }
 
@@ -170,27 +414,50 @@ static gboolean on_sim_get_ecc(TelephonySim *sim, GDBusMethodInvocation *invocat
                gpointer user_data)
 {
        struct custom_data *ctx = user_data;
-       GVariant *gv = NULL;
-       GVariantBuilder b;
-       int i;
-
-       dbg("Func Entrance");
+       CoreObject *co_sim = NULL;
+       struct tel_sim_ecc_list *ecc_list = NULL;
+
+       if (!check_access_control (invocation, AC_SIM, "r"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(GET_ECC, co_sim);
+
+       ecc_list = tcore_sim_get_ecc_list(co_sim);
+       if (!ecc_list) {
+               UserRequest *ur = NULL;
+               TReturn ret;
+               dbg("po->ecc_list is NULL. Request to Modem.");
+               ur = MAKE_UR(ctx, sim, invocation);
+               tcore_user_request_set_command(ur, TREQ_SIM_GET_ECC);
+               ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+               if (ret != TCORE_RETURN_SUCCESS) {
+                       FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+                       dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+                       tcore_user_request_unref(ur);
+               }
+       } else {
+               GVariant *gv = NULL;
+               GVariantBuilder b;
+               int i;
+               g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+               for (i = 0; i<ecc_list->ecc_count; i++) {
+                       dbg("ecc[%d] : ecc_category=[0x%x], ecc_num=[%s], ecc_string=[%s]",
+                                       i, ecc_list->ecc[i].ecc_category, ecc_list->ecc[i].ecc_num, ecc_list->ecc[i].ecc_string);
+                       g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+                       g_variant_builder_add(&b, "{sv}", "category", g_variant_new_int32(ecc_list->ecc[i].ecc_category));
+                       g_variant_builder_add(&b, "{sv}", "number", g_variant_new_string(ecc_list->ecc[i].ecc_num));
+                       g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string(ecc_list->ecc[i].ecc_string));
+                       g_variant_builder_close(&b);
+               }
+               gv = g_variant_builder_end(&b);
+               if (!gv)
+                       dbg("error - ecc gv is NULL");
 
-       g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+               telephony_sim_complete_get_ecc(sim, invocation, gv);
 
-       for (i = 0; i < ctx->cached_sim_ecc.ecc_count; i++) {
-               g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
-               g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string(ctx->cached_sim_ecc.ecc[i].ecc_string));
-               g_variant_builder_add(&b, "{sv}", "number", g_variant_new_string(ctx->cached_sim_ecc.ecc[i].ecc_num));
-               g_variant_builder_add(&b, "{sv}", "category", g_variant_new_int32(ctx->cached_sim_ecc.ecc[i].ecc_category));
-               g_variant_builder_close(&b);
+               free(ecc_list);
        }
-       gv = g_variant_builder_end(&b);
-
-       if (!gv)
-               dbg("error - ecc gv is NULL");
-
-       telephony_sim_complete_get_ecc(sim, invocation, gv);
 
        return TRUE;
 }
@@ -200,12 +467,36 @@ static gboolean on_sim_get_iccid(TelephonySim *sim, GDBusMethodInvocation *invoc
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       TReturn ret;
+       CoreObject *co_sim = NULL;
+       struct tel_sim_iccid* iccid = NULL;
 
        dbg("Func Entrance");
-       ur = MAKE_UR(ctx, sim, invocation);
 
-       tcore_user_request_set_command(ur, TREQ_SIM_GET_ICCID);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (!check_access_control (invocation, AC_SIM, "r"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(GET_ICCID, co_sim);
+
+       iccid = tcore_sim_get_iccid(co_sim);
+
+       if (!iccid) {
+               ur = MAKE_UR(ctx, sim, invocation);
+
+               tcore_user_request_set_command(ur, TREQ_SIM_GET_ICCID);
+               ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+
+               if (ret != TCORE_RETURN_SUCCESS) {
+                       FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+                       dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+                       tcore_user_request_unref(ur);
+               }
+       } else {
+               telephony_sim_complete_get_iccid(sim, invocation, SIM_ACCESS_SUCCESS,
+                                                                               iccid->iccid);
+               free(iccid);
+       }
 
        return TRUE;
 }
@@ -215,11 +506,24 @@ static gboolean on_sim_get_language(TelephonySim *sim, GDBusMethodInvocation *in
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       TReturn ret;
+       CoreObject *co_sim = NULL;
+
+       if (!check_access_control (invocation, AC_SIM, "r"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(GET_LANGUAGE, co_sim);
 
        ur = MAKE_UR(ctx, sim, invocation);
 
        tcore_user_request_set_command(ur, TREQ_SIM_GET_LANGUAGE);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -229,8 +533,16 @@ static gboolean on_sim_set_language(TelephonySim *sim, GDBusMethodInvocation *in
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
-
+       TReturn ret;
+       CoreObject *co_sim = NULL;
        struct treq_sim_set_language set_language;
+
+       if (!check_access_control (invocation, AC_SIM, "w"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(SET_LANGUAGE, co_sim);
+
        memset(&set_language, 0, sizeof(struct treq_sim_set_language));
        set_language.language = arg_language;
 
@@ -239,65 +551,392 @@ static gboolean on_sim_set_language(TelephonySim *sim, GDBusMethodInvocation *in
 
        tcore_user_request_set_data(ur, sizeof(struct treq_sim_set_language), &set_language);
        tcore_user_request_set_command(ur, TREQ_SIM_SET_LANGUAGE);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
 
-static gboolean on_sim_get_callforwarding(TelephonySim *sim, GDBusMethodInvocation *invocation,
+static gboolean on_sim_get_call_forwarding(TelephonySim *sim, GDBusMethodInvocation *invocation,
                gpointer user_data)
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       TReturn ret;
+       CoreObject *co_sim = NULL;
 
-       ur = MAKE_UR(ctx, sim, invocation);
+       if (!check_access_control (invocation, AC_SIM, "r"))
+               return TRUE;
 
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(GET_CALL_FORWARDING, co_sim);
+       DBUS_SIM_CHECK_SIM_SERVICE_TABLE(GET_CALL_FORWARDING, co_sim);
+
+       ur = MAKE_UR(ctx, sim, invocation);
        tcore_user_request_set_command(ur, TREQ_SIM_GET_CALLFORWARDING);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       DBUS_SIM_CHECK_DISPATCH_RET(ret, invocation, ur);
 
        return TRUE;
 }
 
-static gboolean on_sim_get_message_waiting(TelephonySim *sim, GDBusMethodInvocation *invocation,
+static gboolean on_sim_set_call_forwarding(TelephonySim *sim, GDBusMethodInvocation *invocation,
+               gboolean  arg_cphs,
+               gint arg_rec_index,
+               gint arg_msp_num,
+               guchar arg_cfu_status,
+               gint arg_ton,
+               gint arg_npi,
+               const gchar *arg_number,
+               gint arg_cc2_id,
+               gint arg_ext7_id,
+               gboolean arg_cphs_line1,
+               gboolean arg_cphs_line2,
+               gboolean arg_cphs_fax,
+               gboolean arg_cphs_data,
                gpointer user_data)
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       TReturn ret;
+       CoreObject *co_sim = NULL;
+       struct treq_sim_set_callforwarding req_cf;
+
+       if (!check_access_control (invocation, AC_SIM, "w"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(SET_CALL_FORWARDING, co_sim);
+       DBUS_SIM_CHECK_SIM_SERVICE_TABLE(SET_CALL_FORWARDING, co_sim);
 
        ur = MAKE_UR(ctx, sim, invocation);
 
+       memset(&req_cf, 0, sizeof(struct treq_sim_set_callforwarding));
+
+       req_cf.b_cphs = arg_cphs;
+
+       if (req_cf.b_cphs) {
+               req_cf.cphs_cf.b_line1 = arg_cphs_line1;
+               req_cf.cphs_cf.b_line2 = arg_cphs_line2;
+               req_cf.cphs_cf.b_fax = arg_cphs_fax;
+               req_cf.cphs_cf.b_data = arg_cphs_data;
+               dbg("b_line1[%d], b_line2[%d], b_fax[%d], b_data[%d]",
+                               req_cf.cphs_cf.b_line1, req_cf.cphs_cf.b_line2,
+                               req_cf.cphs_cf.b_fax, req_cf.cphs_cf.b_data);
+       } else {
+               req_cf.cf.rec_index = arg_rec_index;
+               req_cf.cf.msp_num = arg_msp_num;
+               req_cf.cf.cfu_status = arg_cfu_status;
+               req_cf.cf.ton = arg_ton;
+               req_cf.cf.npi = arg_npi;
+               memcpy(&req_cf.cf.cfu_num, arg_number, strlen(arg_number));
+               req_cf.cf.cc2_id = arg_cc2_id;
+               req_cf.cf.ext7_id = arg_ext7_id;
+               dbg("rec_index[%d], msp_num[%d], cfu_status[0x%x], ton[%d], "
+                               "npi[%d], cfu_num[%s], cc2_id[%d], ext7_id[%d]",
+                               req_cf.cf.rec_index, req_cf.cf.msp_num, req_cf.cf.cfu_status, req_cf.cf.ton,
+                               req_cf.cf.npi, req_cf.cf.cfu_num, req_cf.cf.cc2_id, req_cf.cf.ext7_id);
+       }
+
+       tcore_user_request_set_data(ur, sizeof(struct treq_sim_set_callforwarding), &req_cf);
+       tcore_user_request_set_command(ur, TREQ_SIM_SET_CALLFORWARDING);
+
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       DBUS_SIM_CHECK_DISPATCH_RET(ret, invocation, ur);
+
+       return TRUE;
+}
+
+static gboolean on_sim_get_message_waiting(TelephonySim *sim, GDBusMethodInvocation *invocation,
+               gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur = NULL;
+       TReturn ret;
+       CoreObject *co_sim = NULL;
+
+       if (!check_access_control (invocation, AC_SIM, "r"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(GET_MESSAGE_WAITING, co_sim);
+       DBUS_SIM_CHECK_SIM_SERVICE_TABLE(GET_MESSAGE_WAITING, co_sim);
+
+       ur = MAKE_UR(ctx, sim, invocation);
        tcore_user_request_set_command(ur, TREQ_SIM_GET_MESSAGEWAITING);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       DBUS_SIM_CHECK_DISPATCH_RET(ret, invocation, ur);
 
        return TRUE;
 }
 
-static gboolean on_sim_get_mailbox(TelephonySim *sim, GDBusMethodInvocation *invocation,
+static gboolean on_sim_set_message_waiting(TelephonySim *sim, GDBusMethodInvocation *invocation,
+               gboolean  arg_cphs,
+               gint arg_rec_index,
+               guchar arg_indicator_status,
+               gint arg_voice_cnt,
+               gint arg_fax_cnt,
+               gint arg_email_cnt,
+               gint arg_other_cnt,
+               gint arg_video_cnt,
+               gboolean arg_cphs_voice1,
+               gboolean arg_cphs_voice2,
+               gboolean arg_cphs_fax,
+               gboolean arg_cphs_data,
                gpointer user_data)
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       TReturn ret;
+       CoreObject *co_sim = NULL;
+       struct treq_sim_set_messagewaiting req_mw;
+
+       if (!check_access_control (invocation, AC_SIM, "w"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(SET_MESSAGE_WAITING, co_sim);
+       DBUS_SIM_CHECK_SIM_SERVICE_TABLE(SET_MESSAGE_WAITING, co_sim);
 
        ur = MAKE_UR(ctx, sim, invocation);
 
+       memset(&req_mw, 0, sizeof(struct treq_sim_set_messagewaiting));
+
+       req_mw.b_cphs = arg_cphs;
+
+       if (req_mw.b_cphs) {
+               req_mw.cphs_mw.b_voice1 = arg_cphs_voice1;
+               req_mw.cphs_mw.b_voice2 = arg_cphs_voice2;
+               req_mw.cphs_mw.b_fax = arg_cphs_fax;
+               req_mw.cphs_mw.b_data = arg_cphs_data;
+               dbg("b_voice1[%d],b_voice2[%d],b_fax[%d], b_data[%d]",
+                               req_mw.cphs_mw.b_voice1,
+                               req_mw.cphs_mw.b_voice2,
+                               req_mw.cphs_mw.b_fax,
+                               req_mw.cphs_mw.b_data);
+       } else {
+               req_mw.mw.rec_index = arg_rec_index;
+               req_mw.mw.indicator_status = arg_indicator_status;
+               req_mw.mw.voice_count = arg_voice_cnt;
+               req_mw.mw.fax_count = arg_fax_cnt;
+               req_mw.mw.email_count = arg_email_cnt;
+               req_mw.mw.other_count = arg_other_cnt;
+               req_mw.mw.video_count = arg_video_cnt;
+               dbg("rec_index[%d], indicator_status[0x%x],     voice_count[%d], fax_count[%d], email_count[%d], other_count[%d], video_count[%d]",
+                               req_mw.mw.rec_index,
+                               req_mw.mw.indicator_status,
+                               req_mw.mw.voice_count,
+                               req_mw.mw.fax_count,
+                               req_mw.mw.email_count,
+                               req_mw.mw.other_count,
+                               req_mw.mw.video_count);
+       }
+
+       tcore_user_request_set_data(ur, sizeof(struct treq_sim_set_messagewaiting), &req_mw);
+       tcore_user_request_set_command(ur, TREQ_SIM_SET_MESSAGEWAITING);
+
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       DBUS_SIM_CHECK_DISPATCH_RET(ret, invocation, ur);
+
+       return TRUE;
+}
+
+static gboolean on_sim_get_mailbox(TelephonySim *sim, GDBusMethodInvocation *invocation,
+               gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur = NULL;
+       TReturn ret;
+       CoreObject *co_sim = NULL;
+
+       if (!check_access_control (invocation, AC_SIM, "r"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(GET_MAILBOX, co_sim);
+       DBUS_SIM_CHECK_SIM_SERVICE_TABLE(GET_MAILBOX, co_sim);
+
+       ur = MAKE_UR(ctx, sim, invocation);
        tcore_user_request_set_command(ur, TREQ_SIM_GET_MAILBOX);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       DBUS_SIM_CHECK_DISPATCH_RET(ret, invocation, ur);
 
        return TRUE;
 }
 
+static gboolean on_sim_set_mailbox(TelephonySim *sim, GDBusMethodInvocation *invocation,
+               gboolean arg_cphs,
+               gint arg_type,
+               gint arg_rec_index,
+               gint arg_profile_number,
+               gint arg_alpha_id_max_len,
+               const gchar *arg_alpha_id,
+               gint arg_ton,
+               gint arg_npi,
+               const gchar *arg_number,
+               gint arg_cc_id,
+               gint arg_ext1_id,
+               gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur = NULL;
+       TReturn ret;
+       CoreObject *co_sim = NULL;
+       struct treq_sim_set_mailbox req_mb;
+
+       if (!check_access_control (invocation, AC_SIM, "w"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(SET_MAILBOX, co_sim);
+       DBUS_SIM_CHECK_SIM_SERVICE_TABLE(SET_MAILBOX, co_sim);
+
+       ur = MAKE_UR(ctx, sim, invocation);
+
+       memset(&req_mb, 0, sizeof(struct treq_sim_set_mailbox));
+
+       req_mb.b_cphs = arg_cphs;
+
+       req_mb.mb_info.mb_type = arg_type;
+       req_mb.mb_info.rec_index = arg_rec_index;
+       req_mb.mb_info.profile_number = arg_profile_number;
+       req_mb.mb_info.number_info.alpha_id_max_len = arg_alpha_id_max_len;
+       if (strlen(arg_alpha_id))
+               memcpy(&req_mb.mb_info.number_info.alpha_id, arg_alpha_id, strlen(arg_alpha_id));
+       req_mb.mb_info.number_info.ton = arg_npi;
+       req_mb.mb_info.number_info.npi = arg_npi;
+       if (strlen(arg_number))
+               memcpy(&req_mb.mb_info.number_info.num, arg_number, strlen(arg_number));
+       req_mb.mb_info.number_info.cc_id = arg_ext1_id;
+       req_mb.mb_info.number_info.ext1_id = arg_ext1_id;
+
+       dbg("b_cphs[%d] mb_type[%d], rec_index[%d], profile_number[%d], alpha_id_max_len[%d], "
+                       "alpha_id[%s], ton[%d], npi[%d], num[%s], cc_id[%d], ext1_id[%d]",
+                       req_mb.b_cphs,
+                       req_mb.mb_info.mb_type,
+                       req_mb.mb_info.rec_index,
+                       req_mb.mb_info.profile_number,
+                       req_mb.mb_info.number_info.alpha_id_max_len,
+                       req_mb.mb_info.number_info.alpha_id,
+                       req_mb.mb_info.number_info.ton,
+                       req_mb.mb_info.number_info.npi,
+                       req_mb.mb_info.number_info.num,
+                       req_mb.mb_info.number_info.cc_id,
+                       req_mb.mb_info.number_info.ext1_id)
+
+       tcore_user_request_set_data(ur, sizeof(struct treq_sim_set_mailbox), &req_mb);
+       tcore_user_request_set_command(ur, TREQ_SIM_SET_MAILBOX);
+
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       DBUS_SIM_CHECK_DISPATCH_RET(ret, invocation, ur);
+
+       return TRUE;
+}
 
 static gboolean on_sim_get_cphsinfo(TelephonySim *sim, GDBusMethodInvocation *invocation,
                gpointer user_data)
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       TReturn ret;
+       CoreObject *co_sim = NULL;
+
+       if (!check_access_control (invocation, AC_SIM, "r"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(GET_CPHS_INFO, co_sim);
 
        ur = MAKE_UR(ctx, sim, invocation);
 
        tcore_user_request_set_command(ur, TREQ_SIM_GET_CPHS_INFO);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+
+static gboolean on_sim_get_service_table(TelephonySim *sim, GDBusMethodInvocation *invocation,
+               gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       CoreObject *co_sim = NULL;
+       struct tel_sim_service_table *svct = NULL;
+
+       if (!check_access_control (invocation, AC_SIM, "r"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(GET_SVCT, co_sim);
+
+       svct = tcore_sim_get_service_table(co_sim);
+       if (!svct) {
+               UserRequest *ur = NULL;
+               TReturn ret;
+               ur = MAKE_UR(ctx, sim, invocation);
+
+               dbg("Not cached. Request to modem");
+               tcore_user_request_set_command(ur, TREQ_SIM_GET_SERVICE_TABLE);
+               ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+               if (ret != TCORE_RETURN_SUCCESS) {
+                       FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+                       dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+                       tcore_user_request_unref(ur);
+               }
+       } else {
+               GVariantBuilder builder;
+               GVariant * inner_gv = NULL;
+               GVariant *svct_gv = NULL;
+               int i =0;
+               dbg("TRESP_SIM_GET_SERVICE_TABLE");
+
+               g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
+               if (svct->sim_type == SIM_TYPE_GSM) {
+                       for (i = 0; i < SIM_SST_SERVICE_CNT_MAX; i++) {
+                               g_variant_builder_add (&builder, "y", svct->table.sst.service[i]);
+                       }
+               } else if (svct->sim_type == SIM_TYPE_USIM) {
+                       for (i = 0; i < SIM_UST_SERVICE_CNT_MAX; i++) {
+                               g_variant_builder_add (&builder, "y", svct->table.ust.service[i]);
+                       }
+               } else if(svct->sim_type == SIM_TYPE_RUIM) {
+                       if(SIM_CDMA_SVC_TABLE == svct->table.cst.cdma_svc_table) {
+                               for(i = 0; i < SIM_CDMA_ST_SERVICE_CNT_MAX; i++) {
+                                       g_variant_builder_add (&builder, "iy", svct->table.cst.cdma_svc_table,
+                                                                                       svct->table.cst.service.cdma_service[i]);
+                               }
+                       } else if(SIM_CSIM_SVC_TABLE == svct->table.cst.cdma_svc_table) {
+                               for(i = 0; i < SIM_CSIM_ST_SERVICE_CNT_MAX; i++) {
+                                       g_variant_builder_add (&builder, "iy", svct->table.cst.cdma_svc_table,
+                                                                                       svct->table.cst.service.csim_service[i]);
+                               }
+                       } else {
+                               err("Invalid cdma_svc_table:[%d]", svct->table.cst.cdma_svc_table);
+                       }
+               } else {
+                       err("Unknown SIM type: [%d]", svct->sim_type);
+               }
+               inner_gv = g_variant_builder_end(&builder);
+               svct_gv = g_variant_new("v", inner_gv);
+
+               telephony_sim_complete_get_service_table (sim, invocation,
+                               SIM_ACCESS_SUCCESS,
+                               svct->sim_type,
+                               svct_gv);
 
+               free(svct);
+       }
        return TRUE;
 }
 
@@ -305,12 +944,71 @@ static gboolean on_sim_get_msisdn(TelephonySim *sim, GDBusMethodInvocation *invo
                gpointer user_data)
 {
        struct custom_data *ctx = user_data;
-       UserRequest *ur = NULL;
+       TReturn ret;
+       CoreObject *co_sim = NULL;
+       struct tel_sim_msisdn_list *msisdn_list = NULL;
+       gboolean read_from_modem = FALSE;
+
+       if (!check_access_control (invocation, AC_SIM, "r"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(GET_MSISDN, co_sim);
+       DBUS_SIM_CHECK_SIM_SERVICE_TABLE(GET_MSISDN, co_sim);
+
+       if(SIM_TYPE_NVSIM == tcore_sim_get_type(co_sim)) {
+               dbg("In NV SIM, don't use MSISDN cached");
+               read_from_modem = TRUE;
+       } else {
+               msisdn_list = tcore_sim_get_msisdn_list(co_sim);
+               if (msisdn_list)
+                       read_from_modem = FALSE;
+               else
+                       read_from_modem = TRUE;
+       }
 
-       ur = MAKE_UR(ctx, sim, invocation);
+       if(read_from_modem) {
+               UserRequest *ur = NULL;
+
+               ur = MAKE_UR(ctx, sim, invocation);
+               dbg("Not cached. Request to modem");
+               tcore_user_request_set_command(ur, TREQ_SIM_GET_MSISDN);
+
+               ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+               DBUS_SIM_CHECK_DISPATCH_RET(ret, invocation, ur);
+       } else {
+               GVariant *gv = NULL;
+               int i;
+               GVariantBuilder b;
+               dbg("TRESP_SIM_GET_MSISDN");
+               g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+
+               dbg("msisdn_list->count = %d", msisdn_list->count);
+               for (i = 0;i < msisdn_list->count; i++) {
+                       g_variant_builder_open(&b,G_VARIANT_TYPE("a{sv}"));
+                       g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string((const gchar *)msisdn_list->msisdn[i].name));
+                       if (msisdn_list->msisdn[i].ton == SIM_TON_INTERNATIONAL) {
+                               unsigned char *tmp = (unsigned char *)calloc(SIM_MSISDN_NUMBER_LEN_MAX + 1, 1);
+                               if (tmp!=NULL) {
+                                       tmp[0] = '+';
+                                       strncpy((char *)tmp+1, (const char*)msisdn_list->msisdn[i].num, SIM_MSISDN_NUMBER_LEN_MAX - 1);
+                                       tmp[SIM_MSISDN_NUMBER_LEN_MAX] = '\0';
+                                       g_variant_builder_add(&b, "{sv}", "number", g_variant_new_string((const gchar *)tmp));
+                                       free(tmp);
+                               } else {
+                                       dbg("calloc failed.");
+                                       g_variant_builder_add(&b, "{sv}", "number", g_variant_new_string((const gchar *)msisdn_list->msisdn[i].num));
+                               }
+                       } else {
+                               g_variant_builder_add(&b, "{sv}", "number", g_variant_new_string((const gchar *)msisdn_list->msisdn[i].num));
+                       }
+                       g_variant_builder_close(&b);
+               }
+               gv = g_variant_builder_end(&b);
 
-       tcore_user_request_set_command(ur, TREQ_SIM_GET_MSISDN);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+               telephony_sim_complete_get_msisdn (sim, invocation,     SIM_ACCESS_SUCCESS, gv);
+               free(msisdn_list);
+       }
 
        return TRUE;
 }
@@ -320,12 +1018,24 @@ static gboolean on_sim_get_oplmnwact(TelephonySim *sim, GDBusMethodInvocation *i
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       TReturn ret;
+       CoreObject *co_sim = NULL;
+
+       if (!check_access_control (invocation, AC_SIM, "r"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(GET_OPLMWACT, co_sim);
 
        ur = MAKE_UR(ctx, sim, invocation);
 
        tcore_user_request_set_command(ur, TREQ_SIM_GET_OPLMNWACT);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
-
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -335,12 +1045,34 @@ static gboolean on_sim_get_spn(TelephonySim *sim, GDBusMethodInvocation *invocat
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       TReturn ret;
+       CoreObject *co_sim = NULL;
+       struct tel_sim_spn* spn = NULL;
 
-       ur = MAKE_UR(ctx, sim, invocation);
+       if (!check_access_control (invocation, AC_SIM, "r"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(GET_SPN, co_sim);
+
+       spn = tcore_sim_get_spn(co_sim);
 
-       tcore_user_request_set_command(ur, TREQ_SIM_GET_SPN);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (!spn) {
+               ur = MAKE_UR(ctx, sim, invocation);
 
+               tcore_user_request_set_command(ur, TREQ_SIM_GET_SPN);
+               ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+
+               if (ret != TCORE_RETURN_SUCCESS) {
+                       FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+                       dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+                       tcore_user_request_unref(ur);
+               }
+       } else {
+               telephony_sim_complete_get_spn (sim, invocation, SIM_ACCESS_SUCCESS,
+                                                               spn->display_condition, (const gchar *)spn->spn);
+               free(spn);
+       }
        return TRUE;
 }
 
@@ -349,11 +1081,61 @@ static gboolean on_sim_get_cphs_netname(TelephonySim *sim, GDBusMethodInvocation
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       TReturn ret;
+       CoreObject *co_sim = NULL;
+       struct tel_sim_cphs_netname *cphs_netname = NULL;
+
+       if (!check_access_control (invocation, AC_SIM, "r"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(GET_CPHS_NET_NAME, co_sim);
+
+       cphs_netname = tcore_sim_get_cphs_netname(co_sim);
+
+       if (!cphs_netname) {
+               ur = MAKE_UR(ctx, sim, invocation);
+
+               tcore_user_request_set_command(ur, TREQ_SIM_GET_CPHS_NETNAME);
+               ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+               if (ret != TCORE_RETURN_SUCCESS) {
+                       FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+                       dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+                       tcore_user_request_unref(ur);
+               }
+       } else {
+               telephony_sim_complete_get_cphs_net_name (sim, invocation, SIM_ACCESS_SUCCESS,
+                                                                                       (const gchar *)cphs_netname->full_name,
+                                                                                       (const gchar *)cphs_netname->short_name);
+               free(cphs_netname);
+       }
+
+       return TRUE;
+}
+
+static gboolean on_sim_get_gid(TelephonySim *sim, GDBusMethodInvocation *invocation,
+               gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur = NULL;
+       TReturn ret;
+       CoreObject *co_sim = NULL;
+
+       if (!check_access_control (invocation, AC_SIM, "r"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(GET_GID, co_sim);
 
        ur = MAKE_UR(ctx, sim, invocation);
 
-       tcore_user_request_set_command(ur, TREQ_SIM_GET_CPHS_NETNAME);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       tcore_user_request_set_command(ur, TREQ_SIM_GET_GID);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -371,8 +1153,16 @@ static gboolean on_sim_authentication(TelephonySim *sim, GDBusMethodInvocation *
        GVariant *autn_gv = NULL;
        guchar rt_i;
        int i =0;
-
+       TReturn ret;
+       CoreObject *co_sim = NULL;
        struct treq_sim_req_authentication req_auth;
+
+       if (!check_access_control (invocation, AC_SIM, "x"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(AUTHENTICATION, co_sim);
+
        memset(&req_auth, 0, sizeof(struct treq_sim_req_authentication));
 
        req_auth.auth_type = arg_type;
@@ -397,7 +1187,37 @@ static gboolean on_sim_authentication(TelephonySim *sim, GDBusMethodInvocation *
        ur = MAKE_UR(ctx, sim, invocation);
        tcore_user_request_set_data(ur, sizeof(struct treq_sim_req_authentication), &req_auth);
        tcore_user_request_set_command(ur, TREQ_SIM_REQ_AUTHENTICATION);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               GVariantBuilder builder;
+               GVariant *ak = NULL;
+               GVariant *cp = NULL;
+               GVariant *it = NULL;
+               GVariant *resp = NULL;
+               GVariant *ak_gv = NULL;
+               GVariant *cp_gv = NULL;
+               GVariant *it_gv = NULL;
+               GVariant *resp_gv = NULL;
+
+               g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
+               ak = g_variant_builder_end(&builder);
+               ak_gv = g_variant_new("v", ak);
+
+               g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
+               cp = g_variant_builder_end(&builder);
+               cp_gv = g_variant_new("v", cp);
+
+               g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
+               it = g_variant_builder_end(&builder);
+               it_gv = g_variant_new("v", it);
+
+               g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
+               resp = g_variant_builder_end(&builder);
+               resp_gv = g_variant_new("v", resp);
+
+               telephony_sim_complete_authentication (sim, invocation, SIM_ACCESS_FAILED, 0, 0,        ak_gv,  cp_gv, it_gv, resp_gv);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -409,8 +1229,16 @@ static gboolean on_sim_verify_sec(TelephonySim *sim, GDBusMethodInvocation *invo
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
-
+       TReturn ret;
+       CoreObject *co_sim = NULL;
        struct treq_sim_verify_pins verify_pins;
+
+       if (!check_access_control (invocation, AC_SIM, "x"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(VERIFY_SEC, co_sim);
+
        memset(&verify_pins, 0, sizeof(struct treq_sim_verify_pins));
 
        verify_pins.pin_type = arg_type;
@@ -420,7 +1248,12 @@ static gboolean on_sim_verify_sec(TelephonySim *sim, GDBusMethodInvocation *invo
        ur = MAKE_UR(ctx, sim, invocation);
        tcore_user_request_set_data(ur, sizeof(struct treq_sim_verify_pins), &verify_pins);
        tcore_user_request_set_command(ur, TREQ_SIM_VERIFY_PINS);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -433,8 +1266,16 @@ static gboolean on_sim_verify_puk(TelephonySim *sim, GDBusMethodInvocation *invo
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
-
+       TReturn ret;
+       CoreObject *co_sim = NULL;
        struct treq_sim_verify_puks verify_puks;
+
+       if (!check_access_control (invocation, AC_SIM, "x"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(VERIFY_PUK, co_sim);
+
        memset(&verify_puks, 0, sizeof(struct treq_sim_verify_puks));
 
        verify_puks.puk_type = arg_type;
@@ -446,7 +1287,12 @@ static gboolean on_sim_verify_puk(TelephonySim *sim, GDBusMethodInvocation *invo
        ur = MAKE_UR(ctx, sim, invocation);
        tcore_user_request_set_data(ur, sizeof(struct treq_sim_verify_puks), &verify_puks);
        tcore_user_request_set_command(ur, TREQ_SIM_VERIFY_PUKS);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -459,8 +1305,16 @@ static gboolean on_sim_change_pin(TelephonySim *sim, GDBusMethodInvocation *invo
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
-
+       TReturn ret;
+       CoreObject *co_sim = NULL;
        struct treq_sim_change_pins change_pins;
+
+       if (!check_access_control (invocation, AC_SIM, "x"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(CHANGE_PIN, co_sim);
+
        memset(&change_pins, 0, sizeof(struct treq_sim_change_pins));
 
        change_pins.type = arg_type;
@@ -472,7 +1326,12 @@ static gboolean on_sim_change_pin(TelephonySim *sim, GDBusMethodInvocation *invo
        ur = MAKE_UR(ctx, sim, invocation);
        tcore_user_request_set_data(ur, sizeof(struct treq_sim_change_pins), &change_pins);
        tcore_user_request_set_command(ur, TREQ_SIM_CHANGE_PINS);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -484,8 +1343,16 @@ static gboolean on_sim_disable_facility(TelephonySim *sim, GDBusMethodInvocation
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
-
+       TReturn ret;
        struct treq_sim_disable_facility dis_facility;
+       CoreObject *co_sim = NULL;
+
+       if (!check_access_control (invocation, AC_SIM, "x"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(DISABLE_FACILITY, co_sim);
+
        memset(&dis_facility, 0, sizeof(struct treq_sim_disable_facility));
 
        dbg("arg_type[%d]", arg_type);
@@ -512,7 +1379,7 @@ static gboolean on_sim_disable_facility(TelephonySim *sim, GDBusMethodInvocation
                        dis_facility.type = SIM_FACILITY_PC;
                        break;
                default:
-                       dbg("error - not handled type[%d]", arg_type);
+                       err("Unhandled/Unknown type[0x%x]", arg_type);
                        break;
        }
        dis_facility.password_length = strlen(arg_password);
@@ -521,7 +1388,12 @@ static gboolean on_sim_disable_facility(TelephonySim *sim, GDBusMethodInvocation
        ur = MAKE_UR(ctx, sim, invocation);
        tcore_user_request_set_data(ur, sizeof(struct treq_sim_disable_facility), &dis_facility);
        tcore_user_request_set_command(ur, TREQ_SIM_DISABLE_FACILITY);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -533,8 +1405,16 @@ static gboolean on_sim_enable_facility(TelephonySim *sim, GDBusMethodInvocation
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
-
+       TReturn ret;
        struct treq_sim_enable_facility en_facility;
+       CoreObject *co_sim = NULL;
+
+       if (!check_access_control (invocation, AC_SIM, "x"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(ENABLE_FACILITY, co_sim);
+
        memset(&en_facility, 0, sizeof(struct treq_sim_enable_facility));
 
        dbg("arg_type[%d]", arg_type);
@@ -561,7 +1441,7 @@ static gboolean on_sim_enable_facility(TelephonySim *sim, GDBusMethodInvocation
                        en_facility.type = SIM_FACILITY_PC;
                        break;
                default:
-                       dbg("error - not handled type[%d]", arg_type);
+                       err("Unhandled/Unknown type[0x%x]", arg_type);
                        break;
        }
        en_facility.password_length = strlen(arg_password);
@@ -570,7 +1450,12 @@ static gboolean on_sim_enable_facility(TelephonySim *sim, GDBusMethodInvocation
        ur = MAKE_UR(ctx, sim, invocation);
        tcore_user_request_set_data(ur, sizeof(struct treq_sim_enable_facility), &en_facility);
        tcore_user_request_set_command(ur, TREQ_SIM_ENABLE_FACILITY);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -581,11 +1466,20 @@ static gboolean on_sim_get_facility(TelephonySim *sim, GDBusMethodInvocation *in
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
-
+       TReturn ret;
        struct treq_sim_get_facility_status facility;
+       CoreObject *co_sim = NULL;
+
+       if (!check_access_control (invocation, AC_SIM, "r"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(GET_FACILITY, co_sim);
+
        memset(&facility, 0, sizeof(struct treq_sim_get_facility_status));
 
        dbg("arg_type[%d]", arg_type);
+
        switch (arg_type) {
                case 1:
                        facility.type = SIM_FACILITY_PS;
@@ -609,14 +1503,19 @@ static gboolean on_sim_get_facility(TelephonySim *sim, GDBusMethodInvocation *in
                        facility.type = SIM_FACILITY_PC;
                        break;
                default:
-                       dbg("error - not handled type[%d]", arg_type);
+                       err("Unhandled/Unknown type[0x%x]", arg_type);
                        break;
        }
 
        ur = MAKE_UR(ctx, sim, invocation);
        tcore_user_request_set_data(ur, sizeof(struct treq_sim_get_facility_status), &facility);
        tcore_user_request_set_command(ur, TREQ_SIM_GET_FACILITY_STATUS);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -627,8 +1526,16 @@ static gboolean on_sim_get_lock_info(TelephonySim *sim, GDBusMethodInvocation *i
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
-
+       TReturn ret;
+       CoreObject *co_sim = NULL;
        struct treq_sim_get_lock_info lock_info;
+
+       if (!check_access_control (invocation, AC_SIM, "r"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(GET_LOCK_INFO, co_sim);
+
        memset(&lock_info, 0, sizeof(struct treq_sim_get_lock_info));
 
        dbg("arg_type[%d]", arg_type);
@@ -655,14 +1562,19 @@ static gboolean on_sim_get_lock_info(TelephonySim *sim, GDBusMethodInvocation *i
                        lock_info.type = SIM_FACILITY_PC;
                        break;
                default:
-                       dbg("error - not handled type[%d]", arg_type);
+                       err("Unhandled/Unknown type[0x%x]", arg_type);
                        break;
        }
 
        ur = MAKE_UR(ctx, sim, invocation);
        tcore_user_request_set_data(ur, sizeof(struct treq_sim_get_lock_info), &lock_info);
        tcore_user_request_set_command(ur, TREQ_SIM_GET_LOCK_INFO);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -674,13 +1586,19 @@ static gboolean on_sim_transfer_apdu(TelephonySim *sim, GDBusMethodInvocation *i
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        struct treq_sim_transmit_apdu send_apdu;
-
        GVariantIter *iter = NULL;
        GVariant *inner_gv = NULL;
        guchar rt_i;
+       TReturn ret;
+       CoreObject *co_sim = NULL;
        int i =0;
 
-       dbg("Func Entrance");
+       if (!check_access_control (invocation, AC_SIM, "x"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(TRANSFER_APDU, co_sim);
+
        memset(&send_apdu, 0, sizeof(struct treq_sim_transmit_apdu));
 
        inner_gv = g_variant_get_variant(arg_apdu);
@@ -695,13 +1613,17 @@ static gboolean on_sim_transfer_apdu(TelephonySim *sim, GDBusMethodInvocation *i
        g_variant_unref(inner_gv);
        g_variant_unref(arg_apdu);
 
-       for(i=0; i < (int)send_apdu.apdu_length; i++)
-               dbg("apdu[%d][0x%02x]",i, send_apdu.apdu[i]);
+       tcore_util_hex_dump("[APDU_REQ] ", send_apdu.apdu_length, send_apdu.apdu);
 
        ur = MAKE_UR(ctx, sim, invocation);
        tcore_user_request_set_data(ur, sizeof(struct treq_sim_transmit_apdu), &send_apdu);
        tcore_user_request_set_command(ur, TREQ_SIM_TRANSMIT_APDU);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -711,11 +1633,110 @@ static gboolean on_sim_get_atr(TelephonySim *sim, GDBusMethodInvocation *invocat
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       TReturn ret;
+       CoreObject *co_sim = NULL;
+
+       if (!check_access_control (invocation, AC_SIM, "r"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(GET_ATR, co_sim);
 
        ur = MAKE_UR(ctx, sim, invocation);
 
        tcore_user_request_set_command(ur, TREQ_SIM_GET_ATR);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+
+static gboolean on_sim_get_fields(TelephonySim *sim, GDBusMethodInvocation *invocation,
+               gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       struct tel_sim_imsi *n_imsi = NULL;
+       //struct tel_sim_msisdn_list *msisdn_list = NULL;
+       //struct tel_sim_iccid *iccid = NULL;
+       //struct tel_sim_spn *spn= NULL;
+       CoreObject *co_sim = NULL;
+       GVariantBuilder b;
+       GVariant *gv_fields = NULL;
+
+       dbg("Func Entrance");
+
+       if (!check_access_control (invocation, AC_SIM, "r"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+
+       g_variant_builder_init(&b, G_VARIANT_TYPE("a{svv}}"));
+
+       DBUS_SIM_CHECK_SIM_STATUS(GET_IMSI, co_sim);
+
+       n_imsi = tcore_sim_get_imsi(co_sim);
+       if (n_imsi != NULL) {
+               g_variant_builder_add(&b, "{svv}", "imsi", g_variant_new_string("plmn"), g_variant_new_string(n_imsi->plmn));
+               g_variant_builder_add(&b, "{svv}", "imsi", g_variant_new_string("msin"), g_variant_new_string(n_imsi->msin));
+               free(n_imsi);
+       }
+
+       DBUS_SIM_CHECK_SIM_STATUS(GET_ICCID, co_sim);
+       //n_imsi = tcore_sim_get_imsi(co_sim);
+       //if (n_imsi != NULL) {
+               g_variant_builder_add(&b, "{svv}", "iccid", g_variant_new_string(""), g_variant_new_string(""));
+               //free(n_imsi);
+       //}
+
+       DBUS_SIM_CHECK_SIM_STATUS(GET_MSISDN, co_sim);
+       g_variant_builder_add(&b, "{svv}", "msisdn", g_variant_new_string("name"), g_variant_new_string("number"));
+
+       DBUS_SIM_CHECK_SIM_STATUS(GET_SPN, co_sim);
+       g_variant_builder_add(&b, "{svv}", "spn", g_variant_new_uint16(255), g_variant_new_string("network name"));
+
+       DBUS_SIM_CHECK_SIM_STATUS(GET_INIT_STATUS, co_sim);
+       g_variant_builder_add(&b, "{svv}", "init_status", g_variant_new_uint16(0), g_variant_new_boolean(TRUE));
+
+       gv_fields = g_variant_builder_end(&b);
+
+       telephony_sim_complete_get_fields(sim, invocation, 0, gv_fields);
+
+       return TRUE;
+}
+
+static gboolean on_sim_set_power_state(TelephonySim *sim, GDBusMethodInvocation *invocation,
+               gint arg_state, gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur = NULL;
+       TReturn ret;
+       CoreObject *co_sim = NULL;
+       struct treq_sim_set_powerstate set_powerstate;
+
+       if (!check_access_control (invocation, AC_SIM, "w"))
+               return TRUE;
+
+       DBUS_SIM_GET_COSIM(invocation, co_sim, ctx->server);
+       DBUS_SIM_CHECK_SIM_STATUS(SET_POWERSTATE, co_sim);
+
+       memset(&set_powerstate, 0, sizeof(struct treq_sim_set_powerstate));
+       set_powerstate.state = arg_state;
+
+       dbg("set_powerstate.state[%d]", set_powerstate.state);
+       ur = MAKE_UR(ctx, sim, invocation);
+
+       tcore_user_request_set_data(ur, sizeof(struct treq_sim_set_powerstate), &set_powerstate);
+       tcore_user_request_set_command(ur, TREQ_SIM_SET_POWERSTATE);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -728,7 +1749,9 @@ gboolean dbus_plugin_setup_sim_interface(TelephonyObjectSkeleton *object, struct
        telephony_object_skeleton_set_sim(object, sim);
        g_object_unref(sim);
 
-       dbg("sim = %p", sim);
+       dbg("sim: [%p]", sim);
+
+       telephony_sim_set_cf_state(sim, FALSE);
 
        g_signal_connect (sim,
                        "handle-get-init-status",
@@ -766,8 +1789,13 @@ gboolean dbus_plugin_setup_sim_interface(TelephonyObjectSkeleton *object, struct
                        ctx);
 
        g_signal_connect (sim,
-                       "handle-get-callforwarding",
-                       G_CALLBACK (on_sim_get_callforwarding),
+                       "handle-get-call-forwarding",
+                       G_CALLBACK (on_sim_get_call_forwarding),
+                       ctx);
+
+       g_signal_connect (sim,
+                       "handle-set-call-forwarding",
+                       G_CALLBACK (on_sim_set_call_forwarding),
                        ctx);
 
        g_signal_connect (sim,
@@ -776,16 +1804,31 @@ gboolean dbus_plugin_setup_sim_interface(TelephonyObjectSkeleton *object, struct
                        ctx);
 
        g_signal_connect (sim,
+                       "handle-set-message-waiting",
+                       G_CALLBACK (on_sim_set_message_waiting),
+                       ctx);
+
+       g_signal_connect (sim,
                        "handle-get-mailbox",
                        G_CALLBACK (on_sim_get_mailbox),
                        ctx);
 
        g_signal_connect (sim,
+                       "handle-set-mailbox",
+                       G_CALLBACK (on_sim_set_mailbox),
+                       ctx);
+
+       g_signal_connect (sim,
                        "handle-get-cphsinfo",
                        G_CALLBACK (on_sim_get_cphsinfo),
                        ctx);
 
        g_signal_connect (sim,
+                       "handle-get-service-table",
+                       G_CALLBACK (on_sim_get_service_table),
+                       ctx);
+
+       g_signal_connect (sim,
                        "handle-get-msisdn",
                        G_CALLBACK (on_sim_get_msisdn),
                        ctx);
@@ -806,6 +1849,11 @@ gboolean dbus_plugin_setup_sim_interface(TelephonyObjectSkeleton *object, struct
                        ctx);
 
        g_signal_connect (sim,
+                       "handle-get-gid",
+                       G_CALLBACK (on_sim_get_gid),
+                       ctx);
+
+       g_signal_connect (sim,
                        "handle-authentication",
                        G_CALLBACK (on_sim_authentication),
                        ctx);
@@ -855,518 +1903,940 @@ gboolean dbus_plugin_setup_sim_interface(TelephonyObjectSkeleton *object, struct
                        G_CALLBACK (on_sim_get_atr),
                        ctx);
 
+       g_signal_connect (sim,
+                       "handle-get-fields",
+                       G_CALLBACK (on_sim_get_fields),
+                       ctx);
+
+       g_signal_connect (sim,
+                       "handle-set-powerstate",
+                       G_CALLBACK (on_sim_set_power_state),
+                       ctx);
+
        return TRUE;
 }
 
 gboolean dbus_plugin_sim_response(struct custom_data *ctx, UserRequest *ur,
-               struct dbus_request_info *dbus_info, enum tcore_response_command command,
-               unsigned int data_len, const void *data)
+       struct dbus_request_info *dbus_info, enum tcore_response_command command,
+       unsigned int data_len, const void *data)
 {
-       const struct tresp_sim_verify_pins *resp_verify_pins = data;
-       const struct tresp_sim_verify_puks *resp_verify_puks = data;
-       const struct tresp_sim_change_pins *resp_change_pins = data;
-       const struct tresp_sim_get_facility_status *resp_get_facility = data;
-       const struct tresp_sim_disable_facility *resp_dis_facility = data;
-       const struct tresp_sim_enable_facility *resp_en_facility = data;
-       const struct tresp_sim_transmit_apdu *resp_apdu = data;
-       const struct tresp_sim_get_atr *resp_get_atr = data;
-       const struct tresp_sim_read *resp_read = data;
-       const struct tresp_sim_req_authentication *resp_auth = data;
-       const struct tresp_sim_set_language *resp_set_language = data;
-       const struct tresp_sim_get_lock_info *resp_lock = data;
-       gint f_type =0;
-       int i =0;
-       dbg("Command = [0x%x], data_len = %d", command, data_len);
+       dbg("Response!!! Command: [0x%x] CP Name: [%s]",
+               command, GET_CP_NAME(dbus_info->invocation));
 
        switch (command) {
-               case TRESP_SIM_GET_ECC: {
-                       dbg("resp comm - TRESP_SIM_GET_ECC");
-                       /*                      GVariant *gv = NULL;
-                       GVariantBuilder b;
+       case TRESP_SIM_GET_ECC: {
+               const struct tresp_sim_read *resp_read = data;
+               CoreObject *co_sim = NULL;
+               GVariant *gv = NULL;
+               GVariantBuilder b;
+               int i = 0;
+
+               dbg("TRESP_SIM_GET_ECC - Result: [%s])",
+                       (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
+
+               co_sim = __get_sim_co_from_ur(ctx->server, ur);
+               if (!co_sim) {
+                       err("SIM Core object is NULL");
+                       return FALSE;
+               }
+
+               if (resp_read->result == SIM_ACCESS_SUCCESS) {
+                       tcore_sim_set_ecc_list(co_sim, &resp_read->data.ecc);
+               } else if (resp_read->result == SIM_ACCESS_FILE_NOT_FOUND) {
+                       tcore_sim_set_ecc_list(co_sim, NULL);
+               }
+
+               g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+               for (i = 0; i < resp_read->data.ecc.ecc_count; i++) {
+                       dbg("ecc[%d] : ecc_category=[0x%x], ecc_num=[%s], ecc_string=[%s]", i,
+                               resp_read->data.ecc.ecc[i].ecc_category,
+                               resp_read->data.ecc.ecc[i].ecc_num,
+                               resp_read->data.ecc.ecc[i].ecc_string);
+
+                       g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+                       g_variant_builder_add(&b, "{sv}", "category", g_variant_new_int32(resp_read->data.ecc.ecc[i].ecc_category));
+                       g_variant_builder_add(&b, "{sv}", "number", g_variant_new_string(resp_read->data.ecc.ecc[i].ecc_num));
+                       g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string(resp_read->data.ecc.ecc[i].ecc_string));
+                       g_variant_builder_close(&b);
+               }
+               gv = g_variant_builder_end(&b);
+
+               telephony_sim_complete_get_ecc (dbus_info->interface_object, dbus_info->invocation, gv);
+       }
+       break;
+
+       case TRESP_SIM_GET_ICCID: {
+               const struct tresp_sim_read *resp_read = data;
+               CoreObject *co_sim = NULL;
+
+               dbg("TRESP_SIM_GET_ICCID - Result: [%s] ICCID: [%s])",
+                        (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"),
+                        resp_read->data.iccid.iccid);
+
+               co_sim = __get_sim_co_from_ur(ctx->server, ur);
+               if (!co_sim) {
+                       err("SIM Core object is NULL");
+                       return FALSE;
+               }
+
+               if (resp_read->result == SIM_ACCESS_SUCCESS) {
+                       tcore_sim_set_iccid(co_sim, &resp_read->data.iccid);
+               } else if (resp_read->result == SIM_ACCESS_FILE_NOT_FOUND) {
+                       tcore_sim_set_iccid(co_sim, NULL);
+               }
+
+               telephony_sim_complete_get_iccid(dbus_info->interface_object, dbus_info->invocation,
+                               resp_read->result,
+                               resp_read->data.iccid.iccid);
+       }
+       break;
+
+       case TRESP_SIM_GET_LANGUAGE: {
+               const struct tresp_sim_read *resp_read = data;
+
+               dbg("TRESP_SIM_GET_LANGUAGE - Result: [%s] Language: [0x%2x]",
+                       (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"),
+                       resp_read->data.language.language[0]);
+
+               telephony_sim_complete_get_language(dbus_info->interface_object, dbus_info->invocation,
+                               resp_read->result,
+                               resp_read->data.language.language[0]);
+       }
+       break;
+
+       case TRESP_SIM_SET_LANGUAGE: {
+               const struct tresp_sim_set_data *resp_set_data = data;
+
+               dbg("TRESP_SIM_SET_LANGUAGE - Result: [%s]",
+                       (resp_set_data->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
+
+               telephony_sim_complete_set_language(dbus_info->interface_object, dbus_info->invocation,
+                               resp_set_data->result);
+       }
+       break;
+
+       case TRESP_SIM_GET_CALLFORWARDING: {
+               const struct tresp_sim_read *resp_read = data;
+               GVariant *gv_cf = NULL;
+               GVariant *gv_cphs_cf = NULL;
+               GVariantBuilder b;
+
+               dbg("TRESP_SIM_GET_CALLFORWARDING - Result: [%s] CPHS: [%s]",
+                       (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"),
+                       (resp_read->data.cf.b_cphs ? "Yes" : "No"));
+
+               if (resp_read->data.cf.b_cphs) {
+                       dbg("b_line1[%d], b_line2[%d], b_fax[%d], b_data[%d]",
+                               resp_read->data.cf.cphs_cf.b_line1, resp_read->data.cf.cphs_cf.b_line2,
+                               resp_read->data.cf.cphs_cf.b_fax, resp_read->data.cf.cphs_cf.b_data);
+
+                       g_variant_builder_init(&b, G_VARIANT_TYPE("a{sv}"));
+                       g_variant_builder_add(&b, "{sv}", "b_line1", g_variant_new_boolean(resp_read->data.cf.cphs_cf.b_line1));
+                       g_variant_builder_add(&b, "{sv}", "b_line2", g_variant_new_boolean(resp_read->data.cf.cphs_cf.b_line2));
+                       g_variant_builder_add(&b, "{sv}", "b_fax", g_variant_new_boolean(resp_read->data.cf.cphs_cf.b_fax));
+                       g_variant_builder_add(&b, "{sv}", "b_data", g_variant_new_boolean(resp_read->data.cf.cphs_cf.b_data));
+                       gv_cphs_cf = g_variant_builder_end(&b);
+
+                       g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+                       gv_cf = g_variant_builder_end(&b);
+
+               } else {
+                       int i =0;
+
+                       dbg("profile_count[%d]",resp_read->data.cf.cf_list.profile_count);
+
                        g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+                       for (i = 0; i < resp_read->data.cf.cf_list.profile_count; i++) {
+                               dbg("[%d] : rec_index[0x%x], msp_num[0x%x], cfu_status[0x%x], "
+                                       "cfu_num[%s], ton[0x%x], npi[0x%x], cc2_id[0x%x], ext7_id[0x%x]",
+                                       i, resp_read->data.cf.cf_list.cf[i].rec_index, resp_read->data.cf.cf_list.cf[i].msp_num,
+                                       resp_read->data.cf.cf_list.cf[i].cfu_status, resp_read->data.cf.cf_list.cf[i].cfu_num,
+                                       resp_read->data.cf.cf_list.cf[i].ton, resp_read->data.cf.cf_list.cf[i].npi,
+                                       resp_read->data.cf.cf_list.cf[i].cc2_id, resp_read->data.cf.cf_list.cf[i].ext7_id);
 
-                       for (i = 0; i < resp_read->data.ecc.ecc_count; i++) {
                                g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
-                               g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string(resp_read->data.ecc.ecc[i].ecc_string));
-                               g_variant_builder_add(&b, "{sv}", "number", g_variant_new_string(resp_read->data.ecc.ecc[i].ecc_num));
-                               g_variant_builder_add(&b, "{sv}", "category", g_variant_new_int32(resp_read->data.ecc.ecc[i].ecc_category));
+                               g_variant_builder_add(&b, "{sv}", "rec_index", g_variant_new_int32(resp_read->data.cf.cf_list.cf[i].rec_index));
+                               g_variant_builder_add(&b, "{sv}", "msp_num", g_variant_new_byte(resp_read->data.cf.cf_list.cf[i].msp_num));
+                               g_variant_builder_add(&b, "{sv}", "cfu_status", g_variant_new_byte(resp_read->data.cf.cf_list.cf[i].cfu_status));
+                               g_variant_builder_add(&b, "{sv}", "cfu_num", g_variant_new_string(resp_read->data.cf.cf_list.cf[i].cfu_num));
+                               g_variant_builder_add(&b, "{sv}", "ton", g_variant_new_int32(resp_read->data.cf.cf_list.cf[i].ton));
+                               g_variant_builder_add(&b, "{sv}", "npi", g_variant_new_int32(resp_read->data.cf.cf_list.cf[i].npi));
+                               g_variant_builder_add(&b, "{sv}", "cc2_id", g_variant_new_byte(resp_read->data.cf.cf_list.cf[i].cc2_id));
+                               g_variant_builder_add(&b, "{sv}", "ext7_id", g_variant_new_byte(resp_read->data.cf.cf_list.cf[i].ext7_id));
                                g_variant_builder_close(&b);
                        }
-                       gv = g_variant_builder_end(&b);
-                       ctx->cached_sim_ecc = gv;*/
-                       memcpy((void*)&ctx->cached_sim_ecc, (const void*)&resp_read->data.ecc, sizeof(struct tel_sim_ecc_list));
+                       gv_cf = g_variant_builder_end(&b);
+
+                       g_variant_builder_init(&b, G_VARIANT_TYPE("a{sv}"));
+                       gv_cphs_cf = g_variant_builder_end(&b);
                }
-                       break;
 
-               case TRESP_SIM_GET_ICCID:
-                       dbg("resp comm - TRESP_SIM_GET_ICCID");
-                       dbg("dbus_info->interface_object[%p], dbus_info->invocation[%p],dbus_info->interface_object, dbus_info->invocation");
-                       dbg("result[%d], iccid[%s]", resp_read->result, resp_read->data.iccid.iccid);
-                       telephony_sim_complete_get_iccid(dbus_info->interface_object, dbus_info->invocation,
-                                       resp_read->result,
-                                       resp_read->data.iccid.iccid);
-                       break;
+               telephony_sim_complete_get_call_forwarding (dbus_info->interface_object, dbus_info->invocation,
+                               resp_read->result,
+                               resp_read->data.cf.b_cphs,
+                               gv_cf,
+                               gv_cphs_cf);
+       }
+       break;
 
-               case TRESP_SIM_GET_LANGUAGE:
-                       dbg("resp comm - TRESP_SIM_GET_LANGUAGE");
-                       telephony_sim_complete_get_language(dbus_info->interface_object, dbus_info->invocation,
-                                       resp_read->result,
-                                       resp_read->data.language.language[0]);
-                       break;
+       case TRESP_SIM_SET_CALLFORWARDING: {
+               const struct tresp_sim_set_data *resp_set_data = data;
 
-               case TRESP_SIM_SET_LANGUAGE:
-                       dbg("resp comm - TRESP_SIM_SET_LANGUAGE");
-                       telephony_sim_complete_set_language(dbus_info->interface_object, dbus_info->invocation,
-                                       resp_set_language->result);
-                       break;
+               dbg("TRESP_SIM_SET_CALLFORWARDING - Result: [%s]",
+                       (resp_set_data->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
 
-               case TRESP_SIM_GET_CALLFORWARDING:
-                       dbg("resp comm - TRESP_SIM_GET_CALLFORWARDING");
-                       telephony_sim_complete_get_callforwarding (dbus_info->interface_object, dbus_info->invocation,
-                                       resp_read->result,
-                                       resp_read->data.cf.voice1,
-                                       resp_read->data.cf.voice2);
-                       break;
+               telephony_sim_complete_set_call_forwarding(dbus_info->interface_object, dbus_info->invocation,
+                               resp_set_data->result);
+       }
+       break;
+
+       case TRESP_SIM_GET_MESSAGEWAITING: {
+               const struct tresp_sim_read *resp_read = data;
+               GVariant *gv_mw = NULL;
+               GVariant *gv_cphs_mw = NULL;
+               GVariantBuilder b;
+
+               dbg("TRESP_SIM_GET_MESSAGEWAITING - Result: [%s] CPHS: [%s]",
+                       (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"),
+                       (resp_read->data.mw.b_cphs ? "Yes" : "No"));
+
+               if (resp_read->data.mw.b_cphs) {
+                       dbg("b_voice1[%d], b_voice2[%d], b_fax[%d], b_data[%d]",
+                               resp_read->data.mw.cphs_mw.b_voice1, resp_read->data.mw.cphs_mw.b_voice2,
+                               resp_read->data.mw.cphs_mw.b_fax, resp_read->data.mw.cphs_mw.b_data);
+
+                       g_variant_builder_init(&b, G_VARIANT_TYPE("a{sv}"));
+                       g_variant_builder_add(&b, "{sv}", "b_voice1",   g_variant_new_boolean(resp_read->data.mw.cphs_mw.b_voice1));
+                       g_variant_builder_add(&b, "{sv}", "b_voice2",   g_variant_new_boolean(resp_read->data.mw.cphs_mw.b_voice2));
+                       g_variant_builder_add(&b, "{sv}", "b_fax",      g_variant_new_boolean(resp_read->data.mw.cphs_mw.b_fax));
+                       g_variant_builder_add(&b, "{sv}", "b_data",     g_variant_new_boolean(resp_read->data.mw.cphs_mw.b_data));
+                       gv_cphs_mw = g_variant_builder_end(&b);
 
-               case TRESP_SIM_GET_MESSAGEWAITING:
-                       dbg("resp comm - TRESP_SIM_GET_MESSAGEWAITING");
-                       if (resp_read->data.mw.b_cphs) {
-                               telephony_sim_complete_get_message_waiting(dbus_info->interface_object, dbus_info->invocation,
-                                               resp_read->result,
-                                               resp_read->data.mw.mw_data_u.cphs_mw.b_voice1,
-                                               resp_read->data.mw.mw_data_u.cphs_mw.b_voice2,
-                                               resp_read->data.mw.mw_data_u.cphs_mw.b_fax,
-                                               resp_read->data.mw.mw_data_u.cphs_mw.b_data);
-                       } else {
-                               telephony_sim_complete_get_message_waiting(dbus_info->interface_object, dbus_info->invocation,
-                                               resp_read->result,
-                                               resp_read->data.mw.mw_data_u.mw.voice_count,
-                                               0,
-                                               resp_read->data.mw.mw_data_u.mw.fax_count,
-                                               resp_read->data.mw.mw_data_u.mw.video_count);
-                       }
-                       break;
+                       g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+                       gv_mw = g_variant_builder_end(&b);
 
-               case TRESP_SIM_GET_MAILBOX: {
-                       GVariant *gv = NULL;
-                       GVariantBuilder b;
-                       dbg("resp comm - TRESP_SIM_GET_MAILBOX");
+               } else {
+                       int i =0;
+
+                       dbg("profile_count[%d]", resp_read->data.mw.mw_list.profile_count);
 
                        g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+                       for (i = 0; i <resp_read->data.mw.mw_list.profile_count; i++) {
+                               dbg("[%d] : rec_index[0x%x], indicator_status[0x%x], voice_count[0x%x], "
+                                       "fax_count[0x%x] email_count[0x%x], other_count[0x%x], video_count[0x%x]",
+                                       i, resp_read->data.mw.mw_list.mw[i].rec_index, resp_read->data.mw.mw_list.mw[i].indicator_status,
+                                       resp_read->data.mw.mw_list.mw[i].voice_count, resp_read->data.mw.mw_list.mw[i].fax_count,
+                                       resp_read->data.mw.mw_list.mw[i].email_count, resp_read->data.mw.mw_list.mw[i].other_count,
+                                       resp_read->data.mw.mw_list.mw[i].video_count);
 
-                       if(resp_read->data.mailbox.voice1.DiallingnumLength){
                                g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
-                               g_variant_builder_add(&b, "{sv}", "type", g_variant_new_string("voice1"));
-                               g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string(resp_read->data.mailbox.voice1.AlphaId));
-                               g_variant_builder_add(&b, "{sv}", "number", g_variant_new_string(resp_read->data.mailbox.voice1.DiallingNum));
-                               g_variant_builder_add(&b, "{sv}", "ton", g_variant_new_int32(resp_read->data.mailbox.voice1.TypeOfNumber));
+                               g_variant_builder_add(&b,"{sv}",        "rec_index", g_variant_new_int32(       resp_read->data.mw.mw_list.mw[i].rec_index));
+                               g_variant_builder_add(&b, "{sv}", "indicator_status", g_variant_new_byte(resp_read->data.mw.mw_list.mw[i].indicator_status));
+                               g_variant_builder_add(&b,"{sv}",        "voice_count", g_variant_new_int32(resp_read->data.mw.mw_list.mw[i].voice_count));
+                               g_variant_builder_add(&b,"{sv}",        "fax_count", g_variant_new_int32(resp_read->data.mw.mw_list.mw[i].fax_count));
+                               g_variant_builder_add(&b, "{sv}", "email_count", g_variant_new_int32(resp_read->data.mw.mw_list.mw[i].email_count));
+                               g_variant_builder_add(&b, "{sv}", "other_count", g_variant_new_int32(resp_read->data.mw.mw_list.mw[i].other_count));
+                               g_variant_builder_add(&b, "{sv}", "video_count", g_variant_new_int32(resp_read->data.mw.mw_list.mw[i].video_count));
                                g_variant_builder_close(&b);
                        }
+                       gv_mw = g_variant_builder_end(&b);
+                       g_variant_builder_init(&b, G_VARIANT_TYPE("a{sv}"));
+                       gv_cphs_mw = g_variant_builder_end(&b);
+               }
 
-                       if(resp_read->data.mailbox.voice2.DiallingnumLength){
-                               g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
-                               g_variant_builder_add(&b, "{sv}", "type", g_variant_new_string("voice2"));
-                               g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string(resp_read->data.mailbox.voice2.AlphaId));
-                               g_variant_builder_add(&b, "{sv}", "number", g_variant_new_string(resp_read->data.mailbox.voice2.DiallingNum));
-                               g_variant_builder_add(&b, "{sv}", "ton", g_variant_new_int32(resp_read->data.mailbox.voice2.TypeOfNumber));
-                               g_variant_builder_close(&b);
-                       }
+               telephony_sim_complete_get_message_waiting(dbus_info->interface_object, dbus_info->invocation,
+                                                                       resp_read->result,
+                                                                       resp_read->data.mw.b_cphs,
+                                                                       gv_mw,
+                                                                       gv_cphs_mw);
+       }
+       break;
 
-                       if(resp_read->data.mailbox.fax.DiallingnumLength){
-                               g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
-                               g_variant_builder_add(&b, "{sv}", "type", g_variant_new_string("fax"));
-                               g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string(resp_read->data.mailbox.fax.AlphaId));
-                               g_variant_builder_add(&b, "{sv}", "number", g_variant_new_string(resp_read->data.mailbox.fax.DiallingNum));
-                               g_variant_builder_add(&b, "{sv}", "ton", g_variant_new_int32(resp_read->data.mailbox.fax.TypeOfNumber));
-                               g_variant_builder_close(&b);
-                       }
+       case TRESP_SIM_SET_MESSAGEWAITING: {
+               const struct tresp_sim_set_data *resp_set_data = data;
+
+               dbg("TRESP_SIM_SET_MESSAGEWAITING - Result: [%s]",
+                       (resp_set_data->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
+
+               telephony_sim_complete_set_message_waiting(dbus_info->interface_object, dbus_info->invocation,
+                               resp_set_data->result);
+       }
+       break;
+
+       case TRESP_SIM_GET_MAILBOX: {
+               const struct tresp_sim_read *resp_read = data;
+               GVariant *gv = NULL;
+               GVariantBuilder b;
+               int i =0;
+
+               dbg("TRESP_SIM_GET_MAILBOX - Result: [%s] CPHS: [%s] Count: [%d])",
+                       (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"),
+                       (resp_read->data.mb.b_cphs ? "Yes" : "No"),
+                       resp_read->data.mb.count);
+
+               g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+               for (i =0; i < resp_read->data.mb.count; i++) {
+                               dbg("resp_read->data.mb.mb[%d] : "
+                                               "rec_index[%d], profile_number[%d], mb_type[%d], alpha_id_max_len[%d]"
+                                               "alpha_id[%s], ton[%d], npi[%d], num[%s], cc_id[%d], ext1_id[%d]",
+                                               i, resp_read->data.mb.mb[i].rec_index, resp_read->data.mb.mb[i].profile_number,
+                                               resp_read->data.mb.mb[i].mb_type, resp_read->data.mb.mb[i].number_info.alpha_id_max_len,
+                                               resp_read->data.mb.mb[i].number_info.alpha_id, resp_read->data.mb.mb[i].number_info.ton,
+                                               resp_read->data.mb.mb[i].number_info.npi, resp_read->data.mb.mb[i].number_info.num,
+                                               resp_read->data.mb.mb[i].number_info.cc_id, resp_read->data.mb.mb[i].number_info.ext1_id);
 
-                       if(resp_read->data.mailbox.video.DiallingnumLength){
                                g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
-                               g_variant_builder_add(&b, "{sv}", "type", g_variant_new_string("video"));
-                               g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string(resp_read->data.mailbox.video.AlphaId));
-                               g_variant_builder_add(&b, "{sv}", "number", g_variant_new_string(resp_read->data.mailbox.video.DiallingNum));
-                               g_variant_builder_add(&b, "{sv}", "ton", g_variant_new_int32(resp_read->data.mailbox.video.TypeOfNumber));
+                               g_variant_builder_add(&b, "{sv}", "rec_index", g_variant_new_int32(resp_read->data.mb.mb[i].rec_index));
+                               g_variant_builder_add(&b, "{sv}", "profile_num", g_variant_new_int32(resp_read->data.mb.mb[i].profile_number));
+                               g_variant_builder_add(&b, "{sv}", "mb_type", g_variant_new_int32(resp_read->data.mb.mb[i].mb_type));
+                               g_variant_builder_add(&b, "{sv}", "alpha_id_max_len", g_variant_new_int32(resp_read->data.mb.mb[i].number_info.alpha_id_max_len));
+                               g_variant_builder_add(&b, "{sv}", "alpha_id", g_variant_new_string(resp_read->data.mb.mb[i].number_info.alpha_id));
+                               g_variant_builder_add(&b, "{sv}", "ton", g_variant_new_int32(resp_read->data.mb.mb[i].number_info.ton));
+                               g_variant_builder_add(&b, "{sv}", "npi", g_variant_new_int32(resp_read->data.mb.mb[i].number_info.npi));
+                               g_variant_builder_add(&b, "{sv}", "num", g_variant_new_string(resp_read->data.mb.mb[i].number_info.num));
+                               g_variant_builder_add(&b, "{sv}", "cc_id", g_variant_new_byte(resp_read->data.mb.mb[i].number_info.cc_id));
+                               g_variant_builder_add(&b, "{sv}", "ext1_id", g_variant_new_byte(resp_read->data.mb.mb[i].number_info.ext1_id));
                                g_variant_builder_close(&b);
-                       }
-                       gv = g_variant_builder_end(&b);
-                       telephony_sim_complete_get_mailbox (dbus_info->interface_object, dbus_info->invocation,
-                                       resp_read->result,
-                                       gv);
-                       g_variant_unref(gv);
                }
-                       break;
 
-               case TRESP_SIM_GET_CPHS_INFO:
-                       dbg("resp comm - TRESP_SIM_GET_CPHS_INFO");
-                       telephony_sim_complete_get_cphsinfo (dbus_info->interface_object, dbus_info->invocation,
-                                       resp_read->result,
-                                       resp_read->data.cphs.CphsPhase,
-                                       resp_read->data.cphs.CphsServiceTable.bOperatorNameShortForm,
-                                       resp_read->data.cphs.CphsServiceTable.bMailBoxNumbers,
-                                       resp_read->data.cphs.CphsServiceTable.bServiceStringTable,
-                                       resp_read->data.cphs.CphsServiceTable.bCustomerServiceProfile,
-                                       resp_read->data.cphs.CphsServiceTable.bInformationNumbers);
-                       break;
+               gv = g_variant_builder_end(&b);
 
-               case TRESP_SIM_GET_SPN:
-                       dbg("resp comm - TRESP_SIM_GET_SPN");
-                       telephony_sim_complete_get_spn (dbus_info->interface_object, dbus_info->invocation,
-                                       resp_read->result,
-                                       resp_read->data.spn.display_condition, (const gchar *)resp_read->data.spn.spn);
-                       break;
+               telephony_sim_complete_get_mailbox (dbus_info->interface_object, dbus_info->invocation,
+                               resp_read->result,
+                               resp_read->data.mb.b_cphs,
+                               gv);
+       }
+       break;
 
-               case TRESP_SIM_GET_CPHS_NETNAME:
-                       dbg("resp comm - TRESP_SIM_GET_CPHS_NETNAME");
-                       telephony_sim_complete_get_cphs_net_name (dbus_info->interface_object, dbus_info->invocation,
-                                       resp_read->result,
-                                       (const gchar *)resp_read->data.cphs_net.full_name, (const gchar *)resp_read->data.cphs_net.short_name);
-                       break;
+       case TRESP_SIM_SET_MAILBOX: {
+               const struct tresp_sim_set_data *resp_set_data = data;
 
-               case TRESP_SIM_GET_MSISDN:{
-                       GVariant *gv = NULL;
-                       GVariantBuilder b;
-                       dbg("resp comm - TRESP_SIM_GET_MSISDN");
-                       g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+               dbg("TRESP_SIM_SET_MAILBOX - Result: [%s]",
+                       (resp_set_data->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
 
-                       for(i=0;i < resp_read->data.msisdn_list.count; i++){
-                               g_variant_builder_open(&b,G_VARIANT_TYPE("a{sv}"));
-                               g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string((const gchar *)resp_read->data.msisdn_list.msisdn[i].name));
-                               g_variant_builder_add(&b, "{sv}", "number", g_variant_new_string((const gchar *)resp_read->data.msisdn_list.msisdn[i].num));
-                               g_variant_builder_close(&b);
-                       }
-                       gv = g_variant_builder_end(&b);
+               telephony_sim_complete_set_mailbox(dbus_info->interface_object, dbus_info->invocation,
+                               resp_set_data->result);
+       }
+       break;
+
+       case TRESP_SIM_GET_CPHS_INFO: {
+               const struct tresp_sim_read *resp_read = data;
+
+               dbg("TRESP_SIM_GET_CPHS_INFO - Result: [%s]",
+                       (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
+
+               telephony_sim_complete_get_cphsinfo (dbus_info->interface_object, dbus_info->invocation,
+                               resp_read->result,
+                               resp_read->data.cphs.CphsPhase,
+                               resp_read->data.cphs.CphsServiceTable.bOperatorNameShortForm,
+                               resp_read->data.cphs.CphsServiceTable.bMailBoxNumbers,
+                               resp_read->data.cphs.CphsServiceTable.bServiceStringTable,
+                               resp_read->data.cphs.CphsServiceTable.bCustomerServiceProfile,
+                               resp_read->data.cphs.CphsServiceTable.bInformationNumbers);
+       }
+       break;
+
+       case TRESP_SIM_GET_SERVICE_TABLE: {
+               const struct tresp_sim_read *resp_read = data;
+               CoreObject *co_sim = NULL;
+               GVariantBuilder builder;
+               GVariant * inner_gv = NULL;
+               GVariant *svct_gv = NULL;
+               int i =0;
+
+               dbg("TRESP_SIM_GET_SERVICE_TABLE - Result: [%s]",
+                       (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
+
+               co_sim = __get_sim_co_from_ur(ctx->server, ur);
+               if (!co_sim) {
+                       err("SIM Core object is NULL");
+                       return FALSE;
+               }
 
-                       telephony_sim_complete_get_msisdn (dbus_info->interface_object, dbus_info->invocation,
-                                       resp_read->result,
-                                       gv);
-                       g_variant_unref(gv);
+               if (resp_read->result == SIM_ACCESS_SUCCESS) {
+                       tcore_sim_set_service_table(co_sim, &resp_read->data.svct);
+               } else if (resp_read->result == SIM_ACCESS_FILE_NOT_FOUND) {
+                       tcore_sim_set_service_table(co_sim, NULL);
                }
-                       break;
 
-               case TRESP_SIM_GET_OPLMNWACT:{
-                       GVariant *gv = NULL;
-                       GVariantBuilder b;
-                       dbg("resp comm - TRESP_SIM_GET_OPLMNWACT");
-                       g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+               g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
 
-                       for(i=0;i < resp_read->data.opwa.opwa_count; i++){
-                               g_variant_builder_open(&b,G_VARIANT_TYPE("a{sv}"));
-                               g_variant_builder_add(&b, "{sv}", "plmn", g_variant_new_string((const gchar *)resp_read->data.opwa.opwa[i].plmn));
-                               g_variant_builder_add(&b, "{sv}", "b_umts", g_variant_new_boolean(resp_read->data.opwa.opwa[i].b_umts));
-                               g_variant_builder_add(&b, "{sv}", "b_gsm", g_variant_new_boolean(resp_read->data.opwa.opwa[i].b_gsm));
-                               g_variant_builder_close(&b);
+               if (resp_read->data.svct.sim_type == SIM_TYPE_GSM) {
+                       for (i = 0; i < SIM_SST_SERVICE_CNT_MAX; i++) {
+                               g_variant_builder_add (&builder, "y", resp_read->data.svct.table.sst.service[i]);
+                       }
+               } else if (resp_read->data.svct.sim_type == SIM_TYPE_USIM) {
+                       for (i = 0; i < SIM_UST_SERVICE_CNT_MAX; i++) {
+                               g_variant_builder_add (&builder, "y", resp_read->data.svct.table.ust.service[i]);
                        }
-                       gv = g_variant_builder_end(&b);
+               } else if(resp_read->data.svct.sim_type == SIM_TYPE_RUIM) {
+                       if(SIM_CDMA_SVC_TABLE == resp_read->data.svct.table.cst.cdma_svc_table) {
+                               for(i = 0; i < SIM_CDMA_ST_SERVICE_CNT_MAX; i++) {
+                                       g_variant_builder_add (&builder, "iy", resp_read->data.svct.table.cst.cdma_svc_table,
+                                                                                       resp_read->data.svct.table.cst.service.cdma_service[i]);
+                               }
+                       } else if(SIM_CSIM_SVC_TABLE == resp_read->data.svct.table.cst.cdma_svc_table) {
+                               for(i = 0; i < SIM_CSIM_ST_SERVICE_CNT_MAX; i++) {
+                                       g_variant_builder_add (&builder, "iy", resp_read->data.svct.table.cst.cdma_svc_table,
+                                                                                       resp_read->data.svct.table.cst.service.csim_service[i]);
+                               }
+                       } else {
+                               err("Invalid cdma_svc_table:[%d]", resp_read->data.svct.table.cst.cdma_svc_table);
+                       }
+               } else {
+                       dbg("unknown sim type.");
+               }
+               inner_gv = g_variant_builder_end(&builder);
+               svct_gv = g_variant_new("v", inner_gv);
+
+               telephony_sim_complete_get_service_table (dbus_info->interface_object, dbus_info->invocation,
+                               resp_read->result,
+                               resp_read->data.svct.sim_type,
+                               svct_gv);
+       }       break;
+
+       case TRESP_SIM_GET_SPN: {
+               const struct tresp_sim_read *resp_read = data;
+               CoreObject *co_sim = NULL;
+
+               dbg("TRESP_SIM_GET_SPN - Result: [%s] Display condition: [%d] SPN: [%s]",
+                       (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"),
+                       resp_read->data.spn.display_condition, (const gchar *)resp_read->data.spn.spn);
+
+               co_sim = __get_sim_co_from_ur(ctx->server, ur);
+               if (!co_sim) {
+                       err("SIM Core object is NULL");
+                       return FALSE;
+               }
 
-                       telephony_sim_complete_get_oplmnwact (dbus_info->interface_object, dbus_info->invocation,
-                                       resp_read->result,
-                                       gv);
-                       g_variant_unref(gv);
+               if (resp_read->result == SIM_ACCESS_SUCCESS) {
+                       tcore_sim_set_spn(co_sim, &resp_read->data.spn);
+               } else if (resp_read->result == SIM_ACCESS_FILE_NOT_FOUND) {
+                       tcore_sim_set_spn(co_sim, NULL);
                }
-                       break;
 
-               case TRESP_SIM_REQ_AUTHENTICATION: {
-                       GVariantBuilder *builder = NULL;
-                       GVariant *ak = NULL;
-                       GVariant *cp = NULL;
-                       GVariant *it = NULL;
-                       GVariant *resp = NULL;
-                       GVariant *ak_gv = NULL;
-                       GVariant *cp_gv = NULL;
-                       GVariant *it_gv = NULL;
-                       GVariant *resp_gv = NULL;
-                       int i =0;
+               telephony_sim_complete_get_spn (dbus_info->interface_object, dbus_info->invocation,
+                               resp_read->result,
+                               resp_read->data.spn.display_condition, (const gchar *)resp_read->data.spn.spn);
+       }
+       break;
 
-                       dbg("resp comm - TRESP_SIM_REQ_AUTHENTICATION");
+       case TRESP_SIM_GET_CPHS_NETNAME: {
+               const struct tresp_sim_read *resp_read = data;
+               CoreObject *co_sim = NULL;
 
-                       builder = g_variant_builder_new (G_VARIANT_TYPE ("ay"));
-                       for(i = 0; i < (int)resp_auth->authentication_key_length; i++) {
-                               dbg("resp_auth->authentication_key[%d][0x%02x]", i,resp_auth->authentication_key[i]);
-                               g_variant_builder_add (builder, "y", resp_auth->authentication_key[i]);
-                       }
-                       ak = g_variant_builder_end(builder);
-                       ak_gv = g_variant_new("v", ak);
+               dbg("TRESP_SIM_GET_CPHS_NETNAME - Result: [%s]",
+                       (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
 
-                       builder = g_variant_builder_new (G_VARIANT_TYPE ("ay"));
-                       for(i = 0; i < (int)resp_auth->cipher_length; i++) {
-                               dbg("resp_auth->cipher_data[%d][0x%02x]", i,resp_auth->cipher_data[i]);
-                               g_variant_builder_add (builder, "y", resp_auth->cipher_data[i]);
-                       }
-                       cp = g_variant_builder_end(builder);
-                       cp_gv = g_variant_new("v", cp);
+               co_sim = __get_sim_co_from_ur(ctx->server, ur);
+               if (!co_sim) {
+                       err("SIM Core object is NULL");
+                       return FALSE;
+               }
 
-                       builder = g_variant_builder_new (G_VARIANT_TYPE ("ay"));
-                       for(i = 0; i < (int)resp_auth->integrity_length; i++) {
-                               dbg("resp_auth->integrity_data[%d][0x%02x]", i,resp_auth->integrity_data[i]);
-                               g_variant_builder_add (builder, "y", resp_auth->integrity_data[i]);
-                       }
-                       it = g_variant_builder_end(builder);
-                       it_gv = g_variant_new("v", it);
+               if (resp_read->result == SIM_ACCESS_SUCCESS) {
+                       tcore_sim_set_cphs_netname(co_sim, &resp_read->data.cphs_net);
+               } else if (resp_read->result == SIM_ACCESS_FILE_NOT_FOUND) {
+                       tcore_sim_set_cphs_netname(co_sim, NULL);
+               }
 
-                       builder = g_variant_builder_new (G_VARIANT_TYPE ("ay"));
-                       for(i = 0; i < (int)resp_auth->resp_length; i++) {
-                               dbg("resp_auth->resp_data[%d][0x%02x]", i,resp_auth->resp_data[i]);
-                               g_variant_builder_add (builder, "y", resp_auth->resp_data[i]);
+               telephony_sim_complete_get_cphs_net_name (dbus_info->interface_object, dbus_info->invocation,
+                               resp_read->result,
+                               (const gchar *)resp_read->data.cphs_net.full_name, (const gchar *)resp_read->data.cphs_net.short_name);
+       }
+       break;
+
+       case TRESP_SIM_GET_GID: {
+               const struct tresp_sim_read *resp_read = data;
+               GVariantBuilder *builder = NULL;
+               GVariant * inner_gv = NULL;
+               GVariant *gid_gv = NULL;
+               int i =0;
+
+               dbg("TRESP_SIM_GET_GID - Result: [%s]",
+                       (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
+
+               builder = g_variant_builder_new (G_VARIANT_TYPE ("ay"));
+
+               for(i = 0; i < resp_read->data.gid.GroupIdentifierLen; i++) {
+                       g_variant_builder_add (builder, "y", resp_read->data.gid.szGroupIdentifier[i]);
+               }
+               inner_gv = g_variant_builder_end(builder);
+               gid_gv = g_variant_new("v", inner_gv);
+
+               telephony_sim_complete_get_gid (dbus_info->interface_object, dbus_info->invocation,
+                                               resp_read->result,
+                                               resp_read->data.gid.GroupIdentifierLen,
+                                               gid_gv);
+       }
+       break;
+
+       case TRESP_SIM_GET_MSISDN:{
+               const struct tresp_sim_read *resp_read = data;
+               CoreObject *co_sim = NULL;
+               GVariant *gv = NULL;
+               GVariantBuilder b;
+               int i =0;
+
+               dbg("TRESP_SIM_GET_MSISDN - Result: [%s]",
+                       (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
+
+               co_sim = __get_sim_co_from_ur(ctx->server, ur);
+               if (!co_sim) {
+                       err("SIM Core object is NULL");
+                       return FALSE;
+               }
+
+               g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+               if (resp_read->result == SIM_ACCESS_SUCCESS) {
+                       tcore_sim_set_msisdn_list(co_sim, &resp_read->data.msisdn_list);
+               } else if (resp_read->result == SIM_ACCESS_FILE_NOT_FOUND) {
+                       tcore_sim_set_msisdn_list(co_sim, NULL);
+               }
+
+               for (i = 0; i < resp_read->data.msisdn_list.count; i++) {
+                       g_variant_builder_open(&b,G_VARIANT_TYPE("a{sv}"));
+                       g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string((const gchar *)resp_read->data.msisdn_list.msisdn[i].name));
+                       if (resp_read->data.msisdn_list.msisdn[i].ton == SIM_TON_INTERNATIONAL) {
+                               unsigned char *tmp = (unsigned char *)calloc(SIM_MSISDN_NUMBER_LEN_MAX + 1, 1);
+                               if (tmp!=NULL) {
+                                       tmp[0] = '+';
+                                       strncpy((char *)tmp+1, (const char*)resp_read->data.msisdn_list.msisdn[i].num, SIM_MSISDN_NUMBER_LEN_MAX - 1);
+                                       tmp[SIM_MSISDN_NUMBER_LEN_MAX] = '\0';
+                                       g_variant_builder_add(&b, "{sv}", "number", g_variant_new_string((const gchar *)tmp));
+                                       free(tmp);
+                               } else {
+                                       dbg("calloc failed.");
+                                       g_variant_builder_add(&b, "{sv}", "number", g_variant_new_string((const gchar *)resp_read->data.msisdn_list.msisdn[i].num));
+                               }
+                       } else {
+                               g_variant_builder_add(&b, "{sv}", "number", g_variant_new_string((const gchar *)resp_read->data.msisdn_list.msisdn[i].num));
                        }
-                       resp = g_variant_builder_end(builder);
-                       resp_gv = g_variant_new("v", resp);
-
-                       telephony_sim_complete_authentication (dbus_info->interface_object, dbus_info->invocation,
-                                       resp_auth->result,
-                                       resp_auth->auth_type,
-                                       resp_auth->auth_result,
-                                       ak_gv,
-                                       cp_gv,
-                                       it_gv,
-                                       resp_gv);
+                       g_variant_builder_close(&b);
                }
-                       break;
+               gv = g_variant_builder_end(&b);
 
-               case TRESP_SIM_VERIFY_PINS:
-                       dbg("resp comm - TRESP_SIM_VERIFY_PINS");
-                       telephony_sim_complete_verify_sec(dbus_info->interface_object, dbus_info->invocation,
-                                       resp_verify_pins->result,
-                                       resp_verify_pins->pin_type,
-                                       resp_verify_pins->retry_count);
-                       break;
+               telephony_sim_complete_get_msisdn (dbus_info->interface_object, dbus_info->invocation,
+                               resp_read->result,
+                               gv);
+       }
+       break;
+
+       case TRESP_SIM_GET_OPLMNWACT: {
+               const struct tresp_sim_read *resp_read = data;
+               GVariant *gv = NULL;
+               GVariantBuilder b;
+               int i =0;
+
+               dbg("TRESP_SIM_GET_OPLMNWACT - Result: [%s]",
+                       (resp_read->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
+
+               g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+               for (i = 0;i < resp_read->data.opwa.opwa_count; i++) {
+                       g_variant_builder_open(&b,G_VARIANT_TYPE("a{sv}"));
+                       g_variant_builder_add(&b, "{sv}", "plmn", g_variant_new_string((const gchar *)resp_read->data.opwa.opwa[i].plmn));
+                       g_variant_builder_add(&b, "{sv}", "b_umts", g_variant_new_boolean(resp_read->data.opwa.opwa[i].b_umts));
+                       g_variant_builder_add(&b, "{sv}", "b_gsm", g_variant_new_boolean(resp_read->data.opwa.opwa[i].b_gsm));
+                       g_variant_builder_close(&b);
+               }
+               gv = g_variant_builder_end(&b);
 
-               case TRESP_SIM_VERIFY_PUKS:
-                       dbg("resp comm - TRESP_SIM_VERIFY_PUKS");
-                       telephony_sim_complete_verify_puk (dbus_info->interface_object, dbus_info->invocation,
-                                       resp_verify_puks->result,
-                                       resp_verify_puks->pin_type,
-                                       resp_verify_puks->retry_count);
-                       break;
+               telephony_sim_complete_get_oplmnwact (dbus_info->interface_object, dbus_info->invocation,
+                               resp_read->result,
+                               gv);
+       }
+       break;
+
+       case TRESP_SIM_REQ_AUTHENTICATION: {
+               const struct tresp_sim_req_authentication *resp_auth = data;
+               GVariantBuilder builder;
+               GVariant *ak = NULL;
+               GVariant *cp = NULL;
+               GVariant *it = NULL;
+               GVariant *resp = NULL;
+               GVariant *ak_gv = NULL;
+               GVariant *cp_gv = NULL;
+               GVariant *it_gv = NULL;
+               GVariant *resp_gv = NULL;
+               int i =0;
+
+               dbg("TRESP_SIM_REQ_AUTHENTICATION - Result: [%s]",
+                       (resp_auth->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
+
+               tcore_util_hex_dump("[AUTH_KEY] ", resp_auth->authentication_key_length, resp_auth->authentication_key);
+               g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
+               for (i = 0; i < (int)resp_auth->authentication_key_length; i++) {
+                       g_variant_builder_add (&builder, "y", resp_auth->authentication_key[i]);
+               }
+               ak = g_variant_builder_end(&builder);
+               ak_gv = g_variant_new("v", ak);
 
-               case TRESP_SIM_CHANGE_PINS:
-                       dbg("resp comm - TRESP_SIM_CHANGE_PINS");
-                       telephony_sim_complete_change_pin(dbus_info->interface_object, dbus_info->invocation,
-                                       resp_change_pins->result,
-                                       resp_change_pins->pin_type,
-                                       resp_change_pins->retry_count);
-                       break;
+               tcore_util_hex_dump("[CIPHER_DATA] ", resp_auth->cipher_length, resp_auth->cipher_data);
+               g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
+               for (i = 0; i < (int)resp_auth->cipher_length; i++) {
+                       g_variant_builder_add (&builder, "y", resp_auth->cipher_data[i]);
+               }
+               cp = g_variant_builder_end(&builder);
+               cp_gv = g_variant_new("v", cp);
 
-               case TRESP_SIM_DISABLE_FACILITY:
-                       dbg("resp comm - TRESP_SIM_DISABLE_FACILITY");
-                       dbg("resp_dis_facility->type[%d]", resp_dis_facility->type);
-                       switch (resp_dis_facility->type) {
-                               case SIM_FACILITY_PS:
-                                       f_type = 1;
-                                       break;
-                               case SIM_FACILITY_SC:
-                                       f_type = 3;
-                                       break;
-                               case SIM_FACILITY_FD:
-                                       f_type = 4;
-                                       break;
-                               case SIM_FACILITY_PN:
-                                       f_type = 5;
-                                       break;
-                               case SIM_FACILITY_PU:
-                                       f_type = 6;
-                                       break;
-                               case SIM_FACILITY_PP:
-                                       f_type = 7;
-                                       break;
-                               case SIM_FACILITY_PC:
-                                       f_type = 8;
-                                       break;
-                               default:
-                                       dbg("error - not handled type[%d]", resp_dis_facility->type);
-                                       break;
-                       }
-                       telephony_sim_complete_disable_facility(dbus_info->interface_object, dbus_info->invocation,
-                                       resp_dis_facility->result,
-                                       f_type,
-                                       resp_dis_facility->retry_count);
-                       break;
+               tcore_util_hex_dump("[INTEGRITY_DATA] ", resp_auth->integrity_length, resp_auth->integrity_data);
+               g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
+               for (i = 0; i < (int)resp_auth->integrity_length; i++) {
+                       g_variant_builder_add (&builder, "y", resp_auth->integrity_data[i]);
+               }
+               it = g_variant_builder_end(&builder);
+               it_gv = g_variant_new("v", it);
 
-               case TRESP_SIM_ENABLE_FACILITY:
-                       dbg("resp comm - TRESP_SIM_ENABLE_FACILITY");
-                       dbg("resp_en_facility->type[%d]", resp_en_facility->type);
-                       switch (resp_en_facility->type) {
-                               case SIM_FACILITY_PS:
-                                       f_type = 1;
-                                       break;
-                               case SIM_FACILITY_SC:
-                                       f_type = 3;
-                                       break;
-                               case SIM_FACILITY_FD:
-                                       f_type = 4;
-                                       break;
-                               case SIM_FACILITY_PN:
-                                       f_type = 5;
-                                       break;
-                               case SIM_FACILITY_PU:
-                                       f_type = 6;
-                                       break;
-                               case SIM_FACILITY_PP:
-                                       f_type = 7;
-                                       break;
-                               case SIM_FACILITY_PC:
-                                       f_type = 8;
-                                       break;
-                               default:
-                                       dbg("error - not handled type[%d]", resp_en_facility->type);
-                                       break;
-                       }
-                       telephony_sim_complete_enable_facility(dbus_info->interface_object, dbus_info->invocation,
-                                       resp_en_facility->result,
-                                       f_type,
-                                       resp_en_facility->retry_count);
-                       break;
+               tcore_util_hex_dump("[RESP_DATA] ", resp_auth->resp_length, resp_auth->resp_data);
+               g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
+               for (i = 0; i < (int)resp_auth->resp_length; i++) {
+                       g_variant_builder_add (&builder, "y", resp_auth->resp_data[i]);
+               }
+               resp = g_variant_builder_end(&builder);
+               resp_gv = g_variant_new("v", resp);
+
+               telephony_sim_complete_authentication (dbus_info->interface_object, dbus_info->invocation,
+                               resp_auth->result,
+                               resp_auth->auth_type,
+                               resp_auth->auth_result,
+                               ak_gv,
+                               cp_gv,
+                               it_gv,
+                               resp_gv);
+       }
+       break;
 
-               case TRESP_SIM_GET_FACILITY_STATUS:
-                       dbg("resp comm - TRESP_SIM_GET_FACILITY_STATUS");
-                       dbg("resp_get_facility->type[%d]", resp_get_facility->type);
-                       switch (resp_get_facility->type) {
-                               case SIM_FACILITY_PS:
-                                       f_type = 1;
-                                       break;
-                               case SIM_FACILITY_SC:
-                                       f_type = 3;
-                                       break;
-                               case SIM_FACILITY_FD:
-                                       f_type = 4;
-                                       break;
-                               case SIM_FACILITY_PN:
-                                       f_type = 5;
-                                       break;
-                               case SIM_FACILITY_PU:
-                                       f_type = 6;
-                                       break;
-                               case SIM_FACILITY_PP:
-                                       f_type = 7;
-                                       break;
-                               case SIM_FACILITY_PC:
-                                       f_type = 8;
-                                       break;
-                               default:
-                                       dbg("error - not handled type[%d]", resp_get_facility->type);
-                                       break;
-                       }
-                       telephony_sim_complete_get_facility(dbus_info->interface_object, dbus_info->invocation,
-                                       resp_get_facility->result,
-                                       f_type,
-                                       resp_get_facility->b_enable);
-                       break;
+       case TRESP_SIM_VERIFY_PINS: {
+               const struct tresp_sim_verify_pins *resp_verify_pins = data;
 
-               case TRESP_SIM_GET_LOCK_INFO:
-                       dbg("resp comm - TRESP_SIM_GET_LOCK_INFO");
-                       dbg("resp_lock->type[%d]", resp_lock->type);
-                       switch (resp_lock->type) {
-                               case SIM_FACILITY_PS:
-                                       f_type = 1;
-                                       break;
-                               case SIM_FACILITY_SC:
-                                       f_type = 3;
-                                       break;
-                               case SIM_FACILITY_FD:
-                                       f_type = 4;
-                                       break;
-                               case SIM_FACILITY_PN:
-                                       f_type = 5;
-                                       break;
-                               case SIM_FACILITY_PU:
-                                       f_type = 6;
-                                       break;
-                               case SIM_FACILITY_PP:
-                                       f_type = 7;
-                                       break;
-                               case SIM_FACILITY_PC:
-                                       f_type = 8;
-                                       break;
-                               default:
-                                       dbg("error - not handled type[%d]", resp_lock->type);
-                                       break;
-                       }
-                       telephony_sim_complete_get_lock_info(dbus_info->interface_object, dbus_info->invocation,
-                                       resp_lock->result,
-                                       f_type,
-                                       resp_lock->lock_status,
-                                       resp_lock->retry_count);
-                       break;
+               dbg("TRESP_SIM_VERIFY_PINS - Result: [%s] PIN Type: [%d] Re-try count: [%d]",
+                       (resp_verify_pins->result == SIM_PIN_OPERATION_SUCCESS ? "Success" : "Fail"),
+                       resp_verify_pins->pin_type, resp_verify_pins->retry_count);
 
-               case TRESP_SIM_TRANSMIT_APDU: {
-                       GVariantBuilder *builder = NULL;
-                       GVariant * apdu_gv = NULL;
-                       GVariant *inner_gv = NULL;
-                       int i =0;
+               telephony_sim_complete_verify_sec(dbus_info->interface_object, dbus_info->invocation,
+                               resp_verify_pins->result,
+                               resp_verify_pins->pin_type,
+                               resp_verify_pins->retry_count);
+       }
+       break;
 
-                       dbg("resp comm - TRESP_SIM_TRANSMIT_APDU");
-                       builder = g_variant_builder_new (G_VARIANT_TYPE ("ay"));
-                       for(i = 0; i < (int)resp_apdu->apdu_resp_length; i++) {
-                               dbg("resp_apdu->apdu_resp[%d][0x%02x]", i,resp_apdu->apdu_resp[i]);
-                               g_variant_builder_add (builder, "y", resp_apdu->apdu_resp[i]);
-                       }
-                       inner_gv = g_variant_builder_end(builder);
-/*                     g_variant_builder_unref (builder);*/
-                       apdu_gv = g_variant_new("v", inner_gv);
+       case TRESP_SIM_VERIFY_PUKS: {
+               const struct tresp_sim_verify_puks *resp_verify_puks = data;
+
+               dbg("TRESP_SIM_VERIFY_PUKS - Result: [%s] PIN Type: [%d] Re-try count: [%d]",
+                       (resp_verify_puks->result == SIM_PIN_OPERATION_SUCCESS ? "Success" : "Fail"),
+                       resp_verify_puks->pin_type, resp_verify_puks->retry_count);
+
+               telephony_sim_complete_verify_puk (dbus_info->interface_object, dbus_info->invocation,
+                               resp_verify_puks->result,
+                               resp_verify_puks->pin_type,
+                               resp_verify_puks->retry_count);
+       }
+       break;
+
+       case TRESP_SIM_CHANGE_PINS: {
+               const struct tresp_sim_change_pins *resp_change_pins = data;
+
+               dbg("TRESP_SIM_CHANGE_PINS - Result: [%s] PIN Type: [%d] Re-try count: [%d]",
+                       (resp_change_pins->result == SIM_PIN_OPERATION_SUCCESS ? "Success" : "Fail"),
+                       resp_change_pins->pin_type, resp_change_pins->retry_count);
+
+               telephony_sim_complete_change_pin(dbus_info->interface_object, dbus_info->invocation,
+                               resp_change_pins->result,
+                               resp_change_pins->pin_type,
+                               resp_change_pins->retry_count);
+       }
+       break;
+
+       case TRESP_SIM_DISABLE_FACILITY: {
+               const struct tresp_sim_disable_facility *resp_dis_facility = data;
+               gint f_type =0;
+
+               dbg("TRESP_SIM_DISABLE_FACILITY - Result: [%s] Type: [%d] Re-try count: [%d]",
+                       (resp_dis_facility->result == SIM_PIN_OPERATION_SUCCESS ? "Success" : "Fail"),
+                       resp_dis_facility->type, resp_dis_facility->retry_count);
+
+               switch (resp_dis_facility->type) {
+               case SIM_FACILITY_PS:
+                       f_type = 1;
+               break;
+               case SIM_FACILITY_SC:
+                       f_type = 3;
+               break;
+               case SIM_FACILITY_FD:
+                       f_type = 4;
+               break;
+               case SIM_FACILITY_PN:
+                       f_type = 5;
+               break;
+               case SIM_FACILITY_PU:
+                       f_type = 6;
+               break;
+               case SIM_FACILITY_PP:
+                       f_type = 7;
+               break;
+               case SIM_FACILITY_PC:
+                       f_type = 8;
+               break;
+               default:
+                       err("Unhandled/Unknown type[0x%x]", resp_dis_facility->type);
+               break;
+               }
+
+               telephony_sim_complete_disable_facility(dbus_info->interface_object, dbus_info->invocation,
+                               resp_dis_facility->result,
+                               f_type,
+                               resp_dis_facility->retry_count);
+       }
+       break;
+
+       case TRESP_SIM_ENABLE_FACILITY: {
+               const struct tresp_sim_enable_facility *resp_en_facility = data;
+               gint f_type =0;
 
-                       telephony_sim_complete_transfer_apdu(dbus_info->interface_object, dbus_info->invocation,
-                                       resp_apdu->result,
-                                       apdu_gv);
+               dbg("TRESP_SIM_ENABLE_FACILITY - Result: [%s] Type: [%d] Re-try count: [%d]",
+                       (resp_en_facility->result == SIM_PIN_OPERATION_SUCCESS ? "Success" : "Fail"),
+                       resp_en_facility->type, resp_en_facility->retry_count);
+
+               switch (resp_en_facility->type) {
+               case SIM_FACILITY_PS:
+                       f_type = 1;
+               break;
+               case SIM_FACILITY_SC:
+                       f_type = 3;
+               break;
+               case SIM_FACILITY_FD:
+                       f_type = 4;
+               break;
+               case SIM_FACILITY_PN:
+                       f_type = 5;
+               break;
+               case SIM_FACILITY_PU:
+                       f_type = 6;
+               break;
+               case SIM_FACILITY_PP:
+                       f_type = 7;
+               break;
+               case SIM_FACILITY_PC:
+                       f_type = 8;
+               break;
+               default:
+                       err("Unhandled/Unknown type[0x%x]", resp_en_facility->type);
+               break;
                }
-                       break;
 
-               case TRESP_SIM_GET_ATR:{
-                       GVariantBuilder *builder = NULL;
-                       GVariant * atr_gv = NULL;
-                       GVariant *inner_gv = NULL;
-                       int i =0;
+               telephony_sim_complete_enable_facility(dbus_info->interface_object, dbus_info->invocation,
+                               resp_en_facility->result,
+                               f_type,
+                               resp_en_facility->retry_count);
+       }
+       break;
 
-                       dbg("resp comm - TRESP_SIM_GET_ATR");
-                       builder = g_variant_builder_new (G_VARIANT_TYPE ("ay"));
-                       for(i = 0; i < (int)resp_get_atr->atr_length; i++) {
-                               dbg("resp_apdu->apdu_resp[%d][0x%02x]", i,resp_get_atr->atr[i]);
-                               g_variant_builder_add (builder, "y", resp_get_atr->atr[i]);
-                       }
-                       inner_gv = g_variant_builder_end(builder);
-/*                     g_variant_builder_unref (builder);*/
-                       atr_gv = g_variant_new("v", inner_gv);
+       case TRESP_SIM_GET_FACILITY_STATUS: {
+               const struct tresp_sim_get_facility_status *resp_get_facility = data;
+               gint f_type =0;
 
-                       telephony_sim_complete_get_atr(dbus_info->interface_object, dbus_info->invocation,
-                                       resp_get_atr->result,
-                                       atr_gv);
+               dbg("TRESP_SIM_GET_FACILITY_STATUS - Result: [%s] Type: [%d] Enable: [%s]",
+                       (resp_get_facility->result == SIM_PIN_OPERATION_SUCCESS ? "Success" : "Fail"),
+                       resp_get_facility->type,
+                       (resp_get_facility->b_enable ? "Yes" : "No"));
+
+               switch (resp_get_facility->type) {
+               case SIM_FACILITY_PS:
+                       f_type = 1;
+               break;
+               case SIM_FACILITY_SC:
+                       f_type = 3;
+               break;
+               case SIM_FACILITY_FD:
+                       f_type = 4;
+               break;
+               case SIM_FACILITY_PN:
+                       f_type = 5;
+               break;
+               case SIM_FACILITY_PU:
+                       f_type = 6;
+               break;
+               case SIM_FACILITY_PP:
+                       f_type = 7;
+               break;
+               case SIM_FACILITY_PC:
+                       f_type = 8;
+               break;
+               default:
+                       err("Unhandled/Unknown type[0x%x]", resp_get_facility->type);
+               break;
                }
-                       break;
 
+               telephony_sim_complete_get_facility(dbus_info->interface_object, dbus_info->invocation,
+                               resp_get_facility->result,
+                               f_type,
+                               resp_get_facility->b_enable);
+       }
+       break;
+
+       case TRESP_SIM_GET_LOCK_INFO: {
+               const struct tresp_sim_get_lock_info *resp_lock = data;
+               gint f_type =0;
+
+               dbg("TRESP_SIM_GET_LOCK_INFO - Result: [%s] Type: [%d] Re-try count: [%d]",
+                       (resp_lock->result == SIM_PIN_OPERATION_SUCCESS ? "Success" : "Fail"),
+                       resp_lock->type, resp_lock->retry_count);
+
+               switch (resp_lock->type) {
+               case SIM_FACILITY_PS:
+                       f_type = 1;
+               break;
+               case SIM_FACILITY_SC:
+                       f_type = 3;
+               break;
+               case SIM_FACILITY_FD:
+                       f_type = 4;
+               break;
+               case SIM_FACILITY_PN:
+                       f_type = 5;
+               break;
+               case SIM_FACILITY_PU:
+                       f_type = 6;
+               break;
+               case SIM_FACILITY_PP:
+                       f_type = 7;
+               break;
+               case SIM_FACILITY_PC:
+                       f_type = 8;
+               break;
                default:
-                       dbg("not handled TRESP type[%d]", command);
-                       break;
+                       err("Unhandled/Unknown type[0x%x]", resp_lock->type);
+               break;
+               }
+
+               telephony_sim_complete_get_lock_info(dbus_info->interface_object, dbus_info->invocation,
+                               resp_lock->result,
+                               f_type,
+                               resp_lock->lock_status,
+                               resp_lock->retry_count);
+       }
+       break;
+
+       case TRESP_SIM_TRANSMIT_APDU: {
+               const struct tresp_sim_transmit_apdu *resp_apdu = data;
+               GVariantBuilder builder;
+               GVariant * apdu_gv = NULL;
+               GVariant *inner_gv = NULL;
+               int i =0;
+
+               dbg("TRESP_SIM_TRANSMIT_APDU - Result: [%s]",
+                       (resp_apdu->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
+               tcore_util_hex_dump("[APDU_RESP] ",
+                       resp_apdu->apdu_resp_length, resp_apdu->apdu_resp);
+
+               g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
+               for (i = 0; i < (int)resp_apdu->apdu_resp_length; i++) {
+                       g_variant_builder_add (&builder, "y", resp_apdu->apdu_resp[i]);
+               }
+               inner_gv = g_variant_builder_end(&builder);
+               apdu_gv = g_variant_new("v", inner_gv);
+
+               telephony_sim_complete_transfer_apdu(dbus_info->interface_object, dbus_info->invocation,
+                               resp_apdu->result,
+                               apdu_gv);
+       }
+       break;
+
+       case TRESP_SIM_GET_ATR:{
+               const struct tresp_sim_get_atr *resp_get_atr = data;
+               GVariantBuilder builder;
+               GVariant * atr_gv = NULL;
+               GVariant *inner_gv = NULL;
+               int i =0;
+
+               dbg("TRESP_SIM_GET_ATR - Result: [%s]",
+                       (resp_get_atr->result == SIM_ACCESS_SUCCESS ? "Success" : "Fail"));
+               tcore_util_hex_dump("[ATR_RESP] ",
+                       resp_get_atr->atr_length, resp_get_atr->atr);
+
+               g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
+               for (i = 0; i < (int)resp_get_atr->atr_length; i++) {
+                       g_variant_builder_add (&builder, "y", resp_get_atr->atr[i]);
+               }
+               inner_gv = g_variant_builder_end(&builder);
+               atr_gv = g_variant_new("v", inner_gv);
+
+               telephony_sim_complete_get_atr(dbus_info->interface_object, dbus_info->invocation,
+                               resp_get_atr->result,
+                               atr_gv);
+       }
+       break;
+
+       case TRESP_SIM_SET_POWERSTATE: {
+               const struct tresp_sim_set_powerstate *resp_power = data;
+
+               dbg("TRESP_SIM_SET_POWERSTATE - Result: [%s]",
+                       (resp_power->result == SIM_POWER_SET_SUCCESS ? "Success" : "Fail"));
+
+               telephony_sim_complete_set_powerstate(dbus_info->interface_object, dbus_info->invocation,
+                               resp_power->result);
+       }
+       break;
+
+       default:
+               err("Unhandled/Unknown Response!!!");
+       break;
        }
+
        return TRUE;
 }
 
-gboolean dbus_plugin_sim_notification(struct custom_data *ctx, const char *plugin_name,
-               TelephonyObjectSkeleton *object, enum tcore_notification_command command,
-               unsigned int data_len, const void *data)
+gboolean dbus_plugin_sim_notification(struct custom_data *ctx, CoreObject *source,
+       TelephonyObjectSkeleton *object, enum tcore_notification_command command,
+       unsigned int data_len, const void *data)
 {
        TelephonySim *sim;
-       const struct tnoti_sim_status *n_sim_status = data;
+       const char *cp_name;
 
-       if (!object) {
-               dbg("object is NULL");
-               return FALSE;
-       }
+       cp_name = tcore_server_get_cp_name_by_plugin(tcore_object_ref_plugin(source));
 
        sim = telephony_object_peek_sim(TELEPHONY_OBJECT(object));
-       dbg("sim = %p", sim);
-
-       dbg("notification !!! (command = 0x%x, data_len = %d)", command, data_len);
+       dbg("sim: [%p]", sim);
 
        switch (command) {
-               case TNOTI_SIM_STATUS:
-                       dbg("notified sim_status[%d]", n_sim_status->sim_status);
-                       dbus_sim_data_request(ctx, n_sim_status->sim_status);
-                       telephony_sim_emit_status (sim, n_sim_status->sim_status);
-                       break;
+       case TNOTI_SIM_STATUS: {
+               const struct tnoti_sim_status *n_sim_status = data;
 
-               default:
-               dbg("not handled command[%d]", command);
-               break;
+               info("[DBUSINFO][%s] SIM_STATUS : [%d]", cp_name, n_sim_status->sim_status);
+
+#ifdef ENABLE_KPI_LOGS
+               if (n_sim_status->sim_status == SIM_STATUS_INIT_COMPLETED)
+                       TIME_CHECK("[%s] SIM Initialized", cp_name);
+#endif
+
+               telephony_sim_emit_status(sim, n_sim_status->sim_status);
+       }
+       break;
+
+       case TNOTI_SIM_REFRESHED: {
+               const struct tnoti_sim_refreshed *n_sim_refreshed = data;
+               info("[DBUSINFO][%s] SIM_REFRESHED : b_full_file_changed: [%s] changed_file_count: [%d]",
+                       cp_name, (n_sim_refreshed->b_full_file_changed ? "Yes" : "No"), n_sim_refreshed->file_list.file_count);
+
+               telephony_sim_emit_refreshed(sim, n_sim_refreshed->cmd_type);
+       }
+       break;
+
+       case TNOTI_SIM_CALL_FORWARD_STATE: {
+               const struct tnoti_sim_call_forward_state *info = data;
+               info("[DBUSINFO][%s] SIM_CALL_FORWARD_STATE : [%s]",
+                       cp_name, info->b_forward ? "ON" : "OFF");
+
+               telephony_sim_set_cf_state(sim, info->b_forward);
+       }
+       break;
+
+       default:
+               err("Unhandled/Unknown Notification!!!");
+       break;
        }
 
        return TRUE;
 }
+
old mode 100644 (file)
new mode 100755 (executable)
index f447893..5ac052a
--- a/src/sms.c
+++ b/src/sms.c
@@ -25,7 +25,6 @@
 #include <stdlib.h>
 #include <time.h>
 #include <glib.h>
-#include <glib-object.h>
 #include <gio/gio.h>
 
 #include <tcore.h>
@@ -45,9 +44,9 @@ TReturn       ret = TCORE_RETURN_SUCCESS;
 
 static gboolean
 on_sms_send_msg(TelephonySms *sms, GDBusMethodInvocation *invocation,
-       const gchar *sca,
+       GVariant *sca,
        gint tpdu_length,
-       const gchar *tpdu_data,
+       GVariant *tpdu_data,
        gint moreMsg,
        gpointer user_data)
 {
@@ -55,39 +54,48 @@ on_sms_send_msg(TelephonySms *sms, GDBusMethodInvocation *invocation,
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
 
-       gsize length;
-       guchar *decoded_sca = NULL;
-       guchar *decoded_tpdu = NULL;
+       int i = 0;
+       GVariantIter *iter = 0;
+       GVariant *inner_gv = 0;
+
+       if (!check_access_control (invocation, AC_SMS, "x"))
+               return TRUE;
 
        memset(&sendUmtsMsg, 0 , sizeof(struct treq_sms_send_umts_msg));
 
-       decoded_sca = g_base64_decode(sca, &length);
-       memcpy(&(sendUmtsMsg.msgDataPackage.sca[0]), decoded_sca, SMS_SMSP_ADDRESS_LEN);
+       inner_gv = g_variant_get_variant( sca );
+       g_variant_get(inner_gv, "ay", &iter);
+       while( g_variant_iter_loop(iter, "y", &sendUmtsMsg.msgDataPackage.sca[i] ) ) {
+               i++;
+               if( i >= SMS_SMSP_ADDRESS_LEN )
+                       break;
+       }
 
        sendUmtsMsg.msgDataPackage.msgLength = tpdu_length;
-       dbg("tpdu_length = 0x%x", tpdu_length);
 
-       decoded_tpdu = g_base64_decode(tpdu_data, &length);
-       memcpy(&(sendUmtsMsg.msgDataPackage.tpduData[0]), decoded_tpdu, SMS_SMDATA_SIZE_MAX + 1);
+       i = 0;
+       inner_gv = g_variant_get_variant( tpdu_data );
+       g_variant_get(inner_gv, "ay", &iter);
+       while( g_variant_iter_loop(iter, "y", &sendUmtsMsg.msgDataPackage.tpduData[i] ) ) {
+               i++;
+               if( i >= SMS_SMDATA_SIZE_MAX + 1 )
+                       break;
+       }
+       g_variant_iter_free(iter);
+       g_variant_unref(inner_gv);
+
        sendUmtsMsg.more = moreMsg;
 
        ur = MAKE_UR(ctx, sms, invocation);
        tcore_user_request_set_data(ur, sizeof(struct treq_sms_send_umts_msg), &sendUmtsMsg);
        tcore_user_request_set_command(ur, TREQ_SMS_SEND_UMTS_MSG);
 
-       if(decoded_sca)
-               g_free(decoded_sca);
-       
-       if(decoded_tpdu)
-               g_free(decoded_tpdu);
-
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               // api_err = TAPI_API_OPERATION_FAILED;
-               err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
-               return  FALSE;
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
        }
-               
+
        return  TRUE;
 }
 /*
@@ -267,6 +275,9 @@ on_sms_read_msg(TelephonySms *sms, GDBusMethodInvocation *invocation,
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
 
+       if (!check_access_control (invocation, AC_SMS, "r"))
+               return TRUE;
+
        readMsg.index = arg_index;
 
        ur = MAKE_UR(ctx, sms, invocation);
@@ -275,8 +286,8 @@ on_sms_read_msg(TelephonySms *sms, GDBusMethodInvocation *invocation,
 
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               // api_err = TAPI_API_OPERATION_FAILED;
-               err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -285,43 +296,54 @@ on_sms_read_msg(TelephonySms *sms, GDBusMethodInvocation *invocation,
 static gboolean
 on_sms_save_msg(TelephonySms *sms, GDBusMethodInvocation *invocation,
        gint arg_msg_status,
-       const gchar * arg_sca,
+       GVariant * arg_sca,
        gint arg_tpdu_length,
-       const gchar * arg_tpdu_data,
+       GVariant * arg_tpdu_data,
        gpointer user_data)
 {
-        struct treq_sms_save_msg saveMsg = {0,};
+       struct treq_sms_save_msg saveMsg = {0,};
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
 
-       gsize length;
-       guchar *decoded_sca = NULL;
-       guchar *decoded_tpdu = NULL;
-       
+       int i = 0;
+       GVariantIter *iter = 0;
+       GVariant *inner_gv = 0;
+
+       if (!check_access_control (invocation, AC_SMS, "w"))
+               return TRUE;
+
+       saveMsg.simIndex = 0xffff;
        saveMsg.msgStatus = arg_msg_status;
 
-       decoded_sca = g_base64_decode(arg_sca, &length);
-       memcpy(&(saveMsg.msgDataPackage.sca[0]), decoded_sca, SMS_SMSP_ADDRESS_LEN);
+       inner_gv = g_variant_get_variant( arg_sca );
+       g_variant_get(inner_gv, "ay", &iter);
+       while( g_variant_iter_loop(iter, "y", &saveMsg.msgDataPackage.sca[i] ) ) {
+               i++;
+               if( i >= SMS_SMSP_ADDRESS_LEN )
+                       break;
+       }
 
-       saveMsg.msgDataPackage.msgLength = arg_tpdu_length;
+       i = 0;
+       inner_gv = g_variant_get_variant( arg_tpdu_data );
+       g_variant_get(inner_gv, "ay", &iter);
+       while( g_variant_iter_loop(iter, "y", &saveMsg.msgDataPackage.tpduData[i] ) ) {
+               i++;
+               if( i >= SMS_SMDATA_SIZE_MAX + 1 )
+                       break;
+       }
+       g_variant_iter_free(iter);
+       g_variant_unref(inner_gv);
 
-       decoded_tpdu = g_base64_decode(arg_tpdu_data, &length);
-       memcpy(&(saveMsg.msgDataPackage.tpduData[0]), decoded_tpdu, SMS_SMDATA_SIZE_MAX + 1);
+       saveMsg.msgDataPackage.msgLength = arg_tpdu_length;
 
        ur = MAKE_UR(ctx, sms, invocation);
        tcore_user_request_set_data(ur, sizeof(struct treq_sms_save_msg), &saveMsg);
        tcore_user_request_set_command(ur, TREQ_SMS_SAVE_MSG);
 
-       if(decoded_sca)
-               g_free(decoded_sca);
-       
-       if(decoded_tpdu)
-               g_free(decoded_tpdu);
-       
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               // api_err = TAPI_API_OPERATION_FAILED;
-               err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -332,10 +354,13 @@ on_sms_delete_msg(TelephonySms *sms, GDBusMethodInvocation *invocation,
        gint arg_index,
        gpointer user_data)
 {
-        struct treq_sms_delete_msg deleteMsg = {0,};
+       struct treq_sms_delete_msg deleteMsg = {0,};
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
 
+       if (!check_access_control (invocation, AC_SMS, "x"))
+               return TRUE;
+
        deleteMsg.index = arg_index;
 
        ur = MAKE_UR(ctx, sms, invocation);
@@ -344,8 +369,8 @@ on_sms_delete_msg(TelephonySms *sms, GDBusMethodInvocation *invocation,
 
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               // api_err = TAPI_API_OPERATION_FAILED;
-               err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -355,18 +380,20 @@ static gboolean
 on_sms_get_msg_count(TelephonySms *sms, GDBusMethodInvocation *invocation,
        gpointer user_data)
 {
-        struct treq_sms_get_msg_count getMsgCnt;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
 
+       if (!check_access_control (invocation, AC_SMS, "r"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, sms, invocation);
-       tcore_user_request_set_data(ur, sizeof(struct treq_sms_get_msg_count), &getMsgCnt);
+       tcore_user_request_set_data(ur, 0, NULL);
        tcore_user_request_set_command(ur, TREQ_SMS_GET_COUNT);
 
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               // api_err = TAPI_API_OPERATION_FAILED;
-               err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -377,10 +404,13 @@ on_sms_get_sca(TelephonySms *sms, GDBusMethodInvocation *invocation,
        gint arg_index,
        gpointer user_data)
 {
-        struct treq_sms_get_sca getSca = {0,};
+       struct treq_sms_get_sca getSca = {0,};
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
 
+       if (!check_access_control (invocation, AC_SMS, "r"))
+               return TRUE;
+
        getSca.index = arg_index;
 
        ur = MAKE_UR(ctx, sms, invocation);
@@ -389,9 +419,8 @@ on_sms_get_sca(TelephonySms *sms, GDBusMethodInvocation *invocation,
 
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               // api_err = TAPI_API_OPERATION_FAILED;
-               err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
-               return  FALSE;
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -403,13 +432,20 @@ on_sms_set_sca(TelephonySms *sms, GDBusMethodInvocation *invocation,
        gint arg_ton,
        gint arg_npi,
        gint arg_dialNumberLength,
-       const gchar *arg_dialNumber,
+       GVariant *arg_dialNumber,
        gpointer user_data)
 {
-        struct treq_sms_set_sca setSca;
+       struct treq_sms_set_sca setSca;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
 
+       int i = 0;
+       GVariantIter *iter = 0;
+       GVariant *inner_gv = 0;
+
+       if (!check_access_control (invocation, AC_SMS, "w"))
+               return TRUE;
+
        memset(&setSca, 0, sizeof(struct treq_sms_set_sca));
 
        setSca.index = arg_index;
@@ -420,34 +456,36 @@ on_sms_set_sca(TelephonySms *sms, GDBusMethodInvocation *invocation,
        if ((setSca.scaInfo.dialNumLen <= 0) || (setSca.scaInfo.dialNumLen > (SMS_MAX_SMS_SERVICE_CENTER_ADDR + 1)))
        {
                err("[tcore_SMS] TAPI_API_INVALID_INPUT !!!");
-               return  FALSE;
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               return  TRUE;
        }
        else if(setSca.index != 0)
        {
                err("[tcore_SMS] Index except 0 is supported");
-               // api_err = TAPI_API_NOT_SUPPORTED;
-               return  FALSE;
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               return  TRUE;
        }
        else
        {
-               gsize length;
-               guchar *decoded_sca = NULL;
-       
-               decoded_sca = g_base64_decode(arg_dialNumber, &length);
-               memcpy(&(setSca.scaInfo.diallingNum[0]), decoded_sca, SMS_SMSP_ADDRESS_LEN + 1);
+               inner_gv = g_variant_get_variant( arg_dialNumber );
+               g_variant_get(inner_gv, "ay", &iter);
+               while( g_variant_iter_loop(iter, "y", &setSca.scaInfo.diallingNum[i] ) ) {
+                       i++;
+                       if( i >= SMS_SMSP_ADDRESS_LEN + 1 )
+                               break;
+               }
 
                ur = MAKE_UR(ctx, sms, invocation);
                tcore_user_request_set_data(ur, sizeof(struct treq_sms_set_sca), &setSca);
                tcore_user_request_set_command(ur, TREQ_SMS_SET_SCA);
 
-               if(decoded_sca)
-                       g_free(decoded_sca);
-               
+               g_variant_iter_free(iter);
+               g_variant_unref(inner_gv);
+
                ret = tcore_communicator_dispatch_request(ctx->comm, ur);
                if (ret != TCORE_RETURN_SUCCESS) {
-                       //api_err = TAPI_API_OPERATION_FAILED;
-                       err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
-                       return  FALSE;
+                       FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+                       tcore_user_request_unref(ur);
                }
        }
 
@@ -458,19 +496,20 @@ static gboolean
 on_sms_get_cb_config(TelephonySms *sms, GDBusMethodInvocation *invocation,
        gpointer user_data)
 {
-       struct treq_sms_get_cb_config getCbConfig;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
 
+       if (!check_access_control (invocation, AC_SMS, "r"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, sms, invocation);
-       tcore_user_request_set_data(ur, sizeof(struct treq_sms_get_cb_config), &getCbConfig);
+       tcore_user_request_set_data(ur, 0, NULL);
        tcore_user_request_set_command(ur, TREQ_SMS_GET_CB_CONFIG);
 
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               //api_err = TAPI_API_OPERATION_FAILED;
-               err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
-               return  FALSE;
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -482,36 +521,64 @@ on_sms_set_cb_config(TelephonySms *sms, GDBusMethodInvocation *invocation,
        gboolean arg_cbEnable,
        gint arg_msgIdMaxCount,
        gint arg_msgIdRangeCount,
-       const gchar *arg_msgId,
+       GVariant *arg_mdgId,
        gpointer user_data)
 {
     struct treq_sms_set_cb_config setCbConfig = {0,};
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
 
-       gsize length;
-       guchar *decoded_msgId = NULL;
+       GVariant *value = NULL;
+       GVariant *inner_gv = 0;
+       GVariantIter *iter = NULL;
+       GVariantIter *iter_row = NULL;
+       const gchar *key = NULL;
+       int i = 0;
+
+       if (!check_access_control (invocation, AC_SMS, "w"))
+               return TRUE;
 
        setCbConfig.net3gppType = arg_net3gppType;
        setCbConfig.cbEnabled = arg_cbEnable;
        setCbConfig.msgIdMaxCount = arg_msgIdMaxCount;
        setCbConfig.msgIdRangeCount = arg_msgIdRangeCount;
 
-       decoded_msgId = g_base64_decode(arg_msgId, &length);
-       memcpy(&(setCbConfig.msgIDs[0]), decoded_msgId, SMS_GSM_SMS_CBMI_LIST_SIZE_MAX*5);
+       inner_gv = g_variant_get_variant( arg_mdgId );
+       g_variant_get(inner_gv, "aa{sv}", &iter);
+
+       while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
+               while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
+                       if (!g_strcmp0(key, "FromMsgId")) {
+                               setCbConfig.msgIDs[i].net3gpp.fromMsgId = g_variant_get_uint16(value);
+                       }
+                       if (!g_strcmp0(key, "ToMsgId")) {
+                               setCbConfig.msgIDs[i].net3gpp.toMsgId = g_variant_get_uint16(value);
+                       }
+                       if (!g_strcmp0(key, "CBCategory")) {
+                               setCbConfig.msgIDs[i].net3gpp2.cbCategory = g_variant_get_uint16(value);
+                       }
+                       if (!g_strcmp0(key, "CBLanguage")) {
+                               setCbConfig.msgIDs[i].net3gpp2.cbLanguage = g_variant_get_uint16(value);
+                       }
+                       if (!g_strcmp0(key, "Selected")) {
+                               setCbConfig.msgIDs[i].net3gpp2.selected = g_variant_get_byte(value);
+                       }
+               }
+               i++;
+               g_variant_iter_free(iter_row);
+               if ( i >= SMS_GSM_SMS_CBMI_LIST_SIZE_MAX )
+                       break;
+       }
+       g_variant_iter_free(iter);
 
        ur = MAKE_UR(ctx, sms, invocation);
        tcore_user_request_set_data(ur, sizeof(struct treq_sms_set_cb_config), &setCbConfig);
        tcore_user_request_set_command(ur, TREQ_SMS_SET_CB_CONFIG);
 
-       if(decoded_msgId)
-               g_free(decoded_msgId);
-       
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               //api_err = TAPI_API_OPERATION_FAILED;
-               err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
-               return  FALSE;
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -522,10 +589,13 @@ on_sms_set_mem_status(TelephonySms *sms, GDBusMethodInvocation *invocation,
        gint arg_memoryStatus,
        gpointer user_data)
 {
-        struct treq_sms_set_mem_status memStatus = {0,};
+       struct treq_sms_set_mem_status memStatus = {0,};
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
 
+       if (!check_access_control (invocation, AC_SMS, "w"))
+               return TRUE;
+
        memStatus.memory_status = arg_memoryStatus;
 
        ur = MAKE_UR(ctx, sms, invocation);
@@ -534,9 +604,8 @@ on_sms_set_mem_status(TelephonySms *sms, GDBusMethodInvocation *invocation,
 
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               //api_err = TAPI_API_OPERATION_FAILED;
-               err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
-               return  FALSE;
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -546,20 +615,23 @@ static gboolean
 on_sms_get_pref_bearer(TelephonySms *sms, GDBusMethodInvocation *invocation,
        gpointer user_data)
 {
-        struct treq_sms_get_pref_bearer getPrefBearer;
+       struct treq_sms_get_pref_bearer getPrefBearer;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
 
+       if (!check_access_control (invocation, AC_SMS, "r"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, sms, invocation);
        tcore_user_request_set_data(ur, sizeof(struct treq_sms_get_pref_bearer), &getPrefBearer);
        tcore_user_request_set_command(ur, TREQ_SMS_GET_PREF_BEARER);
 
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               //api_err = TAPI_API_OPERATION_FAILED;
-               err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
-               return  FALSE;
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
        }
+
        return TRUE;
 }
 
@@ -568,10 +640,13 @@ on_sms_set_pref_bearer(TelephonySms *sms, GDBusMethodInvocation *invocation,
        gint arg_bearerType,
        gpointer user_data)
 {
-        struct treq_sms_set_pref_bearer setPrefBearer = {0,};
+       struct treq_sms_set_pref_bearer setPrefBearer = {0,};
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
 
+       if (!check_access_control (invocation, AC_SMS, "w"))
+               return TRUE;
+
        setPrefBearer.svc = arg_bearerType;
 
        ur = MAKE_UR(ctx, sms, invocation);
@@ -580,9 +655,8 @@ on_sms_set_pref_bearer(TelephonySms *sms, GDBusMethodInvocation *invocation,
 
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               //api_err = TAPI_API_OPERATION_FAILED;
-               err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
-               return  FALSE;
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -590,29 +664,43 @@ on_sms_set_pref_bearer(TelephonySms *sms, GDBusMethodInvocation *invocation,
 
 static gboolean
 on_sms_set_delivery_report(TelephonySms *sms, GDBusMethodInvocation *invocation,
-       const gchar *arg_sca,
+       GVariant *arg_sca,
        gint arg_tpdu_length,
-       const gchar *arg_tpdu_data,
+       GVariant *arg_tpdu_data,
        gint arg_rpCause,
        gpointer user_data)
 {
-        struct treq_sms_set_delivery_report deliveryReport;
+       struct treq_sms_set_delivery_report deliveryReport;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
 
-       gsize length;
-       guchar *decoded_sca = NULL;
-       guchar *decoded_tpdu = NULL;
-       
+       int i = 0;
+       GVariantIter *iter = 0;
+       GVariant *inner_gv = 0;
+
+       if (!check_access_control (invocation, AC_SMS, "w"))
+               return TRUE;
+
        memset(&deliveryReport, 0, sizeof(struct treq_sms_set_delivery_report));
 
-       decoded_sca = g_base64_decode(arg_sca, &length);
-       memcpy(&(deliveryReport.dataInfo.sca[0]), decoded_sca, SMS_SMSP_ADDRESS_LEN);
+       inner_gv = g_variant_get_variant( arg_sca );
+       g_variant_get(inner_gv, "ay", &iter);
+       while( g_variant_iter_loop(iter, "y", &deliveryReport.dataInfo.sca[i] ) ) {
+               i++;
+               if( i >= SMS_SMSP_ADDRESS_LEN )
+                       break;
+       }
 
-       deliveryReport.dataInfo.msgLength = arg_tpdu_length;
+       i = 0;
+       inner_gv = g_variant_get_variant( arg_tpdu_data );
+       g_variant_get(inner_gv, "ay", &iter);
+       while( g_variant_iter_loop(iter, "y", &deliveryReport.dataInfo.tpduData[i] ) ) {
+               i++;
+               if( i >= SMS_SMDATA_SIZE_MAX + 1 )
+                       break;
+       }
 
-       decoded_tpdu = g_base64_decode(arg_tpdu_data, &length);
-       memcpy(&(deliveryReport.dataInfo.tpduData[0]), decoded_tpdu, SMS_SMDATA_SIZE_MAX + 1);
+       deliveryReport.dataInfo.msgLength = arg_tpdu_length;
 
        deliveryReport.rspType = arg_rpCause;
 
@@ -620,17 +708,13 @@ on_sms_set_delivery_report(TelephonySms *sms, GDBusMethodInvocation *invocation,
        tcore_user_request_set_data(ur, sizeof(struct treq_sms_set_delivery_report), &deliveryReport);
        tcore_user_request_set_command(ur, TREQ_SMS_SET_DELIVERY_REPORT);
 
-       if(decoded_sca)
-               g_free(decoded_sca);
-
-       if(decoded_tpdu)
-               g_free(decoded_tpdu);
+       g_variant_iter_free(iter);
+       g_variant_unref(inner_gv);
 
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               //api_err = TAPI_API_OPERATION_FAILED;
-               err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
-               return  FALSE;
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -642,10 +726,13 @@ on_sms_set_msg_status(TelephonySms *sms, GDBusMethodInvocation *invocation,
        gint arg_msgStatus,
        gpointer user_data)
 {
-        struct treq_sms_set_msg_status msgStatus = {0,};
+       struct treq_sms_set_msg_status msgStatus = {0,};
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
 
+       if (!check_access_control (invocation, AC_SMS, "w"))
+               return TRUE;
+
        msgStatus.index = arg_index;
        msgStatus.msgStatus = arg_msgStatus;
 
@@ -655,9 +742,8 @@ on_sms_set_msg_status(TelephonySms *sms, GDBusMethodInvocation *invocation,
 
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               //api_err = TAPI_API_OPERATION_FAILED;
-               err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
-               return  FALSE;
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -668,10 +754,13 @@ on_sms_get_sms_params(TelephonySms *sms, GDBusMethodInvocation *invocation,
        gint arg_index,
        gpointer user_data)
 {
-        struct treq_sms_get_params getParams = {0,};
+       struct treq_sms_get_params getParams = {0,};
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
 
+       if (!check_access_control (invocation, AC_SMS, "r"))
+               return TRUE;
+
        getParams.index = arg_index;
 
        ur = MAKE_UR(ctx, sms, invocation);
@@ -680,9 +769,8 @@ on_sms_get_sms_params(TelephonySms *sms, GDBusMethodInvocation *invocation,
 
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               //api_err = TAPI_API_OPERATION_FAILED;
-               err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
-               return  FALSE;
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -693,16 +781,16 @@ on_sms_set_sms_params(TelephonySms *sms, GDBusMethodInvocation *invocation,
        gint arg_recordIndex,
        gint arg_recordLen,
        gint arg_alphaIdLen,
-       const gchar *arg_alphaId,
+       GVariant *arg_alphaId,
        gint arg_paramIndicator,
        gint arg_destAddr_DialNumLen,
        gint arg_destAddr_Ton,
        gint arg_destAddr_Npi,
-       const gchar *arg_destAddr_DiallingNum,
+       GVariant *arg_destAddr_DiallingNum,
        gint arg_svcCntrAddr_DialNumLen,
        gint arg_SvcCntrAddr_Ton,
        gint arg_svcCntrAddr_Npi,
-       const gchar *arg_svcCntrAddr_DialNum,
+       GVariant *arg_svcCntrAddr_DialNum,
        gint arg_protocolId,
        gint arg_dataCodingScheme,
        gint arg_validityPeriod,
@@ -712,31 +800,54 @@ on_sms_set_sms_params(TelephonySms *sms, GDBusMethodInvocation *invocation,
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
 
-       gsize length;
-       guchar *decoded_alphaId = NULL;
-       guchar *decoded_destDialNum = NULL;
-       guchar *decoded_scaDialNum = NULL;
+       int i = 0;
+       GVariantIter *iter = 0;
+       GVariant *inner_gv = 0;
+
+       if (!check_access_control (invocation, AC_SMS, "w"))
+               return TRUE;
 
        memset(&setParams, 0, sizeof(struct treq_sms_set_params));
 
        setParams.params.recordIndex = arg_recordIndex;
        setParams.params.recordLen = arg_recordLen;
        setParams.params.alphaIdLen = arg_alphaIdLen;
-       decoded_alphaId = g_base64_decode(arg_alphaId, &length);
-       memcpy(&(setParams.params.szAlphaId[0]), decoded_alphaId, SMS_SMSP_ALPHA_ID_LEN_MAX + 1);
+
+       inner_gv = g_variant_get_variant( arg_alphaId );
+       g_variant_get(inner_gv, "ay", &iter);
+       while( g_variant_iter_loop(iter, "y", &setParams.params.szAlphaId[i] ) ) {
+               i++;
+               if( i >= SMS_SMSP_ALPHA_ID_LEN_MAX + 1 )
+                       break;
+       }
+
        setParams.params.paramIndicator = arg_paramIndicator;
 
        setParams.params.tpDestAddr.dialNumLen = arg_destAddr_DialNumLen;
        setParams.params.tpDestAddr.typeOfNum = arg_destAddr_Ton;
        setParams.params.tpDestAddr.numPlanId = arg_destAddr_Npi;
-       decoded_destDialNum = g_base64_decode(arg_destAddr_DiallingNum, &length);
-       memcpy(&(setParams.params.tpDestAddr.diallingNum[0]), decoded_destDialNum, SMS_SMSP_ADDRESS_LEN + 1);
+
+       i = 0;
+       inner_gv = g_variant_get_variant( arg_destAddr_DiallingNum );
+       g_variant_get(inner_gv, "ay", &iter);
+       while( g_variant_iter_loop(iter, "y", &setParams.params.tpDestAddr.diallingNum[i] ) ) {
+               i++;
+               if( i >= SMS_SMSP_ADDRESS_LEN + 1 )
+                       break;
+       }
 
        setParams.params.tpSvcCntrAddr.dialNumLen = arg_svcCntrAddr_DialNumLen;
        setParams.params.tpSvcCntrAddr.typeOfNum = arg_SvcCntrAddr_Ton;
        setParams.params.tpSvcCntrAddr.numPlanId = arg_svcCntrAddr_Npi;
-       decoded_scaDialNum = g_base64_decode(arg_svcCntrAddr_DialNum, &length); 
-       memcpy(&(setParams.params.tpSvcCntrAddr.diallingNum[0]), decoded_scaDialNum, SMS_SMSP_ADDRESS_LEN + 1);
+
+       i = 0;
+       inner_gv = g_variant_get_variant( arg_svcCntrAddr_DialNum );
+       g_variant_get(inner_gv, "ay", &iter);
+       while( g_variant_iter_loop(iter, "y", &setParams.params.tpSvcCntrAddr.diallingNum[i] ) ) {
+               i++;
+               if( i >= SMS_SMSP_ADDRESS_LEN + 1 )
+                       break;
+       }
 
        setParams.params.tpProtocolId = arg_protocolId;
        setParams.params.tpDataCodingScheme = arg_dataCodingScheme;
@@ -746,20 +857,13 @@ on_sms_set_sms_params(TelephonySms *sms, GDBusMethodInvocation *invocation,
        tcore_user_request_set_data(ur, sizeof(struct treq_sms_set_params), &setParams);
        tcore_user_request_set_command(ur, TREQ_SMS_SET_PARAMS);
 
-       if(decoded_alphaId)
-               g_free(decoded_alphaId);
-
-       if(decoded_destDialNum)
-               g_free(decoded_destDialNum);
-
-       if(decoded_scaDialNum)
-               g_free(decoded_scaDialNum);
+       g_variant_iter_free(iter);
+       g_variant_unref(inner_gv);
 
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               //api_err = TAPI_API_OPERATION_FAILED;
-               err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
-               return  FALSE;
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -769,19 +873,20 @@ static gboolean
 on_sms_get_sms_param_cnt(TelephonySms *sms, GDBusMethodInvocation *invocation,
        gpointer user_data)
 {
-        struct treq_sms_get_paramcnt getParamCnt;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
 
+       if (!check_access_control (invocation, AC_SMS, "r"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, sms, invocation);
-       tcore_user_request_set_data(ur, sizeof(struct treq_sms_get_paramcnt), &getParamCnt);
+       tcore_user_request_set_data(ur, 0, NULL);
        tcore_user_request_set_command(ur, TREQ_SMS_GET_PARAMCNT);
 
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               //api_err = TAPI_API_OPERATION_FAILED;
-               err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
-               return  FALSE;
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
        }
 
        return TRUE;
@@ -795,14 +900,14 @@ on_sms_get_sms_ready_status(TelephonySms *sms, GDBusMethodInvocation *invocation
        GSList *co_list = NULL;
        CoreObject *co_sms = NULL;
        TcorePlugin *plugin = NULL;
+       gboolean ready_status = FALSE;
 
-       dbg("Func Entrance");
-
-       plugin = tcore_server_find_plugin(ctx->server, TCORE_PLUGIN_DEFAULT);
+       plugin = tcore_server_find_plugin(ctx->server, GET_CP_NAME(invocation));
        co_list = tcore_plugin_get_core_objects_bytype(plugin, CORE_OBJECT_TYPE_SMS);
        if (!co_list) {
                dbg("error- co_list is NULL");
-               return FALSE;
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               return TRUE;
        }
 
        co_sms = (CoreObject *)co_list->data;
@@ -810,10 +915,13 @@ on_sms_get_sms_ready_status(TelephonySms *sms, GDBusMethodInvocation *invocation
 
        if (!co_sms) {
                dbg("error- co_sms is NULL");
-               return FALSE;
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               return TRUE;
        }
-       
-       telephony_sms_complete_get_sms_ready_status(sms, invocation, tcore_sms_get_ready_status(co_sms));
+
+       ready_status = tcore_sms_get_ready_status(co_sms);
+       dbg("ready_status = %d", ready_status);
+       telephony_sms_complete_get_sms_ready_status(sms, invocation, ready_status);
 
        return TRUE;
 }
@@ -826,24 +934,95 @@ gboolean dbus_plugin_setup_sms_interface(TelephonyObjectSkeleton *object, struct
        telephony_object_skeleton_set_sms(object, sms);
        g_object_unref(sms);
 
-       g_signal_connect(sms, "handle-send-msg", G_CALLBACK (on_sms_send_msg), ctx);
-       g_signal_connect(sms, "handle-read-msg", G_CALLBACK (on_sms_read_msg), ctx);
-       g_signal_connect(sms, "handle-save-msg", G_CALLBACK (on_sms_save_msg), ctx);
-       g_signal_connect(sms, "handle-delete-msg", G_CALLBACK (on_sms_delete_msg), ctx);
-       g_signal_connect(sms, "handle-get-msg-count", G_CALLBACK (on_sms_get_msg_count), ctx);
-       g_signal_connect(sms, "handle-get-sca", G_CALLBACK (on_sms_get_sca), ctx);
-       g_signal_connect(sms, "handle-set-sca", G_CALLBACK (on_sms_set_sca), ctx);
-       g_signal_connect(sms, "handle-get-cb-config", G_CALLBACK (on_sms_get_cb_config), ctx);
-       g_signal_connect(sms, "handle-set-cb-config", G_CALLBACK (on_sms_set_cb_config), ctx);
-       g_signal_connect(sms, "handle-set-mem-status", G_CALLBACK (on_sms_set_mem_status), ctx);
-       g_signal_connect(sms, "handle-get-pref-bearer", G_CALLBACK (on_sms_get_pref_bearer), ctx);
-       g_signal_connect(sms, "handle-set-pref-bearer", G_CALLBACK (on_sms_set_pref_bearer), ctx);
-       g_signal_connect(sms, "handle-set-delivery-report", G_CALLBACK (on_sms_set_delivery_report), ctx);
-       g_signal_connect(sms, "handle-set-msg-status", G_CALLBACK (on_sms_set_msg_status), ctx);
-       g_signal_connect(sms, "handle-get-sms-params", G_CALLBACK (on_sms_get_sms_params), ctx);
-       g_signal_connect(sms, "handle-set-sms-params", G_CALLBACK (on_sms_set_sms_params), ctx);
-       g_signal_connect(sms, "handle-get-sms-param-cnt", G_CALLBACK (on_sms_get_sms_param_cnt), ctx);
-       g_signal_connect(sms, "handle-get-sms-ready-status", G_CALLBACK (on_sms_get_sms_ready_status), ctx);    
+       g_signal_connect(sms,
+                       "handle-send-msg",
+                       G_CALLBACK (on_sms_send_msg),
+                       ctx);
+
+       g_signal_connect(sms,
+                       "handle-read-msg",
+                       G_CALLBACK (on_sms_read_msg),
+                       ctx);
+
+       g_signal_connect(sms,
+                       "handle-save-msg",
+                       G_CALLBACK (on_sms_save_msg),
+                       ctx);
+
+       g_signal_connect(sms,
+                       "handle-delete-msg",
+                       G_CALLBACK (on_sms_delete_msg),
+                       ctx);
+
+       g_signal_connect(sms,
+                       "handle-get-msg-count",
+                       G_CALLBACK (on_sms_get_msg_count),
+                       ctx);
+
+       g_signal_connect(sms,
+                       "handle-get-sca",
+                       G_CALLBACK (on_sms_get_sca),
+                       ctx);
+
+       g_signal_connect(sms,
+                       "handle-set-sca",
+                       G_CALLBACK (on_sms_set_sca),
+                       ctx);
+
+       g_signal_connect(sms,
+                       "handle-get-cb-config",
+                       G_CALLBACK (on_sms_get_cb_config),
+                       ctx);
+
+       g_signal_connect(sms,
+                       "handle-set-cb-config",
+                       G_CALLBACK (on_sms_set_cb_config),
+                       ctx);
+
+       g_signal_connect(sms,
+                       "handle-set-mem-status",
+                       G_CALLBACK (on_sms_set_mem_status),
+                       ctx);
+
+       g_signal_connect(sms,
+               "handle-get-pref-bearer",
+               G_CALLBACK (on_sms_get_pref_bearer),
+               ctx);
+
+       g_signal_connect(sms,
+                       "handle-set-pref-bearer",
+                       G_CALLBACK (on_sms_set_pref_bearer),
+                       ctx);
+
+       g_signal_connect(sms,
+                       "handle-set-delivery-report",
+                       G_CALLBACK (on_sms_set_delivery_report),
+                       ctx);
+
+       g_signal_connect(sms,
+                       "handle-set-msg-status",
+                       G_CALLBACK (on_sms_set_msg_status),
+                       ctx);
+
+       g_signal_connect(sms,
+                       "handle-get-sms-params",
+                       G_CALLBACK (on_sms_get_sms_params),
+                       ctx);
+
+       g_signal_connect(sms,
+                       "handle-set-sms-params",
+                       G_CALLBACK (on_sms_set_sms_params),
+                       ctx);
+
+       g_signal_connect(sms,
+                       "handle-get-sms-param-cnt",
+                       G_CALLBACK (on_sms_get_sms_param_cnt),
+                       ctx);
+
+       g_signal_connect(sms,
+                       "handle-get-sms-ready-status",
+                       G_CALLBACK (on_sms_get_sms_ready_status),
+                       ctx);
 
        return TRUE;
 }
@@ -881,10 +1060,7 @@ gboolean dbus_plugin_sms_response(struct custom_data *ctx, UserRequest *ur, stru
                case TRESP_SMS_SEND_UMTS_MSG: {
                        const struct tresp_sms_send_umts_msg *resp = data;
 
-
-                       dbg("receive TRESP_SMS_SEND_UMTS_MSG");
-                       dbg("resp->result = 0x%x", resp->result);
-
+                       dbg("receive TRESP_SMS_SEND_UMTS_MSG (result:[0x%x])", resp->result);
                        telephony_sms_complete_send_msg(dbus_info->interface_object, dbus_info->invocation, resp->result);
 
                        }
@@ -893,59 +1069,48 @@ gboolean dbus_plugin_sms_response(struct custom_data *ctx, UserRequest *ur, stru
                case TRESP_SMS_SEND_CDMA_MSG: {
                        const struct tresp_sms_send_cdma_msg *resp = data;
 
-                       dbg("receive TRESP_SMS_SEND_CDMA_MSG");
-                       dbg("resp->result = 0x%x", resp->result);
-#if 0
-                       resp->result
-                       resp->causeCode.ReplySeqNumber
-                       resp->causeCode.ErrClass
-                       resp->causeCode.Cause
-#endif
+                       dbg("receive TRESP_SMS_SEND_CDMA_MSG (result:[0x%x])", resp->result);
                        }
                        break;
 
                case TRESP_SMS_READ_MSG: {
                        const struct tresp_sms_read_msg *resp = data;
-                       gchar *sca = NULL;
-                       gchar *tpdu = NULL;                     
-
-                       dbg("receive TRESP_SMS_READ_MSG");
-                       dbg("resp->result = 0x%x", resp->result);
+                       GVariant *sca = 0, *packet_sca = 0;
+                       GVariant *tpdu = 0, *packet_tpdu = 0;
+                       GVariantBuilder b;
 
-                       sca = g_base64_encode((const guchar *)&(resp->dataInfo.smsData.sca[0]), SMS_SMSP_ADDRESS_LEN);
-                       if (sca == NULL) {
-                               dbg("g_base64_encode: Failed to Enocde the SCA.");
-                               sca = "";
-                       }
+                       dbg("receive TRESP_SMS_READ_MSG (result:[0x%x])", resp->result);
+                       g_variant_builder_init (&b, G_VARIANT_TYPE("ay"));
 
-                       tpdu = g_base64_encode((const guchar *)&(resp->dataInfo.smsData.tpduData[0]), SMS_SMDATA_SIZE_MAX + 1);
-                       if (sca == NULL) {
-                               dbg("g_base64_encode: Failed to Enocde the SCA.");
-                               tpdu = "";
+                       for( i=0; i<SMS_SMSP_ADDRESS_LEN; i++) {
+                               g_variant_builder_add(&b, "y", resp->dataInfo.smsData.sca[i] );
                        }
+                       sca = g_variant_builder_end(&b);
 
-                       telephony_sms_complete_read_msg(dbus_info->interface_object, dbus_info->invocation, 
-                               resp->result, 
-                               resp->dataInfo.msgStatus, 
-                               sca, 
-                               resp->dataInfo.smsData.msgLength, 
-                               tpdu);
+                       g_variant_builder_init (&b, G_VARIANT_TYPE("ay"));
 
-                       if (sca)
-                               g_free(sca);
+                       for( i=0; i<SMS_SMDATA_SIZE_MAX + 1; i++) {
+                               g_variant_builder_add(&b, "y", resp->dataInfo.smsData.tpduData[i] );
+                       }
+                       tpdu = g_variant_builder_end(&b);
 
-                       if (tpdu)
-                               g_free(tpdu);
+                       packet_sca = g_variant_new("v", sca);
+                       packet_tpdu = g_variant_new("v", tpdu);
 
+                       telephony_sms_complete_read_msg(dbus_info->interface_object, dbus_info->invocation,
+                               resp->result,
+                               resp->dataInfo.simIndex,
+                               resp->dataInfo.msgStatus,
+                               packet_sca,
+                               resp->dataInfo.smsData.msgLength,
+                               packet_tpdu);
                        }
                        break;
 
                case TRESP_SMS_SAVE_MSG: {
                        const struct tresp_sms_save_msg *resp = data;
 
-                       dbg("receive TRESP_SMS_SAVE_MSG");
-                       dbg("resp->result = 0x%x", resp->result);
-
+                       dbg("receive TRESP_SMS_SAVE_MSG (result:[0x%x])", resp->result);
                        telephony_sms_complete_save_msg (dbus_info->interface_object, dbus_info->invocation,
                                resp->result,
                                resp->index);
@@ -955,72 +1120,63 @@ gboolean dbus_plugin_sms_response(struct custom_data *ctx, UserRequest *ur, stru
                case TRESP_SMS_DELETE_MSG: {
                        const struct tresp_sms_delete_msg *resp = data;
 
-                       dbg("receive TRESP_SMS_DELETE_MSG");
-                       dbg("resp->result = 0x%x", resp->result);
-
+                       dbg("receive TRESP_SMS_DELETE_MSG (result:[0x%x])", resp->result);
                        telephony_sms_complete_delete_msg(dbus_info->interface_object, dbus_info->invocation,
-                               resp->result);
+                               resp->result, resp->index);
 
                        }
                        break;
 
                case TRESP_SMS_GET_STORED_MSG_COUNT: {
                        const struct tresp_sms_get_storedMsgCnt *resp = data;
-                       gchar *msgCnt = NULL;
+                       GVariant *list;
+                       GVariantBuilder b;
+                       unsigned int loop_var;
 
-                       dbg("receive TRESP_SMS_GET_STORED_MSG_COUNT");
-                       dbg("resp->result = 0x%x", resp->result);
+                       dbg("receive TRESP_SMS_GET_STORED_MSG_COUNT (result:[0x%x])", resp->result);
+                       g_variant_builder_init (&b, G_VARIANT_TYPE("ai"));
 
-                       msgCnt = g_base64_encode((const guchar *)&(resp->storedMsgCnt.indexList[0]), SMS_GSM_SMS_MSG_NUM_MAX + 1);
-                       if (msgCnt == NULL) {
-                               dbg("g_base64_encode: Failed to Enocde storedMsgCnt.indexList");
-                               msgCnt = "";
+                       for (loop_var=0; loop_var<resp->storedMsgCnt.totalCount; loop_var++) {
+                               g_variant_builder_add(&b, "i", resp->storedMsgCnt.indexList[loop_var]);
                        }
+                       list = g_variant_builder_end(&b);
 
                        telephony_sms_complete_get_msg_count(dbus_info->interface_object, dbus_info->invocation,
                                resp->result,
                                resp->storedMsgCnt.totalCount,
                                resp->storedMsgCnt.usedCount,
-                               msgCnt);
-
-                       if (msgCnt)
-                               g_free(msgCnt);
+                               list);
                        }
-
                        break;
 
                case TRESP_SMS_GET_SCA: {
                        const struct tresp_sms_get_sca *resp = data;
-                       gchar *sca = NULL;
+                       GVariant *sca = 0, *packet_sca = 0;
+                       GVariantBuilder b;
 
-                       dbg("receive TRESP_SMS_GET_SCA");
-                       dbg("resp->result = 0x%x", resp->result);
+                       dbg("receive TRESP_SMS_GET_SCA (result:[0x%x])", resp->result);
+                       g_variant_builder_init (&b, G_VARIANT_TYPE("ay"));
 
-                       sca = g_base64_encode((const guchar *)&(resp->scaAddress.diallingNum[0]), SMS_SMSP_ADDRESS_LEN + 1);
-                       if (sca == NULL) {
-                               dbg("g_base64_encode: Failed to Enocde scaAddress.diallingNum");
-                               sca = "";
+                       for( i=0; i<SMS_SMSP_ADDRESS_LEN + 1; i++) {
+                               g_variant_builder_add(&b, "y", resp->scaAddress.diallingNum[i] );
                        }
-                       
+                       sca = g_variant_builder_end(&b);
+
+                       packet_sca = g_variant_new("v", sca);
+
                        telephony_sms_complete_get_sca(dbus_info->interface_object, dbus_info->invocation,
                                resp->result,
                                resp->scaAddress.typeOfNum,
                                resp->scaAddress.numPlanId,
                                resp->scaAddress.dialNumLen,
-                               sca);
-
-                       if (sca)
-                               g_free(sca);
-
+                               packet_sca);
                        }
                        break;
 
                case TRESP_SMS_SET_SCA: {
                        const struct tresp_sms_set_sca *resp = data;
 
-                       dbg("receive TRESP_SMS_SET_SCA");
-                       dbg("resp->result = 0x%x", resp->result);
-
+                       dbg("receive TRESP_SMS_SET_SCA (result:[0x%x])", resp->result);
                        telephony_sms_complete_set_sca(dbus_info->interface_object, dbus_info->invocation,
                                resp->result);
 
@@ -1032,9 +1188,7 @@ gboolean dbus_plugin_sms_response(struct custom_data *ctx, UserRequest *ur, stru
                        GVariant *result = NULL;
                        GVariantBuilder b;
 
-                       dbg("receive TRESP_SMS_GET_CB_CONFIG");
-                       dbg("resp->result = 0x%x", resp->result);
-
+                       dbg("receive TRESP_SMS_GET_CB_CONFIG (result:[0x%x])", resp->result);
                        g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
 
                        for (i = 0; i < resp->cbConfig.msgIdRangeCount; i++) {
@@ -1045,17 +1199,17 @@ gboolean dbus_plugin_sms_response(struct custom_data *ctx, UserRequest *ur, stru
                                        g_variant_builder_add(&b, "{sv}", "ToMsgId", g_variant_new_uint16(resp->cbConfig.msgIDs[i].net3gpp.toMsgId));
                                } else if( resp->cbConfig.net3gppType == SMS_NETTYPE_3GPP2) {
                                        g_variant_builder_add(&b, "{sv}", "CBCategory", g_variant_new_uint16(resp->cbConfig.msgIDs[i].net3gpp2.cbCategory));
-                                       g_variant_builder_add(&b, "{sv}", "CBLanguage", g_variant_new_uint16(resp->cbConfig.msgIDs[i].net3gpp2.cbLanguage));                            
+                                       g_variant_builder_add(&b, "{sv}", "CBLanguage", g_variant_new_uint16(resp->cbConfig.msgIDs[i].net3gpp2.cbLanguage));
                                } else {
                                        dbg("Unknown 3gpp type");
                                        return FALSE;
                                }
-                       
+
                                g_variant_builder_add(&b, "{sv}", "Selected", g_variant_new_byte(resp->cbConfig.msgIDs[i].net3gpp.selected));
-                       
+
                                g_variant_builder_close(&b);
                        }
-                       
+
                        result = g_variant_builder_end(&b);
 
                        telephony_sms_complete_get_cb_config(dbus_info->interface_object, dbus_info->invocation,
@@ -1071,9 +1225,7 @@ gboolean dbus_plugin_sms_response(struct custom_data *ctx, UserRequest *ur, stru
                case TRESP_SMS_SET_CB_CONFIG: {
                        const struct tresp_sms_set_cb_config *resp = data;
 
-                       dbg("receive TRESP_SMS_SET_CB_CONFIG");
-                       dbg("resp->result = 0x%x", resp->result);
-
+                       dbg("receive TRESP_SMS_SET_CB_CONFIG (result:[0x%x])", resp->result);
                        telephony_sms_complete_set_cb_config(dbus_info->interface_object, dbus_info->invocation,
                                resp->result);
 
@@ -1083,9 +1235,7 @@ gboolean dbus_plugin_sms_response(struct custom_data *ctx, UserRequest *ur, stru
                case TRESP_SMS_SET_MEM_STATUS: {
                        const struct tresp_sms_set_mem_status *resp = data;
 
-                       dbg("receive TRESP_SMS_SET_MEM_STATUS");
-                       dbg("resp->result = 0x%x", resp->result);
-
+                       dbg("receive TRESP_SMS_SET_MEM_STATUS (result:[0x%x])", resp->result);
                        telephony_sms_complete_set_mem_status(dbus_info->interface_object, dbus_info->invocation,
                                resp->result);
 
@@ -1094,9 +1244,7 @@ gboolean dbus_plugin_sms_response(struct custom_data *ctx, UserRequest *ur, stru
                case TRESP_SMS_GET_PREF_BEARER: {
                        const struct tresp_sms_get_pref_bearer *resp = data;
 
-                       dbg("receive TRESP_SMS_GET_PREF_BEARER");
-                       dbg("resp->result = 0x%x", resp->result);
-
+                       dbg("receive TRESP_SMS_GET_PREF_BEARER (result:[0x%x])", resp->result);
                        telephony_sms_complete_get_pref_bearer(dbus_info->interface_object, dbus_info->invocation,
                                resp->result);
 
@@ -1106,9 +1254,7 @@ gboolean dbus_plugin_sms_response(struct custom_data *ctx, UserRequest *ur, stru
                case TRESP_SMS_SET_PREF_BEARER: {
                        const struct tresp_sms_set_pref_bearer *resp = data;
 
-                       dbg("receive TRESP_SMS_SET_PREF_BEARER");
-                       dbg("resp->result = 0x%x", resp->result);
-
+                       dbg("receive TRESP_SMS_SET_PREF_BEARER (result:[0x%x])", resp->result);
                        telephony_sms_complete_set_pref_bearer(dbus_info->interface_object, dbus_info->invocation,
                                resp->result);
 
@@ -1118,9 +1264,7 @@ gboolean dbus_plugin_sms_response(struct custom_data *ctx, UserRequest *ur, stru
                case TRESP_SMS_SET_DELIVERY_REPORT: {
                        const struct tresp_sms_set_delivery_report *resp = data;
 
-                       dbg("receive TRESP_SMS_SET_DELIVERY_REPORT");
-                       dbg("resp->result = 0x%x", resp->result);
-
+                       dbg("receive TRESP_SMS_SET_DELIVERY_REPORT (result:[0x%x])", resp->result);
                        telephony_sms_complete_set_delivery_report(dbus_info->interface_object, dbus_info->invocation,
                                resp->result);
 
@@ -1130,9 +1274,7 @@ gboolean dbus_plugin_sms_response(struct custom_data *ctx, UserRequest *ur, stru
                case TRESP_SMS_SET_MSG_STATUS: {
                        const struct tresp_sms_set_mem_status *resp = data;
 
-                       dbg("receive TRESP_SMS_SET_MSG_STATUS");
-                       dbg("resp->result = 0x%x", resp->result);
-
+                       dbg("receive TRESP_SMS_SET_MSG_STATUS (result:[0x%x])", resp->result);
                        telephony_sms_complete_set_msg_status(dbus_info->interface_object, dbus_info->invocation,
                                resp->result);
 
@@ -1141,68 +1283,59 @@ gboolean dbus_plugin_sms_response(struct custom_data *ctx, UserRequest *ur, stru
 
                case TRESP_SMS_GET_PARAMS: {
                        const struct tresp_sms_get_params *resp = data;
-                       gchar *alphaId = NULL;
-                       gchar *destDialNum = NULL;
-                       gchar *scaDialNum = NULL;
-
-                       dbg("receive TRESP_SMS_GET_PARAMS");
-                       dbg("resp->result = 0x%x", resp->result);
+                       GVariant *alphaId = 0, *packet_alphaId = 0;
+                       GVariant *destDialNum = 0, *packet_destDialNum = 0;
+                       GVariant *scaDialNum = 0, *packet_scaDialNum = 0;
+                       GVariantBuilder b;
 
-                       alphaId = g_base64_encode((const guchar *)&(resp->paramsInfo.szAlphaId[0]), SMS_SMSP_ALPHA_ID_LEN_MAX + 1);
-                       if (alphaId == NULL) {
-                               dbg("g_base64_encode: Failed to Enocde paramsInfo.szAlphaId");
-                               alphaId = "";
+                       dbg("receive TRESP_SMS_GET_PARAMS (result:[0x%x])", resp->result);
+                       g_variant_builder_init(&b, G_VARIANT_TYPE("ay"));
+                       for( i=0; i<SMS_SMSP_ALPHA_ID_LEN_MAX + 1; i++) {
+                               g_variant_builder_add(&b, "y", resp->paramsInfo.szAlphaId[i] );
                        }
+                       alphaId = g_variant_builder_end(&b);
 
-                       destDialNum = g_base64_encode((const guchar *)&(resp->paramsInfo.tpDestAddr.diallingNum[0]), SMS_SMSP_ADDRESS_LEN + 1);
-                       if (alphaId == NULL) {
-                               dbg("g_base64_encode: Failed to Enocde paramsInfo.tpDestAddr.diallingNum");
-                               alphaId = "";
+                       g_variant_builder_init(&b, G_VARIANT_TYPE("ay"));
+                       for( i=0; i<SMS_SMSP_ADDRESS_LEN + 1; i++) {
+                               g_variant_builder_add(&b, "y", resp->paramsInfo.tpDestAddr.diallingNum[i] );
                        }
+                       destDialNum = g_variant_builder_end(&b);
 
-                       scaDialNum = g_base64_encode((const guchar *)&(resp->paramsInfo.tpSvcCntrAddr.diallingNum[0]), SMS_SMSP_ADDRESS_LEN + 1);
-                       if (alphaId == NULL) {
-                               dbg("g_base64_encode: Failed to Enocde paramsInfo.tpSvcCntrAddr.diallingNum");
-                               alphaId = "";
+                       g_variant_builder_init(&b, G_VARIANT_TYPE("ay"));
+                       for( i=0; i<SMS_SMSP_ADDRESS_LEN + 1; i++) {
+                               g_variant_builder_add(&b, "y", resp->paramsInfo.tpSvcCntrAddr.diallingNum[i] );
                        }
+                       scaDialNum = g_variant_builder_end(&b);
+
+                       packet_alphaId = g_variant_new("v", alphaId);
+                       packet_destDialNum = g_variant_new("v", destDialNum);
+                       packet_scaDialNum = g_variant_new("v", scaDialNum);
 
                        telephony_sms_complete_get_sms_params(dbus_info->interface_object, dbus_info->invocation,
                                resp->result,
                                resp->paramsInfo.recordIndex,
                                resp->paramsInfo.recordLen,
                                resp->paramsInfo.alphaIdLen,
-                               alphaId,
+                               packet_alphaId,
                                resp->paramsInfo.paramIndicator,
                                resp->paramsInfo.tpDestAddr.dialNumLen,
                                resp->paramsInfo.tpDestAddr.typeOfNum,
                                resp->paramsInfo.tpDestAddr.numPlanId,
-                               destDialNum,
+                               packet_destDialNum,
                                resp->paramsInfo.tpSvcCntrAddr.dialNumLen,
                                resp->paramsInfo.tpSvcCntrAddr.typeOfNum,
                                resp->paramsInfo.tpSvcCntrAddr.numPlanId,
-                               scaDialNum,
+                               packet_scaDialNum,
                                resp->paramsInfo.tpProtocolId,
                                resp->paramsInfo.tpDataCodingScheme,
                                resp->paramsInfo.tpValidityPeriod);
-
-                       if(alphaId)
-                               g_free(alphaId);
-
-                       if(destDialNum)
-                               g_free(destDialNum);
-
-                       if(scaDialNum)
-                               g_free(scaDialNum);
-                       
                        }
                        break;
 
                case TRESP_SMS_SET_PARAMS:{
                        const struct tresp_sms_set_params *resp = data;
 
-                       dbg("receive TRESP_SMS_SET_PARAMS");
-                       dbg("resp->result = 0x%x", resp->result);
-
+                       dbg("receive TRESP_SMS_SET_PARAMS (result:[0x%x])", resp->result);
                        telephony_sms_complete_set_sms_params(dbus_info->interface_object, dbus_info->invocation,
                                resp->result);
 
@@ -1212,9 +1345,7 @@ gboolean dbus_plugin_sms_response(struct custom_data *ctx, UserRequest *ur, stru
                case TRESP_SMS_GET_PARAMCNT: {
                        const struct tresp_sms_get_paramcnt *resp = data;
 
-                       dbg("receive TRESP_SMS_GET_PARAMCNT");
-                       dbg("resp->result = 0x%x", resp->result);
-
+                       dbg("receive TRESP_SMS_GET_PARAMCNT (result:[0x%x])", resp->result);
                        telephony_sms_complete_get_sms_param_cnt(dbus_info->interface_object, dbus_info->invocation,
                                resp->result,
                                resp->recordCount);
@@ -1229,297 +1360,118 @@ gboolean dbus_plugin_sms_response(struct custom_data *ctx, UserRequest *ur, stru
        return TRUE;
 }
 
-gboolean dbus_plugin_sms_notification(struct custom_data *ctx, const char *plugin_name, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data)
+gboolean dbus_plugin_sms_notification(struct custom_data *ctx, CoreObject *source, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data)
 {
        TelephonySms *sms;
+       const char *cp_name;
 
-       if (!object)
-       {
-               dbg("object is NULL");
-               return FALSE;
-       }
+       cp_name = tcore_server_get_cp_name_by_plugin(tcore_object_ref_plugin(source));
 
        sms = telephony_object_peek_sms(TELEPHONY_OBJECT(object));
-       dbg("sms = %p", sms);
-
-       dbg("[tcore_SMS]notification !!! (command = 0x%x, data_len = %d)", command, data_len);
 
        switch (command) {
                case TNOTI_SMS_INCOM_MSG: {
                        const struct tnoti_sms_umts_msg *noti = data;
 
-                       gchar *sca = NULL;
-                       gchar *tpdu = NULL;                     
+                       GVariant *sca = 0, *packet_sca = 0;
+                       GVariant *tpdu = 0, *packet_tpdu = 0;
+                       GVariantBuilder b;
+                       unsigned int i;
 
-                       sca = g_base64_encode((const guchar *)&(noti->msgInfo.sca[0]), SMS_SMSP_ADDRESS_LEN);
-                       if (sca == NULL) {
-                               dbg("g_base64_encode: Failed to Enocde msgInfo.sca");
-                               sca = "";
-                       }
+                       info("[DBUSINFO][%s] SMS_INCOM_MSG (len[%d])", cp_name, data_len);
 
-                       tpdu = g_base64_encode((const guchar *)&(noti->msgInfo.tpduData[0]), SMS_SMDATA_SIZE_MAX + 1);
-                       if (tpdu == NULL) {
-                               dbg("g_base64_encode: Failed to Enocde msgInfo.tpduData");
-                               tpdu = "";
+                       g_variant_builder_init (&b, G_VARIANT_TYPE("ay"));
+                       for( i=0; i<SMS_SMSP_ADDRESS_LEN; i++) {
+                               g_variant_builder_add(&b, "y", noti->msgInfo.sca[i] );
                        }
-                       
-                       telephony_sms_emit_incomming_msg(sms,
-                               sca,
-                               noti->msgInfo.msgLength,
-                               tpdu);
+                       sca = g_variant_builder_end(&b);
 
-                       if(sca)
-                               g_free(sca);
+                       g_variant_builder_init (&b, G_VARIANT_TYPE("ay"));
+                       for( i=0; i<SMS_SMDATA_SIZE_MAX + 1; i++) {
+                               g_variant_builder_add(&b, "y", noti->msgInfo.tpduData[i] );
+                       }
+                       tpdu = g_variant_builder_end(&b);
 
-                       if(tpdu)
-                               g_free(tpdu);
+                       packet_sca = g_variant_new("v", sca);
+                       packet_tpdu = g_variant_new("v", tpdu);
 
+                       telephony_sms_emit_incomming_msg(sms,
+                               packet_sca,
+                               noti->msgInfo.msgLength,
+                               packet_tpdu);
                        }
                        break;
 
                case TNOTI_SMS_CB_INCOM_MSG: {
                        const struct tnoti_sms_cellBroadcast_msg *noti = data;
-                       gchar *msgData = NULL;
-                       
-                       msgData = g_base64_encode((const guchar *)&(noti->cbMsg.msgData[0]), SMS_SMSP_ADDRESS_LEN);
-                       if (msgData == NULL) {
-                               dbg("g_base64_encode: Failed to Enocde cbMsg.msgData");
-                               msgData = "";
+                       GVariant *msgData = 0, *packet_msgData = 0;
+                       GVariantBuilder b;
+                       int i;
+
+                       info("[DBUSINFO][%s] SMS_CB_INCOM_MSG (len[%d])", cp_name, data_len);
+
+                       g_variant_builder_init (&b, G_VARIANT_TYPE("ay"));
+
+                       for( i=0; i < (int)noti->cbMsg.length + 1; i++) {
+                               g_variant_builder_add(&b, "y", noti->cbMsg.msgData[i] );
                        }
+                       msgData = g_variant_builder_end(&b);
+                       packet_msgData = g_variant_new("v", msgData);
 
                        telephony_sms_emit_incomming_cb_msg(sms,
                                noti->cbMsg.cbMsgType,
                                noti->cbMsg.length,
-                               msgData);
-
-                       if(msgData)
-                               g_free(msgData);
-
+                               packet_msgData);
                        }
                        break;
 
                case TNOTI_SMS_ETWS_INCOM_MSG: {
                        const struct tnoti_sms_etws_msg *noti = data;
-                       gchar *msgData = NULL;
-                       
-                       msgData = g_base64_encode((const guchar *)&(noti->etwsMsg.msgData[0]), SMS_SMSP_ADDRESS_LEN);
-                       if (msgData == NULL) {
-                               dbg("g_base64_encode: Failed to Enocde etwsMsg.msgData");
-                               msgData = "";
+                       GVariant *msgData = 0, *packet_msgData = 0;
+                       GVariantBuilder b;
+                       unsigned int i;
+
+                       info("[DBUSINFO][%s] ETWS_INCOM_MSG (len[%d])", cp_name, data_len);
+
+                       g_variant_builder_init (&b, G_VARIANT_TYPE("ay"));
+
+                       for( i=0; i<SMS_ETWS_SIZE_MAX + 1; i++) {
+                               g_variant_builder_add(&b, "y", noti->etwsMsg.msgData[i] );
                        }
+                       msgData = g_variant_builder_end(&b);
+                       packet_msgData = g_variant_new("v", msgData);
 
                        telephony_sms_emit_incomming_etws_msg(sms,
                                noti->etwsMsg.etwsMsgType,
                                noti->etwsMsg.length,
-                               msgData);
-
-                       if(msgData)
-                               g_free(msgData);
+                               packet_msgData);
                        }
                        break;
 
                case TNOTI_SMS_INCOM_EX_MSG: {
-#if 0
-                       noti->cdmaMsg.ParamMask), SIPC_MARSHAL_DATA_INT_TYPE);
-                       noti->cdmaMsg.MsgType), SIPC_MARSHAL_DATA_INT_TYPE);
-
-                       switch(noti->cdmaMsg.MsgType)
-                       {
-                               case SMS_MESSAGETYPE_DELIVER:
-                                       /* Origination address */
-                                       noti->cdmaMsg.MsgData.inDeliver.OrigAddr.Digit), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.OrigAddr.NumberMode), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.OrigAddr.NumberType), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.OrigAddr.NumberPlan), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.OrigAddr.szAddrLength), SIPC_MARSHAL_DATA_CHAR_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.OrigAddr.szAddress[0]), SIPC_MARSHAL_DATA_STRING_TYPE);
-
-                                       /* Origination subaddress */
-                                       noti->cdmaMsg.MsgData.inDeliver.OrigSubAddr.SubType), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.OrigSubAddr.Odd), SIPC_MARSHAL_DATA_CHAR_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.OrigSubAddr.szAddrLength), SIPC_MARSHAL_DATA_CHAR_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.OrigSubAddr.szAddress[0]), SIPC_MARSHAL_DATA_STRING_TYPE);
-
-                                       noti->cdmaMsg.MsgData.inDeliver.TeleService), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.bBearerReplySeqRequest), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.ReplySeqNumber), SIPC_MARSHAL_DATA_CHAR_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.MsgId), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.MsgEncoding), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.MsgLength), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.szData[0]), SIPC_MARSHAL_DATA_STRING_TYPE);
-
-                                       /* Message center time stamp */
-                                       void *)&(noti->cdmaMsg.MsgData.inDeliver.MessageCenterTimeStamp.year), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.MessageCenterTimeStamp.month), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.MessageCenterTimeStamp.day), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.MessageCenterTimeStamp.hours), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.MessageCenterTimeStamp.minutes), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.MessageCenterTimeStamp.seconds), SIPC_MARSHAL_DATA_INT_TYPE);
-
-                                       /* Validity period - Absolute */
-                                       noti->cdmaMsg.MsgData.inDeliver.ValidityPeriodAbs.year), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.ValidityPeriodAbs.month), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.ValidityPeriodAbs.day), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.ValidityPeriodAbs.hours), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.ValidityPeriodAbs.minutes), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.ValidityPeriodAbs.seconds), SIPC_MARSHAL_DATA_INT_TYPE);
-
-                                       noti->cdmaMsg.MsgData.inDeliver.ValidityPeriodRel), SIPC_MARSHAL_DATA_CHAR_TYPE);
-
-                                       /* Deferred delivery time - Absolute (not supported) */
-                                       noti->cdmaMsg.MsgData.inDeliver.DeferredDelTimeAbs.year), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.DeferredDelTimeAbs.month), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.DeferredDelTimeAbs.day), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.DeferredDelTimeAbs.hours), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.DeferredDelTimeAbs.minutes), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.DeferredDelTimeAbs.seconds), SIPC_MARSHAL_DATA_INT_TYPE);
-
-                                       /* Deferred delivery time - Relative (not supported) */
-                                       noti->cdmaMsg.MsgData.inDeliver.DeferredDelTimeRel), SIPC_MARSHAL_DATA_CHAR_TYPE);
-
-                                       noti->cdmaMsg.MsgData.inDeliver.Priority), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.Privacy), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.NumMsg), SIPC_MARSHAL_DATA_CHAR_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.bUserAckRequest), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.bDeliveryAckRequest), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.AlertPriority), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.MsgLang), SIPC_MARSHAL_DATA_INT_TYPE);
-
-                                       /* Callback number address */
-                                       noti->cdmaMsg.MsgData.inDeliver.CallBackNumer.Digit), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.CallBackNumer.NumberMode), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.CallBackNumer.NumberType), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.CallBackNumer.NumberPlan), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.CallBackNumer.szAddrLength), SIPC_MARSHAL_DATA_CHAR_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliver.CallBackNumer.szAddress[0]), SIPC_MARSHAL_DATA_STRING_TYPE);
-
-                                       noti->cdmaMsg.MsgData.inDeliver.Display), SIPC_MARSHAL_DATA_INT_TYPE);
-
-                                       break;
-
-                               case SMS_MESSAGETYPE_DELIVERY_ACK:
-                                       /* Origination address */
-                                       noti->cdmaMsg.MsgData.inAck.OrigAddr.Digit), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inAck.OrigAddr.NumberMode), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inAck.OrigAddr.NumberType), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inAck.OrigAddr.NumberPlan), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inAck.OrigAddr.szAddrLength), SIPC_MARSHAL_DATA_CHAR_TYPE);
-                                       noti->cdmaMsg.MsgData.inAck.OrigAddr.szAddress[0]), SIPC_MARSHAL_DATA_STRING_TYPE);
-
-                                       /* Origination subaddress */
-                                       noti->cdmaMsg.MsgData.inAck.OrigSubAddr.SubType), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inAck.OrigSubAddr.Odd), SIPC_MARSHAL_DATA_CHAR_TYPE);
-                                       noti->cdmaMsg.MsgData.inAck.OrigSubAddr.szAddrLength), SIPC_MARSHAL_DATA_CHAR_TYPE);
-                                       noti->cdmaMsg.MsgData.inAck.OrigSubAddr.szAddress), SIPC_MARSHAL_DATA_CHAR_TYPE);
-
-                                       noti->cdmaMsg.MsgData.inAck.TeleService), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inAck.bBearerReplySeqRequest), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inAck.ReplySeqNumber), SIPC_MARSHAL_DATA_CHAR_TYPE);
-                                       noti->cdmaMsg.MsgData.inAck.MsgId), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inAck.MsgEncoding), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inAck.MsgLength), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inAck.szData[0]), SIPC_MARSHAL_DATA_STRING_TYPE);
-
-                                       noti->cdmaMsg.MsgData.inAck.UserResponseCode), SIPC_MARSHAL_DATA_CHAR_TYPE);
-
-                                       /* Message center time stamp */
-                                       noti->cdmaMsg.MsgData.inAck.MessageCenterTimeStamp.year), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inAck.MessageCenterTimeStamp.month), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inAck.MessageCenterTimeStamp.day), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inAck.MessageCenterTimeStamp.hours), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inAck.MessageCenterTimeStamp.minutes), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inAck.MessageCenterTimeStamp.seconds), SIPC_MARSHAL_DATA_INT_TYPE);
-
-                                       break;
-
-                               case SMS_MESSAGETYPE_USER_ACK:
-                                       /* Origination address */
-                                       noti->cdmaMsg.MsgData.inDeliverAck.OrigAddr.Digit), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliverAck.OrigAddr.NumberMode), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliverAck.OrigAddr.NumberType), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliverAck.OrigAddr.NumberPlan), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliverAck.OrigAddr.szAddrLength), SIPC_MARSHAL_DATA_CHAR_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliverAck.OrigAddr.szAddress[0]), SIPC_MARSHAL_DATA_STRING_TYPE);
-
-                                       /* Origination subaddress */
-                                       noti->cdmaMsg.MsgData.inDeliverAck.OrigSubAddr.SubType), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliverAck.OrigSubAddr.Odd), SIPC_MARSHAL_DATA_CHAR_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliverAck.OrigSubAddr.szAddrLength), SIPC_MARSHAL_DATA_CHAR_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliverAck.OrigSubAddr.szAddress), SIPC_MARSHAL_DATA_CHAR_TYPE);
-
-                                       noti->cdmaMsg.MsgData.inDeliverAck.TeleService), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliverAck.bBearerReplySeqRequest), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliverAck.ReplySeqNumber), SIPC_MARSHAL_DATA_CHAR_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliverAck.MsgId), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliverAck.MsgEncoding), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliverAck.MsgLength), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliverAck.szData[0]), SIPC_MARSHAL_DATA_STRING_TYPE);
-
-                                       /* Message center time stamp */
-                                       noti->cdmaMsg.MsgData.inDeliverAck.MessageCenterTimeStamp.year), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliverAck.MessageCenterTimeStamp.month), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliverAck.MessageCenterTimeStamp.day), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliverAck.MessageCenterTimeStamp.hours), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliverAck.MessageCenterTimeStamp.minutes), SIPC_MARSHAL_DATA_INT_TYPE);
-                                       noti->cdmaMsg.MsgData.inDeliverAck.MessageCenterTimeStamp.seconds), SIPC_MARSHAL_DATA_INT_TYPE);
-
-                                       break;
-                               default:
-                                       break;
-                       }
-#endif
+                       info("[DBUSINFO][%s] SMS_INCOM_EX_MSG (len[%d])", cp_name, data_len);
                        }
                        break;
 
                case TNOTI_SMS_CB_INCOM_EX_MSG: {
-#if 0
-                       noti->cdmaMsg.MsgData.inBc.ServiceCategory), SIPC_MARSHAL_DATA_INT_TYPE);
-
-                       noti->cdmaMsg.MsgData.inBc.MsgId), SIPC_MARSHAL_DATA_INT_TYPE);
-                       noti->cdmaMsg.MsgData.inBc.bBearerReplySeqRequest), SIPC_MARSHAL_DATA_INT_TYPE);
-                       noti->cdmaMsg.MsgData.inBc.ReplySeqNumber), SIPC_MARSHAL_DATA_CHAR_TYPE);
-                       noti->cdmaMsg.MsgData.inBc.MsgEncoding), SIPC_MARSHAL_DATA_INT_TYPE);
-                       noti->cdmaMsg.MsgData.inBc.MsgLength), SIPC_MARSHAL_DATA_INT_TYPE);
-                       noti->cdmaMsg.MsgData.inBc.szData[0]), SIPC_MARSHAL_DATA_STRING_TYPE);
-
-                       /* Message center time stamp */
-                       noti->cdmaMsg.MsgData.inBc.MessageCenterTimeStamp.year), SIPC_MARSHAL_DATA_INT_TYPE);
-                       noti->cdmaMsg.MsgData.inBc.MessageCenterTimeStamp.month), SIPC_MARSHAL_DATA_INT_TYPE);
-                       noti->cdmaMsg.MsgData.inBc.MessageCenterTimeStamp.day), SIPC_MARSHAL_DATA_INT_TYPE);
-                       noti->cdmaMsg.MsgData.inBc.MessageCenterTimeStamp.hours), SIPC_MARSHAL_DATA_INT_TYPE);
-                       noti->cdmaMsg.MsgData.inBc.MessageCenterTimeStamp.minutes), SIPC_MARSHAL_DATA_INT_TYPE);
-                       noti->cdmaMsg.MsgData.inBc.MessageCenterTimeStamp.seconds), SIPC_MARSHAL_DATA_INT_TYPE);
-
-                       /* Validity period - Absolute */
-                       noti->cdmaMsg.MsgData.inBc.ValidityPeriodAbs.year), SIPC_MARSHAL_DATA_INT_TYPE);
-                       noti->cdmaMsg.MsgData.inBc.ValidityPeriodAbs.month), SIPC_MARSHAL_DATA_INT_TYPE);
-                       noti->cdmaMsg.MsgData.inBc.ValidityPeriodAbs.day), SIPC_MARSHAL_DATA_INT_TYPE);
-                       noti->cdmaMsg.MsgData.inBc.ValidityPeriodAbs.hours), SIPC_MARSHAL_DATA_INT_TYPE);
-                       noti->cdmaMsg.MsgData.inBc.ValidityPeriodAbs.minutes), SIPC_MARSHAL_DATA_INT_TYPE);
-                       noti->cdmaMsg.MsgData.inBc.ValidityPeriodAbs.seconds), SIPC_MARSHAL_DATA_INT_TYPE);
-
-                       noti->cdmaMsg.MsgData.inBc.ValidityPeriodRel), SIPC_MARSHAL_DATA_CHAR_TYPE);
-
-                       noti->cdmaMsg.MsgData.inBc.Priority), SIPC_MARSHAL_DATA_INT_TYPE);
-                       noti->cdmaMsg.MsgData.inBc.AlertPriority), SIPC_MARSHAL_DATA_INT_TYPE);
-                       noti->cdmaMsg.MsgData.inBc.MsgLang), SIPC_MARSHAL_DATA_INT_TYPE);
-                       noti->cdmaMsg.MsgData.inBc.Display), SIPC_MARSHAL_DATA_INT_TYPE);
-
-#endif
+                       info("[DBUSINFO][%s] CB_INCOM_EX_MSG (len[%d])", cp_name, data_len);
                        }
                        break;
 
                case TNOTI_SMS_MEMORY_STATUS: {
                        const struct tnoti_sms_memory_status *noti = data;
-
+                       info("[DBUSINFO][%s] SMS_MEMORY_STATUS (%d)", cp_name, noti->status);
                        telephony_sms_emit_memory_status(sms, noti->status);
-
                        }
                        break;
 
                case TNOTI_SMS_DEVICE_READY: {
                        const struct tnoti_sms_ready_status *noti = data;
-
+                       info("[DBUSINFO][%s] SMS_DEVICE_READY (%d)", cp_name, noti->status);
+#ifdef ENABLE_KPI_LOGS
+                       if (noti->status == TRUE)
+                               TIME_CHECK("[%s] SMS Service Ready", cp_name);
+#endif
                        telephony_sms_emit_sms_ready(sms, noti->status);
 
                        }
old mode 100644 (file)
new mode 100755 (executable)
index 6db03cc..5fb624f
--- a/src/ss.c
+++ b/src/ss.c
@@ -1,3 +1,23 @@
+/*
+ * tel-plugin-dbus-tapi
+ *
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Ja-young Gu <jygu@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include <stdio.h>
 #include <string.h>
 #include <pthread.h>
@@ -5,9 +25,11 @@
 #include <stdlib.h>
 #include <time.h>
 #include <glib.h>
-#include <glib-object.h>
 #include <gio/gio.h>
 
+#include <appsvc.h>
+#include <bundle.h>
+
 #include <tcore.h>
 #include <server.h>
 #include <plugin.h>
 #include "generated-code.h"
 #include "common.h"
 
+struct ciss_data_type {
+       int status;
+       int dcs;
+       int length;
+       char data[MAX_SS_USSD_LEN];
+};
+
+struct ciss_information {
+       int err;
+       int ss_type;
+};
+
+static void _launch_ciss_information(const struct tnoti_ss_information *info)
+{
+       gchar *encoded_data;
+       struct ciss_information ciss_inform;
+
+       bundle *kb = NULL;
+
+       memset(&ciss_inform, 0, sizeof(struct ciss_information));
+       ciss_inform.err = info->err;
+       ciss_inform.ss_type = info->ss_type;
+
+       dbg("Explicit launch ciss application by appsvc");
+
+       kb = bundle_create();
+       if (!kb) {
+               warn("bundle_create() failed");
+               return;
+       }
+
+       appsvc_set_pkgname(kb, "org.tizen.ciss");
+
+       encoded_data = g_base64_encode((guchar *)&ciss_inform, sizeof(struct ciss_information));
+
+       appsvc_add_data(kb, "CISS_LAUNCHING_MODE", "RESP");
+       appsvc_add_data(kb, "KEY_EVENT_TYPE", "200");
+       appsvc_add_data(kb, "KEY_ENCODED_DATA", encoded_data);
+
+       dbg("ciss appsvc run");
+       appsvc_run_service(kb, 0, NULL, NULL);
+
+       bundle_free(kb);
+       g_free(encoded_data);
+
+       return;
+}
+
+
+static void _launch_ciss(const struct tnoti_ss_ussd *ussd, enum dbus_tapi_sim_slot_id slot_id)
+{
+       gchar *encoded_data;
+       struct ciss_data_type ciss_data;
+       char slot_info[2] = {0,};
+
+       bundle *kb = NULL;
+
+       memset(&ciss_data, 0, sizeof(struct ciss_data_type));
+       ciss_data.status = ussd->dcs;
+       ciss_data.status = ussd->status;
+       ciss_data.length = ussd->len;
+       memcpy(ciss_data.data, ussd->str, ciss_data.length);
 
+       snprintf(slot_info, 2, "%d", slot_id);
+       dbg("slot_id : [%s]", slot_info);
+
+       dbg("Explicit launch ciss application by appsvc");
+
+       kb = bundle_create();
+       if (!kb) {
+               warn("bundle_create() failed");
+               return;
+       }
+
+
+       appsvc_set_pkgname(kb, "org.tizen.ciss");
+
+       encoded_data = g_base64_encode((guchar *)&ciss_data, sizeof(struct ciss_data_type));
+
+       appsvc_add_data(kb, "CISS_LAUNCHING_MODE", "RESP");
+       appsvc_add_data(kb, "KEY_EVENT_TYPE", "100");
+       appsvc_add_data(kb, "KEY_ENCODED_DATA", encoded_data);
+       appsvc_add_data(kb, "KEY_SLOT_ID", slot_info);
+
+       dbg("ciss appsvc run");
+       appsvc_run_service(kb, 0, NULL, NULL);
+
+       bundle_free(kb);
+       g_free(encoded_data);
+
+       return;
+}
 
 static gboolean
 on_ss_activate_barring (TelephonySs *ss,
@@ -37,6 +150,7 @@ on_ss_activate_barring (TelephonySs *ss,
        struct treq_ss_barring req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       int ret = 0;
 
        memset(&req, 0, sizeof(struct treq_ss_barring));
 
@@ -55,7 +169,12 @@ on_ss_activate_barring (TelephonySs *ss,
 
        tcore_user_request_set_data(ur, sizeof(struct treq_ss_barring), &req);
        tcore_user_request_set_command(ur, TREQ_SS_BARRING_ACTIVATE);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -72,6 +191,7 @@ on_ss_deactivate_barring (TelephonySs *ss,
        struct treq_ss_barring req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       int ret = 0;
 
        memset(&req, 0, sizeof(struct treq_ss_barring));
 
@@ -89,7 +209,12 @@ on_ss_deactivate_barring (TelephonySs *ss,
 
        tcore_user_request_set_data(ur, sizeof(struct treq_ss_barring), &req);
        tcore_user_request_set_command(ur, TREQ_SS_BARRING_DEACTIVATE);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -106,6 +231,7 @@ on_ss_change_barring_password (TelephonySs *ss,
        struct treq_ss_barring_change_password req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       int ret = 0;
 
        memset(&req, 0, sizeof(struct treq_ss_barring_change_password));
 
@@ -115,20 +241,21 @@ on_ss_change_barring_password (TelephonySs *ss,
 
        memcpy(buf, barring_password, MAX_SS_BARRING_PASSWORD_LEN);
        buf[4] = 0;
-       dbg("req.password_old = [%s]", buf);
 
        memcpy(buf, barring_password_new, MAX_SS_BARRING_PASSWORD_LEN);
-       dbg("req.password_new = [%s]", buf);
-
 
        memcpy(buf, barring_password_confirm, MAX_SS_BARRING_PASSWORD_LEN);
-       dbg("req.password_confirm = [%s]", buf);
 
        ur = MAKE_UR(ctx, ss, invocation);
 
        tcore_user_request_set_data(ur, sizeof(struct treq_ss_barring_change_password), &req);
        tcore_user_request_set_command(ur, TREQ_SS_BARRING_CHANGE_PASSWORD);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -143,6 +270,7 @@ on_ss_get_barring_status (TelephonySs *ss,
        struct treq_ss_barring req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       int ret = 0;
 
        memset(&req, 0, sizeof(struct treq_ss_barring));
 
@@ -155,8 +283,12 @@ on_ss_get_barring_status (TelephonySs *ss,
 
        tcore_user_request_set_data(ur, sizeof(struct treq_ss_barring), &req);
        tcore_user_request_set_command(ur, TREQ_SS_BARRING_GET_STATUS);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
-
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -167,18 +299,35 @@ on_ss_register_forwarding (TelephonySs *ss,
                gint ss_class,
                gint forward_mode,
                gint forward_no_reply_time,
+               gint forward_ton,
+               gint forward_npi,
                const gchar *forward_number,
                gpointer user_data)
 {
        struct treq_ss_forwarding req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       int ret = 0;
+
+       if (!check_access_control (invocation, AC_SS, "w")) {
+               GVariant *result = 0;
+               GVariantBuilder b;
+
+               g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+               result = g_variant_builder_end(&b);
+
+               telephony_ss_complete_register_forwarding(ss, invocation, result, ret);
+
+               return TRUE;
+       }
 
        memset(&req, 0, sizeof(struct treq_ss_forwarding));
 
        req.class = ss_class;
        req.mode = forward_mode;
        req.time = forward_no_reply_time;
+       req.ton  = forward_ton;
+       req.npi  = forward_npi;
        snprintf(req.number, MAX_SS_FORWARDING_NUMBER_LEN, "%s", forward_number);
 
        dbg("class = %d, mode = %d, time = %d, number = %s",
@@ -188,7 +337,12 @@ on_ss_register_forwarding (TelephonySs *ss,
 
        tcore_user_request_set_data(ur, sizeof(struct treq_ss_forwarding), &req);
        tcore_user_request_set_command(ur, TREQ_SS_FORWARDING_REGISTER);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -199,18 +353,29 @@ on_ss_deregister_forwarding (TelephonySs *ss,
                gint ss_class,
                gint forward_mode,
                gint forward_no_reply_time,
+               gint forward_ton,
+               gint forward_npi,
                const gchar *forward_number,
                gpointer user_data)
 {
        struct treq_ss_forwarding req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       int ret = 0;
+
+       if (!check_access_control (invocation, AC_SS, "w")) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        memset(&req, 0, sizeof(struct treq_ss_forwarding));
 
        req.class = ss_class;
        req.mode = forward_mode;
        req.time = forward_no_reply_time;
+       req.ton = forward_ton;
+       req.npi = forward_npi;
        snprintf(req.number, MAX_SS_FORWARDING_NUMBER_LEN, "%s", forward_number);
 
        dbg("class = %d, mode = %d, time = %d, number = %s",
@@ -220,7 +385,12 @@ on_ss_deregister_forwarding (TelephonySs *ss,
 
        tcore_user_request_set_data(ur, sizeof(struct treq_ss_forwarding), &req);
        tcore_user_request_set_command(ur, TREQ_SS_FORWARDING_DEREGISTER);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -231,18 +401,35 @@ on_ss_activate_forwarding (TelephonySs *ss,
                gint ss_class,
                gint forward_mode,
                gint forward_no_reply_time,
+               gint forward_ton,
+               gint forward_npi,
                const gchar *forward_number,
                gpointer user_data)
 {
        struct treq_ss_forwarding req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       int ret = 0;
+
+       if (!check_access_control (invocation, AC_SS, "w")) {
+               GVariant *result = 0;
+               GVariantBuilder b;
+
+               g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+               result = g_variant_builder_end(&b);
+
+               telephony_ss_complete_activate_forwarding(ss, invocation, result, ret);
+
+               return TRUE;
+       }
 
        memset(&req, 0, sizeof(struct treq_ss_forwarding));
 
        req.class = ss_class;
        req.mode = forward_mode;
        req.time = forward_no_reply_time;
+       req.ton = forward_ton;
+       req.npi = forward_npi;
        snprintf(req.number, MAX_SS_FORWARDING_NUMBER_LEN, "%s", forward_number);
 
        dbg("class = %d, mode = %d, time = %d, number = %s",
@@ -252,7 +439,12 @@ on_ss_activate_forwarding (TelephonySs *ss,
 
        tcore_user_request_set_data(ur, sizeof(struct treq_ss_forwarding), &req);
        tcore_user_request_set_command(ur, TREQ_SS_FORWARDING_ACTIVATE);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -263,18 +455,35 @@ on_ss_deactivate_forwarding (TelephonySs *ss,
                gint ss_class,
                gint forward_mode,
                gint forward_no_reply_time,
+               gint forward_ton,
+               gint forward_npi,
                const gchar *forward_number,
                gpointer user_data)
 {
        struct treq_ss_forwarding req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       int ret = 0;
+
+       if (!check_access_control (invocation, AC_SS, "w")) {
+               GVariant *result = 0;
+               GVariantBuilder b;
+
+               g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+               result = g_variant_builder_end(&b);
+
+               telephony_ss_complete_deactivate_forwarding(ss, invocation, result, ret);
+
+               return TRUE;
+       }
 
        memset(&req, 0, sizeof(struct treq_ss_forwarding));
 
        req.class = ss_class;
        req.mode = forward_mode;
        req.time = forward_no_reply_time;
+       req.ton = forward_ton;
+       req.npi = forward_npi;
        snprintf(req.number, MAX_SS_FORWARDING_NUMBER_LEN, "%s", forward_number);
 
        dbg("class = %d, mode = %d, time = %d, number = %s",
@@ -284,7 +493,12 @@ on_ss_deactivate_forwarding (TelephonySs *ss,
 
        tcore_user_request_set_data(ur, sizeof(struct treq_ss_forwarding), &req);
        tcore_user_request_set_command(ur, TREQ_SS_FORWARDING_DEACTIVATE);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -299,6 +513,19 @@ on_ss_get_forwarding_status (TelephonySs *ss,
        struct treq_ss_forwarding req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       int ret = 0;
+
+       if (!check_access_control (invocation, AC_SS, "r")) {
+               GVariant *result = 0;
+               GVariantBuilder b;
+
+               g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+               result = g_variant_builder_end(&b);
+
+               telephony_ss_complete_get_forwarding_status(ss, invocation, result, ret);
+
+               return TRUE;
+       }
 
        memset(&req, 0, sizeof(struct treq_ss_forwarding));
 
@@ -312,7 +539,12 @@ on_ss_get_forwarding_status (TelephonySs *ss,
 
        tcore_user_request_set_data(ur, sizeof(struct treq_ss_forwarding), &req);
        tcore_user_request_set_command(ur, TREQ_SS_FORWARDING_GET_STATUS);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -326,6 +558,7 @@ on_ss_activate_waiting (TelephonySs *ss,
        struct treq_ss_waiting req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       int ret = 0;
 
        memset(&req, 0, sizeof(struct treq_ss_waiting));
 
@@ -337,7 +570,12 @@ on_ss_activate_waiting (TelephonySs *ss,
 
        tcore_user_request_set_data(ur, sizeof(struct treq_ss_waiting), &req);
        tcore_user_request_set_command(ur, TREQ_SS_WAITING_ACTIVATE);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -351,6 +589,7 @@ on_ss_deactivate_waiting (TelephonySs *ss,
        struct treq_ss_waiting req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       int ret = 0;
 
        memset(&req, 0, sizeof(struct treq_ss_waiting));
 
@@ -362,7 +601,12 @@ on_ss_deactivate_waiting (TelephonySs *ss,
 
        tcore_user_request_set_data(ur, sizeof(struct treq_ss_waiting), &req);
        tcore_user_request_set_command(ur, TREQ_SS_WAITING_DEACTIVATE);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -376,6 +620,7 @@ on_ss_get_waiting_status (TelephonySs *ss,
        struct treq_ss_waiting req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       int ret = 0;
 
        memset(&req, 0, sizeof(struct treq_ss_waiting));
 
@@ -387,12 +632,51 @@ on_ss_get_waiting_status (TelephonySs *ss,
 
        tcore_user_request_set_data(ur, sizeof(struct treq_ss_waiting), &req);
        tcore_user_request_set_command(ur, TREQ_SS_WAITING_GET_STATUS);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
 
 static gboolean
+on_ss_set_cli_status (TelephonySs *ss,
+               GDBusMethodInvocation *invocation,
+               gint cli_type,
+               gint cli_status,
+               gpointer user_data)
+{
+       struct treq_ss_set_cli req;
+       struct custom_data *ctx = user_data;
+       UserRequest *ur = NULL;
+       int ret = 0;
+
+       memset(&req, 0, sizeof(struct treq_ss_set_cli));
+
+       req.type = cli_type;
+       req.status = cli_status;
+
+       dbg("type = %d, status = %d", req.type, req.status);
+
+       ur = MAKE_UR(ctx, ss, invocation);
+
+       tcore_user_request_set_data(ur, sizeof(struct treq_ss_set_cli), &req);
+       tcore_user_request_set_command(ur, TREQ_SS_CLI_SET_STATUS);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+
+
+static gboolean
 on_ss_get_cli_status (TelephonySs *ss,
                GDBusMethodInvocation *invocation,
                gint cli_type,
@@ -401,6 +685,7 @@ on_ss_get_cli_status (TelephonySs *ss,
        struct treq_ss_cli req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       int ret = 0;
 
        memset(&req, 0, sizeof(struct treq_ss_cli));
 
@@ -412,7 +697,12 @@ on_ss_get_cli_status (TelephonySs *ss,
 
        tcore_user_request_set_data(ur, sizeof(struct treq_ss_cli), &req);
        tcore_user_request_set_command(ur, TREQ_SS_CLI_GET_STATUS);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -421,6 +711,7 @@ static gboolean
 on_ss_send_ussd (TelephonySs *ss,
                GDBusMethodInvocation *invocation,
                gint ussd_type,
+               gint ussd_dcs,
                gint ussd_len,
                const gchar *ussd_string,
                gpointer user_data)
@@ -428,19 +719,28 @@ on_ss_send_ussd (TelephonySs *ss,
        struct treq_ss_ussd req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
+       int ret = 0;
 
        memset(&req, 0, sizeof(struct treq_ss_ussd));
 
-       req.type = SS_USSD_TYPE_USER_INITIATED;
-       snprintf(req.str, MAX_SS_USSD_LEN, "%s", ussd_string);
+       req.type = ussd_type;
+       req.dcs = (unsigned char)ussd_dcs;
+       req.len = (unsigned short)ussd_len;
 
-       dbg("type = %d, string = %s", req.type, req.str);
+       snprintf((char*)req.str, MAX_SS_USSD_LEN, "%s", ussd_string);
+
+       dbg("[ check ] type = %d, dcs = %d, len = %d, string = %s", req.type, req.dcs, req.len, req.str);
 
        ur = MAKE_UR(ctx, ss, invocation);
 
        tcore_user_request_set_data(ur, sizeof(struct treq_ss_ussd), &req);
        tcore_user_request_set_command(ur, TREQ_SS_SEND_USSD);
-       tcore_communicator_dispatch_request(ctx->comm, ur);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
 
        return TRUE;
 }
@@ -514,6 +814,11 @@ gboolean dbus_plugin_setup_ss_interface(TelephonyObjectSkeleton *object, struct
                        ctx);
 
        g_signal_connect (ss,
+                       "handle-set-clistatus",
+                       G_CALLBACK (on_ss_set_cli_status),
+                       ctx);
+
+       g_signal_connect (ss,
                        "handle-get-clistatus",
                        G_CALLBACK (on_ss_get_cli_status),
                        ctx);
@@ -532,13 +837,17 @@ gboolean dbus_plugin_ss_response(struct custom_data *ctx, UserRequest *ur, struc
        GVariantBuilder b;
        int i = 0;
 
+       if ( !data ) {
+               err("response data : 0");
+               return FALSE;
+       }
+
        switch (command) {
                case TRESP_SS_BARRING_ACTIVATE: {
 
                        const struct tresp_ss_barring *resp = data;
 
-                       dbg("receive TRESP_SS_BARRING_ACTIVATE");
-                       dbg("resp->err = 0x%x", resp->err);
+                       dbg("receive TRESP_SS_BARRING_ACTIVATE (err[%d])", resp->err);
 
                        g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
 
@@ -554,16 +863,13 @@ gboolean dbus_plugin_ss_response(struct custom_data *ctx, UserRequest *ur, struc
 
                        telephony_ss_complete_activate_barring(dbus_info->interface_object, dbus_info->invocation, result, resp->err);
 
-                       g_variant_unref(result);
-
                } break;
 
                case TRESP_SS_BARRING_DEACTIVATE: {
 
                        const struct tresp_ss_barring *resp = data;
 
-                       dbg("receive TRESP_SS_BARRING_DEACTIVATE");
-                       dbg("resp->err = 0x%x", resp->err);
+                       dbg("receive TRESP_SS_BARRING_DEACTIVATE (err[%d])", resp->err);
 
                        g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
 
@@ -579,16 +885,13 @@ gboolean dbus_plugin_ss_response(struct custom_data *ctx, UserRequest *ur, struc
 
                        telephony_ss_complete_deactivate_barring(dbus_info->interface_object, dbus_info->invocation, result, resp->err);
 
-                       g_variant_unref(result);
-
                } break;
 
                case TRESP_SS_BARRING_CHANGE_PASSWORD: {
 
                        const struct tresp_ss_general *resp = data;
 
-                       dbg("receive TRESP_SS_BARRING_CHANGE_PASSWORD");
-                       dbg("resp->err = 0x%x", resp->err);
+                       dbg("receive TRESP_SS_BARRING_CHANGE_PASSWORD (err[%d])", resp->err);
 
                        telephony_ss_complete_change_barring_password(dbus_info->interface_object, dbus_info->invocation, resp->err);
 
@@ -598,8 +901,7 @@ gboolean dbus_plugin_ss_response(struct custom_data *ctx, UserRequest *ur, struc
 
                        const struct tresp_ss_barring *resp = data;
 
-                       dbg("receive TRESP_SS_BARRING_GET_STATUS");
-                       dbg("resp->err = 0x%x", resp->err);
+                       dbg("receive TRESP_SS_BARRING_GET_STATUS (err[%d])", resp->err);
 
                        g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
 
@@ -615,15 +917,12 @@ gboolean dbus_plugin_ss_response(struct custom_data *ctx, UserRequest *ur, struc
 
                        telephony_ss_complete_get_barring_status(dbus_info->interface_object, dbus_info->invocation, result, resp->err);
 
-                       g_variant_unref(result);
-
                } break;
 
                case TRESP_SS_FORWARDING_ACTIVATE: {
                        const struct tresp_ss_forwarding *resp = data;
 
-                       dbg("receive TRESP_SS_FORWARDING_ACTIVATE");
-                       dbg("resp->err = 0x%x", resp->err);
+                       dbg("receive TRESP_SS_FORWARDING_ACTIVATE (err[%d])", resp->err);
 
                        g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
 
@@ -632,8 +931,10 @@ gboolean dbus_plugin_ss_response(struct custom_data *ctx, UserRequest *ur, struc
                                g_variant_builder_add(&b, "{sv}", "ss_class", g_variant_new_int32( resp->record[i].class ));
                                g_variant_builder_add(&b, "{sv}", "ss_status", g_variant_new_int32( resp->record[i].status ));
                                g_variant_builder_add(&b, "{sv}", "forwarding_mode", g_variant_new_int32( resp->record[i].mode ));
-                               g_variant_builder_add(&b, "{sv}", "no_reply_time", g_variant_new_int32( resp->record[i].time ));
                                g_variant_builder_add(&b, "{sv}", "number_present", g_variant_new_int32( resp->record[i].number_present ));
+                               g_variant_builder_add(&b, "{sv}", "no_reply_time", g_variant_new_int32( resp->record[i].time ));
+                               g_variant_builder_add(&b, "{sv}", "type_of_number", g_variant_new_int32( resp->record[i].ton ));
+                               g_variant_builder_add(&b, "{sv}", "numbering_plan_identity", g_variant_new_int32( resp->record[i].npi ));
                                g_variant_builder_add(&b, "{sv}", "forwarding_number", g_variant_new_string( resp->record[i].number ));
                                g_variant_builder_close(&b);
                        }
@@ -642,16 +943,13 @@ gboolean dbus_plugin_ss_response(struct custom_data *ctx, UserRequest *ur, struc
 
                        telephony_ss_complete_activate_forwarding(dbus_info->interface_object, dbus_info->invocation, result, resp->err);
 
-                       g_variant_unref(result);
-
                } break;
 
                case TRESP_SS_FORWARDING_DEACTIVATE: {
 
                        const struct tresp_ss_forwarding *resp = data;
 
-                       dbg("receive TRESP_SS_FORWARDING_DEACTIVATE");
-                       dbg("resp->err = 0x%x", resp->err);
+                       dbg("receive TRESP_SS_FORWARDING_DEACTIVATE (err[%d])", resp->err);
 
                        g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
 
@@ -660,8 +958,10 @@ gboolean dbus_plugin_ss_response(struct custom_data *ctx, UserRequest *ur, struc
                                g_variant_builder_add(&b, "{sv}", "ss_class", g_variant_new_int32( resp->record[i].class ));
                                g_variant_builder_add(&b, "{sv}", "ss_status", g_variant_new_int32( resp->record[i].status ));
                                g_variant_builder_add(&b, "{sv}", "forwarding_mode", g_variant_new_int32( resp->record[i].mode ));
-                               g_variant_builder_add(&b, "{sv}", "no_reply_time", g_variant_new_int32( resp->record[i].time ));
                                g_variant_builder_add(&b, "{sv}", "number_present", g_variant_new_int32( resp->record[i].number_present ));
+                               g_variant_builder_add(&b, "{sv}", "no_reply_time", g_variant_new_int32( resp->record[i].time ));
+                               g_variant_builder_add(&b, "{sv}", "type_of_number", g_variant_new_int32( resp->record[i].ton ));
+                               g_variant_builder_add(&b, "{sv}", "numbering_plan_identity", g_variant_new_int32( resp->record[i].npi ));
                                g_variant_builder_add(&b, "{sv}", "forwarding_number", g_variant_new_string( resp->record[i].number ));
                                g_variant_builder_close(&b);
                        }
@@ -670,16 +970,13 @@ gboolean dbus_plugin_ss_response(struct custom_data *ctx, UserRequest *ur, struc
 
                        telephony_ss_complete_deactivate_forwarding(dbus_info->interface_object, dbus_info->invocation, result, resp->err);
 
-                       g_variant_unref(result);
-
                } break;
 
                case TRESP_SS_FORWARDING_REGISTER: {
 
                        const struct tresp_ss_forwarding *resp = data;
 
-                       dbg("receive TRESP_SS_FORWARDING_REGISTER");
-                       dbg("resp->err = 0x%x", resp->err);
+                       dbg("receive TRESP_SS_FORWARDING_REGISTER (err[%d])", resp->err);
 
                        g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
 
@@ -688,8 +985,10 @@ gboolean dbus_plugin_ss_response(struct custom_data *ctx, UserRequest *ur, struc
                                g_variant_builder_add(&b, "{sv}", "ss_class", g_variant_new_int32( resp->record[i].class ));
                                g_variant_builder_add(&b, "{sv}", "ss_status", g_variant_new_int32( resp->record[i].status ));
                                g_variant_builder_add(&b, "{sv}", "forwarding_mode", g_variant_new_int32( resp->record[i].mode ));
-                               g_variant_builder_add(&b, "{sv}", "no_reply_time", g_variant_new_int32( resp->record[i].time ));
                                g_variant_builder_add(&b, "{sv}", "number_present", g_variant_new_int32( resp->record[i].number_present ));
+                               g_variant_builder_add(&b, "{sv}", "no_reply_time", g_variant_new_int32( resp->record[i].time ));
+                               g_variant_builder_add(&b, "{sv}", "type_of_number", g_variant_new_int32( resp->record[i].ton ));
+                               g_variant_builder_add(&b, "{sv}", "numbering_plan_identity", g_variant_new_int32( resp->record[i].npi ));
                                g_variant_builder_add(&b, "{sv}", "forwarding_number", g_variant_new_string( resp->record[i].number ));
                                g_variant_builder_close(&b);
                        }
@@ -698,16 +997,13 @@ gboolean dbus_plugin_ss_response(struct custom_data *ctx, UserRequest *ur, struc
 
                        telephony_ss_complete_register_forwarding(dbus_info->interface_object, dbus_info->invocation, result, resp->err);
 
-                       g_variant_unref(result);
-
            } break;
 
                case TRESP_SS_FORWARDING_DEREGISTER: {
 
                        const struct tresp_ss_forwarding *resp = data;
 
-                       dbg("receive TRESP_SS_FORWARDING_DEREGISTER");
-                       dbg("resp->err = 0x%x", resp->err);
+                       dbg("receive TRESP_SS_FORWARDING_DEREGISTER (err[%d])", resp->err);
 
                        g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
 
@@ -716,8 +1012,10 @@ gboolean dbus_plugin_ss_response(struct custom_data *ctx, UserRequest *ur, struc
                                g_variant_builder_add(&b, "{sv}", "ss_class", g_variant_new_int32( resp->record[i].class ));
                                g_variant_builder_add(&b, "{sv}", "ss_status", g_variant_new_int32( resp->record[i].status ));
                                g_variant_builder_add(&b, "{sv}", "forwarding_mode", g_variant_new_int32( resp->record[i].mode ));
-                               g_variant_builder_add(&b, "{sv}", "no_reply_time", g_variant_new_int32( resp->record[i].time ));
                                g_variant_builder_add(&b, "{sv}", "number_present", g_variant_new_int32( resp->record[i].number_present ));
+                               g_variant_builder_add(&b, "{sv}", "no_reply_time", g_variant_new_int32( resp->record[i].time ));
+                               g_variant_builder_add(&b, "{sv}", "type_of_number", g_variant_new_int32( resp->record[i].ton ));
+                               g_variant_builder_add(&b, "{sv}", "numbering_plan_identity", g_variant_new_int32( resp->record[i].npi ));
                                g_variant_builder_add(&b, "{sv}", "forwarding_number", g_variant_new_string( resp->record[i].number ));
                                g_variant_builder_close(&b);
                        }
@@ -726,16 +1024,13 @@ gboolean dbus_plugin_ss_response(struct custom_data *ctx, UserRequest *ur, struc
 
                        telephony_ss_complete_deregister_forwarding(dbus_info->interface_object, dbus_info->invocation, result, resp->err);
 
-                       g_variant_unref(result);
-
                } break;
 
                case TRESP_SS_FORWARDING_GET_STATUS: {
 
                        const struct tresp_ss_forwarding *resp = data;
 
-                       dbg("receive TRESP_SS_FORWARDING_GET_STATUS");
-                       dbg("resp->err = 0x%x", resp->err);
+                       dbg("receive TRESP_SS_FORWARDING_GET_STATUS (err[%d])", resp->err);
 
                        g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
 
@@ -744,8 +1039,10 @@ gboolean dbus_plugin_ss_response(struct custom_data *ctx, UserRequest *ur, struc
                                g_variant_builder_add(&b, "{sv}", "ss_class", g_variant_new_int32( resp->record[i].class ));
                                g_variant_builder_add(&b, "{sv}", "ss_status", g_variant_new_int32( resp->record[i].status ));
                                g_variant_builder_add(&b, "{sv}", "forwarding_mode", g_variant_new_int32( resp->record[i].mode ));
-                               g_variant_builder_add(&b, "{sv}", "no_reply_time", g_variant_new_int32( resp->record[i].time ));
                                g_variant_builder_add(&b, "{sv}", "number_present", g_variant_new_int32( resp->record[i].number_present ));
+                               g_variant_builder_add(&b, "{sv}", "no_reply_time", g_variant_new_int32( resp->record[i].time ));
+                               g_variant_builder_add(&b, "{sv}", "type_of_number", g_variant_new_int32( resp->record[i].ton ));
+                               g_variant_builder_add(&b, "{sv}", "numbering_plan_identity", g_variant_new_int32( resp->record[i].npi ));
                                g_variant_builder_add(&b, "{sv}", "forwarding_number", g_variant_new_string( resp->record[i].number ));
                                g_variant_builder_close(&b);
                        }
@@ -754,16 +1051,13 @@ gboolean dbus_plugin_ss_response(struct custom_data *ctx, UserRequest *ur, struc
 
                        telephony_ss_complete_get_forwarding_status(dbus_info->interface_object, dbus_info->invocation, result, resp->err);
 
-                       g_variant_unref(result);
-
                } break;
 
                case TRESP_SS_WAITING_ACTIVATE: {
 
                        const struct tresp_ss_waiting *resp = data;
 
-                       dbg("receive TRESP_SS_WAITING_ACTIVATE");
-                       dbg("resp->err = 0x%x", resp->err);
+                       dbg("receive TRESP_SS_WAITING_ACTIVATE (err[%d])", resp->err);
 
                        g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
 
@@ -778,16 +1072,13 @@ gboolean dbus_plugin_ss_response(struct custom_data *ctx, UserRequest *ur, struc
 
                        telephony_ss_complete_activate_waiting(dbus_info->interface_object, dbus_info->invocation, result, resp->err);
 
-                       g_variant_unref(result);
-
                } break;
 
                case TRESP_SS_WAITING_DEACTIVATE: {
 
                        const struct tresp_ss_waiting *resp = data;
 
-                       dbg("receive TRESP_SS_WAITING_DEACTIVATE");
-                       dbg("resp->err = 0x%x", resp->err);
+                       dbg("receive TRESP_SS_WAITING_DEACTIVATE (err[%d])", resp->err);
 
                        g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
 
@@ -802,16 +1093,13 @@ gboolean dbus_plugin_ss_response(struct custom_data *ctx, UserRequest *ur, struc
 
                        telephony_ss_complete_deactivate_waiting(dbus_info->interface_object, dbus_info->invocation, result, resp->err);
 
-                       g_variant_unref(result);
-
                } break;
 
                case TRESP_SS_WAITING_GET_STATUS: {
 
                        const struct tresp_ss_waiting *resp = data;
 
-                       dbg("receive TRESP_SS_WAITING_GET_STATUS");
-                       dbg("resp->err = 0x%x", resp->err);
+                       dbg("receive TRESP_SS_WAITING_GET_STATUS (err[%d])", resp->err);
 
                        g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
 
@@ -826,7 +1114,15 @@ gboolean dbus_plugin_ss_response(struct custom_data *ctx, UserRequest *ur, struc
 
                        telephony_ss_complete_get_waiting_status(dbus_info->interface_object, dbus_info->invocation, result, resp->err);
 
-                       g_variant_unref(result);
+               } break;
+
+               case TRESP_SS_CLI_SET_STATUS: {
+
+                       const struct tresp_ss_set_cli *resp = data;
+
+                       dbg("receive TRESP_SS_CLI_SET_STATUS (err[%d])", resp->err);
+
+                       telephony_ss_complete_set_clistatus(dbus_info->interface_object, dbus_info->invocation, resp->err);
 
                } break;
 
@@ -834,8 +1130,7 @@ gboolean dbus_plugin_ss_response(struct custom_data *ctx, UserRequest *ur, struc
 
                        const struct tresp_ss_cli *resp = data;
 
-                       dbg("receive TRESP_SS_CLI_GET_STATUS");
-                       dbg("resp->err = 0x%x", resp->err);
+                       dbg("receive TRESP_SS_CLI_GET_STATUS (err[%d])", resp->err);
 
                        telephony_ss_complete_get_clistatus(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->type, resp->status);
 
@@ -845,20 +1140,9 @@ gboolean dbus_plugin_ss_response(struct custom_data *ctx, UserRequest *ur, struc
 
                        const struct tresp_ss_ussd *resp = data;
 
-                       dbg("receive TRESP_SS_SEND_USSD");
-                       dbg("resp->err = 0x%x", resp->err);
-
-                       if ( resp->err ) {
-                               dbg("USSD Request is failed");
-                               telephony_ss_complete_send_ussd(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->type, resp->status, -1, 0);
-
-                       } else {
-                               int ussd_len = strlen(resp->str);
-                               dbg("USSD Request is Success");
-                               dbg("USSD : %s (%d)", resp->str, ussd_len);
-                               telephony_ss_complete_send_ussd(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->type, resp->status, ussd_len, resp->str);
-
-                       }
+                       dbg("receive TRESP_SS_SEND_USSD (err[%d])", resp->err);
+                       dbg("USSD : %s (len : %d, type : 0x%x, status : 0x%x, dcs : 0x%x)", resp->str, resp->len, resp->type, resp->status, resp->dcs);
+                       telephony_ss_complete_send_ussd(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->type, resp->status, resp->dcs, resp->len, (char*)resp->str);
 
                } break;
 
@@ -870,27 +1154,132 @@ gboolean dbus_plugin_ss_response(struct custom_data *ctx, UserRequest *ur, struc
        return TRUE;
 }
 
-gboolean dbus_plugin_ss_notification(struct custom_data *ctx, const char *plugin_name, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data)
+gboolean dbus_plugin_ss_notification(struct custom_data *ctx, CoreObject *source, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data)
 {
-       TelephonySs *ss;
-       const struct tnoti_ss_ussd *ussd = data;
+       TelephonySs *ss = 0;
+       GVariant *result = 0;
+       GVariantBuilder b;
+       int i = 0;
+       char *cp_name= NULL;
 
        if (!object) {
                dbg("object is NULL");
                return FALSE;
        }
+       cp_name =  (char*)tcore_server_get_cp_name_by_plugin(tcore_object_ref_plugin(source));
 
        ss = telephony_object_peek_ss(TELEPHONY_OBJECT(object));
-       dbg("ss = %p", ss);
 
        switch (command) {
-               case TNOTI_SS_USSD:
+               case TNOTI_SS_USSD: {
+                       const struct tnoti_ss_ussd *ussd = data;
+                       enum dbus_tapi_sim_slot_id slot_id;
+
+                       slot_id = get_sim_slot_id_by_cp_name(cp_name);
+                       dbg("slot_id: [%d]", slot_id);
+
                        telephony_ss_emit_notify_ussd(ss,
                                        ussd->status,
-                                       strlen(ussd->str),
-                                       ussd->str );
-                       break;
+                                       ussd->dcs,
+                                       ussd->len,
+                                       (char*)ussd->str);
+                       _launch_ciss(ussd, slot_id);
+               } break;
+
+               case TNOTI_SS_FORWARDING_STATUS: {
+                       const struct tnoti_ss_forwarding_status *fwrd = data;
+
+                       g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+
+                       for (i=0; i<fwrd->record_num; i++) {
+                               g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+                               g_variant_builder_add(&b, "{sv}", "ss_class", g_variant_new_int32( fwrd->record[i].class ));
+                               g_variant_builder_add(&b, "{sv}", "ss_status", g_variant_new_int32( fwrd->record[i].status ));
+                               g_variant_builder_add(&b, "{sv}", "forwarding_mode", g_variant_new_int32( fwrd->record[i].mode ));
+                               g_variant_builder_add(&b, "{sv}", "number_present", g_variant_new_int32( fwrd->record[i].number_present ));
+                               g_variant_builder_add(&b, "{sv}", "no_reply_time", g_variant_new_int32( fwrd->record[i].time ));
+                               g_variant_builder_add(&b, "{sv}", "type_of_number", g_variant_new_int32( fwrd->record[i].ton ));
+                               g_variant_builder_add(&b, "{sv}", "numbering_plan_identity", g_variant_new_int32( fwrd->record[i].npi ));
+                               g_variant_builder_add(&b, "{sv}", "forwarding_number", g_variant_new_string( fwrd->record[i].number ));
+                               g_variant_builder_close(&b);
+                       }
+
+                       result = g_variant_builder_end(&b);
+                       telephony_ss_emit_notify_forwarding(ss, result);
+
+               } break;
+
+               case TNOTI_SS_BARRING_STATUS: {
 
+                       const struct tnoti_ss_barring_status *barr = data;
+
+                       g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+
+                       for (i=0; i<barr->record_num; i++) {
+                               g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+                               g_variant_builder_add(&b, "{sv}", "ss_class", g_variant_new_int32( barr->record[i].class ));
+                               g_variant_builder_add(&b, "{sv}", "ss_status", g_variant_new_int32( barr->record[i].status ));
+                               g_variant_builder_add(&b, "{sv}", "barring_mode", g_variant_new_int32( barr->record[i].mode ));
+                               g_variant_builder_close(&b);
+                       }
+
+                       result = g_variant_builder_end(&b);
+                       telephony_ss_emit_notify_barring(ss, result);
+
+               } break;
+
+               case TNOTI_SS_WAITING_STATUS: {
+                       const struct tnoti_ss_waiting_status *wait = data;
+
+                       g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+
+                       for (i=0; i<wait->record_num; i++) {
+                               g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+                               g_variant_builder_add(&b, "{sv}", "ss_class", g_variant_new_int32( wait->record[i].class ));
+                               g_variant_builder_add(&b, "{sv}", "ss_status", g_variant_new_int32( wait->record[i].status ));
+                               g_variant_builder_close(&b);
+                       }
+
+                       result = g_variant_builder_end(&b);
+                       telephony_ss_emit_notify_waiting(ss, result);
+
+               } break;
+
+               case TNOTI_SS_RELEASE_COMPLETE: {
+                       int i = 0;
+                       GVariantBuilder builder;
+                       GVariant *msg_data = 0, *packet = NULL;
+                       const struct tnoti_ss_release_complete *msg = data;
+                       if (msg) {
+                               g_variant_builder_init(&builder, G_VARIANT_TYPE ("ay"));
+                               for (i = 0; i < msg->data_len; i++) {
+                                       g_variant_builder_add(&builder, "y", msg->data[i]);
+                               }
+                               msg_data = g_variant_builder_end(&builder);
+                               packet = g_variant_new("v", msg_data);
+
+                               dbg("type_format(%s)", g_variant_get_type_string(packet));
+                               telephony_ss_emit_release_complete(ss, msg->data_len, packet );
+                       } else {
+                               dbg("No data is passed in USSD release notification");
+                               g_variant_builder_init(&builder, G_VARIANT_TYPE ("ay"));
+                               g_variant_builder_add(&builder, "y", '\0');
+                               msg_data = g_variant_builder_end(&builder);
+                               packet = g_variant_new("v", msg_data);
+                               dbg("type_format(%s)", g_variant_get_type_string(packet));
+                               telephony_ss_emit_release_complete(ss, 1, packet);
+                       }
+               } break;
+               case TNOTI_SS_INFO: {
+                       const struct tnoti_ss_information *ss_info = data;
+                       telephony_ss_emit_notify_ss_info(ss,
+                                       ss_info->err,
+                                       ss_info->ss_type);
+                       _launch_ciss_information(ss_info);
+                       /* Launch CISS application
+                       _launch_ciss(ss_info);
+                       */
+               } break;
                default:
                        dbg("not handled command[%d]", command);
                break;
diff --git a/test/network-search.sh b/test/network-search.sh
new file mode 100755 (executable)
index 0000000..6fcaa58
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+dbus-send --print-reply --reply-timeout=60000 --dest=org.tizen.telephony /org/tizen/telephony/SAMSUNG org.tizen.telephony.Network.Search