From ed8b3391e413b2a56082908f2a665db7d96cbe24 Mon Sep 17 00:00:00 2001 From: Kim Kibum Date: Mon, 9 Apr 2012 12:12:15 +0900 Subject: [PATCH] Tizen release 1.0 --- CMakeLists.txt | 58 +++ INSTALL | 33 ++ NOTICE | 1 + debian/changelog | 33 ++ debian/compat | 1 + debian/control | 19 + debian/copyright | 19 + debian/dirs | 2 + debian/docs | 2 + debian/org.tizen.ciss.install.in | 5 + debian/org.tizen.ciss.postinst.in | 8 + debian/rules | 138 +++++++ include/ciss-common.h | 168 +++++++++ include/ciss-converter.h | 232 ++++++++++++ include/ciss-debug.h | 66 ++++ include/ciss-parser.h | 56 +++ include/ciss-resp.h | 29 ++ include/ciss-respnd.h | 30 ++ include/ciss-string.h | 81 ++++ include/ciss-tapi-request.h | 56 +++ include/ciss-types.h | 451 +++++++++++++++++++++++ include/ciss-ussd.h | 29 ++ include/ciss-util.h | 42 +++ include/ciss-widget.h | 79 ++++ org.tizen.ciss.desktop.in | 12 + packaging/org.tizen.ciss.spec | 50 +++ po/CMakeLists.txt | 24 ++ po/POTFILES.in | 30 ++ po/de_DE.po | 141 +++++++ po/el_GR.po | 141 +++++++ po/en.po | 141 +++++++ po/es_ES.po | 141 +++++++ po/fr_FR.po | 141 +++++++ po/it_IT.po | 141 +++++++ po/ja_JP.po | 141 +++++++ po/ko_KR.po | 141 +++++++ po/nl_NL.po | 141 +++++++ po/pt_PT.po | 141 +++++++ po/ru_RU.po | 141 +++++++ po/test.pot | 30 ++ po/tr_TR.po | 141 +++++++ po/update-po.sh | 57 +++ po/zh_CN.po | 141 +++++++ po/zh_HK.po | 141 +++++++ po/zh_TW.po | 141 +++++++ resource/ciss-mmi.edc | 107 ++++++ src/ciss-converter.c | 753 ++++++++++++++++++++++++++++++++++++++ src/ciss-main.c | 237 ++++++++++++ src/ciss-parser.c | 408 +++++++++++++++++++++ src/ciss-resp.c | 571 +++++++++++++++++++++++++++++ src/ciss-respnd.c | 218 +++++++++++ src/ciss-tapi-request.c | 674 ++++++++++++++++++++++++++++++++++ src/ciss-ussd.c | 125 +++++++ src/ciss-util.c | 44 +++ src/ciss-widget.c | 361 ++++++++++++++++++ 55 files changed, 7454 insertions(+) create mode 100755 CMakeLists.txt create mode 100755 INSTALL create mode 100755 NOTICE create mode 100755 debian/changelog create mode 100755 debian/compat create mode 100755 debian/control create mode 100755 debian/copyright create mode 100755 debian/dirs create mode 100755 debian/docs create mode 100755 debian/org.tizen.ciss.install.in create mode 100755 debian/org.tizen.ciss.postinst.in create mode 100755 debian/rules create mode 100755 include/ciss-common.h create mode 100755 include/ciss-converter.h create mode 100755 include/ciss-debug.h create mode 100755 include/ciss-parser.h create mode 100755 include/ciss-resp.h create mode 100755 include/ciss-respnd.h create mode 100755 include/ciss-string.h create mode 100755 include/ciss-tapi-request.h create mode 100755 include/ciss-types.h create mode 100755 include/ciss-ussd.h create mode 100755 include/ciss-util.h create mode 100755 include/ciss-widget.h create mode 100755 org.tizen.ciss.desktop.in create mode 100755 packaging/org.tizen.ciss.spec create mode 100755 po/CMakeLists.txt create mode 100755 po/POTFILES.in create mode 100755 po/de_DE.po create mode 100755 po/el_GR.po create mode 100755 po/en.po create mode 100755 po/es_ES.po create mode 100755 po/fr_FR.po create mode 100755 po/it_IT.po create mode 100755 po/ja_JP.po create mode 100755 po/ko_KR.po create mode 100755 po/nl_NL.po create mode 100755 po/pt_PT.po create mode 100755 po/ru_RU.po create mode 100755 po/test.pot create mode 100755 po/tr_TR.po create mode 100755 po/update-po.sh create mode 100755 po/zh_CN.po create mode 100755 po/zh_HK.po create mode 100755 po/zh_TW.po create mode 100755 resource/ciss-mmi.edc create mode 100755 src/ciss-converter.c create mode 100755 src/ciss-main.c create mode 100755 src/ciss-parser.c create mode 100755 src/ciss-resp.c create mode 100755 src/ciss-respnd.c create mode 100755 src/ciss-tapi-request.c create mode 100755 src/ciss-ussd.c create mode 100755 src/ciss-util.c create mode 100755 src/ciss-widget.c diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100755 index 0000000..fb0f9ad --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,58 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(org.tizen.ciss C) +SET(APPNAME ciss) + +SET(PREFIX ${CMAKE_INSTALL_PREFIX}) +SET(BINDIR "${PREFIX}/bin") +SET(RESDIR "${PREFIX}/res") +SET(DATADIR "${PREFIX}/data") +SET(LOCALEDIR "${RESDIR}/locale") +SET(EDJDIR "${RESDIR}/edje") +SET(IMGDIR "${RESDIR}/images") + +ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"") +ADD_DEFINITIONS("-DRESDIR=\"${RESDIR}\"") +ADD_DEFINITIONS("-DDATADIR=\"${DATADIR}\"") +ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"") +ADD_DEFINITIONS("-DEDJDIR=\"${EDJDIR}\"") +ADD_DEFINITIONS("-DIMGDIR=\"${IMGDIR}\"") + +SET(CISS_SRCS + src/ciss-main.c + src/ciss-parser.c + src/ciss-tapi-request.c + src/ciss-ussd.c + src/ciss-resp.c + src/ciss-widget.c + src/ciss-util.c + src/ciss-respnd.c + src/ciss-converter.c +) + +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include) + +INCLUDE(FindPkgConfig) +pkg_check_modules(ciss_pkgs REQUIRED tapi appcore-efl glib-2.0 gobject-2.0 vconf elementary UI-idlecapture utilX dlog aul bundle ecore ecore-imf ecore-x ecore-input) +FOREACH(flag ${ciss_pkgs_CFLAGS}) + SET(CISS_EXTRA_CFLAGS "${CISS_EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) + +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CISS_EXTRA_CFLAGS}") + +ADD_EXECUTABLE(${APPNAME} ${CISS_SRCS}) +TARGET_LINK_LIBRARIES(${APPNAME} ${ciss_pkgs_LDFLAGS}) + +ADD_CUSTOM_TARGET(ciss-mmi.edj + COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/resource/images + ${CMAKE_SOURCE_DIR}/resource/ciss-mmi.edc ${CMAKE_BINARY_DIR}/ciss-mmi.edj + DEPENDS ${CMAKE_SOURCE_DIR}/resource/ciss-mmi.edc +) +ADD_DEPENDENCIES(${APPNAME} ciss-mmi.edj) + +CONFIGURE_FILE(${PROJECT_NAME}.desktop.in ${CMAKE_SOURCE_DIR}/${PROJECT_NAME}.desktop) +INSTALL(TARGETS ${APPNAME} DESTINATION bin) +INSTALL(DIRECTORY DESTINATION ${DATADIR}) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/${PROJECT_NAME}.desktop DESTINATION /opt/share/applications/) +INSTALL(FILES ${CMAKE_BINARY_DIR}/ciss-mmi.edj DESTINATION ${EDJDIR}) +# i18n +ADD_SUBDIRECTORY(po) diff --git a/INSTALL b/INSTALL new file mode 100755 index 0000000..df57ce5 --- /dev/null +++ b/INSTALL @@ -0,0 +1,33 @@ +1. make the build directory + + ex) + + $ mkdir build + + +2. change the working directory to the build directory + + ex) + + $ cd build + + +3. run 'cmake' + + $ cmake ${SOURCE_DIR} - DCMAKE_INSTALL_PREFIX=/opt/apps/ciss + + ex) + + $ cmake .. -DCMAKE_INSTALL_PREFIX=/opt/apps/ciss + + or + + $ cmake .. + + +4. make & make install + + ex) + + $ make -j 2 && make install + diff --git a/NOTICE b/NOTICE new file mode 100755 index 0000000..ded3804 --- /dev/null +++ b/NOTICE @@ -0,0 +1 @@ +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. \ No newline at end of file diff --git a/debian/changelog b/debian/changelog new file mode 100755 index 0000000..2f9a8f3 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,33 @@ +ciss (0.4.45) unstable; urgency=low + + * Upload pkg. + * Apply EFL migration change + * Update boilerplate + * Git : pkgs/c/ciss + * Tag : ciss_0.4.45 + + -- Jungmin Kim Fri, 17 Feb 2012 08:50:43 +0900 + +ciss (0.4.44) unstable; urgency=low + + * Upload pkg. + * Git : pkgs/c/ciss + * Tag : ciss_0.4.44 + + -- Jungmin Kim Mon, 09 Jan 2012 16:10:13 +0900 + +ciss (0.4.43) unstable; urgency=low + + * Rename org.tizen + * Git : pkgs/c/ciss + * Tag : ciss_0.4.43 + + -- Jungmin Kim Thu, 22 Dec 2011 20:21:47 +0900 + +ciss (0.4.42) unstable; urgency=low + + * Git init + * Git : pkgs/c/ciss + * Tag : ciss_0.4.42 + + -- Jungmin Kim Fri, 16 Dec 2011 12:47:55 +0900 diff --git a/debian/compat b/debian/compat new file mode 100755 index 0000000..7ed6ff8 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +5 diff --git a/debian/control b/debian/control new file mode 100755 index 0000000..a4b087d --- /dev/null +++ b/debian/control @@ -0,0 +1,19 @@ +Source: ciss +Section: devel +Priority: extra +Maintainer: Jungmin Kim , Sungjoon Won +Uploaders: Jungmin Kim , Sungjoon Won +Build-Depends: debhelper (>= 5), autotools-dev, libappcore-efl-dev, libelm-dev, libui-idlecapture-dev, libslp-tapi-dev, libslp-utilx-dev, libbundle-dev, libaul-1-dev, dlog-dev +Standards-Version: 0.1.0 + +Package: org.tizen.ciss +Section: devel +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: CISS-MMI application + +Package: org.tizen.ciss-dbg +Section: debug +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, org.tizen.ciss-dbg (= ${Source-Version}) +Description: CISS-MMI application diff --git a/debian/copyright b/debian/copyright new file mode 100755 index 0000000..c4cf4de --- /dev/null +++ b/debian/copyright @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * This file is part of + * Written by , + * + * PROPRIETARY/CONFIDENTIAL + * + * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). + * You shall not disclose such Confidential Information and shall use it only in accordance + * with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. + * SAMSUNG make no representations or warranties about the suitability of the software, + * either express or implied, including but not limited to the implied warranties of merchantability, + * fitness for a particular purpose, or non-infringement. + * SAMSUNG shall not be liable for any damages suffered by licensee as a result of using, + * modifying or distributing this software or its derivatives. + * + */ + diff --git a/debian/dirs b/debian/dirs new file mode 100755 index 0000000..ca882bb --- /dev/null +++ b/debian/dirs @@ -0,0 +1,2 @@ +usr/bin +usr/sbin diff --git a/debian/docs b/debian/docs new file mode 100755 index 0000000..7a77580 --- /dev/null +++ b/debian/docs @@ -0,0 +1,2 @@ +CMakeCache.txt +CMakeLists.txt diff --git a/debian/org.tizen.ciss.install.in b/debian/org.tizen.ciss.install.in new file mode 100755 index 0000000..b27a08b --- /dev/null +++ b/debian/org.tizen.ciss.install.in @@ -0,0 +1,5 @@ +@PREFIX@/bin/* +@PREFIX@/res/locale/* +@PREFIX@/data +@PREFIX@/res/edje/* +/opt/share/applications/* diff --git a/debian/org.tizen.ciss.postinst.in b/debian/org.tizen.ciss.postinst.in new file mode 100755 index 0000000..aa339a0 --- /dev/null +++ b/debian/org.tizen.ciss.postinst.in @@ -0,0 +1,8 @@ +#! /bin/sh + +if [ ${USER} == "root" ] +then + # 5000 is inhouse user id + # do not use relative path + chown -R 5000:5000 @PREFIX@/data +fi diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..95e7d51 --- /dev/null +++ b/debian/rules @@ -0,0 +1,138 @@ +#!/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 + +PREFIX ?= /opt/apps/org.tizen.ciss +RESDIR ?= /opt/apps/org.tizen.ciss/res +DATADIR ?= /opt/apps/org.tizen.ciss/data +CFLAGS ?= +CFLAGS += -Wall -g -fpie +CXXFLAGS ?= +CXXFLAGS += -Wall -g -fpie +LDFLAGS ?= +LDFLAGS += -Wl,--hash-style=both -Wl,--rpath=$(PREFIX)/lib -Wl,--as-needed -pie + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 +else + CFLAGS += -O2 +endif + +configure: configure-stamp +configure-stamp: + dh_testdir + # Add here commands to configure the package. + CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" 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. + $(MAKE) + #docbook-to-man debian/calllog.sgml > calllog.1 + + 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#@RESDIR@#$(RESDIR)#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. + -$(MAKE) clean + rm -rf CMakeCache.txt + rm -rf CMakeFiles + rm -rf cmake_install.cmake + rm -rf Makefile + rm -rf install_manifest.txt + rm -rf *.so + rm -rf po/CMakeCache.txt + rm -rf po/CMakeFiles + rm -rf po/cmake_install.cmake + rm -rf po/Makefile + rm -rf po/install_manifest.txt + rm -rf po/*.so + rm -rf data/CMakeCache.txt + rm -rf data/CMakeFiles + rm -rf data/cmake_install.cmake + rm -rf data/Makefile + rm -rf data/install_manifest.txt + rm -rf data/*.so + + rm -rf *.desktop + rm -rf *.edj + rm -rf theme/*.edj + + 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/calllog. + $(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 + dh_strip --dbg-package=org.tizen.ciss-dbg + dh_compress + dh_fixperms +# dh_perl + dh_makeshlibs + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/include/ciss-common.h b/include/ciss-common.h new file mode 100755 index 0000000..5338d30 --- /dev/null +++ b/include/ciss-common.h @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * This file is part of + * Written by , + * + * PROPRIETARY/CONFIDENTIAL + * + * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). + * You shall not disclose such Confidential Information and shall use it only in accordance + * with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. + * SAMSUNG make no representations or warranties about the suitability of the software, + * either express or implied, including but not limited to the implied warranties of merchantability, + * fitness for a particular purpose, or non-infringement. + * SAMSUNG shall not be liable for any damages suffered by licensee as a result of using, + * modifying or distributing this software or its derivatives. + * + */ + +#ifndef __CISS_MMI_H__ +#define __CISS_MMI_H__ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ciss-types.h" +#include "ciss-debug.h" +#include "ciss-string.h" + +#ifndef PREFIX +#define PREFIX "/usr" +#endif + +#ifdef _ +#undef _ +#endif + +#ifdef N_ +#undef N_ +#endif + +#define PACKAGE "org.tizen.ciss" +#if !defined(LOCALEDIR) + # define LOCALEDIR "/opt/apps/org.tizen.ciss/res/locale" +#endif + +#if !defined(EDJDIR) + # define EDJDIR "/opt/apps/org.tizen.ciss/res/edje" +#endif + +#define EDJ_PATH EDJDIR +#define EDJ_NAME EDJDIR"/ciss-mmi.edj" +#define GRP_MAIN "main" +#define IMG_DIR "/opt/apps/"PACKAGE"/res/images" + +#define _(s) gettext(s) +#define _EDJ(o) elm_layout_edje_get(o) + +#define REQ_STRING_MAX_LEN 255 +#define MAX_PWD_CHAR 4 +#define MAX_SC_ENTRY 20 +#define MAX_USS_CHAR 160 /**< Max num of char is USS data*/ +#define MAX_SC_LEN 3 /**< Maximum length of service code */ +#define ENCODE_TYPE_GSM 0x0F /**< the value of the GSM encoding fromat for ussd */ +#define CISS_MMI_MAX_USSD_RESP_STRING 300 +#define CISS_MMI_MAX_SS_RESP_STRING 1664 +#define POPUP_DISPLAY_DURATION 10.0 + +#define registerSS 10 +#define eraseSS 11 +#define activateSS 12 +#define deactivateSS 13 +#define interrogateSS 14 +#define notifySS 16 +#define registerPassword 17 +#define getPassword 18 +#define processUnstructuredSS_Data 19 +#define forwardCheckSS_Indication 38 +#define processUnstructuredSS_Request 59 +#define unstructuredSS_Request 60 +#define unstructuredSS_Notify 61 + + +typedef enum { + REQUEST_MODE, /* 0 */ + RESPONSE_MODE, +} launching_mode_t; + + +/** + * The MMI string context + */ +typedef struct { + unsigned char opcode; + char user_string[MAX_USS_CHAR]; /**< String to be parsed */ + int user_string_length; /**< length of string */ + unsigned char dcs; /**< the data coding scheme for ussd */ + unsigned char ss_flavor; /**< current SS code being processed */ + unsigned char ss_type; /**< barring, forwarding, waiting, etc */ + TelSsTeleService_t tapi_bsg; /**< The Basic Service Code */ + char divert_number[CISS_NUMBER_LEN_MAX+1]; /**< call forwarding number*/ + char nr_timer; /**< No Reply Timer */ + char ss_password[CISS_MAX_PASSWORD_LEN+1]; /**< remember password if supplied so that */ + char ss_new_password[CISS_MAX_PASSWORD_LEN+1]; /**< remember new password */ + char ss_new_password2[CISS_MAX_PASSWORD_LEN+1]; /**< remember the new pwd supplied again */ + char fdn_string[10]; /**< FDN string*/ + char ss_code[MAX_SC_LEN + 1]; /**< the ss code */ + +}ciss_mmi_context_t; + +struct appdata { + Evas *evas; + + Evas_Object *win_main; + Evas_Object *indicator; + Evas_Object *nf; + Evas_Object *layout_main; + Evas_Object *content; + Evas_Object *view; + Evas_Object *popup; + Evas_Object *entry; + Evas_Object *ef_entry, *ef_layout; + + Evas_Object *button; + + Evas_Object *bg; + + Elm_Object_Item *c_item[3]; + Ecore_Timer *timer; + Ecore_Event_Handler *ise_event_handler; + Ecore_Event_Handler *end_key_event_handler; + Ecore_IMF_Context *imf_context; + Elm_Genlist_Item_Class *itc_ime; + Elm_Genlist_Item_Class *itc_multi_line; + + TelSsInfo_t ss_info; + ciss_mmi_context_t mmi_ctx; + + int launch_mode; + int cmd_type; + int cmd_id; + Eina_Bool is_sat_request; + int ussd_action_require; + int request_id; + unsigned char rel_comp_msg[TAPI_MAX_RELEASE_COMPLETE_DATA_LEN]; + int rel_comp_msg_len; + + char input[256]; + char req_string[REQ_STRING_MAX_LEN]; + +}; + +typedef struct { + int even_class; /**< Event Class */ + int event_type; /**< Event type */ + int request_id; /**< This parameter is applicable only for Asynchronous solicited responses. The request id for a service request is sent back in the asynchronous response. For unsolicited indications, request id will be -1 */ + int status; /**< This parameter is applicable only for Asynchronous solicited responses. This status parameter informs the actual result of Asynchronous response. For unsolicited indications, status will be -1 */ + void *p_data; /**< Event Data - Based on Event type response/indications. Event data information is captured in each API Section */ + int data_length; /**< Event Data size */ +} ciss_tapi_event_t; + +#endif /* __CISS_MMI_H__ */ + diff --git a/include/ciss-converter.h b/include/ciss-converter.h new file mode 100755 index 0000000..16b4c40 --- /dev/null +++ b/include/ciss-converter.h @@ -0,0 +1,232 @@ +/* + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * This file is part of + * Written by , + * + * PROPRIETARY/CONFIDENTIAL + * + * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). + * You shall not disclose such Confidential Information and shall use it only in accordance + * with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. + * SAMSUNG make no representations or warranties about the suitability of the software, + * either express or implied, including but not limited to the implied warranties of merchantability, + * fitness for a particular purpose, or non-infringement. + * SAMSUNG shall not be liable for any damages suffered by licensee as a result of using, + * modifying or distributing this software or its derivatives. + * + */ + +#ifndef _CISS_CONVERTER_MMI_H_ +#define _CISS_CONVERTER_MMI_H_ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#include "ITapiSs.h" +#include "ciss-common.h" +#include + +#define MAX_BSG_LEN 2 + + /* ALS_SUPPORT bug id: QCOM00001874 : entry increment by one for auxilliary telephony: Hari */ +#ifdef FEATURE_SAMSUNG_ALS +#define MAX_BSG_ENTRY 47 +#else +#define MAX_BSG_ENTRY 46 +#endif + +/* +** Local Supplementary Service Codes (SC) +*/ + +#define CISS_ENG_SC_ALL "" +#define CISS_ENG_SC_CF "002" +#define CISS_ENG_SC_CFC "004" +#define CISS_ENG_SC_CFU "21" +#define CISS_ENG_SC_CFB "67" +#define CISS_ENG_SC_CFNRY "61" +#define CISS_ENG_SC_CFNRC "62" +#define CISS_ENG_SC_CLIP "30" +#define CISS_ENG_SC_CLIR "31" +#define CISS_ENG_SC_COLP "76" +#define CISS_ENG_SC_COLR "77" +#define CISS_ENG_SC_CNAP "300" +#define CISS_ENG_SC_CW "43" +#define CISS_ENG_SC_B "330" +#define CISS_ENG_SC_OB "333" +#define CISS_ENG_SC_IB "353" +#define CISS_ENG_SC_BAOC "33" +#define CISS_ENG_SC_BOIC "331" +#define CISS_ENG_SC_BOICEXHC "332" +#define CISS_ENG_SC_BAIC "35" +#define CISS_ENG_SC_BICROAM "351" + +/* +** Local Basic Service Codes +*/ + +#define CISS_ENG_BSG_ALL "" +#define CISS_ENG_BSG_ALL_TS "10" +#define CISS_ENG_BSG_TELEPHONY "11" +/* ALS_SUPPORT : added MMI code for auxilliary telephony */ +#ifdef FEATURE_SAMSUNG_ALS +#define CISS_ENG_BSG_AUX_TELEPHONY "89" +#endif +#define CISS_ENG_BSG_ALL_DATA "12" +#define CISS_ENG_BSG_FAX "13" +#define CISS_ENG_BSG_SMS "16" +#define CISS_ENG_BSG_ALL_TELE_EX_SMS "19" +#define CISS_ENG_BSG_PLMN_TELE_ALL "50" +#define CISS_ENG_BSG_PLMN_TELE_1 "51" +#define CISS_ENG_BSG_PLMN_TELE_2 "51" +#define CISS_ENG_BSG_PLMN_TELE_3 "53" +#define CISS_ENG_BSG_PLMN_TELE_4 "54" +#define CISS_ENG_BSG_PLMN_TELE_5 "55" +#define CISS_ENG_BSG_PLMN_TELE_6 "56" +#define CISS_ENG_BSG_PLMN_TELE_7 "57" +#define CISS_ENG_BSG_PLMN_TELE_8 "58" +#define CISS_ENG_BSG_PLMN_TELE_9 "59" +#define CISS_ENG_BSG_PLMN_TELE_A "60" +#define CISS_ENG_BSG_PLMN_TELE_B "61" +#define CISS_ENG_BSG_PLMN_TELE_C "62" +#define CISS_ENG_BSG_PLMN_TELE_D "63" +#define CISS_ENG_BSG_PLMN_TELE_E "64" +#define CISS_ENG_BSG_PLMN_TELE_F "65" + +#define CISS_ENG_BSG_ALL_BS "20" +#define CISS_ENG_BSG_ALL_ASYNC "21" +#define CISS_ENG_BSG_ALL_SYNC "22" +#define CISS_ENG_BSG_ALL_DC_SYNC "24" +#define CISS_ENG_BSG_ALL_DC_ASYNC "25" +#define CISS_ENG_BSG_ALL_DED_PACKET "26" +#define CISS_ENG_BSG_ALL_DED_PAD "27" +#define CISS_ENG_BSG_12_KBIT "29" +#define CISS_ENG_BSG_PLMN_BEAR_ALL "70" +#define CISS_ENG_BSG_PLMN_BEAR_1 "71" +#define CISS_ENG_BSG_PLMN_BEAR_2 "71" +#define CISS_ENG_BSG_PLMN_BEAR_3 "73" +#define CISS_ENG_BSG_PLMN_BEAR_4 "74" +#define CISS_ENG_BSG_PLMN_BEAR_5 "75" +#define CISS_ENG_BSG_PLMN_BEAR_6 "76" +#define CISS_ENG_BSG_PLMN_BEAR_7 "77" +#define CISS_ENG_BSG_PLMN_BEAR_8 "78" +#define CISS_ENG_BSG_PLMN_BEAR_9 "79" +#define CISS_ENG_BSG_PLMN_BEAR_A "80" +#define CISS_ENG_BSG_PLMN_BEAR_B "81" +#define CISS_ENG_BSG_PLMN_BEAR_C "82" +#define CISS_ENG_BSG_PLMN_BEAR_D "83" +#define CISS_ENG_BSG_PLMN_BEAR_E "84" +#define CISS_ENG_BSG_PLMN_BEAR_F "85" + +typedef enum { + NO_CODE = -1, + BS_CODE, + TS_CODE, + MAX_CODE +} bsg_code_type; + + +typedef struct { + char* local_sc; /* local value of Service Code */ + unsigned char tapi_flavor; /* TAPI flavor */ + unsigned char ss_type; /* barring, fwding, waiting, etc*/ +} sc_table_element_type; + + +/* convert between local and network BSG values */ +typedef struct { + char *local_bsg; /* local BSG value */ + char bsg_type; /* BSG type - bearer services, teleservices */ + TelSsTeleService_t tapi_bsg_code; /* TAPI BSG value */ +} bsg_table_element_type; + +int _ciss_convert_bsg_to_tapi_bsg(char *local_bsg, TelSsTeleService_t *tapi_bsg); +int _ciss_convert_sc_to_tapi_flavor(char *sc, unsigned char *tapi_flavor, unsigned char *ss_type); + +/* temporarily added : need to correct when changes are finalized +added for call divert type */ +int _ciss_get_tapi_forward_type(TelSsTeleService_t TelecommSvc, TelSsForwardType_t *pForwardType); + +/* temporarily added : need to correct when changes are finalized +added for call barring type and call waiting */ +int _ciss_get_tapi_call_type(TelSsTeleService_t TelecommSvc, TelSsCallType_t *pCallType); + +/** + * This function gets the ciss error from the tapi error. + * + * @return This function returns TRUE on success, or false on failure. + * @param[in] tapi_err the tapi error + * @param[out] ciss_err the ciss error. + */ +int _ciss_get_error_from_tapi_error(ciss_err_t *ciss_err, TelSsCause_t tapi_err); + +/** + * This function gets the tapi ussd repsonse type from ciss repsonse type. + * + * @return This function returns TRUE on success, or false on failure. + * @param[in] resp_type the ciss repsonse type + * @param[out] p_tapi_resptype the tapi repsonse type. + */ +int _ciss_get_tapi_ussd_resp_type(ciss_ussd_response_type_t resp_type, TelSsUssdRespType_t *p_tapi_resptype); + +/** + * This function gets the tapi ussd indication type from ciss indication type. + * + * @return This function returns TRUE on success, or false on failure. + * @param[in] ind_type the ciss indication type + * @param[out] p_tapi_indtype the tapi indication type. + */ +int _ciss_get_tapi_ussd_ind_type(ciss_ussd_ind_type_t ind_type, TelSsUssdIndType_t *p_tapi_indtype); + +/** + * This function gets the ciss sbse service from the tapi tele service + * + * @return This function returns TRUE on success, or false on failure. + * @param[in] tapi_tele_service the tapi tele service + * @param[out] ciss_tele_service the ciss tele service + */ +int _ciss_get_telecomm_svc(TelSsTeleService_t in_teleservice, ciss_telecomm_svc_t *out_teleservice); + +/** + * This function gets the ciss flavor type of call forward from the tapi flavor type + * + * @return This function returns TRUE on success, or false on failure. + * @param[in] tapi_flavor_type the tapi flavor type + * @param[out] ciss_flavor_type the ciss flavor type + */ +int _ciss_get_forward_flavor_type(TelSsForwardWhen_t in_flavor, ciss_flavor_t *out_flavor); + +/** + * This function gets the ciss flavor type of call barring from the tapi flavor type + * + * @return This function returns TRUE on success, or false on failure. + * @param[in] tapi_flavor_type the tapi flavor type + * @param[out] ciss_flavor_type the ciss flavor type + */ +int _ciss_get_barring_flavor_type(TelSsCallBarType_t in_flavor, ciss_flavor_t *out_flavor); + +/** + * This function gets the ciss status type from the tapi status type + * + * @return This function returns TRUE on success, or false on failure. + * @param[in] tapi_status_type the tapi status type. + * @param[out] ciss_status_type the ciss status type. + */ +int _ciss_get_result_status_type(TelSsStatus_t in_status, ciss_status_t *out_status); + +/** + * This function gets the ciss indication type from the tapi indication type + * + * @return This function returns TRUE on success, or false on failure. + * @param[in] tapi_indtype the tapi indication type. + * @param[out] p_ind_type the ciss indication type. + */ +int _ciss_get_requested_tapi_ussd_ind_type(ciss_ussd_ind_type_t *p_ind_type, TelSsUssdIndType_t tapi_indtype); + +void _ciss_ui_mmi_get_service_name(ciss_service_t in_service, char *service_name); +void _ciss_ui_mmi_get_flavor_name(ciss_flavor_t in_flavor, char *flavor_name); +void _ciss_ui_mmi_get_bearer_name(ciss_service_t ss_type, ciss_telecomm_svc_t in_teleservice, char *teleservice_name); +void _ciss_ui_mmi_get_result_status_type(ciss_service_t ss_type, ciss_status_t result_status, char *szResult); +#endif /* _CISS_CONVERTER_MMI_H_ */ diff --git a/include/ciss-debug.h b/include/ciss-debug.h new file mode 100755 index 0000000..02dd6aa --- /dev/null +++ b/include/ciss-debug.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * This file is part of + * Written by , + * + * PROPRIETARY/CONFIDENTIAL + * + * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). + * You shall not disclose such Confidential Information and shall use it only in accordance + * with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. + * SAMSUNG make no representations or warranties about the suitability of the software, + * either express or implied, including but not limited to the implied warranties of merchantability, + * fitness for a particular purpose, or non-infringement. + * SAMSUNG shall not be liable for any damages suffered by licensee as a result of using, + * modifying or distributing this software or its derivatives. + * + */ + +#include +#ifndef CISS_LOG_TAG +#define CISS_LOG_TAG "CISS" +#endif + +#define DBG(fmt, arg...) \ + do { \ + LOG(LOG_INFO, CISS_LOG_TAG, "[CISS][%s:%d] "fmt"\n", __func__, __LINE__, ##arg); \ + } while(0) + +#define ERR(fmt, arg...) \ + do { \ + LOGE(""fmt"\n", ##arg); \ + } while(0) + +# define warn_if(expr, fmt, arg...) do { \ + if(expr) { \ + DBG("(%s) -> "fmt, #expr, ##arg); \ + } \ + } while (0) +# define ret_if(expr) do { \ + if(expr) { \ + DBG("(%s) -> %s() return", #expr, __FUNCTION__); \ + return; \ + } \ + } while (0) +# define retv_if(expr, val) do { \ + if(expr) { \ + DBG("(%s) -> %s() return", #expr, __FUNCTION__); \ + return (val); \ + } \ + } while (0) +# define retm_if(expr, fmt, arg...) do { \ + if(expr) { \ + ERR(fmt, ##arg); \ + DBG("(%s) -> %s() return", #expr, __FUNCTION__); \ + return; \ + } \ + } while (0) +# define retvm_if(expr, val, fmt, arg...) do { \ + if(expr) { \ + ERR(fmt, ##arg); \ + DBG("(%s) -> %s() return", #expr, __FUNCTION__); \ + return (val); \ + } \ + } while (0) + diff --git a/include/ciss-parser.h b/include/ciss-parser.h new file mode 100755 index 0000000..ed9c767 --- /dev/null +++ b/include/ciss-parser.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * This file is part of + * Written by , + * + * PROPRIETARY/CONFIDENTIAL + * + * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). + * You shall not disclose such Confidential Information and shall use it only in accordance + * with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. + * SAMSUNG make no representations or warranties about the suitability of the software, + * either express or implied, including but not limited to the implied warranties of merchantability, + * fitness for a particular purpose, or non-infringement. + * SAMSUNG shall not be liable for any damages suffered by licensee as a result of using, + * modifying or distributing this software or its derivatives. + * + */ + +#ifndef _CISS_PARSE_MMI_H_ +#define _CISS_PARSE_MMI_H_ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#include "ITapiSs.h" +#include "ciss-common.h" +#include + +#define ISDIGIT(X) ((X >= '0') && (X <= '9')) +#define ISUSSDDIGIT(X) ((X >= '2') && (X <= '9')) +#define MAX_DIALED_DIGITS 160 + +/*************************************************************************** + * Macros + **************************************************************************/ +/* user inputs for supplementary services */ + +#define MAX_SIA_LEN 40 +#define MAX_SIB_LEN 4 /* PWD LEN */ +#define MAX_SIC_LEN 4 /* PWD LEN */ + +#define NULL_SS_OPERATION 0xff + +/** + * This function processes the responses from telephony based on the current state + * + * @return Returns TRUE if request is successfully processed else false + * @param[in] this Pointer to the engine state + * @param[in] req_string string to be processed + */ +int _ciss_parse_req_string(char *req_string, ciss_mmi_context_t *mmi_ctx); + +#endif /* _CISS_PARSE_MMI_H_ */ + diff --git a/include/ciss-resp.h b/include/ciss-resp.h new file mode 100755 index 0000000..3c0128f --- /dev/null +++ b/include/ciss-resp.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * This file is part of + * Written by , + * + * PROPRIETARY/CONFIDENTIAL + * + * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). + * You shall not disclose such Confidential Information and shall use it only in accordance + * with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. + * SAMSUNG make no representations or warranties about the suitability of the software, + * either express or implied, including but not limited to the implied warranties of merchantability, + * fitness for a particular purpose, or non-infringement. + * SAMSUNG shall not be liable for any damages suffered by licensee as a result of using, + * modifying or distributing this software or its derivatives. + * + */ + +#ifndef _CISS_MMI_RESP_H_ +#define _CISS_MMI_RESP_H_ + +#include +#include + +Evas_Object *_ciss_create_ss_resp_view(Evas_Object *parent, TelSsInfo_t *ss_info, void *data); + +#endif + diff --git a/include/ciss-respnd.h b/include/ciss-respnd.h new file mode 100755 index 0000000..f4eacfc --- /dev/null +++ b/include/ciss-respnd.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * This file is part of + * Written by , + * + * PROPRIETARY/CONFIDENTIAL + * + * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). + * You shall not disclose such Confidential Information and shall use it only in accordance + * with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. + * SAMSUNG make no representations or warranties about the suitability of the software, + * either express or implied, including but not limited to the implied warranties of merchantability, + * fitness for a particular purpose, or non-infringement. + * SAMSUNG shall not be liable for any damages suffered by licensee as a result of using, + * modifying or distributing this software or its derivatives. + * + */ + +#ifndef _CISS_MMI_RESPND_H_ +#define _CISS_MMI_RESPND_H_ + +#include +#include +#include "ciss-ussd.h" + +void _ciss_create_respond_view(void *data); + +#endif + diff --git a/include/ciss-string.h b/include/ciss-string.h new file mode 100755 index 0000000..0cd224c --- /dev/null +++ b/include/ciss-string.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * This file is part of + * Written by , + * + * PROPRIETARY/CONFIDENTIAL + * + * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). + * You shall not disclose such Confidential Information and shall use it only in accordance + * with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. + * SAMSUNG make no representations or warranties about the suitability of the software, + * either express or implied, including but not limited to the implied warranties of merchantability, + * fitness for a particular purpose, or non-infringement. + * SAMSUNG shall not be liable for any damages suffered by licensee as a result of using, + * modifying or distributing this software or its derivatives. + * + */ + +#define CISS_STR_ALL_CALLS _("IDS_CST_BODY_ALL_CALLS") +#define CISS_STR_CALL_DIVERTING _("IDS_CST_BODY_CALL_DIVERTING") +#define CISS_STR_CALL_BARRING _("IDS_CST_BODY_CALL_BARRING") +#define CISS_STR_CALL_WAITING _("IDS_CST_BODY_CALL_WAITING") +#define CISS_STR_SERVICE_UNAVAILABLE _("IDS_CST_POP_SERVICE_UNAVAILABLE") + +#define CISS_STR_SERVICE_NOT_AUTHORISED _("IDS_CST_POP_SERVICE_NOT_AUTHORISED") +#define CISS_STR_PASSWORD_BLOCKED _("IDS_CST_POP_PASSWORD_BLOCKED") +#define CISS_STR_INVALID_PASSWORD _("IDS_CST_POP_INVALID_PASSWORD") +#define CISS_STR_REJECTED_BY_NETWORK _("IDS_CST_POP_REJECTED_BY_NETWORK") +#define CISS_STR_REQUESTING _("IDS_CST_POP_REQUESTING_ING") + +#define CISS_STR_ALL_ASYNCHRONOUS_DATA _("IDS_CST_POP_ALL_ASYNCHRONOUS_DATA") +#define CISS_STR_ALL_BEARER_SERVICES _("IDS_CST_POP_ALL_BEARER_SERVICES") +#define CISS_STR_ALL_DATA_SERVICES _("IDS_CST_POP_ALL_DATA_SERVICES") +#define CISS_STR_ALL_PADCA_SERVICES _("IDS_CST_POP_ALL_PADCA_SERVICES") +#define CISS_STR_ALL_PDS_SERVICES _("IDS_CST_POP_ALL_PDS_SERVICES") +#define CISS_STR_ALL_PLMN_BEARERS _("IDS_CST_POP_ALL_PLMN_BEARERS") +#define CISS_STR_ALL_SERVICES _("IDS_CST_POP_ALL_SERVICES") +#define CISS_STR_ALL_SYNCHRONOUS_SERVICES _("IDS_CST_POP_ALL_SYNCHRONOUS_SERVICES") +#define CISS_STR_ALL_TELECOM_SERVICES _("IDS_CST_POP_ALL_TELECOM_SERVICES") +#define CISS_STR_ASYNCHRONOUS_DATA_SERVICES _("IDS_CST_POP_ASYNCHRONOUS_DATA_SERVICES") +#define CISS_STR_FOR_ALL_TELE_SERVICES_EXCEPT_SMS _("IDS_COM_POP_FOR_ALL_TELE_SERVICES_EXCEPT_SMS") +#define CISS_STR_FAX _("IDS_CST_BODY_FAX") + +#define CISS_STR_ENTER_NUMBER _("IDS_CST_BODY_ENTER_NUMBER") +#define CISS_STR_QUIT dgettext("sys_string", "IDS_COM_SK_QUIT") +#define CISS_STR_CALLER_ID_SHOWN _("IDS_CST_POP_CALLER_ID_SHOWN") +#define CISS_STR_CALLER_ID_HIDDEN _("IDS_CST_POP_CALLER_ID_HIDDEN") +#define CISS_STR_MY_CALLER_ID_IS_NOT_SENT_WHEN_CALLING _("IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_CALLING") +#define CISS_STR_MY_CALLER_ID_WILL_BE_SENT_WHEN_CALLING _("IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_CALLING") +#define CISS_STR_MY_CALLER_ID_WILL_BE_SENT_WHEN_ANSWERING_CALLS _("IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_ANSWERING_CALLS") +#define CISS_STR_MY_CALLER_ID_IS_NOT_SENT_WHEN_ANSWERING_CALLS _("IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_ANSWERING_CALLS") +#define CISS_STR_ANSWERING_NUMBER_IS_SHOWN_WHEN_CALLING _("IDS_CST_POP_ANSWERING_NUMBER_IS_SHOWN_WHEN_CALLING") +#define CISS_STR_ANSWERING_NUMBER_IS_NOT_SHOWN_WHEN_CALLING _("IDS_CST_POP_ANSWERING_NUMBER_IS_NOT_SHOWN_WHEN_CALLING") +#define CISS_STR_CALLER_ID_AVAILABLE _("IDS_CST_POP_CALLER_ID_AVAILABLE") +#define CISS_STR_CALLER_ID_RESTRICTED _("IDS_CST_POP_CALLER_ID_RESTRICTED") +#define CISS_STR_CHANGE_PASSWORD _("IDS_CST_OPT_CHANGE_PASSWORD") +#define CISS_STR_CALL_DIVERTING_ACTIVE_C_ALWAYS _("IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_ALWAYS") +#define CISS_STR_CALL_DIVERTING_ACTIVE_C_WHEN_NOREPLY _("IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_NO_ANSWER") +#define CISS_STR_CALL_DIVERTING_ACTIVE_C_WHEN_BUSY _("IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_WHEN_BUSY") +#define CISS_STR_CALL_DIVERTING_ACTIVE_C_UNREACHABLE _("IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_UNREACHABLE") + +#define CISS_STR_CONDITIONAL _("IDS_CST_HEADER_CONDITIONAL") +#define CISS_STR_ALL_OUTGOING_CALLS_BARRED _("IDS_CALL_POP_ALL_OUTGOING_CALLS_BARRED") +#define CISS_STR_OUTGOING_INTERNATIONAL_CALLS_BARRED _("IDS_CALL_POP_OUTGOING_INTER_CALLS_BARRED") +#define CISS_STR_OUTGOING_INTERNATIONAL_CALLS_EXCEPT_HOME_BARRED _("IDS_CALL_POP_OUTGOING_INTERNATIONAL_CALLS_EXCEPT_HOME_BARRED") +#define CISS_STR_ALL_INCOMING_CALLS_BARRED _("IDS_CALL_POP_ALL_INCOMING_CALLS_BARRED") +#define CISS_STR_INCOMING_CALLS_BARRED_WHEN_ROAMING _("IDS_CALL_POP_INCOMING_CALLS_BARRED_WHEN_ROAMING") +#define CISS_STR_ALL_BARRING _("IDS_ST_POP_ALL_BARRING") +#define CISS_STR_OUTGOING_BARRING _("IDS_ST_POP_OUTGOING_BARRING") +#define CISS_STR_INCOMING_BARRING _("IDS_ST_POP_INCOMING_BARRING") + +#define CISS_STR_SUCCESS dgettext("sys_string", "IDS_COM_POP_SUCCESS") +#define CISS_STR_REPLY dgettext("sys_string", "IDS_COM_SK_REPLY") +#define CISS_STR_ACTIVATED dgettext("sys_string", "IDS_COM_BODY_ACTIVATED") +#define CISS_STR_DEACTIVATED dgettext("sys_string", "IDS_COM_POP_DEACTIVATED") +#define CISS_STR_VOICE dgettext("sys_string", "IDS_COM_BODY_VOICE") +#define CISS_STR_VIDEO dgettext("sys_string", "IDS_COM_BODY_VIDEO") +#define CISS_STR_SMS dgettext("sys_string", "IDS_COM_BODY_SMS") +#define CISS_STR_NETWORK_ERROR dgettext("sys_string", "IDS_COM_POP_NETWORK_ERROR") +#define CISS_STR_INFORMATION dgettext("sys_string", "IDS_COM_BODY_INFORMATION") diff --git a/include/ciss-tapi-request.h b/include/ciss-tapi-request.h new file mode 100755 index 0000000..24532bc --- /dev/null +++ b/include/ciss-tapi-request.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * This file is part of + * Written by , + * + * PROPRIETARY/CONFIDENTIAL + * + * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). + * You shall not disclose such Confidential Information and shall use it only in accordance + * with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. + * SAMSUNG make no representations or warranties about the suitability of the software, + * either express or implied, including but not limited to the implied warranties of merchantability, + * fitness for a particular purpose, or non-infringement. + * SAMSUNG shall not be liable for any damages suffered by licensee as a result of using, + * modifying or distributing this software or its derivatives. + * + */ + +#ifndef _CISS_MMI_TAPI_EVENTS_H_ +#define _CISS_MMI_TAPI_EVENTS_H_ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#include "ciss-types.h" +#include "ciss-common.h" +#include +#include + +/** + * This function sends request to the TAPI + * + * @return This function returns CISS_ERR_NONE on success, or error type on failure. + * @param[in] ciss_mmi_context_t the ciss mmi context type + */ + +int _ciss_tapi_event_setup(struct appdata *ad); + +void _ciss_deregister_tel_event(void); + +ciss_err_t _ciss_send_tapi_request(ciss_mmi_context_t *mmi_ctx); + +int _ciss_on_tapi_ss_event(const TelTapiEvent_t *event, void *data); +int _ciss_on_tapi_ss_rel_complete_noti(const TelTapiEvent_t *event, void *data); +int _ciss_on_tapi_ussd_event(const TelTapiEvent_t *event, void *data); +int _ciss_on_tapi_sat_ss_event(const TelTapiEvent_t *event, void *data); +int _ciss_on_tapi_sat_ussd_event(const TelTapiEvent_t *event, void *data); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* _CISS_TAPI_EVENTS_H_ */ + diff --git a/include/ciss-types.h b/include/ciss-types.h new file mode 100755 index 0000000..c38d622 --- /dev/null +++ b/include/ciss-types.h @@ -0,0 +1,451 @@ +/* + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * This file is part of + * Written by , + * + * PROPRIETARY/CONFIDENTIAL + * + * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). + * You shall not disclose such Confidential Information and shall use it only in accordance + * with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. + * SAMSUNG make no representations or warranties about the suitability of the software, + * either express or implied, including but not limited to the implied warranties of merchantability, + * fitness for a particular purpose, or non-infringement. + * SAMSUNG shall not be liable for any damages suffered by licensee as a result of using, + * modifying or distributing this software or its derivatives. + * + */ + +#ifndef _CISS_ENGINE_TYPES_H_ +#define _CISS_ENGINE_TYPES_H_ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#define MID_CISS 0x201E0012 +#define CISS_MODULE_ID 22 +#define CISS_NUMBER_LEN_MAX 40 /**< Maximum length of number */ +#define CISS_MAX_PASSWORD_LEN 4 /**< Maximum length of barring password */ +#define CISS_STR_BUFFER_MAX 70 /**< Maximum size of string buffer */ +#define CISS_TEXT_LEN_MAX 150 /**< Maximum lenght of text for application */ +#define CISS_CALL_NUMBER_LEN_MAX 80 /**< Maximum call number length */ +#define CISS_MAX_SS_RECORDS 8 /**< Maximum number of SS records */ +#define CISS_USSD_DATA_SIZE_MAX 208 /**< Maximum length of USSD data */ +#define CISS_DIVERT_NUMBER_LEN_MAX 32 /**< Maximum length of Divert to number */ +#define CISS_TAPI_NW_USSD_HANDLE 255 /**< Mapped to the OEM_INVALID_REQUEST_ID of Tapi - OemTapiCommon.h*/ + +#ifdef CISS_SYSLOG +#define CISS_ENG_LEVEL_DEBUG LOG_DEBUG /**< Messages that contain information normally of use only when debugging a program */ +#define CISS_ENG_LEVEL_INFO LOG_INFO /**< Informational messages.*/ +#define CISS_ENG_LEVEL_NOTICE LOG_NOTICE /**< Conditions that are not error conditions, but should possibly be handled specially.*/ +#define CISS_ENG_LEVEL_WARNING LOG_WARNING /**< Warning messages.*/ +#define CISS_ENG_LEVEL_ERR LOG_ERR /**< Errors. */ +#define CISS_ENG_LEVEL_CRIT LOG_CRIT /**< Critical conditions, e.g., hard device errors. */ +#define CISS_ENG_LEVEL_ALERT LOG_ALERT /**< A condition that should be corrected immediately, such as a corrupted system database. */ +#define CISS_ENG_LEVEL_EMERG LOG_EMERG /**< A panic condition. This is normally broadcast to all users. */ +#elif CISS_DEBUG_MESSAGE +#define CISS_ENG_LEVEL_DEBUG DEBUG_VERBOSE +#define CISS_ENG_LEVEL_INFO DEBUG_VERBOSE +#define CISS_ENG_LEVEL_NOTICE DEBUG_VERBOSE +#define CISS_ENG_LEVEL_WARNING DEBUG_EXCEPTION +#define CISS_ENG_LEVEL_ERR DEBUG_EXCEPTION +#define CISS_ENG_LEVEL_CRIT DEBUG_ASSERT +#define CISS_ENG_LEVEL_ALERT DEBUG_EXCEPTION +#define CISS_ENG_LEVEL_EMERG DEBUG_EXCEPTION +#else +#define CISS_ENG_LEVEL_DEBUG LOG_DEBUG /**< Messages that contain information normally of use only when debugging a program */ +#define CISS_ENG_LEVEL_INFO LOG_INFO /**< Informational messages.*/ +#define CISS_ENG_LEVEL_NOTICE LOG_NOTICE /**< Conditions that are not error conditions, but should possibly be handled specially.*/ +#define CISS_ENG_LEVEL_WARNING LOG_WARNING /**< Warning messages.*/ +#define CISS_ENG_LEVEL_ERR LOG_ERR /**< Errors. */ +#define CISS_ENG_LEVEL_CRIT LOG_CRIT /**< Critical conditions, e.g., hard device errors. */ +#define CISS_ENG_LEVEL_ALERT LOG_ALERT /**< A condition that should be corrected immediately, such as a corrupted system database. */ +#define CISS_ENG_LEVEL_EMERG LOG_EMERG /**< A panic condition. This is normally broadcast to all users. */ +#endif + +/* Levels re used to configure syslogd at run time. Refer man syslog.conf */ +#ifdef CISS_SYSLOG +#define CISS_ENG_DEBUG(level, args...) \ + syslog(LOG_USER | level, "File: %s, Func: %s, Line#: %d", __FILE__, __func__, __LINE__); \ + syslog(LOG_USER | level, args); +#elif CISS_DEBUG_MESSAGE +#define CISS_ENG_DEBUG(level, args...) \ + debug_message(MID_CISS, level, "\n[Ciss-Engine]:[%s]:[%s] Line#%d:\n", __FILE__, __func__, __LINE__); \ + debug_message(MID_CISS, level, args); +#else +#define CISS_ENG_DEBUG(level, args...) \ + fprintf(stderr, "\nFile: %s, Func: %s, Line#: %d\n", __FILE__, __func__, __LINE__); \ + fprintf(stderr, args) +#endif + +#if defined(CISS_DEBUG_MESSAGE) +#define CISS_ASSERT(condition) \ + if(!(condition)) \ + debug_message(CISS_MODULE_ID, DEBUG_ASSERT, ""); \ + +#else +#define CISS_ASSERT(condition) assert(condition) + +#endif + +#ifndef true +#define true 1 +#endif + +#ifndef false +#define false 0 +#endif + + +/** + * This enumeration defines the error codes returned from engine to UI + */ +typedef enum { + CISS_ERR_NONE = 0x00, /**< numberOfPW_AttemptsViolation*/ + + /*NETWORK ERRORS*/ + CISS_ERR_UNKNOWN_SUBSCRIBER = 0x01, /**< unknownSubscriber "Invalid User Number" */ + CISS_ERR_BEARER_NOT_PROVISIONED = 0x02, /**< BearerServiceNotProvisioned "Request Rejected" */ + CISS_ERR_TELESERVICE_NOT_PROVISIONED = 0x03, /**< TeleServiceNotProvisioned */ + CISS_ERR_CALL_BARRED = 0x04, /**< CallBarred */ + CISS_ERR_ILLEGAL_SS_OPER = 0x05, /**< illegalSS_Operation */ + CISS_ERR_ERR_STATUS = 0x06, /**< ss_ErrorStatus */ + CISS_ERR_NOT_AVAIL = 0x07, /**< ss_NotAvailable "Service not available" */ + CISS_ERR_SUBSCRIPTION_VIOLATION = 0x08, /**< ss_SubscriptionViolation */ + CISS_ERR_INCOMPATIBILITY = 0x09, /**< ss_Incompatibility */ + CISS_ERR_FACILITY_NOT_SUPPORT = 0x0a, /**< FacilityNotSupported */ + CISS_ERR_SYS_FAILURE = 0x0b, /**< "SystemFailure "Please try again" */ + CISS_ERR_DATA_MISSING = 0x0c, /**< DataMissing */ + CISS_ERR_UNEXPECTED_DATA = 0x0d, /**< UnexpectedDataValue 0x13 */ + CISS_ERR_MPTY_PARTICIPANTS_EXCEED = 0x0e, /**< maxNumberOfMPTY_ParticipantsExceeded */ + CISS_ERR_RESOURCE_NOT_AVAIL = 0x0f, /**< ResourcesNotAvailable */ + CISS_ERR_PW_REGIST_FAIL = 0x10, /**< PasswordRegistrationFailure ( ex:password mismatch ) */ + CISS_ERR_NEGATIVE_PW_CHECK = 0x11, /**< NegativePasswordCheck */ + CISS_ERR_PW_ATTEMPS_VIOLATION = 0x12, /**< numberOfPW_AttemptsViolation*/ + + /*PHONE ERRORS*/ + CISS_ERR_NETWORK_API_FAILED = 0x13, /**< Telephony API call failed*/ + CISS_ERR_DIVERT_TO_EMERGENCY_BLOCKED = 0x14, /**< Call diverting to an emergency number not allowed*/ + + /* Call barring password mismatch errors */ + CISS_ERR_CB_PWD_TOO_SORT = 0x15, /**< Password is too short - less than 4 characters*/ + CISS_ERR_CB_PWD_MISMATCH = 0x16, /**< Password do not match - unequal password*/ + CISS_ERR_CB_PWD_TOO_LONG = 0x17, /**< Password is too long - greater than 4 characters*/ + + CISS_ERR_UNKNOWN = 0xff, /**< unknown error*/ + +} ciss_err_t; + +/** + * This enumeration defines the request types made to the engine + */ +typedef enum { + CISS_REQUEST_SET_INITIALIZE = 0x100, /**< Initialize*/ + CISS_REQUEST_SS_SEND_STRING = 0x101, /**< parse MMI string into SS/USSD request*/ + CISS_REQUEST_SS_SEND_DATA = 0x102, /**< Send SS data to network*/ + CISS_REQUEST_SAT_SEND_SS = 0x103, /**< SS request by SAT*/ + CISS_REQUEST_SAT_SEND_USSD = 0x104, /**< USSD request by SAT*/ + CISS_REQUEST_SS_SEND_USSD_RESP = 0x105 /**< Send USSD response to network*/ +} ciss_request_type_t; + +/** + * This enumeration defines the results of call control + */ +typedef enum { + CISS_CALL_CONTROL_ALLOWED_NO_MOD = 0x00, /**< call is allowed with no modification*/ + CISS_CALL_CONTROL_NOT_ALLOWED = 0x01, /**< call is not allowed*/ + CISS_CALL_CONTROL_ALLOWED_WITH_MOD = 0x02 /**< call is allowed with modification*/ +} ciss_call_control_result_t; + +/** + * This enumeration defines the response codes returned from engine to UI + */ +typedef enum { + CISS_UI_RESPONSE_NETWORK_RESPONSE = 0x00, /**< response from network*/ + CISS_UI_RESPONSE_USSD_NW_RESPONSE = 0x01, /**< ussd network response*/ + CISS_UI_RESPONSE_CALL_CONTROL = 0x02, /**< call control resposne*/ + CISS_UI_RESPONSE_NETWORK_TIMEOUT = 0x03, /**< request timer expired*/ + CISS_UI_RESPONSE_ERROR = 0x04, /**< error from network*/ + CISS_UI_RESPONSE_SAT_REQUEST_DONE = 0x05, /**< notify UI that engine has finished a SAT request*/ + CISS_UI_RESPONSE_SAT_REQUEST_START = 0x06, /**< notify UI that engine has started a SAT request*/ + CISS_UI_RESPONSE_CHECK_APPLET = 0x07 /**< end app response */ +} ciss_ui_response_type_t; + +/** + * This enumeration defines the various SS services handled by the engine + */ +typedef enum { + CISS_SERVICE_DIVERTING = 0x00, /**< Call diverting/forwarding*/ + CISS_SERVICE_BARRING = 0x01, /**< call barring*/ + CISS_SERVICE_WAITING = 0x02, /**< call waiting*/ + CISS_SERVICE_CHANGE_BARRING_PASSWD = 0x03, /**< change barring password*/ + CISS_SERVICE_USSD = 0x04, /**< USSD*/ + CISS_SERVICE_IDENTIFICATION = 0x05 /**< clip, clir, colp, colr, cnap*/ +} ciss_service_t; + +/** + * This enumeration defines the telecomm services handled by the engine + */ +typedef enum +{ + CISS_TELECOMM_SVC_NONE, /**<0 : None */ + CISS_TELECOMM_SVC_ALL_TELE_BEARER, /**<1 : All Tele and Bearer services */ + + /* TELESERVICE */ + CISS_TELECOMM_SVC_ALL_TELE, /**<2 : All Teleservices */ + CISS_TELECOMM_SVC_VOICE, /**<3 : All Voice ( telephony ) */ + CISS_TELECOMM_SVC_ALL_DATA_TELE, /**<4 : All Data Teleservices */ + CISS_TELECOMM_SVC_FAX, /**<5 : All Fax Service */ + CISS_TELECOMM_SVC_SMS, /**<6 : SMS service */ + CISS_TELECOMM_SVC_VGCS, /**<7 : Voice Group Call Service */ + CISS_TELECOMM_SVC_VBS, /**<8 : Voice Broadcast */ + CISS_TELECOMM_SVC_ALL_TELE_EXPT_SMS, /**<9 : All teleservice except SMS */ + + /* BEARER SERVICE */ + CISS_TELECOMM_SVC_ALL_BEARER, /**<10 : all bearer services */ + CISS_TELECOMM_SVC_ALL_ASYNC, /**<11 : All Async services */ + CISS_TELECOMM_SVC_ALL_SYNC, /**<12 : All sync services*/ + CISS_TELECOMM_SVC_ALL_CS_SYNC, /**<13 : All Circuit switched sync */ + CISS_TELECOMM_SVC_ALL_CS_ASYNC, /**<14 : All Circuit switched async */ + CISS_TELECOMM_SVC_ALL_DEDI_PS, /**<15 : All Dedicated packet Access */ + CISS_TELECOMM_SVC_ALL_DEDI_PAD, /**<16 : All Dedicated PAD Access */ + CISS_TELECOMM_SVC_ALL_DATA_CDA, /**<17 : All Data CDA*/ + + /* PLMN SPECIFIC TELESERVICE */ + CISS_TELECOMM_SVC_PLMN_TELE_ALL, /**<18 : PLMN specific teleservices*/ + CISS_TELECOMM_SVC_PLMN_TELE_1, /**<19 : PLMN specific teleservice 1*/ + CISS_TELECOMM_SVC_PLMN_TELE_2, /**<20 : PLMN specific teleservice 2*/ + CISS_TELECOMM_SVC_PLMN_TELE_3, /**<21 : PLMN specific teleservice 3*/ + CISS_TELECOMM_SVC_PLMN_TELE_4, /**<22 : PLMN specific teleservice 4*/ + CISS_TELECOMM_SVC_PLMN_TELE_5, /**<23 : PLMN specific teleservice 5*/ + CISS_TELECOMM_SVC_PLMN_TELE_6, /**<24 : PLMN specific teleservice 6*/ + CISS_TELECOMM_SVC_PLMN_TELE_7, /**<25 : PLMN specific teleservice 7*/ + CISS_TELECOMM_SVC_PLMN_TELE_8, /**<26 : PLMN specific teleservice 8*/ + CISS_TELECOMM_SVC_PLMN_TELE_9, /**<27 : PLMN specific teleservice 9*/ + CISS_TELECOMM_SVC_PLMN_TELE_A, /**<28 : PLMN specific teleservice 10*/ + CISS_TELECOMM_SVC_PLMN_TELE_B, /**<29 : PLMN specific teleservice 11*/ + CISS_TELECOMM_SVC_PLMN_TELE_C, /**<30 : PLMN specific teleservice 12*/ + CISS_TELECOMM_SVC_PLMN_TELE_D, /**<31 : PLMN specific teleservice 13*/ + CISS_TELECOMM_SVC_PLMN_TELE_E, /**<32 : PLMN specific teleservice 14*/ + CISS_TELECOMM_SVC_PLMN_TELE_F, /**<33 : PLMN specific teleservice 15*/ + + /* PLMN SPECIFIC BEARER SERVICE */ + CISS_TELECOMM_SVC_PLMN_BEAR_ALL, /**<34 : All PLMN specific bearer services*/ + CISS_TELECOMM_SVC_PLMN_BEAR_1, /**<35 : PLMN specific bearer service 1*/ + CISS_TELECOMM_SVC_PLMN_BEAR_2, /**<36 : PLMN specific bearer service 2*/ + CISS_TELECOMM_SVC_PLMN_BEAR_3, /**<37 : PLMN specific bearer service 3*/ + CISS_TELECOMM_SVC_PLMN_BEAR_4, /**<38 : PLMN specific bearer service 4*/ + CISS_TELECOMM_SVC_PLMN_BEAR_5, /**<39 : PLMN specific bearer service 5*/ + CISS_TELECOMM_SVC_PLMN_BEAR_6, /**<40 : PLMN specific bearer service 6*/ + CISS_TELECOMM_SVC_PLMN_BEAR_7, /**<41 : PLMN specific bearer service 7*/ + CISS_TELECOMM_SVC_PLMN_BEAR_8, /**<42 : PLMN specific bearer service 8*/ + CISS_TELECOMM_SVC_PLMN_BEAR_9, /**<43 : PLMN specific bearer service 9*/ + CISS_TELECOMM_SVC_PLMN_BEAR_A, /**<44 : PLMN specific bearer service 10*/ + CISS_TELECOMM_SVC_PLMN_BEAR_B, /**<45 : PLMN specific bearer service 11*/ + CISS_TELECOMM_SVC_PLMN_BEAR_C, /**<46 : PLMN specific bearer service 12*/ + CISS_TELECOMM_SVC_PLMN_BEAR_D, /**<47 : PLMN specific bearer service 13*/ + CISS_TELECOMM_SVC_PLMN_BEAR_E, /**<48 : PLMN specific bearer service 14*/ + CISS_TELECOMM_SVC_PLMN_BEAR_F, /**<49 : PLMN specific bearer service 15*/ + + /* CPHS - AUXILIARY SERVICE */ + CISS_TELECOMM_SVC_AUX_VOICE, /**<50 : All Auxiliary Voice ( Auxiliary telephony ) */ + + CISS_TELECOMM_SVC_ALL_GPRS_BEARER, /**<51 : All GPRS bearer services */ + CISS_TELECOMM_SVC_MAX /**<52 : Max count */ +} ciss_telecomm_svc_t; + +/** + * This enumeration defines the various flavors of SS handled by the engine + */ +typedef enum { +/* Divert Flavor */ + CISS_FLAVOR_NONE = 0x00, /**< None*/ + CISS_FLAVOR_DIVERT_START = 0x01, /**< Divert start*/ + CISS_FLAVOR_DIVERT_UNCONDITIONAL = 0x02, /**< Divert unconditional*/ + CISS_FLAVOR_DIVERT_BUSY = 0x03, /**< Divert if busy*/ + CISS_FLAVOR_DIVERT_NOREPLY = 0x04, /**< Divert if no reply*/ + CISS_FLAVOR_DIVERT_UNREACHABLE = 0x05, /**< Divert if unreachable*/ + CISS_FLAVOR_DIVERT_CANCELALL = 0x06, /**< Cancel all diverting*/ + CISS_FLAVOR_BARRING_CANCELALL = 0x07, /**< Cancel all barring*/ + + CISS_FLAVOR_DIVERT_ALL_FLAVORS = 0x08, /**< Deregistration( NETWORK_DIVERT_UNIVERSAL) */ + CISS_FLAVOR_DIVERT_ALL_CONDITIONAL_FLAVORS = 0x09, /**< Divert all conditional */ + +/* Barring Flavor */ + CISS_FLAVOR_BARRING_START = 0x10, /**< Barring start*/ + CISS_FLAVOR_BARRING_ALL_OUTGOING_CALLS = 0x11, /**< bar all outgoing calls*/ + CISS_FLAVOR_BARRING_ALL_OUTGOING_INTERNATIONAL = 0x12, /**< bar all outgoing international calls*/ + CISS_FLAVOR_BARRING_OUTGOING_INTERNATIONAL_CALLS_EXCEPT_HOME = 0x13, /**< bar all outgoing international calls except those to home country*/ + + CISS_FLAVOR_BARRING_ALL_INCOMING_CALLS = 0x14, /**< bar all incoming calls*/ + CISS_FLAVOR_BARRING_INCOMING_CALLS_WHEN_ROAMING = 0x15, /**< bar all incoming calls when roaming*/ + CISS_FLAVOR_BARRING_ALL_FLAVORS = 0x16, /**< includes all other flavors. Used for Cancel All */ + CISS_FLAVOR_BARRING_OUTGOING = 0x17, /**< bar all outgoing flavors*/ + CISS_FLAVOR_BARRING_INCOMING = 0x18, /**< bar all incoming flavors*/ + CISS_FLAVOR_BARRING_END = 0x19, /**< Barring end*/ + + CISS_FLAVOR_WAITING = 0x20, /**< added for auto-check feature enable/disable*/ + CISS_FLAVOR_MAX /**< max*/ + +} ciss_flavor_t; + +/** + * This enumeration defines the various actions on a SS service + */ +typedef enum { + CISS_ACTION_NONE = -1, /**< None*/ + CISS_ACTION_CHECK_STATUS = 0x00, /**< check status*/ + CISS_ACTION_ACTIVATE = 0x01, /**< activate*/ + CISS_ACTION_DEACTIVATE = 0x02, /**< deactivate*/ + CISS_ACTION_MAX_NUM = 0xff /**< max*/ +} ciss_action_type_t; + +/** + * This enumeration defines whther the SS operation was a success or failure + */ +typedef enum { + CISS_RESP_SUCCESS = 0x00, /**< Success*/ + CISS_RESP_FAIL = 0x01 /**< Failure*/ +} ciss_response_status_t; + +/** + * This enumeration defines the status of the SS + */ +typedef enum { + CISS_STATUS_ACTIVE = 0x00, /**< Active*/ + CISS_STATUS_REGISTERED = 0x01, /**< Registered*/ + CISS_STATUS_PROVISIONED = 0x02, /**< Provisioned*/ + CISS_STATUS_QUIESCENT = 0x03, /**< Quiescent*/ + CISS_STATUS_NOTHING = 0x04 /**< Nothing*/ +} ciss_status_t; + +/** + * This enumeration defines the subscription type used by the engine to subscribe to notis + */ +typedef enum { + CISS_SUBSCRIPTION_TYPE_CALL_SETTINGS = 0x00, /**< Call settings.. minimal subscription*/ + CISS_SUBSCRIPTION_TYPE_MMI = 0x01, /**< For MMI string.. all events subscribed*/ + CISS_SUBSCRIPTION_TYPE_APP = 0x02 /**< CIss app.. all events subscribed*/ +} ciss_subscription_type_t; + +/** + * This enumeration defines the ussd indication type + */ +typedef enum { + CISS_USSD_NOTIFY = 0x00, /**< notify : to display ussd data to user. */ + CISS_USSD_IND_NO_ACTION_REQUIRE = 0x01, /** + * Written by , + * + * PROPRIETARY/CONFIDENTIAL + * + * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). + * You shall not disclose such Confidential Information and shall use it only in accordance + * with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. + * SAMSUNG make no representations or warranties about the suitability of the software, + * either express or implied, including but not limited to the implied warranties of merchantability, + * fitness for a particular purpose, or non-infringement. + * SAMSUNG shall not be liable for any damages suffered by licensee as a result of using, + * modifying or distributing this software or its derivatives. + * + */ + +#ifndef _CISS_MMI_USSD_H_ +#define _CISS_MMI_USSD_H_ + +#include +#include + +Evas_Object *_ciss_create_ussd_view(Evas_Object *parent, TelSsUssdMsgIndInfo_t *ussd_info, void *data); +void _ciss_ussd_quit_cb(void *data, Evas_Object *obj, void *event_info); +#endif + diff --git a/include/ciss-util.h b/include/ciss-util.h new file mode 100755 index 0000000..08f11fd --- /dev/null +++ b/include/ciss-util.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * This file is part of + * Written by , + * + * PROPRIETARY/CONFIDENTIAL + * + * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). + * You shall not disclose such Confidential Information and shall use it only in accordance + * with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. + * SAMSUNG make no representations or warranties about the suitability of the software, + * either express or implied, including but not limited to the implied warranties of merchantability, + * fitness for a particular purpose, or non-infringement. + * SAMSUNG shall not be liable for any damages suffered by licensee as a result of using, + * modifying or distributing this software or its derivatives. + * + */ + +#ifndef _CISS_UTIL_H_ +#define _CISS_UTIL_H_ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* + * Functions of safe copy of string by checking the destination buffer size + */ +char *_ciss_strcpy(char *pBuffer, int nBufCount, const char *pszString); + +/* + * Functions for swapping the strings + */ +void _ciss_util_swap(char *str1, char *str2); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* _CISS_UTIL_H_ */ + diff --git a/include/ciss-widget.h b/include/ciss-widget.h new file mode 100755 index 0000000..af1d81a --- /dev/null +++ b/include/ciss-widget.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * This file is part of + * Written by , + * + * PROPRIETARY/CONFIDENTIAL + * + * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). + * You shall not disclose such Confidential Information and shall use it only in accordance + * with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. + * SAMSUNG make no representations or warranties about the suitability of the software, + * either express or implied, including but not limited to the implied warranties of merchantability, + * fitness for a particular purpose, or non-infringement. + * SAMSUNG shall not be liable for any damages suffered by licensee as a result of using, + * modifying or distributing this software or its derivatives. + * + */ + +#ifndef _CISS_MMI_VIEW_UTILS_H_ +#define _CISS_MMI_VIEW_UTILS_H_ + +#include +#include +#include "ciss-types.h" + +#define SK_PORTRAIT_W (480) +#define SK_PORTRAIT_H (78) +#define SK_PORTRAIT_X (0) +#define SK_PORTRAIT_Y (722) + +#define TB_PORTRAIT_W (480) +#define TB_PORTRAIT_H (100) +#define TB_PORTRAIT_X (0) +#define TB_PORTRAIT_Y (0) + +typedef enum { + OK_ONLY_RIGHT, + BACK_ONLY, + CANCEL_REPLY, + BACK_REPLY, + BACK_MORE, + HIDE_BACK +} ciss_softkey_t; + +enum { + CISS_ICON_TYPE_NONE, + CISS_ICON_TYPE_ADD, + CISS_ICON_TYPE_EDIT, + CISS_ICON_TYPE_DONE, + CISS_ICON_TYPE_CANCEL, + CISS_ICON_TYPE_OTHERS, +}; + +Evas_Object *_ciss_create_noti_popup(Evas_Object *parent, + char *strtitle, char *strmsg, double t_timeout,void *data); +Evas_Object *_ciss_create_error_popup(Evas_Object *parent, + ciss_err_t ciss_error, double t_timeout,void *data); +Evas_Object *_ciss_create_popup(Evas_Object *parent, char *msg); +Evas_Object *_ciss_create_win(const char *name); +Evas_Object *_ciss_create_layout_main( Evas_Object* parent); +Evas_Object *_ciss_create_bg(Evas_Object *parent); +Evas_Object *_ciss_create_navi_control_bar(Evas_Object *parent, + char *label1, Evas_Smart_Cb cb1, + char *label2, Evas_Smart_Cb cb2, + void *data, Elm_Object_Item *navi_it, + Elm_Object_Item ** c_item); +Evas_Object *_cst_create_title_btn(Evas_Object *parent, + const char *text, Evas_Smart_Cb func, void *data); +void _ciss_remove_naviframe(Evas_Object *nf); + +/*Callback Functions */ +Eina_Bool _ciss_on_end_key_down(void *data, int type, void *event); +Evas_Object * _ciss_create_result_genlist(const char *result_str, int str_len, Evas_Object *nf, void *data); +void _ciss_geinlist_item_class_new(void *data); +void _ciss_geinlist_item_class_free(void *data); + +#endif + diff --git a/org.tizen.ciss.desktop.in b/org.tizen.ciss.desktop.in new file mode 100755 index 0000000..5371be8 --- /dev/null +++ b/org.tizen.ciss.desktop.in @@ -0,0 +1,12 @@ +Name=ciss +Type=Application +Exec=${PREFIX}/bin/ciss +Icon= +Network={True/False} +Comment= +MimeType= +X-Tizen-TaskManage=False +X-Tizen-Multiple=False +X-Tizen-Removable=False +Version=0.4.6 +NoDisplay=True diff --git a/packaging/org.tizen.ciss.spec b/packaging/org.tizen.ciss.spec new file mode 100755 index 0000000..77c6c29 --- /dev/null +++ b/packaging/org.tizen.ciss.spec @@ -0,0 +1,50 @@ +Name: org.tizen.ciss +Summary: CISS-MMI application +Version: 0.4.45 +Release: 1 +Group: devel +License: Samsung Proprietary License +Source0: %{name}-%{version}.tar.gz +BuildRequires: pkgconfig(appcore-efl) +BuildRequires: pkgconfig(elementary) +BuildRequires: pkgconfig(UI-idlecapture) +BuildRequires: pkgconfig(tapi) +BuildRequires: pkgconfig(utilX) +BuildRequires: pkgconfig(bundle) +BuildRequires: pkgconfig(aul) +BuildRequires: pkgconfig(dlog) + +BuildRequires: cmake +BuildRequires: gettext-tools +BuildRequires: edje-tools + +%description +CISS-MMI application. + +%prep +%setup -q + +%build + +%define PREFIX "/opt/apps/org.tizen.ciss" +%define RESDIR "/opt/apps/org.tizen.ciss/res" +%define DATADIR "/opt/apps/org.tizen.ciss/data" + +cmake . -DCMAKE_INSTALL_PREFIX=%{PREFIX} +make %{?jobs:-j%jobs} + +%install +%make_install + +%find_lang org.tizen.ciss + +%post +chown -R 5000:5000 /opt/apps/org.tizen.ciss/data + +%files -f org.tizen.ciss.lang +/opt/apps/org.tizen.ciss/bin/* +#/opt/apps/org.tizen.ciss/res/images/* +/opt/apps/org.tizen.ciss/res/edje/ciss-mmi.edj +/opt/apps/org.tizen.ciss/data +/opt/share/applications/* + diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt new file mode 100755 index 0000000..855bc7a --- /dev/null +++ b/po/CMakeLists.txt @@ -0,0 +1,24 @@ +# for i18n + +SET(POFILES de_DE.po el_GR.po en.po es_ES.po fr_FR.po it_IT.po ja_JP.po ko_KR.po nl_NL.po pt_PT.po ru_RU.po tr_TR.po zh_CN.po zh_HK.po zh_TW.po) + +SET(MSGFMT "/usr/bin/msgfmt") + +FOREACH(pofile ${POFILES}) + SET(pofile ${CMAKE_CURRENT_SOURCE_DIR}/${pofile}) + MESSAGE("PO: ${pofile}") + GET_FILENAME_COMPONENT(absPofile ${pofile} ABSOLUTE) + GET_FILENAME_COMPONENT(lang ${absPofile} NAME_WE) + SET(moFile ${CMAKE_CURRENT_BINARY_DIR}/${lang}.mo) + ADD_CUSTOM_COMMAND( + OUTPUT ${moFile} + COMMAND ${MSGFMT} -o ${moFile} ${absPofile} + DEPENDS ${absPofile} + ) + INSTALL(FILES ${moFile} + DESTINATION ${LOCALEDIR}/${lang}/LC_MESSAGES RENAME ${PROJECT_NAME}.mo) + SET(moFiles ${moFiles} ${moFile}) +ENDFOREACH(pofile) + +MESSAGE(".mo files: ${moFiles}") +ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles}) diff --git a/po/POTFILES.in b/po/POTFILES.in new file mode 100755 index 0000000..8ef333c --- /dev/null +++ b/po/POTFILES.in @@ -0,0 +1,30 @@ +# List of source files containing translatable strings. +ciss-0.c +answeringmode.c +autoreject.c +main.c +common_callback.c +cissUG-efl.c +autoreject_del.c +calldiverting-dialog.c +allcalls.c +callbarring.c +videocall.c +ciss_tel_request.c +ciss_helptext.c +prefixdialing_delete.c +callstatustone.c +ciss_common_draw_widget.c +ime-view.c +stack.c +rejectcall_message.c +rejectcall_message_del.c +voicecall.c +view.c +answeringmode_automatic.c +callbarring-dialog.c +db.c +alloutgoingcalls.c +showmynumber.c +calldiverting.c +prefixdialing.c diff --git a/po/de_DE.po b/po/de_DE.po new file mode 100755 index 0000000..52f341c --- /dev/null +++ b/po/de_DE.po @@ -0,0 +1,141 @@ +msgid "IDS_CALL_POP_ALL_INCOMING_CALLS_BARRED" +msgstr "Alle eingehenden Anrufe gesperrt" + +msgid "IDS_CALL_POP_ALL_OUTGOING_CALLS_BARRED" +msgstr "Alle ausgehenden Anrufe gesperrt" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_ALWAYS" +msgstr "Umleitung aktiv: Immer" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_NO_ANSWER" +msgstr "Umleitung aktiv: Immer" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_UNREACHABLE" +msgstr "Umleitung aktiv: Nicht erreichbar" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_WHEN_BUSY" +msgstr "Umleitung aktiv: Bei besetzt" + +msgid "IDS_CALL_POP_INCOMING_CALLS_BARRED_WHEN_ROAMING" +msgstr "Eingehende Anrufe bei Roaming gesperrt" + +msgid "IDS_CALL_POP_OUTGOING_INTERNATIONAL_CALLS_EXCEPT_HOME_BARRED" +msgstr "Ausgehende internationale Anrufe außer Daheim gesperrt" + +msgid "IDS_CALL_POP_OUTGOING_INTER_CALLS_BARRED" +msgstr "Ausgehende internationale Anrufe gesperrt" + +msgid "IDS_COM_POP_FOR_ALL_TELE_SERVICES_EXCEPT_SMS" +msgstr "für alle Teledienste außer SMS" + +msgid "IDS_CST_BODY_ALL_CALLS" +msgstr "Alle Anrufe" + +msgid "IDS_CST_BODY_CALL_BARRING" +msgstr "Anrufsperre" + +msgid "IDS_CST_BODY_CALL_DIVERTING" +msgstr "Anrufumleitung" + +msgid "IDS_CST_BODY_CALL_WAITING" +msgstr "Anklopfen" + +msgid "IDS_CST_BODY_ENTER_NUMBER" +msgstr "Nummer eingeben" + +msgid "IDS_CST_BODY_FAX" +msgstr "Fax" + +msgid "IDS_CST_HEADER_CONDITIONAL" +msgstr "Bedingt" + +msgid "IDS_CST_POP_ALL_ASYNCHRONOUS_DATA" +msgstr "Asynchrone Daten hinzufügen" + +msgid "IDS_CST_POP_ALL_BEARER_SERVICES" +msgstr "Alle Übertragungsdienste" + +msgid "IDS_CST_POP_ALL_DATA_SERVICES" +msgstr "Alle Datendienste" + +msgid "IDS_CST_POP_ALL_PADCA_SERVICES" +msgstr "Alle PADCA-Dienste" + +msgid "IDS_CST_POP_ALL_PDS_SERVICES" +msgstr "Alle PDS-Dienste" + +msgid "IDS_CST_POP_ALL_PLMN_BEARERS" +msgstr "Alle PLMN-Übertragungstypen" + +msgid "IDS_CST_POP_ALL_SERVICES" +msgstr "Alle Dienste" + +msgid "IDS_CST_POP_ALL_SYNCHRONOUS_SERVICES" +msgstr "Alle synchronen Dienste" + +msgid "IDS_CST_POP_ALL_TELECOM_SERVICES" +msgstr "Alle Telekom-Dienste" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_NOT_SHOWN_WHEN_CALLING" +msgstr "Antwortnummer wird bei Anruf nicht angezeigt" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_SHOWN_WHEN_CALLING" +msgstr "Antwortnummer wird bei Anruf angezeigt" + +msgid "IDS_CST_POP_ASYNCHRONOUS_DATA_SERVICES" +msgstr "Asynchrone Datendienste" + +msgid "IDS_CST_POP_CALLER_ID_AVAILABLE" +msgstr "Anrufer-ID verfügbar" + +msgid "IDS_CST_POP_CALLER_ID_HIDDEN" +msgstr "Anrufer-ID verborgen" + +msgid "IDS_CST_POP_CALLER_ID_RESTRICTED" +msgstr "Anruferkennung beschränkt" + +msgid "IDS_CST_POP_CALLER_ID_SHOWN" +msgstr "Anruferkennung wird angezeigt" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_ANSWERING_CALLS" +msgstr "Eigene Rufnummer wird nicht gesendet, wenn Anrufe beantwortet werden." + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_CALLING" +msgstr "Eigene Rufnummer wird nicht gesendet, wenn angerufen wird." + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_ANSWERING_CALLS" +msgstr "Meine Anrufer-ID wird beim Annehmen von Anrufen gesendet" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_CALLING" +msgstr "Meine Anrufer-ID wird beim Anrufen gesendet" + +msgid "IDS_CST_POP_PASSWORD_BLOCKED" +msgstr "Passwort gesperrt" + +msgid "IDS_CST_POP_REJECTED_BY_NETWORK" +msgstr "Vom Netz abgewiesen" + +msgid "IDS_CST_POP_REQUESTING_ING" +msgstr "Anforderung läuft..." + +msgid "IDS_CST_POP_SERVICE_NOT_AUTHORISED" +msgstr "Dienst nicht autorisiert" + +msgid "IDS_ST_POP_ALL_BARRING" +msgstr "Alle sperren" + +msgid "IDS_ST_POP_INCOMING_BARRING" +msgstr "Sperre eingehende Anr." + +msgid "IDS_ST_POP_OUTGOING_BARRING" +msgstr "Sperre ausgehende Anr." + +msgid "IDS_CST_POP_SERVICE_UNAVAILABLE" +msgstr "Service nicht verfügbar" + +msgid "IDS_CST_POP_INVALID_PASSWORD" +msgstr "Ungültiges Kennwort" + +msgid "IDS_CST_OPT_CHANGE_PASSWORD" +msgstr "Passwort ändern" + diff --git a/po/el_GR.po b/po/el_GR.po new file mode 100755 index 0000000..d9bba0d --- /dev/null +++ b/po/el_GR.po @@ -0,0 +1,141 @@ +msgid "IDS_CALL_POP_ALL_INCOMING_CALLS_BARRED" +msgstr "Φραγή όλων των εισερχόμενων κλήσεων" + +msgid "IDS_CALL_POP_ALL_OUTGOING_CALLS_BARRED" +msgstr "Φραγή όλων των εξερχόμενων κλήσεων" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_ALWAYS" +msgstr "Ενεργή Προώθηση Κλήσεων: Πάντα" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_NO_ANSWER" +msgstr "Προώθηση κλήσεων ενεργή: Εάν δεν απαντά" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_UNREACHABLE" +msgstr "Προώθηση κλήσεων ενεργή: Aδύνατη πρόσβαση" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_WHEN_BUSY" +msgstr "Προώθηση κλήσεων ενεργή: Σε κατειλημμένη γραμμή" + +msgid "IDS_CALL_POP_INCOMING_CALLS_BARRED_WHEN_ROAMING" +msgstr "Φραγή εισερχομένων σε περιαγωγή" + +msgid "IDS_CALL_POP_OUTGOING_INTERNATIONAL_CALLS_EXCEPT_HOME_BARRED" +msgstr "Φραγή εξερχομένων διεθνών εκτός χώρας επιλογής" + +msgid "IDS_CALL_POP_OUTGOING_INTER_CALLS_BARRED" +msgstr "Φραγή όλων των\nεξερχόμενων διεθνών κλήσεων" + +msgid "IDS_COM_POP_FOR_ALL_TELE_SERVICES_EXCEPT_SMS" +msgstr "για όλες τις Τηλε-υπηρεσίες εκτός των SMS" + +msgid "IDS_CST_BODY_ALL_CALLS" +msgstr "Όλες οι κλήσεις" + +msgid "IDS_CST_BODY_CALL_BARRING" +msgstr "Φραγή κλήσεων" + +msgid "IDS_CST_BODY_CALL_DIVERTING" +msgstr "Εκτροπή κλήσεων" + +msgid "IDS_CST_BODY_CALL_WAITING" +msgstr "Αναμονή κλήσεων" + +msgid "IDS_CST_BODY_ENTER_NUMBER" +msgstr "Εισαγωγή αριθμού" + +msgid "IDS_CST_BODY_FAX" +msgstr "Φαξ" + +msgid "IDS_CST_HEADER_CONDITIONAL" +msgstr "Υπό όρους" + +msgid "IDS_CST_POP_ALL_ASYNCHRONOUS_DATA" +msgstr "Όλα τα μη συγχρονισμένα δεδομένα" + +msgid "IDS_CST_POP_ALL_BEARER_SERVICES" +msgstr "Όλες οι υπηρεσίες φορέα" + +msgid "IDS_CST_POP_ALL_DATA_SERVICES" +msgstr "Όλες οι υπηρεσίες δεδομένων" + +msgid "IDS_CST_POP_ALL_PADCA_SERVICES" +msgstr "Όλες οι υπηρεσίες PADCA" + +msgid "IDS_CST_POP_ALL_PDS_SERVICES" +msgstr "Όλες οι υπηρεσίες PDS" + +msgid "IDS_CST_POP_ALL_PLMN_BEARERS" +msgstr "Όλοι οι φορείς PLMN" + +msgid "IDS_CST_POP_ALL_SERVICES" +msgstr "Όλες οι υπηρεσίες" + +msgid "IDS_CST_POP_ALL_SYNCHRONOUS_SERVICES" +msgstr "Όλες οι συγχρονισμένες υπηρεσίες" + +msgid "IDS_CST_POP_ALL_TELECOM_SERVICES" +msgstr "Όλες οι υπηρεσίες τηλεπικ/νίας" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_NOT_SHOWN_WHEN_CALLING" +msgstr "Ο αριθμός απάντησης δεν εμφανίζεται κατά την κλήση" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_SHOWN_WHEN_CALLING" +msgstr "Ο αριθμός απάντησης εμφανίζεται κατά την κλήση" + +msgid "IDS_CST_POP_ASYNCHRONOUS_DATA_SERVICES" +msgstr "Υπηρεσίες μη συγχρονισμένων δεδομένων" + +msgid "IDS_CST_POP_CALLER_ID_AVAILABLE" +msgstr "Διαθέσιμη ταυτότητα καλούντος" + +msgid "IDS_CST_POP_CALLER_ID_HIDDEN" +msgstr "Απόκρυψη ταυτότητας καλούντος" + +msgid "IDS_CST_POP_CALLER_ID_RESTRICTED" +msgstr "Περιορισμένη ταυτότητα καλούντος" + +msgid "IDS_CST_POP_CALLER_ID_SHOWN" +msgstr "Εμφάνιση ταυτότητας καλούντος" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_ANSWERING_CALLS" +msgstr "Το δικό μου αναγνωριστικό καλούντος δεν αποστέλλεται όταν απαντώ σε μια κλήση" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_CALLING" +msgstr "Το δικό μου αναγνωριστικό καλούντος δεν αποστέλλεται όταν πραγματοποιώ κλήση" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_ANSWERING_CALLS" +msgstr "Το δικό μου αναγνωριστικό καλούντα αποστέλλεται όταν απαντώ σε μια κλήση" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_CALLING" +msgstr "Το δικό μου αναγνωριστικό καλούντα αποστέλλεται όταν πραγματοποιώ κλήση" + +msgid "IDS_CST_POP_PASSWORD_BLOCKED" +msgstr "Ο κωδικός πρόσβασης μπλόκαρε" + +msgid "IDS_CST_POP_REJECTED_BY_NETWORK" +msgstr "Απορρίφθηκε από το δίκτυο" + +msgid "IDS_CST_POP_REQUESTING_ING" +msgstr "Αίτηση..." + +msgid "IDS_CST_POP_SERVICE_NOT_AUTHORISED" +msgstr "Υπηρεσία δεν επιτρέπεται" + +msgid "IDS_ST_POP_ALL_BARRING" +msgstr "Φραγή όλων" + +msgid "IDS_ST_POP_INCOMING_BARRING" +msgstr "Φραγή εισερχόμενων" + +msgid "IDS_ST_POP_OUTGOING_BARRING" +msgstr "Φραγή εξερχόμενων" + +msgid "IDS_CST_POP_SERVICE_UNAVAILABLE" +msgstr "Μη διαθέσιμη λειτουργία" + +msgid "IDS_CST_POP_INVALID_PASSWORD" +msgstr "Μη έγκυρος κωδικός" + +msgid "IDS_CST_OPT_CHANGE_PASSWORD" +msgstr "Aλλαγή κωδικού" + diff --git a/po/en.po b/po/en.po new file mode 100755 index 0000000..60a72c6 --- /dev/null +++ b/po/en.po @@ -0,0 +1,141 @@ +msgid "IDS_CALL_POP_ALL_INCOMING_CALLS_BARRED" +msgstr "All incoming calls barred" + +msgid "IDS_CALL_POP_ALL_OUTGOING_CALLS_BARRED" +msgstr "All outgoing calls barred" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_ALWAYS" +msgstr "Divert calls: Always" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_NO_ANSWER" +msgstr "Divert calls: No answer" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_UNREACHABLE" +msgstr "Divert calls: Unreachable" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_WHEN_BUSY" +msgstr "Divert calls: When busy" + +msgid "IDS_CALL_POP_INCOMING_CALLS_BARRED_WHEN_ROAMING" +msgstr "Incoming calls barred when roaming" + +msgid "IDS_CALL_POP_OUTGOING_INTERNATIONAL_CALLS_EXCEPT_HOME_BARRED" +msgstr "Outgoing international calls except home barred" + +msgid "IDS_CALL_POP_OUTGOING_INTER_CALLS_BARRED" +msgstr "Outgoing international calls barred" + +msgid "IDS_COM_POP_FOR_ALL_TELE_SERVICES_EXCEPT_SMS" +msgstr "for All Tele services except SMS" + +msgid "IDS_CST_BODY_ALL_CALLS" +msgstr "All calls" + +msgid "IDS_CST_BODY_CALL_BARRING" +msgstr "Call barring" + +msgid "IDS_CST_BODY_CALL_DIVERTING" +msgstr "Call diverting" + +msgid "IDS_CST_BODY_CALL_WAITING" +msgstr "Call waiting" + +msgid "IDS_CST_BODY_ENTER_NUMBER" +msgstr "Enter number" + +msgid "IDS_CST_BODY_FAX" +msgstr "Fax" + +msgid "IDS_CST_HEADER_CONDITIONAL" +msgstr "Conditional" + +msgid "IDS_CST_POP_ALL_ASYNCHRONOUS_DATA" +msgstr "All asynchronous data" + +msgid "IDS_CST_POP_ALL_BEARER_SERVICES" +msgstr "All bearer services" + +msgid "IDS_CST_POP_ALL_DATA_SERVICES" +msgstr "All data services" + +msgid "IDS_CST_POP_ALL_PADCA_SERVICES" +msgstr "All PADCA services" + +msgid "IDS_CST_POP_ALL_PDS_SERVICES" +msgstr "All PDS services" + +msgid "IDS_CST_POP_ALL_PLMN_BEARERS" +msgstr "All PLMN bearers" + +msgid "IDS_CST_POP_ALL_SERVICES" +msgstr "All services" + +msgid "IDS_CST_POP_ALL_SYNCHRONOUS_SERVICES" +msgstr "All synchronous services" + +msgid "IDS_CST_POP_ALL_TELECOM_SERVICES" +msgstr "All telecom services" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_NOT_SHOWN_WHEN_CALLING" +msgstr "Answering number is not displayed when calling" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_SHOWN_WHEN_CALLING" +msgstr "Answering number is displayed when calling" + +msgid "IDS_CST_POP_ASYNCHRONOUS_DATA_SERVICES" +msgstr "Asynchronous data services" + +msgid "IDS_CST_POP_CALLER_ID_AVAILABLE" +msgstr "Caller ID available" + +msgid "IDS_CST_POP_CALLER_ID_HIDDEN" +msgstr "Caller ID hidden" + +msgid "IDS_CST_POP_CALLER_ID_RESTRICTED" +msgstr "Caller ID restricted" + +msgid "IDS_CST_POP_CALLER_ID_SHOWN" +msgstr "Caller ID shown" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_ANSWERING_CALLS" +msgstr "My caller ID is not sent when answering calls" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_CALLING" +msgstr "My caller ID is not sent when calling" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_ANSWERING_CALLS" +msgstr "My caller ID will be sent when answering calls" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_CALLING" +msgstr "My caller ID will be sent when calling" + +msgid "IDS_CST_POP_PASSWORD_BLOCKED" +msgstr "Password blocked" + +msgid "IDS_CST_POP_REJECTED_BY_NETWORK" +msgstr "Rejected by network" + +msgid "IDS_CST_POP_REQUESTING_ING" +msgstr "Requesting..." + +msgid "IDS_CST_POP_SERVICE_NOT_AUTHORISED" +msgstr "Service not authorised" + +msgid "IDS_ST_POP_ALL_BARRING" +msgstr "All barring" + +msgid "IDS_ST_POP_INCOMING_BARRING" +msgstr "Incoming barring" + +msgid "IDS_ST_POP_OUTGOING_BARRING" +msgstr "Outgoing barring" + +msgid "IDS_CST_POP_SERVICE_UNAVAILABLE" +msgstr "Service not available" + +msgid "IDS_CST_POP_INVALID_PASSWORD" +msgstr "Invalid password" + +msgid "IDS_CST_OPT_CHANGE_PASSWORD" +msgstr "Change password" + diff --git a/po/es_ES.po b/po/es_ES.po new file mode 100755 index 0000000..b77af6b --- /dev/null +++ b/po/es_ES.po @@ -0,0 +1,141 @@ +msgid "IDS_CALL_POP_ALL_INCOMING_CALLS_BARRED" +msgstr "Restringidas todas las llamadas entrantes" + +msgid "IDS_CALL_POP_ALL_OUTGOING_CALLS_BARRED" +msgstr "Restringidas todas las llamadas salientes" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_ALWAYS" +msgstr "Desvío de llamadas: Siempre" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_NO_ANSWER" +msgstr "Desvío de llamadas: Sin respuesta" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_UNREACHABLE" +msgstr "Desvío de llamada: Si no localizable" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_WHEN_BUSY" +msgstr "Desvío de llamada: Si ocupado" + +msgid "IDS_CALL_POP_INCOMING_CALLS_BARRED_WHEN_ROAMING" +msgstr "Llamadas entrantes restringidas en el extranjero" + +msgid "IDS_CALL_POP_OUTGOING_INTERNATIONAL_CALLS_EXCEPT_HOME_BARRED" +msgstr "Llamadas internacionales salientes excepto país de origen restringidas" + +msgid "IDS_CALL_POP_OUTGOING_INTER_CALLS_BARRED" +msgstr "Llamadas salientes internacionales restringidas" + +msgid "IDS_COM_POP_FOR_ALL_TELE_SERVICES_EXCEPT_SMS" +msgstr "para todos los servicios teleservicios excepto SMS" + +msgid "IDS_CST_BODY_ALL_CALLS" +msgstr "Todas las llamadas" + +msgid "IDS_CST_BODY_CALL_BARRING" +msgstr "Restricción de llamadas" + +msgid "IDS_CST_BODY_CALL_DIVERTING" +msgstr "Desvío de llamadas" + +msgid "IDS_CST_BODY_CALL_WAITING" +msgstr "Llamada en espera" + +msgid "IDS_CST_BODY_ENTER_NUMBER" +msgstr "Introducir número" + +msgid "IDS_CST_BODY_FAX" +msgstr "Fax" + +msgid "IDS_CST_HEADER_CONDITIONAL" +msgstr "Condicional" + +msgid "IDS_CST_POP_ALL_ASYNCHRONOUS_DATA" +msgstr "Todos los datos asíncronos" + +msgid "IDS_CST_POP_ALL_BEARER_SERVICES" +msgstr "Todos los servicios de portador" + +msgid "IDS_CST_POP_ALL_DATA_SERVICES" +msgstr "Todos los servicios de datos" + +msgid "IDS_CST_POP_ALL_PADCA_SERVICES" +msgstr "Todos los servicios PADCA" + +msgid "IDS_CST_POP_ALL_PDS_SERVICES" +msgstr "Todos los servicios PDS" + +msgid "IDS_CST_POP_ALL_PLMN_BEARERS" +msgstr "Todos los portadores de PLMN" + +msgid "IDS_CST_POP_ALL_SERVICES" +msgstr "Todos los servicios" + +msgid "IDS_CST_POP_ALL_SYNCHRONOUS_SERVICES" +msgstr "Todos los servicios síncronos" + +msgid "IDS_CST_POP_ALL_TELECOM_SERVICES" +msgstr "Todos los servicios de telecomunicaciones" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_NOT_SHOWN_WHEN_CALLING" +msgstr "El número de respuesta no aparece cuando llama" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_SHOWN_WHEN_CALLING" +msgstr "El número de respuesta aparece cuando llama" + +msgid "IDS_CST_POP_ASYNCHRONOUS_DATA_SERVICES" +msgstr "Servicios de datos asíncronos" + +msgid "IDS_CST_POP_CALLER_ID_AVAILABLE" +msgstr "ID de llamante disponible" + +msgid "IDS_CST_POP_CALLER_ID_HIDDEN" +msgstr "ID de llamante oculta" + +msgid "IDS_CST_POP_CALLER_ID_RESTRICTED" +msgstr "ID de llamante restringido" + +msgid "IDS_CST_POP_CALLER_ID_SHOWN" +msgstr "ID de llamante visible" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_ANSWERING_CALLS" +msgstr "Mi ID de llamante no se envía al responder a las llamadas" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_CALLING" +msgstr "Mi ID de llamante no se envía al llamar" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_ANSWERING_CALLS" +msgstr "Mi ID de llamante se enviará al responder llamadas" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_CALLING" +msgstr "Mi ID de llamante se enviará al llamar" + +msgid "IDS_CST_POP_PASSWORD_BLOCKED" +msgstr "Contraseña bloqueada" + +msgid "IDS_CST_POP_REJECTED_BY_NETWORK" +msgstr "Rechazado por la red" + +msgid "IDS_CST_POP_REQUESTING_ING" +msgstr "Solicitando..." + +msgid "IDS_CST_POP_SERVICE_NOT_AUTHORISED" +msgstr "Servicio no autorizado" + +msgid "IDS_ST_POP_ALL_BARRING" +msgstr "Todas las llamadas restringidas" + +msgid "IDS_ST_POP_INCOMING_BARRING" +msgstr "Restricción de entrantes" + +msgid "IDS_ST_POP_OUTGOING_BARRING" +msgstr "Restricción de salientes" + +msgid "IDS_CST_POP_SERVICE_UNAVAILABLE" +msgstr "Servicio no disponible" + +msgid "IDS_CST_POP_INVALID_PASSWORD" +msgstr "Contraseña incorrecta" + +msgid "IDS_CST_OPT_CHANGE_PASSWORD" +msgstr "Cambiar contraseña" + diff --git a/po/fr_FR.po b/po/fr_FR.po new file mode 100755 index 0000000..4a9387a --- /dev/null +++ b/po/fr_FR.po @@ -0,0 +1,141 @@ +msgid "IDS_CALL_POP_ALL_INCOMING_CALLS_BARRED" +msgstr "Tous appels entrants interdits" + +msgid "IDS_CALL_POP_ALL_OUTGOING_CALLS_BARRED" +msgstr "Tous appels sortants interdits" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_ALWAYS" +msgstr "Renvoi d'appel activé : Toujours" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_NO_ANSWER" +msgstr "Renvoi d'appel activé : Aucune réponse" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_UNREACHABLE" +msgstr "Renvoi d'appel activé : Injoignable" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_WHEN_BUSY" +msgstr "Renvoi d'appel activé : Occupé" + +msgid "IDS_CALL_POP_INCOMING_CALLS_BARRED_WHEN_ROAMING" +msgstr "Appels entrants interdits en itinérance" + +msgid "IDS_CALL_POP_OUTGOING_INTERNATIONAL_CALLS_EXCEPT_HOME_BARRED" +msgstr "Appels internationaux sortants interdits sauf vers pays d'origine" + +msgid "IDS_CALL_POP_OUTGOING_INTER_CALLS_BARRED" +msgstr "Appels internationaux sortants interdits" + +msgid "IDS_COM_POP_FOR_ALL_TELE_SERVICES_EXCEPT_SMS" +msgstr "Pour tous les téléservices, sauf SMS" + +msgid "IDS_CST_BODY_ALL_CALLS" +msgstr "Tous les appels" + +msgid "IDS_CST_BODY_CALL_BARRING" +msgstr "Restriction d'appel" + +msgid "IDS_CST_BODY_CALL_DIVERTING" +msgstr "Renvoi d'appel" + +msgid "IDS_CST_BODY_CALL_WAITING" +msgstr "Signal d'appel" + +msgid "IDS_CST_BODY_ENTER_NUMBER" +msgstr "Entrez le numéro" + +msgid "IDS_CST_BODY_FAX" +msgstr "Fax" + +msgid "IDS_CST_HEADER_CONDITIONAL" +msgstr "Conditionnel" + +msgid "IDS_CST_POP_ALL_ASYNCHRONOUS_DATA" +msgstr "Toutes les données asynchrones" + +msgid "IDS_CST_POP_ALL_BEARER_SERVICES" +msgstr "Tous serv. support" + +msgid "IDS_CST_POP_ALL_DATA_SERVICES" +msgstr "Tous les services de données" + +msgid "IDS_CST_POP_ALL_PADCA_SERVICES" +msgstr "Tous les services PADCA" + +msgid "IDS_CST_POP_ALL_PDS_SERVICES" +msgstr "Tous les services PDS" + +msgid "IDS_CST_POP_ALL_PLMN_BEARERS" +msgstr "Tous les supports PLMN" + +msgid "IDS_CST_POP_ALL_SERVICES" +msgstr "Tous les services" + +msgid "IDS_CST_POP_ALL_SYNCHRONOUS_SERVICES" +msgstr "Tous les services synchrones" + +msgid "IDS_CST_POP_ALL_TELECOM_SERVICES" +msgstr "Tous serv. télécom." + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_NOT_SHOWN_WHEN_CALLING" +msgstr "Le numéro du transfert d'appel n'apparaît pas pendant l'appel" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_SHOWN_WHEN_CALLING" +msgstr "Le numéro du transfert d'appel apparaît pendant l'appel" + +msgid "IDS_CST_POP_ASYNCHRONOUS_DATA_SERVICES" +msgstr "Services de données asynchrones" + +msgid "IDS_CST_POP_CALLER_ID_AVAILABLE" +msgstr "ID appelant disponible" + +msgid "IDS_CST_POP_CALLER_ID_HIDDEN" +msgstr "N° appelant masqué" + +msgid "IDS_CST_POP_CALLER_ID_RESTRICTED" +msgstr "N° appelant restreint" + +msgid "IDS_CST_POP_CALLER_ID_SHOWN" +msgstr "N° appelant affiché" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_ANSWERING_CALLS" +msgstr "Mon ID appelant n'est pas envoyé en cas d'appel répondu" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_CALLING" +msgstr "Mon ID appelant n'est pas envoyé en cas d'appel passé" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_ANSWERING_CALLS" +msgstr "Mon ID appelant est envoyé lors de la réponse à un appel" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_CALLING" +msgstr "Mon ID appelant est envoyé lors d'un appel émis" + +msgid "IDS_CST_POP_PASSWORD_BLOCKED" +msgstr "Mot de passe bloqué" + +msgid "IDS_CST_POP_REJECTED_BY_NETWORK" +msgstr "Rejeté par le réseau" + +msgid "IDS_CST_POP_REQUESTING_ING" +msgstr "Demande en cours..." + +msgid "IDS_CST_POP_SERVICE_NOT_AUTHORISED" +msgstr "Service non autorisé" + +msgid "IDS_ST_POP_ALL_BARRING" +msgstr "Toutes les interdictions d'appel" + +msgid "IDS_ST_POP_INCOMING_BARRING" +msgstr "Interdire appels entrants" + +msgid "IDS_ST_POP_OUTGOING_BARRING" +msgstr "Interdire appels sortants" + +msgid "IDS_CST_POP_SERVICE_UNAVAILABLE" +msgstr "Service non disponible" + +msgid "IDS_CST_POP_INVALID_PASSWORD" +msgstr "Mot de passe incorrect" + +msgid "IDS_CST_OPT_CHANGE_PASSWORD" +msgstr "Modifier mot de passe" + diff --git a/po/it_IT.po b/po/it_IT.po new file mode 100755 index 0000000..5ea6ff3 --- /dev/null +++ b/po/it_IT.po @@ -0,0 +1,141 @@ +msgid "IDS_CALL_POP_ALL_INCOMING_CALLS_BARRED" +msgstr "Blocco di tutte le chiamate entranti" + +msgid "IDS_CALL_POP_ALL_OUTGOING_CALLS_BARRED" +msgstr "Blocco di tutte le chiamate uscenti" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_ALWAYS" +msgstr "Trasferimento chiamate attivo: sempre" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_NO_ANSWER" +msgstr "Trasferimento chiamate attivo: nessuna risposta" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_UNREACHABLE" +msgstr "Trasferimento chiamate attivo: non raggiungibile" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_WHEN_BUSY" +msgstr "Trasferimento chiamate attivo: occupato" + +msgid "IDS_CALL_POP_INCOMING_CALLS_BARRED_WHEN_ROAMING" +msgstr "Chiamate in arrivo bloccate durante roaming" + +msgid "IDS_CALL_POP_OUTGOING_INTERNATIONAL_CALLS_EXCEPT_HOME_BARRED" +msgstr "Chiamate internazionali in uscita bloccate tranne verso proprio paese" + +msgid "IDS_CALL_POP_OUTGOING_INTER_CALLS_BARRED" +msgstr "Uscenti internazionali bloccate" + +msgid "IDS_COM_POP_FOR_ALL_TELE_SERVICES_EXCEPT_SMS" +msgstr "per tutti i servizi telefonici eccetto SMS" + +msgid "IDS_CST_BODY_ALL_CALLS" +msgstr "Tutte le chiamate" + +msgid "IDS_CST_BODY_CALL_BARRING" +msgstr "Blocco chiamate" + +msgid "IDS_CST_BODY_CALL_DIVERTING" +msgstr "Trasferimento chiamate" + +msgid "IDS_CST_BODY_CALL_WAITING" +msgstr "Avviso di chiamata" + +msgid "IDS_CST_BODY_ENTER_NUMBER" +msgstr "Inserisci numero" + +msgid "IDS_CST_BODY_FAX" +msgstr "Fax" + +msgid "IDS_CST_HEADER_CONDITIONAL" +msgstr "Condizionale" + +msgid "IDS_CST_POP_ALL_ASYNCHRONOUS_DATA" +msgstr "Tutti i dati asincroni" + +msgid "IDS_CST_POP_ALL_BEARER_SERVICES" +msgstr "Tutti i servizi di rete" + +msgid "IDS_CST_POP_ALL_DATA_SERVICES" +msgstr "Tutti i servizi dati" + +msgid "IDS_CST_POP_ALL_PADCA_SERVICES" +msgstr "Tutti i servizi PADCA" + +msgid "IDS_CST_POP_ALL_PDS_SERVICES" +msgstr "Tutti i servizi PDS" + +msgid "IDS_CST_POP_ALL_PLMN_BEARERS" +msgstr "Tutte le reti PLMN" + +msgid "IDS_CST_POP_ALL_SERVICES" +msgstr "Tutti i servizi" + +msgid "IDS_CST_POP_ALL_SYNCHRONOUS_SERVICES" +msgstr "Tutti i servizi sincroni" + +msgid "IDS_CST_POP_ALL_TELECOM_SERVICES" +msgstr "Tutti i servizi telecomunic." + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_NOT_SHOWN_WHEN_CALLING" +msgstr "Il numero del telefono ricevente non compare quando si effettua una chiamata" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_SHOWN_WHEN_CALLING" +msgstr "Il numero del telefono ricevente compare quando si effettua una chiamata" + +msgid "IDS_CST_POP_ASYNCHRONOUS_DATA_SERVICES" +msgstr "Servizi dati asincroni" + +msgid "IDS_CST_POP_CALLER_ID_AVAILABLE" +msgstr "ID chiamante disponibile" + +msgid "IDS_CST_POP_CALLER_ID_HIDDEN" +msgstr "ID chiamante nascosto" + +msgid "IDS_CST_POP_CALLER_ID_RESTRICTED" +msgstr "Numero nascosto" + +msgid "IDS_CST_POP_CALLER_ID_SHOWN" +msgstr "Numero visualizzato" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_ANSWERING_CALLS" +msgstr "L'ID chiamante personale non viene inviato quando si risponde alle chiamate" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_CALLING" +msgstr "L'ID chiamante personale non viene inviato quando si effettuano chiamate" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_ANSWERING_CALLS" +msgstr "L'ID chiamante personale viene inviato quando si risponde alle chiamate" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_CALLING" +msgstr "L'ID chiamante personale viene inviato quando si effettuano chiamate" + +msgid "IDS_CST_POP_PASSWORD_BLOCKED" +msgstr "Password bloccata" + +msgid "IDS_CST_POP_REJECTED_BY_NETWORK" +msgstr "Rifiutato dalla rete" + +msgid "IDS_CST_POP_REQUESTING_ING" +msgstr "Richiesta in corso" + +msgid "IDS_CST_POP_SERVICE_NOT_AUTHORISED" +msgstr "Servizio non autorizzato" + +msgid "IDS_ST_POP_ALL_BARRING" +msgstr "Tutte bloccate" + +msgid "IDS_ST_POP_INCOMING_BARRING" +msgstr "Blocco chiamate in arrivo" + +msgid "IDS_ST_POP_OUTGOING_BARRING" +msgstr "Blocco chiamate in uscita" + +msgid "IDS_CST_POP_SERVICE_UNAVAILABLE" +msgstr "Servizio non disponibile" + +msgid "IDS_CST_POP_INVALID_PASSWORD" +msgstr "Password non valida" + +msgid "IDS_CST_OPT_CHANGE_PASSWORD" +msgstr "Cambia password" + diff --git a/po/ja_JP.po b/po/ja_JP.po new file mode 100755 index 0000000..99b825c --- /dev/null +++ b/po/ja_JP.po @@ -0,0 +1,141 @@ +msgid "IDS_CALL_POP_ALL_INCOMING_CALLS_BARRED" +msgstr "全ての​着信​が​規制​されて​います" + +msgid "IDS_CALL_POP_ALL_OUTGOING_CALLS_BARRED" +msgstr "全ての​発信​が​規制​されて​います" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_ALWAYS" +msgstr "通話​を​転送する:常時" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_NO_ANSWER" +msgstr "通話​を転送​する:​応答​なし" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_UNREACHABLE" +msgstr "通話​を​転送:​​圏外時" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_WHEN_BUSY" +msgstr "通話​を​転送:​ビジー時" + +msgid "IDS_CALL_POP_INCOMING_CALLS_BARRED_WHEN_ROAMING" +msgstr "ローミング​中​は​着信​が​規制​されます" + +msgid "IDS_CALL_POP_OUTGOING_INTERNATIONAL_CALLS_EXCEPT_HOME_BARRED" +msgstr "自国​以外の​全ての​国際​電話​発信​が​規制​されています" + +msgid "IDS_CALL_POP_OUTGOING_INTER_CALLS_BARRED" +msgstr "全ての​国際電話発信​が​規制​されて​います" + +msgid "IDS_COM_POP_FOR_ALL_TELE_SERVICES_EXCEPT_SMS" +msgstr "SMS​以外の​全ての​テレサービス用" + +msgid "IDS_CST_BODY_ALL_CALLS" +msgstr "全通話" + +msgid "IDS_CST_BODY_CALL_BARRING" +msgstr "発着信規制" + +msgid "IDS_CST_BODY_CALL_DIVERTING" +msgstr "転送でんわ" + +msgid "IDS_CST_BODY_CALL_WAITING" +msgstr "キャッチホン" + +msgid "IDS_CST_BODY_ENTER_NUMBER" +msgstr "直接入力" + +msgid "IDS_CST_BODY_FAX" +msgstr "FAX" + +msgid "IDS_CST_HEADER_CONDITIONAL" +msgstr "条件付き" + +msgid "IDS_CST_POP_ALL_ASYNCHRONOUS_DATA" +msgstr "全ての​非同期​データ" + +msgid "IDS_CST_POP_ALL_BEARER_SERVICES" +msgstr "全ての​ベアラ​サービス" + +msgid "IDS_CST_POP_ALL_DATA_SERVICES" +msgstr "全ての​データ​サービス" + +msgid "IDS_CST_POP_ALL_PADCA_SERVICES" +msgstr "全ての​PADCA​サービス" + +msgid "IDS_CST_POP_ALL_PDS_SERVICES" +msgstr "全ての​PDS​サービス" + +msgid "IDS_CST_POP_ALL_PLMN_BEARERS" +msgstr "全ての​PLMN​ベアラ" + +msgid "IDS_CST_POP_ALL_SERVICES" +msgstr "全ての​サービス" + +msgid "IDS_CST_POP_ALL_SYNCHRONOUS_SERVICES" +msgstr "全ての​同期​サービス" + +msgid "IDS_CST_POP_ALL_TELECOM_SERVICES" +msgstr "全ての​通信​サービス" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_NOT_SHOWN_WHEN_CALLING" +msgstr "通話時に​電話​番号​​非表示​" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_SHOWN_WHEN_CALLING" +msgstr "通話時に​電話​番号​​表示​" + +msgid "IDS_CST_POP_ASYNCHRONOUS_DATA_SERVICES" +msgstr "非同期​データ​サービス" + +msgid "IDS_CST_POP_CALLER_ID_AVAILABLE" +msgstr "着信​画像​を​利用​できます" + +msgid "IDS_CST_POP_CALLER_ID_HIDDEN" +msgstr "着信時に​発信者​番号​を​表示​しません" + +msgid "IDS_CST_POP_CALLER_ID_RESTRICTED" +msgstr "発信者番号​制限​あり" + +msgid "IDS_CST_POP_CALLER_ID_SHOWN" +msgstr "着信時に​発信者番号​を​表示​" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_ANSWERING_CALLS" +msgstr "応答時に​発信者​ID​を​送信​しません" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_CALLING" +msgstr "発信時に​発信者​番号​を​通知​しません" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_ANSWERING_CALLS" +msgstr "応答時に​発信者​IDを​送信​します" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_CALLING" +msgstr "通話時に​発信者ID​を​送信​します" + +msgid "IDS_CST_POP_PASSWORD_BLOCKED" +msgstr "パスワード​が​ブロック​され​ました" + +msgid "IDS_CST_POP_REJECTED_BY_NETWORK" +msgstr "ネットワーク​に​拒否​されました" + +msgid "IDS_CST_POP_REQUESTING_ING" +msgstr "要求中..." + +msgid "IDS_CST_POP_SERVICE_NOT_AUTHORISED" +msgstr "サービス​は​未認証​です" + +msgid "IDS_ST_POP_ALL_BARRING" +msgstr "全ての​発着信​規制" + +msgid "IDS_ST_POP_INCOMING_BARRING" +msgstr "受信​規制​です" + +msgid "IDS_ST_POP_OUTGOING_BARRING" +msgstr "発信​規制​です" + +msgid "IDS_CST_POP_SERVICE_UNAVAILABLE" +msgstr "サービス​を​利用​できません" + +msgid "IDS_CST_POP_INVALID_PASSWORD" +msgstr "パスワード​が​無効​です" + +msgid "IDS_CST_OPT_CHANGE_PASSWORD" +msgstr "暗証番号​変更" + diff --git a/po/ko_KR.po b/po/ko_KR.po new file mode 100755 index 0000000..dd3cfd7 --- /dev/null +++ b/po/ko_KR.po @@ -0,0 +1,141 @@ +msgid "IDS_CALL_POP_ALL_INCOMING_CALLS_BARRED" +msgstr "모든 수신 전화가 제한되었습니다" + +msgid "IDS_CALL_POP_ALL_OUTGOING_CALLS_BARRED" +msgstr "모든 발신 전화가 제한되었습니다" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_ALWAYS" +msgstr "착신통화 : 항상" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_NO_ANSWER" +msgstr "착신통화 : 응답 없을 때" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_UNREACHABLE" +msgstr "착신통화 : 서비스 지역 이탈 시" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_WHEN_BUSY" +msgstr "통화 중일 때" + +msgid "IDS_CALL_POP_INCOMING_CALLS_BARRED_WHEN_ROAMING" +msgstr "로밍 중에는 전화 수신이 제한됩니다" + +msgid "IDS_CALL_POP_OUTGOING_INTERNATIONAL_CALLS_EXCEPT_HOME_BARRED" +msgstr "자국으로 거는 전화를 제외한 모든 국제전화 발신이 제한되었습니다" + +msgid "IDS_CALL_POP_OUTGOING_INTER_CALLS_BARRED" +msgstr "국제전화 발신이 제한되었습니다" + +msgid "IDS_COM_POP_FOR_ALL_TELE_SERVICES_EXCEPT_SMS" +msgstr "SMS를 제외한 모든 통신 서비스" + +msgid "IDS_CST_BODY_ALL_CALLS" +msgstr "모든 전화" + +msgid "IDS_CST_BODY_CALL_BARRING" +msgstr "통화제한" + +msgid "IDS_CST_BODY_CALL_DIVERTING" +msgstr "착신전환" + +msgid "IDS_CST_BODY_CALL_WAITING" +msgstr "통화대기" + +msgid "IDS_CST_BODY_ENTER_NUMBER" +msgstr "전화번호를 입력하세요" + +msgid "IDS_CST_BODY_FAX" +msgstr "팩스" + +msgid "IDS_CST_HEADER_CONDITIONAL" +msgstr "조건부" + +msgid "IDS_CST_POP_ALL_ASYNCHRONOUS_DATA" +msgstr "모든 비동기 데이터" + +msgid "IDS_CST_POP_ALL_BEARER_SERVICES" +msgstr "모든 베어러 서비스" + +msgid "IDS_CST_POP_ALL_DATA_SERVICES" +msgstr "모든 데이터 서비스" + +msgid "IDS_CST_POP_ALL_PADCA_SERVICES" +msgstr "모든 PADCA 서비스" + +msgid "IDS_CST_POP_ALL_PDS_SERVICES" +msgstr "모든 PDS 서비스" + +msgid "IDS_CST_POP_ALL_PLMN_BEARERS" +msgstr "모든 PLMN" + +msgid "IDS_CST_POP_ALL_SERVICES" +msgstr "모든 서비스" + +msgid "IDS_CST_POP_ALL_SYNCHRONOUS_SERVICES" +msgstr "모든 동기 서비스" + +msgid "IDS_CST_POP_ALL_TELECOM_SERVICES" +msgstr "모든 사업자 서비스" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_NOT_SHOWN_WHEN_CALLING" +msgstr "전화를 걸 때 상대방 전화번호가 표시되지 않습니다" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_SHOWN_WHEN_CALLING" +msgstr "전화를 걸 때 상대방 전화번호가 표시됩니다" + +msgid "IDS_CST_POP_ASYNCHRONOUS_DATA_SERVICES" +msgstr "비동기 데이터 서비스" + +msgid "IDS_CST_POP_CALLER_ID_AVAILABLE" +msgstr "발신자 번호가 표시됩니다" + +msgid "IDS_CST_POP_CALLER_ID_HIDDEN" +msgstr "발신자 번호가 표시되지 않습니다" + +msgid "IDS_CST_POP_CALLER_ID_RESTRICTED" +msgstr "발신자 번호 표시 제한" + +msgid "IDS_CST_POP_CALLER_ID_SHOWN" +msgstr "발신자 번호가 표시됩니다" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_ANSWERING_CALLS" +msgstr "전화를 받을 때 내 전화번호를 전송하지 않습니다" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_CALLING" +msgstr "전화를 걸 때 내 전화번호를 전송하지 않습니다" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_ANSWERING_CALLS" +msgstr "전화를 받을 때 내 발신자 정보를 전송합니다" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_CALLING" +msgstr "전화를 걸 때 내 발신자 정보를 전송합니다" + +msgid "IDS_CST_POP_PASSWORD_BLOCKED" +msgstr "비밀번호가 잠금 설정되었습니다" + +msgid "IDS_CST_POP_REJECTED_BY_NETWORK" +msgstr "네트워크에서 거부되었습니다" + +msgid "IDS_CST_POP_REQUESTING_ING" +msgstr "요청 중..." + +msgid "IDS_CST_POP_SERVICE_NOT_AUTHORISED" +msgstr "서비스가 인증되지 않았습니다" + +msgid "IDS_ST_POP_ALL_BARRING" +msgstr "모두 제한되었습니다" + +msgid "IDS_ST_POP_INCOMING_BARRING" +msgstr "수신 제한" + +msgid "IDS_ST_POP_OUTGOING_BARRING" +msgstr "발신제한" + +msgid "IDS_CST_POP_SERVICE_UNAVAILABLE" +msgstr "서비스를 사용할 수 없습니다" + +msgid "IDS_CST_POP_INVALID_PASSWORD" +msgstr "비밀번호가 바르지 않습니다" + +msgid "IDS_CST_OPT_CHANGE_PASSWORD" +msgstr "비밀번호 변경" + diff --git a/po/nl_NL.po b/po/nl_NL.po new file mode 100755 index 0000000..d22f772 --- /dev/null +++ b/po/nl_NL.po @@ -0,0 +1,141 @@ +msgid "IDS_CALL_POP_ALL_INCOMING_CALLS_BARRED" +msgstr "Alle inkomende oproepen geblokkeerd" + +msgid "IDS_CALL_POP_ALL_OUTGOING_CALLS_BARRED" +msgstr "Alle uitgaande oproepen geblokkeerd" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_ALWAYS" +msgstr "Alle oproepen doorschakelen" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_NO_ANSWER" +msgstr "Oproepen doorschakelen bij geen antwoord" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_UNREACHABLE" +msgstr "Doorschakelen indien onbereikbaar" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_WHEN_BUSY" +msgstr "Doorschakelen bij in gesprek" + +msgid "IDS_CALL_POP_INCOMING_CALLS_BARRED_WHEN_ROAMING" +msgstr "Inkomende oproepen in buitenland geblokkeerd" + +msgid "IDS_CALL_POP_OUTGOING_INTERNATIONAL_CALLS_EXCEPT_HOME_BARRED" +msgstr "Uitgaande internationale oproepen geblokkeerd behalve naar eigen land" + +msgid "IDS_CALL_POP_OUTGOING_INTER_CALLS_BARRED" +msgstr "Uitgaande internationale oproepen geblokkeerd" + +msgid "IDS_COM_POP_FOR_ALL_TELE_SERVICES_EXCEPT_SMS" +msgstr "voor Alle teleservices behalve SMS" + +msgid "IDS_CST_BODY_ALL_CALLS" +msgstr "Alle oproepen" + +msgid "IDS_CST_BODY_CALL_BARRING" +msgstr "Oproepen blokkeren" + +msgid "IDS_CST_BODY_CALL_DIVERTING" +msgstr "Oproepen doorschakelen" + +msgid "IDS_CST_BODY_CALL_WAITING" +msgstr "Wisselgesprek" + +msgid "IDS_CST_BODY_ENTER_NUMBER" +msgstr "Geef het nummer in" + +msgid "IDS_CST_BODY_FAX" +msgstr "Fax" + +msgid "IDS_CST_HEADER_CONDITIONAL" +msgstr "Voorwaardelijk" + +msgid "IDS_CST_POP_ALL_ASYNCHRONOUS_DATA" +msgstr "Alle asynchrone gegevens" + +msgid "IDS_CST_POP_ALL_BEARER_SERVICES" +msgstr "Alle dragerdiensten" + +msgid "IDS_CST_POP_ALL_DATA_SERVICES" +msgstr "Alle datadiensten" + +msgid "IDS_CST_POP_ALL_PADCA_SERVICES" +msgstr "Alle PADCA-diensten" + +msgid "IDS_CST_POP_ALL_PDS_SERVICES" +msgstr "Alle PDS-diensten" + +msgid "IDS_CST_POP_ALL_PLMN_BEARERS" +msgstr "Alle PLMN-dragers" + +msgid "IDS_CST_POP_ALL_SERVICES" +msgstr "Alle diensten" + +msgid "IDS_CST_POP_ALL_SYNCHRONOUS_SERVICES" +msgstr "Alle synchrone diensten" + +msgid "IDS_CST_POP_ALL_TELECOM_SERVICES" +msgstr "Alle telecom-diensten" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_NOT_SHOWN_WHEN_CALLING" +msgstr "Gebelde nummer niet tonen tijdens oproep" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_SHOWN_WHEN_CALLING" +msgstr "Gebelde nummer tonen tijdens oproep" + +msgid "IDS_CST_POP_ASYNCHRONOUS_DATA_SERVICES" +msgstr "Asynchrone datadiensten" + +msgid "IDS_CST_POP_CALLER_ID_AVAILABLE" +msgstr "Beller-id beschikbaar" + +msgid "IDS_CST_POP_CALLER_ID_HIDDEN" +msgstr "Beller-id verborgen" + +msgid "IDS_CST_POP_CALLER_ID_RESTRICTED" +msgstr "Beller-ID beperkt" + +msgid "IDS_CST_POP_CALLER_ID_SHOWN" +msgstr "Info beller tonen" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_ANSWERING_CALLS" +msgstr "Mijn nummer niet\ntonen bij\ninkomende oproep" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_CALLING" +msgstr "Mijn nummer\nniet tonen\nbij uitgaande oproep" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_ANSWERING_CALLS" +msgstr "Mijn nummer tonen\nbij inkomende\noproep" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_CALLING" +msgstr "Mijn nummer tonen\nbij uitgaande\noproep" + +msgid "IDS_CST_POP_PASSWORD_BLOCKED" +msgstr "Wachtwoord geblokkeerd" + +msgid "IDS_CST_POP_REJECTED_BY_NETWORK" +msgstr "Geweigerd door netwerk" + +msgid "IDS_CST_POP_REQUESTING_ING" +msgstr "Aanvragen..." + +msgid "IDS_CST_POP_SERVICE_NOT_AUTHORISED" +msgstr "Dienst niet toegestaan" + +msgid "IDS_ST_POP_ALL_BARRING" +msgstr "Alles geblokkeerd" + +msgid "IDS_ST_POP_INCOMING_BARRING" +msgstr "Inkomend blokkeren" + +msgid "IDS_ST_POP_OUTGOING_BARRING" +msgstr "Uitgaand blokkeren" + +msgid "IDS_CST_POP_SERVICE_UNAVAILABLE" +msgstr "Service niet beschikbaar" + +msgid "IDS_CST_POP_INVALID_PASSWORD" +msgstr "Wachtwoord onjuist" + +msgid "IDS_CST_OPT_CHANGE_PASSWORD" +msgstr "Wachtwoord wijzigen" + diff --git a/po/pt_PT.po b/po/pt_PT.po new file mode 100755 index 0000000..ba890d6 --- /dev/null +++ b/po/pt_PT.po @@ -0,0 +1,141 @@ +msgid "IDS_CALL_POP_ALL_INCOMING_CALLS_BARRED" +msgstr "Todas as chamadas recebidas restringidas" + +msgid "IDS_CALL_POP_ALL_OUTGOING_CALLS_BARRED" +msgstr "Todas as chamadas efectuadas restringidas" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_ALWAYS" +msgstr "Desvio de chamadas activado: Sempre" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_NO_ANSWER" +msgstr "Desvio de chamadas activado: Não atende" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_UNREACHABLE" +msgstr "Desvio de chamadas activado: Incontactável" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_WHEN_BUSY" +msgstr "Desvio de chamadas activado: Se ocupado" + +msgid "IDS_CALL_POP_INCOMING_CALLS_BARRED_WHEN_ROAMING" +msgstr "Chamadas recebidas barradas quando em roaming" + +msgid "IDS_CALL_POP_OUTGOING_INTERNATIONAL_CALLS_EXCEPT_HOME_BARRED" +msgstr "Chamadas internacionais efectuadas barradas excepto para origem" + +msgid "IDS_CALL_POP_OUTGOING_INTER_CALLS_BARRED" +msgstr "Chamadas internacionais restringidas" + +msgid "IDS_COM_POP_FOR_ALL_TELE_SERVICES_EXCEPT_SMS" +msgstr "para todos os serviços Tele excepto SMS" + +msgid "IDS_CST_BODY_ALL_CALLS" +msgstr "Todas as chamadas" + +msgid "IDS_CST_BODY_CALL_BARRING" +msgstr "Barramento de chamadas" + +msgid "IDS_CST_BODY_CALL_DIVERTING" +msgstr "Desvio de chamadas" + +msgid "IDS_CST_BODY_CALL_WAITING" +msgstr "Chamada em espera" + +msgid "IDS_CST_BODY_ENTER_NUMBER" +msgstr "Introduzir número" + +msgid "IDS_CST_BODY_FAX" +msgstr "Fax" + +msgid "IDS_CST_HEADER_CONDITIONAL" +msgstr "Condicional" + +msgid "IDS_CST_POP_ALL_ASYNCHRONOUS_DATA" +msgstr "Todos os dados assíncronos" + +msgid "IDS_CST_POP_ALL_BEARER_SERVICES" +msgstr "Todos os serviços da portadora" + +msgid "IDS_CST_POP_ALL_DATA_SERVICES" +msgstr "Todos os serviços de dados" + +msgid "IDS_CST_POP_ALL_PADCA_SERVICES" +msgstr "Todos os serviços PADCA" + +msgid "IDS_CST_POP_ALL_PDS_SERVICES" +msgstr "Todos os serviços PDS" + +msgid "IDS_CST_POP_ALL_PLMN_BEARERS" +msgstr "Todas as portadoras PLMN" + +msgid "IDS_CST_POP_ALL_SERVICES" +msgstr "Todos os serviços" + +msgid "IDS_CST_POP_ALL_SYNCHRONOUS_SERVICES" +msgstr "Todos os serviços síncronos" + +msgid "IDS_CST_POP_ALL_TELECOM_SERVICES" +msgstr "Todos os serviços de telecomunicações" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_NOT_SHOWN_WHEN_CALLING" +msgstr "Número de atendimento não é mostrado ao efectuar chamada" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_SHOWN_WHEN_CALLING" +msgstr "Número de atendimento é mostrado ao efectuar chamada" + +msgid "IDS_CST_POP_ASYNCHRONOUS_DATA_SERVICES" +msgstr "Serviços de dados assíncronos" + +msgid "IDS_CST_POP_CALLER_ID_AVAILABLE" +msgstr "ID de chamador disponível" + +msgid "IDS_CST_POP_CALLER_ID_HIDDEN" +msgstr "ID de chamador oculto" + +msgid "IDS_CST_POP_CALLER_ID_RESTRICTED" +msgstr "ID do chamador restringido" + +msgid "IDS_CST_POP_CALLER_ID_SHOWN" +msgstr "ID do chamador exibido" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_ANSWERING_CALLS" +msgstr "O meu ID de chamador não é enviado durante o atendimento de chamadas" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_CALLING" +msgstr "O meu ID de chamador não é enviado durante a realização de chamadas" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_ANSWERING_CALLS" +msgstr "O meu ID de chamador é enviado durante o atendimento de chamadas" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_CALLING" +msgstr "O meu ID de chamador é enviado durante a realização de chamadas" + +msgid "IDS_CST_POP_PASSWORD_BLOCKED" +msgstr "Palavra-passe bloqueada" + +msgid "IDS_CST_POP_REJECTED_BY_NETWORK" +msgstr "Rejeitado pela rede" + +msgid "IDS_CST_POP_REQUESTING_ING" +msgstr "A pedir..." + +msgid "IDS_CST_POP_SERVICE_NOT_AUTHORISED" +msgstr "Serviço não autorizado" + +msgid "IDS_ST_POP_ALL_BARRING" +msgstr "Todos os barramentos" + +msgid "IDS_ST_POP_INCOMING_BARRING" +msgstr "Barramento de recepção" + +msgid "IDS_ST_POP_OUTGOING_BARRING" +msgstr "Barramento de efectuadas" + +msgid "IDS_CST_POP_SERVICE_UNAVAILABLE" +msgstr "Serviço não disponível" + +msgid "IDS_CST_POP_INVALID_PASSWORD" +msgstr "Palavra-passe inválida" + +msgid "IDS_CST_OPT_CHANGE_PASSWORD" +msgstr "Alterar palavra-passe" + diff --git a/po/ru_RU.po b/po/ru_RU.po new file mode 100755 index 0000000..96f6409 --- /dev/null +++ b/po/ru_RU.po @@ -0,0 +1,141 @@ +msgid "IDS_CALL_POP_ALL_INCOMING_CALLS_BARRED" +msgstr "Все входящие вызовы запрещены" + +msgid "IDS_CALL_POP_ALL_OUTGOING_CALLS_BARRED" +msgstr "Все исходящие вызовы\nзапрещены" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_ALWAYS" +msgstr "Переадресация вызовов: Всегда" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_NO_ANSWER" +msgstr "Переадресация вызова: Нет ответа" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_UNREACHABLE" +msgstr "Переадресация вызовов: Если недоступен" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_WHEN_BUSY" +msgstr "Переадресация вызова: Если занято" + +msgid "IDS_CALL_POP_INCOMING_CALLS_BARRED_WHEN_ROAMING" +msgstr "Входящие вызовы запрещены при роуминге" + +msgid "IDS_CALL_POP_OUTGOING_INTERNATIONAL_CALLS_EXCEPT_HOME_BARRED" +msgstr "Запрет исходящих международных вызовов, кроме домашних" + +msgid "IDS_CALL_POP_OUTGOING_INTER_CALLS_BARRED" +msgstr "Исходящие международные\nвызовы запрещены" + +msgid "IDS_COM_POP_FOR_ALL_TELE_SERVICES_EXCEPT_SMS" +msgstr "для всех услуги связи SMS" + +msgid "IDS_CST_BODY_ALL_CALLS" +msgstr "Все вызовы" + +msgid "IDS_CST_BODY_CALL_BARRING" +msgstr "Запрет вызова" + +msgid "IDS_CST_BODY_CALL_DIVERTING" +msgstr "Переадресация вызова" + +msgid "IDS_CST_BODY_CALL_WAITING" +msgstr "Ожидание вызова" + +msgid "IDS_CST_BODY_ENTER_NUMBER" +msgstr "Введите номер" + +msgid "IDS_CST_BODY_FAX" +msgstr "Факс" + +msgid "IDS_CST_HEADER_CONDITIONAL" +msgstr "Условная" + +msgid "IDS_CST_POP_ALL_ASYNCHRONOUS_DATA" +msgstr "Все асинхронные данные" + +msgid "IDS_CST_POP_ALL_BEARER_SERVICES" +msgstr "Все услуги каналов" + +msgid "IDS_CST_POP_ALL_DATA_SERVICES" +msgstr "Все услуги данных" + +msgid "IDS_CST_POP_ALL_PADCA_SERVICES" +msgstr "Все услуги PADCA" + +msgid "IDS_CST_POP_ALL_PDS_SERVICES" +msgstr "Все услуги PDS" + +msgid "IDS_CST_POP_ALL_PLMN_BEARERS" +msgstr "Все каналы PLMN" + +msgid "IDS_CST_POP_ALL_SERVICES" +msgstr "Все услуги" + +msgid "IDS_CST_POP_ALL_SYNCHRONOUS_SERVICES" +msgstr "Все синхронные услуги" + +msgid "IDS_CST_POP_ALL_TELECOM_SERVICES" +msgstr "Все услуги связи" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_NOT_SHOWN_WHEN_CALLING" +msgstr "Не отображать номер абонента при ответе на вызов" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_SHOWN_WHEN_CALLING" +msgstr "Отображать номер абонента при ответе на вызов" + +msgid "IDS_CST_POP_ASYNCHRONOUS_DATA_SERVICES" +msgstr "Асинхронные услуги данных" + +msgid "IDS_CST_POP_CALLER_ID_AVAILABLE" +msgstr "Фотоопределитель доступен" + +msgid "IDS_CST_POP_CALLER_ID_HIDDEN" +msgstr "Фотоопределитель скрыт" + +msgid "IDS_CST_POP_CALLER_ID_RESTRICTED" +msgstr "Фотоопределитель ограничен" + +msgid "IDS_CST_POP_CALLER_ID_SHOWN" +msgstr "Фотоопределитель отображается" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_ANSWERING_CALLS" +msgstr "Не передавать мой номер при ответе на вызовы" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_CALLING" +msgstr "Не передавать мой номер во время вызова" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_ANSWERING_CALLS" +msgstr "Мой номер отправляется при ответе на вызов" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_CALLING" +msgstr "Мой номер отправляется при вызове" + +msgid "IDS_CST_POP_PASSWORD_BLOCKED" +msgstr "Пароль заблокирован" + +msgid "IDS_CST_POP_REJECTED_BY_NETWORK" +msgstr "Отклонено сетью" + +msgid "IDS_CST_POP_REQUESTING_ING" +msgstr "Запрос..." + +msgid "IDS_CST_POP_SERVICE_NOT_AUTHORISED" +msgstr "Услуга не разрешена" + +msgid "IDS_ST_POP_ALL_BARRING" +msgstr "Все запрещены" + +msgid "IDS_ST_POP_INCOMING_BARRING" +msgstr "Запрет входящих" + +msgid "IDS_ST_POP_OUTGOING_BARRING" +msgstr "Запрет исходящих" + +msgid "IDS_CST_POP_SERVICE_UNAVAILABLE" +msgstr "Услуга недоступна" + +msgid "IDS_CST_POP_INVALID_PASSWORD" +msgstr "Неправильный пароль" + +msgid "IDS_CST_OPT_CHANGE_PASSWORD" +msgstr "Изменить пароль" + diff --git a/po/test.pot b/po/test.pot new file mode 100755 index 0000000..d900988 --- /dev/null +++ b/po/test.pot @@ -0,0 +1,30 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2009-11-30 15:21+0900\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: test.c:40 +msgid "Application template" +msgstr "" + +#: test.c:41 +msgid "Click to exit" +msgstr "" + +#. SLP_appfwk_set_window_size(480, 800); +#: test.c:94 +msgid "FONT_NAME" +msgstr "" diff --git a/po/tr_TR.po b/po/tr_TR.po new file mode 100755 index 0000000..e92ec19 --- /dev/null +++ b/po/tr_TR.po @@ -0,0 +1,141 @@ +msgid "IDS_CALL_POP_ALL_INCOMING_CALLS_BARRED" +msgstr "Gelen tüm aramalar engellendi" + +msgid "IDS_CALL_POP_ALL_OUTGOING_CALLS_BARRED" +msgstr "Giden tüm aramalar engellendi" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_ALWAYS" +msgstr "Arama yönlendirme etkin: Her zaman" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_NO_ANSWER" +msgstr "Arama yönlendirme etkin: Cevap yokken" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_UNREACHABLE" +msgstr "Arama yönlendirme etkin: Ulaşılamadığında" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_WHEN_BUSY" +msgstr "Arama yönlendirme etkin: Meşgulken" + +msgid "IDS_CALL_POP_INCOMING_CALLS_BARRED_WHEN_ROAMING" +msgstr "Geçiş yaparken gelen arama engelleme" + +msgid "IDS_CALL_POP_OUTGOING_INTERNATIONAL_CALLS_EXCEPT_HOME_BARRED" +msgstr "Yurt için hariç uluslar arası gideni engelle" + +msgid "IDS_CALL_POP_OUTGOING_INTER_CALLS_BARRED" +msgstr "Giden uluslararası aramalar engellendi" + +msgid "IDS_COM_POP_FOR_ALL_TELE_SERVICES_EXCEPT_SMS" +msgstr "SMS hariç Tüm Tele hizmetleri için" + +msgid "IDS_CST_BODY_ALL_CALLS" +msgstr "Tüm aramalar" + +msgid "IDS_CST_BODY_CALL_BARRING" +msgstr "Arama engelleme" + +msgid "IDS_CST_BODY_CALL_DIVERTING" +msgstr "Arama yönlendirme" + +msgid "IDS_CST_BODY_CALL_WAITING" +msgstr "Arama bekletme" + +msgid "IDS_CST_BODY_ENTER_NUMBER" +msgstr "Numarayı girin" + +msgid "IDS_CST_BODY_FAX" +msgstr "Faks" + +msgid "IDS_CST_HEADER_CONDITIONAL" +msgstr "Koşullu" + +msgid "IDS_CST_POP_ALL_ASYNCHRONOUS_DATA" +msgstr "Tüm asenkron veriler" + +msgid "IDS_CST_POP_ALL_BEARER_SERVICES" +msgstr "Tüm taşıyıcı servisleri" + +msgid "IDS_CST_POP_ALL_DATA_SERVICES" +msgstr "Tüm veri servisleri" + +msgid "IDS_CST_POP_ALL_PADCA_SERVICES" +msgstr "Tüm PADCA servisleri" + +msgid "IDS_CST_POP_ALL_PDS_SERVICES" +msgstr "Tüm PDS servisleri" + +msgid "IDS_CST_POP_ALL_PLMN_BEARERS" +msgstr "Tüm PLMN taşıyıcıları" + +msgid "IDS_CST_POP_ALL_SERVICES" +msgstr "Tüm servisler" + +msgid "IDS_CST_POP_ALL_SYNCHRONOUS_SERVICES" +msgstr "Tüm senkron servisler" + +msgid "IDS_CST_POP_ALL_TELECOM_SERVICES" +msgstr "Tüm telekom servisleri" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_NOT_SHOWN_WHEN_CALLING" +msgstr "Arama sırasında cevaplayan numara gösterilmez" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_SHOWN_WHEN_CALLING" +msgstr "Arama sırasında cevaplayan numara gösterilir" + +msgid "IDS_CST_POP_ASYNCHRONOUS_DATA_SERVICES" +msgstr "Asenk. veri servisleri" + +msgid "IDS_CST_POP_CALLER_ID_AVAILABLE" +msgstr "Arayan kimliği var" + +msgid "IDS_CST_POP_CALLER_ID_HIDDEN" +msgstr "Arayan kimliği gizli" + +msgid "IDS_CST_POP_CALLER_ID_RESTRICTED" +msgstr "Arayan kimliği kısıtlı" + +msgid "IDS_CST_POP_CALLER_ID_SHOWN" +msgstr "Arayan kimliği gösterildi" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_ANSWERING_CALLS" +msgstr "Arayan kişi kimliğim aramaları cevaplarken gönderilmez" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_CALLING" +msgstr "Arayan kişi kimliği arama yaparken gönderilmez" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_ANSWERING_CALLS" +msgstr "Arayan kişi kimliğim aramaları cevaplarken gönderilir" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_CALLING" +msgstr "Arayan kişi kimliğim arama yaparken gönderilir" + +msgid "IDS_CST_POP_PASSWORD_BLOCKED" +msgstr "Şifre engellendi" + +msgid "IDS_CST_POP_REJECTED_BY_NETWORK" +msgstr "Şebeke tarafından reddedildi" + +msgid "IDS_CST_POP_REQUESTING_ING" +msgstr "İstek gönderiliyor..." + +msgid "IDS_CST_POP_SERVICE_NOT_AUTHORISED" +msgstr "Servise izin verilmemiş" + +msgid "IDS_ST_POP_ALL_BARRING" +msgstr "Tümünü engelleme" + +msgid "IDS_ST_POP_INCOMING_BARRING" +msgstr "Gelen engellemeler" + +msgid "IDS_ST_POP_OUTGOING_BARRING" +msgstr "Giden engelleme" + +msgid "IDS_CST_POP_SERVICE_UNAVAILABLE" +msgstr "Servis Kullanılamıyor" + +msgid "IDS_CST_POP_INVALID_PASSWORD" +msgstr "Yanlış şifre" + +msgid "IDS_CST_OPT_CHANGE_PASSWORD" +msgstr "Şifre değiştir" + diff --git a/po/update-po.sh b/po/update-po.sh new file mode 100755 index 0000000..82f01f8 --- /dev/null +++ b/po/update-po.sh @@ -0,0 +1,57 @@ +#!/bin/sh + +PACKAGE=ciss +SRCROOT=.. +POTFILES=POTFILES.in + +ALL_LINGUAS= am az be ca cs da de el en_CA en_GB es et fi fr hr hu it ja ko lv mk ml ms nb ne nl pa pl pt pt_BR ru rw sk sl sr sr@Latn sv ta tr uk vi zh_CN zh_TW +#ALL_LINGUAS="en_US en_GB ja ko zh_CN" + +XGETTEXT=/usr/bin/xgettext +MSGMERGE=/usr/bin/msgmerge + +echo -n "Make ${PACKAGE}.pot " +if [ ! -e $POTFILES ] ; then + echo "$POTFILES not found" + exit 1 +fi + +$XGETTEXT --default-domain=${PACKAGE} --directory=${SRCROOT} \ + --add-comments --keyword=_ --keyword=N_ --files-from=$POTFILES \ +&& test ! -f ${PACKAGE}.po \ + || (rm -f ${PACKAGE}.pot && mv ${PACKAGE}.po ${PACKAGE}.pot) + +if [ $? -ne 0 ]; then + echo "error" + exit 1 +else + echo "done" +fi + +for LANG in $ALL_LINGUAS; do + echo "$LANG : " + + if [ ! -e $LANG.po ] ; then + sed 's/CHARSET/UTF-8/g' ${PACKAGE}.pot > ${LANG}.po + echo "${LANG}.po created" + else + if $MSGMERGE ${LANG}.po ${PACKAGE}.pot -o ${LANG}.new.po ; then + if cmp ${LANG}.po ${LANG}.new.po > /dev/null 2>&1; then + rm -f ${LANG}.new.po + else + if mv -f ${LANG}.new.po ${LANG}.po; then + echo "" + else + echo "msgmerge for $LANG.po failed: cannot move $LANG.new.po to $LANG.po" 1>&2 + rm -f ${LANG}.new.po + exit 1 + fi + fi + else + echo "msgmerge for $LANG failed!" + rm -f ${LANG}.new.po + fi + fi + echo "" +done + diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100755 index 0000000..69105e8 --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,141 @@ +msgid "IDS_CALL_POP_ALL_INCOMING_CALLS_BARRED" +msgstr "禁止所有来电" + +msgid "IDS_CALL_POP_ALL_OUTGOING_CALLS_BARRED" +msgstr "禁止全部拨出电话" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_ALWAYS" +msgstr "激活呼叫转移:始终" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_NO_ANSWER" +msgstr "激活呼叫转移:无应答" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_UNREACHABLE" +msgstr "激活呼叫转移:无法接通" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_WHEN_BUSY" +msgstr "激活呼叫转移:遇忙" + +msgid "IDS_CALL_POP_INCOMING_CALLS_BARRED_WHEN_ROAMING" +msgstr "漫游时呼入限制" + +msgid "IDS_CALL_POP_OUTGOING_INTERNATIONAL_CALLS_EXCEPT_HOME_BARRED" +msgstr "除本国外的国际呼出" + +msgid "IDS_CALL_POP_OUTGOING_INTER_CALLS_BARRED" +msgstr "禁止拨打国际长途" + +msgid "IDS_COM_POP_FOR_ALL_TELE_SERVICES_EXCEPT_SMS" +msgstr "用于除短信息以外的所有电信服务" + +msgid "IDS_CST_BODY_ALL_CALLS" +msgstr "全部通话" + +msgid "IDS_CST_BODY_CALL_BARRING" +msgstr "呼叫限制" + +msgid "IDS_CST_BODY_CALL_DIVERTING" +msgstr "呼叫转移" + +msgid "IDS_CST_BODY_CALL_WAITING" +msgstr "呼叫等待" + +msgid "IDS_CST_BODY_ENTER_NUMBER" +msgstr "输入号码" + +msgid "IDS_CST_BODY_FAX" +msgstr "传真" + +msgid "IDS_CST_HEADER_CONDITIONAL" +msgstr "有条件的" + +msgid "IDS_CST_POP_ALL_ASYNCHRONOUS_DATA" +msgstr "全部同步数据" + +msgid "IDS_CST_POP_ALL_BEARER_SERVICES" +msgstr "全部承载业务" + +msgid "IDS_CST_POP_ALL_DATA_SERVICES" +msgstr "全部数据业务" + +msgid "IDS_CST_POP_ALL_PADCA_SERVICES" +msgstr "全部 PADCA 服务" + +msgid "IDS_CST_POP_ALL_PDS_SERVICES" +msgstr "全部 PDS 服务" + +msgid "IDS_CST_POP_ALL_PLMN_BEARERS" +msgstr "全部PLMN承载器" + +msgid "IDS_CST_POP_ALL_SERVICES" +msgstr "全部业务" + +msgid "IDS_CST_POP_ALL_SYNCHRONOUS_SERVICES" +msgstr "全部同步服务" + +msgid "IDS_CST_POP_ALL_TELECOM_SERVICES" +msgstr "全部电信服务" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_NOT_SHOWN_WHEN_CALLING" +msgstr "通话时,不显示应答号码" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_SHOWN_WHEN_CALLING" +msgstr "通话时,显示应答号码" + +msgid "IDS_CST_POP_ASYNCHRONOUS_DATA_SERVICES" +msgstr "异步数据服务" + +msgid "IDS_CST_POP_CALLER_ID_AVAILABLE" +msgstr "来电者显示图像可用" + +msgid "IDS_CST_POP_CALLER_ID_HIDDEN" +msgstr "来电者显示图像已隐藏" + +msgid "IDS_CST_POP_CALLER_ID_RESTRICTED" +msgstr "来电者显示图像已限制" + +msgid "IDS_CST_POP_CALLER_ID_SHOWN" +msgstr "来电者显示图像已显示" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_ANSWERING_CALLS" +msgstr "接听来电时将发送我的呼叫者 ID" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_CALLING" +msgstr "拨打电话时未发送我的来电者显示图像" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_ANSWERING_CALLS" +msgstr "应答来电时将发送我的来电者显示图像" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_CALLING" +msgstr "拨打电话时将发送我的来电者显示图像" + +msgid "IDS_CST_POP_PASSWORD_BLOCKED" +msgstr "密码已锁定" + +msgid "IDS_CST_POP_REJECTED_BY_NETWORK" +msgstr "因网络问题而被拒绝" + +msgid "IDS_CST_POP_REQUESTING_ING" +msgstr "要求中..." + +msgid "IDS_CST_POP_SERVICE_NOT_AUTHORISED" +msgstr "服务未授权" + +msgid "IDS_ST_POP_ALL_BARRING" +msgstr "呼叫限制" + +msgid "IDS_ST_POP_INCOMING_BARRING" +msgstr "来电禁止" + +msgid "IDS_ST_POP_OUTGOING_BARRING" +msgstr "拨号禁止" + +msgid "IDS_CST_POP_SERVICE_UNAVAILABLE" +msgstr "服务无法正常提供" + +msgid "IDS_CST_POP_INVALID_PASSWORD" +msgstr "无效密码" + +msgid "IDS_CST_OPT_CHANGE_PASSWORD" +msgstr "更改密码" + diff --git a/po/zh_HK.po b/po/zh_HK.po new file mode 100755 index 0000000..96a78d0 --- /dev/null +++ b/po/zh_HK.po @@ -0,0 +1,141 @@ +msgid "IDS_CALL_POP_ALL_INCOMING_CALLS_BARRED" +msgstr "已限制全部來電" + +msgid "IDS_CALL_POP_ALL_OUTGOING_CALLS_BARRED" +msgstr "已限制所有撥出電話" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_ALWAYS" +msgstr "轉駁來電:全部轉駁" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_NO_ANSWER" +msgstr "轉駁來電:無人接聽" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_UNREACHABLE" +msgstr "來電轉駁:無法接通" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_WHEN_BUSY" +msgstr "來電轉駁:線路繁忙" + +msgid "IDS_CALL_POP_INCOMING_CALLS_BARRED_WHEN_ROAMING" +msgstr "漫遊時來電限制" + +msgid "IDS_CALL_POP_OUTGOING_INTERNATIONAL_CALLS_EXCEPT_HOME_BARRED" +msgstr "限制撥出國際電話(本地除外)" + +msgid "IDS_CALL_POP_OUTGOING_INTER_CALLS_BARRED" +msgstr "已限制撥出國際長途電話" + +msgid "IDS_COM_POP_FOR_ALL_TELE_SERVICES_EXCEPT_SMS" +msgstr "適用於全部電話服務(SMS 除外)" + +msgid "IDS_CST_BODY_ALL_CALLS" +msgstr "全部通話" + +msgid "IDS_CST_BODY_CALL_BARRING" +msgstr "通話限制" + +msgid "IDS_CST_BODY_CALL_DIVERTING" +msgstr "來電轉駁" + +msgid "IDS_CST_BODY_CALL_WAITING" +msgstr "來電待接" + +msgid "IDS_CST_BODY_ENTER_NUMBER" +msgstr "輸入號碼" + +msgid "IDS_CST_BODY_FAX" +msgstr "傳真" + +msgid "IDS_CST_HEADER_CONDITIONAL" +msgstr "條件性的" + +msgid "IDS_CST_POP_ALL_ASYNCHRONOUS_DATA" +msgstr "全部非同步數據" + +msgid "IDS_CST_POP_ALL_BEARER_SERVICES" +msgstr "全部承載服務" + +msgid "IDS_CST_POP_ALL_DATA_SERVICES" +msgstr "全部數據服務" + +msgid "IDS_CST_POP_ALL_PADCA_SERVICES" +msgstr "全部 PADCA 服務" + +msgid "IDS_CST_POP_ALL_PDS_SERVICES" +msgstr "全部 PDS 服務" + +msgid "IDS_CST_POP_ALL_PLMN_BEARERS" +msgstr "全部 PLMN 承載器" + +msgid "IDS_CST_POP_ALL_SERVICES" +msgstr "全部服務" + +msgid "IDS_CST_POP_ALL_SYNCHRONOUS_SERVICES" +msgstr "全部同步服務" + +msgid "IDS_CST_POP_ALL_TELECOM_SERVICES" +msgstr "全部電訊服務" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_NOT_SHOWN_WHEN_CALLING" +msgstr "通話時不顯示接聽電話號碼" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_SHOWN_WHEN_CALLING" +msgstr "通話時顯示接聽電話號碼" + +msgid "IDS_CST_POP_ASYNCHRONOUS_DATA_SERVICES" +msgstr "非同步數據服務" + +msgid "IDS_CST_POP_CALLER_ID_AVAILABLE" +msgstr "來電顯示可用" + +msgid "IDS_CST_POP_CALLER_ID_HIDDEN" +msgstr "已隱藏來電顯示" + +msgid "IDS_CST_POP_CALLER_ID_RESTRICTED" +msgstr "已限制來電顯示" + +msgid "IDS_CST_POP_CALLER_ID_SHOWN" +msgstr "已顯示來電顯示" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_ANSWERING_CALLS" +msgstr "我的來電顯示不會在接聽來電時送出" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_CALLING" +msgstr "我的來電顯示不會在撥出電話時送出" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_ANSWERING_CALLS" +msgstr "我的來電顯示將在接聽來電時送出" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_CALLING" +msgstr "我的來電顯示將在撥出電話時送出" + +msgid "IDS_CST_POP_PASSWORD_BLOCKED" +msgstr "已封鎖密碼" + +msgid "IDS_CST_POP_REJECTED_BY_NETWORK" +msgstr "被網絡拒絕" + +msgid "IDS_CST_POP_REQUESTING_ING" +msgstr "正在請求..." + +msgid "IDS_CST_POP_SERVICE_NOT_AUTHORISED" +msgstr "服務未授權" + +msgid "IDS_ST_POP_ALL_BARRING" +msgstr "全部限制" + +msgid "IDS_ST_POP_INCOMING_BARRING" +msgstr "來電限制" + +msgid "IDS_ST_POP_OUTGOING_BARRING" +msgstr "撥出限制" + +msgid "IDS_CST_POP_SERVICE_UNAVAILABLE" +msgstr "無可用服務" + +msgid "IDS_CST_POP_INVALID_PASSWORD" +msgstr "密碼無效" + +msgid "IDS_CST_OPT_CHANGE_PASSWORD" +msgstr "更改密碼" + diff --git a/po/zh_TW.po b/po/zh_TW.po new file mode 100755 index 0000000..5905904 --- /dev/null +++ b/po/zh_TW.po @@ -0,0 +1,141 @@ +msgid "IDS_CALL_POP_ALL_INCOMING_CALLS_BARRED" +msgstr "已限制所有來電" + +msgid "IDS_CALL_POP_ALL_OUTGOING_CALLS_BARRED" +msgstr "已阻止所有撥出電話" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_ALWAYS" +msgstr "轉移呼叫:永遠" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_NO_ANSWER" +msgstr "轉移呼叫:無人接聽" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_UNREACHABLE" +msgstr "轉移呼叫:無法接通" + +msgid "IDS_CALL_POP_CALL_DIVERTING_ACTIVE_C_WHEN_BUSY" +msgstr "轉移呼叫:忙線時" + +msgid "IDS_CALL_POP_INCOMING_CALLS_BARRED_WHEN_ROAMING" +msgstr "漫遊時限制來電" + +msgid "IDS_CALL_POP_OUTGOING_INTERNATIONAL_CALLS_EXCEPT_HOME_BARRED" +msgstr "限制撥出國際電話(本國除外)" + +msgid "IDS_CALL_POP_OUTGOING_INTER_CALLS_BARRED" +msgstr "已限制撥出國際電話" + +msgid "IDS_COM_POP_FOR_ALL_TELE_SERVICES_EXCEPT_SMS" +msgstr "適用於所有電信服務(SMS 除外)" + +msgid "IDS_CST_BODY_ALL_CALLS" +msgstr "全部通話" + +msgid "IDS_CST_BODY_CALL_BARRING" +msgstr "通話限制" + +msgid "IDS_CST_BODY_CALL_DIVERTING" +msgstr "呼叫轉移" + +msgid "IDS_CST_BODY_CALL_WAITING" +msgstr "來電等待" + +msgid "IDS_CST_BODY_ENTER_NUMBER" +msgstr "輸入號碼" + +msgid "IDS_CST_BODY_FAX" +msgstr "傳真" + +msgid "IDS_CST_HEADER_CONDITIONAL" +msgstr "條件式" + +msgid "IDS_CST_POP_ALL_ASYNCHRONOUS_DATA" +msgstr "所有非同步資料" + +msgid "IDS_CST_POP_ALL_BEARER_SERVICES" +msgstr "所有承載者服務" + +msgid "IDS_CST_POP_ALL_DATA_SERVICES" +msgstr "所有資料服務" + +msgid "IDS_CST_POP_ALL_PADCA_SERVICES" +msgstr "所有 PADCA 服務" + +msgid "IDS_CST_POP_ALL_PDS_SERVICES" +msgstr "所有 PDS 服務" + +msgid "IDS_CST_POP_ALL_PLMN_BEARERS" +msgstr "所有 PLMN 承載者" + +msgid "IDS_CST_POP_ALL_SERVICES" +msgstr "所有服務" + +msgid "IDS_CST_POP_ALL_SYNCHRONOUS_SERVICES" +msgstr "所有同步服務" + +msgid "IDS_CST_POP_ALL_TELECOM_SERVICES" +msgstr "所有電訊服務" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_NOT_SHOWN_WHEN_CALLING" +msgstr "通話時不顯示接聽電話號碼" + +msgid "IDS_CST_POP_ANSWERING_NUMBER_IS_SHOWN_WHEN_CALLING" +msgstr "通話時顯示接聽電話號碼" + +msgid "IDS_CST_POP_ASYNCHRONOUS_DATA_SERVICES" +msgstr "非同步資料服務" + +msgid "IDS_CST_POP_CALLER_ID_AVAILABLE" +msgstr "來電顯示可用" + +msgid "IDS_CST_POP_CALLER_ID_HIDDEN" +msgstr "已隱藏來電顯示" + +msgid "IDS_CST_POP_CALLER_ID_RESTRICTED" +msgstr "已限制來電顯示" + +msgid "IDS_CST_POP_CALLER_ID_SHOWN" +msgstr "已顯示來電顯示" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_ANSWERING_CALLS" +msgstr "不在接聽來電時送出我的來電顯示" + +msgid "IDS_CST_POP_MY_CALLER_ID_IS_NOT_SENT_WHEN_CALLING" +msgstr "我的來電顯示不在撥打電話時送出" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_ANSWERING_CALLS" +msgstr "我的來電顯示將在接聽來電時送出" + +msgid "IDS_CST_POP_MY_CALLER_ID_WILL_BE_SENT_WHEN_CALLING" +msgstr "我的來電顯示將在撥打電話時送出" + +msgid "IDS_CST_POP_PASSWORD_BLOCKED" +msgstr "已封鎖密碼" + +msgid "IDS_CST_POP_REJECTED_BY_NETWORK" +msgstr "已遭網路拒絕" + +msgid "IDS_CST_POP_REQUESTING_ING" +msgstr "正在請求..." + +msgid "IDS_CST_POP_SERVICE_NOT_AUTHORISED" +msgstr "服務未經授權" + +msgid "IDS_ST_POP_ALL_BARRING" +msgstr "全部限制" + +msgid "IDS_ST_POP_INCOMING_BARRING" +msgstr "限制來電" + +msgid "IDS_ST_POP_OUTGOING_BARRING" +msgstr "限制撥出" + +msgid "IDS_CST_POP_SERVICE_UNAVAILABLE" +msgstr "無法使用服務" + +msgid "IDS_CST_POP_INVALID_PASSWORD" +msgstr "密碼無效" + +msgid "IDS_CST_OPT_CHANGE_PASSWORD" +msgstr "更改密碼" + diff --git a/resource/ciss-mmi.edc b/resource/ciss-mmi.edc new file mode 100755 index 0000000..32c866d --- /dev/null +++ b/resource/ciss-mmi.edc @@ -0,0 +1,107 @@ +collections { +group { name: "popup_progress"; + parts { + part { name: "pad_t"; + scale : 1; + mouse_events: 0; + repeat_events: 1; + description { state: "default" 0.0; + align: 0.5 0.0; + min: 0 14; + fixed: 0 1; + rel1 { + relative: 1.0 0.0; + to_x: "pad_l"; + } + rel2 { + relative: 0.0 0.0; + to_x: "pad_r"; + } + } + } + part { name: "pad_l"; + scale: 1; + description { state: "default" 0.0; + min : 10 0; + fixed: 1 0; + rel1 { + relative: 0.0 0.0; + } + rel2 { + relative: 0.0 1.0; + } + align: 0.0 0.0; + } + } + part { name: "pad_r"; + scale: 1; + description { state: "default" 0.0; + min : 10 0; + fixed: 1 0; + rel1 { + relative: 1.0 0.0; + } + rel2 { + relative: 1.0 1.0; + } + align: 1.0 0.0; + } + } + part{ name:"elm.swallow.content"; + type: SWALLOW; + scale : 1; + description { state: "default" 0.0; + min: 300 0; + align: 0.5 0.5; + fixed: 1 0; + rel1 { + relative: 0.5 1.0; + to: "pad_t"; + } + rel2 { + relative: 0.5 0.0; + to: "pad_b"; + } + } + } + part { name: "pad_b"; + scale : 1; + mouse_events: 0; + repeat_events: 1; + description { state: "default" 0.0; + align: 0.5 1.0; + min: 0 90; + fixed: 0 1; + rel1 { + relative: 1.0 1.0; + to_x: "pad_l"; + } + rel2 { + relative: 0.0 1.0; + to_x: "pad_r"; + } + } + } + + part { name: "elm.swallow.end"; + type: SWALLOW; + scale : 1; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + align: 0.0 0.0; + fixed: 1 1; + rel1 { + relative: 0.0 0.0; + to: "pad_b"; + } + rel2 { + relative: 1.0 1.0; + to: "pad_b"; + } + } + } + + } +} +} diff --git a/src/ciss-converter.c b/src/ciss-converter.c new file mode 100755 index 0000000..847b51a --- /dev/null +++ b/src/ciss-converter.c @@ -0,0 +1,753 @@ +/* + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * This file is part of + * Written by , + * + * PROPRIETARY/CONFIDENTIAL + * + * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). + * You shall not disclose such Confidential Information and shall use it only in accordance + * with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. + * SAMSUNG make no representations or warranties about the suitability of the software, + * either express or implied, including but not limited to the implied warranties of merchantability, + * fitness for a particular purpose, or non-infringement. + * SAMSUNG shall not be liable for any damages suffered by licensee as a result of using, + * modifying or distributing this software or its derivatives. + * + */ + +#include "ciss-converter.h" + +static const sc_table_element_type sc_conversion_table_ss[] = { + {CISS_ENG_SC_CF, TAPI_SS_FORWARD_WHEN_ALL_FORWARDING_EV, TAPI_SS_TYPE_FORWARDING}, + {CISS_ENG_SC_CFC, TAPI_SS_FORWARD_WHEN_ALL_CONDITIONAL_EV, TAPI_SS_TYPE_FORWARDING}, + {CISS_ENG_SC_CFU, TAPI_SS_FORWARD_WHEN_UNCONDITIONAL_EV, TAPI_SS_TYPE_FORWARDING}, + {CISS_ENG_SC_CFB, TAPI_SS_FORWARD_WHEN_BUSY_EV, TAPI_SS_TYPE_FORWARDING}, + {CISS_ENG_SC_CFNRY, TAPI_SS_FORWARD_WHEN_NO_ANSWER_EV, TAPI_SS_TYPE_FORWARDING}, + {CISS_ENG_SC_CFNRC, TAPI_SS_FORWARD_WHEN_NOT_REACHABLE_EV, TAPI_SS_TYPE_FORWARDING}, + {CISS_ENG_SC_CLIP, TAPI_SS_CLI_CLIP, TAPI_SS_TYPE_IDENTIFICATION}, + {CISS_ENG_SC_CLIR, TAPI_SS_CLI_CLIR, TAPI_SS_TYPE_IDENTIFICATION}, + {CISS_ENG_SC_COLP, TAPI_SS_CLI_COLP, TAPI_SS_TYPE_IDENTIFICATION}, + {CISS_ENG_SC_COLR, TAPI_SS_CLI_COLR, TAPI_SS_TYPE_IDENTIFICATION}, + {CISS_ENG_SC_CNAP, TAPI_SS_CLI_CNAP, TAPI_SS_TYPE_IDENTIFICATION}, + {CISS_ENG_SC_CW, 0, TAPI_SS_TYPE_WAITING}, + {CISS_ENG_SC_B, TAPI_CALL_BARRING_ALL, TAPI_SS_TYPE_BARRING}, + {CISS_ENG_SC_OB, TAPI_CALL_BARRING_OUTGOING, TAPI_SS_TYPE_BARRING}, + {CISS_ENG_SC_IB, TAPI_CALL_BARRING_INCOMING, TAPI_SS_TYPE_BARRING}, + {CISS_ENG_SC_BAOC, TAPI_CALL_BARRING_ALL_OUTGOING_CALLS, TAPI_SS_TYPE_BARRING}, + {CISS_ENG_SC_BOIC, TAPI_CALL_BARRING_ALL_OUTGOING_INTERN_CALL, TAPI_SS_TYPE_BARRING}, + {CISS_ENG_SC_BOICEXHC, TAPI_CALL_BARRING_ALL_OUTGOING_INTERN_CALL_EXCEPT, TAPI_SS_TYPE_BARRING}, + {CISS_ENG_SC_BAIC, TAPI_CALL_BARRING_ALL_INCOMING_CALLS, TAPI_SS_TYPE_BARRING}, + {CISS_ENG_SC_BICROAM, TAPI_CALL_BARRING_ALL_INCOMING_CALLS_ROAMING, TAPI_SS_TYPE_BARRING} +}; + +/* table for conversion between local basic service group (BSG) + and tapi BSG. + + elements represent - local BSG value, + BSG code : basic service code (BS code) or + tele service code (TS code) + tapi BSG value + +*/ + +/* need to find mapping with the call type or forward type for call barring and call diverting else not required */ +static const bsg_table_element_type bsg_conversion_table[MAX_BSG_ENTRY] = { + {CISS_ENG_BSG_ALL, 0, TAPI_SS_TS_ALL_TELE_AND_BEARER_SERVICES}, + {CISS_ENG_BSG_ALL_TS, TS_CODE, TAPI_SS_TS_ALL_TELESERVICES}, + {CISS_ENG_BSG_TELEPHONY, TS_CODE, TAPI_SS_TS_ALL_SPEECH }, + /* ALS_SUPPORT : added mapping for auxilliary telephony */ +#ifdef FEATURE_SAMSUNG_ALS + {CISS_ENG_BSG_AUX_TELEPHONY, TS_CODE, TAPI_SS_TS_AUX_VOICE}, +#endif + {CISS_ENG_BSG_ALL_DATA, TS_CODE, TAPI_SS_TS_ALL_DATA_TELESERVICES}, + {CISS_ENG_BSG_FAX, TS_CODE, TAPI_SS_TS_FACS}, + {CISS_ENG_BSG_SMS, TS_CODE, TAPI_SS_TS_SMS}, + {CISS_ENG_BSG_ALL_TELE_EX_SMS, TS_CODE, TAPI_SS_TS_ALL_TELESERVICES_EXCEPT_SMS}, + {CISS_ENG_BSG_PLMN_TELE_ALL, TS_CODE, TAPI_SS_TS_ALL_PLMN_SPEC_TELE }, + {CISS_ENG_BSG_PLMN_TELE_1, TS_CODE, TAPI_SS_TS_PLMN_SPEC_TELE_1}, + {CISS_ENG_BSG_PLMN_TELE_2, TS_CODE, TAPI_SS_TS_PLMN_SPEC_TELE_2}, + {CISS_ENG_BSG_PLMN_TELE_3, TS_CODE, TAPI_SS_TS_PLMN_SPEC_TELE_3}, + {CISS_ENG_BSG_PLMN_TELE_4, TS_CODE, TAPI_SS_TS_PLMN_SPEC_TELE_4}, + {CISS_ENG_BSG_PLMN_TELE_5, TS_CODE, TAPI_SS_TS_PLMN_SPEC_TELE_5}, + {CISS_ENG_BSG_PLMN_TELE_6, TS_CODE, TAPI_SS_TS_PLMN_SPEC_TELE_6}, + {CISS_ENG_BSG_PLMN_TELE_7, TS_CODE, TAPI_SS_TS_PLMN_SPEC_TELE_7}, + {CISS_ENG_BSG_PLMN_TELE_8, TS_CODE, TAPI_SS_TS_PLMN_SPEC_TELE_8}, + {CISS_ENG_BSG_PLMN_TELE_9, TS_CODE, TAPI_SS_TS_PLMN_SPEC_TELE_9}, + {CISS_ENG_BSG_PLMN_TELE_A, TS_CODE, TAPI_SS_TS_PLMN_SPEC_TELE_A}, + {CISS_ENG_BSG_PLMN_TELE_B, TS_CODE, TAPI_SS_TS_PLMN_SPEC_TELE_B}, + {CISS_ENG_BSG_PLMN_TELE_C, TS_CODE, TAPI_SS_TS_PLMN_SPEC_TELE_C}, + {CISS_ENG_BSG_PLMN_TELE_D, TS_CODE, TAPI_SS_TS_PLMN_SPEC_TELE_D}, + {CISS_ENG_BSG_PLMN_TELE_E, TS_CODE, TAPI_SS_TS_PLMN_SPEC_TELE_E}, + {CISS_ENG_BSG_PLMN_TELE_F, TS_CODE, TAPI_SS_TS_PLMN_SPEC_TELE_F}, + {CISS_ENG_BSG_ALL_BS, BS_CODE, TAPI_SS_BS_ALL_BEARER_SERVICES}, + {CISS_ENG_BSG_ALL_ASYNC, BS_CODE, TAPI_SS_BS_ALL_ASYNCHRONOUS}, + {CISS_ENG_BSG_ALL_SYNC, BS_CODE, TAPI_SS_BS_ALL_SYNCHRONOUS}, + {CISS_ENG_BSG_ALL_DC_SYNC, BS_CODE, TAPI_SS_BS_DATA_CIRCUIT_SYNC}, + {CISS_ENG_BSG_ALL_DC_ASYNC, BS_CODE, TAPI_SS_BS_DATA_CIRCUIT_ASYNC}, + {CISS_ENG_BSG_ALL_DED_PACKET, BS_CODE, TAPI_SS_BS_DATA_ALL_PDS}, + {CISS_ENG_BSG_ALL_DED_PAD, BS_CODE, TAPI_SS_BS_ALL_DATA_PADCA}, + {CISS_ENG_BSG_PLMN_BEAR_ALL, BS_CODE, TAPI_SS_BS_ALL_PLMN_SPEC_BS}, + {CISS_ENG_BSG_PLMN_BEAR_1, BS_CODE, TAPI_SS_BS_PLMN_SPEC_TELE_1}, + {CISS_ENG_BSG_PLMN_BEAR_2, BS_CODE, TAPI_SS_BS_PLMN_SPEC_TELE_2}, + {CISS_ENG_BSG_PLMN_BEAR_3, BS_CODE, TAPI_SS_BS_PLMN_SPEC_TELE_3}, + {CISS_ENG_BSG_PLMN_BEAR_4, BS_CODE, TAPI_SS_BS_PLMN_SPEC_TELE_4}, + {CISS_ENG_BSG_PLMN_BEAR_5, BS_CODE, TAPI_SS_BS_PLMN_SPEC_TELE_5}, + {CISS_ENG_BSG_PLMN_BEAR_6, BS_CODE, TAPI_SS_BS_PLMN_SPEC_TELE_6}, + {CISS_ENG_BSG_PLMN_BEAR_7, BS_CODE, TAPI_SS_BS_PLMN_SPEC_TELE_7}, + {CISS_ENG_BSG_PLMN_BEAR_8, BS_CODE, TAPI_SS_BS_PLMN_SPEC_TELE_8}, + {CISS_ENG_BSG_PLMN_BEAR_9, BS_CODE, TAPI_SS_BS_PLMN_SPEC_TELE_9}, + {CISS_ENG_BSG_PLMN_BEAR_A, BS_CODE, TAPI_SS_BS_PLMN_SPEC_TELE_A}, + {CISS_ENG_BSG_PLMN_BEAR_B, BS_CODE, TAPI_SS_BS_PLMN_SPEC_TELE_B}, + {CISS_ENG_BSG_PLMN_BEAR_C, BS_CODE, TAPI_SS_BS_PLMN_SPEC_TELE_C}, + {CISS_ENG_BSG_PLMN_BEAR_D, BS_CODE, TAPI_SS_BS_PLMN_SPEC_TELE_C}, + {CISS_ENG_BSG_PLMN_BEAR_E, BS_CODE, TAPI_SS_BS_PLMN_SPEC_TELE_D}, + {CISS_ENG_BSG_PLMN_BEAR_F, BS_CODE, TAPI_SS_BS_PLMN_SPEC_TELE_F} +}; + +int _ciss_convert_bsg_to_tapi_bsg(char *local_bsg, TelSsTeleService_t *tapi_bsg) +{ + int valid_bsg = false; + + int n = 0; + int local_bsg_len =0; + + local_bsg_len = strlen(local_bsg); + if (local_bsg_len > MAX_BSG_LEN) + return false; + + DBG("\n [CISS-ENGINE] local_bsg : %s", local_bsg); + while (n < MAX_BSG_ENTRY) { + DBG("\n [CISS-ENGINE] n : %d", n); + if (!strncmp(bsg_conversion_table[n].local_bsg, local_bsg, MAX_SC_LEN)) { + DBG("\n [CISS-ENGINE] bsg_conversion_table[n].local_bsg : %s", bsg_conversion_table[n].local_bsg); + *tapi_bsg = bsg_conversion_table[n].tapi_bsg_code; + valid_bsg = TRUE; + break; + } + n++; + } + DBG("\n [CISS-ENGINE] end _ciss_convert_bsg_to_tapi_bsg()"); + return(valid_bsg); +} + +int _ciss_convert_sc_to_tapi_flavor(char *sc, unsigned char *tapi_flavor, unsigned char *ss_type) +{ + int valid_sc = false; + + int n = 0; + DBG("\n [CISS-ENGINE] sc : %s", sc); + while (n < MAX_SC_ENTRY) { + if (!strncmp(sc_conversion_table_ss[n].local_sc, sc, MAX_SC_LEN)) { + DBG("\n [CISS-ENGINE] sc_conversion_table_ss[n].local_sc : %s", sc_conversion_table_ss[n].local_sc); + *tapi_flavor = sc_conversion_table_ss[n].tapi_flavor; + *ss_type = sc_conversion_table_ss[n].ss_type; + valid_sc = TRUE; + break; + } + n++; + } + return(valid_sc); +} + +int _ciss_get_tapi_forward_type(TelSsTeleService_t TelecommSvc, TelSsForwardType_t *pForwardType) +{ + switch (TelecommSvc) { + case TAPI_SS_TS_ALL_SPEECH: + *pForwardType = TAPI_CS_FORWARD_TYPE_VOICE_EV; + DBG("\n [CISS-ENGINE] ********TAPI_SS_TS_ALL_SPEECH\n"); + break; + case TAPI_SS_TS_ALL_TELESERVICES: + *pForwardType = TAPI_CS_FORWARD_TYPE_ALL_TELE; + DBG("\n [CISS-ENGINE] ********TAPI_SS_TS_ALL_TELESERVICES\n"); + break; + case TAPI_SS_TS_FACS: + *pForwardType = TAPI_CS_FORWARD_TYPE_FAX_EV; + break; + case TAPI_SS_TS_ALL_TELE_AND_BEARER_SERVICES: + *pForwardType = TAPI_CS_FORWARD_TYPE_ALL_TELE_BEARER; + break; + case TAPI_SS_BS_ALL_ASYNCHRONOUS: + *pForwardType = TAPI_CS_FORWARD_TYPE_ALL_ASYNC_EV; + break; + case TAPI_SS_BS_ALL_SYNCHRONOUS: + *pForwardType = TAPI_CS_FORWARD_TYPE_ALL_SYNC_EV; + break; + case TAPI_SS_BS_ALL_BEARER_SERVICES: + case TAPI_SS_BS_DATA_CIRCUIT_SYNC: + *pForwardType = TAPI_CS_FORWARD_TYPE_DATA_EV; + DBG("\n [CISS-ENGINE] ********TAPI_SS_BS_DATA_CIRCUIT_SYNC\n"); + break; + case TAPI_SS_TS_SMS: + *pForwardType = TAPI_CS_FORWARD_TYPE_ALL_SYNC_EV; + break; + default: + DBG("\n [CISS-ENGINE] _ciss_get_tapi_forward_type:undefined =%d\n", TelecommSvc); + *pForwardType = TAPI_CS_FORWARD_TYPE_ALL_TELE_BEARER; + break; + } + + DBG("\n [CISS-ENGINE] TelecommSvc = %d, pForwardType= %d\n", TelecommSvc, *pForwardType); + return TRUE; +} + +int _ciss_get_tapi_call_type(TelSsTeleService_t TelecommSvc, TelSsCallType_t *pCallType) +{ + switch (TelecommSvc) { + case TAPI_SS_TS_ALL_SPEECH: /* Voice */ + *pCallType = TAPI_CALL_TYPE_VOICE_EV; + DBG("\n [CISS-ENGINE] ********TAPI_SS_TS_ALL_SPEECH\n"); + break; + case TAPI_SS_TS_ALL_TELESERVICES: + *pCallType = TAPI_CALL_TYPE_ALL_TELE; + DBG("\n [CISS-ENGINE] ********TAPI_SS_TS_ALL_TELESERVICES\n"); + break; + case TAPI_SS_TS_ALL_DATA_TELESERVICES: /* Data */ + *pCallType = TAPI_CALL_TYPE_DATA_EV; + break; + case TAPI_SS_TS_FACS: /* Fax */ + *pCallType = TAPI_CALL_TYPE_FAX_EV; + break; + + case TAPI_SS_TS_SMS: /* SMS */ + *pCallType = TAPI_CALL_TYPE_SHORT_MESS_EV; + break; + case TAPI_SS_BS_ALL_ASYNCHRONOUS: + *pCallType = TAPI_CALL_TYPE_ALL_ASYNC_EV; + break; + case TAPI_SS_BS_ALL_SYNCHRONOUS: + *pCallType = TAPI_CALL_TYPE_ALL_SYNC_EV; + break; + case TAPI_SS_BS_ALL_BEARER_SERVICES: /* Video */ + case TAPI_SS_BS_DATA_CIRCUIT_SYNC: + *pCallType = TAPI_CALL_TYPE_DATA_CIRCUIT_SYNC_EV; + DBG("\n [CISS-ENGINE] ********TAPI_SS_BS_DATA_CIRCUIT_SYNC\n"); + break; + case TAPI_SS_TS_ALL_TELE_AND_BEARER_SERVICES: /* ALL */ + *pCallType = TAPI_CALL_TYPE_ALL_TELE_BEARER; + break; + default: + DBG("\n [CISS-ENGINE] _ciss_get_tapi_call_type:undefined =%d\n", TelecommSvc); + *pCallType = TAPI_CALL_TYPE_ALL_TELE_BEARER; + break; + } + return TRUE; +} + +int _ciss_get_error_from_tapi_error(ciss_err_t *ciss_err, TelSsCause_t tapi_err) +{ + DBG("\n [CISS-ENGINE] _ciss_get_error_from_tapi_error:defined =%x\n", tapi_err); + switch (tapi_err) { + case TAPI_SS_UNKNOWNSUBSCRIBER: + *ciss_err = CISS_ERR_UNKNOWN_SUBSCRIBER; + break; + case TAPI_SS_BEARERSERVICENOTPROVISIONED: + *ciss_err = CISS_ERR_BEARER_NOT_PROVISIONED; + break; + case TAPI_SS_TELESERVICENOTPROVISIONED: + *ciss_err = CISS_ERR_TELESERVICE_NOT_PROVISIONED; + break; + case TAPI_SS_CALLBARRED: + *ciss_err = CISS_ERR_CALL_BARRED; + break; + case TAPI_SS_ILLEGALSSOPERATION: + *ciss_err = CISS_ERR_ILLEGAL_SS_OPER; + break; + case TAPI_SS_ERRORSTATUS: + *ciss_err = CISS_ERR_ERR_STATUS; + break; + case TAPI_SS_NOTAVAILABLE: + *ciss_err = CISS_ERR_NOT_AVAIL; + break; + case TAPI_SS_SUBSCRIPTIONVIOLATION: + *ciss_err = CISS_ERR_SUBSCRIPTION_VIOLATION; + break; + case TAPI_SS_INCOMPATIBILITY: + *ciss_err = CISS_ERR_INCOMPATIBILITY; + break; + case TAPI_SS_FACILITYNOTSUPPORTED: + *ciss_err = CISS_ERR_FACILITY_NOT_SUPPORT; + break; + case TAPI_SS_SYSTEMFAILURE: + *ciss_err = CISS_ERR_SYS_FAILURE; + break; + case TAPI_SS_DATAMISSING: + *ciss_err = CISS_ERR_DATA_MISSING; + break; + case TAPI_SS_UNEXPECTEDDATAVALUE: + *ciss_err = CISS_ERR_UNEXPECTED_DATA; + break; + case TAPI_SS_MAXNOMPTYEXCEEDED: + *ciss_err = CISS_ERR_MPTY_PARTICIPANTS_EXCEED; + break; + case TAPI_SS_RESOURCESNOTAVAILABLE: + *ciss_err = CISS_ERR_RESOURCE_NOT_AVAIL; + break; + case TAPI_SS_PWREGISTRATIONFAILURE: + *ciss_err = CISS_ERR_PW_REGIST_FAIL; + break; + case TAPI_SS_NEGATIVEPWCHECK: + *ciss_err = CISS_ERR_NEGATIVE_PW_CHECK; + break; + case TAPI_SS_NUMBEROFPWATTEMPTSVIOLATION: + *ciss_err = CISS_ERR_PW_ATTEMPS_VIOLATION; + break; + default: + DBG("\n [CISS-ENGINE] _ciss_get_error_from_tapi_error:undefined =%x\n", tapi_err); + *ciss_err = CISS_ERR_UNKNOWN; + break; + } + return TRUE; +} + +int _ciss_get_tapi_ussd_resp_type(ciss_ussd_response_type_t resp_type, TelSsUssdRespType_t *pTapiRespType) +{ + DBG("\n [CISS-ENGINE] _ciss_get_tapi_ussd_resp_type:defined =%d\n", resp_type); + switch (resp_type) { + case CISS_USSD_RES_UNKNOWN_ALPHABET: + *pTapiRespType = TAPI_USSD_RES_UNKNOWN_ALPHABET; + break; + case CISS_USSD_RES_DISPL_BUSY: + *pTapiRespType = TAPI_USSD_RES_DISPL_BUSY; + break; + case CISS_USSD_RES_OK: + *pTapiRespType = TAPI_USSD_RES_OK; + break; + case CISS_USSD_RES_NONE: + *pTapiRespType = TAPI_USSD_RES_NONE; + break; + default: + DBG("\n [CISS-ENGINE] _ciss_get_tapi_ussd_resp_type:undefined =%d\n", resp_type); + break; + } + return TRUE; +} + +int _ciss_get_tapi_ussd_ind_type(ciss_ussd_ind_type_t ind_type, TelSsUssdIndType_t *pTapiIndType) +{ + DBG("\n [CISS-ENGINE] _ciss_get_tapi_ussd_ind_type:defined =%d\n", ind_type); + switch (ind_type) { + case CISS_USSD_NOTIFY: + *pTapiIndType = TAPI_USSD_IND_NOTIFY; + break; + case CISS_USSD_IND_NO_ACTION_REQUIRE: + *pTapiIndType = TAPI_USSD_IND_NO_ACTION_REQUIRE; + break; + case CISS_USSD_IND_ACTION_REQUIRE: + *pTapiIndType = TAPI_USSD_IND_ACTION_REQUIRE; + break; + case CISS_USSD_TERMINATED_BY_NET: + *pTapiIndType = TAPI_USSD_IND_TERMINATED_BY_NET; + break; + case CISS_USSD_OTHER_CLIENT: + *pTapiIndType = TAPI_USSD_IND_OTHER_CLIENT; + break; + case CISS_USSD_NOT_SUPPORT: + *pTapiIndType = TAPI_USSD_IND_NOT_SUPPORT; + break; + case CISS_USSD_TIME_OUT: + *pTapiIndType = TAPI_USSD_IND_TIME_OUT; + break; + default: + DBG("\n [CISS-ENGINE] _ciss_get_tapi_ussd_ind_type:undefined =%d\n", ind_type); + break; + } + return TRUE; +} + +int _ciss_get_telecomm_svc(TelSsTeleService_t in_teleservice, ciss_telecomm_svc_t *out_teleservice) +{ + switch (in_teleservice) { +#ifdef _SHP_CPHS + case TAPI_SS_TS_ALL_SPEECH: + *out_teleservice = CISS_TELECOMM_SVC_VOICE; + break; + case TAPI_SS_TS_AUX_VOICE: + *out_teleservice = CISS_TELECOMM_SVC_AUX_VOICE: + break; +#else + case TAPI_SS_TS_ALL_SPEECH: + *out_teleservice = CISS_TELECOMM_SVC_VOICE; + break; +#endif + + case TAPI_SS_TS_FACS: + *out_teleservice = CISS_TELECOMM_SVC_FAX; + break; + case TAPI_SS_TS_SMS: + *out_teleservice = CISS_TELECOMM_SVC_SMS; + break; + case TAPI_SS_BS_DATA_CIRCUIT_SYNC: + *out_teleservice = CISS_TELECOMM_SVC_ALL_CS_SYNC; + break; + case TAPI_SS_ALL_TELE_BEARER: + case TAPI_SS_TS_ALL_TELE_AND_BEARER_SERVICES: + *out_teleservice = CISS_TELECOMM_SVC_ALL_TELE_BEARER; + break; + case TAPI_SS_TS_ALL_TELESERVICES: + *out_teleservice = CISS_TELECOMM_SVC_ALL_TELE; + break; + case TAPI_SS_TS_ALL_DATA_TELESERVICES: + *out_teleservice = CISS_TELECOMM_SVC_ALL_DATA_TELE; + break; + case TAPI_SS_TS_ALL_TELESERVICES_EXCEPT_SMS: + *out_teleservice = CISS_TELECOMM_SVC_ALL_TELE_EXPT_SMS; + break; + case TAPI_SS_TS_ALL_PLMN_SPEC_TELE: + *out_teleservice = CISS_TELECOMM_SVC_PLMN_TELE_ALL; + break; + case TAPI_SS_BS_ALL_BEARER_SERVICES: + *out_teleservice = CISS_TELECOMM_SVC_ALL_BEARER; + break; + case TAPI_SS_BS_ALL_DATA_CDA: + *out_teleservice = CISS_TELECOMM_SVC_ALL_DATA_CDA; + break; + case TAPI_SS_BS_ALL_SYNCHRONOUS: + *out_teleservice = CISS_TELECOMM_SVC_ALL_SYNC; + break; + case TAPI_SS_BS_ALL_ASYNCHRONOUS: + *out_teleservice = CISS_TELECOMM_SVC_ALL_ASYNC; + break; + case TAPI_SS_BS_ALL_DATA_PADCA: + *out_teleservice = CISS_TELECOMM_SVC_ALL_DEDI_PAD; + break; + case TAPI_SS_BS_ALL_PLMN_SPEC_BS: + *out_teleservice = CISS_TELECOMM_SVC_PLMN_BEAR_ALL; + break; + case TAPI_SS_BS_DATA_CIRCUIT_ASYNC: + *out_teleservice = CISS_TELECOMM_SVC_ALL_CS_ASYNC; + break; + case TAPI_SS_BS_DATA_ALL_PDS: + *out_teleservice = CISS_TELECOMM_SVC_ALL_DEDI_PS; + break; + case TAPI_SS_TS_NONE: + default: + *out_teleservice = CISS_TELECOMM_SVC_NONE; + DBG("\n [CISS-ENGINE] _ciss_get_telecomm_svc: ERROR Wrong Bearer = %d come. \n", in_teleservice); + break; + } + return TRUE; +} + +int _ciss_get_forward_flavor_type(TelSsForwardWhen_t in_flavor, ciss_flavor_t *out_flavor) +{ + switch (in_flavor) { + case TAPI_SS_FORWARD_WHEN_UNCONDITIONAL_EV: + *out_flavor = CISS_FLAVOR_DIVERT_UNCONDITIONAL; + break; + case TAPI_SS_FORWARD_WHEN_BUSY_EV: + *out_flavor = CISS_FLAVOR_DIVERT_BUSY; + break; + case TAPI_SS_FORWARD_WHEN_NO_ANSWER_EV: + *out_flavor = CISS_FLAVOR_DIVERT_NOREPLY; + break; + case TAPI_SS_FORWARD_WHEN_NOT_REACHABLE_EV: + *out_flavor = CISS_FLAVOR_DIVERT_UNREACHABLE; + break; + case TAPI_SS_FORWARD_WHEN_ALL_CONDITIONAL_EV: + *out_flavor = CISS_FLAVOR_DIVERT_ALL_CONDITIONAL_FLAVORS; + break; + case TAPI_SS_FORWARD_WHEN_ALL_FORWARDING_EV: + *out_flavor = CISS_FLAVOR_DIVERT_ALL_FLAVORS; + break; + default: + *out_flavor = CISS_FLAVOR_NONE; + DBG("\n [CISS-ENGINE] _ciss_get_forward_flavor_type: ERROR Wrong Flavor = %d come. \n", in_flavor); + break; + } + return TRUE; +} + +int _ciss_get_barring_flavor_type(TelSsCallBarType_t in_flavor, ciss_flavor_t *out_flavor) +{ + switch (in_flavor) { + case TAPI_CALL_BARRING_ALL: + *out_flavor = CISS_FLAVOR_BARRING_ALL_FLAVORS; + break; + case TAPI_CALL_BARRING_ALL_OUTGOING_CALLS: + *out_flavor = CISS_FLAVOR_BARRING_ALL_OUTGOING_CALLS; + break; + case TAPI_CALL_BARRING_ALL_OUTGOING_INTERN_CALL: + *out_flavor = CISS_FLAVOR_BARRING_ALL_OUTGOING_INTERNATIONAL; + break; + case TAPI_CALL_BARRING_ALL_OUTGOING_INTERN_CALL_EXCEPT: + *out_flavor = CISS_FLAVOR_BARRING_OUTGOING_INTERNATIONAL_CALLS_EXCEPT_HOME; + break; + case TAPI_CALL_BARRING_ALL_INCOMING_CALLS: + *out_flavor = CISS_FLAVOR_BARRING_ALL_INCOMING_CALLS; + break; + case TAPI_CALL_BARRING_ALL_INCOMING_CALLS_ROAMING: + *out_flavor = CISS_FLAVOR_BARRING_INCOMING_CALLS_WHEN_ROAMING; + break; + case TAPI_CALL_BARRING_OUTGOING: + *out_flavor = CISS_FLAVOR_BARRING_ALL_OUTGOING_CALLS; + break; + case TAPI_CALL_BARRING_INCOMING: + *out_flavor = CISS_FLAVOR_BARRING_ALL_INCOMING_CALLS; + break; + default: + *out_flavor = CISS_FLAVOR_NONE; + DBG("\n [CISS-ENGINE] _ciss_get_barring_flavor_type: ERROR Wrong Flavor = %d come. \n", in_flavor); + break; + } + return TRUE; +} + +int _ciss_get_result_status_type(TelSsStatus_t in_status, ciss_status_t *out_status) +{ + switch (in_status) { + case TAPI_SS_STATUS_ACTIVE: + *out_status = CISS_STATUS_ACTIVE; + break; + case TAPI_SS_STATUS_REGISTERED: + *out_status = CISS_STATUS_REGISTERED; + break; + case TAPI_SS_STATUS_PROVISIONED: + *out_status = CISS_STATUS_PROVISIONED; + break; + case TAPI_SS_STATUS_QUIESCENT: + *out_status = CISS_STATUS_QUIESCENT; + break; + case TAPI_SS_STATUS_NOTHING: + *out_status = CISS_STATUS_NOTHING; + break; + default: + *out_status = CISS_STATUS_NOTHING; + DBG("\n [CISS-ENGINE] _ciss_get_result_status_type: ERROR Wrong TelSsStatus_t = %d come. \n", in_status); + break; + } + return TRUE; +} + +int _ciss_get_requested_tapi_ussd_ind_type(ciss_ussd_ind_type_t *ind_type, TelSsUssdIndType_t pTapiIndType) +{ + DBG("\n [CISS-ENGINE] _ciss_get_requested_tapi_ussd_ind_type:defined =%d\n", pTapiIndType); + switch (pTapiIndType) { + case TAPI_USSD_IND_NOTIFY: + *ind_type = CISS_USSD_NOTIFY; + break; + case TAPI_USSD_IND_NO_ACTION_REQUIRE: + *ind_type = CISS_USSD_IND_NO_ACTION_REQUIRE; + break; + case TAPI_USSD_IND_ACTION_REQUIRE: + *ind_type = CISS_USSD_IND_ACTION_REQUIRE; + break; + case TAPI_USSD_IND_TERMINATED_BY_NET: + *ind_type = CISS_USSD_TERMINATED_BY_NET; + break; + case TAPI_USSD_IND_OTHER_CLIENT: + *ind_type = CISS_USSD_OTHER_CLIENT; + break; + case TAPI_USSD_IND_NOT_SUPPORT: + *ind_type = CISS_USSD_NOT_SUPPORT; + break; + case TAPI_USSD_IND_TIME_OUT: + *ind_type = CISS_USSD_TIME_OUT; + break; + default: + DBG("\n [CISS-ENGINE] _ciss_get_requested_tapi_ussd_ind_type:undefined =%d\n", pTapiIndType); + break; + } + return TRUE; +} + +void _ciss_ui_mmi_get_service_name(ciss_service_t in_service, char *service_name) +{ + switch (in_service) { + case CISS_SERVICE_DIVERTING: + strncpy(service_name, CISS_STR_CALL_DIVERTING, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_SERVICE_BARRING: + strncpy(service_name, CISS_STR_CALL_BARRING, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_SERVICE_WAITING: + strncpy(service_name, CISS_STR_CALL_WAITING, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_SERVICE_CHANGE_BARRING_PASSWD: + strncpy(service_name, CISS_STR_CHANGE_PASSWORD, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_SERVICE_USSD: + strncpy(service_name, CISS_STR_INFORMATION, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_SERVICE_IDENTIFICATION: + default: + strncpy(service_name, "", CISS_TEXT_LEN_MAX - 1); + break; + } + service_name[CISS_TEXT_LEN_MAX - 1] = '\0'; +} + +void _ciss_ui_mmi_get_flavor_name(ciss_flavor_t in_flavor, char *flavor_name) +{ + switch (in_flavor) { + case CISS_FLAVOR_DIVERT_UNCONDITIONAL: + strncpy(flavor_name, CISS_STR_CALL_DIVERTING_ACTIVE_C_ALWAYS, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_FLAVOR_DIVERT_BUSY: + strncpy(flavor_name, CISS_STR_CALL_DIVERTING_ACTIVE_C_WHEN_BUSY, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_FLAVOR_DIVERT_NOREPLY: + strncpy(flavor_name, CISS_STR_CALL_DIVERTING_ACTIVE_C_WHEN_NOREPLY, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_FLAVOR_DIVERT_UNREACHABLE: + strncpy(flavor_name, CISS_STR_CALL_DIVERTING_ACTIVE_C_UNREACHABLE, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_FLAVOR_DIVERT_ALL_FLAVORS: + strncpy(flavor_name, CISS_STR_ALL_CALLS, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_FLAVOR_DIVERT_ALL_CONDITIONAL_FLAVORS: + strncpy(flavor_name, CISS_STR_CONDITIONAL, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_FLAVOR_BARRING_ALL_OUTGOING_CALLS: + strncpy(flavor_name, CISS_STR_ALL_OUTGOING_CALLS_BARRED, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_FLAVOR_BARRING_ALL_OUTGOING_INTERNATIONAL: + strncpy(flavor_name, CISS_STR_OUTGOING_INTERNATIONAL_CALLS_BARRED, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_FLAVOR_BARRING_OUTGOING_INTERNATIONAL_CALLS_EXCEPT_HOME: + strncpy(flavor_name, CISS_STR_OUTGOING_INTERNATIONAL_CALLS_EXCEPT_HOME_BARRED, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_FLAVOR_BARRING_ALL_INCOMING_CALLS: + strncpy(flavor_name, CISS_STR_ALL_INCOMING_CALLS_BARRED, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_FLAVOR_BARRING_INCOMING_CALLS_WHEN_ROAMING: + strncpy(flavor_name, CISS_STR_INCOMING_CALLS_BARRED_WHEN_ROAMING, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_FLAVOR_BARRING_ALL_FLAVORS: + strncpy(flavor_name, CISS_STR_ALL_BARRING, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_FLAVOR_BARRING_OUTGOING: + strncpy(flavor_name, CISS_STR_OUTGOING_BARRING, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_FLAVOR_BARRING_INCOMING: + strncpy(flavor_name, CISS_STR_INCOMING_BARRING, CISS_TEXT_LEN_MAX - 1); + break; + default: + strncpy(flavor_name, "", CISS_TEXT_LEN_MAX - 1); + } + flavor_name[CISS_TEXT_LEN_MAX - 1] = '\0'; +} + +void _ciss_ui_mmi_get_bearer_name(ciss_service_t ss_type, ciss_telecomm_svc_t in_teleservice, char *teleservice_name) +{ + DBG("\n [CISS-MMI] _ciss_ui_get_bearer_name: in_teleservice = %d come. \n", in_teleservice); + + switch (in_teleservice) { +#ifdef _SHP_CPHS + case CISS_TELECOMM_SVC_VOICE: + if (PshCphsCheckCsp(PSH_CPHS_CSP_ALS)) + strncpy(teleservice_name, CISS_STR_VOICE, CISS_TEXT_LEN_MAX - 1); + else + strncpy(teleservice_name, CISS_STR_VOICE, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_TELECOMM_SVC_PLMN_TELE_1: + strncpy(teleservice_name, CISS_STR_VOICE, CISS_TEXT_LEN_MAX - 1); + break; +#else + case CISS_TELECOMM_SVC_VOICE: + strncpy(teleservice_name, CISS_STR_VOICE, CISS_TEXT_LEN_MAX - 1); + break; +#endif + case CISS_TELECOMM_SVC_FAX: + strncpy(teleservice_name, CISS_STR_FAX, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_TELECOMM_SVC_ALL_CS_SYNC: + strncpy(teleservice_name, CISS_STR_VIDEO, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_TELECOMM_SVC_ALL_TELE_BEARER: + strncpy(teleservice_name, CISS_STR_ALL_SERVICES, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_TELECOMM_SVC_ALL_TELE: + strncpy(teleservice_name, CISS_STR_ALL_TELECOM_SERVICES, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_TELECOMM_SVC_ALL_DATA_TELE: + strncpy(teleservice_name, CISS_STR_ALL_DATA_SERVICES, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_TELECOMM_SVC_ALL_TELE_EXPT_SMS: + strncpy(teleservice_name, CISS_STR_FOR_ALL_TELE_SERVICES_EXCEPT_SMS, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_TELECOMM_SVC_PLMN_TELE_ALL: + strncpy(teleservice_name, CISS_STR_ALL_PLMN_BEARERS, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_TELECOMM_SVC_ALL_BEARER: + strncpy(teleservice_name, CISS_STR_ALL_BEARER_SERVICES, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_TELECOMM_SVC_ALL_DATA_CDA: + strncpy(teleservice_name, CISS_STR_ALL_ASYNCHRONOUS_DATA, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_TELECOMM_SVC_ALL_SYNC: + strncpy(teleservice_name, CISS_STR_ALL_SYNCHRONOUS_SERVICES, CISS_TEXT_LEN_MAX - 1); + break; +#ifdef _SHP_OPERATOR_VODAFONE + case CISS_TELECOMM_SVC_ALL_ASYNC: + strncpy(teleservice_name, CISS_STR_ALL_ASYNCHRONOUS_DATA, CISS_TEXT_LEN_MAX - 1); + break; +#else + case CISS_TELECOMM_SVC_ALL_ASYNC: + strncpy(teleservice_name, CISS_STR_ALL_ASYNCHRONOUS_DATA, CISS_TEXT_LEN_MAX - 1); + break; +#endif + case CISS_TELECOMM_SVC_ALL_DEDI_PAD: + strncpy(teleservice_name, CISS_STR_ALL_PADCA_SERVICES, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_TELECOMM_SVC_PLMN_BEAR_ALL: + strncpy(teleservice_name, CISS_STR_ALL_PLMN_BEARERS, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_TELECOMM_SVC_SMS: + strncpy(teleservice_name, CISS_STR_SMS, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_TELECOMM_SVC_ALL_CS_ASYNC: + strncpy(teleservice_name, CISS_STR_ASYNCHRONOUS_DATA_SERVICES, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_TELECOMM_SVC_ALL_DEDI_PS: + strncpy(teleservice_name, CISS_STR_ALL_PDS_SERVICES, CISS_TEXT_LEN_MAX - 1); + break; + case CISS_TELECOMM_SVC_NONE: + default: + DBG("\n [CISS-MMI] _ciss_ui_get_bearer_name: ERROR Wrong Bearer = %d come. \n", in_teleservice); + if ((ss_type == CISS_SERVICE_WAITING) || + (ss_type == CISS_SERVICE_IDENTIFICATION)) + strncpy(teleservice_name, "", CISS_TEXT_LEN_MAX - 1); + else + strncpy(teleservice_name, CISS_STR_ALL_SERVICES, CISS_TEXT_LEN_MAX - 1); + } + teleservice_name[CISS_TEXT_LEN_MAX - 1] = '\0'; +} + +void _ciss_ui_mmi_get_result_status_type(ciss_service_t ss_type, ciss_status_t result_status, char *szResult) +{ + if (ss_type == CISS_SERVICE_DIVERTING) { + switch (result_status) { + case CISS_STATUS_ACTIVE: + strncpy(szResult, CISS_STR_ACTIVATED, CISS_TEXT_LEN_MAX - 1); + break; + + case CISS_STATUS_REGISTERED: + case CISS_STATUS_PROVISIONED: + case CISS_STATUS_QUIESCENT: + case CISS_STATUS_NOTHING: + default: + strncpy(szResult, CISS_STR_DEACTIVATED, CISS_TEXT_LEN_MAX - 1); + break; + } + } else { + /* Wating or Barring case only have Act / Deact status */ + switch (result_status) { + case CISS_STATUS_ACTIVE: + case CISS_STATUS_REGISTERED: + strncpy(szResult, CISS_STR_ACTIVATED, CISS_TEXT_LEN_MAX - 1); + break; + + case CISS_STATUS_PROVISIONED: + case CISS_STATUS_QUIESCENT: + case CISS_STATUS_NOTHING: + default: + strncpy(szResult, CISS_STR_DEACTIVATED, CISS_TEXT_LEN_MAX - 1); + break; + } + } + szResult[CISS_TEXT_LEN_MAX - 1] = '\0'; +} + + diff --git a/src/ciss-main.c b/src/ciss-main.c new file mode 100755 index 0000000..9a293c9 --- /dev/null +++ b/src/ciss-main.c @@ -0,0 +1,237 @@ +/* + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * This file is part of + * Written by , + * + * PROPRIETARY/CONFIDENTIAL + * + * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). + * You shall not disclose such Confidential Information and shall use it only in accordance + * with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. + * SAMSUNG make no representations or warranties about the suitability of the software, + * either express or implied, including but not limited to the implied warranties of merchantability, + * fitness for a particular purpose, or non-infringement. + * SAMSUNG shall not be liable for any damages suffered by licensee as a result of using, + * modifying or distributing this software or its derivatives. + * + */ + +#include +#include +#include +#include +#include +#include + +#include "ciss-common.h" +#include "ciss-util.h" +#include "ciss-ussd.h" +#include "ciss-resp.h" +#include "ciss-tapi-request.h" +#include "ciss-parser.h" +#include "ciss-widget.h" + +static int __ciss_relaunch_handler(bundle *b, void *data) +{ + DBG("Enter"); + + int event_type = 0; + int event_status = 0; + int encoded_data_length; + + struct appdata *ad = (struct appdata *)data; + Evas_Object *popup; + char *tmp; + + tmp = (char *)bundle_get_val(b, "CISS_LAUNCHING_MODE"); + + if (strcmp(tmp, "REQ") == 0) { + tmp = (char *)bundle_get_val(b, "CISS_REQ_STRING"); + retv_if(tmp == NULL, -1); + DBG("CISS_REQ_STRING=%s",tmp); + strncpy(ad->req_string, tmp, REQ_STRING_MAX_LEN - 1); + ciss_err_t ciss_err_code; + + if (ad->win_main == NULL) { + Evas_Object *win; + win = _ciss_create_win(PACKAGE); + retv_if(win == NULL, -1); + ad->win_main = win; + evas_object_show(win); + ad->end_key_event_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _ciss_on_end_key_down, NULL); + } + + if (ad->popup != NULL) { + evas_object_del(ad->popup); + ad->popup = NULL; + } + + DBG("scale = %f", elm_config_scale_get()); + + popup = _ciss_create_noti_popup(ad->win_main, CISS_STR_REQUESTING, NULL, 30.0, ad); + + ad->popup = popup; + + ciss_mmi_context_t mmi_ctx; + + ciss_err_code = _ciss_parse_req_string(tmp, &mmi_ctx); + + if (ciss_err_code != CISS_ERR_NONE) + _ciss_create_error_popup(ad->win_main, ciss_err_code, 2.0, ad); + else { + ciss_err_code = _ciss_send_tapi_request(&mmi_ctx); + DBG("ciss_err_code(_ciss_send_tapi_request) = %d", ciss_err_code); + if (ciss_err_code != CISS_ERR_NONE) + _ciss_create_error_popup(ad->win_main, ciss_err_code, 2.0, ad); + } + } else if (strcmp(tmp, "RESP")== 0) { + tmp = (char *)bundle_get_val(b, "KEY_EVENT_TYPE"); + event_type = atoi(tmp); + ad->cmd_type = event_type; + + tmp = (char *)bundle_get_val(b, "KEY_STATUS"); + event_status = atoi(tmp); + + tmp = (char *)bundle_get_val(b, "KEY_ENCODED_DATA_LENGTH"); + encoded_data_length = atoi(tmp); + + tmp = (char *)bundle_get_val(b, "KEY_ENCODED_DATA"); + + gchar *decoded_data; + gsize decoded_data_length; + + decoded_data = (gchar *)g_base64_decode((gchar *)tmp,&decoded_data_length); + DBG("Received Event=0x%x", event_type); + DBG("encoded_data_len = %d decoded_data_len = %d", encoded_data_length,decoded_data_length); + + TelTapiEvent_t event; + event.EventType = event_type; + event.pData= decoded_data; + event.pDataLen = decoded_data_length; + event.Status = event_status; + + switch (event_type) { + case TAPI_EVENT_SS_USSD_IND: + case TAPI_EVENT_SS_USSD_CNF: + case TAPI_EVENT_SS_USSD_RSP_CNF: + case TAPI_EVENT_SS_USSD_CANCEL_CNF: + _ciss_on_tapi_ussd_event(&event, ad); + break; + case TAPI_EVENT_SAT_SEND_SS_IND: + _ciss_on_tapi_sat_ss_event(&event, ad); + break; + case TAPI_EVENT_SAT_SEND_USSD_IND: + _ciss_on_tapi_sat_ussd_event(&event, ad); + break; + case TAPI_EVENT_SS_FORWARD_CNF: + case TAPI_EVENT_SS_FORWARD_QUERYSTATUS_CNF: + case TAPI_EVENT_SS_BARRING_CNF: + case TAPI_EVENT_SS_BARRING_QUERYSTATUS_CNF: + case TAPI_EVENT_SS_BARRING_CHANGEPASS_CNF: + case TAPI_EVENT_SS_WAITING_CNF: + case TAPI_EVENT_SS_WAITING_QUERYSTATUS_CNF: + case TAPI_EVENT_SS_CLI_QUERYSTATUS_CNF: + _ciss_on_tapi_ss_event(&event, ad); + break; + default: + return -1; + } + } else { + ERR("wrong exec type"); + return -1; + } + + DBG("Leave"); + return 0; +} + +static int __ciss_app_create(void *data) +{ + DBG("Enter"); + + struct appdata *ad = (struct appdata *)data; + _ciss_tapi_event_setup(ad); + ad->win_main = NULL; + ad->layout_main = NULL; + ad->bg = NULL; + ad->popup = NULL; + ad->end_key_event_handler = NULL; + ad->is_sat_request = EINA_FALSE; + _ciss_geinlist_item_class_new(ad); + + return 0; +} + +static int __ciss_app_terminate(void *data) +{ + DBG("Enter"); + + struct appdata *ad = data; + + _ciss_geinlist_item_class_free(ad); + if (ad->win_main) { + evas_object_del(ad->win_main); + if (ad->end_key_event_handler) + ecore_event_handler_del(ad->end_key_event_handler); + } + + if (ad->bg) { + evas_object_del(ad->bg); + ad->bg = NULL; + } + + _ciss_deregister_tel_event(); + DBG("Leave"); + + return 0; +} + +static int __ciss_app_pause(void *data) +{ + elm_exit(); + return 0; +} + +static int __ciss_app_resume(void *data) +{ + return 0; +} + +static int __ciss_app_reset(bundle *b, void *data) +{ + DBG("Enter"); + + struct appdata *ad = data; + + if (ad->win_main) + elm_win_activate(ad->win_main); + + __ciss_relaunch_handler(b, data); + DBG("Leave"); + return 0; +} + +int main(int argc, char *argv[]) +{ + DBG("Enter"); + + struct appdata ad; + + struct appcore_ops ops = { + .create = __ciss_app_create, + .terminate = __ciss_app_terminate, + .pause = __ciss_app_pause, + .resume =__ciss_app_resume, + .reset = __ciss_app_reset, + }; + + appcore_set_i18n(PACKAGE, LOCALEDIR); + + memset(&ad, 0x0, sizeof(struct appdata)); + + ops.data = &ad; + + return appcore_efl_main(PACKAGE, &argc, &argv, &ops); +} + diff --git a/src/ciss-parser.c b/src/ciss-parser.c new file mode 100755 index 0000000..dc9bbc3 --- /dev/null +++ b/src/ciss-parser.c @@ -0,0 +1,408 @@ +/* + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * This file is part of + * Written by , + * + * PROPRIETARY/CONFIDENTIAL + * + * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). + * You shall not disclose such Confidential Information and shall use it only in accordance + * with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. + * SAMSUNG make no representations or warranties about the suitability of the software, + * either express or implied, including but not limited to the implied warranties of merchantability, + * fitness for a particular purpose, or non-infringement. + * SAMSUNG shall not be liable for any damages suffered by licensee as a result of using, + * modifying or distributing this software or its derivatives. + * + */ + +#include "ciss-util.h" +#include "ciss-tapi-request.h" +#include "ciss-parser.h" +#include "ciss-converter.h" + +static int __ciss_find_si_fields(char *user_input, char *sc, char *sia, char *sib, char *sic) +{ + char *input; + int sia_offset = 0; + int sib_offset = 0; + int sic_offset = 0; + int sia_len = 0; + int sib_len = 0; + int sic_len = 0; + int sc_len = 0; + + /* + 123*456*789*012# + | | | | + sc sia sib sic + */ + input = user_input; + sc_len = strspn(input, "0123456789"); + DBG("\n [CISS-ENGINE] sc_len : %d", sc_len); + if (sc_len > MAX_SC_LEN) + return false; + else { + memcpy(sc, input, sc_len); + sc[sc_len] = '\0'; + } + + if (input[sc_len] == '*') { + /* check if there is an SIA field */ + sia_offset = sc_len + 1; + sia_len = strspn((input + sia_offset), "+1234567890"); + /* check if there is an SIB field */ + if (input[sia_offset + sia_len] == '*') { + sib_offset = sia_offset + sia_len + 1; + sib_len = strspn (input + sib_offset, "+1234567890"); + /* check if there is an SIC field */ + if (input[sib_offset + sib_len] == '*') { + sic_offset = sib_offset + sib_len + 1; + sic_len = strspn(input + sic_offset, "+1234567890"); + } + } + } + + if ((sia_len > 0) && (sia_len <= MAX_SIA_LEN)) { + memcpy(sia, input + sia_offset, sia_len); + sia[sia_len] = '\0'; + } + + if ((sib_len > 0) && (sib_len <= MAX_SIB_LEN)) { + memcpy(sib, input + sib_offset, sib_len); + sib[sib_len] = '\0'; + } + + if ((sic_len > 0) && (sic_len <= MAX_SIC_LEN)) { + memcpy(sic, input + sic_offset, sic_len); + sic[sic_len] = '\0'; + } + + /* NOTE: A NULL value for the SIA, SIB and SIC are + also valid and so return TRUE + */ + if ((sib_len > MAX_SIB_LEN) || + (sia_len > MAX_SIA_LEN) || + (sic_len > MAX_SIC_LEN)) + return false; + return TRUE; +} + +static unsigned char __ciss_parse_req_string(ciss_mmi_context_t *mmi_ctx, int *error_code) +{ + char sups_str[MAX_DIALED_DIGITS]; + char *user_sc = NULL; + char bsg[MAX_SIA_LEN + 1]; + unsigned char ss_str_len; + unsigned char ss_operation; + unsigned char tapi_flavor = 0; + unsigned char ss_type = 0xff; + TelSsTeleService_t tapi_bsg; + char sia[MAX_SIA_LEN + 1]; + char sib[MAX_SIB_LEN + 1]; + char sic[MAX_SIC_LEN + 1]; + char ss_code[MAX_SC_LEN + 1]; + + ss_operation = NULL_SS_OPERATION; + memset(sia, '\0', sizeof(sia)); + memset(sib, '\0', sizeof(sib)); + memset(sic, '\0', sizeof(sic)); + memset(ss_code, '\0', sizeof(ss_code)); + memset(bsg, '\0', sizeof(bsg)); + memset(sups_str, '\0', MAX_DIALED_DIGITS); + + /* user inputs must be in the g_form + ** "**123*456*789*012#SEND" + ** | | | | | | + ** | | | | | |------>send key + ** | | | | |--------->sic + ** | | | |------------->sib + ** | | |----------------->sia + ** | |--------------------->sc + ** |------------------------>operation + */ + + /* STEP 1: Find the SS operation */ + memcpy(sups_str, mmi_ctx->user_string, mmi_ctx->user_string_length); + /* get the length of the user input */ + ss_str_len = mmi_ctx->user_string_length; + /* special case */ + /* this may be a nomal call origination with CLIR + */ + if (((memcmp(sups_str, "*31#", 4) == 0) || + (memcmp(sups_str, "#31#", 4) == 0)) && + (sups_str[ss_str_len - 1] != '#')) + return NULL_SS_OPERATION; + + /* check the first character */ + if (sups_str[0] == '*') { + /* possible combinations are + *41* - activation + *03* - pwd registration + **41* - registration + **03* - pwd registration + *#41* - interrogation + */ + if (ISDIGIT(sups_str [1])) { + /* next char is a digit, can be activation or pwd_reg */ + if (!strncmp(sups_str, "*03*", strlen("*03*"))) { + DBG("\n [CISS-ENGINE] registerPassword"); + ss_operation = registerPassword; + user_sc = sups_str + 4; + } else { + DBG("\n [CISS-ENGINE] activateSS"); + ss_operation = activateSS; /* eg: *41* for Activation */ + user_sc = sups_str + 1; + } + } else if ((sups_str[1] == '#') && ISDIGIT(sups_str[2])) { + /* now the combination is *#41 */ + DBG("\n [CISS-ENGINE] interrogateSS"); + ss_operation = interrogateSS; + user_sc = sups_str + 2; + } else if (sups_str[1] == '*') { + /* possible combinations are + **41* - registration + **03* - pwd registration + */ + if (ISDIGIT(sups_str[2])) { + if (!strncmp(sups_str, "**03*", strlen("**03*"))) { + DBG("\n [CISS-ENGINE] registerPassword"); + ss_operation = registerPassword; + user_sc = sups_str + 5; + } else { + DBG("\n [CISS-ENGINE] registerSS"); + ss_operation = registerSS; + user_sc = sups_str + 2; + } + } + } + } else if (sups_str[0] == '#') { + /* possible combinations are + ##41* - erasure + #41* - deactivation + */ + if (ISDIGIT(sups_str[1])) { + DBG("\n [CISS-ENGINE] deactivateSS"); + ss_operation = deactivateSS; + user_sc = sups_str + 1; + } else if ((sups_str[1] == '#') && (ISDIGIT(sups_str[2]))) { + /* Additional added a check to verify whether third character in USSD String is a digit or not. + If 3rd Character is not a digit then should send USSD Request not Erase SS Operation + */ + DBG("\n [CISS-ENGINE] eraseSS"); + ss_operation = eraseSS; + user_sc = sups_str + 2; + } + } else if ((ss_str_len == 2) && (ISUSSDDIGIT(sups_str[0]) && ISDIGIT(sups_str[1]))) { + DBG("\n [CISS-ENGINE] processUnstructuredSS_Request"); + ss_operation = processUnstructuredSS_Request; + return ss_operation; + } else if ((ss_str_len == 1) && (ISDIGIT(sups_str[0]))) { + DBG("\n [CISS-ENGINE] processUnstructuredSS_Request"); + ss_operation = processUnstructuredSS_Request; + return ss_operation; + } + + if (ss_operation != NULL_SS_OPERATION) { + /* By now the operation must have been identified */ + /* STEP 2: Find the SI fields */ + if (!__ciss_find_si_fields(user_sc, ss_code, sia, sib, sic)) { + /*Added code for UI display for password too long for call barring */ + /* Since SIB,SIC field length is 4 */ + if (strlen(ss_code)!= 0) { + if (!_ciss_convert_sc_to_tapi_flavor(ss_code, &tapi_flavor, &ss_type)) { + ss_operation = NULL_SS_OPERATION; + } else if (ss_type == TAPI_SS_TYPE_BARRING) { + DBG("\n [CISS-ENGINE] Too long password"); + ss_operation = NULL_SS_OPERATION; + *error_code = CISS_ERR_CB_PWD_TOO_LONG; + return ss_operation; + } + } + /* End of password too long added code */ + ss_operation = NULL_SS_OPERATION; + } + + DBG("\n [CISS-ENGINE] sia = %s, sib = %s, sic = %s", sia, sib, sic); + } + /* added for FDN check */ + strncpy(mmi_ctx->ss_code, ss_code, MAX_SC_LEN); + /* by now SIA, SIB, SIC fields must have been separated out */ + /* STEP 3: Convert SC to network SC and update the + sups_user_data field + */ + if ((ss_operation != registerPassword) && + (ss_operation != NULL_SS_OPERATION)) { + if (!_ciss_convert_sc_to_tapi_flavor(ss_code, &tapi_flavor, &ss_type)) + ss_operation = NULL_SS_OPERATION; + else { + mmi_ctx->ss_flavor = tapi_flavor; + mmi_ctx->ss_type = ss_type; + } + } + /* by now the translation of SC must be complete */ + /* STEP 4: Check for BSG . This may be in SIA, SIB or SIC */ + if (ss_operation != NULL_SS_OPERATION) { + if ((ss_operation != registerPassword)&& + ((ss_type == TAPI_SS_TYPE_FORWARDING)|| + (ss_type == TAPI_SS_TYPE_BARRING))) { + /* BSG is in SIB */ + if (ss_operation == interrogateSS) + strncpy(bsg, sia, MAX_SIA_LEN); + else + strncpy(bsg, sib, MAX_SIB_LEN); + } else if (ss_type == TAPI_SS_TYPE_WAITING) { + /* MSN:SISO changed for the validation of the #43**11# kind of strings */ + if ((sib[0] !=0) || (sic[0] != 0)) + ss_operation = NULL_SS_OPERATION; + else + /* BSG is in SIA */ + strncpy(bsg, sia, MAX_SIA_LEN); + } else + bsg[0] = '\0'; + + /* by now BSG must be identified */ + /* STEP 5: Convert BSG to net BSG */ + /* validation of the #43**11# kind of strings */ + if ((ss_operation != registerPassword) && + (ss_operation != NULL_SS_OPERATION)) { + /* special case */ + if (_ciss_convert_bsg_to_tapi_bsg(bsg, &tapi_bsg)) + mmi_ctx->tapi_bsg = tapi_bsg; + else + ss_operation = NULL_SS_OPERATION; + } + } + + /* STEP 6: Convert DN(divert number), if any */ + if (ss_operation != NULL_SS_OPERATION) { + if (ss_type == TAPI_SS_TYPE_FORWARDING) { + if (sia[0] != '\0') { + strncpy(mmi_ctx->divert_number, sia, strlen(sia)); + mmi_ctx->divert_number[strlen(sia)] = '\0'; + } + /* else the length of the DN will be 0 */ + } + } + + /* STEP 7: Set the NR(no reply) timer */ + if (((ss_operation == activateSS) || (ss_operation == registerSS)) && + (ss_type == TAPI_SS_TYPE_FORWARDING) && + ((tapi_flavor == TAPI_SS_FORWARD_WHEN_ALL_FORWARDING_EV) || + (tapi_flavor == TAPI_SS_FORWARD_WHEN_ALL_CONDITIONAL_EV) || + (tapi_flavor == TAPI_SS_FORWARD_WHEN_NO_ANSWER_EV))) { + if (sic[0] != '\0') + mmi_ctx->nr_timer = atoi(sic); + else + mmi_ctx->nr_timer = 0; + } + + /* STEP 8: Check is activation is also registration? */ + if (ss_operation == activateSS) { + if (mmi_ctx->divert_number[0] > 0) + ss_operation = registerSS; + else if (mmi_ctx->nr_timer != 0) + ss_operation = registerSS; + } + + /* STEP 9: copy the password */ + /* for barring operations other than register*/ + if (ss_operation != NULL_SS_OPERATION) { + /*Added code for UI display for password too long for call barring */ + /* Since SIA feild length is 40 */ + if ((ss_type == TAPI_SS_TYPE_BARRING) || + (ss_operation == registerPassword)) { + if (strlen(sia) > 4) { + DBG("\n [CISS-ENGINE] Too long password"); + ss_operation = NULL_SS_OPERATION; + *error_code = CISS_ERR_CB_PWD_TOO_LONG; + return ss_operation; + } + } + + /* End of password too long added code */ + if ((ss_type == TAPI_SS_TYPE_BARRING) && + (ss_operation != registerPassword)) { + if (ss_operation != interrogateSS) { + if (strlen(sia) < 4) { + DBG("\n [CISS-ENGINE] Pwd Too Short : %d",strlen(sia)); + ss_operation = NULL_SS_OPERATION; + *error_code = CISS_ERR_CB_PWD_TOO_SORT; + return ss_operation; + } else if (strlen(sia) > 4) { + DBG("\n [CISS-ENGINE] Pwd Too long : %d",strlen(sia)); + ss_operation = NULL_SS_OPERATION; + *error_code = CISS_ERR_CB_PWD_TOO_LONG; + return ss_operation; + } else { + strncpy(mmi_ctx->ss_password, sia, CISS_MAX_PASSWORD_LEN); + mmi_ctx->ss_password[CISS_MAX_PASSWORD_LEN] = '\0'; + } + } + } + } + + /* copy old_pwd, new_pwd, new_pwd_again */ + if (ss_operation == registerPassword) { + if ((strlen(sia) != 4) || + (strlen(sib) != 4) || + (strlen(sic) != 4)) { + DBG("\n [CISS-ENGINE] Pwd Length Incorrect : %d %d %d", strlen(sia), strlen(sib), strlen(sic)); + memset(mmi_ctx->ss_password, '\0', CISS_MAX_PASSWORD_LEN + 1); + memset(mmi_ctx->ss_new_password, '\0', CISS_MAX_PASSWORD_LEN + 1); + memset(mmi_ctx->ss_new_password2, '\0', CISS_MAX_PASSWORD_LEN + 1); + strncpy(mmi_ctx->ss_password,sia, CISS_MAX_PASSWORD_LEN); + strncpy(mmi_ctx->ss_new_password,sib, CISS_MAX_PASSWORD_LEN); + strncpy(mmi_ctx->ss_new_password2,sic, CISS_MAX_PASSWORD_LEN); + } else { + memset(mmi_ctx->ss_password, '\0', CISS_MAX_PASSWORD_LEN + 1); + memset(mmi_ctx->ss_new_password, '\0', CISS_MAX_PASSWORD_LEN + 1); + memset(mmi_ctx->ss_new_password2, '\0', CISS_MAX_PASSWORD_LEN + 1); + strncpy(mmi_ctx->ss_password,sia, CISS_MAX_PASSWORD_LEN); + strncpy(mmi_ctx->ss_new_password,sib, CISS_MAX_PASSWORD_LEN); + strncpy(mmi_ctx->ss_new_password2,sic, CISS_MAX_PASSWORD_LEN); + } + } + + if (ss_operation == NULL_SS_OPERATION) { + /* check if it is an Unstructured SS data */ + if ((ss_str_len <= MAX_USS_CHAR) && + (ss_str_len > 2) && + (sups_str[ss_str_len - 1] == '#')) + ss_operation = processUnstructuredSS_Request; + } + return (ss_operation); +} + +int _ciss_parse_req_string(char *pszSS, ciss_mmi_context_t *mmi_ctx) +{ + DBG("Enter"); + memset(mmi_ctx, 0x0, sizeof(ciss_mmi_context_t)); + DBG("\n [CISS-ENGINE] received string = %s", pszSS); + mmi_ctx->user_string_length = strlen(pszSS); + if (mmi_ctx->user_string_length > 0) + memcpy(mmi_ctx->user_string, pszSS, mmi_ctx->user_string_length); + else { + DBG("\n [CISS-ENGINE] User String Length should be non-zero"); + return CISS_ERR_UNKNOWN; + } + + int error_code = CISS_ERR_NONE; + mmi_ctx->opcode = __ciss_parse_req_string(mmi_ctx, &error_code); + DBG("\n [CISS-ENGINE] Parsed opcode = %d", mmi_ctx->opcode); + DBG("\n [CISS-ENGINE] Parsed SSCode = %x", mmi_ctx->ss_flavor); + DBG("\n [CISS-ENGINE] Parsed SStype = %x", mmi_ctx->ss_type); + DBG("\n [CISS-ENGINE] Parsed BS Code = %x ", mmi_ctx->tapi_bsg); + DBG("\n [CISS-ENGINE] Parsed NR Timer = %d", mmi_ctx->nr_timer); + DBG("\n [CISS-ENGINE] Parsed Divert no = %s", mmi_ctx->divert_number); + DBG("\n [CISS-ENGINE] Parsed SS Pwd = %s", mmi_ctx->ss_password); + DBG("\n [CISS-ENGINE] Parsed SS New Pwd = %s", mmi_ctx->ss_new_password); + DBG("\n [CISS-ENGINE] Parsed SS New Pwd cnf = %s", mmi_ctx->ss_new_password2); + if ((mmi_ctx->opcode == NULL_SS_OPERATION) && + (error_code == CISS_ERR_NONE)) + error_code = CISS_ERR_ILLEGAL_SS_OPER; + + return error_code; +} + diff --git a/src/ciss-resp.c b/src/ciss-resp.c new file mode 100755 index 0000000..9b0d554 --- /dev/null +++ b/src/ciss-resp.c @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * This file is part of + * Written by , + * + * PROPRIETARY/CONFIDENTIAL + * + * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). + * You shall not disclose such Confidential Information and shall use it only in accordance + * with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. + * SAMSUNG make no representations or warranties about the suitability of the software, + * either express or implied, including but not limited to the implied warranties of merchantability, + * fitness for a particular purpose, or non-infringement. + * SAMSUNG shall not be liable for any damages suffered by licensee as a result of using, + * modifying or distributing this software or its derivatives. + * + */ + +#include "ciss-common.h" +#include "ciss-widget.h" +#include "ciss-resp.h" +#include "ciss-tapi-request.h" +#include "ciss-converter.h" +#include "ciss-util.h" +#include + +static char resultstring[CISS_MAX_SS_RECORDS][CISS_USSD_DATA_SIZE_MAX]; + +static void __ciss_create_forward_result_string(ciss_result_t *ciss_result, TelSsInfo_t *ss_info) +{ + int i; + DBG("\n [CISS-ENGINE] __ciss_create_forward_result_string: num of param=%d\n", ss_info->NumberOfRecords); + /* Check Network result & Setting Proper result string to display */ + /* Set Supplement service type string */ + ciss_result->szSsType = CISS_SERVICE_DIVERTING; + ciss_result->nRecordNum = ss_info->NumberOfRecords; + /* Request from MMI string */ + + /* No SS Result received case.. */ + if (ss_info->NumberOfRecords <= 0) { + DBG("\n [CISS-ENGINE] __ciss_create_forward_result_string: (ME) parameter num=0!\n"); + /* Set Display string : Default telecommSvc, Flavor, Result */ + ciss_result->nRecordNum = 0; + _ciss_get_telecomm_svc(TAPI_SS_TS_NONE, &ciss_result->szBearer[0]); + _ciss_get_result_status_type(TAPI_SS_STATUS_PROVISIONED, &ciss_result->szResult[0]); + ciss_result->szFlavor = CISS_FLAVOR_NONE; + } else { + /* Single or Multiple result received case.. + In case of all CF and all conditional CF, tapi always sends a no reply flavor. + So we have to get the flavor with requested data that is saved in ss_result_string structure. */ + + /* Set Display string : Network result value */ + for (i = 0; i < ss_info->NumberOfRecords; i++) { + _ciss_get_telecomm_svc(ss_info->SsRecord.ForwardingRecord.rec_class[i].TeleCommService, &ciss_result->szBearer[i]); + _ciss_get_result_status_type(ss_info->SsRecord.ForwardingRecord.rec_class[i].Status, &ciss_result->szResult[i]); + + if ((ss_info->SsRecord.ForwardingRecord.rec_class[0].ForwardCondition == TAPI_SS_FORWARD_WHEN_NO_ANSWER_EV) && + (ss_info->SsRecord.ForwardingRecord.rec_class[i].NoReplyWaitTime != 0)) { + ciss_result->nDivertWaitingTime[i] = ss_info->SsRecord.ForwardingRecord.rec_class[i].NoReplyWaitTime; + DBG("\n [CISS-ENGINE] __ciss_create_forward_result_string(Multiple %dth): No reply time=%d\n", + i, ciss_result->nDivertWaitingTime[i]); + } + DBG("\n [CISS-ENGINE] #########forwarding number = %s########\n\n", + ss_info->SsRecord.ForwardingRecord.rec_class[i].szCallForwardingNumber); + + if (ss_info->SsRecord.ForwardingRecord.rec_class[i].bCallForwardingNumberPresent) { + _ciss_strcpy(ciss_result->szDivertNumber[i], + sizeof(ciss_result->szDivertNumber[i]), + (char *)ss_info->SsRecord.ForwardingRecord.rec_class[i].szCallForwardingNumber); + DBG("\n [CISS-ENGINE] #########forwarding number in response= %s########\n\n", + ciss_result->szDivertNumber[i]); + } + DBG("\n [CISS-ENGINE] __ciss_create_forward_result_string(Multiple %dth): Bearer = %d, Favor = %d, Status = %d, num=%s\n", + i, ss_info->SsRecord.ForwardingRecord.rec_class[i].TeleCommService, + ss_info->SsRecord.ForwardingRecord.rec_class[0].ForwardCondition, + ss_info->SsRecord.ForwardingRecord.rec_class[i].Status, + ciss_result->szDivertNumber[i]); + } + } + +} + +static void __ciss_create_barring_result_string(ciss_result_t *ciss_result /*out */, TelSsInfo_t *ss_info /*in */) +{ + int i; + /* Set Supplement service type string */ + ciss_result->szSsType = CISS_SERVICE_BARRING; + ciss_result->nRecordNum = ss_info->NumberOfRecords; + + if (ss_info->NumberOfRecords <= 0) { + DBG("\n [CISS-ENGINE] __ciss_create_barring_result_string: (ME) parameter num=0!\n"); + /* Set Display string : Default telecommSvc, Flavor, Result */ + ciss_result->nRecordNum = 0; + _ciss_get_telecomm_svc(TAPI_SS_TS_NONE, &ciss_result->szBearer[0]); + _ciss_get_result_status_type(TAPI_SS_STATUS_PROVISIONED, &ciss_result->szResult[0]); + } else { + /* Single or Multiple result received case.. */ + /* In case of all barring, tapi always sends a BAOC flavor. */ + /* So we have to get the flavor with requested data that is saved in ss_result_string structure. */ + + for (i = 0; i < ss_info->NumberOfRecords; i++) { + _ciss_get_telecomm_svc(ss_info->SsRecord.BarringRecord.rec_class[i].TeleCommService, &ciss_result->szBearer[i]); + _ciss_get_result_status_type(ss_info->SsRecord.BarringRecord.rec_class[i].Status, &ciss_result->szResult[i]); + DBG("\n [CISS-ENGINE] __ciss_tapi_handle_barring_cnf(Multiple %dth): Bearer = %d, Favor = %d, Status = %d\n", + i, ss_info->SsRecord.BarringRecord.rec_class[i].TeleCommService, + ss_info->SsRecord.BarringRecord.rec_class[i].Flavour, + ss_info->SsRecord.BarringRecord.rec_class[i].Status); + } + } +} + +static void __ciss_create_waiting_result_string(ciss_result_t *ciss_result /*out */, TelSsInfo_t *ss_info /*in */) +{ + TelSsStatus_t WaitingResultStatus; + int i; + /* Check Network result & Setting Proper result string to display */ + /* Set Supplement service type string */ + ciss_result->szSsType = CISS_SERVICE_WAITING; + + /* Call waiting setting result state + 1) Interrogate / Activate : all received bearers mean "Activate" + 2) Deactivate : All received bearers mean "Deactivate" + */ + if (ss_info->SsRecord.WaitingRecord.rec_class[0].Status == TAPI_SS_STATUS_QUIESCENT) + WaitingResultStatus = TAPI_SS_STATUS_PROVISIONED; + else + WaitingResultStatus = TAPI_SS_STATUS_ACTIVE; + + DBG("\n [CISS-ENGINE] create_waiting_result_string : WaitingResultStatus = %d", WaitingResultStatus); + ciss_result->nRecordNum = ss_info->NumberOfRecords; + + /* Request From MMI */ + if (ss_info->NumberOfRecords <= 0) { + DBG("\n [CISS-ENGINE] __ciss_create_waiting_result_string: (ME) parameter num=0!\n"); + /* Set Display string : Default telecommSvc, Flavor, Result */ + _ciss_get_telecomm_svc(TAPI_SS_TS_NONE, &ciss_result->szBearer[0]); + _ciss_get_result_status_type(TAPI_SS_STATUS_PROVISIONED, &ciss_result->szResult[0]); + ciss_result->nRecordNum = 0; + } else { + /* Single or Multiple result received case.. */ + /* Set Display string : Network result value */ + + for (i = 0; i < ss_info->NumberOfRecords; i++) { + _ciss_get_telecomm_svc(ss_info->SsRecord.WaitingRecord.rec_class[i].TeleCommService, &ciss_result->szBearer[i]); + _ciss_get_result_status_type(WaitingResultStatus, &ciss_result->szResult[i]); + DBG("\n [CISS-ENGINE] __ciss_create_waiting_result_string(Multiple %dth): Bearer = %d, Status = %d\n", + i, ss_info->SsRecord.WaitingRecord.rec_class[i].TeleCommService, + ss_info->SsRecord.WaitingRecord.rec_class[i].Status); + } + } +} + +static void __ciss_create_cli_result_string(ciss_result_t *ciss_result /*out */, TelSsCliRecord_t *pCliRecord /*in */) +{ + ciss_result->szSsType = CISS_SERVICE_IDENTIFICATION; + ciss_result->szFlavor = CISS_FLAVOR_NONE; + ciss_result->szBearer[0] = CISS_TELECOMM_SVC_NONE; + + switch (pCliRecord->IdentificationType) { + case TAPI_CALLING_LINE_IDENTITY_PRESENTATION: + ciss_result->cli_type = CISS_CALLING_LINE_IDENTITY_PRESENTATION; + DBG("\n [CISS-ENGINE] ciss_callId_display_identification: TAPI_CALLING_LINE_IDENTITY_PRESENTATION (ciss_info.cli_record.status=%d)\n", pCliRecord->CliStatus); + /* CLIP : The CLIP Supplementary Service provides the called party with the possibility to receive the line identity of the calling party. + ** CLIP is activated with Provisioned . Generally it is provisioned by n/w. + ** *#30# MMI string is used to check the status: + ** case1: When CLIP is provisioned and activated.SS status sent by QMOCHA will be TAPI_SS_STATUS_ACTIVE. + ** UI should display: "Number of caller is shown" or message something like this + */ + + if ((pCliRecord->CliStatus == TAPI_CLI_STATUS_ACTIVATED) || + pCliRecord->CliStatus == TAPI_CLI_STATUS_PROVISIONED) { + /* Display : Caller ID is shown */ + ciss_result->szResult[0] = CISS_STATUS_ACTIVE; + } else { + /* case2: When CLIP is not provisioned. SS status sent by QMOCHA will be TAPI_SS_STATUS_NOTHING. + ** UI should display: "CLIP not subscribed" or message something like this. + ** commented by Yongseock Choi : According to our police, because of no corresponding UI string, TAPI_SS_STATUS_NOTHING and TAPI_SS_STATUS_QUIESCENT + ** TAPI_SS_STATUS_REGISTERED are mapped into "Caller ID is not shown". + */ + /* Display : Caller ID is not shown */ + ciss_result->szResult[0] = CISS_STATUS_NOTHING; + } + break; + + case TAPI_CALLING_LINE_IDENTITY_RESTRICTION: + ciss_result->cli_type = CISS_CALLING_LINE_IDENTITY_RESTRICTION; + DBG("\n [CISS-ENGINE] ciss_callId_display_identification: TAPI_CALLING_LINE_IDENTITY_RESTRICTION (cli_status = %d)\n", pCliRecord->CliStatus); + /* CLIR : The CLIR Supplementary Service enables the calling party to prevent presentation of its line identity to the called party. + ** The CLIR Supplementary Service can be offered with one subscription option : + ** 1)permanent (invoked for all relevant calls) or + ** 2)temporary (suppressed by the user on a per call basis). + ** In temporary mode , defaults values are: + ** 1) presentation restricted: or + ** 2) presentation not restricted(allowed). + */ + if (pCliRecord->CliStatus == TAPI_CLI_STATUS_ACTIVATED || + pCliRecord->CliStatus == TAPI_CLI_STATUS_PROVISIONED || + pCliRecord->CliStatus == TAPI_CLI_STATUS_TEMP_RESTRICTED) { + ciss_result->szResult[0] = CISS_STATUS_ACTIVE; + } else { + /* Display : My caller ID sent on calling */ + ciss_result->szResult[0] = CISS_STATUS_NOTHING; + } + break; + + case TAPI_CONNECTED_LINE_IDENTITY_PRESENTATION: + ciss_result->cli_type = CISS_CONNECTED_LINE_IDENTITY_PRESENTATION; + DBG("\n [CISS-ENGINE] ciss_callId_display_identification: TAPI_CONNECTED_LINE_IDENTITY_PRESENTATION (ciss_info.cli_record.cli_status=%d)\n", pCliRecord->CliStatus); + if (pCliRecord->CliStatus == TAPI_CLI_STATUS_ACTIVATED) { + /* Display : Answering Caller ID is shown */ + ciss_result->szResult[0] = CISS_STATUS_ACTIVE; + } else { + /* Display : Answering Caller ID is not shown */ + ciss_result->szResult[0] = CISS_STATUS_NOTHING; + } + break; + + case TAPI_CONNECTED_LINE_IDENTITY_RESTRICTION: + ciss_result->cli_type = CISS_CONNECTED_LINE_IDENTITY_RESTRICTION; + DBG("\n [CISS-ENGINE] ciss_callId_display_identification: TAPI_CONNECTED_LINE_IDENTITY_RESTRICTION (ciss_info.cli_record.status=%d)\n", pCliRecord->CliStatus); + if (pCliRecord->CliStatus == TAPI_CLI_STATUS_ACTIVATED) { + /* Display : My caller ID not sent on answering */ + ciss_result->szResult[0] = CISS_STATUS_ACTIVE; + } else { + /* Display : My caller ID sent on answering */ + ciss_result->szResult[0] = CISS_STATUS_NOTHING; + } + break; + + case TAPI_CALLING_NAME_PRESENTATION: + ciss_result->cli_type = CISS_CALLING_NAME_PRESENTATION; + DBG("\n [CISS-ENGINE] ciss_callId_display_identification: TAPI_CALLING_NAME_PRESENTATION (ciss_info.cli_record.status=%d)\n", pCliRecord->CliStatus); + if ((pCliRecord->CliStatus == TAPI_CLI_STATUS_ACTIVATED) || + (pCliRecord->CliStatus == TAPI_CLI_STATUS_PROVISIONED)) { + /* Display : My caller name sent on answering */ + ciss_result->szResult[0] = CISS_STATUS_ACTIVE; + } else { + /* Display : My caller name not sent on answering */ + ciss_result->szResult[0] = CISS_STATUS_NOTHING; + } + break; + + default: + ciss_result->cli_type = CISS_CC_VOICE_IDENTIFICATION_NONE; + ciss_result->szResult[0] = CISS_STATUS_NOTHING; + DBG("\n [CISS-ENGINE] ciss_callId_display_identification: ERROR Wrong tapi_ss_cnap_status_t = %d come. \n", pCliRecord->IdentificationType); + break; + } +} + +static void __ciss_ui_mmi_create_cnap_result_string(ciss_result_t *result, char *szResult) +{ + switch (result->cli_type) { + case CISS_CALLING_LINE_IDENTITY_PRESENTATION: + switch (result->szResult[0]) { + case CISS_STATUS_ACTIVE: + strncpy(szResult, CISS_STR_CALLER_ID_SHOWN, CISS_USSD_DATA_SIZE_MAX - 1); + break; + case CISS_STATUS_REGISTERED: + case CISS_STATUS_PROVISIONED: + case CISS_STATUS_QUIESCENT: + case CISS_STATUS_NOTHING: + default: + strncpy(szResult, CISS_STR_CALLER_ID_HIDDEN, CISS_USSD_DATA_SIZE_MAX - 1); + break; + } + break; + case CISS_CALLING_LINE_IDENTITY_RESTRICTION: + switch (result->szResult[0]) { + case CISS_STATUS_ACTIVE: + strncpy(szResult, CISS_STR_MY_CALLER_ID_IS_NOT_SENT_WHEN_CALLING, CISS_USSD_DATA_SIZE_MAX - 1); + break; + case CISS_STATUS_REGISTERED: + case CISS_STATUS_PROVISIONED: + case CISS_STATUS_QUIESCENT: + case CISS_STATUS_NOTHING: + default: + strncpy(szResult, CISS_STR_MY_CALLER_ID_WILL_BE_SENT_WHEN_CALLING, CISS_USSD_DATA_SIZE_MAX - 1); + break; + } + break; + case CISS_CONNECTED_LINE_IDENTITY_PRESENTATION: + switch (result->szResult[0]) { + case CISS_STATUS_ACTIVE: + strncpy(szResult, CISS_STR_ANSWERING_NUMBER_IS_SHOWN_WHEN_CALLING, CISS_USSD_DATA_SIZE_MAX - 1); + break; + case CISS_STATUS_REGISTERED: + case CISS_STATUS_PROVISIONED: + case CISS_STATUS_QUIESCENT: + case CISS_STATUS_NOTHING: + default: + strncpy(szResult, CISS_STR_ANSWERING_NUMBER_IS_NOT_SHOWN_WHEN_CALLING, CISS_USSD_DATA_SIZE_MAX - 1); + break; + } + break; + case CISS_CONNECTED_LINE_IDENTITY_RESTRICTION: + switch (result->szResult[0]) { + case CISS_STATUS_ACTIVE: + strncpy(szResult, CISS_STR_MY_CALLER_ID_IS_NOT_SENT_WHEN_ANSWERING_CALLS, CISS_USSD_DATA_SIZE_MAX - 1); + break; + case CISS_STATUS_REGISTERED: + case CISS_STATUS_PROVISIONED: + case CISS_STATUS_QUIESCENT: + case CISS_STATUS_NOTHING: + default: + strncpy(szResult, CISS_STR_MY_CALLER_ID_WILL_BE_SENT_WHEN_ANSWERING_CALLS, CISS_USSD_DATA_SIZE_MAX - 1); + break; + } + break; + case CISS_CALLING_NAME_PRESENTATION: + switch (result->szResult[0]) { + case CISS_STATUS_ACTIVE: + strncpy(szResult, CISS_STR_CALLER_ID_AVAILABLE, CISS_USSD_DATA_SIZE_MAX - 1); + break; + case CISS_STATUS_REGISTERED: + case CISS_STATUS_PROVISIONED: + case CISS_STATUS_QUIESCENT: + case CISS_STATUS_NOTHING: + default: + strncpy(szResult, CISS_STR_CALLER_ID_RESTRICTED, CISS_USSD_DATA_SIZE_MAX - 1); + break; + } + break; + default: + strncpy(szResult, "Incorrect Service", CISS_USSD_DATA_SIZE_MAX - 1); + break; + } + DBG("\n \n [CISS-MMI] THe result String :%s\n", szResult); +} + +static void __ciss_ui_mmi_create_mmi_result_string(ciss_result_t *pSSResult, int index, char *result_string) +{ + DBG("Enter"); + char mszBuffer[CISS_TEXT_LEN_MAX]; + char szBuffer[CISS_TEXT_LEN_MAX]; + char service[CISS_TEXT_LEN_MAX]; + char teleservice[CISS_TEXT_LEN_MAX]; + char flavor[CISS_TEXT_LEN_MAX]; + char status[CISS_TEXT_LEN_MAX]; + + _ciss_ui_mmi_get_service_name(pSSResult->szSsType, service); + _ciss_ui_mmi_get_flavor_name(pSSResult->szFlavor, flavor); + _ciss_ui_mmi_get_bearer_name(pSSResult->szSsType, pSSResult->szBearer[index], teleservice); + _ciss_ui_mmi_get_result_status_type(pSSResult->szSsType, pSSResult->szResult[index], status); + + strncpy(mszBuffer, service, CISS_TEXT_LEN_MAX - 1); + mszBuffer[CISS_TEXT_LEN_MAX - 1] = '\0'; + + if (strlen(teleservice)) { + strncat(mszBuffer, "
", strlen("
")); + strncat(mszBuffer, " -", strlen(" -")); + strncat(mszBuffer, teleservice, strlen(teleservice)); + } + DBG("create_result_string: Label Text(telecommSvc) = %d\n", pSSResult->szBearer[index]); + + if (pSSResult->szSsType == CISS_SERVICE_DIVERTING) { + /* if Flavor case is 'no reply' then add timer information */ + if ((strcmp(flavor, CISS_STR_CALL_DIVERTING_ACTIVE_C_WHEN_NOREPLY) == 0) && + (pSSResult->nDivertWaitingTime[index] != 0)) { + snprintf(szBuffer, CISS_TEXT_LEN_MAX, "%s %02ds", flavor, pSSResult->nDivertWaitingTime[index]); + } else { + strncpy(szBuffer, flavor, CISS_TEXT_LEN_MAX - 1); + szBuffer[CISS_TEXT_LEN_MAX - 1] = '\0'; + } + + if (strlen(flavor) > 1) { + strncat(mszBuffer, "
", strlen("
")); + strncat(mszBuffer, " -", strlen(" -")); + strncat(mszBuffer, szBuffer, strlen(szBuffer)); + } + DBG("\n [CISS-MMI] create_result_string: Label Text(flavor) = %s\n", flavor); + + /* 4) Display Status */ + strncat(mszBuffer, "
", strlen("
")); + strncat(mszBuffer, " -", strlen(" -")); + strncat(mszBuffer, status, strlen(szBuffer)); + + /* 5) Display telephone number */ + if (strlen(pSSResult->szDivertNumber[index]) && + (strcmp(status, CISS_STR_ACTIVATED) == 0)) { + DBG("\n [CISS-MMI] create_result_string: Call forwarding number = %s\n", + pSSResult->szDivertNumber[index]); + + strncat(mszBuffer, "
", strlen("
")); + strncat(mszBuffer, " ", strlen(" ")); + strncat(mszBuffer, pSSResult->szDivertNumber[index], strlen(pSSResult->szDivertNumber[index])); + } else + DBG("\n [CISS-MMI] create_result_string: Call forwarding number is not need"); + } else if (pSSResult->szSsType == CISS_SERVICE_BARRING) { + if (strlen(flavor) > 1) { + strncat(mszBuffer, "
", strlen("
")); + strncat(mszBuffer, " -", strlen(" -")); + strncat(mszBuffer, flavor, strlen(flavor)); + } + + /* 4) Display Status */ + strncat(mszBuffer, "
", strlen("
")); + strncat(mszBuffer, " -", strlen(" -")); + strncat(mszBuffer, status, strlen(status)); + } else if (pSSResult->szSsType == CISS_SERVICE_WAITING) { + /* 4) Display Status */ + strncat(mszBuffer, "
", strlen("
")); + strncat(mszBuffer, " -", strlen("< ->")); + strncat(mszBuffer, status, strlen(status)); + } + strncpy(result_string, mszBuffer, CISS_USSD_DATA_SIZE_MAX - 1); + + DBG("Result String:%s\n", result_string); + DBG("Leave"); +} + +static int __ciss_tapi_handle_forward_cnf(ciss_result_t *ciss_result, TelSsInfo_t *ss_info) +{ + DBG("\n [CISS-ENGINE] __ciss_tapi_handle_forward_cnf: TAPI_EVENT_SS_FORWARD_XXX_CNF received\n"); + DBG("\n [CISS-ENGINE] __ciss_tapi_handle_forward_cnf(Single): Bearer = %d, Flavor = %d, Status = %d \n", + ss_info->SsRecord.ForwardingRecord.rec_class[0].TeleCommService, + ss_info->SsRecord.ForwardingRecord.rec_class[0].ForwardCondition, + ss_info->SsRecord.ForwardingRecord.rec_class[0].Status); + + memset(ciss_result, 0, sizeof(ciss_result_t)); + DBG("\n [CISS-ENGINE] ss_info.SsRecord.ForwardingRecord.rec_class[0].szCallForwardingNumber : %s %d", + ss_info->SsRecord.ForwardingRecord.rec_class[0].szCallForwardingNumber, + strlen((char *)ss_info->SsRecord.ForwardingRecord.rec_class[0].szCallForwardingNumber)); + _ciss_get_forward_flavor_type(ss_info->SsRecord.ForwardingRecord.rec_class[0].ForwardCondition, + &(ciss_result->szFlavor)); + __ciss_create_forward_result_string(ciss_result, ss_info); + + DBG("\n [CISS-ENGINE] this->ss_req_data.flavor: %d\n", ciss_result->szFlavor); + DBG("\n [CISS-ENGINE] this->ss_req_data.telecommSvc: %d\n, this->ss_req_data.action: %d \n", + ciss_result->szBearer[0], ciss_result->szResult[0]); + + return TRUE; +} + +static int __ciss_tapi_handle_barring_cnf(ciss_result_t *ciss_result, TelSsInfo_t *ss_info) +{ + DBG("\n [CISS-ENGINE] __ciss_tapi_handle_barring_cnf: TAPI_EVENT_SS_BARRING_XXX_CNF received\n"); + DBG("\n [CISS-ENGINE] __ciss_tapi_handle_barring_cnf(Single): Bearer = %d, Favor = %d, Status = %d\n", + ss_info->SsRecord.BarringRecord.rec_class[0].TeleCommService, + ss_info->SsRecord.BarringRecord.rec_class[0].Flavour, + ss_info->SsRecord.BarringRecord.rec_class[0].Status); + + memset(ciss_result, 0, sizeof(ciss_result_t)); + _ciss_get_barring_flavor_type(ss_info->SsRecord.BarringRecord.rec_class[0].Flavour, &(ciss_result->szFlavor)); + __ciss_create_barring_result_string(ciss_result, ss_info); + + return TRUE; +} + +static int __ciss_tapi_handle_waiting_cnf(ciss_result_t *ciss_result /*out */, TelSsInfo_t *ss_info /*in */) +{ + DBG("\n [CISS-ENGINE] __ciss_tapi_handle_waiting_cnf: TAPI_EVENT_SS_WAITING_XXX_CNF received\n"); + DBG("\n [CISS-ENGINE] __ciss_tapi_handle_waiting_cnf(Single): Bearer = %d, Status = %d\n", + ss_info->SsRecord.WaitingRecord.rec_class[0].TeleCommService, + ss_info->SsRecord.WaitingRecord.rec_class[0].Status); + + memset(ciss_result, 0, sizeof(ciss_result_t)); + __ciss_create_waiting_result_string(ciss_result, ss_info); + + return TRUE; +} + +static int __ciss_tapi_handle_call_id(ciss_result_t *ciss_result, TelSsInfo_t *ss_info) +{ + DBG("\n [CISS-ENGINE] __ciss_tapi_handle_call_id: TAPI_EVENT_SS_IDENTITY_IND received\n"); + + memset(ciss_result, 0, sizeof(ciss_result_t)); + __ciss_create_cli_result_string(ciss_result, &(ss_info->SsRecord.CliRecord)); + ciss_result->nRecordNum = 1; + + return TRUE; +} + +static int __ciss_create_ss_result_sting(char *ss_result_string /*out */, TelSsInfo_t *ss_info /*in */) +{ + DBG("Enter"); + + ciss_result_t ciss_result; + switch (ss_info->SsType) { + case TAPI_SS_TYPE_FORWARDING: + __ciss_tapi_handle_forward_cnf(&ciss_result, ss_info); + break; + + case TAPI_SS_TYPE_BARRING: + __ciss_tapi_handle_barring_cnf(&ciss_result, ss_info); + break; + + case TAPI_SS_TYPE_WAITING: + __ciss_tapi_handle_waiting_cnf(&ciss_result, ss_info); + break; + + case TAPI_SS_TYPE_IDENTIFICATION: + __ciss_tapi_handle_call_id(&ciss_result, ss_info); + break; + + default: + return -1; + } + + memset(resultstring, 0x0, sizeof(resultstring)); + if (ciss_result.szSsType == CISS_SERVICE_IDENTIFICATION) { + DBG("\n [CISS-MMI] CISS_SERVICE_IDENTIFICATION \n"); + __ciss_ui_mmi_create_cnap_result_string(&ciss_result, resultstring[0]); + } else if (ciss_result.nRecordNum == 0) { + DBG("\n [CISS-MMI] result.nRecordNum == 0 \n"); + strncpy(resultstring[0], CISS_STR_SUCCESS, CISS_TEXT_LEN_MAX - 1); + } else { + int g_count = 0; + for (g_count = 0; g_count < ciss_result.nRecordNum; g_count++) { + __ciss_ui_mmi_create_mmi_result_string(&ciss_result, g_count, resultstring[g_count]); + DBG("\n [CISS-MMI] Copying data & parsing Result string ::::::::::: %s \n", resultstring[g_count]); + } + } + + int count = 0; + + for (count = 0; count < ciss_result.nRecordNum; count++) { + strncat(ss_result_string, "
", strlen("
")); + strncat(ss_result_string, resultstring[count], strlen(resultstring[count])); + strncat(ss_result_string, "
", strlen("
")); + } + DBG("Final Result string : %s ", ss_result_string); + DBG("Leave"); + + return 0; +} + +static void __ciss_ssresp_view_quit_cb(void *data, Evas_Object *obj, void *event_info) +{ + elm_exit(); +} + +Evas_Object *_ciss_create_ss_resp_view(Evas_Object *parent, TelSsInfo_t *ss_info, void *data) +{ + DBG("Enter"); + retv_if(parent == NULL, NULL); + retv_if(data == NULL, NULL); + + struct appdata *ad = (struct appdata *)data; + Evas_Object *nf; + Evas_Object *l_button; + + char ss_result_string[CISS_MMI_MAX_SS_RESP_STRING] = { }; + + if (ss_info) + __ciss_create_ss_result_sting(ss_result_string, ss_info); + else + snprintf(ss_result_string, CISS_MMI_MAX_SS_RESP_STRING, "%s", CISS_STR_SUCCESS); + + nf = elm_naviframe_add(parent); + retv_if(nf == NULL, NULL); + + Evas_Object *genlist = + _ciss_create_result_genlist(ss_result_string, CISS_MMI_MAX_SS_RESP_STRING, nf, ad); + retv_if(NULL == genlist, NULL); + + l_button = elm_button_add(nf); + evas_object_smart_callback_add(l_button, "clicked", + __ciss_ssresp_view_quit_cb, NULL); + + elm_naviframe_item_push(nf, CISS_STR_INFORMATION, + l_button, NULL, genlist, NULL); + elm_object_style_set(l_button, "naviframe/back_btn/default"); + + evas_object_show(nf); + + DBG("Leave"); + return nf; +} + diff --git a/src/ciss-respnd.c b/src/ciss-respnd.c new file mode 100755 index 0000000..5fb8ce4 --- /dev/null +++ b/src/ciss-respnd.c @@ -0,0 +1,218 @@ +/* + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * This file is part of + * Written by , + * + * PROPRIETARY/CONFIDENTIAL + * + * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). + * You shall not disclose such Confidential Information and shall use it only in accordance + * with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. + * SAMSUNG make no representations or warranties about the suitability of the software, + * either express or implied, including but not limited to the implied warranties of merchantability, + * fitness for a particular purpose, or non-infringement. + * SAMSUNG shall not be liable for any damages suffered by licensee as a result of using, + * modifying or distributing this software or its derivatives. + * + */ + +#include "ciss-respnd.h" +#include "ciss-common.h" +#include "ciss-widget.h" +#include +#include + +typedef enum { + BT_KOR_MODE = 0, + BT_CHINESE_MODE = 1, /* Not support yet */ + BT_ENG_LOWER_MODE = 2, + BT_ENG_UPPER_MODE = 3, + BT_NUMBER_MODE = 4, + BT_SYMBOL_MODE = 5, + BT_SYMBOL2_MODE = 6, + BT_SYMBOL3_MODE = 7, + BT_JAPANESE_MODE = 8, + BT_ENV_MODE = 9 +} ciss_ime_mode_t; + +static Elm_Entry_Filter_Limit_Size limit_filter_data; + +static void __ciss_respond_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG("coming inside __ciss_respond_cb \n"); + int ret; + char *buf; + char ussd_str[TAPI_SS_USSD_DATA_SIZE_MAX] = {0, }; + int pRequestId = 0; + Ecore_IMF_Context *imf_context; + Evas_Object *error_popup; + struct appdata *ad = (struct appdata *)data; + + buf = (char *)elm_entry_entry_get(ad->ef_entry); + imf_context = elm_entry_imf_context_get(ad->ef_entry); + if (imf_context) + ecore_imf_context_input_panel_hide(imf_context); + + snprintf(ussd_str, TAPI_SS_USSD_DATA_SIZE_MAX, "%s", buf); + if (strlen(ussd_str) == 0) { + error_popup = _ciss_create_popup(ad->nf, CISS_STR_ENTER_NUMBER); + evas_object_show(error_popup); + return; + } + + DBG("The data is %s %d \n", ussd_str, strlen(buf)); + + TelSsUssdMsgInfo_t ussdRspRecord; + memset(&ussdRspRecord, 0, sizeof(TelSsUssdMsgInfo_t)); + strncpy(ussdRspRecord.szUssdString, ussd_str, sizeof(ussdRspRecord.szUssdString) - 1); + ussdRspRecord.szUssdString[strlen(ussdRspRecord.szUssdString)] = '\0'; + ussdRspRecord.UssdStringLength = strlen(ussdRspRecord.szUssdString); + ad->popup = _ciss_create_noti_popup(ad->win_main, + CISS_STR_REQUESTING, NULL, POPUP_DISPLAY_DURATION, ad); + ret = tel_send_ss_ussd_response(&ussdRspRecord, &pRequestId); + + DBG("The value of ret is %d and request id is %d \n", ret, pRequestId); + ad->request_id = pRequestId; /* of no use as of now */ +} + +static void __ciss_changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + ret_if(NULL == data); + + struct appdata *ad = (struct appdata *)data; + Evas_Object *editfield = ad->ef_layout; + Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->nf); + ret_if(!navi_it); + + if (elm_object_focus_get(editfield)) { + Evas_Object *btn = elm_object_item_part_content_get(navi_it, + "title_right_btn"); + + if (elm_entry_is_empty(obj)) { + elm_object_signal_emit(editfield, "elm,state,eraser,hide", "elm"); + if (btn) + elm_object_disabled_set(btn, EINA_TRUE); + } else { + elm_object_signal_emit(editfield, "elm,state,eraser,show", "elm"); + if (btn) + elm_object_disabled_set(btn, EINA_FALSE); + } + } +} + +static void __ciss_focused_cb(void *data, Evas_Object *obj, void *event_info) +{ + ret_if(NULL == data); + struct appdata *ad = (struct appdata *)data; + Evas_Object *editfield = ad->ef_layout; + + if (!elm_entry_is_empty(obj)) + elm_object_signal_emit(editfield, "elm,state,eraser,show", "elm"); + elm_object_signal_emit(editfield, "elm,state,guidetext,hide", "elm"); +} + +static void __ciss_unfocused_cb(void *data, Evas_Object *obj, void *event_info) +{ + ret_if(NULL == data); + struct appdata *ad = (struct appdata *)data; + Evas_Object *editfield = ad->ef_layout; + + if (elm_entry_is_empty(obj)) + elm_object_signal_emit(editfield, "elm,state,guidetext,show", "elm"); + elm_object_signal_emit(editfield, "elm,state,eraser,hide", "elm"); +} + +static void __ciss_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + elm_entry_entry_set(data, ""); +} + +static Evas_Object *__ciss_editfield_add(Evas_Object *parent, void *data) +{ + retv_if(data == NULL, NULL); + struct appdata *ad = (struct appdata *)data; + + Evas_Object *layout = NULL; + Evas_Object *entry = NULL; + + layout = elm_layout_add(parent); + ad->ef_layout = layout; + elm_layout_theme_set(layout, "layout", "editfield", "title"); + + entry = elm_entry_add(parent); + ad->ef_entry = entry; + elm_entry_scrollable_set(entry, EINA_TRUE); + elm_entry_single_line_set(entry, EINA_TRUE); + + limit_filter_data.max_char_count = 0; + limit_filter_data.max_byte_count = TAPI_SS_USSD_DATA_SIZE_MAX; + elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, &limit_filter_data); + evas_object_smart_callback_add(entry, "changed", __ciss_changed_cb, ad); + evas_object_smart_callback_add(entry, "focused", __ciss_focused_cb, ad); + evas_object_smart_callback_add(entry, "unfocused", __ciss_unfocused_cb, ad); + evas_object_show(entry); + + elm_object_part_content_set(layout, "elm.swallow.content", entry); + elm_object_part_text_set(layout, "elm.text", CISS_STR_ENTER_NUMBER); + elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm", __ciss_eraser_clicked_cb, entry); + elm_object_focus_set(entry, EINA_TRUE); + + return layout; +} + +static Evas_Object *__ciss_gl_content_respond_ime(void *data, Evas_Object *obj, const char *part) +{ + Evas_Object *editfield = NULL; + + if (!strcmp(part, "elm.icon")) { + editfield = __ciss_editfield_add(obj, data); + return editfield; + } + + return NULL; +} + +static Evas_Object *__ciss_respond_ime_genlist(void *data) +{ + Elm_Object_Item *item = NULL; + Evas_Object *genlist; + struct appdata *ad = (struct appdata *)data; + + genlist = elm_genlist_add(ad->nf); + + ad->itc_ime->item_style = "1icon"; + ad->itc_ime->func.text_get = NULL; + ad->itc_ime->func.content_get = __ciss_gl_content_respond_ime; + ad->itc_ime->func.state_get = NULL; + ad->itc_ime->func.del = NULL; + + item = elm_genlist_item_append(genlist, ad->itc_ime, + (void *)ad, NULL, ELM_GENLIST_ITEM_NONE, + NULL, NULL); + return genlist; +} + +void _ciss_create_respond_view(void *data) +{ + DBG("Enter"); + struct appdata *ad = (struct appdata *)data; + Evas_Object *ime_genlist; + Elm_Object_Item *navi_it = NULL; + Evas_Object *btn = NULL; + + ime_genlist = __ciss_respond_ime_genlist(ad); + + _ciss_remove_naviframe(ad->nf); + navi_it = elm_naviframe_item_push(ad->nf, CISS_STR_INFORMATION, + NULL, NULL, ime_genlist, "1line"); + + btn = _cst_create_title_btn(ad->nf, CISS_STR_QUIT, + _ciss_ussd_quit_cb, (void *)ad); + elm_object_item_part_content_set(navi_it, "title_left_btn", btn); + + btn = _cst_create_title_btn(ad->nf, CISS_STR_REPLY, + __ciss_respond_cb, (void *)ad); + elm_object_item_part_content_set(navi_it, "title_right_btn", btn); + elm_object_disabled_set(btn, EINA_TRUE); +} diff --git a/src/ciss-tapi-request.c b/src/ciss-tapi-request.c new file mode 100755 index 0000000..2565630 --- /dev/null +++ b/src/ciss-tapi-request.c @@ -0,0 +1,674 @@ +/* + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * This file is part of + * Written by , + * + * PROPRIETARY/CONFIDENTIAL + * + * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). + * You shall not disclose such Confidential Information and shall use it only in accordance + * with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. + * SAMSUNG make no representations or warranties about the suitability of the software, + * either express or implied, including but not limited to the implied warranties of merchantability, + * fitness for a particular purpose, or non-infringement. + * SAMSUNG shall not be liable for any damages suffered by licensee as a result of using, + * modifying or distributing this software or its derivatives. + * + */ + +#include +#include +#include +#include +#include "ciss-tapi-request.h" +#include "ciss-parser.h" +#include "ciss-util.h" +#include "vconf.h" +#include "ciss-debug.h" +#include "ciss-string.h" +#include "ciss-widget.h" +#include "ciss-ussd.h" +#include "ciss-resp.h" +#include "ciss-converter.h" + +typedef struct _EventHandler { + int event_type; + unsigned int event_id; + TelAppCallback func; +} EventHandler; + +EventHandler event_list[] = { + {TAPI_EVENT_SS_BARRING_CHANGEPASS_CNF, 0, _ciss_on_tapi_ss_event}, + {TAPI_EVENT_SS_BARRING_CNF, 0, _ciss_on_tapi_ss_event}, + {TAPI_EVENT_SS_BARRING_QUERYSTATUS_CNF, 0, _ciss_on_tapi_ss_event}, + {TAPI_EVENT_SS_CLI_QUERYSTATUS_CNF, 0, _ciss_on_tapi_ss_event}, + {TAPI_EVENT_SS_FORWARD_CNF, 0, _ciss_on_tapi_ss_event}, + {TAPI_EVENT_SS_FORWARD_QUERYSTATUS_CNF, 0, _ciss_on_tapi_ss_event}, + {TAPI_EVENT_SS_USSD_CANCEL_CNF, 0, _ciss_on_tapi_ussd_event}, + {TAPI_EVENT_SS_USSD_CNF, 0, _ciss_on_tapi_ussd_event}, + {TAPI_EVENT_SS_WAITING_CNF, 0, _ciss_on_tapi_ss_event}, + {TAPI_EVENT_SS_WAITING_QUERYSTATUS_CNF, 0, _ciss_on_tapi_ss_event}, + {TAPI_EVENT_SAT_SEND_SS_IND, 0, _ciss_on_tapi_sat_ss_event}, + {TAPI_EVENT_SAT_SEND_USSD_IND, 0, _ciss_on_tapi_sat_ussd_event}, + {TAPI_EVENT_SS_REL_COMP_MSG_NOTIFY, 0, _ciss_on_tapi_ss_rel_complete_noti}, +}; + +int _ciss_tapi_event_setup(struct appdata *ad) +{ + DBG("Enter"); + int i = 0; + int len = 0; + int api_err = -1; + + len = sizeof(event_list) / sizeof(EventHandler); + + if (tel_init() == 0) { + for (i = 0; i < len; i++) { + tel_register_event(event_list[i].event_type, &(event_list[i].event_id), event_list[i].func, (void *)ad); + } + + if ((api_err = tel_register_app_name("org.tizen.ciss-mmi")) != TAPI_API_SUCCESS) + DBG("tel_register_app_name failed error=%d", api_err); + } else + DBG("TelTapiInitEcore() failed."); + + DBG("Leave"); + return 0; +} + +void _ciss_deregister_tel_event(void) +{ + DBG("Enter"); + int len, ret, i; + + len = sizeof(event_list) / sizeof(EventHandler); + + for (i = 0; i < len; i++) { + ret = tel_deregister_event(event_list[i].event_id); + if (ret != TAPI_API_SUCCESS) + DBG("tel_deregister_event error=%d", ret); + } + + ret = tel_deinit(); + if (ret != TAPI_API_SUCCESS) + DBG("TAPI delinit() ret : %d", ret); +} + +ciss_err_t _ciss_send_tapi_request(ciss_mmi_context_t *mmi_ctx) +{ + DBG("Enter"); + + TelSsUssdMsgInfo_t stUssdRecord; + TelSsForwardInfo_t stCfActReq; + TelSsCallBarringInfo_t stCbReq; + TelSsWaitingInfo_t stCwReq; + int RequestId; + TapiResult_t err = TAPI_API_SUCCESS; + ciss_err_t error_code = CISS_ERR_NONE; + + if (mmi_ctx->ss_type == TAPI_SS_TYPE_FORWARDING) { + memset(&stCfActReq, 0, sizeof(TelSsForwardInfo_t)); + stCfActReq.Condition = TAPI_SS_FORWARD_WHEN_UNCONDITIONAL_EV; + stCfActReq.Condition = (TelSsForwardWhen_t) mmi_ctx->ss_flavor; + DBG("\n [CISS-ENGINE] ss_flavor= %d,%d", stCfActReq.Condition, mmi_ctx->ss_flavor); + + _ciss_get_tapi_forward_type(mmi_ctx->tapi_bsg, &stCfActReq.Type); + stCfActReq.NoReplyConditionTimer = mmi_ctx->nr_timer; + strncpy((char *)stCfActReq.szPhoneNumber, mmi_ctx->divert_number, CISS_NUMBER_LEN_MAX); + stCfActReq.szPhoneNumber[CISS_NUMBER_LEN_MAX] = '\0'; + } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_BARRING) { + memset(&stCbReq, 0, sizeof(TelSsCallBarringInfo_t)); + stCbReq.Type = (TelSsCallBarType_t) mmi_ctx->ss_flavor; + DBG("\n [CISS-ENGINE] ss_flavor= %d,%d", stCbReq.Type, mmi_ctx->ss_flavor); + _ciss_get_tapi_call_type(mmi_ctx->tapi_bsg, &stCbReq.CallType); + memcpy(&stCbReq.szPassword, mmi_ctx->ss_password, CISS_MAX_PASSWORD_LEN); + } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_WAITING) { + memset(&stCwReq, 0, sizeof(TelSsWaitingInfo_t)); + _ciss_get_tapi_call_type(mmi_ctx->tapi_bsg, &stCwReq.CallType); + } + switch (mmi_ctx->opcode) { + case registerSS: + DBG("registerSS"); + /* send a register request */ + if (mmi_ctx->ss_type == TAPI_SS_TYPE_FORWARDING) { + stCfActReq.Mode = TAPI_CALL_FORWARD_MODE_REGISTRATION_EV; + + err = tel_set_ss_forward(&stCfActReq, &RequestId); + if (err != TAPI_API_SUCCESS) { + DBG("\n [CISS-ENGINE] tel_set_ss_forward : REGISTRATION call fails g_err_code = %x", err); + DBG("\n [CISS-ENGINE] tel_set_ss_forward : REGISTRATION call fails request ID = %d", RequestId); + _ciss_get_error_from_tapi_error(&error_code, err); + return error_code; + } + } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_BARRING) { + + stCbReq.Mode = TAPI_SS_CALL_BAR_ACTIVATE; + + err = tel_set_ss_barring(&stCbReq, &RequestId); + if (err != TAPI_API_SUCCESS) { + DBG("\n [CISS-ENGINE] tel_set_ss_barring : ACTIVATE call fails g_err_code = %x", err); + DBG("\n [CISS-ENGINE] tel_set_ss_barring : ACTIVATE call fails request ID = %d", RequestId); + _ciss_get_error_from_tapi_error(&error_code, err); + return error_code; + } + } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_WAITING) { + stCwReq.Mode = TAPI_SS_CW_ACTIVATE; + err = tel_set_ss_waiting(&stCwReq, &RequestId); + if (err != TAPI_API_SUCCESS) { + DBG("\n [CISS-ENGINE] tel_set_ss_waiting : ACTIVATION call fails g_err_code = %x", err); + DBG("\n [CISS-ENGINE] tel_set_ss_waiting : ACTIVATION call fails request ID = %d", RequestId); + _ciss_get_error_from_tapi_error(&error_code, err); + return error_code; + } + } + break; + case eraseSS: + DBG("eraseSS"); + /* send an erase command */ + if (mmi_ctx->ss_type == TAPI_SS_TYPE_FORWARDING) { + stCfActReq.Mode = TAPI_CALL_FORWARD_MODE_ERASURE_EV; + + err = tel_set_ss_forward(&stCfActReq, &RequestId); + if (err != TAPI_API_SUCCESS) { + DBG("\n [CISS-ENGINE] tel_set_ss_forward : DE-REGISTRATION call fails g_err_code = %x", err); + DBG("\n [CISS-ENGINE] tel_set_ss_forward : DE-REGISTRATION call fails request = %d", RequestId); + _ciss_get_error_from_tapi_error(&error_code, err); + return error_code; + } + } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_BARRING) { + stCbReq.Mode = TAPI_SS_CALL_BAR_DEACTIVATE; + + err = tel_set_ss_barring(&stCbReq, &RequestId); + if (err != TAPI_API_SUCCESS) { + DBG("\n [CISS-ENGINE] tel_set_ss_barring : DEACTIVATE call fails g_err_code = %x", err); + DBG("\n [CISS-ENGINE] tel_set_ss_barring : DEACTIVATE call fails request ID = %d", RequestId); + _ciss_get_error_from_tapi_error(&error_code, err); + return error_code; + } + } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_WAITING) { + stCwReq.Mode = TAPI_SS_CW_DEACTIVATE; + + err = tel_set_ss_waiting(&stCwReq, &RequestId); + if (err != TAPI_API_SUCCESS) { + DBG("\n [CISS-ENGINE] tel_set_ss_waiting : DEACTIVATION call fails g_err_code = %x", err); + DBG("\n [CISS-ENGINE] tel_set_ss_waiting : DEACTIVATION call fails request ID = %d", RequestId); + _ciss_get_error_from_tapi_error(&error_code, err); + return error_code; + } + } + break; + case activateSS: + DBG("activateSS"); + /* send an activate request */ + if (mmi_ctx->ss_type == TAPI_SS_TYPE_FORWARDING) { + stCfActReq.Mode = TAPI_CALL_FORWARD_MODE_ENABLE_EV; + + err = tel_set_ss_forward(&stCfActReq, &RequestId); + if (err != TAPI_API_SUCCESS) { + DBG("\n [CISS-ENGINE] tel_set_ss_forward : ACTIVATE call fails g_err_code = %x", err); + DBG("\n [CISS-ENGINE] tel_set_ss_forward : ACTIVATE call fails request ID = %d", RequestId); + _ciss_get_error_from_tapi_error(&error_code, err); + return error_code; + } + } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_BARRING) { + stCbReq.Mode = TAPI_SS_CALL_BAR_ACTIVATE; + + err = tel_set_ss_barring(&stCbReq, &RequestId); + if (err != TAPI_API_SUCCESS) { + DBG("\n [CISS-ENGINE] tel_set_ss_barring : ACTIVATE call fails g_err_code = %x", err); + DBG("\n [CISS-ENGINE] tel_set_ss_barring : ACTIVATE call fails request ID = %d", RequestId); + _ciss_get_error_from_tapi_error(&error_code, err); + return error_code; + } + + } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_WAITING) { + stCwReq.Mode = TAPI_SS_CW_ACTIVATE; + + err = tel_set_ss_waiting(&stCwReq, &RequestId); + if (err != TAPI_API_SUCCESS) { + DBG("\n [CISS-ENGINE] tel_set_ss_waiting : ACTIVATION call fails g_err_code = %x", err); + DBG("\n [CISS-ENGINE] tel_set_ss_waiting : ACTIVATION call fails request ID = %d", RequestId); + _ciss_get_error_from_tapi_error(&error_code, err); + return error_code; + } + } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_IDENTIFICATION) { + DBG("\n [CISS-ENGINE] Don't activated CLI option"); + error_code = CISS_ERR_ILLEGAL_SS_OPER; + return error_code; + } + break; + case deactivateSS: + DBG("deactivateSS"); + /* deactivate request */ + if (mmi_ctx->ss_type == TAPI_SS_TYPE_FORWARDING) { + stCfActReq.Mode = TAPI_CALL_FORWARD_MODE_DISABLE_EV; + err = tel_set_ss_forward(&stCfActReq, &RequestId); + if (err != TAPI_API_SUCCESS) { + DBG("\n [CISS-ENGINE] tel_set_ss_forward : DEACTIVATE call fails g_err_code = %x", err); + DBG("\n [CISS-ENGINE] tel_set_ss_forward : DEACTIVATE call fails request ID = %d", RequestId); + _ciss_get_error_from_tapi_error(&error_code, err); + return error_code; + } + } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_BARRING) { + stCbReq.Mode = TAPI_SS_CALL_BAR_DEACTIVATE; + + DBG("\n [CISS-ENGINE] **** ss_mode = %d\n", stCbReq.Mode); + DBG("\n [CISS-ENGINE] **** flavor = %d\n", stCbReq.Type); + DBG("\n [CISS-ENGINE] **** call type = %d\n", stCbReq.CallType); + DBG("\n [CISS-ENGINE] **** Pwd = %s\n", stCbReq.szPassword); + + err = tel_set_ss_barring(&stCbReq, &RequestId); + if (err != TAPI_API_SUCCESS) { + DBG("\n [CISS-ENGINE] tel_set_ss_barring : DEACTIVATE call fails g_err_code = %x", err); + DBG("\n [CISS-ENGINE] tel_set_ss_barring : DEACTIVATE call fails request ID = %d", RequestId); + _ciss_get_error_from_tapi_error(&error_code, err); + return error_code; + } + } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_WAITING) { + stCwReq.Mode = TAPI_SS_CW_DEACTIVATE; + err = tel_set_ss_waiting(&stCwReq, &RequestId); + if (err != TAPI_API_SUCCESS) { + DBG("\n [CISS-ENGINE] tel_set_ss_waiting : ACTIVATION call fails g_err_code = %x", err); + DBG("\n [CISS-ENGINE] tel_set_ss_waiting : ACTIVATION call fails request ID = %d", RequestId); + _ciss_get_error_from_tapi_error(&error_code, err); + return error_code; + } + } + break; + case interrogateSS: + DBG("interrogateSS"); + /* interrogate request */ + if (mmi_ctx->ss_type == TAPI_SS_TYPE_FORWARDING) { + err = tel_get_ss_forward_status(stCfActReq.Type, stCfActReq.Condition, &RequestId); + if (err != TAPI_API_SUCCESS) { + DBG("\n [CISS-ENGINE] tel_get_ss_forward_status call fails g_err_code = %x", err); + DBG("\n [CISS-ENGINE] tel_get_ss_forward_status : CHECK_STATUS call fails request ID = %d", RequestId); + _ciss_get_error_from_tapi_error(&error_code, err); + return error_code; + } + } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_BARRING) { + err = tel_get_ss_barring_status(stCbReq.Type, stCbReq.CallType, &RequestId); + if (err != TAPI_API_SUCCESS) { + DBG("\n [CISS-ENGINE] tel_get_ss_barring_status call fails g_err_code = %x", err); + DBG("\n [CISS-ENGINE] tel_get_ss_barring_status : CHECK_STATUS call fails request ID = %d", RequestId); + _ciss_get_error_from_tapi_error(&error_code, err); + return error_code; + } + } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_WAITING) { + err = tel_get_ss_waiting_status(stCwReq.CallType, &RequestId); + if (err != TAPI_API_SUCCESS) { + DBG("\n [CISS-ENGINE] tel_get_ss_waiting_status call fails g_err_code = %x", err); + DBG("\n [CISS-ENGINE] tel_get_ss_waiting_status : fails request ID = %d", RequestId); + _ciss_get_error_from_tapi_error(&error_code, err); + return error_code; + } + } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_IDENTIFICATION) { + err = tel_get_ss_cli_status(mmi_ctx->ss_flavor, &RequestId); + if (err != TAPI_API_SUCCESS) { + DBG("\n [CISS-ENGINE] tel_get_ss_cli_status call fails g_err_code = %x", err); + DBG("\n [CISS-ENGINE] tel_get_ss_cli_status : fails request ID = %d", RequestId); + _ciss_get_error_from_tapi_error(&error_code, err); + return error_code; + } + } + break; + case registerPassword: + DBG("registerPassword"); + /* password registration request */ + /* check for too short password and mismatch password */ + if (CISS_MAX_PASSWORD_LEN > strlen(mmi_ctx->ss_password) || + CISS_MAX_PASSWORD_LEN > strlen(mmi_ctx->ss_new_password) || + CISS_MAX_PASSWORD_LEN > strlen(mmi_ctx->ss_new_password2)) { + /* too short password */ + DBG("\n [CISS-ENGINE] Too short password"); + error_code = CISS_ERR_CB_PWD_TOO_SORT; + return error_code; + } + + err = tel_change_ss_barring_password(mmi_ctx->ss_password, mmi_ctx->ss_new_password, mmi_ctx->ss_new_password2, &RequestId); + if (err != TAPI_API_SUCCESS) { + DBG("\n [CISS-ENGINE] tel_change_ss_barring_password call request ID = %d", RequestId); + DBG("\n [CISS-ENGINE] tel_change_ss_barring_password call fails g_err_code = %x", err); + _ciss_get_error_from_tapi_error(&error_code, err); + return error_code; + } + break; + case processUnstructuredSS_Request: + DBG("processUnstructuredSS_Request"); + memset(&stUssdRecord, 0, sizeof(TelSsUssdMsgInfo_t)); + stUssdRecord.UssdStringLength = strlen(mmi_ctx->user_string); + + _ciss_strcpy(stUssdRecord.szUssdString, sizeof(stUssdRecord.szUssdString), (char *)mmi_ctx->user_string); + + DBG("\n [CISS-ENGINE] string_length = %d, stUssdRecord.ussd_string = %s", stUssdRecord.UssdStringLength, stUssdRecord.szUssdString); + + err = tel_send_ss_ussd_request(&stUssdRecord, &RequestId); + if (err != TAPI_API_SUCCESS) { + DBG("\n [CISS-ENGINE] tel_send_ss_ussd_request call fails g_err_code = %x", err); + DBG("\n [CISS-ENGINE] tel_send_ss_ussd_request :call fails request ID = %d", RequestId); + _ciss_get_error_from_tapi_error(&error_code, err); + return error_code; + } + break; + default: + error_code = CISS_ERR_UNKNOWN; + DBG("\n [CISS-ENGINE] Invalid Parsed opcode = %d", + mmi_ctx->opcode); + + break; + } + +#if 0 +#ifndef CF_TEST + /* Because tapi sends the CF no reply data for All CF and All conditional CF , we have to make a result flavor with requested data here */ + if (mmi_ctx->ss_type == TAPI_SS_TYPE_FORWARDING) { + memset(&this->ss_result_string, 0, sizeof(ciss_result_t)); + _ciss_get_forward_flavor_type(mmi_ctx->ss_flavor, &this->ss_result_string.szFlavor); + + if (opcode == eraseSS) { + this->ss_req_data.telecommSvc = mmi_ctx->tapi_bsg; + this->ss_req_data.service = CISS_SERVICE_DIVERTING; + this->ss_req_data.flavor = mmi_ctx->ss_flavor; + this->ss_req_data.action = CISS_ACTION_DEACTIVATE; + DBG("\n [CISS-ENGINE] this->ss_req_data.action : %d\n", this->ss_req_data.action); + DBG("\n [CISS-ENGINE] this->ss_req_data.flavor : %d\n", this->ss_req_data.flavor); + DBG("\n [CISS-ENGINE] this->ss_req_data.telecommSvc : %d\n", this->ss_req_data.telecommSvc); + DBG("\n [CISS-ENGINE] this->ss_req_data.service : %d\n", this->ss_req_data.service); + } + + DBG("\n [CISS-ENGINE] Forwarding: Requested ss_flavor =%d\n", this->ss_result_string.szFlavor); + } else if (mmi_ctx->ss_type == TAPI_SS_TYPE_BARRING) { + memset(&this->ss_result_string, 0, sizeof(ciss_result_t)); + _ciss_get_barring_flavor_type(mmi_ctx->ss_flavor, &this->ss_result_string.szFlavor); + + DBG("\n [CISS-ENGINE] Barring: Requested ss_flavor =%d\n", this->ss_result_string.szFlavor); + } +#endif +#endif + DBG("Leave"); + return error_code; +} + +int _ciss_on_tapi_sat_ss_event(const TelTapiEvent_t *event, void *data) +{ + DBG("Enter"); + retv_if(event == NULL, -1); + retv_if(data == NULL, -1); + + int ret = -1; + struct appdata *ad = (struct appdata *)data; + + DBG("event type=0x%x status=0x%x pDataLen=%d is_sat=%d",event->EventType, event->Status, event->pDataLen, ad->is_sat_request); + + if (ad->popup) { + evas_object_del(ad->popup); + ad->popup = NULL; + } + + TelSatSendSsIndSsData_t send_ss_info; + if (event->pDataLen > 0) { + memcpy(&send_ss_info, event->pData, sizeof(TelSatSendSsIndSsData_t)); + + if (send_ss_info.ssStringLen > 0) { + ciss_err_t ciss_err_code; + ad->is_sat_request = EINA_TRUE; + ad->rel_comp_msg_len = 0; + ad->cmd_id = send_ss_info.commandId; + ciss_mmi_context_t mmi_ctx; + ciss_err_code = _ciss_parse_req_string((char *)send_ss_info.ssString, &mmi_ctx); + + if (ciss_err_code == CISS_ERR_NONE) { + ciss_err_code = _ciss_send_tapi_request(&mmi_ctx); + ret = 0; + } else { + TelSatAppsRetInfo_t app_ret_info; + app_ret_info.commandId = ad->cmd_id; + app_ret_info.commandType = TAPI_SAT_CMD_TYPE_SEND_SS; + + app_ret_info.appsRet.sendSs.resp = TAPI_SAT_R_NETWORK_UNABLE_TO_PROCESS_COMMAND; + app_ret_info.appsRet.sendSs.ssString.stringLen = 0; + ret = tel_send_sat_app_exec_result(&app_ret_info); + elm_exit(); + } + } + } + DBG("Leave"); + return ret; +} + +int _ciss_on_tapi_sat_ussd_event(const TelTapiEvent_t *event, void *data) +{ + DBG("Enter"); + retv_if(event == NULL, -1); + retv_if(data == NULL, -1); + + int ret = -1; + struct appdata *ad = (struct appdata *)data; + + DBG("event type=0x%x status=0x%x pDataLen=%d is_sat=%d", event->EventType, event->Status, event->pDataLen, ad->is_sat_request); + + if (ad->popup) { + evas_object_del(ad->popup); + ad->popup = NULL; + } + + TelSatSendUssdIndUssdData_t send_ussd_info; + if (event->pDataLen > 0) { + memcpy(&send_ussd_info, event->pData, sizeof(TelSatSendUssdIndUssdData_t)); + + if (send_ussd_info.ussdStringLen > 0) { + int req_id; + ad->is_sat_request = EINA_TRUE; + ad->cmd_id = send_ussd_info.commandId; + TelSsUssdMsgInfo_t ussd_info; + ussd_info.UssdStringLength = send_ussd_info.ussdStringLen; + if (ussd_info.UssdStringLength >0) + memcpy(&ussd_info.szUssdString, send_ussd_info.ussdString, ussd_info.UssdStringLength); + ret = tel_send_ss_ussd_request(&ussd_info, &req_id); + } + } + DBG("Leave, return=%d", ret); + return ret; +} + +int _ciss_on_tapi_ss_rel_complete_noti(const TelTapiEvent_t *event, void *data) +{ + DBG("Enter"); + retv_if(event == NULL, -1); + retv_if(data == NULL, -1); + + struct appdata *ad = (struct appdata *)data; + TelSsRelCompMsgInfo_t rel_comp_info; + + DBG("event type=0x%x status=0x%x pDataLen=%d is_sat=%d",event->EventType, event->Status, event->pDataLen, ad->is_sat_request); + ad->rel_comp_msg_len = 0; + + if (ad->is_sat_request == EINA_TRUE) { + if (event->pDataLen > 0) { + memcpy(&rel_comp_info, event->pData, event->pDataLen); + if (rel_comp_info.RelCompMsgLen > 0) { + memcpy(ad->rel_comp_msg, rel_comp_info.szRelCompMsg, rel_comp_info.RelCompMsgLen); + ad->rel_comp_msg_len = rel_comp_info.RelCompMsgLen; + } + } + } + return 0; +} + +int _ciss_on_tapi_ss_event(const TelTapiEvent_t *event, void *data) +{ + DBG("Enter"); + retv_if(event == NULL, -1); + retv_if(data == NULL, -1); + + struct appdata *ad = (struct appdata *)data; + TelSsInfo_t ss_info; + int ret = -1; + + DBG("event type=0x%x status=0x%x pDataLen=%d is_sat=%d", event->EventType, event->Status, event->pDataLen, ad->is_sat_request); + + if (ad->popup) { + evas_object_del(ad->popup); + ad->popup = NULL; + } + + if (ad->is_sat_request == EINA_TRUE) { + TelSatAppsRetInfo_t app_ret_info; + app_ret_info.commandId = ad->cmd_id; + app_ret_info.commandType = TAPI_SAT_CMD_TYPE_SEND_SS; + + if (event->Status == TAPI_SS_SUCCESS) { + app_ret_info.appsRet.sendSs.resp = TAPI_SAT_R_SUCCESS; + + if (ad->rel_comp_msg_len >0) { + memcpy(app_ret_info.appsRet.sendSs.ssString.string, ad->rel_comp_msg, ad->rel_comp_msg_len); + app_ret_info.appsRet.sendSs.ssString.stringLen = ad->rel_comp_msg_len; + } else + app_ret_info.appsRet.sendSs.ssString.stringLen = 0; + } else { + app_ret_info.appsRet.sendSs.resp = TAPI_SAT_R_SS_RETURN_ERROR; + app_ret_info.appsRet.sendSs.ssCause = event->Status; + } + ret = tel_send_sat_app_exec_result(&app_ret_info); + + elm_exit(); + } else { + /* create window */ + Evas_Object *content; + + DBG("win=0x%p main=0x%p",ad->win_main, ad->layout_main); + + if (ad->win_main == NULL) { + Evas_Object *win; + win = _ciss_create_win(PACKAGE); + ad->win_main = win; + retv_if(ad->win_main == NULL, -1); + ad->end_key_event_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _ciss_on_end_key_down, NULL); + evas_object_show(win); + } + + DBG("win=0x%p main=0x%p", ad->win_main, ad->layout_main); + + if (event->Status == TAPI_SS_SUCCESS) { + if (ad->bg == NULL) { + ad->bg = _ciss_create_bg(ad->win_main); + retv_if(ad->bg == NULL, -1); + } + + if (ad->layout_main == NULL) { + ad->layout_main = _ciss_create_layout_main(ad->win_main); + retv_if(ad->layout_main== NULL, -1); + } + DBG("win=0x%p main=0x%p", ad->win_main, ad->layout_main); + + if (event->pDataLen > 0) { + memcpy(&ss_info, event->pData, sizeof(TelSsInfo_t)); + if (event->EventType == TAPI_EVENT_SS_CLI_QUERYSTATUS_CNF && + ss_info.SsType == TAPI_SS_TYPE_BARRING) { + ss_info.SsType = TAPI_SS_TYPE_IDENTIFICATION; + } + content = (Evas_Object *)_ciss_create_ss_resp_view(ad->layout_main, &ss_info, ad); + } else { + content = (Evas_Object *)_ciss_create_ss_resp_view(ad->layout_main, NULL, ad); + } + retv_if(content == NULL, -1); + elm_object_part_content_set(ad->layout_main, "elm.swallow.content", content); + } else { + ciss_err_t ciss_err; + _ciss_get_error_from_tapi_error(&ciss_err, event->Status); + _ciss_create_error_popup(ad->win_main, ciss_err, 2.0, ad); + } + + ret = 0; + } + + DBG("Leave"); + return ret; +} + +int _ciss_on_tapi_ussd_event(const TelTapiEvent_t *event, void *data) +{ + DBG("Enter"); + retv_if(event == NULL, -1); + retv_if(data == NULL, -1); + + struct appdata *ad = (struct appdata *)data; + TelSsUssdMsgIndInfo_t ussd_info; + int ret = -1; + + if (ad->popup) { + evas_object_del(ad->popup); + ad->popup = NULL; + } + + DBG("event type=0x%x status=0x%x pDataLen=%d is_sat=%d", event->EventType, event->Status, event->pDataLen, ad->is_sat_request); + if (ad->is_sat_request == EINA_TRUE) + { + TelSatAppsRetInfo_t app_ret_info; + app_ret_info.commandId = ad->cmd_id; + app_ret_info.commandType = TAPI_SAT_CMD_TYPE_SEND_USSD; + + if (event->Status == TAPI_SS_SUCCESS) { + if (event->pDataLen > 0) + memcpy(&ussd_info, event->pData, sizeof(TelSsUssdMsgIndInfo_t)); + + app_ret_info.appsRet.sendUssd.resp = TAPI_SAT_R_SUCCESS; + app_ret_info.appsRet.sendUssd.ussdString.stringLen = ussd_info.UssdInfo.UssdStringLength; + if (app_ret_info.appsRet.sendUssd.ussdString.stringLen > 0) + memcpy(app_ret_info.appsRet.sendUssd.ussdString.string, ussd_info.UssdInfo.szUssdString, ussd_info.UssdInfo.UssdStringLength); + } else { + app_ret_info.appsRet.sendUssd.resp = TAPI_SAT_R_USSD_RETURN_ERROR; + app_ret_info.appsRet.sendUssd.ssCause = event->Status; + } + + tel_send_sat_app_exec_result(&app_ret_info); + ret = 0; + elm_exit(); + } else { + /* create window */ + Evas_Object *content; + + if (ad->win_main == NULL) { + Evas_Object *win; + win = _ciss_create_win(PACKAGE); + retv_if(win == NULL, -1); + ad->win_main = win; + evas_object_show(win); + ad->end_key_event_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _ciss_on_end_key_down, NULL); + } + + if (event->Status == TAPI_SS_SUCCESS) { + if (event->pDataLen > 0) + memcpy(&ussd_info, event->pData, sizeof(TelSsUssdMsgIndInfo_t)); + else { + DBG("Telephony USSD data is empty"); + return -1; + } + + if (ad->bg == NULL) { + ad->bg = _ciss_create_bg(ad->win_main); + retv_if(ad->bg == NULL, -1); + } + + if (ad->layout_main == NULL) { + Evas_Object *lo; + lo = _ciss_create_layout_main(ad->win_main); + retv_if(lo == NULL, -1); + ad->layout_main = lo; + } + content = (Evas_Object *)_ciss_create_ussd_view(ad->layout_main, &ussd_info, ad); + retv_if(content == NULL, -1); + elm_object_part_content_set(ad->layout_main, "elm.swallow.content", content); + } else { + ciss_err_t ciss_err; + _ciss_get_error_from_tapi_error(&ciss_err, event->Status); + _ciss_create_error_popup(ad->win_main, ciss_err, 2.0, ad); + } + ret = 0; + } + + DBG("Leave"); + return ret; +} + diff --git a/src/ciss-ussd.c b/src/ciss-ussd.c new file mode 100755 index 0000000..bcbb39f --- /dev/null +++ b/src/ciss-ussd.c @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * This file is part of + * Written by , + * + * PROPRIETARY/CONFIDENTIAL + * + * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). + * You shall not disclose such Confidential Information and shall use it only in accordance + * with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. + * SAMSUNG make no representations or warranties about the suitability of the software, + * either express or implied, including but not limited to the implied warranties of merchantability, + * fitness for a particular purpose, or non-infringement. + * SAMSUNG shall not be liable for any damages suffered by licensee as a result of using, + * modifying or distributing this software or its derivatives. + * + */ + +#include "ciss-common.h" +#include "ciss-ussd.h" +#include "ciss-debug.h" +#include "ciss-string.h" +#include "ciss-respnd.h" +#include "ciss-widget.h" +#include + +static int __ciss_get_ussd_string(char *ss_result_string /*out */, TelSsUssdMsgIndInfo_t *ussd_info /*in */) +{ + DBG("Enter"); + + char *ptr; + char *temp_ptr; + + if (ussd_info->UssdInfo.UssdStringLength > 0) { + ptr = strtok_r(ussd_info->UssdInfo.szUssdString, "\n", &temp_ptr); + snprintf(ss_result_string, CISS_MMI_MAX_USSD_RESP_STRING, "%s", ptr); + + while ((ptr = strtok_r(NULL, "\n", &temp_ptr))) { + char temp_str[CISS_MMI_MAX_USSD_RESP_STRING]; + strncpy(temp_str, ss_result_string, CISS_MMI_MAX_USSD_RESP_STRING - 1); + snprintf(ss_result_string, CISS_MMI_MAX_USSD_RESP_STRING, "%s
%s", temp_str, ptr); + } + } else + strncpy(ss_result_string, "", CISS_MMI_MAX_USSD_RESP_STRING - 1); + + return 0; +} + +void _ciss_ussd_quit_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG("Enter"); + + struct appdata *ad = (struct appdata *)data; + int request_id = ad->request_id; + memset(ad->c_item, 0, sizeof(ad->c_item)); + + if (ad->ussd_action_require) { + DBG("callig ussd_cancel \n"); + tel_send_ss_ussd_cancel(&request_id); + } + + elm_exit(); +} + +static void __ciss_respnd_cb(void *data, Evas_Object *obj, void *event_info) +{ + + DBG("Enter"); + + struct appdata *ad = (struct appdata *)data; + _ciss_create_respond_view(ad); +} + +Evas_Object *_ciss_create_ussd_view(Evas_Object *parent, TelSsUssdMsgIndInfo_t *ussd_info, void *data) +{ + DBG("Enter"); + retv_if(parent == NULL, NULL); + retv_if(ussd_info == NULL, NULL); + retv_if(data == NULL, NULL); + + struct appdata *ad = (struct appdata *)data; + char ussd_string[CISS_MMI_MAX_USSD_RESP_STRING] = { }; + __ciss_get_ussd_string(ussd_string, ussd_info); + DBG("[CISS-MMI] ussd_string = %s", ussd_string); + + Evas_Object *nf; + Evas_Object *l_button; + Evas_Object *cbar = NULL; + Elm_Object_Item *navi_it = NULL; + + nf = elm_naviframe_add(parent); + retv_if(nf == NULL, NULL); + ad->nf = nf; + ad->ussd_action_require = 0; + + Evas_Object *genlist = + _ciss_create_result_genlist(ussd_string, CISS_MMI_MAX_USSD_RESP_STRING, nf, ad); + retv_if(NULL == genlist, NULL); + + l_button = elm_button_add(nf); + evas_object_smart_callback_add(l_button, "clicked", + _ciss_ussd_quit_cb, ad); + + navi_it = elm_naviframe_item_push(nf, CISS_STR_INFORMATION, + l_button, NULL, genlist, "1line"); + elm_object_style_set(l_button, "naviframe/back_btn/default"); + + if (ussd_info->IndType == TAPI_USSD_IND_ACTION_REQUIRE) { + DBG("require action"); + cbar = _ciss_create_navi_control_bar(nf, + CISS_STR_REPLY, __ciss_respnd_cb, + NULL, NULL, + ad, navi_it, + ad->c_item); + retv_if(cbar == NULL, NULL); + ad->ussd_action_require = 1; + } + + evas_object_show(nf); + DBG("Leave"); + + return nf; +} + diff --git a/src/ciss-util.c b/src/ciss-util.c new file mode 100755 index 0000000..2e62b9b --- /dev/null +++ b/src/ciss-util.c @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * This file is part of + * Written by , + * + * PROPRIETARY/CONFIDENTIAL + * + * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). + * You shall not disclose such Confidential Information and shall use it only in accordance + * with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. + * SAMSUNG make no representations or warranties about the suitability of the software, + * either express or implied, including but not limited to the implied warranties of merchantability, + * fitness for a particular purpose, or non-infringement. + * SAMSUNG shall not be liable for any damages suffered by licensee as a result of using, + * modifying or distributing this software or its derivatives. + * + */ + +#include "ciss-util.h" +#include "ciss-debug.h" +#include + +char *_ciss_strcpy(char *pBuffer, int nBufCount, const char *pszString) +{ + if ((nBufCount - 1) >= (int)strlen(pszString)) + strcpy(pBuffer, pszString); + else { + DBG("\n [CISS-ENGINE] _ciss_strcpy:short of buffer..BufCount=%d, strlen=%d, str=%s\n", nBufCount, strlen(pszString), pszString); + strncpy(pBuffer, pszString, (nBufCount - 1)); + pBuffer[nBufCount - 1] = '\0'; + } + return pBuffer; +} + +void _ciss_util_swap(char *str1, char *str2) +{ + unsigned char tmp = 0; + + tmp = *str1; + *str1 = *str2; + *str2 = tmp; +} + diff --git a/src/ciss-widget.c b/src/ciss-widget.c new file mode 100755 index 0000000..ae49157 --- /dev/null +++ b/src/ciss-widget.c @@ -0,0 +1,361 @@ +/* + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * This file is part of + * Written by , + * + * PROPRIETARY/CONFIDENTIAL + * + * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). + * You shall not disclose such Confidential Information and shall use it only in accordance + * with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. + * SAMSUNG make no representations or warranties about the suitability of the software, + * either express or implied, including but not limited to the implied warranties of merchantability, + * fitness for a particular purpose, or non-infringement. + * SAMSUNG shall not be liable for any damages suffered by licensee as a result of using, + * modifying or distributing this software or its derivatives. + * + */ + +#include "ciss-common.h" +#include "ciss-widget.h" +#include "ciss-util.h" +#include +#include + +#define CISS_BUF_LEN 128 +#define CISS_DEF_FSIZE (24) +#define CISS_DEF_FNAME "HelveN_Asia" + +Evas_Object *_ciss_create_popup(Evas_Object *parent, char *msg) +{ + DBG("Enter"); + retv_if(msg == NULL, NULL); + retv_if(strlen(msg) == 0, NULL); + Evas_Object *popup; + popup = elm_popup_add(parent); + elm_object_part_text_set(popup, "title,text", CISS_STR_INFORMATION); + elm_popup_timeout_set(popup, 1.5); + elm_object_text_set(popup, msg); + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + return popup; +} + +static void __ciss_resp_timeout_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG("Enter"); + struct appdata *ad = (struct appdata *)data; + + _ciss_create_error_popup(ad->win_main, CISS_ERR_UNKNOWN, 2.0, ad); +} + +static void __ciss_err_cb(void *data, Evas_Object *obj, void *event_info) +{ + DBG("Enter"); + struct appdata *ad = (struct appdata *)data; + + evas_object_del(obj); + ad->popup = NULL; + elm_exit(); +} + +Evas_Object *_ciss_create_error_popup(Evas_Object *parent, ciss_err_t ciss_error, double t_timeout, void *data) +{ + DBG("Enter"); + Evas_Object *popup; + struct appdata *ad = (struct appdata *)data; + if (ciss_error == CISS_ERR_NONE) + return NULL; + + if (ad->popup) { + evas_object_del(ad->popup); + ad->popup = NULL; + } + + char strmsg[100]; + switch (ciss_error) { + case CISS_ERR_UNKNOWN_SUBSCRIBER: + case CISS_ERR_BEARER_NOT_PROVISIONED: + case CISS_ERR_TELESERVICE_NOT_PROVISIONED: + case CISS_ERR_CALL_BARRED: + case CISS_ERR_ERR_STATUS: + case CISS_ERR_NOT_AVAIL: + case CISS_ERR_SUBSCRIPTION_VIOLATION: + case CISS_ERR_INCOMPATIBILITY: + case CISS_ERR_FACILITY_NOT_SUPPORT: + case CISS_ERR_SYS_FAILURE: + case CISS_ERR_DATA_MISSING: + case CISS_ERR_UNEXPECTED_DATA: + case CISS_ERR_MPTY_PARTICIPANTS_EXCEED: + case CISS_ERR_RESOURCE_NOT_AVAIL: + case CISS_ERR_UNKNOWN: + snprintf(strmsg, 100, "%s", CISS_STR_SERVICE_UNAVAILABLE); + break; + case CISS_ERR_ILLEGAL_SS_OPER: + snprintf(strmsg, 100, "%s", CISS_STR_SERVICE_NOT_AUTHORISED); + break; + case CISS_ERR_PW_REGIST_FAIL: + case CISS_ERR_NEGATIVE_PW_CHECK: + snprintf(strmsg, 100, "%s", CISS_STR_INVALID_PASSWORD); + break; + case CISS_ERR_PW_ATTEMPS_VIOLATION: /**popup = popup; + + return popup; +} + +Evas_Object *_ciss_create_noti_popup(Evas_Object *parent, char *strtitle, char *strmsg, double t_timeout, void *data) +{ + DBG("Enter"); + Evas_Object *popup; + Evas_Object *progressbar; + retv_if(parent == NULL, NULL); + popup = elm_popup_add(parent); + + elm_object_part_text_set(popup, "title,text", strtitle); + + progressbar = elm_progressbar_add(popup); + elm_object_style_set(progressbar, "pending_list"); + elm_progressbar_horizontal_set(progressbar, EINA_TRUE); + evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_progressbar_pulse(progressbar, EINA_TRUE); + evas_object_show(progressbar); + + elm_object_content_set(popup, progressbar); + elm_popup_timeout_set(popup, t_timeout); + evas_object_smart_callback_add(popup, "timeout", __ciss_resp_timeout_cb, data); + + evas_object_show(popup); + + return popup; +} + +static void __ciss_win_del(void *data, Evas_Object *obj, void *event) +{ + elm_exit(); +} + +Eina_Bool _ciss_on_end_key_down(void *data, int type, void *event) +{ + DBG("Enter"); + Ecore_Event_Key *ev = event; + + if (!strcmp(ev->keyname, KEY_END)) + elm_exit(); + + return EXIT_FAILURE; +} + +Evas_Object *_ciss_create_win(const char *name) +{ + DBG("Enter"); + Evas_Object *eo; + int w, h; + eo = elm_win_add(NULL, name, ELM_WIN_BASIC); + retv_if(eo == NULL, NULL); + + if (eo) { + elm_win_alpha_set(eo, EINA_TRUE); + elm_win_title_set(eo, name); + elm_win_borderless_set(eo, EINA_TRUE); + elm_win_raise(eo); + elm_win_indicator_mode_set(eo, ELM_WIN_INDICATOR_SHOW); + evas_object_smart_callback_add(eo, "delete,request", __ciss_win_del, NULL); + ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h); + DBG("win w=%d h=%d", w, h); + evas_object_resize(eo, w, h); + } + + return eo; +} + +Evas_Object *_ciss_create_layout_main(Evas_Object *parent) +{ + DBG("Enter"); + + Evas_Object *layout; + retv_if(parent == NULL, NULL); + + layout = elm_layout_add(parent); + retvm_if(layout == NULL, NULL, "Failed elm_layout_add.\n"); + + elm_layout_theme_set(layout, "layout", "application", "default"); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(parent, layout); + evas_object_show(layout); + + return layout; +} + +Evas_Object *_ciss_create_bg(Evas_Object *parent) +{ + retv_if(parent == NULL, NULL); + + Evas_Object *bg = elm_bg_add(parent); + retvm_if(bg == NULL, NULL, "Failed elm_bg_add.\n"); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(parent, bg); + evas_object_show(bg); + + return bg; +} + +Evas_Object *_ciss_create_navi_control_bar(Evas_Object *parent, + char *label1, Evas_Smart_Cb cb1, + char *label2, Evas_Smart_Cb cb2, + void *data, Elm_Object_Item *navi_it, + Elm_Object_Item ** c_item) +{ + retv_if(NULL == parent, NULL); + Evas_Object *toolbar = elm_toolbar_add(parent); + Elm_Object_Item *item = NULL; + + retv_if(toolbar == NULL, NULL); + retv_if(label1 == NULL, NULL); + + elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND); + + + if (label2) { + item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL); + elm_object_item_disabled_set(item, EINA_TRUE); + c_item[0] = elm_toolbar_item_append(toolbar, + NULL, label1, cb1, data); + item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL); + elm_object_item_disabled_set(item, EINA_TRUE); + c_item[1] = elm_toolbar_item_append(toolbar, + NULL, label2, cb2, data); + } else { + item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL); + elm_object_item_disabled_set(item, EINA_TRUE); + item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL); + elm_object_item_disabled_set(item, EINA_TRUE); + item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL); + elm_object_item_disabled_set(item, EINA_TRUE); + + c_item[0] = elm_toolbar_item_append(toolbar, + NULL, label1, cb1, data); + } + + elm_object_item_part_content_set(navi_it, "controlbar", toolbar); + return toolbar; +} + +Evas_Object *_cst_create_title_btn(Evas_Object *parent, + const char *text, Evas_Smart_Cb func, void *data) +{ + Evas_Object *btn = elm_button_add(parent); + if (!btn) return NULL; + elm_object_style_set(btn, "naviframe/title/default"); + elm_object_text_set(btn, text); + evas_object_smart_callback_add(btn, "clicked", func, data); + return btn; +} + +static void __ciss_trans_finished(void *data, Evas_Object *obj, void *event_info) +{ + ret_if(NULL == obj); + elm_naviframe_prev_btn_auto_pushed_set(obj, EINA_TRUE); + evas_object_smart_callback_del(obj, "transition,finished", __ciss_trans_finished); +} + +void _ciss_remove_naviframe(Evas_Object *nf) +{ + ret_if(NULL == nf); + elm_naviframe_prev_btn_auto_pushed_set(nf, EINA_FALSE); + evas_object_smart_callback_add(nf, "transition,finished", + __ciss_trans_finished, NULL); +} + +static char *__ciss_gl_label_get_result(void *data, Evas_Object *obj, const char *part) +{ + char *label = (char *)data; + + if (label) + return strdup(label); + else + return NULL; +} + +static void __ciss_gl_del_result(void *data, Evas_Object *obj) +{ + char *label = (char *)data; + if(label) + free(label); + + return; +} + +Evas_Object * _ciss_create_result_genlist(const char *result_str, int str_len, Evas_Object *nf, void *data) +{ + Evas_Object *genlist = elm_genlist_add(nf); + retv_if(NULL == genlist, NULL); + retv_if(NULL == data, NULL); + + struct appdata *ad = (struct appdata *)data; + ad->itc_multi_line->item_style = "multiline/1text"; + ad->itc_multi_line->func.text_get = __ciss_gl_label_get_result; + ad->itc_multi_line->func.content_get = NULL; + ad->itc_multi_line->func.state_get = NULL; + ad->itc_multi_line->func.del = __ciss_gl_del_result; + + elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS); + char *label = calloc(str_len, sizeof(char)); + retv_if(label == NULL, NULL); + + strncpy(label, result_str, str_len - 1); + Elm_Object_Item *item = elm_genlist_item_append(genlist, ad->itc_multi_line, + (void *)label, NULL, ELM_GENLIST_ITEM_NONE, + NULL, NULL); + elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); + + return genlist; +} + +void _ciss_geinlist_item_class_new(void *data) +{ + ret_if(data == NULL); + + struct appdata *ad = (struct appdata *)data; + ad->itc_ime = elm_genlist_item_class_new(); + ad->itc_multi_line = elm_genlist_item_class_new(); +} + +void _ciss_geinlist_item_class_free(void *data) +{ + ret_if(data == NULL); + + struct appdata *ad = (struct appdata *)data; + if (ad->itc_ime) + elm_genlist_item_class_free(ad->itc_ime); + if (ad->itc_multi_line) + elm_genlist_item_class_free(ad->itc_multi_line); +} -- 2.7.4