Tizen 2.0 beta RSA release code.
authorKyoungyoup Park <gynaru.park@samsung.com>
Fri, 24 Aug 2012 15:51:57 +0000 (00:51 +0900)
committerKyoungyoup Park <gynaru.park@samsung.com>
Fri, 24 Aug 2012 15:51:57 +0000 (00:51 +0900)
Change-Id: Iceb07ee98b0ff2baef0ef2debde8d7e525171d11

25 files changed:
include/common/TelErr.h
include/s_call.h
include/s_common.h
include/s_dispatch.h
include/s_gps.h
include/s_modem.h
include/s_network.h
include/s_phonebook.h
include/s_ps.h
include/s_sap.h
include/s_sat.h
include/s_sim.h
include/s_sms.h
include/s_ss.h
packaging/tel-plugin-imc.spec
src/desc.c
src/s_call.c
src/s_common.c
src/s_modem.c
src/s_network.c
src/s_ps.c
src/s_sat.c
src/s_sim.c
src/s_sms.c
src/s_ss.c

index d839a99..d27f39b 100755 (executable)
-/*
- * tel-plugin-imc
- *
- * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Hayoon Ko <hayoon.ko@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-/**
- * @open
- * @ingroup                    TelephonyAPI
- * @addtogroup         COMMON_TAPI     COMMON
- * @{
- *     These error codes are used by Applications.
- */
-
-
-#ifndef _TEL_ERR_H_
-#define _TEL_ERR_H_
-/*==================================================================================================
-                                         INCLUDE FILES
-==================================================================================================*/
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/*==================================================================================================
-                                           CONSTANTS
-==================================================================================================*/
-
-
-/*==================================================================================================
-                                            MACROS
-==================================================================================================*/
-
-
-/*==================================================================================================
-                                             ENUMS
-==================================================================================================*/
-
-/************************************************************
-**    Errors defined in  "+CME ERROR" ,
-**    - see 3GPP TS 27.007
-**    - ranges are 0x00 ~ 0x7FFF
-************************************************************/
-/**
-       Error codes sent by the modem in response to the above operations.
-*/
-typedef enum
-{
-  /* GENERAL ERRORS */
-  TAPI_OP_GEN_ERR_PHONE_FAILURE        = 0,                                            /* 0 */
-  TAPI_OP_GEN_ERR_NO_CONNECTION_TO_PHONE,                                      /* 1 */
-  TAPI_OP_GEN_ERR_PHONE_ADAPTOR_LINK_RESERVED,                 /* 2 */
-  TAPI_OP_GEN_ERR_OPER_NOT_ALLOWED,                                            /* 3 */
-  TAPI_OP_GEN_ERR_OPER_NOT_SUPPORTED,                                          /* 4 */
-  TAPI_OP_GEN_ERR_PH_SIM_PIN_REQU,                                             /* 5 */
-  TAPI_OP_GEN_ERR_PH_FSIM_PIN_REQU,                                            /* 6 */
-  TAPI_OP_GEN_ERR_PH_FSIM_PUK_REQU,                                            /* 7 */
-  TAPI_OP_GEN_ERR_SIM_NOT_INSERTED     =10,                                    /* 10 */
-  TAPI_OP_GEN_ERR_SIM_PIN_REQU,                                                        /* 11 */
-  TAPI_OP_GEN_ERR_SIM_PUK_REQU,                                                        /* 12 */
-  TAPI_OP_GEN_ERR_SIM_FAILURE,                                                 /* 13 */
-  TAPI_OP_GEN_ERR_SIM_BUSY,                                                            /* 14 */
-  TAPI_OP_GEN_ERR_SIM_WRONG,                                                           /* 15 */
-  TAPI_OP_GEN_ERR_INCORRECT_PW,                                                        /* 16 */
-  TAPI_OP_GEN_ERR_SIM_PIN2_REQU,                                                       /* 17 */
-  TAPI_OP_GEN_ERR_SIM_PUK2_REQU,                                                       /* 18 */
-  TAPI_OP_GEN_ERR_MEM_FULL     = 20,                                                   /* 20 */
-  TAPI_OP_GEN_ERR_INVALID_INDEX,                                                       /* 21 */
-  TAPI_OP_GEN_ERR_NOT_FOUND,                                                           /* 22 */
-  TAPI_OP_GEN_ERR_MEM_FAILURE,                                                 /* 23 */
-  TAPI_OP_GEN_ERR_TEXT_STR_TOO_LONG,                                           /* 24 */
-  TAPI_OP_GEN_ERR_INVALID_CHARACTERS_IN_TEXT_STR,                      /* 25 */
-  TAPI_OP_GEN_ERR_DIAL_STR_TOO_LONG,                                           /* 26 */
-  TAPI_OP_GEN_ERR_INVALID_CHARACTERS_IN_DIAL_STR,                      /* 27 */
-  TAPI_OP_GEN_ERR_NO_NET_SVC   = 30,                                           /* 30 */
-  TAPI_OP_GEN_ERR_NET_TIMEOUT,                                                 /* 31 */
-  TAPI_OP_GEN_ERR_NET_NOT_ALLOWED_EMERGENCY_CALLS_ONLY,        /* 32 */
-  TAPI_OP_GEN_ERR_NET_PERS_PIN_REQU    = 40,                                   /* 40 */
-  TAPI_OP_GEN_ERR_NET_PERS_PUK_REQU,                                           /* 41 */
-  TAPI_OP_GEN_ERR_NET_SUBSET_PERS_PIN_REQU,                            /* 42 */
-  TAPI_OP_GEN_ERR_NET_SUBSET_PERS_PUK_REQU,                            /* 43 */
-  TAPI_OP_GEN_ERR_SVC_PROVIDER_PERS_PIN_REQU,                          /* 44 */
-  TAPI_OP_GEN_ERR_SVC_PROVIDER_PERS_PUK_REQU,                          /* 45 */
-  TAPI_OP_GEN_ERR_CORPORATE_PERS_PIN_REQU,                             /* 46 */
-  TAPI_OP_GEN_ERR_CORPORATE_PERS_PUK_REQU,                             /* 47 */
-  TAPI_OP_GEN_ERR_HIDDEN_KEY_REQU,                                             /* 48 */
-  TAPI_OP_GEN_ERR_UNKNOWN      = 100,                                          /* 100 */
-
-  /* Errors related to a failure to perform an Attach */
-  TAPI_OP_GEN_ERR_ILLEGAL_MS   = 103,                                  /* 103 */
-  TAPI_OP_GEN_ERR_ILLEGAL_ME   = 106,                                  /* 106 */
-  TAPI_OP_GEN_ERR_GPRS_SVC_NOT_ALLOWED,                                        /* 107 */
-  TAPI_OP_GEN_ERR_PLMN_NOT_ALLOWED     = 111,                          /* 111 */
-  TAPI_OP_GEN_ERR_LOCATION_AREA_NOT_ALLOWED,                           /* 112 */
-  TAPI_OP_GEN_ERR_ROAMING_NOT_ALLOWED_IN_THIS_LOCATION_AREA,/* 113 */
-
-  /* Errors related to a failure to Activate a Context */
-  TAPI_OP_GEN_ERR_SVC_OPT_NOT_SUPPORTED        = 132,                  /* 132 */
-  TAPI_OP_GEN_ERR_REQ_SVC_OPT_NOT_SUBSCRIBED,                          /* 133 */
-  TAPI_OP_GEN_ERR_SVC_OPT_TEMPORARILY_OUT_OF_ORDER,            /* 134 */
-  TAPI_OP_GEN_ERR_UNSPECIFIED_GPRS_ERR = 148,                  /* 148 */
-  TAPI_OP_GEN_ERR_PDP_AUTHENTICATION_FAILURE,                          /* 149 */
-  TAPI_OP_GEN_ERR_INVALID_MOBILE_CLASS,                                        /* 150 */
-
-  /* VBS / VGCS and eMLPP -related errors */
-  TAPI_OP_GEN_ERR_VBS_VGCS_NOT_SUPPORTED_BY_THE_NET    = 151,  /* 151 */
-  TAPI_OP_GEN_ERR_NO_SVC_SUBSCRIPTION_ON_SIM,                          /* 152 */
-  TAPI_OP_GEN_ERR_NO_SUBSCRIPTION_FOR_GROUP_ID,                        /* 153 */
-  TAPI_OP_GEN_ERR_GROUP_ID_NOT_ACTIVATED_ON_SIM,                       /* 154 */
-  TAPI_OP_GEN_ERR_NO_MATCHING_NOTI     = 155,                          /* 155 */
-  TAPI_OP_GEN_ERR_VBS_VGCS_CALL_ALREADY_PRESENT,                       /* 156 */
-  TAPI_OP_GEN_ERR_CONGESTION,                                                          /* 157 */
-  TAPI_OP_GEN_ERR_NET_FAILURE,                                                 /* 158 */
-  TAPI_OP_GEN_ERR_UPLINK_BUSY,                                                 /* 159 */
-  TAPI_OP_GEN_ERR_NO_ACCESS_RIGHTS_FOR_SIM_FILE        = 160,  /* 160 */
-  TAPI_OP_GEN_ERR_NO_SUBSCRIPTION_FOR_PRIORITY,                        /* 161 */
-  TAPI_OP_GEN_ERR_OPER_NOT_APPLICABLE_OR_NOT_POSSIBLE, /* 162 */
-
-
-  /************************************************************
-  **                           SAMSUNG ADDED ERRORS
-  ************************************************************/
-  TAPI_OP_GEN_ERR_NONE = 0x8000,                               /* 0x8000 : No Errors */
-
-  /* General Common Errors : 0x8000 - 0x80FF */
-  TAPI_OP_GEN_ERR_INVALID_FORMAT,                                                      /* 0x8001 : Invalid Parameter or Format */
-  TAPI_OP_GEN_ERR_PHONE_OFFLINE,                                                       /* 0x8002 : */
-  TAPI_OP_GEN_ERR_CMD_NOT_ALLOWED,                                             /* 0x8003 : */
-  TAPI_OP_GEN_ERR_PHONE_IS_INUSE,                                                      /* 0x8004 : */
-  TAPI_OP_GEN_ERR_INVALID_STATE        = 0x8005,                                       /* 0x8005 : */
-
-  TAPI_OP_GEN_ERR_NO_BUFFER,                                                           /* 0x8006 :  No internal free buffers */
-  TAPI_OP_GEN_ERR_OPER_REJ,                                                            /* 0x8007 :  Operation Rejected */
-  TAPI_OP_GEN_ERR_INSUFFICIENT_RESOURCE,                                       /* 0x8008 : insufficient resource */
-  TAPI_OP_GEN_ERR_NET_NOT_RESPOND,                                             /* 0x8009 : Network not responding */
-  TAPI_OP_GEN_ERR_SIM_PIN_ENABLE_REQ   = 0x800A,                       /* 0x800A : SIM Pin Enable Required */
-  TAPI_OP_GEN_ERR_SIM_PERM_BLOCKED,                                    /* 0x800B : SIM Permanent Blocked */
-  TAPI_OP_GEN_ERR_SIM_PHONEBOOK_RESTRICTED,                            /*0x800C: SIM Phonebook Restricted*/
-  TAPI_OP_GEM_ERR_FIXED_DIALING_NUMBER_ONLY,                           /*0x800D: Restricted By FDN Mode */
-
-  /* Reserved : 0x800E ~ 0x80FF */
-  TAPI_OP_GEN_ERR_800E_RESERVED_START  = 0x800E,                       /* 0x800E */
-
-  TAPI_OP_GEN_ERR_80FF_RESERVED_END    = 0x80ff,                               /* 0x80FF */
-
-  /* the other errors */
-  TAPI_OP_GEN_ERR_OTHERS                               = 0xFFFE,                                 /* 0xFFFE */
-
-  TAPI_OP_GEN_ERR_MAX                                  = 0xFFFF
-
-}tapi_phone_err_t;
-
-
-/*==================================================================================================
-                                 STRUCTURES AND OTHER TYPEDEFS
-==================================================================================================*/
-
-
-/*==================================================================================================
-                                     FUNCTION PROTOTYPES
-==================================================================================================*/
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // _TEL_ERR_H_
-
-/**
-* @}
-*/
-
+/*\r
+ * tel-plugin-imc\r
+ *\r
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: Hayoon Ko <hayoon.ko@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+\r
+/**\r
+ * @open\r
+ * @ingroup                    TelephonyAPI\r
+ * @addtogroup         COMMON_TAPI     COMMON\r
+ * @{\r
+ *     These error codes are used by Applications.\r
+ */\r
+\r
+\r
+#ifndef _TEL_ERR_H_\r
+#define _TEL_ERR_H_\r
+/*==================================================================================================\r
+                                         INCLUDE FILES\r
+==================================================================================================*/\r
+\r
+#ifdef __cplusplus\r
+extern "C"\r
+{\r
+#endif\r
+\r
+/*==================================================================================================\r
+                                           CONSTANTS\r
+==================================================================================================*/\r
+\r
+\r
+/*==================================================================================================\r
+                                            MACROS\r
+==================================================================================================*/\r
+\r
+\r
+/*==================================================================================================\r
+                                             ENUMS\r
+==================================================================================================*/\r
+\r
+/************************************************************\r
+**    Errors defined in  "+CME ERROR" ,\r
+**    - see 3GPP TS 27.007\r
+**    - ranges are 0x00 ~ 0x7FFF\r
+************************************************************/\r
+/**\r
+       Error codes sent by the modem in response to the above operations.\r
+*/\r
+typedef enum\r
+{\r
+  /* GENERAL ERRORS */\r
+  TAPI_OP_GEN_ERR_PHONE_FAILURE        = 0,                                            /* 0 */\r
+  TAPI_OP_GEN_ERR_NO_CONNECTION_TO_PHONE,                                      /* 1 */\r
+  TAPI_OP_GEN_ERR_PHONE_ADAPTOR_LINK_RESERVED,                 /* 2 */\r
+  TAPI_OP_GEN_ERR_OPER_NOT_ALLOWED,                                            /* 3 */\r
+  TAPI_OP_GEN_ERR_OPER_NOT_SUPPORTED,                                          /* 4 */\r
+  TAPI_OP_GEN_ERR_PH_SIM_PIN_REQU,                                             /* 5 */\r
+  TAPI_OP_GEN_ERR_PH_FSIM_PIN_REQU,                                            /* 6 */\r
+  TAPI_OP_GEN_ERR_PH_FSIM_PUK_REQU,                                            /* 7 */\r
+  TAPI_OP_GEN_ERR_SIM_NOT_INSERTED     =10,                                    /* 10 */\r
+  TAPI_OP_GEN_ERR_SIM_PIN_REQU,                                                        /* 11 */\r
+  TAPI_OP_GEN_ERR_SIM_PUK_REQU,                                                        /* 12 */\r
+  TAPI_OP_GEN_ERR_SIM_FAILURE,                                                 /* 13 */\r
+  TAPI_OP_GEN_ERR_SIM_BUSY,                                                            /* 14 */\r
+  TAPI_OP_GEN_ERR_SIM_WRONG,                                                           /* 15 */\r
+  TAPI_OP_GEN_ERR_INCORRECT_PW,                                                        /* 16 */\r
+  TAPI_OP_GEN_ERR_SIM_PIN2_REQU,                                                       /* 17 */\r
+  TAPI_OP_GEN_ERR_SIM_PUK2_REQU,                                                       /* 18 */\r
+  TAPI_OP_GEN_ERR_MEM_FULL     = 20,                                                   /* 20 */\r
+  TAPI_OP_GEN_ERR_INVALID_INDEX,                                                       /* 21 */\r
+  TAPI_OP_GEN_ERR_NOT_FOUND,                                                           /* 22 */\r
+  TAPI_OP_GEN_ERR_MEM_FAILURE,                                                 /* 23 */\r
+  TAPI_OP_GEN_ERR_TEXT_STR_TOO_LONG,                                           /* 24 */\r
+  TAPI_OP_GEN_ERR_INVALID_CHARACTERS_IN_TEXT_STR,                      /* 25 */\r
+  TAPI_OP_GEN_ERR_DIAL_STR_TOO_LONG,                                           /* 26 */\r
+  TAPI_OP_GEN_ERR_INVALID_CHARACTERS_IN_DIAL_STR,                      /* 27 */\r
+  TAPI_OP_GEN_ERR_NO_NET_SVC   = 30,                                           /* 30 */\r
+  TAPI_OP_GEN_ERR_NET_TIMEOUT,                                                 /* 31 */\r
+  TAPI_OP_GEN_ERR_NET_NOT_ALLOWED_EMERGENCY_CALLS_ONLY,        /* 32 */\r
+  TAPI_OP_GEN_ERR_NET_PERS_PIN_REQU    = 40,                                   /* 40 */\r
+  TAPI_OP_GEN_ERR_NET_PERS_PUK_REQU,                                           /* 41 */\r
+  TAPI_OP_GEN_ERR_NET_SUBSET_PERS_PIN_REQU,                            /* 42 */\r
+  TAPI_OP_GEN_ERR_NET_SUBSET_PERS_PUK_REQU,                            /* 43 */\r
+  TAPI_OP_GEN_ERR_SVC_PROVIDER_PERS_PIN_REQU,                          /* 44 */\r
+  TAPI_OP_GEN_ERR_SVC_PROVIDER_PERS_PUK_REQU,                          /* 45 */\r
+  TAPI_OP_GEN_ERR_CORPORATE_PERS_PIN_REQU,                             /* 46 */\r
+  TAPI_OP_GEN_ERR_CORPORATE_PERS_PUK_REQU,                             /* 47 */\r
+  TAPI_OP_GEN_ERR_HIDDEN_KEY_REQU,                                             /* 48 */\r
+  TAPI_OP_GEN_ERR_UNKNOWN      = 100,                                          /* 100 */\r
+\r
+  /* Errors related to a failure to perform an Attach */\r
+  TAPI_OP_GEN_ERR_ILLEGAL_MS   = 103,                                  /* 103 */\r
+  TAPI_OP_GEN_ERR_ILLEGAL_ME   = 106,                                  /* 106 */\r
+  TAPI_OP_GEN_ERR_GPRS_SVC_NOT_ALLOWED,                                        /* 107 */\r
+  TAPI_OP_GEN_ERR_PLMN_NOT_ALLOWED     = 111,                          /* 111 */\r
+  TAPI_OP_GEN_ERR_LOCATION_AREA_NOT_ALLOWED,                           /* 112 */\r
+  TAPI_OP_GEN_ERR_ROAMING_NOT_ALLOWED_IN_THIS_LOCATION_AREA,/* 113 */\r
+\r
+  /* Errors related to a failure to Activate a Context */\r
+  TAPI_OP_GEN_ERR_SVC_OPT_NOT_SUPPORTED        = 132,                  /* 132 */\r
+  TAPI_OP_GEN_ERR_REQ_SVC_OPT_NOT_SUBSCRIBED,                          /* 133 */\r
+  TAPI_OP_GEN_ERR_SVC_OPT_TEMPORARILY_OUT_OF_ORDER,            /* 134 */\r
+  TAPI_OP_GEN_ERR_UNSPECIFIED_GPRS_ERR = 148,                  /* 148 */\r
+  TAPI_OP_GEN_ERR_PDP_AUTHENTICATION_FAILURE,                          /* 149 */\r
+  TAPI_OP_GEN_ERR_INVALID_MOBILE_CLASS,                                        /* 150 */\r
+\r
+  /* VBS / VGCS and eMLPP -related errors */\r
+  TAPI_OP_GEN_ERR_VBS_VGCS_NOT_SUPPORTED_BY_THE_NET    = 151,  /* 151 */\r
+  TAPI_OP_GEN_ERR_NO_SVC_SUBSCRIPTION_ON_SIM,                          /* 152 */\r
+  TAPI_OP_GEN_ERR_NO_SUBSCRIPTION_FOR_GROUP_ID,                        /* 153 */\r
+  TAPI_OP_GEN_ERR_GROUP_ID_NOT_ACTIVATED_ON_SIM,                       /* 154 */\r
+  TAPI_OP_GEN_ERR_NO_MATCHING_NOTI     = 155,                          /* 155 */\r
+  TAPI_OP_GEN_ERR_VBS_VGCS_CALL_ALREADY_PRESENT,                       /* 156 */\r
+  TAPI_OP_GEN_ERR_CONGESTION,                                                          /* 157 */\r
+  TAPI_OP_GEN_ERR_NET_FAILURE,                                                 /* 158 */\r
+  TAPI_OP_GEN_ERR_UPLINK_BUSY,                                                 /* 159 */\r
+  TAPI_OP_GEN_ERR_NO_ACCESS_RIGHTS_FOR_SIM_FILE        = 160,  /* 160 */\r
+  TAPI_OP_GEN_ERR_NO_SUBSCRIPTION_FOR_PRIORITY,                        /* 161 */\r
+  TAPI_OP_GEN_ERR_OPER_NOT_APPLICABLE_OR_NOT_POSSIBLE, /* 162 */\r
+\r
+\r
+  /************************************************************\r
+  **                           SAMSUNG ADDED ERRORS\r
+  ************************************************************/\r
+  TAPI_OP_GEN_ERR_NONE = 0x8000,                               /* 0x8000 : No Errors */\r
+\r
+  /* General Common Errors : 0x8000 - 0x80FF */\r
+  TAPI_OP_GEN_ERR_INVALID_FORMAT,                                                      /* 0x8001 : Invalid Parameter or Format */\r
+  TAPI_OP_GEN_ERR_PHONE_OFFLINE,                                                       /* 0x8002 : */\r
+  TAPI_OP_GEN_ERR_CMD_NOT_ALLOWED,                                             /* 0x8003 : */\r
+  TAPI_OP_GEN_ERR_PHONE_IS_INUSE,                                                      /* 0x8004 : */\r
+  TAPI_OP_GEN_ERR_INVALID_STATE        = 0x8005,                                       /* 0x8005 : */\r
+\r
+  TAPI_OP_GEN_ERR_NO_BUFFER,                                                           /* 0x8006 :  No internal free buffers */\r
+  TAPI_OP_GEN_ERR_OPER_REJ,                                                            /* 0x8007 :  Operation Rejected */\r
+  TAPI_OP_GEN_ERR_INSUFFICIENT_RESOURCE,                                       /* 0x8008 : insufficient resource */\r
+  TAPI_OP_GEN_ERR_NET_NOT_RESPOND,                                             /* 0x8009 : Network not responding */\r
+  TAPI_OP_GEN_ERR_SIM_PIN_ENABLE_REQ   = 0x800A,                       /* 0x800A : SIM Pin Enable Required */\r
+  TAPI_OP_GEN_ERR_SIM_PERM_BLOCKED,                                    /* 0x800B : SIM Permanent Blocked */\r
+  TAPI_OP_GEN_ERR_SIM_PHONEBOOK_RESTRICTED,                            /*0x800C: SIM Phonebook Restricted*/\r
+  TAPI_OP_GEM_ERR_FIXED_DIALING_NUMBER_ONLY,                           /*0x800D: Restricted By FDN Mode */\r
+\r
+  /* Reserved : 0x800E ~ 0x80FF */\r
+  TAPI_OP_GEN_ERR_800E_RESERVED_START  = 0x800E,                       /* 0x800E */\r
+\r
+  TAPI_OP_GEN_ERR_80FF_RESERVED_END    = 0x80ff,                               /* 0x80FF */\r
+\r
+  /* the other errors */\r
+  TAPI_OP_GEN_ERR_OTHERS                               = 0xFFFE,                                 /* 0xFFFE */\r
+\r
+  TAPI_OP_GEN_ERR_MAX                                  = 0xFFFF\r
+\r
+}tapi_phone_err_t;\r
+\r
+\r
+/*==================================================================================================\r
+                                 STRUCTURES AND OTHER TYPEDEFS\r
+==================================================================================================*/\r
+\r
+\r
+/*==================================================================================================\r
+                                     FUNCTION PROTOTYPES\r
+==================================================================================================*/\r
+\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif // _TEL_ERR_H_\r
+\r
+/**\r
+* @}\r
+*/\r
+\r
index c13017a..7ab3dcb 100755 (executable)
@@ -1,27 +1,27 @@
-/**
- * tel-plugin-samsung
- *
- * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Contact: Ja-young Gu <jygu@samsung.com>
- *
- * 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 __S_CALL_H__
-#define __S_CALL_H__
-
-gboolean s_call_init(TcorePlugin *p, TcoreHal *h);
-void s_call_exit(TcorePlugin *p);
-
-#endif
-
+/**\r
+ * tel-plugin-samsung\r
+ *\r
+ * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved\r
+ *\r
+ * Contact: Ja-young Gu <jygu@samsung.com>\r
+ *\r
+ * PROPRIETARY/CONFIDENTIAL\r
+ *\r
+ * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information").\r
+ * You shall not disclose such Confidential Information and shall\r
+ * use it only in accordance with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS.\r
+ * SAMSUNG make no representations or warranties about the suitability\r
+ * of the software, either express or implied, including but not\r
+ * limited to the implied warranties of merchantability, fitness for a particular purpose, or non-infringement.\r
+ * SAMSUNG shall not be liable for any damages suffered by licensee as\r
+ * a result of using, modifying or distributing this software or its derivatives.\r
+ */\r
+\r
+#ifndef __S_CALL_H__\r
+#define __S_CALL_H__\r
+\r
+gboolean s_call_init(TcorePlugin *p, TcoreHal *h);\r
+void s_call_exit(TcorePlugin *p);\r
+\r
+#endif\r
+\r
index ab7709b..73c2830 100755 (executable)
-/*
- * tel-plugin-imc
- *
- * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Hayoon Ko <hayoon.ko@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#ifndef __S_COMMON_H__
-#define __S_COMMON_H__
-
-#include <tcore.h>
-#include <glib.h>
-#include <user_request.h>
-
-
-#define EVENT_SYS_NOTI_MODEM_POWER          "system_power"
-#define EVENT_NOTI_MODEM_POWER          "modem_power"
-#define EVENT_NOTI_MODEM_PHONE_STATE    "modem_phone_state"
-#define EVENT_NOTI_MODEM_PIN_CTRL          "ps_pin_control"
-
-#define EVENT_NOTI_CALL_STATUS                 "call_status"
-#define EVENT_NOTI_CALL_INCOMING               "call_incoming"
-#define EVENT_NOTI_CALL_WAITING                        "call_waiting"
-#define EVENT_NOTI_CALL_SOUND_WBAMR_REPORT "call_sound_wbamr_report"
-#define EVENT_NOTI_CALL_SOUND_TWO_MIC  "call_sound_two_mic"
-#define EVENT_NOTI_CALL_SOUND_DHA              "call_sound_dha"
-
-#define EVENT_NOTI_SS_INFO                             "ss_info"
-#define EVENT_NOTI_SS_USSD                             "ss_ussd"
-
-#define EVENT_NOTI_PS_CALL_STATUS       "ps_call_status"
-#define EVENT_NOTI_PS_DATA_COUNTER      "ps_data_counter"
-#define EVENT_NOTI_PS_IPCONFIGURATION   "ps_ipconfiguration"
-#define EVENT_NOTI_PS_HSDPA_STATUS      "ps_hsdpa_status"
-#define EVENT_NOTI_PS_ATTACH_DETACH     "ps_attach_detach"
-#define EVENT_NOTI_PS_EXTERNAL_CALL     "ps_external_call"
-
-#define EVENT_NOTI_SAP_STATUS           "sap_status"
-#define EVENT_NOTI_SAP_DISCONNECT       "sap_disconnect"
-
-#define EVENT_NOTI_SIM_PIN_STATUS       "sim_pin_status"
-
-#define EVENT_NOTI_SAT_ENVELOPE_RESP       "sat_envelope_response"
-#define EVENT_NOTI_SAT_REFRESH_STATUS       "sat_refresh_status"
-#define EVENT_NOTI_SAT_PROACTIVE_COMMAND       "sat_proactive_command"
-#define EVENT_NOTI_SAT_CONTROL_RESULT       "sat_control_result"
-
-#define EVENT_NOTI_NETWORK_REGISTRATION "network_regist"
-#define EVENT_NOTI_NETWORK_ICON_INFO    "network_icon_info"
-#define EVENT_NOTI_NETWORK_TIME_INFO    "network_time_info"
-#define EVENT_NOTI_NETWORK_IDENTITY     "network_identity"
-
-#define EVENT_NOTI_SMS_INCOM_MSG        "sms_incom_msg"
-#define EVENT_NOTI_SMS_SEND_ACK         "sms_send_ack"
-#define EVENT_NOTI_SMS_MEMORY_STATUS    "sms_memory_status"
-#define EVENT_NOTI_SMS_CB_INCOM_MSG     "sms_cb_incom_msg"
-#define EVENT_NOTI_SMS_DELETE_MSG_CNF   "sms_delete_msg_cnf"
-#define EVENT_NOTI_SMS_WRITE_MSG_CNF    "sms_write_msg_cnf"
-#define EVENT_NOTI_SMS_DELIVERY_RPT_CNF "sms_deliver_rpt_cnf"
-#define EVENT_NOTI_SMS_DEVICE_READY     "sms_device_ready"
-
-#define EVENT_NOTI_PHONEBOOK_STATUS       "phonebook_status"
-#define EVENT_NOTI_PHONEBOOK_FIRST_INDEX        "phonebook_first_index"
-
-#define EVENT_NOTI_GPS_ASSIST_DATA       "gps_assist_data"
-#define EVENT_IND_GPS_MEASURE_POSITION   "gps_measure_position"
-#define EVENT_NOTI_RESET_ASSIST_DATA     "gps_reset_assist_data"
-
-enum direction_e {
-       RX,
-       TX
-};
-
-struct global_data {
-       unsigned int msg_auto_id_current;
-       unsigned int msg_auto_id_start;
-       unsigned int msg_auto_id_end;
-       
-       TcoreHal *hal;
-};
-
-struct work_queue_data {
-       unsigned int id;
-       UserRequest *ur;
-};
-
-#define UTIL_ID(hdr)           ((hdr).main_cmd << 8 | (hdr).sub_cmd)
-#define UTIL_IDP(hdr)          ((hdr)->main_cmd << 8 | (hdr)->sub_cmd)
-
-void                   hook_hex_dump(enum direction_e d, int size, const void *data);
-unsigned int   util_assign_message_sequence_id(TcorePlugin *p);
-gboolean               util_add_waiting_job(GQueue *queue, unsigned int id, UserRequest *ur);
-UserRequest*   util_pop_waiting_job(GQueue *queue, unsigned int id);
-void                   util_hex_dump(char *pad, int size, const void *data);
-unsigned char  util_hexCharToInt(char c);
-char*          util_hexStringToBytes(char * s);
-
-#endif
+/*\r
+ * tel-plugin-imc\r
+ *\r
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: Hayoon Ko <hayoon.ko@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+\r
+#ifndef __S_COMMON_H__\r
+#define __S_COMMON_H__\r
+\r
+#include <tcore.h>\r
+#include <glib.h>\r
+#include <user_request.h>\r
+\r
+\r
+#define EVENT_SYS_NOTI_MODEM_POWER          "system_power"\r
+#define EVENT_NOTI_MODEM_POWER          "modem_power"\r
+#define EVENT_NOTI_MODEM_PHONE_STATE    "modem_phone_state"\r
+#define EVENT_NOTI_MODEM_PIN_CTRL          "ps_pin_control"\r
+\r
+#define EVENT_NOTI_CALL_STATUS                 "call_status"\r
+#define EVENT_NOTI_CALL_INCOMING               "call_incoming"\r
+#define EVENT_NOTI_CALL_WAITING                        "call_waiting"\r
+#define EVENT_NOTI_CALL_SOUND_WBAMR_REPORT "call_sound_wbamr_report"\r
+#define EVENT_NOTI_CALL_SOUND_TWO_MIC  "call_sound_two_mic"\r
+#define EVENT_NOTI_CALL_SOUND_DHA              "call_sound_dha"\r
+\r
+#define EVENT_NOTI_SS_INFO                             "ss_info"\r
+#define EVENT_NOTI_SS_USSD                             "ss_ussd"\r
+\r
+#define EVENT_NOTI_PS_CALL_STATUS       "ps_call_status"\r
+#define EVENT_NOTI_PS_DATA_COUNTER      "ps_data_counter"\r
+#define EVENT_NOTI_PS_IPCONFIGURATION   "ps_ipconfiguration"\r
+#define EVENT_NOTI_PS_HSDPA_STATUS      "ps_hsdpa_status"\r
+#define EVENT_NOTI_PS_ATTACH_DETACH     "ps_attach_detach"\r
+#define EVENT_NOTI_PS_EXTERNAL_CALL     "ps_external_call"\r
+\r
+#define EVENT_NOTI_SAP_STATUS           "sap_status"\r
+#define EVENT_NOTI_SAP_DISCONNECT       "sap_disconnect"\r
+\r
+#define EVENT_NOTI_SIM_PIN_STATUS       "sim_pin_status"\r
+\r
+#define EVENT_NOTI_SAT_ENVELOPE_RESP       "sat_envelope_response"\r
+#define EVENT_NOTI_SAT_REFRESH_STATUS       "sat_refresh_status"\r
+#define EVENT_NOTI_SAT_PROACTIVE_COMMAND       "sat_proactive_command"\r
+#define EVENT_NOTI_SAT_CONTROL_RESULT       "sat_control_result"\r
+\r
+#define EVENT_NOTI_NETWORK_REGISTRATION "network_regist"\r
+#define EVENT_NOTI_NETWORK_ICON_INFO    "network_icon_info"\r
+#define EVENT_NOTI_NETWORK_TIME_INFO    "network_time_info"\r
+#define EVENT_NOTI_NETWORK_IDENTITY     "network_identity"\r
+\r
+#define EVENT_NOTI_SMS_INCOM_MSG        "sms_incom_msg"\r
+#define EVENT_NOTI_SMS_SEND_ACK         "sms_send_ack"\r
+#define EVENT_NOTI_SMS_MEMORY_STATUS    "sms_memory_status"\r
+#define EVENT_NOTI_SMS_CB_INCOM_MSG     "sms_cb_incom_msg"\r
+#define EVENT_NOTI_SMS_DELETE_MSG_CNF   "sms_delete_msg_cnf"\r
+#define EVENT_NOTI_SMS_WRITE_MSG_CNF    "sms_write_msg_cnf"\r
+#define EVENT_NOTI_SMS_DELIVERY_RPT_CNF "sms_deliver_rpt_cnf"\r
+#define EVENT_NOTI_SMS_DEVICE_READY     "sms_device_ready"\r
+\r
+#define EVENT_NOTI_PHONEBOOK_STATUS       "phonebook_status"\r
+#define EVENT_NOTI_PHONEBOOK_FIRST_INDEX        "phonebook_first_index"\r
+\r
+#define EVENT_NOTI_GPS_ASSIST_DATA       "gps_assist_data"\r
+#define EVENT_IND_GPS_MEASURE_POSITION   "gps_measure_position"\r
+#define EVENT_NOTI_RESET_ASSIST_DATA     "gps_reset_assist_data"\r
+\r
+enum direction_e {\r
+       RX,\r
+       TX\r
+};\r
+\r
+struct global_data {\r
+       unsigned int msg_auto_id_current;\r
+       unsigned int msg_auto_id_start;\r
+       unsigned int msg_auto_id_end;\r
+       \r
+       TcoreHal *hal;\r
+};\r
+\r
+struct work_queue_data {\r
+       unsigned int id;\r
+       UserRequest *ur;\r
+};\r
+\r
+#define UTIL_ID(hdr)           ((hdr).main_cmd << 8 | (hdr).sub_cmd)\r
+#define UTIL_IDP(hdr)          ((hdr)->main_cmd << 8 | (hdr)->sub_cmd)\r
+\r
+void                   hook_hex_dump(enum direction_e d, int size, const void *data);\r
+unsigned int   util_assign_message_sequence_id(TcorePlugin *p);\r
+gboolean               util_add_waiting_job(GQueue *queue, unsigned int id, UserRequest *ur);\r
+UserRequest*   util_pop_waiting_job(GQueue *queue, unsigned int id);\r
+void                   util_hex_dump(char *pad, int size, const void *data);\r
+unsigned char  util_hexCharToInt(char c);\r
+char*          util_hexStringToBytes(char * s);\r
+\r
+#endif\r
index 305da2a..6b7ab58 100755 (executable)
@@ -1,27 +1,27 @@
-/**
- * tel-plugin-samsung
- *
- * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Contact: Ja-young Gu <jygu@samsung.com>
- *
- * 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 __S_DISPATCH_H__
-#define __S_DISPATCH_H__
-
-void do_factory(TcoreHal *h, const ipc_message_type *ipc);
-void do_notification_message(TcorePlugin *p, const ipc_message_type *ipc);
-void do_notification_sys_message(TcorePlugin *p, const void *data);
-
-#endif
+/**\r
+ * tel-plugin-samsung\r
+ *\r
+ * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved\r
+ *\r
+ * Contact: Ja-young Gu <jygu@samsung.com>\r
+ *\r
+ * PROPRIETARY/CONFIDENTIAL\r
+ *\r
+ * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information").\r
+ * You shall not disclose such Confidential Information and shall\r
+ * use it only in accordance with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS.\r
+ * SAMSUNG make no representations or warranties about the suitability\r
+ * of the software, either express or implied, including but not\r
+ * limited to the implied warranties of merchantability, fitness for a particular purpose, or non-infringement.\r
+ * SAMSUNG shall not be liable for any damages suffered by licensee as\r
+ * a result of using, modifying or distributing this software or its derivatives.\r
+ */\r
+\r
+#ifndef __S_DISPATCH_H__\r
+#define __S_DISPATCH_H__\r
+\r
+void do_factory(TcoreHal *h, const ipc_message_type *ipc);\r
+void do_notification_message(TcorePlugin *p, const ipc_message_type *ipc);\r
+void do_notification_sys_message(TcorePlugin *p, const void *data);\r
+\r
+#endif\r
index 5772cec..468ee61 100755 (executable)
@@ -1,29 +1,29 @@
-/*
- * tel-plugin-imc
- *
- * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Hayoon Ko <hayoon.ko@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#ifndef __S_GPS_H__
-#define __S_GPS_H__
-
-
-gboolean s_gps_init(TcorePlugin *p, TcoreHal *h);
-void s_gps_exit(TcorePlugin *p);
-
-#endif
+/*\r
+ * tel-plugin-imc\r
+ *\r
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: Hayoon Ko <hayoon.ko@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+\r
+#ifndef __S_GPS_H__\r
+#define __S_GPS_H__\r
+\r
+\r
+gboolean s_gps_init(TcorePlugin *p, TcoreHal *h);\r
+void s_gps_exit(TcorePlugin *p);\r
+\r
+#endif\r
index 6fcc84c..6ee9281 100755 (executable)
@@ -1,31 +1,31 @@
-/*
- * tel-plugin-imc
- *
- * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Hayoon Ko <hayoon.ko@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#ifndef __S_MODEM_H__
-#define __S_MODEM_H__
-
-gboolean on_event_modem_power(TcoreAT *at, const char *line, TcorePlugin *p);
-
-gboolean s_modem_init(TcorePlugin *p, TcoreHal *h);
-void s_modem_exit(TcorePlugin *p);
-
-gboolean s_modem_send_poweron(TcorePlugin *p);
-#endif
+/*\r
+ * tel-plugin-imc\r
+ *\r
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: Hayoon Ko <hayoon.ko@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+\r
+#ifndef __S_MODEM_H__\r
+#define __S_MODEM_H__\r
+\r
+gboolean on_event_modem_power(TcoreAT *at, const char *line, TcorePlugin *p);\r
+\r
+gboolean s_modem_init(TcorePlugin *p, TcoreHal *h);\r
+void s_modem_exit(TcorePlugin *p);\r
+\r
+gboolean s_modem_send_poweron(TcorePlugin *p);\r
+#endif\r
index 8a7ac8e..7fd54c3 100755 (executable)
@@ -1,29 +1,29 @@
-/*
- * tel-plugin-imc
- *
- * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Hayoon Ko <hayoon.ko@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#ifndef __S_NETWORK_H__
-#define __S_NETWORK_H__
-
-
-gboolean s_network_init(TcorePlugin *p, TcoreHal *h);
-void s_network_exit(TcorePlugin *p);
-
-#endif
+/*\r
+ * tel-plugin-imc\r
+ *\r
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: Hayoon Ko <hayoon.ko@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+\r
+#ifndef __S_NETWORK_H__\r
+#define __S_NETWORK_H__\r
+\r
+\r
+gboolean s_network_init(TcorePlugin *p, TcoreHal *h);\r
+void s_network_exit(TcorePlugin *p);\r
+\r
+#endif\r
index f3f0bc6..5077413 100755 (executable)
@@ -1,28 +1,28 @@
-/*
- * tel-plugin-imc
- *
- * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Hayoon Ko <hayoon.ko@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#ifndef S_PHONEBOOK_H_
-#define S_PHONEBOOK_H_
-
-gboolean s_phonebook_init(TcorePlugin *p, TcoreHal *h);
-void s_phonebook_exit(TcorePlugin *p);
-
-#endif /* S_PHONEBOOK_H_ */
+/*\r
+ * tel-plugin-imc\r
+ *\r
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: Hayoon Ko <hayoon.ko@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+\r
+#ifndef S_PHONEBOOK_H_\r
+#define S_PHONEBOOK_H_\r
+\r
+gboolean s_phonebook_init(TcorePlugin *p, TcoreHal *h);\r
+void s_phonebook_exit(TcorePlugin *p);\r
+\r
+#endif /* S_PHONEBOOK_H_ */\r
index 669052c..b7d0069 100755 (executable)
@@ -1,29 +1,29 @@
-/*
- * tel-plugin-imc
- *
- * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Hayoon Ko <hayoon.ko@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __S_PS_H__
-#define __S_PS_H__
-
-gboolean s_ps_init(TcorePlugin *p,TcoreHal *hal);
-void s_ps_exit(TcorePlugin *p);
-
-
-#endif/*__S_PS_H__*/
+/*\r
+ * tel-plugin-imc\r
+ *\r
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: Hayoon Ko <hayoon.ko@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
\r
+#ifndef __S_PS_H__\r
+#define __S_PS_H__\r
+\r
+gboolean s_ps_init(TcorePlugin *p,TcoreHal *hal);\r
+void s_ps_exit(TcorePlugin *p);\r
+\r
+\r
+#endif/*__S_PS_H__*/\r
index ec7dd0e..e9572bc 100755 (executable)
@@ -1,28 +1,28 @@
-/*
- * tel-plugin-imc
- *
- * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Hayoon Ko <hayoon.ko@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#ifndef S_SAP_H_
-#define S_SAP_H_
-
-gboolean s_sap_init(TcorePlugin *p, TcoreHal *h);
-void s_sap_exit(TcorePlugin *p);
-
-#endif /* S_SAP_H_ */
+/*\r
+ * tel-plugin-imc\r
+ *\r
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: Hayoon Ko <hayoon.ko@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+\r
+#ifndef S_SAP_H_\r
+#define S_SAP_H_\r
+\r
+gboolean s_sap_init(TcorePlugin *p, TcoreHal *h);\r
+void s_sap_exit(TcorePlugin *p);\r
+\r
+#endif /* S_SAP_H_ */\r
index b4497bb..d59db67 100755 (executable)
@@ -1,28 +1,28 @@
-/*
- * tel-plugin-imc
- *
- * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Hayoon Ko <hayoon.ko@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#ifndef S_SAT_H_
-#define S_SAT_H_
-
-gboolean s_sat_init(TcorePlugin *p, TcoreHal *h);
-void s_sat_exit(TcorePlugin *p);
-
-#endif /* S_SAT_H_ */
+/*\r
+ * tel-plugin-imc\r
+ *\r
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: Hayoon Ko <hayoon.ko@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+\r
+#ifndef S_SAT_H_\r
+#define S_SAT_H_\r
+\r
+gboolean s_sat_init(TcorePlugin *p, TcoreHal *h);\r
+void s_sat_exit(TcorePlugin *p);\r
+\r
+#endif /* S_SAT_H_ */\r
index 524ba2e..864bc8f 100755 (executable)
@@ -1,27 +1,27 @@
-/**
- * tel-plugin-samsung
- *
- * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Contact: Ja-young Gu <jygu@samsung.com>
- *
- * 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 __S_SIM_H__
-#define __S_SIM_H__
-
-
-gboolean s_sim_init(TcorePlugin *p, TcoreHal *h);
-void s_sim_exit(TcorePlugin *p);
-
-#endif
+/**\r
+ * tel-plugin-samsung\r
+ *\r
+ * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved\r
+ *\r
+ * Contact: Ja-young Gu <jygu@samsung.com>\r
+ *\r
+ * PROPRIETARY/CONFIDENTIAL\r
+ *\r
+ * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information").\r
+ * You shall not disclose such Confidential Information and shall\r
+ * use it only in accordance with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS.\r
+ * SAMSUNG make no representations or warranties about the suitability\r
+ * of the software, either express or implied, including but not\r
+ * limited to the implied warranties of merchantability, fitness for a particular purpose, or non-infringement.\r
+ * SAMSUNG shall not be liable for any damages suffered by licensee as\r
+ * a result of using, modifying or distributing this software or its derivatives.\r
+ */\r
+\r
+#ifndef __S_SIM_H__\r
+#define __S_SIM_H__\r
+\r
+\r
+gboolean s_sim_init(TcorePlugin *p, TcoreHal *h);\r
+void s_sim_exit(TcorePlugin *p);\r
+\r
+#endif\r
index c8b0ef9..ee161ea 100755 (executable)
@@ -1,29 +1,28 @@
-/*
- * tel-plugin-imc
- *
- * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Hayoon Ko <hayoon.ko@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#ifndef __S_SMS_H__
-#define __S_SMS_H__
-
-
-gboolean s_sms_init(TcorePlugin *p, TcoreHal *h);
-void s_sms_exit(TcorePlugin *p);
-
-#endif
+/*\r
+ * tel-plugin-imc\r
+ *\r
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: Madhavi Akella <madhavi.a@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+\r
+#ifndef __S_SMS_H__\r
+#define __S_SMS_H__\r
+\r
+gboolean s_sms_init(TcorePlugin *p, TcoreHal *h);\r
+void s_sms_exit(TcorePlugin *p);\r
+\r
+#endif
\ No newline at end of file
index e88ca1b..5e80838 100755 (executable)
@@ -1,31 +1,31 @@
-/*
- * tel-plugin-imc
- *
- * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Hayoon Ko <hayoon.ko@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#ifndef __S_SS_H__
-#define __S_SS_H__
-
-
-gboolean       s_ss_init(TcorePlugin *p, TcoreHal *h);
-void           s_ss_exit(TcorePlugin *p);
-
-
-
-#endif
+/*\r
+ * tel-plugin-imc\r
+ *\r
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: Hayoon Ko <hayoon.ko@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+\r
+#ifndef __S_SS_H__\r
+#define __S_SS_H__\r
+\r
+\r
+gboolean       s_ss_init(TcorePlugin *p, TcoreHal *h);\r
+void           s_ss_exit(TcorePlugin *p);\r
+\r
+\r
+\r
+#endif\r
index 14a4a26..9d7e4e0 100755 (executable)
@@ -1,7 +1,7 @@
 #sbs-git:slp/pkgs/t/tel-plugin-imc
 Name:       tel-plugin-imc
 Summary:    imc plugin for telephony
-Version:    0.1.1
+Version:    0.1.2
 Release:    1
 Group:      System/Libraries
 License:    Apache
index 152474e..696cd62 100755 (executable)
-/*
- * tel-plugin-imc
- *
- * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Hayoon Ko <hayoon.ko@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/utsname.h>
-
-#include <glib.h>
-
-#include <tcore.h>
-#include <plugin.h>
-#include <hal.h>
-#include <server.h>
-#include <at.h>
-
-#include "s_common.h"
-#include "s_network.h"
-#include "s_modem.h"
-#include "s_sim.h"
-#include "s_sap.h"
-#include "s_ps.h"
-#include "s_call.h"
-#include "s_ss.h"
-#include "s_sms.h"
-#include "s_sat.h"
-#include "s_phonebook.h"
-#include "s_gps.h"
-
-static char *cp_name;
-
-static enum tcore_hook_return on_hal_send(TcoreHal *hal, unsigned int data_len, void *data, void *user_data)
-{
-       hook_hex_dump(TX, data_len, data);
-       return TCORE_HOOK_RETURN_CONTINUE;
-}
-
-static void on_hal_recv(TcoreHal *hal, unsigned int data_len, const void *data, void *user_data)
-{
-       msg("=== RX data DUMP =====");
-       util_hex_dump("          ", data_len, data);
-       msg("=== RX data DUMP =====");
-}
-
-static gboolean on_load()
-{
-       dbg("i'm load!");
-
-       return TRUE;
-}
-
-static int _get_cp_name(char** name)
-{
-       struct utsname u;
-
-       char *svnet1_models[] = { "F1", "S1", "M2", "H2", "H2_SDK",
-               "CRESPO", "STEALTHV", "SLP45", "Kessler", "P1P2",
-               "U1SLP", "U1HD", "SLP7_C210", "SLP10_C210", NULL };
-
-       char *svnet2_models[] = { "SMDK4410", "SMDK4212", "SLP_PQ", "SLP_PQ_LTE", "SLP_NAPLES", "REDWOOD", "TRATS", NULL };
-
-       char* tty_models[] = {"QCT MSM8X55 SURF" , "QCT MSM7x27a FFA", NULL };
-
-       int i=0;
-
-       if (*name) {
-               dbg("[ error ] name is not empty");
-               return FALSE;
-       }
-
-       memset(&u, '\0', sizeof(struct utsname));
-
-       uname(&u);
-
-       dbg("u.nodename : [ %s ]", u.nodename);
-
-       for(i=0; svnet1_models[i]; i++) {
-               if (!strcmp(u.nodename, svnet1_models[i])) {
-                       *name = g_new0(char, 5);
-                       strcpy(*name, "6260");
-                       return 5;
-               }
-       }
-
-       for(i=0; svnet2_models[i]; i++) {
-               if (!strcmp(u.nodename, svnet2_models[i])) {
-                       *name = g_new0(char, 5);
-                       strcpy(*name, "6262");
-                       return 5;
-               }
-       }
-
-       for(i=0; tty_models[i]; i++) {
-               if (!strcmp(u.nodename, tty_models[i])) {
-                       *name = g_new0(char, 6);
-                       strcpy(*name, "dpram");
-                       return 6;
-               }
-       }
-
-       dbg("[ error ] unknown model : (%s)", u.nodename);
-
-       return 0;
-}
-
-static gboolean on_response_default(TcoreAT *at, const char *line, void *user_data)
-{
-       /* TODO:  */
-       dbg("[ TODO ] on_response_default ");
-       return TRUE;
-}
-
-static gboolean on_init(TcorePlugin *p)
-{
-       TcoreHal *h;
-       struct global_data *gd;
-       //char *cp_name = 0;
-       int len = 0;
-
-       if (!p)
-               return FALSE;
-
-       gd = calloc(sizeof(struct global_data), 1);
-       if (!gd)
-               return FALSE;
-
-       dbg("i'm init!");
-
-       gd->msg_auto_id_current = 0;
-       gd->msg_auto_id_start = 1;
-       gd->msg_auto_id_end = 255;
-
-       len = _get_cp_name(&cp_name);
-       if (!len) {
-               dbg("[ error ] unsupport cp (name : %s)", cp_name);
-               return FALSE;
-       }
-
-       /* FIXME: HAL will reside in Co-object.
-        * This HAL is just used as default before MUX setup.
-        * Each HAL has AT pasre functionality.
-        */
-       h = tcore_server_find_hal(tcore_plugin_ref_server(p), cp_name);
-       if (!h)  {
-               g_free(cp_name);
-               return FALSE;
-       }
-
-       //set physical hal into plugin's userdata       
-       gd->hal = h;
-
-       tcore_plugin_link_user_data(p, gd);
-
-       tcore_hal_add_send_hook(h, on_hal_send, p);
-       tcore_hal_add_recv_callback(h, on_hal_recv, p);
-
-       dbg("skip _register_unsolicited_messages() - this should be done in each co-object");
-
-       /* Register Unsolicited msg handler */
-       //_register_unsolicited_messages(p);
-
-       s_modem_init(p, h);
-       s_sim_init(p, h);
-       s_sat_init(p, h);
-       s_network_init(p, h);
-//     s_sap_init(p, h);
-       s_ps_init(p, h);
-       s_call_init(p, h);
-       s_ss_init(p, h);
-       s_sms_init(p, h);
-//     s_phonebook_init(p, h);
-//     s_gps_init(p, h);
-
-       g_free(cp_name);
-
-       tcore_hal_set_power(h, TRUE);
-       /* SEND CPAS command to invoke modem power on. */
-       s_modem_send_poweron(p);
-
-       return TRUE;
-}
-
-static void on_unload(TcorePlugin *p)
-{
-       struct global_data *gd;
-
-       if (!p)
-               return;
-
-       dbg("i'm unload");
-
-       gd = tcore_plugin_ref_user_data(p);
-       if (gd) {
-               free(gd);
-       }
-}
-
-struct tcore_plugin_define_desc plugin_define_desc =
-{
-       .name = "IMC",
-       .priority = TCORE_PLUGIN_PRIORITY_MID,
-       .version = 1,
-       .load = on_load,
-       .init = on_init,
-       .unload = on_unload
-};
+/*\r
+ * tel-plugin-imc\r
+ *\r
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: Hayoon Ko <hayoon.ko@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include <sys/utsname.h>\r
+\r
+#include <glib.h>\r
+\r
+#include <tcore.h>\r
+#include <plugin.h>\r
+#include <hal.h>\r
+#include <server.h>\r
+#include <at.h>\r
+\r
+#include "s_common.h"\r
+#include "s_network.h"\r
+#include "s_modem.h"\r
+#include "s_sim.h"\r
+#include "s_sap.h"\r
+#include "s_ps.h"\r
+#include "s_call.h"\r
+#include "s_ss.h"\r
+#include "s_sms.h"\r
+#include "s_sat.h"\r
+#include "s_phonebook.h"\r
+#include "s_gps.h"\r
+\r
+static char *cp_name;\r
+\r
+static enum tcore_hook_return on_hal_send(TcoreHal *hal, unsigned int data_len, void *data, void *user_data)\r
+{\r
+       hook_hex_dump(TX, data_len, data);\r
+       return TCORE_HOOK_RETURN_CONTINUE;\r
+}\r
+\r
+static void on_hal_recv(TcoreHal *hal, unsigned int data_len, const void *data, void *user_data)\r
+{\r
+       msg("=== RX data DUMP =====");\r
+       util_hex_dump("          ", data_len, data);\r
+       msg("=== RX data DUMP =====");\r
+}\r
+\r
+static gboolean on_load()\r
+{\r
+       dbg("i'm load!");\r
+\r
+       return TRUE;\r
+}\r
+\r
+static int _get_cp_name(char** name)\r
+{\r
+       struct utsname u;\r
+\r
+       char *svnet1_models[] = { "F1", "S1", "M2", "H2", "H2_SDK",\r
+               "CRESPO", "STEALTHV", "SLP45", "Kessler", "P1P2",\r
+               "U1SLP", "U1HD", "SLP7_C210", "SLP10_C210", NULL };\r
+\r
+       char *svnet2_models[] = { "SMDK4410", "SMDK4212", "SLP_PQ", "SLP_PQ_LTE", "SLP_NAPLES", "REDWOOD", "TRATS", NULL };\r
+\r
+       char* tty_models[] = {"QCT MSM8X55 SURF" , "QCT MSM7x27a FFA", NULL };\r
+\r
+       int i=0;\r
+\r
+       if (*name) {\r
+               dbg("[ error ] name is not empty");\r
+               return FALSE;\r
+       }\r
+\r
+       memset(&u, '\0', sizeof(struct utsname));\r
+\r
+       uname(&u);\r
+\r
+       dbg("u.nodename : [ %s ]", u.nodename);\r
+\r
+       for(i=0; svnet1_models[i]; i++) {\r
+               if (!strcmp(u.nodename, svnet1_models[i])) {\r
+                       *name = g_new0(char, 5);\r
+                       strcpy(*name, "6260");\r
+                       return 5;\r
+               }\r
+       }\r
+\r
+       for(i=0; svnet2_models[i]; i++) {\r
+               if (!strcmp(u.nodename, svnet2_models[i])) {\r
+                       *name = g_new0(char, 5);\r
+                       strcpy(*name, "6262");\r
+                       return 5;\r
+               }\r
+       }\r
+\r
+       for(i=0; tty_models[i]; i++) {\r
+               if (!strcmp(u.nodename, tty_models[i])) {\r
+                       *name = g_new0(char, 6);\r
+                       strcpy(*name, "dpram");\r
+                       return 6;\r
+               }\r
+       }\r
+\r
+       dbg("[ error ] unknown model : (%s)", u.nodename);\r
+\r
+       return 0;\r
+}\r
+\r
+static gboolean on_response_default(TcoreAT *at, const char *line, void *user_data)\r
+{\r
+       /* TODO:  */\r
+       dbg("[ TODO ] on_response_default ");\r
+       return TRUE;\r
+}\r
+\r
+static gboolean on_init(TcorePlugin *p)\r
+{\r
+       TcoreHal *h;\r
+       struct global_data *gd;\r
+       //char *cp_name = 0;\r
+       int len = 0;\r
+\r
+       if (!p)\r
+               return FALSE;\r
+\r
+       gd = calloc(sizeof(struct global_data), 1);\r
+       if (!gd)\r
+               return FALSE;\r
+\r
+       dbg("i'm init!");\r
+\r
+       gd->msg_auto_id_current = 0;\r
+       gd->msg_auto_id_start = 1;\r
+       gd->msg_auto_id_end = 255;\r
+\r
+       len = _get_cp_name(&cp_name);\r
+       if (!len) {\r
+               dbg("[ error ] unsupport cp (name : %s)", cp_name);\r
+               free(gd);\r
+               return FALSE;\r
+       }\r
+\r
+       /* FIXME: HAL will reside in Co-object.\r
+        * This HAL is just used as default before MUX setup.\r
+        * Each HAL has AT pasre functionality.\r
+        */\r
+       h = tcore_server_find_hal(tcore_plugin_ref_server(p), cp_name);\r
+       if (!h)  {\r
+               g_free(cp_name);\r
+               free(gd);\r
+               return FALSE;\r
+       }\r
+\r
+       //set physical hal into plugin's userdata       \r
+       gd->hal = h;\r
+\r
+       tcore_plugin_link_user_data(p, gd);\r
+\r
+       tcore_hal_add_send_hook(h, on_hal_send, p);\r
+       tcore_hal_add_recv_callback(h, on_hal_recv, p);\r
+\r
+       dbg("skip _register_unsolicited_messages() - this should be done in each co-object");\r
+\r
+       /* Register Unsolicited msg handler */\r
+       //_register_unsolicited_messages(p);\r
+\r
+       s_modem_init(p, h);\r
+       s_sim_init(p, h);\r
+       s_sat_init(p, h);\r
+       s_network_init(p, h);\r
+//     s_sap_init(p, h);\r
+       s_ps_init(p, h);\r
+       s_call_init(p, h);\r
+       s_ss_init(p, h);\r
+       s_sms_init(p, h);\r
+//     s_phonebook_init(p, h);\r
+//     s_gps_init(p, h);\r
+\r
+       g_free(cp_name);\r
+\r
+       tcore_hal_set_power(h, TRUE);\r
+       /* SEND CPAS command to invoke modem power on. */\r
+       s_modem_send_poweron(p);\r
+\r
+       return TRUE;\r
+}\r
+\r
+static void on_unload(TcorePlugin *p)\r
+{\r
+       struct global_data *gd;\r
+\r
+       if (!p)\r
+               return;\r
+\r
+       dbg("i'm unload");\r
+\r
+       gd = tcore_plugin_ref_user_data(p);\r
+       if (gd) {\r
+               free(gd);\r
+       }\r
+}\r
+\r
+struct tcore_plugin_define_desc plugin_define_desc =\r
+{\r
+       .name = "IMC",\r
+       .priority = TCORE_PLUGIN_PRIORITY_MID,\r
+       .version = 1,\r
+       .load = on_load,\r
+       .init = on_init,\r
+       .unload = on_unload\r
+};\r
index c1aae7f..fdcebf2 100755 (executable)
-/*
- * tel-plugin-imc
- *
- * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Hayoon Ko <hayoon.ko@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <glib.h>
-
-#include <tcore.h>
-#include <hal.h>
-#include <core_object.h>
-#include <plugin.h>
-#include <queue.h>
-#include <co_call.h>
-#include <user_request.h>
-#include <server.h>
-#include <at.h>
-
-#include "s_common.h"
-#include "s_call.h"
-
-
-#define STATUS_INCOMING           4
-#define STATUS_WAITING    5
-#define STATUS_CONNECTED   7
-#define COMMA                     0X2c
-
-static gboolean setsoundpath = FALSE;
-static gboolean soundvolume = FALSE;
-
-/* End Cause field
-  * Call state end cause
-*/
-typedef enum {
-       TIZEN_CALL_END_NO_CAUSE,
-       /*
-        * These definitions are taken from GSM 04.08 Table 10.86
-        */
-       TIZEN_CC_CAUSE_UNASSIGNED_NUMBER,
-       TIZEN_CC_CAUSE_NO_ROUTE_TO_DEST,
-       TIZEN_CC_CAUSE_CHANNEL_UNACCEPTABLE,
-       TIZEN_CC_CAUSE_OPERATOR_DETERMINED_BARRING,
-       TIZEN_CC_CAUSE_NORMAL_CALL_CLEARING,
-       TIZEN_CC_CAUSE_USER_BUSY,
-       TIZEN_CC_CAUSE_NO_USER_RESPONDING,
-       TIZEN_CC_CAUSE_USER_ALERTING_NO_ANSWER,
-       TIZEN_CC_CAUSE_CALL_REJECTED,
-       TIZEN_CC_CAUSE_NUMBER_CHANGED,
-       TIZEN_CC_CAUSE_NON_SELECTED_USER_CLEARING,
-       TIZEN_CC_CAUSE_DESTINATION_OUT_OF_ORDER,
-       TIZEN_CC_CAUSE_INVALID_NUMBER_FORMAT,
-       TIZEN_CC_CAUSE_FACILITY_REJECTED,
-       TIZEN_CC_CAUSE_RESPONSE_TO_STATUS_ENQUIRY,
-       TIZEN_CC_CAUSE_NORMAL_UNSPECIFIED,
-       TIZEN_CC_CAUSE_NO_CIRCUIT_CHANNEL_AVAILABLE,
-       TIZEN_CC_CAUSE_NETWORK_OUT_OF_ORDER,
-       TIZEN_CC_CAUSE_TEMPORARY_FAILURE,
-       TIZEN_CC_CAUSE_SWITCHING_EQUIPMENT_CONGESTION,
-       TIZEN_CC_CAUSE_ACCESS_INFORMATION_DISCARDED,
-       TIZEN_CC_CAUSE_REQUESTED_CIRCUIT_CHANNEL_NOT_AVAILABLE,
-       TIZEN_CC_CAUSE_RESOURCES_UNAVAILABLE_UNSPECIFIED,
-       TIZEN_CC_CAUSE_QUALITY_OF_SERVICE_UNAVAILABLE,
-       TIZEN_CC_CAUSE_REQUESTED_FACILITY_NOT_SUBSCRIBED,
-       TIZEN_CC_CAUSE_INCOMING_CALL_BARRED_WITHIN_CUG,
-       TIZEN_CC_CAUSE_BEARER_CAPABILITY_NOT_AUTHORISED,
-       TIZEN_CC_CAUSE_BEARER_CAPABILITY_NOT_PRESENTLY_AVAILABLE,
-       TIZEN_CC_CAUSE_SERVICE_OR_OPTION_NOT_AVAILABLE,
-       TIZEN_CC_CAUSE_BEARER_SERVICE_NOT_IMPLEMENTED,
-       TIZEN_CC_CAUSE_ACM_GEQ_ACMMAX,
-       TIZEN_CC_CAUSE_REQUESTED_FACILITY_NOT_IMPLEMENTED,
-       TIZEN_CC_CAUSE_ONLY_RESTRICTED_DIGITAL_INFO_BC_AVAILABLE,
-       TIZEN_CC_CAUSE_SERVICE_OR_OPTION_NOT_IMPLEMENTED,
-       TIZEN_CC_CAUSE_INVALID_TRANSACTION_ID_VALUE,
-       TIZEN_CC_CAUSE_USER_NOT_MEMBER_OF_CUG,
-       TIZEN_CC_CAUSE_INCOMPATIBLE_DESTINATION,
-       TIZEN_CC_CAUSE_INVALID_TRANSIT_NETWORK_SELECTION,
-       TIZEN_CC_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE,
-       TIZEN_CC_CAUSE_INVALID_MANDATORY_INFORMATION,
-       TIZEN_CC_CAUSE_MESSAGE_TYPE_NON_EXISTENT,
-       TIZEN_CC_CAUSE_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROT_STATE,
-       TIZEN_CC_CAUSE_IE_NON_EXISTENT_OR_NOT_IMPLEMENTED,
-       TIZEN_CC_CAUSE_CONDITIONAL_IE_ERROR,
-       TIZEN_CC_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE,
-       TIZEN_CC_CAUSE_RECOVERY_ON_TIMER_EXPIRY,
-       TIZEN_CC_CAUSE_PROTOCOL_ERROR_UNSPECIFIED,
-       TIZEN_CC_CAUSE_INTERWORKING_UNSPECIFIED,
-       TIZEN_CC_CAUSE_END = 128,
-
-       /* Reject causes*/
-       TIZEN_REJECT_CAUSE_IMSI_UNKNOWN_IN_HLR,
-       TIZEN_REJECT_CAUSE_ILLEGAL_MS,
-       TIZEN_REJECT_CAUSE_IMSI_UNKNOWN_IN_VLR,
-       TIZEN_REJECT_CAUSE_IMEI_NOT_ACCEPTED,
-       TIZEN_REJECT_CAUSE_ILLEGAL_ME,
-       TIZEN_REJECT_CAUSE_GPRS_SERVICES_NOT_ALLOWED,
-       TIZEN_REJECT_CAUSE_GPRS_SERVICES_AND_NON_GPRS_SERVICES_NOT_ALLOWED,
-       TIZEN_REJECT_CAUSE_MS_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK,
-       TIZEN_REJECT_CAUSE_IMPLICITLY_DETACHED,
-       TIZEN_REJECT_CAUSE_PLMN_NOT_ALLOWED,
-       TIZEN_REJECT_CAUSE_LA_NOT_ALLOWED,
-       TIZEN_REJECT_CAUSE_NATIONAL_ROAMING_NOT_ALLOWED,
-       TIZEN_REJECT_CAUSE_GPRS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN,
-       TIZEN_REJECT_CAUSE_NO_SUITABLE_CELLS_IN_LA,
-       TIZEN_REJECT_CAUSE_MSC_TEMPORARILY_NOT_REACHABLE,
-       TIZEN_REJECT_CAUSE_NETWORK_FAILURE ,
-       TIZEN_REJECT_CAUSE_MAC_FAILURE,
-       TIZEN_REJECT_CAUSE_SYNCH_FAILURE,
-       TIZEN_REJECT_CAUSE_CONGESTTION,
-       TIZEN_REJECT_CAUSE_GSM_AUTH_UNACCEPTED,
-       TIZEN_REJECT_CAUSE_SERVICE_OPTION_NOT_SUPPORTED,
-       TIZEN_REJECT_CAUSE_REQ_SERV_OPT_NOT_SUBSCRIBED,
-       TIZEN_REJECT_CAUSE_SERVICE_OPT__OUT_OF_ORDER,
-       TIZEN_REJECT_CAUSE_CALL_CANNOT_BE_IDENTIFIED,
-       TIZEN_REJECT_CAUSE_NO_PDP_CONTEXT_ACTIVATED,
-       TIZEN_REJECT_CAUSE_RETRY_UPON_ENTRY_INTO_A_NEW_CELL_MIN_VALUE,
-       TIZEN_REJECT_CAUSE_RETRY_UPON_ENTRY_INTO_A_NEW_CELL_MAX_VALUE,
-       TIZEN_REJECT_CAUSE_SEMANTICALLY_INCORRECT_MSG,
-       TIZEN_REJECT_CAUSE_INVALID_MANDATORY_INFO,
-       TIZEN_REJECT_CAUSE_MESSAGE_TYPE_NON_EXISTANT,
-       TIZEN_REJECT_CAUSE_MESSAGE_TYPE_NOT_COMP_PRT_ST,
-       TIZEN_REJECT_CAUSE_IE_NON_EXISTANT,
-       TIZEN_REJECT_CAUSE_MSG_NOT_COMPATIBLE_PROTOCOL_STATE,
-
-
-       /* Connection Management establishment rejection cause */
-       TIZEN_REJECT_CAUSE_REJ_UNSPECIFIED,
-
-       /* AS reject causes */
-       TIZEN_REJECT_CAUSE_AS_REJ_RR_REL_IND,
-       TIZEN_REJECT_CAUSE_AS_REJ_RR_RANDOM_ACCESS_FAILURE,
-       TIZEN_REJECT_CAUSE_AS_REJ_RRC_REL_IND,
-       TIZEN_REJECT_CAUSE_AS_REJ_RRC_CLOSE_SESSION_IND,
-       TIZEN_REJECT_CAUSE_AS_REJ_RRC_OPEN_SESSION_FAILURE,
-       TIZEN_REJECT_CAUSE_AS_REJ_LOW_LEVEL_FAIL,
-       TIZEN_REJECT_CAUSE_AS_REJ_LOW_LEVEL_FAIL_REDIAL_NOT_ALLOWED,
-       TIZEN_REJECT_CAUSE_AS_REJ_LOW_LEVEL_IMMED_RETRY,
-
-       /* MM reject causes */
-       TIZEN_REJECT_CAUSE_MM_REJ_INVALID_SIM,
-       TIZEN_REJECT_CAUSE_MM_REJ_NO_SERVICE,
-       TIZEN_REJECT_CAUSE_MM_REJ_TIMER_T3230_EXP,
-       TIZEN_REJECT_CAUSE_MM_REJ_NO_CELL_AVAILABLE,
-       TIZEN_REJECT_CAUSE_MM_REJ_WRONG_STATE,
-       TIZEN_REJECT_CAUSE_MM_REJ_ACCESS_CLASS_BLOCKED,
-
-       /* Definitions for release ind causes between MM  and CNM*/
-       TIZEN_REJECT_CAUSE_ABORT_MSG_RECEIVED,
-       TIZEN_REJECT_CAUSE_OTHER_CAUSE,
-
-       /* CNM reject causes */
-       TIZEN_REJECT_CAUSE_CNM_REJ_TIMER_T303_EXP,
-       TIZEN_REJECT_CAUSE_CNM_REJ_NO_RESOURCES,
-       TIZEN_REJECT_CAUSE_CNM_MM_REL_PENDING,
-       TIZEN_REJECT_CAUSE_CNM_INVALID_USER_DATA,
-       TIZEN_CALL_END_CAUSE_MAX = 255
-}tizen_call_end_cause_e_type;
-
-
-struct CLCC_call_t {
-       struct CLCC_call_info_t {
-               int id;
-               enum tcore_call_direction       direction;
-               enum tcore_call_status          status;
-               enum tcore_call_type            type;
-               int mpty;
-               int num_len;
-               int num_type;
-       } info;
-       char number[90];
-};
-
-/**************************************************************************
-  *                                                    Local Function Prototypes
-  **************************************************************************/
-/*************************             REQUESTS                ***************************/
-static void _call_status_idle(TcorePlugin *p, CallObject *co);
-static void _call_status_active(TcorePlugin *p, CallObject *co);
-static void _call_status_dialing(TcorePlugin *p, CallObject *co);
-static void _call_status_alert(TcorePlugin *p, CallObject *co);
-static void _call_status_incoming(TcorePlugin *p, CallObject *co);
-static void _call_status_waiting(TcorePlugin *p, CallObject *co);
-
-static TReturn _call_list_get(CoreObject *o, gboolean *event_flag);
-static int _callFromCLCCLine(char *line, struct CLCC_call_t *p_call);
-static TReturn _set_dtmf_tone_duration(CoreObject *o, UserRequest *ur);
-
-/*************************             CONFIRMATION            ***************************/
-static void on_confirmation_call_message_send(TcorePending *p, gboolean result, void *user_data); // from Kernel
-static void on_confirmation_call_hold(TcorePending *p, int data_len, const void *data, void *user_data);
-static void on_confirmation_call_swap(TcorePending *p, int data_len, const void *data, void *user_data);
-static void on_confirmation_call_split(TcorePending *p, int data_len, const void *data, void *user_data);
-static void on_confirmation_call_hold_and_accept(TcorePending *p, int data_len, const void *data, void *user_data);
-
-static void _on_confirmation_call_release(TcorePending *p, int data_len, const void *data, void *user_data, int type);
-static void _on_confirmation_call(TcorePending *p, int data_len, const void *data, void *user_data, int type);
-static void _on_confirmation_dtmf_tone_duration(TcorePending *p, int data_len, const void *data, void *user_data);
-
-/*************************             RESPONSES               ***************************/
-static void on_response_call_list_get(TcorePending *p, int data_len, const void *data, void *user_data);
-
-/*************************             NOTIIFICATIONS          ***************************/
-static void on_notification_call_waiting(CoreObject *o, const void *data, void *user_data);
-static void on_notification_call_incoming(CoreObject *o, const void *data, void *user_data);
-static void on_notification_call_status(CoreObject *o, const void *data, void *user_data);
-static gboolean on_notification_call_info(CoreObject *o, const void *data, void *user_data);
-static gboolean on_notification_call_clip_info(CoreObject *o, const void *data, void *user_data);
-
-
-/**************************************************************************
-  *                                                    Local Utility Function Prototypes
-  **************************************************************************/
-static gboolean _call_request_message(TcorePending *pending, CoreObject *o, UserRequest* ur, void* on_resp, void* user_data);
-
-static void _call_branch_by_status(TcorePlugin *p, CallObject *co, unsigned int status);
-
-/**************************************************************************
-  *                                                    Local Function Definitions
-  **************************************************************************/
-static enum tcore_call_cli_mode _get_clir_status(char *num)
-{
-       enum tcore_call_cli_mode clir = CALL_CLI_MODE_DEFAULT;
-       dbg("Entry");
-
-       if(!strncmp(num, "*31#", 4)) {
-               dbg("CLI mode restricted");
-               return TCORE_CALL_CLI_MODE_RESTRICT;
-       }
-
-       if(!strncmp(num, "#31#", 4)) {
-               dbg("CLI mode allowed");
-               return TCORE_CALL_CLI_MODE_PRESENT;
-       }
-
-       err("Exit");
-       return clir;
-}
-
-static enum tcore_call_status _call_status(unsigned int status)
-{
-       dbg("Entry");
-
-       switch(status)
-       {
-               case 0:
-                       return TCORE_CALL_STATUS_ACTIVE;
-               case 1:
-                       return TCORE_CALL_STATUS_HELD;
-               case 2:
-                       return TCORE_CALL_STATUS_DIALING;
-               case 3:
-                       return TCORE_CALL_STATUS_ALERT;
-               case 4:
-                       return TCORE_CALL_STATUS_INCOMING;
-               case 5:
-                       return TCORE_CALL_STATUS_WAITING;
-               case 6:         /* DISCONNECTED state */        /* FALL THROUGH */
-               default:
-                       return TCORE_CALL_STATUS_IDLE;
-       }
-}
-
-static gboolean _call_is_in_mpty(int mpty)
-{
-       dbg("Entry");
-
-       switch(mpty)
-       {
-               case 0:
-                       return FALSE;
-               case 1:
-                       return TRUE;
-               default:
-                       break;
-       }
-
-       return FALSE;
-}
-
-static enum tcore_call_type tizen_call_type(int type)
-{
-       dbg("Entry");
-
-       switch (type)
-       {
-               case 0:
-                       return TCORE_CALL_TYPE_VOICE;
-               case 1:
-                       return TCORE_CALL_TYPE_VIDEO;
-               default:
-                       break;
-       }
-
-       return TCORE_CALL_TYPE_VOICE;
-}
-
-static gboolean on_notification_call_clip_info(CoreObject *o, const void *data, void *user_data)
-{
-       dbg("Entry");
-
-       /* TODO */
-
-       return TRUE;
- }
-
-
-static gboolean on_notification_call_info(CoreObject *o, const void *data, void *user_data)
-{
-       GSList *tokens=NULL;
-       GSList *lines = NULL;
-       const char *line = NULL;
-       char *pStat;
-
-       int status;
-       dbg("Entry");
-
-       lines = (GSList*)data;
-       if (1 != g_slist_length(lines)) {
-               err("Unsolicited message, BUT multiple lines present");
-               goto OUT;
-       }
-
-       line = (char*)(lines->data);
-       tokens = tcore_at_tok_new(line);
-
-       pStat = g_slist_nth_data(tokens, 1);
-       if(!pStat) {
-               dbg("Stat is missing from %XCALLSTAT indiaction");
-       }
-       else {
-               status  = atoi(pStat);
-
-               switch(status)
-               {
-                       case STATUS_INCOMING:
-                               dbg("calling on_notification_call_incoming");
-                               on_notification_call_incoming(o, line, user_data);
-                       break;
-                       case STATUS_WAITING:
-                               dbg("calling on_notification_call_waiting");
-                               on_notification_call_waiting(o, line, user_data);
-                       break;
-                       case STATUS_CONNECTED: /*igonre Connected state. */
-                               dbg("Connected state");
-                       break;
-                       default:
-                               dbg("calling on_notification_call_status");
-                               on_notification_call_status(o, line, user_data);
-                       break;
-               }
-       }
-
-       /* Free tokens */
-       tcore_at_tok_free(tokens);
-
-OUT:
-       dbg("Exit");
-       return TRUE;
-}
-
-static gboolean _call_request_message(TcorePending *pending,
-                                                                               CoreObject *o,
-                                                                               UserRequest *ur,
-                                                                               void* on_resp,
-                                                                               void* user_data)
-{
-       TcoreHal *hal = NULL;
-       TReturn ret;
-       dbg("Entry");
-
-       tcore_pending_set_timeout(pending, 0);
-       tcore_pending_set_priority(pending, TCORE_PENDING_PRIORITY_DEFAULT);
-
-       if (on_resp) {
-               tcore_pending_set_response_callback(pending, on_resp, user_data);
-       }
-
-       tcore_pending_set_send_callback(pending, on_confirmation_call_message_send, NULL);
-
-       if (ur) {
-               tcore_pending_link_user_request(pending, ur);
-       }
-       else {
-               err("User Request is NULL, is this internal request??");
-       }
-
-       /* HAL */
-       hal = tcore_object_get_hal(o);
-
-       /* Send request to HAL */
-       ret = tcore_hal_send_request(hal, pending);
-       if(TCORE_RETURN_SUCCESS != ret) {
-               err("Request send failed");
-               return FALSE;
-       }
-
-       dbg("Exit");
-       return TRUE;
-}
-
-static void _call_status_idle(TcorePlugin *p, CallObject *co)
-{
-       CoreObject *o = NULL;
-       struct tnoti_call_status_idle data;
-       dbg("Entry");
-
-       o = tcore_plugin_ref_core_object(p, "call");
-       dbg("Call ID [%d], Call Status [%d]", tcore_call_object_get_id(co), tcore_call_object_get_status(co));
-
-       if (tcore_call_object_get_status(co) != TCORE_CALL_STATUS_IDLE) {
-               data.type = tcore_call_object_get_type(co);
-               dbg("data.type : [%d]", data.type);
-
-               data.id = tcore_call_object_get_id(co);
-               dbg("data.id : [%d]", data.id);
-
-               /* Set Status */
-               tcore_call_object_set_status(co, TCORE_CALL_STATUS_IDLE);
-
-               /* Send Notification to TAPI */
-               tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                               o,
-                                                                               TNOTI_CALL_STATUS_IDLE,
-                                                                               sizeof(struct tnoti_call_status_idle),
-                                                                               (void*)&data);
-
-               /* Free Call object */
-               tcore_call_object_free(o, co);
-       }
-       else {
-               err("Call object was not free");
-               tcore_call_object_free(o, co);
-       }
-
-       dbg("Exit");
-       return;
-}
-
-
-static void _call_status_dialing(TcorePlugin *p, CallObject *co)
-{
-       struct tnoti_call_status_dialing data;
-       dbg("Entry");
-
-       if (tcore_call_object_get_status(co) != TCORE_CALL_STATUS_DIALING) {
-               data.type = tcore_call_object_get_type(co);
-               dbg("data.type : [%d]", data.type);
-
-               data.id = tcore_call_object_get_id(co);
-               dbg("data.id : [%d]", data.id);
-
-               /* Set Status */
-               tcore_call_object_set_status(co, TCORE_CALL_STATUS_DIALING);
-
-               /* Send notification to TAPI */
-               tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                               tcore_plugin_ref_core_object(p, "call"),
-                                                                               TNOTI_CALL_STATUS_DIALING,
-                                                                               sizeof(struct tnoti_call_status_dialing),
-                                                                               (void*)&data);
-
-       }
-
-       dbg("Exit");
-       return;
-}
-
-static void _call_status_alert(TcorePlugin *p, CallObject *co)
-{
-       struct tnoti_call_status_alert data;
-       dbg("Entry");
-
-       /* Alerting has just 1 data 'CALL ID' */
-       if (tcore_call_object_get_status(co) != TCORE_CALL_STATUS_ALERT) {
-               data.type = tcore_call_object_get_type(co);
-               dbg("data.type : [%d]", data.type);
-
-               data.id = tcore_call_object_get_id(co);
-               dbg("data.id : [%d]", data.id);
-
-               /* Set Status */
-               tcore_call_object_set_status(co, TCORE_CALL_STATUS_ALERT);
-
-               /* Send notification to TAPI */
-               tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                               tcore_plugin_ref_core_object(p, "call"),
-                                                                               TNOTI_CALL_STATUS_ALERT,
-                                                                               sizeof(struct tnoti_call_status_alert),
-                                                                               (void*)&data);
-       }
-
-       dbg("Exit");
-       return;
-}
-
-static void _call_status_active(TcorePlugin *p, CallObject *co)
-{
-       struct tnoti_call_status_active data;
-       dbg("Entry");
-
-       if (tcore_call_object_get_status(co) != TCORE_CALL_STATUS_ACTIVE) {
-               data.type = tcore_call_object_get_type(co);
-               dbg("data.type : [%d]", data.type);
-
-               data.id = tcore_call_object_get_id(co);
-               dbg("data.id : [%d]", data.id);
-
-               /* Set Status */
-               tcore_call_object_set_status(co, TCORE_CALL_STATUS_ACTIVE);
-
-               /* Send notification to TAPI */
-               tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                               tcore_plugin_ref_core_object(p, "call"),
-                                                                               TNOTI_CALL_STATUS_ACTIVE,
-                                                                               sizeof(struct tnoti_call_status_active),
-                                                                               (void*)&data);
-       }
-
-       dbg("Exit");
-       return;
-}
-
-static void _call_status_held(TcorePlugin *p, CallObject *co)
-{
-       struct tnoti_call_status_held data;
-       dbg("Entry");
-
-       if (tcore_call_object_get_status(co) != TCORE_CALL_STATUS_HELD) {
-               data.type = tcore_call_object_get_type(co);
-               dbg("data.type : [%d]", data.type);
-
-               data.id = tcore_call_object_get_id(co);
-               dbg("data.id : [%d]", data.id);
-
-               /* Set Status */
-               tcore_call_object_set_status(co, TCORE_CALL_STATUS_HELD);
-
-               /* Send notification to TAPI  */
-               tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                       tcore_plugin_ref_core_object(p, "call"),
-                                                                       TNOTI_CALL_STATUS_HELD,
-                                                                       sizeof(struct tnoti_call_status_held),
-                                                                       (void*)&data);
-       }
-
-       dbg("Exit");
-       return;
-}
-
-static void _call_status_incoming(TcorePlugin *p, CallObject *co)
-{
-       struct tnoti_call_status_incoming data;
-       dbg("Entry");
-
-       if (tcore_call_object_get_status(co) != TCORE_CALL_STATUS_INCOMING) {
-               tcore_call_object_set_status(co, TCORE_CALL_STATUS_INCOMING);
-
-               data.type = tcore_call_object_get_type(co);
-               dbg("data.type : [%d]", data.type);
-
-               data.id = tcore_call_object_get_id(co);
-               dbg("data.id : [%d]", data.id);
-
-               data.cli.mode = tcore_call_object_get_cli_mode(co);
-               dbg("data.cli.mode : [%d]", data.cli.mode);
-
-               tcore_call_object_get_number(co, data.cli.number);
-               dbg("data.cli.number : [%s]", data.cli.number);
-
-               data.cna.mode = tcore_call_object_get_cna_mode(co);
-               dbg("data.cna.mode : [%d]", data.cna.mode);
-
-               tcore_call_object_get_name(co, data.cna.name);
-               dbg("data.cna.name : [%s]", data.cna.name);
-
-               data.forward = FALSE; /* this is tmp code */
-
-               data.active_line = tcore_call_object_get_active_line(co);
-               dbg("data.active_line : [%d]", data.active_line);
-
-               /* Send notification to TAPI */
-               tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                               tcore_plugin_ref_core_object(p, "call"),
-                                                                               TNOTI_CALL_STATUS_INCOMING,
-                                                                               sizeof(struct tnoti_call_status_incoming),
-                                                                               (void*)&data);
-       }
-
-       dbg("Exit");
-       return;
-}
-
-static void _call_status_waiting(TcorePlugin *p, CallObject *co)
-{
-       dbg("Entry");
-       _call_status_incoming(p, co);
-
-       dbg("Exit");
-       return;
-}
-
-static void _call_branch_by_status(TcorePlugin *p, CallObject *co, unsigned int status)
-{
-       dbg("Entry");
-
-       dbg("Call Status is %d", status);
-       switch (status)
-       {
-               case TCORE_CALL_STATUS_IDLE:
-                       _call_status_idle(p, co);
-                       break;
-
-               case TCORE_CALL_STATUS_ACTIVE:
-                       _call_status_active(p, co);
-                       break;
-
-               case TCORE_CALL_STATUS_HELD:
-                       _call_status_held(p, co);
-                       break;
-
-               case TCORE_CALL_STATUS_DIALING:
-                       _call_status_dialing(p, co);
-                       break;
-
-               case TCORE_CALL_STATUS_ALERT:
-                       _call_status_alert(p, co);
-                       break;
-
-               case TCORE_CALL_STATUS_INCOMING:
-                       _call_status_incoming(p, co);
-                       break;
-
-               case TCORE_CALL_STATUS_WAITING:
-                       _call_status_waiting(p, co);
-                       break;
-       }
-
-       dbg("Exit");
-       return;
-}
-
-static TReturn _call_list_get(CoreObject *o, gboolean *event_flag)
-{
-       UserRequest* ur = NULL;
-       TcorePending *pending = NULL;
-
-       char *cmd_str = NULL;
-       TcoreATRequest *req = NULL;
-
-       gboolean ret = FALSE;
-       dbg("Entry");
-
-       if (!o) {
-               err("Core Object is NULL");
-               return TCORE_RETURN_FAILURE;
-       }
-
-       /* Create new User Request */
-       ur = tcore_user_request_new(NULL, NULL);
-
-       /* Command string */
-       cmd_str = g_strdup("AT+CLCC\r");
-
-       /* Create new Pending Request */
-       pending = tcore_pending_new(o, 0);
-       req = tcore_at_request_new(cmd_str, "+CLCC", TCORE_AT_MULTILINE);
-
-       /* Free memory */
-       g_free(cmd_str);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-
-       ret = _call_request_message (pending, o, ur, on_response_call_list_get, event_flag);
-       if (!ret) {
-               err("AT request (%s) sending failed", req->cmd);
-               return TCORE_RETURN_FAILURE;
-       }
-
-       dbg("AT request sent success");
-       return TCORE_RETURN_SUCCESS;
-}
-
-// CONFIRMATION
-static void on_confirmation_call_message_send(TcorePending *p, gboolean result, void *user_data)
-{
-       dbg("Entry");
-
-       if (result == FALSE) {  /* Fail */
-               dbg("SEND FAIL");
-       }
-       else {
-               dbg("SEND OK");
-       }
-
-       dbg("Exit");
-       return;
-}
-
-static void on_confirmation_call_outgoing(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       UserRequest *ur = NULL;
-
-       GSList *tokens = NULL;
-       const char *line = NULL;
-
-       const TcoreATResponse* response = data;
-       struct tresp_call_dial resp;
-
-       int error;
-       dbg("Entry");
-
-       ur = tcore_pending_ref_user_request(p);
-       if (ur) {
-               if (response->success > 0) {
-                       dbg("RESPONSE OK");
-                       resp.err = TCORE_RETURN_SUCCESS;
-               }
-               else {
-                       dbg("RESPONSE NOT OK");
-
-                       line = (const char*)response->final_response;
-                       tokens = tcore_at_tok_new(line);
-
-                       if (g_slist_length(tokens) < 1) {
-                               err("Unspecified error cause OR string corrupted");
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                       }
-                       else {
-                               error = atoi(g_slist_nth_data(tokens, 0));
-
-                               /* TODO: CMEE error mapping is required. */
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                       }
-
-                       /* Free tokens */
-                       tcore_at_tok_free(tokens);
-               }
-
-               /* Send Response to TAPI */
-               tcore_user_request_send_response(ur, TRESP_CALL_DIAL, sizeof(struct tresp_call_dial), &resp);
-       }
-       else {
-               err("User Request is NULL");
-       }
-
-       dbg("Exit")
-       return;
-}
-
-static void on_confirmation_call_accept(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       UserRequest *ur = NULL;
-
-       GSList *tokens = NULL;
-       const char *line = NULL;
-
-       const TcoreATResponse* response = data;
-       struct tresp_call_answer resp;
-
-       int error;
-       dbg("Entry");
-
-       ur = tcore_pending_ref_user_request(p);
-       if (ur) {
-               if (response->success > 0) {
-                       dbg("RESPONSE OK");
-                       resp.err = TCORE_RETURN_SUCCESS;
-               }
-               else {
-                       dbg("RESPONSE NOT OK");
-
-                       line = (const char*)response->final_response;
-                       tokens = tcore_at_tok_new(line);
-
-                       if (g_slist_length(tokens) < 1) {
-                               err("Unspecified error cause OR string corrupted");
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                       }
-                       else {
-                               error = atoi(g_slist_nth_data(tokens, 0));
-
-                               /* TODO: CMEE error mapping is required. */
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                       }
-
-                       /* Free tokens */
-                       tcore_at_tok_free(tokens);
-               }
-
-               resp.id =   tcore_call_object_get_id((CallObject*)user_data);
-
-               /* Send Response to TAPI */
-               tcore_user_request_send_response(ur, TRESP_CALL_ANSWER, sizeof(struct tresp_call_answer), &resp);
-       }
-       else {
-               err("User Request is NULL");
-       }
-
-       dbg("Exit");
-       return;
-}
-
-
-static void on_confirmation_call_reject(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       UserRequest *ur = NULL;
-
-       GSList *tokens = NULL;
-       const char *line = NULL;
-
-       const TcoreATResponse* response = data;
-       struct tresp_call_answer resp;
-
-       int error;
-       dbg("Entry");
-
-       ur = tcore_pending_ref_user_request(p);
-       if (ur) {
-               if (response->success > 0) {
-                       dbg("RESPONSE OK");
-                       resp.err = TCORE_RETURN_SUCCESS;
-               }
-               else {
-                       dbg("RESPONSE NOT OK");
-
-                       line = (const char*)response->final_response;
-                       tokens = tcore_at_tok_new(line);
-
-                       if (g_slist_length(tokens) < 1) {
-                                       err("Unspecified error cause OR string corrupted");
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                       }
-                       else {
-                               error = atoi(g_slist_nth_data(tokens, 0));
-
-                               /* TODO: CMEE error mapping is required. */
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                       }
-
-                       /* Free tokens */
-                       tcore_at_tok_free(tokens);
-               }
-
-               resp.id =   tcore_call_object_get_id((CallObject*)user_data);
-
-               /* Send Response to TAPI */
-               tcore_user_request_send_response(ur, TRESP_CALL_ANSWER, sizeof(struct tresp_call_answer), &resp);
-       }
-       else {
-               err("User Request is NULL");
-       }
-
-       dbg("Exit");
-       return;
-}
-
-static void on_confirmation_call_replace(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       UserRequest *ur = NULL;
-
-       GSList *tokens = NULL;
-       const char *line = NULL;
-
-       const TcoreATResponse* response = data;
-       struct tresp_call_answer resp;
-
-       int error;
-       dbg("Entry");
-
-       ur = tcore_pending_ref_user_request(p);
-       if (ur) {
-               if (response->success > 0) {
-                       dbg("RESPONSE OK");
-                       resp.err = TCORE_RETURN_SUCCESS;
-               }
-               else {
-                       dbg("RESPONSE NOT OK");
-
-                       line = (const char*)response->final_response;
-                       tokens = tcore_at_tok_new(line);
-
-                       if (g_slist_length(tokens) < 1) {
-                               err("Unspecified error cause OR string corrupted");
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                       }
-                       else {
-                               error = atoi(g_slist_nth_data(tokens, 0));
-
-                               /* TODO: CMEE error mapping is required. */
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                       }
-
-                       /* Free tokens */
-                       tcore_at_tok_free(tokens);
-               }
-
-               resp.id =   tcore_call_object_get_id((CallObject*)user_data);
-
-               /* Send Response to TAPI */
-               tcore_user_request_send_response(ur, TRESP_CALL_ANSWER, sizeof(struct tresp_call_answer), &resp);
-       }
-       else {
-               dbg("User Request is NULL");
-       }
-
-       dbg("Exit");
-       return;
-}
-
-static void on_confirmation_call_hold_and_accept(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       CoreObject *o = NULL;
-       UserRequest *ur = NULL;
-
-       GSList *tokens = NULL;
-       const char *line = NULL;
-
-       const TcoreATResponse* response = data;
-       struct tresp_call_answer resp;
-
-       int error;
-       dbg("Entry");
-
-       o  = tcore_pending_ref_core_object(p);
-       ur = tcore_pending_ref_user_request(p);
-       resp.id  =  tcore_call_object_get_id((CallObject*)user_data);
-
-       if (ur) {
-               if (response->success > 0) {
-                       dbg("RESPONSE OK");
-                       resp.err = TCORE_RETURN_SUCCESS;
-               }
-               else {
-                       err("RESPONSE NOT OK");
-
-                       line = (const char*)response->final_response;
-                       tokens = tcore_at_tok_new(line);
-
-                       if (g_slist_length(tokens) < 1) {
-                               err("Unspecified error cause OR string corrupted");
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                       }
-                       else {
-                               error = atoi(g_slist_nth_data(tokens, 0));
-
-                               /* TODO: CMEE error mapping is required. */
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                       }
-
-                       /* Free tokens */
-                       tcore_at_tok_free(tokens);
-               }
-
-               /* Send response to TAPI */
-               tcore_user_request_send_response(ur, TRESP_CALL_ANSWER, sizeof(struct tresp_call_answer), &resp);
-               if (!resp.err) {
-                       GSList *l = 0;
-                       CallObject *co = NULL;
-
-                       /* Active Call */
-                       l = tcore_call_object_find_by_status(o, TCORE_CALL_STATUS_ACTIVE);
-                       if (!l) {
-                               err("Can't find active Call");
-                               return;
-                       }
-
-                       co = (CallObject*)l->data;
-                       if (!co) {
-                               err("Can't get active Call object");
-                               return;
-                       }
-
-                       /* Set Call Status */
-                       tcore_call_object_set_status(co, TCORE_CALL_STATUS_HELD);
-                       dbg("Call status is set to HELD");
-               }
-       }
-       else {
-               err("User Request is NULL");
-       }
-
-       dbg("Exit");
-       return;
-}
-
-static void _on_confirmation_call_release(TcorePending *p, int data_len, const void *data, void *user_data, int type)
-{
-       CoreObject *o = NULL;
-       UserRequest *ur = NULL;
-       struct tresp_call_end resp;
-       GSList *tokens = NULL;
-       const char *line = NULL;
-       int error;
-
-       const TcoreATResponse* response = data;
-
-       o  = tcore_pending_ref_core_object(p);
-       ur = tcore_pending_ref_user_request(p);
-
-       if (ur) {
-               if (response->success > 0) {
-                       dbg("RESPONSE OK");
-                       resp.err = TCORE_RETURN_SUCCESS;
-               }
-               else {
-                       err("RESPONSE NOT OK");
-
-                       line = (const char*)response->final_response;
-                       tokens = tcore_at_tok_new(line);
-
-                       if (g_slist_length(tokens) < 1) {
-                               err("Unspecified error cause OR string corrupted");
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                       }
-                       else {
-                               error = atoi(g_slist_nth_data(tokens, 0));
-
-                               /* TODO: CMEE error mapping is required. */
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                       }
-                       tcore_at_tok_free(tokens);
-               }
-
-               resp.type = type;
-               resp.id =   tcore_call_object_get_id((CallObject*)user_data);
-               dbg("resp.type = %d  resp.id= %d", resp.type,resp.id);
-
-               /* Send reponse to TAPI */
-               tcore_user_request_send_response(ur, TRESP_CALL_END, sizeof(struct tresp_call_end), &resp);
-       }
-       else {
-               err("User Request is NULL");
-       }
-
-       dbg("Exit");
-       return;
-}
-
-// RESPONSE
-static void on_confirmation_call_endall(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       /* skip response handling - actual result will be handled in on_confirmation_call_release_all */
-       const TcoreATResponse* response = data;
-       dbg("Entry");
-
-       if (response->success > 0) {
-               dbg("RESPONSE OK");
-       }
-       else {
-               err("RESPONSE NOT OK");
-       }
-
-       dbg("Exit");
-       return;
-}
-
-
-static void on_confirmation_call_release_all(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       dbg("Entry");
-       _on_confirmation_call_release(p, data_len, data, user_data, CALL_END_TYPE_ALL);
-
-       return;
-}
-
-
-static void on_confirmation_call_release_specific(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       dbg("Entry");
-       _on_confirmation_call_release(p, data_len, data, user_data, CALL_END_TYPE_DEFAULT);
-
-       return;
-}
-
-static void on_confirmation_call_release_all_active(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       dbg("Entry");
-       _on_confirmation_call_release(p, data_len, data, user_data, CALL_END_TYPE_ACTIVE_ALL);
-
-       return;
-}
-
-static void on_confirmation_call_release_all_held(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       dbg("Entry");
-        _on_confirmation_call_release(p, data_len, data, user_data, CALL_END_TYPE_HOLD_ALL);
-
-        return;
-}
-
-static void _on_confirmation_call(TcorePending *p, int data_len, const void *data, void *user_data, int type)
-{
-       UserRequest *ur = NULL;
-
-       GSList *tokens = NULL;
-       const char *line = NULL;
-
-       const TcoreATResponse *response = NULL;
-
-       int error;
-       dbg("Entry");
-
-       ur = tcore_pending_ref_user_request(p);
-
-       response = (TcoreATResponse *)data;
-
-       if (response->success > 0) {
-               dbg("RESPONSE OK");
-               error = TCORE_RETURN_SUCCESS;
-       }
-       else {
-               err("RESPONSE NOT OK");
-
-               line = (const char*)response->final_response;
-               tokens = tcore_at_tok_new(line);
-
-               if (g_slist_length(tokens) < 1) {
-                       err("Unspecified error cause OR string corrupted");
-                       error = TCORE_RETURN_3GPP_ERROR;
-               }
-               else {
-                       error = atoi(g_slist_nth_data(tokens, 0));
-
-                       /* TODO: CMEE error mapping is required. */
-                       error = TCORE_RETURN_3GPP_ERROR;
-               }
-
-               /* Free tokens */
-               tcore_at_tok_free(tokens);
-       }
-
-       dbg("Response Call type -%d", type);
-       switch(type)
-       {
-               case TRESP_CALL_HOLD:
-               {
-                       struct tresp_call_hold resp;
-
-                       resp.err = error;
-                       resp.id = tcore_call_object_get_id((CallObject*)user_data);
-             dbg("call hold response");
-                       /* Send reponse to TAPI */
-                       tcore_user_request_send_response(ur, TRESP_CALL_HOLD, sizeof(struct tresp_call_hold), &resp);
-               }
-               break;
-               case TRESP_CALL_ACTIVE:
-               {
-                       struct tresp_call_active resp;
-
-                       resp.err = error;
-                       resp.id = tcore_call_object_get_id((CallObject*)user_data);
-            dbg("call active response");
-                       /* Send reponse to TAPI */
-                       tcore_user_request_send_response(ur, TRESP_CALL_ACTIVE, sizeof(struct tresp_call_active), &resp);
-               }
-               break;
-               case TRESP_CALL_JOIN:
-               {
-                       struct tresp_call_join resp;
-
-                       resp.err = error;
-                       resp.id = tcore_call_object_get_id((CallObject*)user_data);
-            dbg("call join response");
-
-                       /* Send reponse to TAPI */
-                       tcore_user_request_send_response(ur, TRESP_CALL_JOIN, sizeof(struct tresp_call_join), &resp);
-               }
-               break;
-               case TRESP_CALL_SPLIT:
-               {
-                       struct tresp_call_split resp;
-
-                       resp.err = error;
-                       resp.id = tcore_call_object_get_id((CallObject*)user_data);
-            dbg("call split response");
-                       /* Send reponse to TAPI */
-                       tcore_user_request_send_response(ur, TRESP_CALL_SPLIT, sizeof(struct tresp_call_split), &resp);
-               }
-               break;
-               case TRESP_CALL_DEFLECT:
-               {
-                       struct tresp_call_deflect resp;
-
-                       resp.err = error;
-                       resp.id = tcore_call_object_get_id((CallObject*)user_data);
-            dbg("call deflect response");
-                       /* Send reponse to TAPI */
-                       tcore_user_request_send_response(ur, TRESP_CALL_DEFLECT, sizeof(struct tresp_call_deflect), &resp);
-               }
-
-               break;
-               case TRESP_CALL_TRANSFER:
-               {
-                       struct tresp_call_transfer resp;
-
-                       resp.err = error;
-                       resp.id = tcore_call_object_get_id((CallObject*)user_data);
-            dbg("call transfer response");
-                       /* Send reponse to TAPI */
-                       tcore_user_request_send_response(ur, TRESP_CALL_TRANSFER, sizeof(struct tresp_call_transfer), &resp);
-               }
-               break;
-               case TRESP_CALL_SEND_DTMF:
-               {
-                       struct tresp_call_dtmf resp;
-
-                       resp.err = error;
-            dbg("call dtmf response");
-                       /* Send reponse to TAPI */
-                       tcore_user_request_send_response(ur, TRESP_CALL_SEND_DTMF, sizeof(struct tresp_call_dtmf), &resp);
-               }
-               break;
-               default:
-               {
-                       dbg("type not supported");
-                       return;
-               }
-       }
-
-       if ((type == TRESP_CALL_HOLD)
-               || (type == TRESP_CALL_ACTIVE)
-               || (type == TRESP_CALL_JOIN)
-               || (type == TRESP_CALL_SPLIT)) {
-               if (!error) {
-                       CoreObject *o = NULL;
-                       gboolean *eflag = g_new0(gboolean, 1);
-
-                       o  = tcore_pending_ref_core_object(p);
-                       *eflag = FALSE;
-
-                       dbg("Calling _call_list_get");
-                       _call_list_get(o, eflag);
-               }
-       }
-
-       dbg("Exit");
-       return;
-}
-
-static void on_confirmation_call_hold(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       dbg("Entry");
-       _on_confirmation_call(p, data_len, data, user_data, TRESP_CALL_HOLD);
-
-       return;
-}
-
-static void on_confirmation_call_active(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       dbg("Entry");
-       _on_confirmation_call(p, data_len, data, user_data, TRESP_CALL_ACTIVE);
-
-       return;
-}
-
-static void on_confirmation_call_join(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       dbg("Entry");
-       _on_confirmation_call(p, data_len, data, user_data, TRESP_CALL_JOIN);
-
-       return;
-}
-
-static void on_confirmation_call_split(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       dbg("Entry");
-       _on_confirmation_call(p, data_len, data, user_data, TRESP_CALL_SPLIT);
-
-       return;
-}
-
-static void on_confirmation_call_deflect(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       dbg("Entry");
-       _on_confirmation_call(p, data_len, data, user_data, TRESP_CALL_DEFLECT);
-
-       return;
-}
-
-static void on_confirmation_call_transfer(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       dbg("Entry");
-       _on_confirmation_call(p, data_len, data, user_data, TRESP_CALL_TRANSFER);
-
-       return;
-}
-
-static void on_confirmation_call_dtmf(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       dbg("Entry");
-       _on_confirmation_call(p, data_len, data, user_data, TRESP_CALL_SEND_DTMF);
-
-       return;
-}
-
-static void _on_confirmation_dtmf_tone_duration(TcorePending * p, int data_len, const void * data, void * user_data)
-{
-       GSList *tokens = NULL;
-       const char *line = NULL;
-
-       const TcoreATResponse* response = data;
-
-       int error;
-       dbg("Entry");
-
-       if (response->success > 0) {
-               dbg("RESPONSE OK");
-               error  = TCORE_RETURN_SUCCESS;
-       }
-       else {
-               err("RESPONSE NOT OK");
-
-               line = (const char*)response->final_response;
-               tokens = tcore_at_tok_new(line);
-
-               if (g_slist_length(tokens) < 1) {
-                       err("err cause not specified or string corrupted");
-                       error = TCORE_RETURN_3GPP_ERROR;
-               }
-               else {
-                       error = atoi(g_slist_nth_data(tokens, 0));
-
-                       /* TODO: CMEE error mapping is required. */
-               }
-
-               /* Free tokens */
-               tcore_at_tok_free(tokens);
-       }
-
-       dbg("Set dtmf tone duration response - %d", error);
-       return;
-}
-
-static void on_confirmation_call_swap(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       CoreObject *o = NULL;
-       UserRequest *ur = NULL;
-
-       const TcoreATResponse* response = data;
-       struct tresp_call_swap resp;
-
-       GSList *tokens = NULL;
-       const char *line = NULL;
-       dbg("Entry");
-
-       o  = tcore_pending_ref_core_object(p);
-       ur = tcore_pending_ref_user_request(p);
-
-       if (ur) {
-               if (response->success > 0) {
-                       dbg("RESPONSE OK");
-                       resp.err = TCORE_RETURN_SUCCESS;
-               }
-               else {
-                       err("RESPONSE NOT OK");
-
-                       line = (const char*)response->final_response;
-                       tokens = tcore_at_tok_new(line);
-
-                       if (g_slist_length(tokens) < 1) {
-                               err("err cause not specified or string corrupted");
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                       }
-                       else {
-                               resp.err = atoi(g_slist_nth_data(tokens, 0));
-
-                               /* TODO: CMEE error mapping is required. */
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                       }
-
-                       /* Free tokens */
-                       tcore_at_tok_free(tokens);
-               }
-
-               resp.id = tcore_call_object_get_id((CallObject*)user_data);
-               dbg("resp.id = %d", resp.id);
-
-               /* Send response to TAPI */
-               tcore_user_request_send_response(ur, TRESP_CALL_SWAP, sizeof(struct tresp_call_swap), &resp);
-               if (!resp.err) {
-                       GSList *active = NULL;
-                       GSList *held = NULL;
-                       CallObject *co = NULL;
-                       gboolean *eflag = NULL;
-
-                       held = tcore_call_object_find_by_status(o, TCORE_CALL_STATUS_HELD);
-                       if (!held) {
-                               err("Can't find held Call");
-                               return;
-                       }
-
-                       active = tcore_call_object_find_by_status(o, TCORE_CALL_STATUS_ACTIVE);
-                       if (!active) {
-                               dbg("Can't find active Call");
-                               return;
-                       }
-
-                       while (held) {
-                               co = (CallObject*)held->data;
-                               if (!co) {
-                                       err("Can't get held Call object");
-                                       return;
-                               }
-
-                               resp.id =  tcore_call_object_get_id(co);
-
-                               /* Send response to TAPI */
-                               tcore_user_request_send_response(ur, TRESP_CALL_ACTIVE, sizeof(struct tresp_call_active), &resp);
-
-                               held = g_slist_next(held);
-                       }
-
-                       while (active) {
-                               co = (CallObject*)active->data;
-                               if (!co) {
-                                       err("[ error ] can't get active call object");
-                                       return;
-                               }
-
-                               resp.id = tcore_call_object_get_id(co);
-
-                               /* Send response to TAPI */
-                               tcore_user_request_send_response(ur, TRESP_CALL_HOLD, sizeof(struct tresp_call_hold), &resp);
-
-                               active = g_slist_next(active);
-                       }
-
-                       eflag = g_new0(gboolean, 1);
-                       *eflag = FALSE;
-
-                       dbg("calling _call_list_get");
-                       _call_list_get(o, eflag);
-               }
-       }
-       else {
-               err("User Request is NULL");
-       }
-
-       dbg("Exit");
-       return;
-}
-
-static void on_confirmation_call_set_source_sound_path(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       CoreObject *o = NULL;
-       UserRequest *ur = NULL;
-
-       GSList *tokens = NULL;
-       const char *line = NULL;
-
-       const TcoreATResponse* response = data;
-       char *pResp = NULL;
-       struct tresp_call_sound_set_path resp;
-
-       int error;
-       dbg("Entry");
-
-       o  = tcore_pending_ref_core_object(p);
-       ur = tcore_pending_ref_user_request(p);
-
-       // +XDRV: <group_id>,<function_id>,<xdrv_result>[,<response_n>]\ 3
-       if (!response) {
-               err("Input data is NULL");
-               return;
-       }
-
-       if (response->success > 0) {
-               dbg("RESPONSE OK");
-
-               line  = (const char*) (((GSList*)response->lines)->data);
-               tokens = tcore_at_tok_new(line);
-
-               pResp = g_slist_nth_data(tokens, 0);
-               if(!g_slist_nth_data(tokens, 0)) {
-                       err("group_id is missing");
-                       resp.err = TCORE_RETURN_3GPP_ERROR;
-                       goto OUT;
-               }
-
-               if(!g_slist_nth_data(tokens, 1)) {
-                       err(" function_id is missing");
-                       resp.err = TCORE_RETURN_3GPP_ERROR;
-                       goto OUT;
-               }
-
-               pResp  = g_slist_nth_data(tokens, 2);
-
-               if(pResp) {
-                       error = atoi(pResp);
-                       if(0 == error) {
-                               dbg("Response is Success");
-                               resp.err = TCORE_RETURN_SUCCESS;
-                       }
-                       else {
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                       }
-               }
-OUT:
-               /* Free tokens */
-               tcore_at_tok_free(tokens);
-       }
-       else {
-               dbg("RESPONSE NOT OK");
-
-               line = (const char*)response->final_response;
-               tokens = tcore_at_tok_new(line);
-
-               if (g_slist_length(tokens) < 1) {
-                       err("err cause not specified or string corrupted");
-                       resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-               else {
-                       error = atoi(g_slist_nth_data(tokens, 0));
-
-                       /* TODO: CMEE error mapping is required. */
-                       resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-
-               /* Free tokens */
-               tcore_at_tok_free(tokens);
-       }
-
-       if (ur) {
-               if(resp.err != TCORE_RETURN_SUCCESS) {  /* Send only failed notification . success notification send when destination device is set. */
-                       /* Send notification to TAPI */
-                       tcore_user_request_send_response(ur, TRESP_CALL_SET_SOUND_PATH, sizeof(struct tresp_call_sound_set_path), &resp);
-            setsoundpath = TRUE;
-               }
-       }
-       else {
-               err("User Request is NULL");
-       }
-
-       dbg("Exit");
-       return;
-}
-
-static void on_confirmation_call_set_destination_sound_path(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       CoreObject *o = NULL;
-       UserRequest *ur = NULL;
-
-       GSList *tokens = NULL;
-       const char *line = NULL;
-       char *pResp = NULL ;
-
-       struct tresp_call_sound_set_path resp;
-
-       const TcoreATResponse* response = data;
-
-       int error;
-       dbg("Entry");
-
-       o  = tcore_pending_ref_core_object(p);
-       ur = tcore_pending_ref_user_request(p);
-
-
-       // +XDRV: <group_id>,<function_id>,<xdrv_result>[,<response_n>]\ 3
-
-       if (!response) {
-               err("Input data is NULL");
-               return;
-       }
-
-       if (ur) {
-               if (response->success > 0) {
-                       dbg("RESPONSE OK");
-
-                       line  = (const char*) (((GSList*)response->lines)->data);
-                       tokens = tcore_at_tok_new(line);
-
-                       pResp = g_slist_nth_data(tokens, 0);
-                       if(!g_slist_nth_data(tokens, 0)) {
-                               dbg("group_id is missing");
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                               goto OUT;
-                       }
-
-                       if(!g_slist_nth_data(tokens, 1)) {
-                               dbg("function_id is missing");
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                               goto OUT;
-                       }
-
-                       pResp  = g_slist_nth_data(tokens, 2);
-
-                       if(pResp) {
-                               error = atoi(pResp);
-
-                               if(0 == error) {
-                                       dbg("Response is Success");
-                                       resp.err = TCORE_RETURN_SUCCESS;
-                               }
-                               else {
-                                       resp.err = TCORE_RETURN_3GPP_ERROR;
-                               }
-                       }
-
-OUT:
-                       /* Free tokens */
-                       tcore_at_tok_free(tokens);
-               }
-               else {
-                       dbg("RESPONSE NOT OK");
-
-                       line = (const char*)response->final_response;
-                       tokens = tcore_at_tok_new(line);
-
-                       if (g_slist_length(tokens) < 1) {
-                               err("err cause not specified or string corrupted");
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                       }
-                       else {
-                               error = atoi(g_slist_nth_data(tokens, 0));
-                               /* TODO: CMEE error mapping is required. */
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                       }
-
-                       /* Free tokens */
-                       tcore_at_tok_free(tokens);
-               }
-
-        if(setsoundpath == TRUE)
-        {
-            setsoundpath = FALSE;
-        }
-        else
-        {
-                   /* Send response to TAPI */
-                   tcore_user_request_send_response(ur, TRESP_CALL_SET_SOUND_PATH, sizeof(struct tresp_call_sound_set_path), &resp);
-        }
-       }
-       else {
-               dbg("User Request is NULL");
-       }
-
-       dbg("Exit");
-       return;
-}
-
-static void on_confirmation_call_set_source_sound_volume_level(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       CoreObject *o = NULL;
-       UserRequest *ur = NULL;
-
-       GSList *tokens = NULL;
-       const char *line = NULL;
-
-       const TcoreATResponse* response = data;
-       char *pResp = NULL;
-       struct tresp_call_sound_set_volume_level resp;
-
-       int error;
-       dbg("Entry");
-
-       o  = tcore_pending_ref_core_object(p);
-       ur = tcore_pending_ref_user_request(p);
-
-       // +XDRV: <group_id>,<function_id>,<xdrv_result>[,<response_n>]\ 3
-
-       if (!response) {
-               err("Input data is NULL");
-               return;
-       }
-
-       if (response->success > 0) {
-               dbg("RESPONSE OK");
-
-               line  = (const char*) (((GSList*)response->lines)->data);
-               tokens = tcore_at_tok_new(line);
-
-               pResp = g_slist_nth_data(tokens, 0);
-               if(!g_slist_nth_data(tokens, 0)) {
-                       err("group_id is missing");
-                       resp.err = TCORE_RETURN_3GPP_ERROR;
-                       goto OUT;
-               }
-
-               if(!g_slist_nth_data(tokens, 1)) {
-                       err("function_id is missing");
-                       resp.err = TCORE_RETURN_3GPP_ERROR;
-                       goto OUT;
-               }
-
-               pResp  = g_slist_nth_data(tokens, 2);
-               if(pResp) {
-                       error = atoi(pResp);
-
-                       if(0 == error) {
-                               dbg("Response is Success ");
-                               resp.err = TCORE_RETURN_SUCCESS;
-                       }
-                       else {
-                       resp.err = TCORE_RETURN_3GPP_ERROR;
-                       }
-               }
-
-OUT:
-               /* Free tokens */
-               tcore_at_tok_free(tokens);
-       }
-       else {
-               dbg("RESPONSE NOT OK");
-
-               line = (const char*)response->final_response;
-               tokens = tcore_at_tok_new(line);
-
-               if (g_slist_length(tokens) < 1) {
-                       err("err cause not specified or string corrupted");
-                       resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-               else {
-                       error = atoi(g_slist_nth_data(tokens, 0));
-
-                       /* TODO: CMEE error mapping is required. */
-                       resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-
-               /* Free tokens */
-               tcore_at_tok_free(tokens);
-       }
-
-       if (ur) {
-               if(resp.err && soundvolume == FALSE) {          /* Send only failed notification . success notification send when destination device is set. */
-                       /* Send reposne to TAPI */
-                       tcore_user_request_send_response(ur, TRESP_CALL_SET_SOUND_VOLUME_LEVEL, sizeof(struct tresp_call_sound_set_volume_level), &resp);
-            soundvolume = TRUE;
-               }
-       }
-       else {
-               err("User Request is NULL");
-       }
-
-       dbg("Exit");
-       return;
-}
-
-
-static void on_confirmation_call_set_destination_sound_volume_level(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       CoreObject *o = NULL;
-       UserRequest *ur = NULL;
-
-       GSList *tokens = NULL;
-       const char *line = NULL;
-
-       char *pResp = NULL;
-       const TcoreATResponse* response = data;
-       struct tresp_call_sound_set_volume_level resp;
-
-       int error;
-       dbg("Entry");
-
-       o  = tcore_pending_ref_core_object(p);
-       ur = tcore_pending_ref_user_request(p);
-
-       // +XDRV: <group_id>,<function_id>,<xdrv_result>[,<response_n>]\ 3
-
-       if (!response) {
-               err("Input data is NULL");
-               return;
-       }
-
-       if (ur) {
-               if (response->success > 0) {
-                       dbg("RESPONSE OK");
-
-                       line  = (const char*) (((GSList*)response->lines)->data);
-                       tokens = tcore_at_tok_new(line);
-
-                       pResp = g_slist_nth_data(tokens, 0);
-                       if(!g_slist_nth_data(tokens, 0)) {
-                               err("group_id is missing");
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                               goto OUT;
-                       }
-
-                       if(!g_slist_nth_data(tokens, 1)) {
-                               err("function_id is missing");
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                               goto OUT;
-                       }
-
-                       pResp  = g_slist_nth_data(tokens, 2);
-
-                       if(pResp) {
-                               error = atoi(pResp);
-
-                               if(0 == error) {
-                                       dbg("Response is Success");
-                                       resp.err = TCORE_RETURN_SUCCESS;
-                               }
-                               else {
-                                       resp.err = TCORE_RETURN_3GPP_ERROR;
-                               }
-                       }
-
-OUT:
-                       /* Free tokens */
-                       tcore_at_tok_free(tokens);
-               }
-               else {
-                       dbg("RESPONSE NOT OK");
-
-                       line = (const char*)response->final_response;
-                       tokens = tcore_at_tok_new(line);
-
-                       if (g_slist_length(tokens) < 1) {
-                               err("err cause not specified or string corrupted");
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                       }
-                       else {
-                               error = atoi(g_slist_nth_data(tokens, 0));
-
-                               /* TODO: CMEE error mapping is required. */
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                       }
-
-                       tcore_at_tok_free(tokens);
-               }
-
-        if(soundvolume == TRUE)
-        {
-            soundvolume = FALSE;
-        }
-        else
-        {
-                   /* Send reposne to TAPI */
-                   tcore_user_request_send_response(ur, TRESP_CALL_SET_SOUND_VOLUME_LEVEL, sizeof(struct tresp_call_sound_set_volume_level), &resp);
-        }
-       }
-       else {
-               err("User Request is NULL");
-       }
-
-       dbg("Exit");
-       return;
-}
-
-
-static void on_confirmation_call_mute(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       CoreObject *o = NULL;
-       UserRequest *ur = NULL;
-
-       GSList *tokens = NULL;
-       const char *line = NULL;
-    char *pResp  = NULL;
-
-       struct tresp_call_mute resp;
-       const TcoreATResponse* response = data;
-
-       int error;
-       dbg("Entry");
-
-       o  = tcore_pending_ref_core_object(p);
-       ur = tcore_pending_ref_user_request(p);
-
-    if (!response) {
-               err("Input data is NULL");
-               return;
-       }
-
-       if (response->success > 0) {
-               dbg("RESPONSE OK");
-
-               line  = (const char*) (((GSList*)response->lines)->data);
-               tokens = tcore_at_tok_new(line);
-
-               pResp = g_slist_nth_data(tokens, 0);
-               if(!g_slist_nth_data(tokens, 0)) {
-                       err("group_id is missing");
-                       resp.err = TCORE_RETURN_3GPP_ERROR;
-                       goto OUT;
-               }
-
-               if(!g_slist_nth_data(tokens, 1)) {
-                       err(" function_id is missing");
-                       resp.err = TCORE_RETURN_3GPP_ERROR;
-                       goto OUT;
-               }
-
-               pResp  = g_slist_nth_data(tokens, 2);
-
-               if(pResp) {
-                       error = atoi(pResp);
-                       if(0 == error) {
-                               dbg("Response is Success");
-                               resp.err = TCORE_RETURN_SUCCESS;
-                       }
-                       else {
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                       }
-               }
-OUT:
-               /* Free tokens */
-               tcore_at_tok_free(tokens);
-       }
-       else {
-               dbg("RESPONSE NOT OK");
-
-               line = (const char*)response->final_response;
-               tokens = tcore_at_tok_new(line);
-
-               if (g_slist_length(tokens) < 1) {
-                       err("err cause not specified or string corrupted");
-                       resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-               else {
-                       error = atoi(g_slist_nth_data(tokens, 0));
-
-                       /* TODO: CMEE error mapping is required. */
-                       resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-
-               /* Free tokens */
-               tcore_at_tok_free(tokens);
-       }
-
-       if (ur)
-    {
-                  tcore_user_request_send_response(ur, TRESP_CALL_MUTE, sizeof(struct tresp_call_mute), &resp);
-    }
-       else
-    {
-               err("User Request is NULL");
-       }
-
-       dbg("Exit");
-       return;
-}
-
-static void on_confirmation_call_unmute(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse *response = NULL;
-       struct tresp_call_unmute resp;
-
-       GSList *tokens = NULL;
-       const char *line = NULL;
-
-       UserRequest *ur = NULL;
-    char *pResp  = NULL;
-
-       int error;
-       dbg("Entry");
-
-       response = (TcoreATResponse *)data;
-       ur = tcore_pending_ref_user_request(p);
-
-     if (!response) {
-               err("Input data is NULL");
-               return;
-       }
-
-       if (response->success > 0) {
-               dbg("RESPONSE OK");
-
-               line  = (const char*) (((GSList*)response->lines)->data);
-               tokens = tcore_at_tok_new(line);
-
-               pResp = g_slist_nth_data(tokens, 0);
-               if(!g_slist_nth_data(tokens, 0)) {
-                       err("group_id is missing");
-                       resp.err = TCORE_RETURN_3GPP_ERROR;
-                       goto OUT;
-               }
-
-               if(!g_slist_nth_data(tokens, 1)) {
-                       err(" function_id is missing");
-                       resp.err = TCORE_RETURN_3GPP_ERROR;
-                       goto OUT;
-               }
-
-               pResp  = g_slist_nth_data(tokens, 2);
-
-               if(pResp) {
-                       error = atoi(pResp);
-                       if(0 == error) {
-                               dbg("Response is Success");
-                               resp.err = TCORE_RETURN_SUCCESS;
-                       }
-                       else {
-                               resp.err = TCORE_RETURN_3GPP_ERROR;
-                       }
-               }
-OUT:
-               /* Free tokens */
-               tcore_at_tok_free(tokens);
-       }
-       else {
-               dbg("RESPONSE NOT OK");
-
-               line = (const char*)response->final_response;
-               tokens = tcore_at_tok_new(line);
-
-               if (g_slist_length(tokens) < 1) {
-                       err("err cause not specified or string corrupted");
-                       resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-               else {
-                       error = atoi(g_slist_nth_data(tokens, 0));
-
-                       /* TODO: CMEE error mapping is required. */
-                       resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-
-               /* Free tokens */
-               tcore_at_tok_free(tokens);
-       }
-
-       if (ur)
-    {
-                  tcore_user_request_send_response(ur, TRESP_CALL_UNMUTE, sizeof(struct tresp_call_unmute), &resp);
-    }
-       else
-    {
-               err("User Request is NULL");
-       }
-
-       dbg("Exit");
-       return;
-}
-
-// RESPONSE
-static void on_response_call_list_get(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       TcorePlugin *plugin = NULL;
-       CoreObject *o = NULL;
-       CallObject *co = NULL;
-
-       struct CLCC_call_t *call_list = NULL;
-
-       gboolean *event_flag = (gboolean*)user_data;
-       const TcoreATResponse *response = data;
-       GSList *pRespData = NULL;
-
-       char *line = NULL;
-
-       int i = 0, countCalls = 0, countValidCalls = 0;
-       int error = 0;
-       dbg("Entry");
-
-       plugin = tcore_pending_ref_plugin(p);
-       o = tcore_pending_ref_core_object(p);
-
-       if(response->success > 0) {
-               dbg("RESPONCE OK");
-               if(response->lines) {
-                       pRespData =  (GSList*)response->lines;
-                       countCalls = g_slist_length(pRespData);
-                       dbg("Total records : %d",countCalls);
-               }
-               else {
-                       countCalls  = 0;
-                       err("No active status - return to user");
-               }
-
-               if (0 == countCalls) {
-                       err("Call count is zero");
-                       return;
-               }
-
-               call_list = g_new0(struct CLCC_call_t, countCalls);
-
-               for (countValidCalls = 0; pRespData != NULL ; pRespData = pRespData->next) {
-                       line  = (char*)(pRespData->data);
-
-                       error = _callFromCLCCLine(line, call_list + countValidCalls);
-                       if (0 != error) {
-                               continue;
-                       }
-
-                       co = tcore_call_object_find_by_id(o, call_list[i].info.id);
-                       if (!co) {
-                               co = tcore_call_object_new(o, call_list[i].info.id);
-                               if (!co) {
-                                       err("error : tcore_call_object_new [ id : %d ]", call_list[i].info.id);
-                                       continue;
-                               }
-                       }
-
-                       /* Call set parameters */
-                       tcore_call_object_set_type(co, tizen_call_type(call_list[i].info.type));
-                       tcore_call_object_set_direction(co, call_list[i].info.direction);
-                       tcore_call_object_set_multiparty_state(co, _call_is_in_mpty(call_list[i].info.mpty));
-                       tcore_call_object_set_cli_info(co, CALL_CLI_MODE_DEFAULT, call_list[i].number);
-                       tcore_call_object_set_active_line(co, 0);
-
-                       if (*event_flag) {
-                               dbg("Call status before calling _call_branch_by_status() : (%d)", call_list[i].info.status);
-                               _call_branch_by_status(plugin, co, call_list[i].info.status);
-                       }
-                       else {
-                               /* Set Status */
-                               tcore_call_object_set_status(co, call_list[i].info.status);
-
-                               dbg("Call id : (%d)", call_list[i].info.id);
-                               dbg("Call direction : (%d)", call_list[i].info.direction);
-                               dbg("Call type : (%d)", call_list[i].info.type);
-                               dbg("Call mpty : (%d)", call_list[i].info.mpty);
-                               dbg("Call number : (%s)", call_list[i].number);
-                               dbg("Call status : (%d)", call_list[i].info.status);
-                       }
-               }
-
-               /* Free Call list */
-               g_free(call_list);
-       }
-
-       /* Free User data */
-       g_free(event_flag);
-
-       dbg("Exit");
-       return;
-}
-
-
-static int _callFromCLCCLine(char *line, struct CLCC_call_t*p_call)
-{
-       //+CLCC: 1,0,2,0,0,\"18005551212\",145
-       //[+CLCC: <id1>, <dir>, <stat>, <mode>,<mpty>[,<number>,<type>[,<alpha>[,<priority>]]]
-       int state;
-       int mode;
-       int isMT;
-       char *num = NULL;
-    unsigned int numcount,tempcount = 0;
-
-       GSList *tokens = NULL;
-       char *pResp = NULL;
-       dbg("Entry");
-
-       tokens = tcore_at_tok_new(line);
-
-       /* parse <id> */
-       pResp = g_slist_nth_data(tokens, 0);
-       if(!pResp) {
-               err("InValid ID");
-               goto ERROR;
-       }
-       p_call->info.id  = atoi(pResp);
-       dbg("id : [%d]\n", p_call->info.id);
-
-       /* parse <dir> */
-       pResp = g_slist_nth_data(tokens, 1);
-       if(!pResp) {
-               err("InValid Dir");
-               goto ERROR;
-       }
-       isMT = atoi(pResp);
-       if(0 == isMT) {
-               p_call->info.direction = TCORE_CALL_DIRECTION_OUTGOING;
-       }
-       else {
-               p_call->info.direction = TCORE_CALL_DIRECTION_INCOMING;
-       }
-       dbg("Direction : [ %d ]\n", p_call->info.direction);
-
-       /* parse <stat> */
-       pResp = g_slist_nth_data(tokens, 2);
-       if(!pResp) {
-               err("InValid Stat");
-               goto ERROR;
-       }
-       state = atoi(pResp);
-       dbg("Call state : %d", state);
-       switch(state)
-       {
-               case 0: //active
-                       p_call->info.status = TCORE_CALL_STATUS_ACTIVE;
-               break;
-               case 1:
-                       p_call->info.status = TCORE_CALL_STATUS_HELD;
-               break;
-               case 2:
-                       p_call->info.status = TCORE_CALL_STATUS_DIALING;
-               break;
-               case 3:
-                       p_call->info.status = TCORE_CALL_STATUS_ALERT;
-               break;
-               case 4:
-                       p_call->info.status = TCORE_CALL_STATUS_INCOMING;
-               break;
-               case 5:
-                       p_call->info.status = TCORE_CALL_STATUS_WAITING;
-               break;
-       }
-       dbg("Status : [%d]\n", p_call->info.status);
-
-       /* parse <mode> */
-       pResp = g_slist_nth_data(tokens, 3);
-       if(!pResp) {
-               err("InValid Mode");
-               goto ERROR;
-       }
-       mode = atoi(pResp);
-       switch(mode)
-       {
-               case 0:
-                       p_call->info.type       = TCORE_CALL_TYPE_VOICE;
-               break;
-               case 1:
-                       p_call->info.type       = TCORE_CALL_TYPE_VIDEO;
-               break;
-               default:        // only Voice/VT call is supported in CS. treat other unknown calls as error
-                       dbg("invalid type : [%d]\n", mode);
-                       goto ERROR;
-       }
-       dbg("Call type : [%d]\n", p_call->info.type);
-
-       /* parse <mpty> */
-       pResp  = g_slist_nth_data(tokens, 4);
-       if(!pResp) {
-               err("InValid Mpty");
-               goto ERROR;
-       }
-
-       p_call->info.mpty = atoi(pResp);
-       dbg("Mpty : [ %d ]\n",  p_call->info.mpty);
-
-       /* parse <num> */
-       num = g_slist_nth_data(tokens, 5);
-       dbg("Incoming number - %s and its len  - %d", num, strlen(num));
-
-       /* tolerate null here */
-       if (!num) {
-               err("Number is NULL");
-               goto ERROR;
-       }
-
-       for (numcount  = 0; numcount < strlen(num); numcount++, tempcount++)
-       {
-               if(num[numcount] == '\"') {
-                       p_call->number[tempcount] =     num[numcount+1];
-                       numcount++;
-
-               }
-               else{
-                               p_call->number[tempcount] =     num[numcount];
-
-               }
-       }
-
-       p_call->number[tempcount] = '\0';
-
-
-
-       //memcpy(p_call->number, num, strlen(num));
-       dbg("number after copying into CLCC [ %s ]\n", p_call->number);
-
-       p_call->info.num_len = strlen(num);
-       dbg("num_len : [0x%x]\n", p_call->info.num_len);
-
-       /* parse <num type> */
-       pResp = g_slist_nth_data(tokens, 6);
-       if(!pResp) {
-               dbg("InValid Num type");
-               goto ERROR;
-       }
-       p_call->info.num_type = atoi(pResp);
-       dbg("num_type : [0x%x]\n", p_call->info.num_type);
-
-       /* Free tokens */
-       tcore_at_tok_free(tokens);
-
-       dbg("Exit");
-       return 0;
-
-ERROR:
-       err("Invalid CLCC line");
-
-       /* Free tokens */
-       tcore_at_tok_free(tokens);
-
-       err("Exit");
-       return -1;
-}
-
-// NOTIFICATION
-static void on_notification_call_waiting(CoreObject *o, const void *data, void *user_data)
-{
-    GSList *tokens = NULL;
-       const char *line = NULL;
-    char *pId;
-    int call_id;
-    gboolean *eflag;
-    GSList* pList = NULL;
-    CallObject *co = NULL, *dupco = NULL;
-
-    dbg("function entrance");
-    // check call with waiting status already exist
-       pList = tcore_call_object_find_by_status(o, TCORE_CALL_STATUS_WAITING);
-
-       if(pList != NULL)
-    {
-               dbg("[error]Waiting call already exist. skip");
-               return;
-       }
-    // check call with incoming status already exist
-       pList = tcore_call_object_find_by_status(o, TCORE_CALL_STATUS_INCOMING);
-
-       if(pList != NULL)
-    {
-               dbg("[error]incoming call already exist. skip");
-               return;
-       }
-    line  = (char*)data;
-    tokens = tcore_at_tok_new(line);
-
-    pId = g_slist_nth_data(tokens, 0);
-    if(!pId)
-    {
-        dbg("[error]:Call id is missing from +XCALLSTAT indication");
-        return;
-    }
-
-    call_id  = atoi(pId);
-
-    dupco = tcore_call_object_find_by_id(o, call_id);
-       if(dupco!= NULL)
-    {
-               dbg("co with same id already exist. skip");
-               return;
-       }
-    co = tcore_call_object_new(o, call_id);
-    if (!co)
-    {
-        dbg("[ error ] co is NULL");
-        return ;
-    }
-
-    tcore_at_tok_free(tokens);
-
-    eflag = g_new0(gboolean, 1);
-       *eflag = TRUE;
-       dbg("calling _call_list_get");
-    _call_list_get(o, eflag);
-
-}
-
-static void on_notification_call_incoming(CoreObject *o, const void *data, void *user_data)
-{
-    GSList *tokens = NULL;
-       const char *line = NULL;
-    char *pId;
-    int call_id;
-    gboolean *eflag;
-    GSList* pList = NULL;
-    CallObject *co = NULL, *dupco = NULL;
-
-    dbg("function entrance");
-    // check call with incoming status already exist
-       pList = tcore_call_object_find_by_status(o, TCORE_CALL_STATUS_INCOMING);
-
-       if(pList != NULL)
-    {
-               dbg("incoming call already exist. skip");
-               return;
-       }
-
-    line  = (char*)data;
-    tokens = tcore_at_tok_new(line);
-
-    pId = g_slist_nth_data(tokens, 0);
-    if(!pId)
-    {
-        dbg("Error:Call id is missing from %XCALLSTAT indication");
-        return;
-    }
-
-    call_id  = atoi(pId);
-
-    dupco = tcore_call_object_find_by_id(o, call_id);
-       if(dupco!= NULL)
-    {
-               dbg("co with same id already exist. skip");
-               return;
-       }
-
-    co = tcore_call_object_new(o, call_id);
-    if (!co)
-    {
-        dbg("[ error ] co is NULL");
-        return ;
-    }
-
-    dbg("freeing  at token")
-    tcore_at_tok_free(tokens);
-
-    eflag = g_new0(gboolean, 1);
-       *eflag = TRUE;
-
-       dbg("calling  _call_list_get");
-    _call_list_get(o, eflag);
-
-
-}
-
-static void on_notification_call_status(CoreObject *o, const void *data, void *user_data)
-{
-    char* cmd = NULL;
-       TcorePlugin *p = NULL;
-       CallObject *co = NULL;
-       int id = -1, status, type;
-       char *pStat, *pCallId;
-    GSList *tokens = NULL;
-
-       enum tcore_call_status co_status;
-
-       dbg("function entrance");
-       p       = tcore_object_ref_plugin(o);
-       cmd = (char*)data;
-
-    tokens = tcore_at_tok_new(cmd);
-
-    // parse <Call Id>
-
-    pCallId = g_slist_nth_data(tokens, 0);
-    if(!pCallId)
-    {
-        dbg("pCallId is missing from %XCALLSTAT indiaction");
-
-    }
-    else
-    {
-        id  = atoi(pCallId);
-        dbg("call id = %d", id);
-        //parse <Stat>
-        if ((pStat = g_slist_nth_data(tokens, 1)))
-        {
-            status = atoi(pStat);
-        }
-        dbg("call status = %d", status);
-    }
-
-    tcore_at_tok_free(tokens);
-
-       co_status = _call_status(status);
-
-       dbg("co_status = %d", co_status);
-       switch (co_status)
-     {
-               case CALL_STATUS_ACTIVE:
-         {
-               dbg("call(%d) status : [ ACTIVE ]", id);
-               co      = tcore_call_object_find_by_id(o,id);
-               if (!co)
-            {
-                       dbg("co is NULL");
-                       return ;
-               }
-               _call_status_active(p, co);
-
-               }
-        break;
-
-               case CALL_STATUS_HELD:
-                       dbg("call(%d) status : [ held ]", id);
-               break;
-
-               case CALL_STATUS_DIALING:
-               {
-               dbg("call(%d) status : [ dialing ]", id);
-               co      = tcore_call_object_find_by_id(o,id);
-               if (!co)
-            {
-                       co = tcore_call_object_new(o, id);
-                       if (!co)
-                {
-                               dbg("error : tcore_call_object_new [ id : %d ]", id);
-                               return ;
-                       }
-               }
-
-               tcore_call_object_set_type(co, tizen_call_type(type));
-               tcore_call_object_set_direction(co, TCORE_CALL_DIRECTION_OUTGOING);
-               _call_status_dialing(p, co);
-
-
-       }
-               break;
-
-               case CALL_STATUS_ALERT:
-               {
-               dbg("call(%d) status : [ alert ]", id);
-               co      = tcore_call_object_find_by_id(o, id);
-               if (!co)
-            {
-                       dbg("co is NULL");
-                       return ;
-               }
-            _call_status_alert(p, co);
-
-       //      _call_list_get(o, co);
-
-               }
-        break;
-               case CALL_STATUS_INCOMING:
-               case CALL_STATUS_WAITING:
-                       dbg("call(%d) status : [ incoming ]", id);
-               break;
-               case CALL_STATUS_IDLE:
-        {
-
-                               dbg("call(%d) status : [ release ]", id);
-
-                               co      = tcore_call_object_find_by_id(o, id);
-                               if (!co)
-                               {
-                                       dbg("co is NULL");
-                    return ;
-                               }
-
-                               p       = tcore_object_ref_plugin(o);
-                               if (!p)
-                               {
-                                       dbg("plugin is NULL");
-                    return ;
-                               }
-
-                               _call_status_idle(p, co);
-
-               }
-        break;
-
-               default:
-                       dbg("invalid call status", id);
-                       break;
-               }
-}
-
-static TReturn s_call_outgoing(CoreObject *o, UserRequest *ur)
-{
-       TcorePlugin* p = NULL;
-       struct treq_call_dial*  data = 0;
-       char* raw_str= NULL;
-       char*cmd_str = NULL;
-    const char *cclir;
-       enum tcore_call_cli_mode clir = CALL_CLI_MODE_DEFAULT;
-
-       TcorePending *pending = NULL;
-       TcoreATRequest *req;
-       gboolean ret = FALSE;
-
-       dbg("function entrance");
-
-       data    = (struct treq_call_dial*)tcore_user_request_ref_data(ur, 0);
-       p               = tcore_object_ref_plugin(o);
-
-       clir = _get_clir_status(data->number);
-
-    //Compose ATD Cmd string
-       switch (clir)
-       {
-               case TCORE_CALL_CLI_MODE_PRESENT:
-                       dbg("CALL_CLI_MODE_PRESENT");
-                       cclir = "I";
-               break;  /*invocation*/
-               case TCORE_CALL_CLI_MODE_RESTRICT:
-                       dbg("CALL_CLI_MODE_RESTRICT");
-                       cclir = "i";
-               break;  /*suppression*/
-               case TCORE_CALL_CLI_MODE_DEFAULT:
-               default:
-                       cclir = "";
-                       dbg("CALL_CLI_MODE_DEFAULT");
-               break;   /*subscription default*/
-       }
-
-       dbg("data->number = %s",data->number);
-
-       raw_str = g_strdup_printf("ATD%s%s;", data->number, cclir);
-       cmd_str = g_strdup_printf("%s%s",raw_str,"\r");
-
-    dbg("request command : %s", cmd_str);
-
-       pending = tcore_pending_new(o, 0);
-
-       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-
-       ret = _call_request_message (pending, o, ur, on_confirmation_call_outgoing, NULL);
-
-       g_free(raw_str);
-       g_free(cmd_str);
-
-       if (!ret)
-    {
-               dbg("AT request(%s) sent failed", req->cmd);
-               return TCORE_RETURN_FAILURE;
-       }
-
-       dbg("AT request(%s) sent success",req->cmd);
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_call_answer(CoreObject *o, UserRequest *ur)
-{
-    CallObject*                                        co = NULL;
-       struct treq_call_answer*        data = 0;
-       char*                           cmd_str = NULL;
-       TcorePending *pending = NULL;
-       TcoreATRequest *req;
-       gboolean ret = FALSE;
-
-       dbg("function entrance");
-
-       data = (struct treq_call_answer*)tcore_user_request_ref_data(ur, 0);
-
-       co = tcore_call_object_find_by_id(o, data->id);
-
-       if (data->type == CALL_ANSWER_TYPE_ACCEPT)
-    {
-               dbg(" request type CALL_ANSWER_TYPE_ACCEPT");
-
-               cmd_str = g_strdup_printf("%s%s","ATA","\r");
-
-           pending = tcore_pending_new(o, 0);
-
-           req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);
-
-           dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-           tcore_pending_set_request_data(pending, 0, req);
-
-               ret = _call_request_message (pending, o, ur, on_confirmation_call_accept, co);
-
-               g_free(cmd_str);
-
-               if (!ret)
-               {
-                       dbg("AT request(%s) sent failed", req->cmd);
-                       return TCORE_RETURN_FAILURE;
-               }
-
-       }
-    else
-    {
-
-               switch (data->type)
-        {
-                       case CALL_ANSWER_TYPE_REJECT:
-            {
-                               dbg("call answer reject");
-                               tcore_call_control_answer_reject(o, ur, on_confirmation_call_reject, co);
-                       } break;
-
-                       case CALL_ANSWER_TYPE_REPLACE:
-            {
-                               dbg("call answer replace");
-                               tcore_call_control_answer_replace(o, ur, on_confirmation_call_replace, co);
-                       } break;
-
-                       case CALL_ANSWER_TYPE_HOLD_ACCEPT:
-            {
-                               dbg("call answer hold and accept");
-                               tcore_call_control_answer_hold_and_accept(o, ur, on_confirmation_call_hold_and_accept, co);
-                       } break;
-
-                       default :
-                               dbg("[ error ] wrong answer type [ %d ]", data->type);
-                               return TCORE_RETURN_FAILURE;
-               }
-       }
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_call_release(CoreObject *o, UserRequest *ur)
-{
-    CallObject* co = NULL;
-       struct treq_call_end* data = 0;
-       UserRequest* ur_dup = NULL;
-       char* chld0_cmd = NULL;
-       char* chld1_cmd = NULL;
-
-       TcorePending *pending = NULL, *pending1 = NULL;
-       TcoreATRequest *req, *req1;
-       gboolean ret = FALSE;
-
-       dbg("function entrance");
-       data = (struct treq_call_end*)tcore_user_request_ref_data(ur, 0);
-
-       co = tcore_call_object_find_by_id(o, data->id);
-
-       dbg("type of release call = %d" , data->type);
-
-       if (data->type == CALL_END_TYPE_ALL)
-    {
-
-       //releaseAll do not exist on legacy request. send CHLD=0, CHLD=1 in sequence
-       chld0_cmd = g_strdup("AT+CHLD=0\r");
-       chld1_cmd = g_strdup("AT+CHLD=1\r");
-
-           pending = tcore_pending_new(o, 0);
-
-           req = tcore_at_request_new(chld0_cmd, NULL, TCORE_AT_NO_RESULT);
-
-               dbg("input command is %s",chld0_cmd);
-
-           dbg("req-cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-           tcore_pending_set_request_data(pending, 0, req);
-
-               ur_dup = tcore_user_request_new(NULL, NULL);
-
-               ret = _call_request_message(pending ,o, ur_dup,  on_confirmation_call_endall, NULL);
-               g_free(chld0_cmd);
-
-               if (!ret)
-               {
-                       dbg("AT request %s has failed ",req->cmd);
-                       return TCORE_RETURN_FAILURE;
-               }
-
-        pending1 = tcore_pending_new(o, 0);
-
-        req1 = tcore_at_request_new(chld1_cmd, NULL, TCORE_AT_NO_RESULT);
-
-               dbg("input command is %s",chld1_cmd);
-
-           dbg("req-cmd : %s, prefix(if any) :%s, cmd_len : %d", req1->cmd, req1->prefix, strlen(req1->cmd));
-
-           tcore_pending_set_request_data(pending1, 0, req1);
-
-               ret = _call_request_message(pending1, o, ur, on_confirmation_call_release_all, co);
-               g_free(chld1_cmd);
-
-               if (!ret)
-               {
-                       dbg("AT request %s has failed ",req->cmd);
-                       return TCORE_RETURN_FAILURE;
-               }
-
-       }
-    else
-    {
-
-               switch (data->type)
-        {
-                       case CALL_END_TYPE_DEFAULT:
-            {
-                               int id = 0;
-                               id = tcore_call_object_get_id(co);
-
-                               dbg("call end call id [%d]", id);
-                               tcore_call_control_end_specific(o, ur, id, on_confirmation_call_release_specific, co);
-                       } break;
-
-                       case CALL_END_TYPE_ACTIVE_ALL:
-            {
-
-                               dbg("call end all active");
-                               tcore_call_control_end_all_active(o, ur, on_confirmation_call_release_all_active, co);
-                       } break;
-
-                       case CALL_END_TYPE_HOLD_ALL:
-            {
-
-                               dbg("call end all held");
-                               tcore_call_control_end_all_held(o, ur, on_confirmation_call_release_all_held, co);
-                       } break;
-
-                       default :
-                               dbg("[ error ] wrong end type [ %d ]", data->type);
-                               return TCORE_RETURN_FAILURE;
-               }
-
-       }
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_call_hold(CoreObject *o, UserRequest *ur)
-{
-       struct treq_call_hold *hold = 0;
-       CallObject *co = NULL;
-
-       dbg("function entrance");
-
-       hold = (struct treq_call_hold*)tcore_user_request_ref_data(ur, 0);
-
-       dbg("call id : [ %d ]", hold->id);
-
-       co = tcore_call_object_find_by_id(o, hold->id);
-
-       tcore_call_control_hold(o, ur, on_confirmation_call_hold, co);
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_call_active(CoreObject *o, UserRequest *ur)
-{
-       struct treq_call_active *active = 0;
-       CallObject *co = NULL;
-
-       active = (struct treq_call_active*)tcore_user_request_ref_data(ur, 0);
-
-       dbg("call id : [ %d ]", active->id);
-
-       co = tcore_call_object_find_by_id(o, active->id);
-
-       tcore_call_control_active(o, ur, on_confirmation_call_active, co);
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_call_swap(CoreObject *o, UserRequest *ur)
-{
-       struct treq_call_swap *swap = NULL;
-       CallObject *co = NULL;
-       swap = (struct treq_call_swap*)tcore_user_request_ref_data(ur, 0);
-
-       dbg("call id : [ %d ]", swap->id);
-
-       co = tcore_call_object_find_by_id(o, swap->id);
-
-       tcore_call_control_swap(o, ur, on_confirmation_call_swap, co);
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_call_join(CoreObject *o, UserRequest *ur)
-{
-       struct treq_call_join *join = 0;
-       CallObject *co = NULL;
-
-       join = (struct treq_call_join*)tcore_user_request_ref_data(ur, 0);
-
-       dbg("call id : [ %d ]", join->id);
-
-       co = tcore_call_object_find_by_id(o, join->id);
-
-       tcore_call_control_join(o, ur, on_confirmation_call_join, co);
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_call_split(CoreObject *o, UserRequest *ur)
-{
-       struct treq_call_split *split = 0;
-       CallObject *co = NULL;
-
-       split = (struct treq_call_split*)tcore_user_request_ref_data(ur, 0);
-
-       co = tcore_call_object_find_by_id (o, split->id);
-
-       dbg("call id : [ %d ]", split->id);
-
-       tcore_call_control_split(o, ur, split->id, on_confirmation_call_split, co);
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_call_deflect(CoreObject *o, UserRequest *ur)
-{
-       struct treq_call_deflect *deflect = 0;
-       CallObject *co = NULL;
-
-       deflect = (struct treq_call_deflect*)tcore_user_request_ref_data(ur, 0);
-
-       co = tcore_call_object_find_by_number(o, deflect->number);
-
-       dbg("deflect number: [ %s ]", deflect->number);
-
-       tcore_call_control_deflect(o, ur, deflect->number, on_confirmation_call_deflect, co);
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_call_transfer(CoreObject *o, UserRequest *ur)
-{
-       struct treq_call_transfer *transfer = 0;
-       CallObject *co = NULL;
-
-       transfer = (struct treq_call_transfer*)tcore_user_request_ref_data(ur, 0);
-
-       dbg("call id : [ %d ]", transfer->id);
-
-       co = tcore_call_object_find_by_id(o, transfer->id);
-
-       tcore_call_control_transfer(o, ur, on_confirmation_call_transfer, co);
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_call_send_dtmf(CoreObject *o, UserRequest *ur)
-{
-       char*cmd_str = NULL;
-       TcorePending *pending = NULL;
-       TcoreATRequest *req;
-    UserRequest *dup;
-       gboolean ret = FALSE;
-       struct treq_call_dtmf *dtmf = 0;
-       char *pDtmf = NULL, *ptmp_dtmf =  NULL;
-       unsigned int dtmf_count;
-
-       dbg("Function enter");
-
-    dup  = tcore_user_request_new(NULL, NULL);
-
-    (void)_set_dtmf_tone_duration(o, dup);
-
-       dtmf = (struct treq_call_dtmf*)tcore_user_request_ref_data(ur, 0);
-       pDtmf =   g_malloc0((MAX_CALL_DTMF_DIGITS_LEN * 2)+ 1); // DTMF digits + comma for each dtmf digit.
-
-       if(pDtmf == NULL)
-       {
-               dbg("Memory allocation failed");
-               return TCORE_RETURN_FAILURE;
-       }
-
-       ptmp_dtmf =  pDtmf;
-
-       for(dtmf_count = 0; dtmf_count < strlen(dtmf->digits); dtmf_count++)
-       {
-               *ptmp_dtmf = dtmf->digits[dtmf_count];
-                ptmp_dtmf ++;
-
-               *ptmp_dtmf =  COMMA;
-                ptmp_dtmf++;
-       }
-
-       //last digit is having COMMA , overwrite it with '\0' .
-       *(--ptmp_dtmf) = '\0';
-    dbg("Input DTMF string(%s)",pDtmf);
-
-       //AT+VTS = <d1>,<d2>,<d3>,<d4>,<d5>,<d6>, ..... <d32>
-       cmd_str = g_strdup_printf("AT+VTS=%s%s",pDtmf,"\r");
-
-       dbg("request command : %s", cmd_str);
-
-       pending = tcore_pending_new(o, 0);
-
-       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-
-       ret = _call_request_message (pending, o, ur, on_confirmation_call_dtmf, NULL);
-
-       g_free(pDtmf);
-       g_free(cmd_str);
-
-       if (!ret)
-       {
-
-               dbg("AT request sent failed")
-               return TCORE_RETURN_FAILURE;
-       }
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_call_set_sound_path(CoreObject *o, UserRequest *ur)
-{
-
-    UserRequest *ur_dup = NULL;
-
-       TcorePending *pending = NULL , *pending1 =  NULL;
-       TcoreATRequest *req , *req1;
-    char *cmd_str = NULL , *cmd_str1 = NULL;
-
-       gboolean ret = FALSE;
-
-       dbg("function entrance");
-
-    //hard coded value for speaker.
-    cmd_str = g_strdup_printf("%s%s","AT+XDRV=40,4,3,0,0,0,0,0,1,0,1,0,1","\r"); //source type.
-    cmd_str1 = g_strdup_printf("%s%s","AT+XDRV=40,5,2,0,0,0,0,0,1,0,1,0,1","\r"); //destination type
-
-       pending = tcore_pending_new(o, 0);
-
-       req = tcore_at_request_new(cmd_str, "+XDRV", TCORE_AT_SINGLELINE);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-
-    ur_dup = tcore_user_request_ref(ur);
-
-       ret = _call_request_message (pending, o, ur_dup, on_confirmation_call_set_source_sound_path, NULL);
-
-       g_free(cmd_str);
-
-       if (!ret)
-    {
-               dbg("At request(%s) sent failed",req->cmd);
-               return TCORE_RETURN_FAILURE;
-       }
-
-    pending1 = tcore_pending_new(o, 0);
-
-    req1 = tcore_at_request_new(cmd_str1,"+XDRV", TCORE_AT_SINGLELINE);
-
-       dbg("input command is %s",cmd_str1);
-
-    dbg("req-cmd : %s, prefix(if any) :%s, cmd_len : %d", req1->cmd, req1->prefix, strlen(req1->cmd));
-
-    tcore_pending_set_request_data(pending1, 0, req1);
-
-       ret = _call_request_message(pending1, o, ur, on_confirmation_call_set_destination_sound_path, NULL);
-
-       g_free(cmd_str1);
-
-       if (!ret)
-       {
-               dbg("AT request %s has failed ",req1->cmd);
-               return TCORE_RETURN_FAILURE;
-       }
-
-    return TCORE_RETURN_SUCCESS;
-
-}
-
-static TReturn s_call_set_sound_volume_level(CoreObject *o, UserRequest *ur)
-{
-       UserRequest *src_ur = NULL;
-       UserRequest *dest_ur = NULL;
-
-       TcorePending *src_pending = NULL;
-       TcorePending *dest_pending = NULL;
-
-       TcoreATRequest *src_req = NULL;
-       TcoreATRequest *dest_req = NULL;
-
-       char *cmd_str = NULL;
-
-       gboolean ret = FALSE;
-       dbg("Entry");
-
-       /* Hard-coded values for MIC & Speakers */
-
-       /* Source volume */
-       dbg("Set Source volume");
-
-       cmd_str = g_strdup_printf("%s%s", "AT+XDRV=40,7,3,88", "\r");   /* Source type */
-       dbg("Request command string: %s", cmd_str);
-
-       /* Create new Pending request */
-       src_pending = tcore_pending_new(o, 0);
-
-       /* Create new AT-Command request */
-       src_req = tcore_at_request_new(cmd_str, "+XDRV", TCORE_AT_SINGLELINE);
-       dbg("Command: %s, prefix(if any): %s, Command length: %d", src_req->cmd, src_req->prefix, strlen(src_req->cmd));
-
-       /* Free Command string */
-       g_free(cmd_str);
-
-       tcore_pending_set_request_data(src_pending, 0, src_req);
-       src_ur = tcore_user_request_ref(ur);
-
-       /* Send request */
-       ret = _call_request_message (src_pending, o, src_ur, on_confirmation_call_set_source_sound_volume_level, NULL);
-       if (!ret) {
-               err("Failed to send AT-Command request");
-               return TCORE_RETURN_FAILURE;
-       }
-
-       cmd_str = g_strdup_printf("%s%s", "AT+XDRV=40,7,0,88", "\r");   /* Destination type */
-       dbg("Request command string: %s", cmd_str);
-
-       /* Create new Pending request */
-       src_pending = tcore_pending_new(o, 0);
-
-       /* Create new AT-Command request */
-       src_req = tcore_at_request_new(cmd_str,"+XDRV", TCORE_AT_SINGLELINE);
-       dbg("Command: %s, prefix(if any): %s, Command length: %d", src_req->cmd, src_req->prefix, strlen(src_req->cmd));
-
-       /* Free Command string */
-       g_free(cmd_str);
-
-       tcore_pending_set_request_data(src_pending, 0, src_req);
-
-       src_ur= tcore_user_request_ref(ur);
-
-       /* Send request */
-       ret = _call_request_message(src_pending, o, src_ur, on_confirmation_call_set_source_sound_volume_level, NULL);
-       if (!ret) {
-               err("Failed to send AT-Command request");
-               return TCORE_RETURN_FAILURE;
-       }
-
-       /* Destination volume */
-       dbg("Set Source volume");
-
-       cmd_str = g_strdup_printf("%s%s", "AT+XDRV=40,8,0,88", "\r");   /* Source type */
-       dbg("Request command string: %s", cmd_str);
-
-       /* Create new Pending request */
-       dest_pending = tcore_pending_new(o, 0);
-
-       /* Create new AT-Command request */
-       dest_req = tcore_at_request_new(cmd_str, "+XDRV", TCORE_AT_SINGLELINE);
-       dbg("Command: %s, prefix(if any): %s, Command length: %d", dest_req->cmd, dest_req->prefix, strlen(dest_req->cmd));
-
-       /* Free Command string */
-       g_free(cmd_str);
-
-       tcore_pending_set_request_data(dest_pending, 0, dest_req);
-       dest_ur = tcore_user_request_ref(ur);
-
-       /* Send request */
-       ret = _call_request_message (dest_pending, o, dest_ur, on_confirmation_call_set_source_sound_volume_level, NULL);
-       if (!ret) {
-               err("Failed to send AT-Command request");
-               return TCORE_RETURN_FAILURE;
-       }
-
-       cmd_str = g_strdup_printf("%s%s", "AT+XDRV=40,8,2,88", "\r");   /* Destination type */
-       dbg("Request command string: %s", cmd_str);
-
-       /* Create new Pending request */
-       dest_pending = tcore_pending_new(o, 0);
-
-       /* Create new AT-Command request */
-       dest_req = tcore_at_request_new(cmd_str,"+XDRV", TCORE_AT_SINGLELINE);
-       dbg("Command: %s, prefix(if any): %s, Command length: %d", dest_req->cmd, dest_req->prefix, strlen(dest_req->cmd));
-
-       /* Free Command string */
-       g_free(cmd_str);
-
-       tcore_pending_set_request_data(dest_pending, 0, dest_req);
-
-       /* Send request */
-       ret = _call_request_message(dest_pending, o, ur, on_confirmation_call_set_destination_sound_volume_level, NULL);
-       if (!ret) {
-               err("Failed to send AT-Command request");
-               return TCORE_RETURN_FAILURE;
-       }
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-
-static TReturn s_call_get_sound_volume_level(CoreObject *o, UserRequest *ur)
-{
-       dbg("Entry");
-
-       dbg("Exit");
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_call_mute(CoreObject *o, UserRequest *ur)
-{
-       char *cmd_str = NULL;
-       TcorePending *pending = NULL;
-       TcoreATRequest *req = NULL;
-       gboolean ret = FALSE;
-       dbg("Entry");
-
-    cmd_str = g_strdup_printf("%s%s","AT+XDRV=40,8,0,0,0","\r");
-
-       dbg("Request command string: %s", cmd_str);
-
-       /* Create new Pending request */
-       pending = tcore_pending_new(o, 0);
-
-       /* Create new AT-Command request */
-       req = tcore_at_request_new(cmd_str, "+XDRV", TCORE_AT_SINGLELINE);
-       dbg("Command: %s, prefix(if any): %s, Command length: %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       /* Free command string */
-       g_free(cmd_str);
-
-       /* Set request data (AT command) to Pending request */
-       tcore_pending_set_request_data(pending, 0, req);
-
-       /* Send request */
-       ret = _call_request_message (pending, o, ur, on_confirmation_call_mute, NULL);
-       if (!ret) {
-               err("Failed to send AT-Command request");
-               return TCORE_RETURN_FAILURE;
-       }
-
-       dbg("Exit");
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_call_unmute(CoreObject *o, UserRequest *ur)
-{
-       char *cmd_str = NULL;
-       TcorePending *pending = NULL;
-       TcoreATRequest *req = NULL;
-       gboolean ret = FALSE;
-       dbg("Entry");
-
-    cmd_str = g_strdup_printf("%s%s","AT+XDRV=40,8,0,0,88","\r");
-
-       dbg("Request command string: %s", cmd_str);
-
-       /* Create new Pending request */
-       pending = tcore_pending_new(o, 0);
-
-       /* Create new AT-Command request */
-       req = tcore_at_request_new(cmd_str, "+XDRV", TCORE_AT_SINGLELINE);
-       dbg("Command: %s, prefix(if any): %s, Command length: %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       /* Free command string */
-       g_free(cmd_str);
-
-       /* Set request data (AT command) to Pending request */
-       tcore_pending_set_request_data(pending, 0, req);
-
-       /* Send request */
-       ret = _call_request_message (pending, o, ur, on_confirmation_call_unmute, NULL);
-       if (!ret) {
-               err("Failed to send AT-Command request");
-               return TCORE_RETURN_FAILURE;
-       }
-
-       dbg("Exit");
-       return TCORE_RETURN_SUCCESS;
-
-}
-
-
-static TReturn s_call_get_mute_status(CoreObject *o, UserRequest *ur)
-{
-       dbg("Entry");
-
-       dbg("Exit");
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn _set_dtmf_tone_duration(CoreObject *o, UserRequest *ur)
-{
-       char *cmd_str = NULL;
-       TcorePending *pending = NULL;
-       TcoreATRequest *req = NULL;
-       gboolean ret = FALSE;
-       dbg("Entry");
-
-       cmd_str = g_strdup_printf("%s%s", "AT+VTD=3", "\r"); /* ~300 mili secs. +VTD= n, where  n = (0 - 255) * 1/10 secs. */
-       dbg("Request command string: %s", cmd_str);
-
-       /* Create new Pending request */
-       pending = tcore_pending_new(o, 0);
-
-       /* Create new AT-Command request */
-       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);
-       dbg("Command: %s, prefix(if any): %s, Command length: %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       /* Free command string */
-       g_free(cmd_str);
-
-       /* Set request data (AT command) to Pending request */
-       tcore_pending_set_request_data(pending, 0, req);
-
-       /* Send request */
-       ret = _call_request_message (pending, o, ur, _on_confirmation_dtmf_tone_duration, NULL);
-       if (!ret) {
-               err("Failed to send AT-Command request");
-               return TCORE_RETURN_FAILURE;
-       }
-
-       dbg("Exit");
-       return TCORE_RETURN_SUCCESS;
-}
-
-/* Call Operations */
-static struct tcore_call_operations call_ops = {
-       .dial                                       = s_call_outgoing,
-       .answer                                     = s_call_answer,
-       .end                                        = s_call_release,
-       .hold                                       = s_call_hold,
-       .active                                     = s_call_active,
-       .swap                                       = s_call_swap,
-       .join                                       = s_call_join,
-       .split                                      = s_call_split,
-       .deflect                                    = s_call_deflect,
-       .transfer                                   = s_call_transfer,
-       .send_dtmf                                  = s_call_send_dtmf,
-       .set_sound_path                     = s_call_set_sound_path,
-       .set_sound_volume_level     = s_call_set_sound_volume_level,
-       .get_sound_volume_level     = s_call_get_sound_volume_level,
-       .mute                                       = s_call_mute,
-       .unmute                                     = s_call_unmute,
-       .get_mute_status                    = s_call_get_mute_status,
-       .set_sound_recording        = NULL,
-       .set_sound_equalization     = NULL,
-       .set_sound_noise_reduction      = NULL,
-};
-
-static void s_call_info_mo_waiting(CoreObject *o)
-{
-       TcorePlugin *p = NULL;
-       CallObject *co = NULL;
-       int id = 0;
-       dbg("Entry");
-
-       /* Parent plugin */
-       p = tcore_object_ref_plugin(o);
-
-       /* Call Core object */
-       co = tcore_call_object_current_on_mo_processing(o);
-       if (!co) {
-               err("Failed to find Call Core object!");
-               return;
-       }
-
-       /* Call ID */
-       id = tcore_call_object_get_id(co);
-
-       /* Send notification to TAPI */
-       tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                       tcore_plugin_ref_core_object(p, "call"),
-                                                                       TNOTI_CALL_INFO_WAITING,
-                                                                       sizeof(unsigned int),
-                                                                       (void*)&id);
-
-       dbg("Exit");
-       return;
-}
-
-static void s_call_info_mo_forwarded(CoreObject *o)
-{
-       TcorePlugin *p = NULL;
-       CallObject *co = NULL;
-       int id = 0;
-       dbg("Entry");
-
-       /* Parent plugin */
-       p = tcore_object_ref_plugin(o);
-
-       /* Call Core object */
-       co = tcore_call_object_current_on_mo_processing(o);
-       if (!co) {
-               err("Failed to find Call Core object!");
-               return;
-       }
-
-       /* Call ID */
-       id = tcore_call_object_get_id(co);
-
-       /* Send notification to TAPI */
-       tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                       tcore_plugin_ref_core_object(p, "call"),
-                                                                       TNOTI_CALL_INFO_FORWARDED,
-                                                                       sizeof(unsigned int),
-                                                                       (void*)&id);
-
-       dbg("Exit");
-       return;
-}
-
-static void s_call_info_mo_barred_incoming(CoreObject *o)
-{
-       TcorePlugin *p = NULL;
-       CallObject *co = NULL;
-       int id = 0;
-       dbg("Entry");
-
-       /* Parent plugin */
-       p = tcore_object_ref_plugin(o);
-
-       /* Call Core object */
-       co = tcore_call_object_current_on_mo_processing(o);
-       if (!co) {
-               err("Failed to find Call Core object!");
-               return;
-       }
-
-       /* Call ID */
-       id = tcore_call_object_get_id(co);
-
-       /* Send notification to TAPI */
-       tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                       tcore_plugin_ref_core_object(p, "call"),
-                                                                       TNOTI_CALL_INFO_BARRED_INCOMING,
-                                                                       sizeof(unsigned int),
-                                                                       (void*)&id);
-
-       dbg("Exit");
-       return;
-}
-
-static void s_call_info_mo_barred_outgoing(CoreObject *o)
-{
-       TcorePlugin *p = NULL;
-       CallObject *co = NULL;
-       int id = 0;
-       dbg("Entry");
-
-       /* Parent plugin */
-       p = tcore_object_ref_plugin(o);
-
-       /* Call Core object */
-       co = tcore_call_object_current_on_mo_processing(o);
-       if (!co) {
-               err("Failed to find Call Core object!");
-               return;
-       }
-
-       /* Call ID */
-       id = tcore_call_object_get_id(co);
-
-       /* Send notification to TAPI */
-       tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                       tcore_plugin_ref_core_object(p, "call"),
-                                                                       TNOTI_CALL_INFO_BARRED_OUTGOING,
-                                                                       sizeof(unsigned int),
-                                                                       (void*)&id);
-
-       dbg("Exit");
-       return;
-}
-
-static void s_call_info_mo_deflected(CoreObject *o)
-{
-       TcorePlugin *p = NULL;
-       CallObject *co = NULL;
-       int id = 0;
-       dbg("Entry");
-
-       /* Parent plugin */
-       p = tcore_object_ref_plugin(o);
-
-       /* Call Core object */
-       co = tcore_call_object_current_on_mo_processing(o);
-       if (!co) {
-               err("Failed to find Call Core object!");
-               return;
-       }
-
-       /* Call ID */
-       id = tcore_call_object_get_id(co);
-
-       /* Send notification to TAPI */
-       tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                       tcore_plugin_ref_core_object(p, "call"),
-                                                                       TNOTI_CALL_INFO_DEFLECTED,
-                                                                       sizeof(unsigned int),
-                                                                       (void*)&id);
-
-       dbg("Exit");
-       return;
-}
-
-static void s_call_info_mo_clir_suppression_reject(CoreObject *o)
-{
-       TcorePlugin *p = NULL;
-       CallObject *co = NULL;
-       int id = 0;
-       dbg("Entry");
-
-       /* Parent plugin */
-       p = tcore_object_ref_plugin(o);
-
-       /* Call Core object */
-       co = tcore_call_object_current_on_mo_processing(o);
-       if (!co) {
-               err("Failed to find Call Core object!");
-               return;
-       }
-
-       /* Call ID */
-       id = tcore_call_object_get_id(co);
-
-       /* Send notification to TAPI */
-       tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                       tcore_plugin_ref_core_object(p, "call"),
-                                                                       TNOTI_CALL_INFO_CLIR_SUPPRESSION_REJECT,
-                                                                       sizeof(unsigned int),
-                                                                       (void*)&id);
-
-       dbg("Exit");
-       return;
-}
-
-static void s_call_info_mo_cfu(CoreObject *o)
-{
-       TcorePlugin *p = NULL;
-       CallObject *co = NULL;
-       int id = 0;
-       dbg("Entry");
-
-       /* Parent plugin */
-       p = tcore_object_ref_plugin(o);
-
-       /* Call Core object */
-       co = tcore_call_object_current_on_mo_processing(o);
-       if (!co) {
-               err("Failed to find Call Core object!");
-               return;
-       }
-
-       /* Call ID */
-       id = tcore_call_object_get_id(co);
-
-       /* Send notification to TAPI */
-       tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                       tcore_plugin_ref_core_object(p, "call"),
-                                                                       TNOTI_CALL_INFO_FORWARD_UNCONDITIONAL,
-                                                                       sizeof(unsigned int),
-                                                                       (void*)&id);
-
-       dbg("Exit");
-       return;
-}
-
-static void s_call_info_mo_cfc(CoreObject *o)
-{
-       TcorePlugin *p = NULL;
-       CallObject *co = NULL;
-       int id = 0;
-       dbg("Entry");
-
-       /* Parent plugin */
-       p = tcore_object_ref_plugin(o);
-
-       /* Call Core object */
-       co = tcore_call_object_current_on_mo_processing(o);
-       if (!co) {
-               err("Failed to find Call Core object!");
-               return;
-       }
-
-       /* Call ID */
-       id = tcore_call_object_get_id(co);
-
-       /* Send notification to TAPI */
-       tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                       tcore_plugin_ref_core_object(p, "call"),
-                                                                       TNOTI_CALL_INFO_FORWARD_CONDITIONAL,
-                                                                       sizeof(unsigned int),
-                                                                       (void*)&id);
-
-       dbg("Exit");
-       return;
-}
-
-static void s_call_info_mt_cli(CoreObject *o, enum tcore_call_cli_mode mode, char* number)
-{
-       CallObject *co = NULL;
-       dbg("Entry");
-
-       /* Call Core object */
-       co = tcore_call_object_current_on_mt_processing(o);
-       if (!co) {
-               err("Failed to find Call Core object!");
-               return;
-       }
-
-       /* Set CLI information */
-       tcore_call_object_set_cli_info(co, mode, number);
-
-       dbg("Exit");
-       return;
-}
-
-static void s_call_info_mt_cna(CoreObject *o, enum tcore_call_cna_mode mode, char* name, int dcs)
-{
-       CallObject *co = NULL;
-       dbg("Entry");
-
-       /* Call Core object */
-       co = tcore_call_object_current_on_mt_processing(o);
-       if (!co) {
-               err("Failed to find Call Core object!");
-               return;
-       }
-
-       /* Set CNA information */
-       tcore_call_object_set_cna_info(co, mode, name, dcs);
-
-       dbg("Exit");
-       return;
-}
-
-static void s_call_info_mt_forwarded_call(CoreObject *o, char* number)
-{
-       TcorePlugin *p = NULL;
-       CallObject *co = NULL;
-       int id = 0;
-       dbg("Entry");
-
-       /* Parent plugin */
-       p = tcore_object_ref_plugin(o);
-
-       /* Call Core object */
-       co = tcore_call_object_find_by_number(o, number);
-       if (!co) {
-               err("Failed to find Call Core object!");
-               return;
-       }
-
-       /* Call ID */
-       id = tcore_call_object_get_id(co);
-
-       /* Send notification to TAPI */
-       tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                       tcore_plugin_ref_core_object(p, "call"),
-                                                                       TNOTI_CALL_INFO_FORWARDED_CALL,
-                                                                       sizeof(unsigned int),
-                                                                       (void*)&id);
-
-       dbg("Exit");
-       return;
-}
-
-static void s_call_info_mt_deflected_call(CoreObject *o, char* number)
-{
-       TcorePlugin *p = NULL;
-       CallObject *co = NULL;
-       int id = 0;
-       dbg("Entry");
-
-       /* Parent plugin */
-       p = tcore_object_ref_plugin(o);
-
-       /* Call Core object */
-       co = tcore_call_object_find_by_number(o, number);
-       if (!co) {
-               err("Failed to find Call Core object!");
-               return;
-       }
-
-       /* Call ID */
-       id = tcore_call_object_get_id(co);
-
-       /* Send notification to TAPI */
-       tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                       tcore_plugin_ref_core_object(p, "call"),
-                                                                       TNOTI_CALL_INFO_DEFLECTED_CALL,
-                                                                       sizeof(unsigned int),
-                                                                       (void*)&id);
-
-       dbg("Exit");
-       return;
-}
-
-static void s_call_info_mt_transfered(CoreObject *o, char* number)
-{
-       TcorePlugin *p = NULL;
-       CallObject *co = NULL;
-       int id = 0;
-       dbg("Entry");
-
-       /* Parent plugin */
-       p = tcore_object_ref_plugin(o);
-
-       /* Call Core object */
-       co = tcore_call_object_find_by_number(o, number);
-       if (!co) {
-               err("Failed to find Call Core object!");
-               return;
-       }
-
-       /* Call ID */
-       id = tcore_call_object_get_id(co);
-
-       /* Send notification to TAPI */
-       tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                       tcore_plugin_ref_core_object(p, "call"),
-                                                                       TNOTI_CALL_INFO_TRANSFERED_CALL,
-                                                                       sizeof(unsigned int),
-                                                                       (void*)&id);
-
-       dbg("Exit");
-       return;
-}
-
-static void s_call_info_held(CoreObject *o, char* number)
-{
-       TcorePlugin *p = NULL;
-       CallObject *co = NULL;
-       int id = 0;
-       dbg("Entry");
-
-       /* Parent plugin */
-       p = tcore_object_ref_plugin(o);
-
-       /* Call Core object */
-       co = tcore_call_object_find_by_number(o, number);
-       if (!co) {
-               err("Failed to find Call Core object!");
-               return;
-       }
-
-       /* Call ID */
-       id = tcore_call_object_get_id(co);
-
-       /* Send notification to TAPI */
-       tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                       tcore_plugin_ref_core_object(p, "call"),
-                                                                       TNOTI_CALL_INFO_HELD,
-                                                                       sizeof(unsigned int),
-                                                                       (void*)&id);
-
-       dbg("Exit");
-       return;
-}
-
-static void s_call_info_active(CoreObject *o, char* number)
-{
-       TcorePlugin *p = NULL;
-       CallObject *co = NULL;
-       int id = 0;
-       dbg("Entry");
-
-       /* Parent plugin */
-       p = tcore_object_ref_plugin(o);
-
-       /* Call Core object */
-       co = tcore_call_object_find_by_number(o, number);
-       if (!co) {
-               err("Failed to find Call Core object!");
-               return;
-       }
-
-       /* Call ID */
-       id = tcore_call_object_get_id(co);
-
-       /* Send notification to TAPI */
-       tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                       tcore_plugin_ref_core_object(p, "call"),
-                                                                       TNOTI_CALL_INFO_ACTIVE,
-                                                                       sizeof(unsigned int),
-                                                                       (void*)&id);
-
-       dbg("Exit");
-       return;
-}
-
-static void s_call_info_joined(CoreObject *o, char* number)
-{
-       TcorePlugin *p = NULL;
-       CallObject *co = NULL;
-       int id = 0;
-       dbg("Entry");
-
-       /* Parent plugin */
-       p = tcore_object_ref_plugin(o);
-
-       /* Call Core object */
-       co = tcore_call_object_find_by_number(o, number);
-       if (!co) {
-               err("Failed to find Call Core object!");
-               return;
-       }
-
-       /* Call ID */
-       id = tcore_call_object_get_id(co);
-
-       /* Send notification to TAPI */
-       tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                       tcore_plugin_ref_core_object(p, "call"),
-                                                                       TNOTI_CALL_INFO_JOINED,
-                                                                       sizeof(unsigned int),
-                                                                       (void*)&id);
-
-       dbg("Exit");
-       return;
-}
-
-static void s_call_info_released_on_hold(CoreObject *o, char* number)
-{
-       TcorePlugin *p = NULL;
-       CallObject *co = NULL;
-       int id = 0;
-       dbg("Entry");
-
-       /* Parent plugin */
-       p = tcore_object_ref_plugin(o);
-
-       /* Call Core object */
-       co = tcore_call_object_find_by_number(o, number);
-       if (!co) {
-               err("Failed to find Call Core object!");
-               return;
-       }
-
-       /* Call ID */
-       id = tcore_call_object_get_id(co);
-
-       /* Send notification to TAPI */
-       tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                       tcore_plugin_ref_core_object(p, "call"),
-                                                                       TNOTI_CALL_INFO_RELEASED_ON_HOLD,
-                                                                       sizeof(unsigned int),
-                                                                       (void*)&id);
-
-       dbg("Exit");
-       return;
-}
-
-static void s_call_info_transfer_alert(CoreObject *o, char* number)
-{
-       TcorePlugin *p = NULL;
-       CallObject *co = NULL;
-       int id = 0;
-       dbg("Entry");
-
-       /* Parent plugin */
-       p = tcore_object_ref_plugin(o);
-
-       /* Call Core object */
-       co = tcore_call_object_find_by_number(o, number);
-       if (!co) {
-               err("Failed to find Call Core object!");
-               return;
-       }
-
-       /* Call ID */
-       id = tcore_call_object_get_id(co);
-
-       /* Send notification to TAPI */
-       tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                       tcore_plugin_ref_core_object(p, "call"),
-                                                                       TNOTI_CALL_INFO_TRANSFER_ALERT,
-                                                                       sizeof(unsigned int),
-                                                                       (void*)&id);
-
-       dbg("Exit");
-       return;
-}
-
-static void s_call_info_transfered(CoreObject *o, char* number)
-{
-       TcorePlugin *p = NULL;
-       CallObject *co = NULL;
-       int id = 0;
-       dbg("Entry");
-
-       /* Parent plugin */
-       p = tcore_object_ref_plugin(o);
-
-       /* Call Core object */
-       co = tcore_call_object_find_by_number(o, number);
-       if (!co) {
-               err("Failed to find Call Core object!");
-               return;
-       }
-
-       /* Call ID */
-       id = tcore_call_object_get_id(co);
-
-       /* Send notification to TAPI */
-       tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                       tcore_plugin_ref_core_object(p, "call"),
-                                                                       TNOTI_CALL_INFO_TRANSFERED,
-                                                                       sizeof(unsigned int),
-                                                                       (void*)&id);
-
-       dbg("Exit");
-       return;
-}
-
-static void s_call_info_cf_check_message(CoreObject *o, char* number)
-{
-       TcorePlugin *p = NULL;
-       CallObject *co = NULL;
-       int id = 0;
-       dbg("Entry");
-
-       /* Parent plugin */
-       p = tcore_object_ref_plugin(o);
-
-       /* Call Core object */
-       co = tcore_call_object_find_by_number(o, number);
-       if (!co) {
-               err("Failed to find Call Core object!");
-               return;
-       }
-
-       /* Call ID */
-       id = tcore_call_object_get_id(co);
-
-       /* Send notification to TAPI */
-       tcore_server_send_notification(tcore_plugin_ref_server(p),
-                                                                       tcore_plugin_ref_core_object(p, "call"),
-                                                                       TNOTI_CALL_INFO_CF_CHECK_MESSAGE,
-                                                                       sizeof(unsigned int),
-                                                                       (void*)&id);
-
-       dbg("Exit");
-       return;
-}
-
-/* Call Information Operations */
-static struct tcore_call_information_operations call_information_ops = {
-       .mo_call_col                            = 0,
-       .mo_call_waiting                        = s_call_info_mo_waiting,
-       .mo_call_cug                            = 0,
-       .mo_call_forwarded                  = s_call_info_mo_forwarded,
-       .mo_call_barred_incoming        = s_call_info_mo_barred_incoming,
-       .mo_call_barred_outgoing        = s_call_info_mo_barred_outgoing,
-       .mo_call_deflected                      = s_call_info_mo_deflected,
-       .mo_call_clir_suppression_reject = s_call_info_mo_clir_suppression_reject,
-       .mo_call_cfu                            = s_call_info_mo_cfu,
-       .mo_call_cfc                            = s_call_info_mo_cfc,
-       .mt_call_cli                            = s_call_info_mt_cli,
-       .mt_call_cna                            = s_call_info_mt_cna,
-       .mt_call_forwarded_call         = s_call_info_mt_forwarded_call,
-       .mt_call_cug_call                       = 0,
-       .mt_call_deflected_call         = s_call_info_mt_deflected_call,
-       .mt_call_transfered                     = s_call_info_mt_transfered,
-       .call_held                                      = s_call_info_held,
-       .call_active                            = s_call_info_active,
-       .call_joined                            = s_call_info_joined,
-       .call_released_on_hold          = s_call_info_released_on_hold,
-       .call_transfer_alert            = s_call_info_transfer_alert,
-       .call_transfered                        = s_call_info_transfered,
-       .call_cf_check_message          = s_call_info_cf_check_message,
-};
-
-gboolean s_call_init(TcorePlugin *p, TcoreHal *h)
-{
-       CoreObject *o = NULL;
-       struct property_call_info *data = NULL;
-       dbg("Entry");
-
-       /* Creating Call COre object */
-       o = tcore_call_new(p, "call", &call_ops, h);
-       if (!o) {
-               err("Failed to create Call Core Object");
-               return FALSE;
-       }
-
-       /* Set Call Operations */
-       tcore_call_information_set_operations(o, &call_information_ops);
-
-       /* Add Callbacks */
-       tcore_object_add_callback(o, "+XCALLSTAT", on_notification_call_info, NULL);
-       tcore_object_add_callback(o, "+CLIP", on_notification_call_clip_info, NULL);
-
-       /* User Data */
-       data = calloc(sizeof(struct property_call_info *), 1);
-       tcore_plugin_link_property(p, "CALL", data);
-
-       dbg("Exit");
-       return TRUE;
-}
-
-void s_call_exit(TcorePlugin *p)
-{
-       CoreObject *o = NULL;
-       struct property_network_info *data = NULL;
-       dbg("Entry");
-
-       o = tcore_plugin_ref_core_object(p, "call");
-
-       /* Free Call Core Object */
-       tcore_call_free(o);
-
-       /* Free 'CALL' property */
-       data = tcore_plugin_ref_property(p, "CALL");
-       if (data) {
-               g_free(data);
-       }
-
-       dbg("Exit");
-       return;
-}
+/*\r
+ * tel-plugin-imc\r
+ *\r
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: sharanayya mathapati <sharan.m@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include <glib.h>\r
+\r
+#include <tcore.h>\r
+#include <hal.h>\r
+#include <core_object.h>\r
+#include <plugin.h>\r
+#include <queue.h>\r
+#include <co_call.h>\r
+#include <user_request.h>\r
+#include <server.h>\r
+#include <at.h>\r
+\r
+#include "s_common.h"\r
+#include "s_call.h"\r
+\r
+\r
+#define STATUS_INCOMING           4\r
+#define STATUS_WAITING    5\r
+#define STATUS_CONNECTED   7\r
+#define COMMA                     0X2c\r
+\r
+static gboolean setsoundpath = FALSE;\r
+static gboolean soundvolume = FALSE;\r
+\r
+// End Cause field  - Call state end cause\r
+\r
+typedef enum {\r
+       CALL_END_NO_CAUSE,\r
+\r
+   // These definitions are taken from GSM 04.08 Table 10.86\r
+\r
+       CC_CAUSE_UNASSIGNED_NUMBER,\r
+       CC_CAUSE_NO_ROUTE_TO_DEST,\r
+       CC_CAUSE_CHANNEL_UNACCEPTABLE,\r
+       CC_CAUSE_OPERATOR_DETERMINED_BARRING,\r
+       CC_CAUSE_NORMAL_CALL_CLEARING,\r
+       CC_CAUSE_USER_BUSY,\r
+       CC_CAUSE_NO_USER_RESPONDING,\r
+       CC_CAUSE_USER_ALERTING_NO_ANSWER,\r
+       CC_CAUSE_CALL_REJECTED,\r
+       CC_CAUSE_NUMBER_CHANGED,\r
+       CC_CAUSE_NON_SELECTED_USER_CLEARING,\r
+       CC_CAUSE_DESTINATION_OUT_OF_ORDER,\r
+       CC_CAUSE_INVALID_NUMBER_FORMAT,\r
+       CC_CAUSE_FACILITY_REJECTED,\r
+       CC_CAUSE_RESPONSE_TO_STATUS_ENQUIRY,\r
+       CC_CAUSE_NORMAL_UNSPECIFIED,\r
+       CC_CAUSE_NO_CIRCUIT_CHANNEL_AVAILABLE,\r
+       CC_CAUSE_NETWORK_OUT_OF_ORDER,\r
+       CC_CAUSE_TEMPORARY_FAILURE,\r
+       CC_CAUSE_SWITCHING_EQUIPMENT_CONGESTION,\r
+       CC_CAUSE_ACCESS_INFORMATION_DISCARDED,\r
+       CC_CAUSE_REQUESTED_CIRCUIT_CHANNEL_NOT_AVAILABLE,\r
+       CC_CAUSE_RESOURCES_UNAVAILABLE_UNSPECIFIED,\r
+       CC_CAUSE_QUALITY_OF_SERVICE_UNAVAILABLE,\r
+       CC_CAUSE_REQUESTED_FACILITY_NOT_SUBSCRIBED,\r
+       CC_CAUSE_INCOMING_CALL_BARRED_WITHIN_CUG,\r
+       CC_CAUSE_BEARER_CAPABILITY_NOT_AUTHORISED,\r
+       CC_CAUSE_BEARER_CAPABILITY_NOT_PRESENTLY_AVAILABLE,\r
+       CC_CAUSE_SERVICE_OR_OPTION_NOT_AVAILABLE,\r
+       CC_CAUSE_BEARER_SERVICE_NOT_IMPLEMENTED,\r
+       CC_CAUSE_ACM_GEQ_ACMMAX,\r
+       CC_CAUSE_REQUESTED_FACILITY_NOT_IMPLEMENTED,\r
+       CC_CAUSE_ONLY_RESTRICTED_DIGITAL_INFO_BC_AVAILABLE,\r
+       CC_CAUSE_SERVICE_OR_OPTION_NOT_IMPLEMENTED,\r
+       CC_CAUSE_INVALID_TRANSACTION_ID_VALUE,\r
+       CC_CAUSE_USER_NOT_MEMBER_OF_CUG,\r
+       CC_CAUSE_INCOMPATIBLE_DESTINATION,\r
+       CC_CAUSE_INVALID_TRANSIT_NETWORK_SELECTION,\r
+       CC_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE,\r
+       CC_CAUSE_INVALID_MANDATORY_INFORMATION,\r
+       CC_CAUSE_MESSAGE_TYPE_NON_EXISTENT,\r
+       CC_CAUSE_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROT_STATE,\r
+       CC_CAUSE_IE_NON_EXISTENT_OR_NOT_IMPLEMENTED,\r
+       CC_CAUSE_CONDITIONAL_IE_ERROR,\r
+       CC_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE,\r
+       CC_CAUSE_RECOVERY_ON_TIMER_EXPIRY,\r
+       CC_CAUSE_PROTOCOL_ERROR_UNSPECIFIED,\r
+       CC_CAUSE_INTERWORKING_UNSPECIFIED,\r
+       CC_CAUSE_END = 128,\r
+\r
+       // Reject causes\r
+       REJECT_CAUSE_IMSI_UNKNOWN_IN_HLR,\r
+       REJECT_CAUSE_ILLEGAL_MS,\r
+    REJECT_CAUSE_IMSI_UNKNOWN_IN_VLR,\r
+       REJECT_CAUSE_IMEI_NOT_ACCEPTED,\r
+       REJECT_CAUSE_ILLEGAL_ME,\r
+       REJECT_CAUSE_GPRS_SERVICES_NOT_ALLOWED,\r
+       REJECT_CAUSE_GPRS_SERVICES_AND_NON_GPRS_SERVICES_NOT_ALLOWED,\r
+       REJECT_CAUSE_MS_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK,\r
+       REJECT_CAUSE_IMPLICITLY_DETACHED,\r
+       REJECT_CAUSE_PLMN_NOT_ALLOWED,\r
+       REJECT_CAUSE_LA_NOT_ALLOWED,\r
+       REJECT_CAUSE_NATIONAL_ROAMING_NOT_ALLOWED,\r
+       REJECT_CAUSE_GPRS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN,\r
+       REJECT_CAUSE_NO_SUITABLE_CELLS_IN_LA,\r
+       REJECT_CAUSE_MSC_TEMPORARILY_NOT_REACHABLE,\r
+       REJECT_CAUSE_NETWORK_FAILURE ,\r
+       REJECT_CAUSE_MAC_FAILURE,\r
+       REJECT_CAUSE_SYNCH_FAILURE,\r
+       REJECT_CAUSE_CONGESTTION,\r
+       REJECT_CAUSE_GSM_AUTH_UNACCEPTED,\r
+       REJECT_CAUSE_SERVICE_OPTION_NOT_SUPPORTED,\r
+       REJECT_CAUSE_REQ_SERV_OPT_NOT_SUBSCRIBED,\r
+       REJECT_CAUSE_SERVICE_OPT__OUT_OF_ORDER,\r
+       REJECT_CAUSE_CALL_CANNOT_BE_IDENTIFIED,\r
+       REJECT_CAUSE_NO_PDP_CONTEXT_ACTIVATED,\r
+       REJECT_CAUSE_RETRY_UPON_ENTRY_INTO_A_NEW_CELL_MIN_VALUE,\r
+       REJECT_CAUSE_RETRY_UPON_ENTRY_INTO_A_NEW_CELL_MAX_VALUE,\r
+       REJECT_CAUSE_SEMANTICALLY_INCORRECT_MSG,\r
+       REJECT_CAUSE_INVALID_MANDATORY_INFO,\r
+       REJECT_CAUSE_MESSAGE_TYPE_NON_EXISTANT,\r
+       REJECT_CAUSE_MESSAGE_TYPE_NOT_COMP_PRT_ST,\r
+       REJECT_CAUSE_IE_NON_EXISTANT,\r
+       REJECT_CAUSE_MSG_NOT_COMPATIBLE_PROTOCOL_STATE,\r
+\r
+\r
+       // Connection Management establishment rejection cause\r
+       REJECT_CAUSE_REJ_UNSPECIFIED,\r
+\r
+       // AS reject causes\r
+       REJECT_CAUSE_AS_REJ_RR_REL_IND,\r
+       REJECT_CAUSE_AS_REJ_RR_RANDOM_ACCESS_FAILURE,\r
+       REJECT_CAUSE_AS_REJ_RRC_REL_IND,\r
+       REJECT_CAUSE_AS_REJ_RRC_CLOSE_SESSION_IND,\r
+       REJECT_CAUSE_AS_REJ_RRC_OPEN_SESSION_FAILURE,\r
+       REJECT_CAUSE_AS_REJ_LOW_LEVEL_FAIL,\r
+       REJECT_CAUSE_AS_REJ_LOW_LEVEL_FAIL_REDIAL_NOT_ALLOWED,\r
+       REJECT_CAUSE_AS_REJ_LOW_LEVEL_IMMED_RETRY,\r
+\r
+       // MM reject causes\r
+       REJECT_CAUSE_MM_REJ_INVALID_SIM,\r
+       REJECT_CAUSE_MM_REJ_NO_SERVICE,\r
+       REJECT_CAUSE_MM_REJ_TIMER_T3230_EXP,\r
+       REJECT_CAUSE_MM_REJ_NO_CELL_AVAILABLE,\r
+       REJECT_CAUSE_MM_REJ_WRONG_STATE,\r
+       REJECT_CAUSE_MM_REJ_ACCESS_CLASS_BLOCKED,\r
+    // Definitions for release ind causes between MM  and CNM\r
+       REJECT_CAUSE_ABORT_MSG_RECEIVED,\r
+       REJECT_CAUSE_OTHER_CAUSE,\r
+\r
+       // CNM reject causes\r
+       REJECT_CAUSE_CNM_REJ_TIMER_T303_EXP,\r
+       REJECT_CAUSE_CNM_REJ_NO_RESOURCES,\r
+       REJECT_CAUSE_CNM_MM_REL_PENDING,\r
+       REJECT_CAUSE_CNM_INVALID_USER_DATA,\r
+       CALL_END_CAUSE_MAX = 255\r
+}call_end_cause_e_type;\r
+\r
+\r
+struct clcc_call_t {\r
+    struct call_CLCC_info {\r
+               int id;\r
+               enum tcore_call_direction       direction;\r
+               enum tcore_call_status          status;\r
+               enum tcore_call_type            type;\r
+               int mpty;\r
+               int num_len;\r
+               int num_type;\r
+       } info;\r
+       char number[90];\r
+};\r
+\r
+typedef struct {\r
+    int network_cause;\r
+    int tapi_cause;\r
+}call_end_cause_info;\r
+\r
+/**************************************************************************\r
+  *                                                    Local Function Prototypes\r
+  **************************************************************************/\r
+/*************************             REQUESTS                ***************************/\r
+static void _call_status_idle(TcorePlugin *p, CallObject *co);\r
+static void _call_status_active(TcorePlugin *p, CallObject *co);\r
+static void _call_status_dialing(TcorePlugin *p, CallObject *co);\r
+static void _call_status_alert(TcorePlugin *p, CallObject *co);\r
+static void _call_status_incoming(TcorePlugin *p, CallObject *co);\r
+static void _call_status_waiting(TcorePlugin *p, CallObject *co);\r
+static TReturn _call_list_get(CoreObject *o, gboolean *event_flag);\r
+static TReturn _set_dtmf_tone_duration(CoreObject *o, UserRequest *ur);\r
+\r
+/*************************             CONFIRMATION            ***************************/\r
+static void on_confirmation_call_message_send(TcorePending *p, gboolean result, void *user_data); // from Kernel\r
+static void on_confirmation_call_hold(TcorePending *p, int data_len, const void *data, void *user_data);\r
+static void on_confirmation_call_swap(TcorePending *p, int data_len, const void *data, void *user_data);\r
+static void on_confirmation_call_split(TcorePending *p, int data_len, const void *data, void *user_data);\r
+static void on_confirmation_call_hold_and_accept(TcorePending *p, int data_len, const void *data, void *user_data);\r
+\r
+static void _on_confirmation_call_release(TcorePending *p, int data_len, const void *data, void *user_data, int type);\r
+static void _on_confirmation_call(TcorePending *p, int data_len, const void *data, void *user_data, int type);\r
+static void _on_confirmation_dtmf_tone_duration(TcorePending *p, int data_len, const void *data, void *user_data);\r
+static void _on_confirmation_call_end_cause(TcorePending * p, int data_len, const void * data, void * user_data);\r
+\r
+/*************************             RESPONSES               ***************************/\r
+static void on_response_call_list_get(TcorePending *p, int data_len, const void *data, void *user_data);\r
+\r
+/*************************             NOTIIFICATIONS          ***************************/\r
+static void on_notification_call_waiting(CoreObject *o, const void *data, void *user_data);\r
+static void on_notification_call_incoming(CoreObject *o, const void *data, void *user_data);\r
+static void on_notification_call_status(CoreObject *o, const void *data, void *user_data);\r
+static gboolean on_notification_call_info(CoreObject *o, const void *data, void *user_data);\r
+static gboolean on_notification_call_clip_info(CoreObject *o, const void *data, void *user_data);\r
+\r
+\r
+/**************************************************************************\r
+  *                                                    Local Utility Function Prototypes\r
+  **************************************************************************/\r
+static gboolean _call_request_message(TcorePending *pending, CoreObject *o, UserRequest* ur, void* on_resp, void* user_data);\r
+static void _call_branch_by_status(TcorePlugin *p, CallObject *co, unsigned int status);\r
+static int _callFromCLCCLine(char *line, struct clcc_call_t *p_call);\r
+\r
+/**************************************************************************\r
+  *                                                    Local Function Definitions\r
+  **************************************************************************/\r
+\r
+const call_end_cause_info call_end_cause_table[] = { // call end cause table to convert Netwotk cause to TAPI cause\r
+\r
+    { 1,  CC_CAUSE_UNASSIGNED_NUMBER},     { 3, CC_CAUSE_NO_ROUTE_TO_DEST},\r
+    { 6,  CC_CAUSE_CHANNEL_UNACCEPTABLE},  { 8, CC_CAUSE_OPERATOR_DETERMINED_BARRING},\r
+    { 16, CC_CAUSE_NORMAL_CALL_CLEARING}, { 17, CC_CAUSE_USER_BUSY},\r
+    { 18, CC_CAUSE_NO_USER_RESPONDING},   { 19, CC_CAUSE_USER_ALERTING_NO_ANSWER},\r
+    { 21, CC_CAUSE_CALL_REJECTED},        { 22, CC_CAUSE_NUMBER_CHANGED},\r
+    { 26, CC_CAUSE_NON_SELECTED_USER_CLEARING}, { 27,  CC_CAUSE_DESTINATION_OUT_OF_ORDER},\r
+    { 28, CC_CAUSE_INVALID_NUMBER_FORMAT},      { 29,  CC_CAUSE_FACILITY_REJECTED},\r
+    { 30, CC_CAUSE_RESPONSE_TO_STATUS_ENQUIRY}, { 31,  CC_CAUSE_NORMAL_UNSPECIFIED},\r
+    { 34, CC_CAUSE_NO_CIRCUIT_CHANNEL_AVAILABLE},{ 38, CC_CAUSE_NETWORK_OUT_OF_ORDER},\r
+    { 41, CC_CAUSE_TEMPORARY_FAILURE},           { 42, CC_CAUSE_SWITCHING_EQUIPMENT_CONGESTION},\r
+    { 43, CC_CAUSE_ACCESS_INFORMATION_DISCARDED},{ 44, CC_CAUSE_REQUESTED_CIRCUIT_CHANNEL_NOT_AVAILABLE},\r
+    { 47, CC_CAUSE_RESOURCES_UNAVAILABLE_UNSPECIFIED}, { 49,  CC_CAUSE_QUALITY_OF_SERVICE_UNAVAILABLE},\r
+    { 50, CC_CAUSE_REQUESTED_FACILITY_NOT_SUBSCRIBED}, { 55,  CC_CAUSE_INCOMING_CALL_BARRED_WITHIN_CUG},\r
+    { 57, CC_CAUSE_BEARER_CAPABILITY_NOT_AUTHORISED},  { 58,  CC_CAUSE_BEARER_CAPABILITY_NOT_PRESENTLY_AVAILABLE},\r
+    { 63, CC_CAUSE_SERVICE_OR_OPTION_NOT_AVAILABLE},   { 65,  CC_CAUSE_BEARER_SERVICE_NOT_IMPLEMENTED},\r
+    { 68, CC_CAUSE_ACM_GEQ_ACMMAX}, { 69,  CC_CAUSE_REQUESTED_FACILITY_NOT_IMPLEMENTED},\r
+    { 70, CC_CAUSE_ONLY_RESTRICTED_DIGITAL_INFO_BC_AVAILABLE}, { 79,  CC_CAUSE_SERVICE_OR_OPTION_NOT_IMPLEMENTED},\r
+    { 81, CC_CAUSE_INVALID_TRANSACTION_ID_VALUE}, { 87,  CC_CAUSE_USER_NOT_MEMBER_OF_CUG},\r
+    { 88, CC_CAUSE_INCOMPATIBLE_DESTINATION}, { 91,  CC_CAUSE_INVALID_TRANSIT_NETWORK_SELECTION},\r
+    { 95, CC_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE}, { 96,  CC_CAUSE_INVALID_MANDATORY_INFORMATION},\r
+    { 97, CC_CAUSE_MESSAGE_TYPE_NON_EXISTENT}, { 98,  CC_CAUSE_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROT_STATE},\r
+    { 99, CC_CAUSE_IE_NON_EXISTENT_OR_NOT_IMPLEMENTED}, { 100,  CC_CAUSE_CONDITIONAL_IE_ERROR},\r
+    { 101,CC_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE},{ 102,  CC_CAUSE_RECOVERY_ON_TIMER_EXPIRY},\r
+    { 111 ,CC_CAUSE_PROTOCOL_ERROR_UNSPECIFIED}, {127,  CC_CAUSE_INTERWORKING_UNSPECIFIED},\r
+\r
+};\r
+\r
+static enum tcore_call_cli_mode _get_clir_status(char *num)\r
+{\r
+       enum tcore_call_cli_mode clir = CALL_CLI_MODE_DEFAULT;\r
+       dbg("Entry");\r
+\r
+       if(!strncmp(num, "*31#", 4)) {\r
+               dbg("CLI mode restricted");\r
+               return TCORE_CALL_CLI_MODE_RESTRICT;\r
+       }\r
+\r
+       if(!strncmp(num, "#31#", 4)) {\r
+               dbg("CLI mode allowed");\r
+               return TCORE_CALL_CLI_MODE_PRESENT;\r
+       }\r
+\r
+       err("Exit");\r
+       return clir;\r
+}\r
+\r
+static enum tcore_call_status _call_status(unsigned int status)\r
+{\r
+       dbg("Entry");\r
+\r
+       switch(status) {\r
+               case 0:\r
+                       return TCORE_CALL_STATUS_ACTIVE;\r
+               case 1:\r
+                       return TCORE_CALL_STATUS_HELD;\r
+               case 2:\r
+                       return TCORE_CALL_STATUS_DIALING;\r
+               case 3:\r
+                       return TCORE_CALL_STATUS_ALERT;\r
+               case 4:\r
+                       return TCORE_CALL_STATUS_INCOMING;\r
+               case 5:\r
+                       return TCORE_CALL_STATUS_WAITING;\r
+               case 6:         // DISCONNECTED state  // FALL THROUGH\r
+               default:\r
+                       return TCORE_CALL_STATUS_IDLE;\r
+       }\r
+}\r
+\r
+static gboolean _call_is_in_mpty(int mpty)\r
+{\r
+       dbg("Entry");\r
+\r
+       switch(mpty) {\r
+               case 0:\r
+                       return FALSE;\r
+               case 1:\r
+                       return TRUE;\r
+               default:\r
+                       break;\r
+       }\r
+\r
+       return FALSE;\r
+}\r
+\r
+static enum tcore_call_type call_type(int type)\r
+{\r
+       dbg("Entry");\r
+\r
+       switch (type) {\r
+               case 0:\r
+                       return TCORE_CALL_TYPE_VOICE;\r
+               case 1:\r
+                       return TCORE_CALL_TYPE_VIDEO;\r
+               default:\r
+                       break;\r
+       }\r
+\r
+       return TCORE_CALL_TYPE_VOICE;\r
+}\r
+\r
+static int _compare_call_end_cause(int networkcause)\r
+{\r
+    dbg("Entry");\r
+       unsigned int count;\r
+    for (count = 0; count < sizeof(call_end_cause_table)/sizeof(call_end_cause_info); count++){\r
+        if (call_end_cause_table[count].network_cause == networkcause)\r
+            return (call_end_cause_table[count].tapi_cause);\r
+    }\r
+    return CC_CAUSE_NORMAL_CALL_CLEARING;\r
+    dbg("Exit");\r
+}\r
+\r
+static gboolean on_notification_call_clip_info(CoreObject *o, const void *data, void *user_data)\r
+{\r
+       dbg("Entry");\r
+\r
+       // TODO\r
+\r
+       return TRUE;\r
+}\r
+\r
+static gboolean on_notification_call_info(CoreObject *o, const void *data, void *user_data)\r
+{\r
+       GSList *tokens = NULL;\r
+       GSList *lines = NULL;\r
+       const char *line = NULL;\r
+       char *stat;\r
+       int status;\r
+\r
+       dbg("Entry");\r
+\r
+       lines = (GSList*)data;\r
+       if (1 != g_slist_length(lines)) {\r
+               err("Unsolicited message, BUT multiple lines present");\r
+               goto OUT;\r
+       }\r
+\r
+       line = (char*)(lines->data);\r
+       tokens = tcore_at_tok_new(line);\r
+\r
+       stat = g_slist_nth_data(tokens, 1);\r
+       if(!stat) {\r
+               dbg("Stat is missing from %XCALLSTAT indiaction");\r
+       }\r
+       else {\r
+               status  = atoi(stat);\r
+\r
+               switch(status) {\r
+                       case STATUS_INCOMING:\r
+                               dbg("calling on_notification_call_incoming");\r
+                               on_notification_call_incoming(o, line, user_data);\r
+                       break;\r
+                       case STATUS_WAITING:\r
+                               dbg("calling on_notification_call_waiting");\r
+                               on_notification_call_waiting(o, line, user_data);\r
+                       break;\r
+                       case STATUS_CONNECTED: /*igonre Connected state. */\r
+                               dbg("Connected state");\r
+                       break;\r
+                       default:\r
+                               dbg("calling on_notification_call_status");\r
+                               on_notification_call_status(o, line, user_data);\r
+                       break;\r
+               }\r
+       }\r
+\r
+       // Free tokens\r
+       tcore_at_tok_free(tokens);\r
+\r
+OUT:\r
+       dbg("Exit");\r
+       return TRUE;\r
+}\r
+\r
+static gboolean _call_request_message(TcorePending *pending,\r
+                                                                               CoreObject *o,\r
+                                                                               UserRequest *ur,\r
+                                                                               void* on_resp,\r
+                                                                               void* user_data)\r
+{\r
+       TcoreHal *hal = NULL;\r
+       TReturn ret;\r
+       dbg("Entry");\r
+\r
+       tcore_pending_set_timeout(pending, 0);\r
+       tcore_pending_set_priority(pending, TCORE_PENDING_PRIORITY_DEFAULT);\r
+\r
+       if (on_resp) {\r
+               tcore_pending_set_response_callback(pending, on_resp, user_data);\r
+       }\r
+       tcore_pending_set_send_callback(pending, on_confirmation_call_message_send, NULL);\r
+\r
+       if (ur) {\r
+               tcore_pending_link_user_request(pending, ur);\r
+       }\r
+       else {\r
+               err("User Request is NULL, is this internal request??");\r
+       }\r
+\r
+       // HAL\r
+       hal = tcore_object_get_hal(o);\r
+       // Send request to HAL\r
+       ret = tcore_hal_send_request(hal, pending);\r
+       if(TCORE_RETURN_SUCCESS != ret) {\r
+               err("Request send failed");\r
+               return FALSE;\r
+       }\r
+\r
+       dbg("Exit");\r
+       return TRUE;\r
+}\r
+\r
+static void _call_status_idle(TcorePlugin *p, CallObject *co)\r
+{\r
+       CoreObject *core_obj = NULL;\r
+    char *cmd_str = NULL;\r
+       TcorePending *pending = NULL;\r
+       TcoreATRequest *req = NULL;\r
+       gboolean ret = FALSE;\r
+    UserRequest *ur;\r
+\r
+       dbg("Entry");\r
+       core_obj = tcore_plugin_ref_core_object(p, "call");\r
+       dbg("Call ID [%d], Call Status [%d]", tcore_call_object_get_id(co), tcore_call_object_get_status(co));\r
+\r
+       if (tcore_call_object_get_status(co) != TCORE_CALL_STATUS_IDLE) {\r
+\r
+               //get call end cause.\r
+        cmd_str = g_strdup_printf("%s","AT+XCEER");\r
+       dbg("Request command string: %s", cmd_str);\r
+\r
+       // Create new Pending request\r
+       pending = tcore_pending_new(core_obj, 0);\r
+\r
+       // Create new AT-Command request\r
+       req = tcore_at_request_new(cmd_str, "+XCEER", TCORE_AT_SINGLELINE);\r
+       dbg("Command: %s, prefix(if any): %s, Command length: %d", req->cmd, req->prefix, strlen(req->cmd));\r
+       // Free command string\r
+       g_free(cmd_str);\r
+\r
+               // Set request data (AT command) to Pending request\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+\r
+        ur  = tcore_user_request_new(NULL, NULL);\r
+       // Send request\r
+       ret = _call_request_message (pending, core_obj, ur, _on_confirmation_call_end_cause, co);\r
+\r
+       if (!ret) {\r
+               err("Failed to send AT-Command request");\r
+               return ;\r
+       }\r
+\r
+       }\r
+       else {\r
+               err("Call object was not free");\r
+               tcore_call_object_free(core_obj, co);\r
+       }\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void _call_status_dialing(TcorePlugin *p, CallObject *co)\r
+{\r
+       struct tnoti_call_status_dialing data;\r
+       dbg("Entry");\r
+\r
+       if (tcore_call_object_get_status(co) != TCORE_CALL_STATUS_DIALING) {\r
+               data.type = tcore_call_object_get_type(co);\r
+               dbg("data.type : [%d]", data.type);\r
+\r
+               data.id = tcore_call_object_get_id(co);\r
+               dbg("data.id : [%d]", data.id);\r
+\r
+               // Set Status\r
+               tcore_call_object_set_status(co, TCORE_CALL_STATUS_DIALING);\r
+\r
+               // Send notification to TAPI\r
+               tcore_server_send_notification(tcore_plugin_ref_server(p),\r
+                                                                               tcore_plugin_ref_core_object(p, "call"),\r
+                                                                               TNOTI_CALL_STATUS_DIALING,\r
+                                                                               sizeof(struct tnoti_call_status_dialing),\r
+                                                                               (void*)&data);\r
+\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void _call_status_alert(TcorePlugin *p, CallObject *co)\r
+{\r
+       struct tnoti_call_status_alert data;\r
+       dbg("Entry");\r
+\r
+       // Alerting has just 1 data 'CALL ID'\r
+       if (tcore_call_object_get_status(co) != TCORE_CALL_STATUS_ALERT) {\r
+               data.type = tcore_call_object_get_type(co);\r
+               dbg("data.type : [%d]", data.type);\r
+\r
+               data.id = tcore_call_object_get_id(co);\r
+               dbg("data.id : [%d]", data.id);\r
+\r
+               // Set Status\r
+               tcore_call_object_set_status(co, TCORE_CALL_STATUS_ALERT);\r
+\r
+               // Send notification to TAPI\r
+               tcore_server_send_notification(tcore_plugin_ref_server(p),\r
+                                                                               tcore_plugin_ref_core_object(p, "call"),\r
+                                                                               TNOTI_CALL_STATUS_ALERT,\r
+                                                                               sizeof(struct tnoti_call_status_alert),\r
+                                                                               (void*)&data);\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void _call_status_active(TcorePlugin *p, CallObject *co)\r
+{\r
+       struct tnoti_call_status_active data;\r
+       dbg("Entry");\r
+\r
+       if (tcore_call_object_get_status(co) != TCORE_CALL_STATUS_ACTIVE) {\r
+               data.type = tcore_call_object_get_type(co);\r
+               dbg("data.type : [%d]", data.type);\r
+\r
+               data.id = tcore_call_object_get_id(co);\r
+               dbg("data.id : [%d]", data.id);\r
+\r
+               // Set Status\r
+               tcore_call_object_set_status(co, TCORE_CALL_STATUS_ACTIVE);\r
+\r
+               // Send notification to TAPI\r
+               tcore_server_send_notification(tcore_plugin_ref_server(p),\r
+                                                                               tcore_plugin_ref_core_object(p, "call"),\r
+                                                                               TNOTI_CALL_STATUS_ACTIVE,\r
+                                                                               sizeof(struct tnoti_call_status_active),\r
+                                                                               (void*)&data);\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void _call_status_held(TcorePlugin *p, CallObject *co)\r
+{\r
+       struct tnoti_call_status_held data;\r
+       dbg("Entry");\r
+\r
+       if (tcore_call_object_get_status(co) != TCORE_CALL_STATUS_HELD) {\r
+               data.type = tcore_call_object_get_type(co);\r
+               dbg("data.type : [%d]", data.type);\r
+\r
+               data.id = tcore_call_object_get_id(co);\r
+               dbg("data.id : [%d]", data.id);\r
+\r
+               // Set Status\r
+               tcore_call_object_set_status(co, TCORE_CALL_STATUS_HELD);\r
+\r
+               // Send notification to TAPI\r
+               tcore_server_send_notification(tcore_plugin_ref_server(p),\r
+                                                                       tcore_plugin_ref_core_object(p, "call"),\r
+                                                                       TNOTI_CALL_STATUS_HELD,\r
+                                                                       sizeof(struct tnoti_call_status_held),\r
+                                                                       (void*)&data);\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void _call_status_incoming(TcorePlugin *p, CallObject *co)\r
+{\r
+       struct tnoti_call_status_incoming data;\r
+       dbg("Entry");\r
+\r
+       if (tcore_call_object_get_status(co) != TCORE_CALL_STATUS_INCOMING) {\r
+               tcore_call_object_set_status(co, TCORE_CALL_STATUS_INCOMING);\r
+\r
+               data.type = tcore_call_object_get_type(co);\r
+               dbg("data.type : [%d]", data.type);\r
+\r
+               data.id = tcore_call_object_get_id(co);\r
+               dbg("data.id : [%d]", data.id);\r
+\r
+               data.cli.mode = tcore_call_object_get_cli_mode(co);\r
+               dbg("data.cli.mode : [%d]", data.cli.mode);\r
+\r
+               tcore_call_object_get_number(co, data.cli.number);\r
+               dbg("data.cli.number : [%s]", data.cli.number);\r
+\r
+               data.cna.mode = tcore_call_object_get_cna_mode(co);\r
+               dbg("data.cna.mode : [%d]", data.cna.mode);\r
+\r
+               tcore_call_object_get_name(co, data.cna.name);\r
+               dbg("data.cna.name : [%s]", data.cna.name);\r
+\r
+               data.forward = FALSE; // this is tmp code\r
+\r
+               data.active_line = tcore_call_object_get_active_line(co);\r
+               dbg("data.active_line : [%d]", data.active_line);\r
+\r
+               // Send notification to TAPI\r
+               tcore_server_send_notification(tcore_plugin_ref_server(p),\r
+                                                                               tcore_plugin_ref_core_object(p, "call"),\r
+                                                                               TNOTI_CALL_STATUS_INCOMING,\r
+                                                                               sizeof(struct tnoti_call_status_incoming),\r
+                                                                               (void*)&data);\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void _call_status_waiting(TcorePlugin *p, CallObject *co)\r
+{\r
+       dbg("Entry");\r
+       _call_status_incoming(p, co);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void _call_branch_by_status(TcorePlugin *p, CallObject *co, unsigned int status)\r
+{\r
+       dbg("Entry");\r
+\r
+       dbg("Call Status is %d", status);\r
+       switch (status) {\r
+               case TCORE_CALL_STATUS_IDLE:\r
+                       _call_status_idle(p, co);\r
+                       break;\r
+\r
+               case TCORE_CALL_STATUS_ACTIVE:\r
+                       _call_status_active(p, co);\r
+                       break;\r
+\r
+               case TCORE_CALL_STATUS_HELD:\r
+                       _call_status_held(p, co);\r
+                       break;\r
+\r
+               case TCORE_CALL_STATUS_DIALING:\r
+                       _call_status_dialing(p, co);\r
+                       break;\r
+\r
+               case TCORE_CALL_STATUS_ALERT:\r
+                       _call_status_alert(p, co);\r
+                       break;\r
+\r
+               case TCORE_CALL_STATUS_INCOMING:\r
+                       _call_status_incoming(p, co);\r
+                       break;\r
+\r
+               case TCORE_CALL_STATUS_WAITING:\r
+                       _call_status_waiting(p, co);\r
+                       break;\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static TReturn _call_list_get(CoreObject *o, gboolean *event_flag)\r
+{\r
+       UserRequest* ur = NULL;\r
+       TcorePending *pending = NULL;\r
+       char *cmd_str = NULL;\r
+       TcoreATRequest *req = NULL;\r
+       gboolean ret = FALSE;\r
+\r
+       dbg("Entry");\r
+       if (!o) {\r
+               err("Core Object is NULL");\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+       // Create new User Request\r
+       ur = tcore_user_request_new(NULL, NULL);\r
+\r
+       // Command string\r
+       cmd_str = g_strdup("AT+CLCC");\r
+\r
+       // Create new Pending Request\r
+       pending = tcore_pending_new(o, 0);\r
+       req = tcore_at_request_new(cmd_str, "+CLCC", TCORE_AT_MULTILINE);\r
+\r
+       g_free(cmd_str);\r
+\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+\r
+       ret = _call_request_message (pending, o, ur, on_response_call_list_get, event_flag);\r
+       if (!ret) {\r
+               err("AT request (%s) sending failed", req->cmd);\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+       dbg("AT request sent success");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+// CONFIRMATION\r
+static void on_confirmation_call_message_send(TcorePending *p, gboolean result, void *user_data)\r
+{\r
+       dbg("Entry");\r
+\r
+       if (result == FALSE) {  // Fail\r
+               dbg("SEND FAIL");\r
+       }\r
+       else {\r
+               dbg("SEND OK");\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void on_confirmation_call_outgoing(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest *ur = NULL;\r
+       GSList *tokens = NULL;\r
+       const char *line = NULL;\r
+       const TcoreATResponse* response = data;\r
+       struct tresp_call_dial resp;\r
+       int error;\r
+       dbg("Entry");\r
+\r
+       ur = tcore_pending_ref_user_request(p);\r
+       if (ur) {\r
+               if (response->success > 0) {\r
+                       dbg("RESPONSE OK");\r
+                       resp.err = TCORE_RETURN_SUCCESS;\r
+               }\r
+               else {\r
+                       dbg("RESPONSE NOT OK");\r
+\r
+                       line = (const char*)response->final_response;\r
+                       tokens = tcore_at_tok_new(line);\r
+\r
+                       if (g_slist_length(tokens) < 1) {\r
+                               err("Unspecified error cause OR string corrupted");\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       }\r
+                       else {\r
+                               error = atoi(g_slist_nth_data(tokens, 0));\r
+\r
+                               // TODO: CMEE error mapping is required.\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       }\r
+\r
+                       // Free tokens\r
+                       tcore_at_tok_free(tokens);\r
+               }\r
+\r
+               // Send Response to TAPI\r
+               tcore_user_request_send_response(ur, TRESP_CALL_DIAL, sizeof(struct tresp_call_dial), &resp);\r
+       }\r
+       else {\r
+               err("User Request is NULL");\r
+       }\r
+\r
+       dbg("Exit")\r
+       return;\r
+}\r
+\r
+static void on_confirmation_call_accept(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest *ur = NULL;\r
+       GSList *tokens = NULL;\r
+       const char *line = NULL;\r
+       const TcoreATResponse* response = data;\r
+       struct tresp_call_answer resp;\r
+       int error;\r
+       dbg("Entry");\r
+\r
+       ur = tcore_pending_ref_user_request(p);\r
+       if (ur) {\r
+               if (response->success > 0) {\r
+                       dbg("RESPONSE OK");\r
+                       resp.err = TCORE_RETURN_SUCCESS;\r
+               }\r
+               else {\r
+                       dbg("RESPONSE NOT OK");\r
+\r
+                       line = (const char*)response->final_response;\r
+                       tokens = tcore_at_tok_new(line);\r
+\r
+                       if (g_slist_length(tokens) < 1) {\r
+                               err("Unspecified error cause OR string corrupted");\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       }\r
+                       else {\r
+                               error = atoi(g_slist_nth_data(tokens, 0));\r
+\r
+                               // TODO: CMEE error mapping is required.\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       }\r
+\r
+                       //Free tokens\r
+                       tcore_at_tok_free(tokens);\r
+               }\r
+\r
+               resp.id =   tcore_call_object_get_id((CallObject*)user_data);\r
+\r
+               // Send Response to TAPI\r
+               tcore_user_request_send_response(ur, TRESP_CALL_ANSWER, sizeof(struct tresp_call_answer), &resp);\r
+       }\r
+       else {\r
+               err("User Request is NULL");\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+\r
+static void on_confirmation_call_reject(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest *ur = NULL;\r
+       GSList *tokens = NULL;\r
+       const char *line = NULL;\r
+       const TcoreATResponse* response = data;\r
+       struct tresp_call_answer resp;\r
+       int error;\r
+\r
+       dbg("Entry");\r
+\r
+       ur = tcore_pending_ref_user_request(p);\r
+       if (ur) {\r
+               if (response->success > 0) {\r
+\r
+                       dbg("RESPONSE OK");\r
+                       resp.err = TCORE_RETURN_SUCCESS;\r
+               }\r
+               else {\r
+\r
+                       dbg("RESPONSE NOT OK");\r
+                       line = (const char*)response->final_response;\r
+                       tokens = tcore_at_tok_new(line);\r
+\r
+                       if (g_slist_length(tokens) < 1) {\r
+                               err("Unspecified error cause OR string corrupted");\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       }\r
+                       else {\r
+\r
+                               error = atoi(g_slist_nth_data(tokens, 0));\r
+                               // TODO: CMEE error mapping is required.\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       }\r
+\r
+                       // Free tokens\r
+                       tcore_at_tok_free(tokens);\r
+               }\r
+\r
+               resp.id =   tcore_call_object_get_id((CallObject*)user_data);\r
+\r
+               //Send Response to TAPI\r
+               tcore_user_request_send_response(ur, TRESP_CALL_ANSWER, sizeof(struct tresp_call_answer), &resp);\r
+       }\r
+       else {\r
+               err("User Request is NULL");\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void on_confirmation_call_replace(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest *ur = NULL;\r
+       GSList *tokens = NULL;\r
+       const char *line = NULL;\r
+       const TcoreATResponse* response = data;\r
+       struct tresp_call_answer resp;\r
+       int error;\r
+\r
+       dbg("Entry");\r
+       ur = tcore_pending_ref_user_request(p);\r
+       if (ur) {\r
+        if (response->success > 0) {\r
+                       dbg("RESPONSE OK");\r
+                       resp.err = TCORE_RETURN_SUCCESS;\r
+               }\r
+               else {\r
+\r
+                       dbg("RESPONSE NOT OK");\r
+                       line = (const char*)response->final_response;\r
+                       tokens = tcore_at_tok_new(line);\r
+\r
+                       if (g_slist_length(tokens) < 1) {\r
+                               err("Unspecified error cause OR string corrupted");\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       }\r
+                       else {\r
+                error = atoi(g_slist_nth_data(tokens, 0));\r
+                               // TODO: CMEE error mapping is required.\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       }\r
+\r
+                       // Free tokens\r
+                       tcore_at_tok_free(tokens);\r
+               }\r
+               resp.id =   tcore_call_object_get_id((CallObject*)user_data);\r
+\r
+               // Send Response to TAPI\r
+               tcore_user_request_send_response(ur, TRESP_CALL_ANSWER, sizeof(struct tresp_call_answer), &resp);\r
+       }\r
+       else {\r
+               dbg("User Request is NULL");\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void on_confirmation_call_hold_and_accept(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       CoreObject *o = NULL;\r
+       UserRequest *ur = NULL;\r
+       GSList *tokens = NULL;\r
+       const char *line = NULL;\r
+       const TcoreATResponse* response = data;\r
+       struct tresp_call_answer resp;\r
+       int error;\r
+\r
+       dbg("Entry");\r
+\r
+       o  = tcore_pending_ref_core_object(p);\r
+       ur = tcore_pending_ref_user_request(p);\r
+       resp.id  =  tcore_call_object_get_id((CallObject*)user_data);\r
+\r
+       if (ur) {\r
+               if (response->success > 0) {\r
+                       dbg("RESPONSE OK");\r
+                       resp.err = TCORE_RETURN_SUCCESS;\r
+               }\r
+               else {\r
+                       err("RESPONSE NOT OK");\r
+                       line = (const char*)response->final_response;\r
+                       tokens = tcore_at_tok_new(line);\r
+\r
+                       if (g_slist_length(tokens) < 1) {\r
+                               err("Unspecified error cause OR string corrupted");\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       }\r
+                       else {\r
+                               error = atoi(g_slist_nth_data(tokens, 0));\r
+\r
+                               // TODO: CMEE error mapping is required.\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       }\r
+\r
+                       // Free tokens\r
+                       tcore_at_tok_free(tokens);\r
+               }\r
+\r
+               // Send response to TAPI\r
+               tcore_user_request_send_response(ur, TRESP_CALL_ANSWER, sizeof(struct tresp_call_answer), &resp);\r
+               if (!resp.err) {\r
+\r
+            GSList *list = 0;\r
+            CallObject *co = NULL;\r
+\r
+            // Active Call\r
+            list = tcore_call_object_find_by_status(o, TCORE_CALL_STATUS_ACTIVE);\r
+            if (!list) {\r
+               err("Can't find active Call");\r
+               return;\r
+            }\r
+\r
+            co = (CallObject*)list->data;\r
+            if (!co) {\r
+               err("Can't get active Call object");\r
+               return;\r
+            }\r
+\r
+            // Set Call Status\r
+            tcore_call_object_set_status(co, TCORE_CALL_STATUS_HELD);\r
+            dbg("Call status is set to HELD");\r
+               }\r
+       }\r
+       else {\r
+               err("User Request is NULL");\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void _on_confirmation_call_release(TcorePending *p, int data_len, const void *data, void *user_data, int type)\r
+{\r
+       UserRequest *ur = NULL;\r
+       struct tresp_call_end resp;\r
+       GSList *tokens = NULL;\r
+       const char *line = NULL;\r
+       int error;\r
+       const TcoreATResponse* response = data;\r
+\r
+    dbg("Entry");\r
+       ur = tcore_pending_ref_user_request(p);\r
+       if (ur) {\r
+               if (response->success > 0) {\r
+                       dbg("RESPONSE OK");\r
+                       resp.err = TCORE_RETURN_SUCCESS;\r
+               }\r
+               else {\r
+                       err("RESPONSE NOT OK");\r
+\r
+                       line = (const char*)response->final_response;\r
+                       tokens = tcore_at_tok_new(line);\r
+\r
+                       if (g_slist_length(tokens) < 1) {\r
+                               err("Unspecified error cause OR string corrupted");\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       }\r
+                       else {\r
+                               error = atoi(g_slist_nth_data(tokens, 0));\r
+\r
+                               // TODO: CMEE error mapping is required.\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       }\r
+                       tcore_at_tok_free(tokens);\r
+               }\r
+\r
+               resp.type = type;\r
+               resp.id =   tcore_call_object_get_id((CallObject*)user_data);\r
+               dbg("resp.type = %d  resp.id= %d", resp.type,resp.id);\r
+\r
+               // Send reponse to TAPI\r
+               tcore_user_request_send_response(ur, TRESP_CALL_END, sizeof(struct tresp_call_end), &resp);\r
+       }\r
+       else {\r
+               err("User Request is NULL");\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+// RESPONSE\r
+static void on_confirmation_call_endall(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       // skip response handling - actual result will be handled in on_confirmation_call_release_all\r
+       const TcoreATResponse* response = data;\r
+       dbg("Entry");\r
+\r
+       if (response->success > 0) {\r
+               dbg("RESPONSE OK");\r
+       }\r
+       else {\r
+               err("RESPONSE NOT OK");\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+\r
+static void on_confirmation_call_release_all(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       dbg("Entry");\r
+       _on_confirmation_call_release(p, data_len, data, user_data, CALL_END_TYPE_ALL);\r
+\r
+       return;\r
+}\r
+\r
+\r
+static void on_confirmation_call_release_specific(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       dbg("Entry");\r
+       _on_confirmation_call_release(p, data_len, data, user_data, CALL_END_TYPE_DEFAULT);\r
+\r
+       return;\r
+}\r
+\r
+static void on_confirmation_call_release_all_active(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       dbg("Entry");\r
+       _on_confirmation_call_release(p, data_len, data, user_data, CALL_END_TYPE_ACTIVE_ALL);\r
+\r
+       return;\r
+}\r
+\r
+static void on_confirmation_call_release_all_held(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       dbg("Entry");\r
+       _on_confirmation_call_release(p, data_len, data, user_data, CALL_END_TYPE_HOLD_ALL);\r
+\r
+        return;\r
+}\r
+\r
+static void _on_confirmation_call(TcorePending *p, int data_len, const void *data, void *user_data, int type)\r
+{\r
+       UserRequest *ur = NULL;\r
+       GSList *tokens = NULL;\r
+       const char *line = NULL;\r
+       const TcoreATResponse *response = NULL;\r
+       int error;\r
+\r
+       dbg("Entry");\r
+       ur = tcore_pending_ref_user_request(p);\r
+       response = (TcoreATResponse *)data;\r
+       if (response->success > 0) {\r
+               dbg("RESPONSE OK");\r
+               error = TCORE_RETURN_SUCCESS;\r
+       }\r
+       else {\r
+               err("RESPONSE NOT OK");\r
+\r
+               line = (const char*)response->final_response;\r
+               tokens = tcore_at_tok_new(line);\r
+\r
+               if (g_slist_length(tokens) < 1) {\r
+                       err("Unspecified error cause OR string corrupted");\r
+                       error = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               else {\r
+                       error = atoi(g_slist_nth_data(tokens, 0));\r
+\r
+                       // TODO: CMEE error mapping is required.\r
+                       error = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+\r
+               // Free tokens\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+\r
+       dbg("Response Call type -%d", type);\r
+       switch(type){\r
+\r
+               case TRESP_CALL_HOLD:\r
+               {\r
+                       struct tresp_call_hold resp;\r
+\r
+                       resp.err = error;\r
+                       resp.id = tcore_call_object_get_id((CallObject*)user_data);\r
+             dbg("call hold response");\r
+                       // Send reponse to TAPI\r
+                       tcore_user_request_send_response(ur, TRESP_CALL_HOLD, sizeof(struct tresp_call_hold), &resp);\r
+               }\r
+               break;\r
+               case TRESP_CALL_ACTIVE:\r
+               {\r
+                       struct tresp_call_active resp;\r
+\r
+                       resp.err = error;\r
+                       resp.id = tcore_call_object_get_id((CallObject*)user_data);\r
+            dbg("call active response");\r
+                       // Send reponse to TAPI\r
+                       tcore_user_request_send_response(ur, TRESP_CALL_ACTIVE, sizeof(struct tresp_call_active), &resp);\r
+               }\r
+               break;\r
+               case TRESP_CALL_JOIN:\r
+               {\r
+                       struct tresp_call_join resp;\r
+\r
+                       resp.err = error;\r
+                       resp.id = tcore_call_object_get_id((CallObject*)user_data);\r
+            dbg("call join response");\r
+\r
+                       // Send reponse to TAPI\r
+                       tcore_user_request_send_response(ur, TRESP_CALL_JOIN, sizeof(struct tresp_call_join), &resp);\r
+               }\r
+               break;\r
+               case TRESP_CALL_SPLIT:\r
+               {\r
+                       struct tresp_call_split resp;\r
+\r
+                       resp.err = error;\r
+                       resp.id = tcore_call_object_get_id((CallObject*)user_data);\r
+            dbg("call split response");\r
+                       // Send reponse to TAPI\r
+                       tcore_user_request_send_response(ur, TRESP_CALL_SPLIT, sizeof(struct tresp_call_split), &resp);\r
+               }\r
+               break;\r
+               case TRESP_CALL_DEFLECT:\r
+               {\r
+                       struct tresp_call_deflect resp;\r
+\r
+                       resp.err = error;\r
+                       resp.id = tcore_call_object_get_id((CallObject*)user_data);\r
+            dbg("call deflect response");\r
+                       // Send reponse to TAPI\r
+                       tcore_user_request_send_response(ur, TRESP_CALL_DEFLECT, sizeof(struct tresp_call_deflect), &resp);\r
+               }\r
+\r
+               break;\r
+               case TRESP_CALL_TRANSFER:\r
+               {\r
+                       struct tresp_call_transfer resp;\r
+\r
+                       resp.err = error;\r
+                       resp.id = tcore_call_object_get_id((CallObject*)user_data);\r
+            dbg("call transfer response");\r
+                       //Send reponse to TAPI\r
+                       tcore_user_request_send_response(ur, TRESP_CALL_TRANSFER, sizeof(struct tresp_call_transfer), &resp);\r
+               }\r
+               break;\r
+               case TRESP_CALL_SEND_DTMF:\r
+               {\r
+                       struct tresp_call_dtmf resp;\r
+\r
+                       resp.err = error;\r
+            dbg("call dtmf response");\r
+                       // Send reponse to TAPI\r
+                       tcore_user_request_send_response(ur, TRESP_CALL_SEND_DTMF, sizeof(struct tresp_call_dtmf), &resp);\r
+               }\r
+               break;\r
+               default:\r
+               {\r
+                       dbg("type not supported");\r
+                       return;\r
+               }\r
+       }\r
+\r
+       if ((type == TRESP_CALL_HOLD)||(type == TRESP_CALL_ACTIVE)||(type == TRESP_CALL_JOIN)\r
+        ||(type == TRESP_CALL_SPLIT)) {\r
+\r
+               if (!error) {\r
+                       CoreObject *core_obj = NULL;\r
+                       gboolean *eflag = g_new0(gboolean, 1);\r
+\r
+                       core_obj  = tcore_pending_ref_core_object(p);\r
+                       *eflag = FALSE;\r
+\r
+                       dbg("Calling _call_list_get");\r
+                       _call_list_get(core_obj, eflag);\r
+               }\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void on_confirmation_call_hold(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       dbg("Entry");\r
+       _on_confirmation_call(p, data_len, data, user_data, TRESP_CALL_HOLD);\r
+\r
+       return;\r
+}\r
+\r
+static void on_confirmation_call_active(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       dbg("Entry");\r
+       _on_confirmation_call(p, data_len, data, user_data, TRESP_CALL_ACTIVE);\r
+\r
+       return;\r
+}\r
+\r
+static void on_confirmation_call_join(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       dbg("Entry");\r
+       _on_confirmation_call(p, data_len, data, user_data, TRESP_CALL_JOIN);\r
+\r
+       return;\r
+}\r
+\r
+static void on_confirmation_call_split(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       dbg("Entry");\r
+       _on_confirmation_call(p, data_len, data, user_data, TRESP_CALL_SPLIT);\r
+\r
+       return;\r
+}\r
+\r
+static void on_confirmation_call_deflect(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       dbg("Entry");\r
+       _on_confirmation_call(p, data_len, data, user_data, TRESP_CALL_DEFLECT);\r
+\r
+       return;\r
+}\r
+\r
+static void on_confirmation_call_transfer(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       dbg("Entry");\r
+       _on_confirmation_call(p, data_len, data, user_data, TRESP_CALL_TRANSFER);\r
+\r
+       return;\r
+}\r
+\r
+static void on_confirmation_call_dtmf(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       dbg("Entry");\r
+       _on_confirmation_call(p, data_len, data, user_data, TRESP_CALL_SEND_DTMF);\r
+\r
+       return;\r
+}\r
+\r
+static void _on_confirmation_dtmf_tone_duration(TcorePending * p, int data_len, const void * data, void * user_data)\r
+{\r
+       GSList *tokens = NULL;\r
+       const char *line = NULL;\r
+       const TcoreATResponse* response = data;\r
+       int error;\r
+\r
+       dbg("Entry");\r
+\r
+       if (response->success > 0) {\r
+               dbg("RESPONSE OK");\r
+               error  = TCORE_RETURN_SUCCESS;\r
+       }\r
+       else {\r
+\r
+               err("RESPONSE NOT OK");\r
+               line = (const char*)response->final_response;\r
+               tokens = tcore_at_tok_new(line);\r
+               if (g_slist_length(tokens) < 1) {\r
+                       err("err cause not specified or string corrupted");\r
+                       error = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               else {\r
+                       error = atoi(g_slist_nth_data(tokens, 0));\r
+                       // TODO: CMEE error mapping is required.\r
+               }\r
+\r
+               // Free tokens\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+\r
+       dbg("Set dtmf tone duration response - %d", error);\r
+       return;\r
+}\r
+\r
+static void on_confirmation_call_swap(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       CoreObject *core_obj = NULL;\r
+       UserRequest *ur = NULL;\r
+       const TcoreATResponse* response = data;\r
+       struct tresp_call_swap resp;\r
+       GSList *tokens = NULL;\r
+       const char *line = NULL;\r
+\r
+       dbg("Entry");\r
+       core_obj  = tcore_pending_ref_core_object(p);\r
+       ur = tcore_pending_ref_user_request(p);\r
+\r
+       if (ur) {\r
+               if (response->success > 0) {\r
+                       dbg("RESPONSE OK");\r
+                       resp.err = TCORE_RETURN_SUCCESS;\r
+               }\r
+               else {\r
+\r
+                       err("RESPONSE NOT OK");\r
+                       line = (const char*)response->final_response;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       if (g_slist_length(tokens) < 1) {\r
+                               err("err cause not specified or string corrupted");\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       }\r
+                       else {\r
+                               resp.err = atoi(g_slist_nth_data(tokens, 0));\r
+\r
+                               // TODO: CMEE error mapping is required.\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       }\r
+\r
+                       //Free tokens\r
+                       tcore_at_tok_free(tokens);\r
+               }\r
+\r
+               resp.id = tcore_call_object_get_id((CallObject*)user_data);\r
+               dbg("resp.id = %d", resp.id);\r
+\r
+               // Send response to TAPI\r
+               tcore_user_request_send_response(ur, TRESP_CALL_SWAP, sizeof(struct tresp_call_swap), &resp);\r
+\r
+               if (!resp.err) {\r
+\r
+                       GSList *active = NULL;\r
+                       GSList *held = NULL;\r
+                       CallObject *co = NULL;\r
+                       gboolean *eflag = NULL;\r
+\r
+                       held = tcore_call_object_find_by_status(core_obj, TCORE_CALL_STATUS_HELD);\r
+                       if (!held) {\r
+                               err("Can't find held Call");\r
+                               return;\r
+                       }\r
+\r
+                       active = tcore_call_object_find_by_status(core_obj, TCORE_CALL_STATUS_ACTIVE);\r
+                       if (!active) {\r
+                               dbg("Can't find active Call");\r
+                               return;\r
+                       }\r
+\r
+                       while (held) {\r
+                               co = (CallObject*)held->data;\r
+                               if (!co) {\r
+                                       err("Can't get held Call object");\r
+                                       return;\r
+                               }\r
+\r
+                               resp.id =  tcore_call_object_get_id(co);\r
+\r
+                               // Send response to TAPI\r
+                               tcore_user_request_send_response(ur, TRESP_CALL_ACTIVE, sizeof(struct tresp_call_active), &resp);\r
+\r
+                               held = g_slist_next(held);\r
+                       }\r
+\r
+                       while (active) {\r
+                               co = (CallObject*)active->data;\r
+                               if (!co) {\r
+                                       err("[ error ] can't get active call object");\r
+                                       return;\r
+                               }\r
+\r
+                               resp.id = tcore_call_object_get_id(co);\r
+\r
+                               // Send response to TAPI\r
+                               tcore_user_request_send_response(ur, TRESP_CALL_HOLD, sizeof(struct tresp_call_hold), &resp);\r
+                               active = g_slist_next(active);\r
+                       }\r
+\r
+                       eflag = g_new0(gboolean, 1);\r
+                       *eflag = FALSE;\r
+\r
+                       dbg("calling _call_list_get");\r
+                       _call_list_get(core_obj, eflag);\r
+               }\r
+       }\r
+       else {\r
+\r
+               err("User Request is NULL");\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void on_confirmation_call_set_source_sound_path(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest *ur = NULL;\r
+       GSList *tokens = NULL;\r
+       const char *line = NULL;\r
+       const TcoreATResponse* response = data;\r
+       char *resp_str = NULL;\r
+       struct tresp_call_sound_set_path resp;\r
+       int error;\r
+\r
+       dbg("Entry");\r
+       ur = tcore_pending_ref_user_request(p);\r
+\r
+       //+XDRV: <group_id>,<function_id>,<xdrv_result>[,<response_n>]\ 3\r
+       if (!response) {\r
+               err("Input data is NULL");\r
+               return;\r
+       }\r
+\r
+       if (response->success > 0) {\r
+               dbg("RESPONSE OK");\r
+\r
+               line  = (const char*) (((GSList*)response->lines)->data);\r
+               tokens = tcore_at_tok_new(line);\r
+\r
+               resp_str = g_slist_nth_data(tokens, 0);\r
+               if(!g_slist_nth_data(tokens, 0)) {\r
+                       err("group_id is missing");\r
+                       resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       goto OUT;\r
+               }\r
+\r
+               if(!g_slist_nth_data(tokens, 1)) {\r
+                       err(" function_id is missing");\r
+                       resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       goto OUT;\r
+               }\r
+\r
+               resp_str  = g_slist_nth_data(tokens, 2);\r
+\r
+               if(resp_str) {\r
+                       error = atoi(resp_str);\r
+                       if(0 == error) {\r
+                               dbg("Response is Success");\r
+                               resp.err = TCORE_RETURN_SUCCESS;\r
+                       }\r
+                       else {\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       }\r
+               }\r
+OUT:\r
+               // Free tokens\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+       else {\r
+               dbg("RESPONSE NOT OK");\r
+\r
+               line = (const char*)response->final_response;\r
+               tokens = tcore_at_tok_new(line);\r
+\r
+               if (g_slist_length(tokens) < 1) {\r
+                       err("err cause not specified or string corrupted");\r
+                       resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               else {\r
+                       error = atoi(g_slist_nth_data(tokens, 0));\r
+\r
+                       // TODO: CMEE error mapping is required.\r
+                       resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+\r
+               // Free tokens\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+\r
+       if (ur) {\r
+               if(resp.err != TCORE_RETURN_SUCCESS) {  // Send only failed notification . success notification send when destination device is set.\r
+                       // Send notification to TAPI\r
+                       tcore_user_request_send_response(ur, TRESP_CALL_SET_SOUND_PATH, sizeof(struct tresp_call_sound_set_path), &resp);\r
+            setsoundpath = TRUE;\r
+               }\r
+       }\r
+       else {\r
+               err("User Request is NULL");\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void on_confirmation_call_set_destination_sound_path(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest *ur = NULL;\r
+       GSList *tokens = NULL;\r
+       const char *line = NULL;\r
+       char *resp_str = NULL ;\r
+       struct tresp_call_sound_set_path resp;\r
+       const TcoreATResponse* response = data;\r
+       int error;\r
+\r
+       dbg("Entry");\r
+\r
+       ur = tcore_pending_ref_user_request(p);\r
+       // +XDRV: <group_id>,<function_id>,<xdrv_result>[,<response_n>]\ 3\r
+\r
+       if (!response) {\r
+               err("Input data is NULL");\r
+               return;\r
+       }\r
+\r
+       if (ur) {\r
+               if (response->success > 0) {\r
+                       dbg("RESPONSE OK");\r
+\r
+                       line  = (const char*) (((GSList*)response->lines)->data);\r
+                       tokens = tcore_at_tok_new(line);\r
+\r
+                       resp_str = g_slist_nth_data(tokens, 0);\r
+                       if(!g_slist_nth_data(tokens, 0)) {\r
+                               dbg("group_id is missing");\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                               goto OUT;\r
+                       }\r
+\r
+                       if(!g_slist_nth_data(tokens, 1)) {\r
+                               dbg("function_id is missing");\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                               goto OUT;\r
+                       }\r
+\r
+                       resp_str  = g_slist_nth_data(tokens, 2);\r
+                       if(resp_str) {\r
+                               error = atoi(resp_str);\r
+                               if(0 == error) {\r
+                                       dbg("Response is Success");\r
+                                       resp.err = TCORE_RETURN_SUCCESS;\r
+                               }\r
+                               else {\r
+                                       resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                               }\r
+                       }\r
+\r
+OUT:\r
+                       // Free tokens\r
+                       tcore_at_tok_free(tokens);\r
+               }\r
+               else {\r
+                       dbg("RESPONSE NOT OK");\r
+\r
+                       line = (const char*)response->final_response;\r
+                       tokens = tcore_at_tok_new(line);\r
+\r
+                       if (g_slist_length(tokens) < 1) {\r
+                               err("err cause not specified or string corrupted");\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       }\r
+                       else {\r
+                               error = atoi(g_slist_nth_data(tokens, 0));\r
+                               // TODO: CMEE error mapping is required.\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       }\r
+\r
+                       // Free tokens\r
+                       tcore_at_tok_free(tokens);\r
+               }\r
+\r
+        if(setsoundpath == TRUE) {\r
+            setsoundpath = FALSE;\r
+        }\r
+        else {\r
+                   // Send response to TAPI\r
+                   tcore_user_request_send_response(ur, TRESP_CALL_SET_SOUND_PATH, sizeof(struct tresp_call_sound_set_path), &resp);\r
+        }\r
+       }\r
+       else {\r
+               dbg("User Request is NULL");\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void on_confirmation_call_set_source_sound_volume_level(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest *ur = NULL;\r
+       GSList *tokens = NULL;\r
+       const char *line = NULL;\r
+       const TcoreATResponse* response = data;\r
+       char *resp_str = NULL;\r
+       struct tresp_call_sound_set_volume_level resp;\r
+       int error;\r
+\r
+       dbg("Entry");\r
+\r
+       ur = tcore_pending_ref_user_request(p);\r
+       // +XDRV: <group_id>,<function_id>,<xdrv_result>[,<response_n>]\ 3\r
+       if (!response) {\r
+               err("Input data is NULL");\r
+               return;\r
+       }\r
+\r
+       if (response->success > 0) {\r
+               dbg("RESPONSE OK");\r
+\r
+               line  = (const char*) (((GSList*)response->lines)->data);\r
+               tokens = tcore_at_tok_new(line);\r
+\r
+               resp_str = g_slist_nth_data(tokens, 0);\r
+               if(!g_slist_nth_data(tokens, 0)) {\r
+                       err("group_id is missing");\r
+                       resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       goto OUT;\r
+               }\r
+\r
+               if(!g_slist_nth_data(tokens, 1)) {\r
+                       err("function_id is missing");\r
+                       resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       goto OUT;\r
+               }\r
+\r
+               resp_str  = g_slist_nth_data(tokens, 2);\r
+               if(resp_str) {\r
+                       error = atoi(resp_str);\r
+\r
+                       if(0 == error) {\r
+                               dbg("Response is Success ");\r
+                               resp.err = TCORE_RETURN_SUCCESS;\r
+                       }\r
+                       else {\r
+                       resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       }\r
+               }\r
+\r
+OUT:\r
+               // Free tokens\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+       else {\r
+               dbg("RESPONSE NOT OK");\r
+\r
+               line = (const char*)response->final_response;\r
+               tokens = tcore_at_tok_new(line);\r
+\r
+               if (g_slist_length(tokens) < 1) {\r
+                       err("err cause not specified or string corrupted");\r
+                       resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               else {\r
+                       error = atoi(g_slist_nth_data(tokens, 0));\r
+\r
+                       // TODO: CMEE error mapping is required.\r
+                       resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+\r
+               // Free tokens\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+\r
+       if (ur) {\r
+               if(resp.err && soundvolume == FALSE) {  // Send only failed notification . success notification send when destination device is set.\r
+                       // Send reposne to TAPI\r
+                       tcore_user_request_send_response(ur, TRESP_CALL_SET_SOUND_VOLUME_LEVEL, sizeof(struct tresp_call_sound_set_volume_level), &resp);\r
+            soundvolume = TRUE;\r
+               }\r
+       }\r
+       else {\r
+               err("User Request is NULL");\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+\r
+static void on_confirmation_call_set_destination_sound_volume_level(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest *ur = NULL;\r
+       GSList *tokens = NULL;\r
+       const char *line = NULL;\r
+       char *resp_str = NULL;\r
+       const TcoreATResponse* response = data;\r
+       struct tresp_call_sound_set_volume_level resp;\r
+       int error;\r
+\r
+       dbg("Entry");\r
+\r
+       ur = tcore_pending_ref_user_request(p);\r
+\r
+       // +XDRV: <group_id>,<function_id>,<xdrv_result>[,<response_n>]\ 3\r
+       if (!response) {\r
+               err("Input data is NULL");\r
+               return;\r
+       }\r
+\r
+       if (ur) {\r
+               if (response->success > 0) {\r
+\r
+                       dbg("RESPONSE OK");\r
+                       line  = (const char*) (((GSList*)response->lines)->data);\r
+                       tokens = tcore_at_tok_new(line);\r
+            resp_str = g_slist_nth_data(tokens, 0);\r
+\r
+                       if(!g_slist_nth_data(tokens, 0)) {\r
+                               err("group_id is missing");\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                               goto OUT;\r
+                       }\r
+\r
+                       if(!g_slist_nth_data(tokens, 1)) {\r
+                               err("function_id is missing");\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                               goto OUT;\r
+                       }\r
+\r
+                       resp_str  = g_slist_nth_data(tokens, 2);\r
+\r
+                       if(resp_str) {\r
+                               error = atoi(resp_str);\r
+\r
+                               if(0 == error) {\r
+                                       dbg("Response is Success");\r
+                                       resp.err = TCORE_RETURN_SUCCESS;\r
+                               }\r
+                               else {\r
+                                       resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                               }\r
+                       }\r
+\r
+OUT:\r
+                       // Free tokens\r
+                       tcore_at_tok_free(tokens);\r
+               }\r
+               else {\r
+                       dbg("RESPONSE NOT OK");\r
+\r
+                       line = (const char*)response->final_response;\r
+                       tokens = tcore_at_tok_new(line);\r
+\r
+                       if (g_slist_length(tokens) < 1) {\r
+                               err("err cause not specified or string corrupted");\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       }\r
+                       else {\r
+                               error = atoi(g_slist_nth_data(tokens, 0));\r
+\r
+                               // TODO: CMEE error mapping is required.\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       }\r
+\r
+                       tcore_at_tok_free(tokens);\r
+               }\r
+\r
+        if(soundvolume == TRUE){\r
+            soundvolume = FALSE;\r
+        }\r
+        else{\r
+                   // Send reposne to TAPI\r
+                   tcore_user_request_send_response(ur, TRESP_CALL_SET_SOUND_VOLUME_LEVEL, sizeof(struct tresp_call_sound_set_volume_level), &resp);\r
+        }\r
+       }\r
+       else {\r
+               err("User Request is NULL");\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+\r
+static void on_confirmation_call_mute(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest *ur = NULL;\r
+       GSList *tokens = NULL;\r
+       const char *line = NULL;\r
+    char *resp_str  = NULL;\r
+       struct tresp_call_mute resp;\r
+       const TcoreATResponse* response = data;\r
+       int error;\r
+\r
+       dbg("Entry");\r
+\r
+       ur = tcore_pending_ref_user_request(p);\r
+\r
+    if (!response) {\r
+               err("Input data is NULL");\r
+               return;\r
+       }\r
+\r
+       if (response->success > 0) {\r
+               dbg("RESPONSE OK");\r
+\r
+               line  = (const char*) (((GSList*)response->lines)->data);\r
+               tokens = tcore_at_tok_new(line);\r
+               resp_str = g_slist_nth_data(tokens, 0);\r
+\r
+               if(!g_slist_nth_data(tokens, 0)) {\r
+                       err("group_id is missing");\r
+                       resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       goto OUT;\r
+               }\r
+\r
+               if(!g_slist_nth_data(tokens, 1)) {\r
+                       err(" function_id is missing");\r
+                       resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       goto OUT;\r
+               }\r
+\r
+               resp_str  = g_slist_nth_data(tokens, 2);\r
+\r
+               if(resp_str) {\r
+                       error = atoi(resp_str);\r
+                       if(0 == error) {\r
+                               dbg("Response is Success");\r
+                               resp.err = TCORE_RETURN_SUCCESS;\r
+                       }\r
+                       else {\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       }\r
+               }\r
+OUT:\r
+               // Free tokens\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+       else {\r
+               dbg("RESPONSE NOT OK");\r
+\r
+               line = (const char*)response->final_response;\r
+               tokens = tcore_at_tok_new(line);\r
+\r
+               if (g_slist_length(tokens) < 1) {\r
+                       err("err cause not specified or string corrupted");\r
+                       resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               else {\r
+                       error = atoi(g_slist_nth_data(tokens, 0));\r
+\r
+                       // TODO: CMEE error mapping is required.\r
+                       resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+\r
+               // Free tokens\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+\r
+       if (ur) {\r
+                  tcore_user_request_send_response(ur, TRESP_CALL_MUTE, sizeof(struct tresp_call_mute), &resp);\r
+    }\r
+       else {\r
+               err("User Request is NULL");\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void on_confirmation_call_unmute(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *response = NULL;\r
+       struct tresp_call_unmute resp;\r
+       GSList *tokens = NULL;\r
+       const char *line = NULL;\r
+       UserRequest *ur = NULL;\r
+    char *resp_str  = NULL;\r
+       int error;\r
+\r
+       dbg("Entry");\r
+\r
+       response = (TcoreATResponse *)data;\r
+       ur = tcore_pending_ref_user_request(p);\r
+\r
+     if (!response) {\r
+               err("Input data is NULL");\r
+               return;\r
+       }\r
+\r
+       if (response->success > 0) {\r
+               dbg("RESPONSE OK");\r
+\r
+               line  = (const char*) (((GSList*)response->lines)->data);\r
+               tokens = tcore_at_tok_new(line);\r
+               resp_str = g_slist_nth_data(tokens, 0);\r
+\r
+               if(!g_slist_nth_data(tokens, 0)) {\r
+                       err("group_id is missing");\r
+                       resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       goto OUT;\r
+               }\r
+\r
+               if(!g_slist_nth_data(tokens, 1)) {\r
+                       err(" function_id is missing");\r
+                       resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       goto OUT;\r
+               }\r
+\r
+               resp_str  = g_slist_nth_data(tokens, 2);\r
+\r
+               if(resp_str) {\r
+                       error = atoi(resp_str);\r
+                       if(0 == error) {\r
+                               dbg("Response is Success");\r
+                               resp.err = TCORE_RETURN_SUCCESS;\r
+                       }\r
+                       else {\r
+                               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+                       }\r
+               }\r
+OUT:\r
+               // Free tokens\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+       else {\r
+               dbg("RESPONSE NOT OK");\r
+\r
+               line = (const char*)response->final_response;\r
+               tokens = tcore_at_tok_new(line);\r
+\r
+               if (g_slist_length(tokens) < 1) {\r
+                       err("err cause not specified or string corrupted");\r
+                       resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               else {\r
+                       error = atoi(g_slist_nth_data(tokens, 0));\r
+\r
+                       // TODO: CMEE error mapping is required.\r
+                       resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+\r
+               // Free tokens\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+\r
+       if (ur) {\r
+                  tcore_user_request_send_response(ur, TRESP_CALL_UNMUTE, sizeof(struct tresp_call_unmute), &resp);\r
+    }\r
+       else {\r
+               err("User Request is NULL");\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+// RESPONSE\r
+static void on_response_call_list_get(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       TcorePlugin *plugin = NULL;\r
+       CoreObject *core_obj = NULL;\r
+       CallObject *co = NULL;\r
+       struct clcc_call_t *call_list = NULL;\r
+       gboolean *event_flag = (gboolean*)user_data;\r
+       const TcoreATResponse *response = data;\r
+       GSList *resp_data = NULL;\r
+       char *line = NULL;\r
+\r
+       int cllc_info = 0, countCalls = 0, countValidCalls = 0;\r
+       int error = 0;\r
+       dbg("Entry");\r
+\r
+       plugin = tcore_pending_ref_plugin(p);\r
+       core_obj = tcore_pending_ref_core_object(p);\r
+\r
+       if(response->success > 0) {\r
+               dbg("RESPONCE OK");\r
+               if(response->lines) {\r
+                       resp_data =  (GSList*)response->lines;\r
+                       countCalls = g_slist_length(resp_data);\r
+                       dbg("Total records : %d",countCalls);\r
+               }\r
+\r
+               if (0 == countCalls) {\r
+                       err("Call count is zero");\r
+                       return;\r
+               }\r
+\r
+               call_list = g_new0(struct clcc_call_t, countCalls);\r
+\r
+               for (countValidCalls = 0;resp_data != NULL ;resp_data = resp_data->next,countValidCalls++,cllc_info++) {\r
+\r
+                       line  = (char*)(resp_data->data);\r
+\r
+                       error = _callFromCLCCLine(line, call_list + countValidCalls);\r
+                       if (0 != error) {\r
+                               continue;\r
+                       }\r
+\r
+                       co = tcore_call_object_find_by_id(core_obj, call_list[cllc_info].info.id);\r
+                       if (!co) {\r
+                               co = tcore_call_object_new(core_obj, call_list[cllc_info].info.id);\r
+                               if (!co) {\r
+                                       err("error : tcore_call_object_new [ id : %d ]", call_list[cllc_info].info.id);\r
+                                       continue;\r
+                               }\r
+                       }\r
+\r
+                       // Call set parameters\r
+                       tcore_call_object_set_type(co, call_type(call_list[cllc_info].info.type));\r
+                       tcore_call_object_set_direction(co, call_list[cllc_info].info.direction);\r
+                       tcore_call_object_set_multiparty_state(co, _call_is_in_mpty(call_list[cllc_info].info.mpty));\r
+                       tcore_call_object_set_cli_info(co, CALL_CLI_MODE_DEFAULT, call_list[cllc_info].number);\r
+                       tcore_call_object_set_active_line(co, 0);\r
+\r
+                       if (*event_flag) {\r
+                               dbg("Call status before calling _call_branch_by_status() : (%d)", call_list[cllc_info].info.status);\r
+                               _call_branch_by_status(plugin, co, call_list[cllc_info].info.status);\r
+                       }\r
+                       else {\r
+                               // Set Status\r
+                               tcore_call_object_set_status(co, call_list[cllc_info].info.status);\r
+\r
+                               dbg("Call id : (%d)", call_list[cllc_info].info.id);\r
+                               dbg("Call direction : (%d)", call_list[cllc_info].info.direction);\r
+                               dbg("Call type : (%d)", call_list[cllc_info].info.type);\r
+                               dbg("Call mpty : (%d)", call_list[cllc_info].info.mpty);\r
+                               dbg("Call number : (%s)", call_list[cllc_info].number);\r
+                               dbg("Call status : (%d)", call_list[cllc_info].info.status);\r
+                       }\r
+               }\r
+\r
+               // Free Call list\r
+               g_free(call_list);\r
+       }\r
+\r
+       // Free User data\r
+       g_free(event_flag);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void _on_confirmation_call_end_cause(TcorePending * p, int data_len, const void * data, void * user_data)\r
+{\r
+       TcorePlugin *plugin = NULL;\r
+       CoreObject *core_obj = NULL;\r
+       CallObject *co = (CallObject *)user_data;\r
+       const TcoreATResponse *response = data;\r
+       const char *line = NULL;\r
+    struct tnoti_call_status_idle call_status;\r
+       GSList *tokens = NULL;\r
+    char* resp_str;\r
+    int error;\r
+\r
+       dbg("Entry");\r
+       plugin = tcore_pending_ref_plugin(p);\r
+       core_obj = tcore_pending_ref_core_object(p);\r
+\r
+    if (response->success > 0){\r
+        dbg("RESPONSE OK");\r
+        line  = (const char*) (((GSList*)response->lines)->data);\r
+               tokens = tcore_at_tok_new(line);\r
+               resp_str = g_slist_nth_data(tokens, 0);\r
+        if(!resp_str){\r
+            err("call end cause - report value missing");\r
+        }\r
+        else {\r
+            resp_str = g_slist_nth_data(tokens, 1);\r
+            if(!resp_str){\r
+            err("call end cause value missing");\r
+            }\r
+            error = atoi(resp_str);\r
+            dbg("call end cause - %d",error);\r
+            call_status.cause  =_compare_call_end_cause(error);\r
+            dbg("TAPI call end cause - %d",call_status.cause);\r
+        }\r
+\r
+               //Free tokens\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+       else {\r
+               err("RESPONSE NOT OK");\r
+               line = (char*)response->final_response;\r
+               tokens = tcore_at_tok_new(line);\r
+               if (g_slist_length(tokens) < 1) {\r
+                       err("err cause not specified or string corrupted");\r
+               }\r
+               else {\r
+                        err(" err cause  value: %d",atoi(g_slist_nth_data(tokens, 0)));\r
+               }\r
+        call_status.cause = CC_CAUSE_NORMAL_CALL_CLEARING;\r
+               //Free tokens\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+\r
+       call_status.type = tcore_call_object_get_type(co);\r
+       dbg("data.type : [%d]", call_status.type);\r
+\r
+       call_status.id = tcore_call_object_get_id(co);\r
+       dbg("data.id : [%d]", call_status.id);\r
+\r
+    // Set Status\r
+       tcore_call_object_set_status(co, TCORE_CALL_STATUS_IDLE);\r
+\r
+    // Send Notification to TAPI\r
+    tcore_server_send_notification(tcore_plugin_ref_server(plugin),\r
+                                                       core_obj,\r
+                                                       TNOTI_CALL_STATUS_IDLE,\r
+                                                       sizeof(struct tnoti_call_status_idle),\r
+                                                       (void*)&call_status);\r
+\r
+    // Free Call object\r
+    tcore_call_object_free(core_obj, co);\r
+}\r
+\r
+static int _callFromCLCCLine(char *line, struct clcc_call_t *p_call)\r
+{\r
+       //+CLCC: 1,0,2,0,0,"18005551212",145\r
+       //[+CLCC: <id1>, <dir>, <stat>, <mode>,<mpty>[,<number>,<type>[,<alpha>[,<priority>]]]\r
+       int state;\r
+       int mode;\r
+       int isMT;\r
+       char *num = NULL;\r
+    unsigned int numcount,tempcount = 0;\r
+    unsigned int num_type;\r
+       GSList *tokens = NULL;\r
+       char *resp = NULL;\r
+       dbg("Entry");\r
+\r
+       tokens = tcore_at_tok_new(line);\r
+       // parse <id>\r
+       resp = g_slist_nth_data(tokens, 0);\r
+       if(!resp) {\r
+               err("InValid ID");\r
+               goto ERROR;\r
+       }\r
+       p_call->info.id  = atoi(resp);\r
+       dbg("id : [%d]\n", p_call->info.id);\r
+\r
+       //parse <dir>\r
+       resp = g_slist_nth_data(tokens, 1);\r
+       if(!resp) {\r
+               err("InValid Dir");\r
+               goto ERROR;\r
+       }\r
+       isMT = atoi(resp);\r
+       if(0 == isMT) {\r
+               p_call->info.direction = TCORE_CALL_DIRECTION_OUTGOING;\r
+       }\r
+       else {\r
+               p_call->info.direction = TCORE_CALL_DIRECTION_INCOMING;\r
+       }\r
+       dbg("Direction : [ %d ]\n", p_call->info.direction);\r
+\r
+       // parse <stat>\r
+       resp = g_slist_nth_data(tokens, 2);\r
+       if(!resp) {\r
+               err("InValid Stat");\r
+               goto ERROR;\r
+       }\r
+       state = atoi(resp);\r
+       dbg("Call state : %d", state);\r
+       switch(state){\r
+               case 0: //active\r
+                       p_call->info.status = TCORE_CALL_STATUS_ACTIVE;\r
+               break;\r
+               case 1:\r
+                       p_call->info.status = TCORE_CALL_STATUS_HELD;\r
+               break;\r
+               case 2:\r
+                       p_call->info.status = TCORE_CALL_STATUS_DIALING;\r
+               break;\r
+               case 3:\r
+                       p_call->info.status = TCORE_CALL_STATUS_ALERT;\r
+               break;\r
+               case 4:\r
+                       p_call->info.status = TCORE_CALL_STATUS_INCOMING;\r
+               break;\r
+               case 5:\r
+                       p_call->info.status = TCORE_CALL_STATUS_WAITING;\r
+               break;\r
+       }\r
+       dbg("Status : [%d]\n", p_call->info.status);\r
+\r
+       // parse <mode>\r
+       resp = g_slist_nth_data(tokens, 3);\r
+       if(!resp) {\r
+               err("InValid Mode");\r
+               goto ERROR;\r
+       }\r
+       mode = atoi(resp);\r
+       switch(mode)\r
+       {\r
+               case 0:\r
+                       p_call->info.type       = TCORE_CALL_TYPE_VOICE;\r
+               break;\r
+               case 1:\r
+                       p_call->info.type       = TCORE_CALL_TYPE_VIDEO;\r
+               break;\r
+               default:        // only Voice/VT call is supported in CS. treat other unknown calls as error\r
+                       dbg("invalid type : [%d]\n", mode);\r
+                       goto ERROR;\r
+       }\r
+       dbg("Call type : [%d]\n", p_call->info.type);\r
+\r
+       // parse <mpty>\r
+       resp  = g_slist_nth_data(tokens, 4);\r
+       if(!resp) {\r
+               err("InValid Mpty");\r
+               goto ERROR;\r
+       }\r
+\r
+       p_call->info.mpty = atoi(resp);\r
+       dbg("Mpty : [ %d ]\n",  p_call->info.mpty);\r
+\r
+       // parse <num>\r
+       resp = g_slist_nth_data(tokens, 5);\r
+       dbg("Incoming number - %s and its len  - %d", resp, strlen(resp));\r
+\r
+       // tolerate null here\r
+       if (!resp) {\r
+               err("Number is NULL");\r
+               goto ERROR;\r
+       }\r
+\r
+    num = g_malloc0(strlen(resp)+2);\r
+    if(!num){\r
+        err("memory allocation failed");\r
+               goto ERROR;\r
+     }\r
+\r
+    // Strike off double quotes\r
+    for (numcount  = 0; numcount < strlen(resp); numcount++, tempcount++) {\r
+               if(resp[numcount] == '\"') {\r
+                       num[tempcount] = resp[numcount+1];\r
+                       numcount++;\r
+               }\r
+               else{\r
+                           num[tempcount] = resp[numcount];\r
+               }\r
+       }\r
+\r
+       num[tempcount] = '\0';\r
+    dbg("num  after removing quotes - %s", num);\r
+\r
+       p_call->info.num_len = strlen(resp);\r
+       dbg("num_len : [0x%x]\n", p_call->info.num_len);\r
+\r
+       // parse <num type>\r
+       resp = g_slist_nth_data(tokens, 6);\r
+       if(!resp) {\r
+               dbg("InValid Num type");\r
+               goto ERROR;\r
+       }\r
+       p_call->info.num_type = atoi(resp);\r
+       dbg("BCD num type: [0x%x]\n", p_call->info.num_type);\r
+\r
+   //check number is international or national.\r
+   num_type = ((p_call->info.num_type) >> 4) & 0x07;\r
+   dbg("called party's type of number : [0x%x]\n", num_type);\r
+\r
+   if(num_type == 1 && num[0] != '+') {\r
+        //international number\r
+        p_call->number[0] = '+';\r
+        memcpy(&(p_call->number[1]),num,strlen(num));\r
+   }\r
+   else{\r
+        memcpy(&(p_call->number),num,strlen(num));\r
+   }\r
+   dbg("incoming number - %s", p_call->number);\r
+\r
+    g_free(num);\r
+    num  = NULL;\r
+       // Free tokens\r
+       tcore_at_tok_free(tokens);\r
+\r
+       dbg("Exit");\r
+       return 0;\r
+\r
+ERROR:\r
+       err("Invalid CLCC line");\r
+\r
+    if(num){\r
+        g_free(num);\r
+        num  = NULL;\r
+     }\r
+\r
+       // Free tokens\r
+       tcore_at_tok_free(tokens);\r
+       err("Exit");\r
+       return -1;\r
+}\r
+\r
+// NOTIFICATION\r
+static void on_notification_call_waiting(CoreObject *o, const void *data, void *user_data)\r
+{\r
+    GSList *tokens = NULL;\r
+       const char *line = NULL;\r
+    char *pId;\r
+    int call_id;\r
+    gboolean *eflag;\r
+    GSList* pList = NULL;\r
+    CallObject *co = NULL, *dupco = NULL;\r
+\r
+    dbg("function entrance");\r
+    // check call with waiting status already exist\r
+       pList = tcore_call_object_find_by_status(o, TCORE_CALL_STATUS_WAITING);\r
+\r
+       if(pList != NULL) {\r
+               dbg("[error]Waiting call already exist. skip");\r
+               return;\r
+       }\r
+    // check call with incoming status already exist\r
+       pList = tcore_call_object_find_by_status(o, TCORE_CALL_STATUS_INCOMING);\r
+\r
+       if(pList != NULL){\r
+               dbg("[error]incoming call already exist. skip");\r
+               return;\r
+       }\r
+    line  = (char*)data;\r
+    tokens = tcore_at_tok_new(line);\r
+\r
+    pId = g_slist_nth_data(tokens, 0);\r
+    if(!pId){\r
+        dbg("[error]:Call id is missing from +XCALLSTAT indication");\r
+        return;\r
+    }\r
+\r
+    call_id  = atoi(pId);\r
+    dupco = tcore_call_object_find_by_id(o, call_id);\r
+       if(dupco!= NULL){\r
+               dbg("co with same id already exist. skip");\r
+               return;\r
+       }\r
+    co = tcore_call_object_new(o, call_id);\r
+    if (!co){\r
+        dbg("[ error ] co is NULL");\r
+        return ;\r
+    }\r
+\r
+    tcore_at_tok_free(tokens);\r
+\r
+    eflag = g_new0(gboolean, 1);\r
+       *eflag = TRUE;\r
+       dbg("calling _call_list_get");\r
+    _call_list_get(o, eflag);\r
+\r
+}\r
+\r
+static void on_notification_call_incoming(CoreObject *o, const void *data, void *user_data)\r
+{\r
+    GSList *tokens = NULL;\r
+       const char *line = NULL;\r
+    char *pId;\r
+    int call_id;\r
+    gboolean *eflag;\r
+    GSList* pList = NULL;\r
+    CallObject *co = NULL, *dupco = NULL;\r
+\r
+    dbg("function entrance");\r
+    // check call with incoming status already exist\r
+       pList = tcore_call_object_find_by_status(o, TCORE_CALL_STATUS_INCOMING);\r
+\r
+       if(pList != NULL){\r
+               dbg("incoming call already exist. skip");\r
+               return;\r
+       }\r
+\r
+    line  = (char*)data;\r
+    tokens = tcore_at_tok_new(line);\r
+\r
+    pId = g_slist_nth_data(tokens, 0);\r
+    if(!pId){\r
+        dbg("Error:Call id is missing from %XCALLSTAT indication");\r
+        return;\r
+    }\r
+\r
+    call_id  = atoi(pId);\r
+\r
+    dupco = tcore_call_object_find_by_id(o, call_id);\r
+       if(dupco!= NULL){\r
+               dbg("co with same id already exist. skip");\r
+               return;\r
+       }\r
+\r
+    co = tcore_call_object_new(o, call_id);\r
+    if (!co){\r
+        dbg("[ error ] co is NULL");\r
+        return ;\r
+    }\r
+\r
+    dbg("freeing  at token")\r
+    tcore_at_tok_free(tokens);\r
+\r
+    eflag = g_new0(gboolean, 1);\r
+       *eflag = TRUE;\r
+\r
+       dbg("calling  _call_list_get");\r
+    _call_list_get(o, eflag);\r
+\r
+}\r
+\r
+static void on_notification_call_status(CoreObject *o, const void *data, void *user_data)\r
+{\r
+    char* cmd = NULL;\r
+       TcorePlugin *plugin = NULL;\r
+       CallObject *co = NULL;\r
+       int id = -1;\r
+       int  status = 0;\r
+       int type = 0;\r
+       char *stat = NULL;\r
+       char *pCallId = NULL;\r
+       GSList *tokens = NULL;\r
+       enum tcore_call_status co_status;\r
+\r
+       dbg("function entrance");\r
+       plugin  = tcore_object_ref_plugin(o);\r
+       cmd = (char*)data;\r
+    tokens = tcore_at_tok_new(cmd);\r
+\r
+    // parse <Call Id>\r
+    pCallId = g_slist_nth_data(tokens, 0);\r
+    if(!pCallId) {\r
+        dbg("pCallId is missing from %XCALLSTAT indiaction");\r
+\r
+    }\r
+    else {\r
+        id  = atoi(pCallId);\r
+        dbg("call id = %d", id);\r
+        //parse <Stat>\r
+        if ((stat = g_slist_nth_data(tokens, 1))) {\r
+            status = atoi(stat);\r
+        }\r
+        dbg("call status = %d", status);\r
+    }\r
+\r
+    tcore_at_tok_free(tokens);\r
+       co_status = _call_status(status);\r
+\r
+       dbg("co_status = %d", co_status);\r
+       switch (co_status) {\r
+\r
+               case CALL_STATUS_ACTIVE:\r
+        {\r
+               dbg("call(%d) status : [ ACTIVE ]", id);\r
+               co      = tcore_call_object_find_by_id(o,id);\r
+               if (!co) {\r
+                       dbg("co is NULL");\r
+                       return ;\r
+               }\r
+               _call_status_active(plugin, co);\r
+\r
+               }\r
+        break;\r
+\r
+               case CALL_STATUS_HELD:\r
+                       dbg("call(%d) status : [ held ]", id);\r
+               break;\r
+\r
+               case CALL_STATUS_DIALING:\r
+               {\r
+               dbg("call(%d) status : [ dialing ]", id);\r
+               co      = tcore_call_object_find_by_id(o,id);\r
+               if (!co) {\r
+                       co = tcore_call_object_new(o, id);\r
+                       if (!co) {\r
+                               dbg("error : tcore_call_object_new [ id : %d ]", id);\r
+                               return ;\r
+                       }\r
+               }\r
+\r
+               tcore_call_object_set_type(co, call_type(type));\r
+               tcore_call_object_set_direction(co, TCORE_CALL_DIRECTION_OUTGOING);\r
+               _call_status_dialing(plugin, co);\r
+       }\r
+               break;\r
+               case CALL_STATUS_ALERT:\r
+               {\r
+               dbg("call(%d) status : [ alert ]", id);\r
+               co      = tcore_call_object_find_by_id(o, id);\r
+               if (!co){\r
+                       dbg("co is NULL");\r
+                       return ;\r
+               }\r
+            _call_status_alert(plugin, co);\r
+\r
+               }\r
+        break;\r
+               case CALL_STATUS_INCOMING:\r
+               case CALL_STATUS_WAITING:\r
+                       dbg("call(%d) status : [ incoming ]", id);\r
+               break;\r
+               case CALL_STATUS_IDLE:\r
+        {\r
+\r
+                       dbg("call(%d) status : [ release ]", id);\r
+\r
+                       co      = tcore_call_object_find_by_id(o, id);\r
+                       if (!co) {\r
+                               dbg("co is NULL");\r
+                return ;\r
+                       }\r
+\r
+                       plugin  = tcore_object_ref_plugin(o);\r
+                       if (!plugin) {\r
+                               dbg("plugin is NULL");\r
+                return ;\r
+                       }\r
+                       _call_status_idle(plugin, co);\r
+               }\r
+        break;\r
+\r
+               default:\r
+                       dbg("invalid call status", id);\r
+                       break;\r
+               }\r
+}\r
+\r
+static TReturn s_call_outgoing(CoreObject *o, UserRequest *ur)\r
+{\r
+       struct treq_call_dial*  data = 0;\r
+       char* raw_str= NULL;\r
+       char*cmd_str = NULL;\r
+    const char *cclir;\r
+       enum tcore_call_cli_mode clir = CALL_CLI_MODE_DEFAULT;\r
+       TcorePending *pending = NULL;\r
+       TcoreATRequest *req;\r
+       gboolean ret = FALSE;\r
+\r
+       dbg("function entrance");\r
+       data    = (struct treq_call_dial*)tcore_user_request_ref_data(ur, 0);\r
+       clir = _get_clir_status(data->number);\r
+\r
+    //Compose ATD Cmd string\r
+       switch (clir) {\r
+        case TCORE_CALL_CLI_MODE_PRESENT:\r
+                       dbg("CALL_CLI_MODE_PRESENT");\r
+                       cclir = "I";\r
+               break;  //invocation\r
+               case TCORE_CALL_CLI_MODE_RESTRICT:\r
+                       dbg("CALL_CLI_MODE_RESTRICT");\r
+                       cclir = "i";\r
+               break;  //suppression\r
+               case TCORE_CALL_CLI_MODE_DEFAULT:\r
+               default:\r
+                       cclir = "";\r
+                       dbg("CALL_CLI_MODE_DEFAULT");\r
+               break;   //subscription default\r
+       }\r
+\r
+       dbg("data->number = %s",data->number);\r
+\r
+       raw_str = g_strdup_printf("ATD%s%s;", data->number, cclir);\r
+       cmd_str = g_strdup_printf("%s",raw_str);\r
+\r
+    dbg("request command : %s", cmd_str);\r
+\r
+       pending = tcore_pending_new(o, 0);\r
+       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       ret = _call_request_message (pending, o, ur, on_confirmation_call_outgoing, NULL);\r
+\r
+       g_free(raw_str);\r
+       g_free(cmd_str);\r
+\r
+       if (!ret) {\r
+               dbg("AT request(%s) sent failed", req->cmd);\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+       dbg("AT request(%s) sent success",req->cmd);\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_call_answer(CoreObject *o, UserRequest *ur)\r
+{\r
+    char* cmd_str = NULL;\r
+    CallObject*  co = NULL;\r
+       struct treq_call_answer*        data = 0;\r
+       TcorePending *pending = NULL;\r
+       TcoreATRequest *req;\r
+       gboolean ret = FALSE;\r
+\r
+       dbg("function entrance");\r
+\r
+       data = (struct treq_call_answer*)tcore_user_request_ref_data(ur, 0);\r
+       co = tcore_call_object_find_by_id(o, data->id);\r
+       if (data->type == CALL_ANSWER_TYPE_ACCEPT) {\r
+\r
+           dbg(" request type CALL_ANSWER_TYPE_ACCEPT");\r
+\r
+               cmd_str = g_strdup_printf("%s","ATA");\r
+           pending = tcore_pending_new(o, 0);\r
+           req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);\r
+           dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+           tcore_pending_set_request_data(pending, 0, req);\r
+               ret = _call_request_message (pending, o, ur, on_confirmation_call_accept, co);\r
+               g_free(cmd_str);\r
+\r
+               if (!ret) {\r
+                       dbg("AT request(%s) sent failed", req->cmd);\r
+                       return TCORE_RETURN_FAILURE;\r
+               }\r
+\r
+       }\r
+    else {\r
+\r
+               switch (data->type) {\r
+                       case CALL_ANSWER_TYPE_REJECT:\r
+            {\r
+                               dbg("call answer reject");\r
+                               tcore_call_control_answer_reject(o, ur, on_confirmation_call_reject, co);\r
+                       } break;\r
+\r
+                       case CALL_ANSWER_TYPE_REPLACE:\r
+            {\r
+                               dbg("call answer replace");\r
+                               tcore_call_control_answer_replace(o, ur, on_confirmation_call_replace, co);\r
+                       } break;\r
+\r
+                       case CALL_ANSWER_TYPE_HOLD_ACCEPT:\r
+            {\r
+                               dbg("call answer hold and accept");\r
+                               tcore_call_control_answer_hold_and_accept(o, ur, on_confirmation_call_hold_and_accept, co);\r
+                       } break;\r
+\r
+                       default :\r
+                               dbg("[ error ] wrong answer type [ %d ]", data->type);\r
+                               return TCORE_RETURN_FAILURE;\r
+               }\r
+       }\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_call_release(CoreObject *o, UserRequest *ur)\r
+{\r
+    CallObject* co = NULL;\r
+       struct treq_call_end* data = 0;\r
+       UserRequest* ur_dup = NULL;\r
+       char* chld0_cmd = NULL;\r
+       char* chld1_cmd = NULL;\r
+       TcorePending *pending = NULL, *pending1 = NULL;\r
+       TcoreATRequest *req, *req1;\r
+       gboolean ret = FALSE;\r
+\r
+       dbg("function entrance");\r
+       data = (struct treq_call_end*)tcore_user_request_ref_data(ur, 0);\r
+       co = tcore_call_object_find_by_id(o, data->id);\r
+\r
+       dbg("type of release call = %d" , data->type);\r
+\r
+       if (data->type == CALL_END_TYPE_ALL) {\r
+\r
+       //releaseAll do not exist on legacy request. send CHLD=0, CHLD=1 in sequence\r
+       chld0_cmd = g_strdup("AT+CHLD=0");\r
+       chld1_cmd = g_strdup("AT+CHLD=1");\r
+\r
+           pending = tcore_pending_new(o, 0);\r
+           req = tcore_at_request_new(chld0_cmd, NULL, TCORE_AT_NO_RESULT);\r
+\r
+               dbg("input command is %s",chld0_cmd);\r
+           dbg("req-cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+           tcore_pending_set_request_data(pending, 0, req);\r
+               ur_dup = tcore_user_request_new(NULL, NULL);\r
+               ret = _call_request_message(pending ,o, ur_dup,  on_confirmation_call_endall, NULL);\r
+               g_free(chld0_cmd);\r
+\r
+               if (!ret) {\r
+                       dbg("AT request %s has failed ",req->cmd);\r
+                       return TCORE_RETURN_FAILURE;\r
+               }\r
+\r
+        pending1 = tcore_pending_new(o, 0);\r
+        req1 = tcore_at_request_new(chld1_cmd, NULL, TCORE_AT_NO_RESULT);\r
+\r
+               dbg("input command is %s",chld1_cmd);\r
+        dbg("req-cmd : %s, prefix(if any) :%s, cmd_len : %d", req1->cmd, req1->prefix, strlen(req1->cmd));\r
+\r
+           tcore_pending_set_request_data(pending1, 0, req1);\r
+               ret = _call_request_message(pending1, o, ur, on_confirmation_call_release_all, co);\r
+               g_free(chld1_cmd);\r
+\r
+               if (!ret) {\r
+                       dbg("AT request %s has failed ",req->cmd);\r
+                       return TCORE_RETURN_FAILURE;\r
+               }\r
+\r
+       }\r
+    else {\r
+\r
+               switch (data->type) {\r
+\r
+                       case CALL_END_TYPE_DEFAULT:\r
+            {\r
+                               int id = 0;\r
+                               id = tcore_call_object_get_id(co);\r
+\r
+                               dbg("call end call id [%d]", id);\r
+                               tcore_call_control_end_specific(o, ur, id, on_confirmation_call_release_specific, co);\r
+                       } break;\r
+\r
+                       case CALL_END_TYPE_ACTIVE_ALL:\r
+            {\r
+\r
+                               dbg("call end all active");\r
+                               tcore_call_control_end_all_active(o, ur, on_confirmation_call_release_all_active, co);\r
+                       } break;\r
+\r
+                       case CALL_END_TYPE_HOLD_ALL:\r
+            {\r
+\r
+                               dbg("call end all held");\r
+                               tcore_call_control_end_all_held(o, ur, on_confirmation_call_release_all_held, co);\r
+                       } break;\r
+\r
+                       default :\r
+                               dbg("[ error ] wrong end type [ %d ]", data->type);\r
+                               return TCORE_RETURN_FAILURE;\r
+               }\r
+\r
+       }\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_call_hold(CoreObject *o, UserRequest *ur)\r
+{\r
+       struct treq_call_hold *hold = 0;\r
+       CallObject *co = NULL;\r
+\r
+       dbg("function entrance");\r
+\r
+       hold = (struct treq_call_hold*)tcore_user_request_ref_data(ur, 0);\r
+       dbg("call id : [ %d ]", hold->id);\r
+\r
+       co = tcore_call_object_find_by_id(o, hold->id);\r
+       tcore_call_control_hold(o, ur, on_confirmation_call_hold, co);\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_call_active(CoreObject *o, UserRequest *ur)\r
+{\r
+       struct treq_call_active *active = 0;\r
+       CallObject *co = NULL;\r
+\r
+       active = (struct treq_call_active*)tcore_user_request_ref_data(ur, 0);\r
+       dbg("call id : [ %d ]", active->id);\r
+\r
+       co = tcore_call_object_find_by_id(o, active->id);\r
+       tcore_call_control_active(o, ur, on_confirmation_call_active, co);\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_call_swap(CoreObject *o, UserRequest *ur)\r
+{\r
+       struct treq_call_swap *swap = NULL;\r
+       CallObject *co = NULL;\r
+\r
+       swap = (struct treq_call_swap*)tcore_user_request_ref_data(ur, 0);\r
+       dbg("call id : [ %d ]", swap->id);\r
+\r
+       co = tcore_call_object_find_by_id(o, swap->id);\r
+       tcore_call_control_swap(o, ur, on_confirmation_call_swap, co);\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_call_join(CoreObject *o, UserRequest *ur)\r
+{\r
+       struct treq_call_join *join = 0;\r
+       CallObject *co = NULL;\r
+\r
+       join = (struct treq_call_join*)tcore_user_request_ref_data(ur, 0);\r
+       dbg("call id : [ %d ]", join->id);\r
+\r
+       co = tcore_call_object_find_by_id(o, join->id);\r
+       tcore_call_control_join(o, ur, on_confirmation_call_join, co);\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_call_split(CoreObject *o, UserRequest *ur)\r
+{\r
+       struct treq_call_split *split = 0;\r
+       CallObject *co = NULL;\r
+\r
+       split = (struct treq_call_split*)tcore_user_request_ref_data(ur, 0);\r
+       co = tcore_call_object_find_by_id (o, split->id);\r
+       dbg("call id : [ %d ]", split->id);\r
+\r
+       tcore_call_control_split(o, ur, split->id, on_confirmation_call_split, co);\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_call_deflect(CoreObject *o, UserRequest *ur)\r
+{\r
+       struct treq_call_deflect *deflect = 0;\r
+       CallObject *co = NULL;\r
+\r
+       deflect = (struct treq_call_deflect*)tcore_user_request_ref_data(ur, 0);\r
+       co = tcore_call_object_find_by_number(o, deflect->number);\r
+       dbg("deflect number: [ %s ]", deflect->number);\r
+\r
+       tcore_call_control_deflect(o, ur, deflect->number, on_confirmation_call_deflect, co);\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_call_transfer(CoreObject *o, UserRequest *ur)\r
+{\r
+       struct treq_call_transfer *transfer = 0;\r
+       CallObject *co = NULL;\r
+\r
+       transfer = (struct treq_call_transfer*)tcore_user_request_ref_data(ur, 0);\r
+       dbg("call id : [ %d ]", transfer->id);\r
+\r
+       co = tcore_call_object_find_by_id(o, transfer->id);\r
+       tcore_call_control_transfer(o, ur, on_confirmation_call_transfer, co);\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_call_send_dtmf(CoreObject *o, UserRequest *ur)\r
+{\r
+       char*cmd_str = NULL;\r
+       TcorePending *pending = NULL;\r
+       TcoreATRequest *req;\r
+    UserRequest *dup;\r
+       gboolean ret = FALSE;\r
+       struct treq_call_dtmf *dtmf = 0;\r
+       char *dtmfstr = NULL, *tmp_dtmf =  NULL;\r
+       unsigned int dtmf_count;\r
+\r
+       dbg("Function enter");\r
+\r
+    dup  = tcore_user_request_new(NULL, NULL);\r
+    (void)_set_dtmf_tone_duration(o, dup);\r
+\r
+       dtmf = (struct treq_call_dtmf*)tcore_user_request_ref_data(ur, 0);\r
+       dtmfstr =   g_malloc0((MAX_CALL_DTMF_DIGITS_LEN * 2)+ 1); // DTMF digits + comma for each dtmf digit.\r
+\r
+       if(dtmfstr == NULL) {\r
+               dbg("Memory allocation failed");\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+       tmp_dtmf =  dtmfstr;\r
+\r
+       for(dtmf_count = 0; dtmf_count < strlen(dtmf->digits); dtmf_count++) {\r
+\r
+               *tmp_dtmf = dtmf->digits[dtmf_count];\r
+                tmp_dtmf ++;\r
+\r
+               *tmp_dtmf =  COMMA;\r
+                tmp_dtmf++;\r
+       }\r
+\r
+       //last digit is having COMMA , overwrite it with '\0' .\r
+       *(--tmp_dtmf) = '\0';\r
+    dbg("Input DTMF string(%s)",dtmfstr);\r
+\r
+       //AT+VTS = <d1>,<d2>,<d3>,<d4>,<d5>,<d6>, ..... <d32>\r
+       cmd_str = g_strdup_printf("AT+VTS=%s",dtmfstr);\r
+       dbg("request command : %s", cmd_str);\r
+\r
+       pending = tcore_pending_new(o, 0);\r
+       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       ret = _call_request_message (pending, o, ur, on_confirmation_call_dtmf, NULL);\r
+       g_free(dtmfstr);\r
+       g_free(cmd_str);\r
+\r
+       if (!ret) {\r
+\r
+               dbg("AT request sent failed")\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_call_set_sound_path(CoreObject *o, UserRequest *ur)\r
+{\r
+    UserRequest *ur_dup = NULL;\r
+       TcorePending *pending = NULL , *pending1 =  NULL;\r
+       TcoreATRequest *req , *req1;\r
+    char *cmd_str = NULL , *cmd_str1 = NULL;\r
+       gboolean ret = FALSE;\r
+\r
+       dbg("function entrance");\r
+\r
+    //hard coded value for speaker.\r
+    cmd_str = g_strdup_printf("%s","AT+XDRV=40,4,3,0,0,0,0,0,1,0,1,0,1"); //source type.\r
+    cmd_str1 = g_strdup_printf("%s","AT+XDRV=40,5,2,0,0,0,0,0,1,0,1,0,1"); //destination type\r
+\r
+       pending = tcore_pending_new(o, 0);\r
+       req = tcore_at_request_new(cmd_str, "+XDRV", TCORE_AT_SINGLELINE);\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+    ur_dup = tcore_user_request_ref(ur);\r
+\r
+       ret = _call_request_message (pending, o, ur_dup, on_confirmation_call_set_source_sound_path, NULL);\r
+\r
+       g_free(cmd_str);\r
+\r
+       if (!ret) {\r
+\r
+               dbg("At request(%s) sent failed",req->cmd);\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+    pending1 = tcore_pending_new(o, 0);\r
+    req1 = tcore_at_request_new(cmd_str1,"+XDRV", TCORE_AT_SINGLELINE);\r
+       dbg("input command is %s",cmd_str1);\r
+    dbg("req-cmd : %s, prefix(if any) :%s, cmd_len : %d", req1->cmd, req1->prefix, strlen(req1->cmd));\r
+\r
+    tcore_pending_set_request_data(pending1, 0, req1);\r
+       ret = _call_request_message(pending1, o, ur, on_confirmation_call_set_destination_sound_path, NULL);\r
+\r
+       g_free(cmd_str1);\r
+\r
+       if (!ret) {\r
+               dbg("AT request %s has failed ",req1->cmd);\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+    return TCORE_RETURN_SUCCESS;\r
+\r
+}\r
+\r
+static TReturn s_call_set_sound_volume_level(CoreObject *o, UserRequest *ur)\r
+{\r
+       UserRequest *src_ur = NULL;\r
+       UserRequest *dest_ur = NULL;\r
+       TcorePending *src_pending = NULL;\r
+       TcorePending *dest_pending = NULL;\r
+       TcoreATRequest *src_req = NULL;\r
+       TcoreATRequest *dest_req = NULL;\r
+       char *cmd_str = NULL, *volume_level = NULL;\r
+       gboolean ret = FALSE;\r
+       dbg("Entry");\r
+\r
+       struct treq_call_sound_set_volume_level* data = NULL;\r
+       data = (struct treq_call_sound_set_volume_level*)tcore_user_request_ref_data( ur, 0 );\r
+       // Hard-coded values for MIC & Speakers\r
+       // Source volume\r
+       dbg("Set Source volume");\r
+\r
+       cmd_str = g_strdup_printf("%s", "AT+XDRV=40,7,3,88");   // Source type\r
+       dbg("Request command string: %s", cmd_str);\r
+\r
+       // Create new Pending request\r
+       src_pending = tcore_pending_new(o, 0);\r
+\r
+       // Create new AT-Command request\r
+       src_req = tcore_at_request_new(cmd_str, "+XDRV", TCORE_AT_SINGLELINE);\r
+       dbg("Command: %s, prefix(if any): %s, Command length: %d", src_req->cmd, src_req->prefix, strlen(src_req->cmd));\r
+\r
+       // Free Command string\r
+       g_free(cmd_str);\r
+\r
+       tcore_pending_set_request_data(src_pending, 0, src_req);\r
+       src_ur = tcore_user_request_ref(ur);\r
+\r
+       // Send request\r
+       ret = _call_request_message (src_pending, o, src_ur, on_confirmation_call_set_source_sound_volume_level, NULL);\r
+       if (!ret) {\r
+               err("Failed to send AT-Command request");\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+       cmd_str = g_strdup_printf("%s", "AT+XDRV=40,7,0,88");   // Destination type\r
+       dbg("Request command string: %s", cmd_str);\r
+\r
+       // Create new Pending request\r
+       src_pending = tcore_pending_new(o, 0);\r
+\r
+       // Create new AT-Command request\r
+       src_req = tcore_at_request_new(cmd_str,"+XDRV", TCORE_AT_SINGLELINE);\r
+       dbg("Command: %s, prefix(if any): %s, Command length: %d", src_req->cmd, src_req->prefix, strlen(src_req->cmd));\r
+\r
+       // Free Command string\r
+       g_free(cmd_str);\r
+\r
+       tcore_pending_set_request_data(src_pending, 0, src_req);\r
+\r
+       src_ur= tcore_user_request_ref(ur);\r
+\r
+       // Send request\r
+       ret = _call_request_message(src_pending, o, src_ur, on_confirmation_call_set_source_sound_volume_level, NULL);\r
+       if (!ret) {\r
+               err("Failed to send AT-Command request");\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+       // Destination volume\r
+       dbg("Set Source volume");\r
+\r
+       cmd_str = g_strdup_printf("%s", "AT+XDRV=40,8,0,88");   // Source type\r
+       dbg("Request command string: %s", cmd_str);\r
+\r
+       // Create new Pending request\r
+       dest_pending = tcore_pending_new(o, 0);\r
+\r
+       // Create new AT-Command request\r
+       dest_req = tcore_at_request_new(cmd_str, "+XDRV", TCORE_AT_SINGLELINE);\r
+       dbg("Command: %s, prefix(if any): %s, Command length: %d", dest_req->cmd, dest_req->prefix, strlen(dest_req->cmd));\r
+\r
+       // Free Command string\r
+       g_free(cmd_str);\r
+\r
+       tcore_pending_set_request_data(dest_pending, 0, dest_req);\r
+       dest_ur = tcore_user_request_ref(ur);\r
+\r
+       // Send request\r
+       ret = _call_request_message (dest_pending, o, dest_ur, on_confirmation_call_set_source_sound_volume_level, NULL);\r
+       if (!ret) {\r
+               err("Failed to send AT-Command request");\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+    dbg("Input volume level - %d",data->volume);\r
+    switch(data->volume) {\r
+\r
+        case CALL_SOUND_MUTE:\r
+            volume_level  = "0";\r
+        break;\r
+        case CALL_SOUND_VOLUME_LEVEL_1:\r
+            volume_level  = "40";\r
+        break;\r
+        case CALL_SOUND_VOLUME_LEVEL_2:\r
+            volume_level  = "46";\r
+        break;\r
+        case CALL_SOUND_VOLUME_LEVEL_3:\r
+            volume_level  = "52";\r
+            break;\r
+        case CALL_SOUND_VOLUME_LEVEL_4:\r
+            volume_level  = "58";\r
+        break;\r
+        case CALL_SOUND_VOLUME_LEVEL_5:\r
+            volume_level  = "64";\r
+        break;\r
+        case CALL_SOUND_VOLUME_LEVEL_6:\r
+             volume_level  = "70";\r
+        break;\r
+        case CALL_SOUND_VOLUME_LEVEL_7:\r
+             volume_level  = "76";\r
+        break;\r
+        case CALL_SOUND_VOLUME_LEVEL_8:\r
+            volume_level  = "82";\r
+        break;\r
+        case CALL_SOUND_VOLUME_LEVEL_9:\r
+        default:\r
+            volume_level  = "88";\r
+        break;\r
+    }\r
+       cmd_str = g_strdup_printf("%s%s","AT+XDRV=40,8,2,",volume_level);       //Destination type\r
+       dbg("Request command string: %s", cmd_str);\r
+\r
+       // Create new Pending request\r
+       dest_pending = tcore_pending_new(o, 0);\r
+\r
+       // Create new AT-Command request\r
+       dest_req = tcore_at_request_new(cmd_str,"+XDRV", TCORE_AT_SINGLELINE);\r
+       dbg("Command: %s, prefix(if any): %s, Command length: %d", dest_req->cmd, dest_req->prefix, strlen(dest_req->cmd));\r
+\r
+       // Free Command string\r
+       g_free(cmd_str);\r
+\r
+       tcore_pending_set_request_data(dest_pending, 0, dest_req);\r
+\r
+       // Send request\r
+       ret = _call_request_message(dest_pending, o, ur, on_confirmation_call_set_destination_sound_volume_level, NULL);\r
+       if (!ret) {\r
+               err("Failed to send AT-Command request");\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+\r
+static TReturn s_call_get_sound_volume_level(CoreObject *o, UserRequest *ur)\r
+{\r
+       dbg("Entry");\r
+\r
+       dbg("Exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_call_mute(CoreObject *o, UserRequest *ur)\r
+{\r
+       char *cmd_str = NULL;\r
+       TcorePending *pending = NULL;\r
+       TcoreATRequest *req = NULL;\r
+       gboolean ret = FALSE;\r
+\r
+       dbg("Entry");\r
+    cmd_str = g_strdup_printf("%s","AT+XDRV=40,8,0,0,0");\r
+\r
+       dbg("Request command string: %s", cmd_str);\r
+\r
+       // Create new Pending request\r
+       pending = tcore_pending_new(o, 0);\r
+\r
+       // Create new AT-Command request\r
+       req = tcore_at_request_new(cmd_str, "+XDRV", TCORE_AT_SINGLELINE);\r
+       dbg("Command: %s, prefix(if any): %s, Command length: %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       // Free command string\r
+       g_free(cmd_str);\r
+\r
+       // Set request data (AT command) to Pending request\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+\r
+       // Send request\r
+       ret = _call_request_message (pending, o, ur, on_confirmation_call_mute, NULL);\r
+       if (!ret) {\r
+               err("Failed to send AT-Command request");\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+       dbg("Exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_call_unmute(CoreObject *o, UserRequest *ur)\r
+{\r
+       char *cmd_str = NULL;\r
+       TcorePending *pending = NULL;\r
+       TcoreATRequest *req = NULL;\r
+       gboolean ret = FALSE;\r
+       dbg("Entry");\r
+\r
+    cmd_str = g_strdup_printf("%s","AT+XDRV=40,8,0,0,88");\r
+       dbg("Request command string: %s", cmd_str);\r
+\r
+       // Create new Pending request\r
+       pending = tcore_pending_new(o, 0);\r
+\r
+       // Create new AT-Command request\r
+       req = tcore_at_request_new(cmd_str, "+XDRV", TCORE_AT_SINGLELINE);\r
+       dbg("Command: %s, prefix(if any): %s, Command length: %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       // Free command string\r
+       g_free(cmd_str);\r
+\r
+       // Set request data (AT command) to Pending request\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+\r
+       // Send request\r
+       ret = _call_request_message (pending, o, ur, on_confirmation_call_unmute, NULL);\r
+       if (!ret) {\r
+               err("Failed to send AT-Command request");\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+       dbg("Exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+\r
+}\r
+\r
+\r
+static TReturn s_call_get_mute_status(CoreObject *o, UserRequest *ur)\r
+{\r
+       dbg("Entry");\r
+\r
+       dbg("Exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn _set_dtmf_tone_duration(CoreObject *o, UserRequest *ur)\r
+{\r
+       char *cmd_str = NULL;\r
+       TcorePending *pending = NULL;\r
+       TcoreATRequest *req = NULL;\r
+       gboolean ret = FALSE;\r
+       dbg("Entry");\r
+\r
+       cmd_str = g_strdup_printf("%s", "AT+VTD=3"); // ~300 mili secs. +VTD= n, where  n = (0 - 255) * 1/10 secs.\r
+       dbg("Request command string: %s", cmd_str);\r
+\r
+       // Create new Pending request\r
+       pending = tcore_pending_new(o, 0);\r
+\r
+       // Create new AT-Command request\r
+       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);\r
+       dbg("Command: %s, prefix(if any): %s, Command length: %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       // Free command string */\r
+       g_free(cmd_str);\r
+\r
+       // Set request data (AT command) to Pending request\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+\r
+       // Send request\r
+       ret = _call_request_message (pending, o, ur, _on_confirmation_dtmf_tone_duration, NULL);\r
+       if (!ret) {\r
+               err("Failed to send AT-Command request");\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+       dbg("Exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+//Call Operations\r
+static struct tcore_call_operations call_ops = {\r
+       .dial                                       = s_call_outgoing,\r
+       .answer                                     = s_call_answer,\r
+       .end                                        = s_call_release,\r
+       .hold                                       = s_call_hold,\r
+       .active                                     = s_call_active,\r
+       .swap                                       = s_call_swap,\r
+       .join                                       = s_call_join,\r
+       .split                                      = s_call_split,\r
+       .deflect                                    = s_call_deflect,\r
+       .transfer                                   = s_call_transfer,\r
+       .send_dtmf                                  = s_call_send_dtmf,\r
+       .set_sound_path                     = s_call_set_sound_path,\r
+       .set_sound_volume_level     = s_call_set_sound_volume_level,\r
+       .get_sound_volume_level     = s_call_get_sound_volume_level,\r
+       .mute                                       = s_call_mute,\r
+       .unmute                                     = s_call_unmute,\r
+       .get_mute_status                    = s_call_get_mute_status,\r
+       .set_sound_recording        = NULL,\r
+       .set_sound_equalization     = NULL,\r
+       .set_sound_noise_reduction      = NULL,\r
+};\r
+\r
+static void s_call_info_mo_waiting(CoreObject *o)\r
+{\r
+       TcorePlugin *plugin = NULL;\r
+       CallObject *co = NULL;\r
+       int id = 0;\r
+       dbg("Entry");\r
+\r
+       // Parent plugin\r
+       plugin = tcore_object_ref_plugin(o);\r
+\r
+       // Call Core object\r
+       co = tcore_call_object_current_on_mo_processing(o);\r
+       if (!co) {\r
+               err("Failed to find Call Core object!");\r
+               return;\r
+       }\r
+\r
+       // Call ID\r
+       id = tcore_call_object_get_id(co);\r
+\r
+       // Send notification to TAPI\r
+       tcore_server_send_notification(tcore_plugin_ref_server(plugin),\r
+                                                                       tcore_plugin_ref_core_object(plugin, "call"),\r
+                                                                       TNOTI_CALL_INFO_WAITING,\r
+                                                                       sizeof(unsigned int),\r
+                                                                       (void*)&id);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void s_call_info_mo_forwarded(CoreObject *o)\r
+{\r
+       TcorePlugin *plugin = NULL;\r
+       CallObject *co = NULL;\r
+       int id = 0;\r
+       dbg("Entry");\r
+\r
+       // Parent plugin\r
+       plugin = tcore_object_ref_plugin(o);\r
+\r
+       // Call Core object\r
+       co = tcore_call_object_current_on_mo_processing(o);\r
+       if (!co) {\r
+               err("Failed to find Call Core object!");\r
+               return;\r
+       }\r
+\r
+       // Call ID\r
+       id = tcore_call_object_get_id(co);\r
+\r
+       // Send notification to TAPI\r
+       tcore_server_send_notification(tcore_plugin_ref_server(plugin),\r
+                                                                       tcore_plugin_ref_core_object(plugin, "call"),\r
+                                                                       TNOTI_CALL_INFO_FORWARDED,\r
+                                                                       sizeof(unsigned int),\r
+                                                                       (void*)&id);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void s_call_info_mo_barred_incoming(CoreObject *o)\r
+{\r
+       TcorePlugin *plugin = NULL;\r
+       CallObject *co = NULL;\r
+       int id = 0;\r
+       dbg("Entry");\r
+\r
+       // Parent plugin\r
+       plugin = tcore_object_ref_plugin(o);\r
+\r
+       // Call Core object\r
+       co = tcore_call_object_current_on_mo_processing(o);\r
+       if (!co) {\r
+               err("Failed to find Call Core object!");\r
+               return;\r
+       }\r
+\r
+       // Call ID\r
+       id = tcore_call_object_get_id(co);\r
+\r
+       // Send notification to TAPI\r
+       tcore_server_send_notification(tcore_plugin_ref_server(plugin),\r
+                                                                       tcore_plugin_ref_core_object(plugin, "call"),\r
+                                                                       TNOTI_CALL_INFO_BARRED_INCOMING,\r
+                                                                       sizeof(unsigned int),\r
+                                                                       (void*)&id);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void s_call_info_mo_barred_outgoing(CoreObject *o)\r
+{\r
+       TcorePlugin *plugin = NULL;\r
+       CallObject *co = NULL;\r
+       int id = 0;\r
+       dbg("Entry");\r
+\r
+       // Parent plugin\r
+       plugin = tcore_object_ref_plugin(o);\r
+\r
+       // Call Core object\r
+       co = tcore_call_object_current_on_mo_processing(o);\r
+       if (!co) {\r
+               err("Failed to find Call Core object!");\r
+               return;\r
+       }\r
+\r
+       // Call ID\r
+       id = tcore_call_object_get_id(co);\r
+\r
+       // Send notification to TAPI\r
+       tcore_server_send_notification(tcore_plugin_ref_server(plugin),\r
+                                                                       tcore_plugin_ref_core_object(plugin, "call"),\r
+                                                                       TNOTI_CALL_INFO_BARRED_OUTGOING,\r
+                                                                       sizeof(unsigned int),\r
+                                                                       (void*)&id);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void s_call_info_mo_deflected(CoreObject *o)\r
+{\r
+       TcorePlugin *plugin = NULL;\r
+       CallObject *co = NULL;\r
+       int id = 0;\r
+       dbg("Entry");\r
+\r
+       // Parent plugin\r
+       plugin = tcore_object_ref_plugin(o);\r
+\r
+       // Call Core object\r
+       co = tcore_call_object_current_on_mo_processing(o);\r
+       if (!co) {\r
+               err("Failed to find Call Core object!");\r
+               return;\r
+       }\r
+\r
+       // Call ID\r
+       id = tcore_call_object_get_id(co);\r
+\r
+       // Send notification to TAPI\r
+       tcore_server_send_notification(tcore_plugin_ref_server(plugin),\r
+                                                                       tcore_plugin_ref_core_object(plugin, "call"),\r
+                                                                       TNOTI_CALL_INFO_DEFLECTED,\r
+                                                                       sizeof(unsigned int),\r
+                                                                       (void*)&id);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void s_call_info_mo_clir_suppression_reject(CoreObject *o)\r
+{\r
+       TcorePlugin *plugin = NULL;\r
+       CallObject *co = NULL;\r
+       int id = 0;\r
+       dbg("Entry");\r
+\r
+       // Parent plugin\r
+       plugin = tcore_object_ref_plugin(o);\r
+\r
+       // Call Core object\r
+       co = tcore_call_object_current_on_mo_processing(o);\r
+       if (!co) {\r
+               err("Failed to find Call Core object!");\r
+               return;\r
+       }\r
+\r
+       // Call ID\r
+       id = tcore_call_object_get_id(co);\r
+\r
+       // Send notification to TAPI\r
+       tcore_server_send_notification(tcore_plugin_ref_server(plugin),\r
+                                                                       tcore_plugin_ref_core_object(plugin, "call"),\r
+                                                                       TNOTI_CALL_INFO_CLIR_SUPPRESSION_REJECT,\r
+                                                                       sizeof(unsigned int),\r
+                                                                       (void*)&id);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void s_call_info_mo_cfu(CoreObject *o)\r
+{\r
+       TcorePlugin *plugin = NULL;\r
+       CallObject *co = NULL;\r
+       int id = 0;\r
+       dbg("Entry");\r
+\r
+       // Parent plugin\r
+       plugin = tcore_object_ref_plugin(o);\r
+\r
+       // Call Core object\r
+       co = tcore_call_object_current_on_mo_processing(o);\r
+       if (!co) {\r
+               err("Failed to find Call Core object!");\r
+               return;\r
+       }\r
+\r
+       // Call ID\r
+       id = tcore_call_object_get_id(co);\r
+\r
+       // Send notification to TAPI\r
+       tcore_server_send_notification(tcore_plugin_ref_server(plugin),\r
+                                                                       tcore_plugin_ref_core_object(plugin, "call"),\r
+                                                                       TNOTI_CALL_INFO_FORWARD_UNCONDITIONAL,\r
+                                                                       sizeof(unsigned int),\r
+                                                                       (void*)&id);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void s_call_info_mo_cfc(CoreObject *o)\r
+{\r
+       TcorePlugin *plugin = NULL;\r
+       CallObject *co = NULL;\r
+       int id = 0;\r
+       dbg("Entry");\r
+\r
+       // Parent plugin\r
+       plugin = tcore_object_ref_plugin(o);\r
+\r
+       // Call Core object\r
+       co = tcore_call_object_current_on_mo_processing(o);\r
+       if (!co) {\r
+               err("Failed to find Call Core object!");\r
+               return;\r
+       }\r
+\r
+       // Call ID\r
+       id = tcore_call_object_get_id(co);\r
+\r
+       // Send notification to TAPI\r
+       tcore_server_send_notification(tcore_plugin_ref_server(plugin),\r
+                                                                       tcore_plugin_ref_core_object(plugin, "call"),\r
+                                                                       TNOTI_CALL_INFO_FORWARD_CONDITIONAL,\r
+                                                                       sizeof(unsigned int),\r
+                                                                       (void*)&id);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void s_call_info_mt_cli(CoreObject *o, enum tcore_call_cli_mode mode, char* number)\r
+{\r
+       CallObject *co = NULL;\r
+       dbg("Entry");\r
+\r
+       // Call Core object\r
+       co = tcore_call_object_current_on_mt_processing(o);\r
+       if (!co) {\r
+               err("Failed to find Call Core object!");\r
+               return;\r
+       }\r
+\r
+       // Set CLI information\r
+       tcore_call_object_set_cli_info(co, mode, number);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void s_call_info_mt_cna(CoreObject *o, enum tcore_call_cna_mode mode, char* name, int dcs)\r
+{\r
+       CallObject *co = NULL;\r
+       dbg("Entry");\r
+\r
+       // Call Core object\r
+       co = tcore_call_object_current_on_mt_processing(o);\r
+       if (!co) {\r
+               err("Failed to find Call Core object!");\r
+               return;\r
+       }\r
+\r
+       // Set CNA information\r
+       tcore_call_object_set_cna_info(co, mode, name, dcs);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void s_call_info_mt_forwarded_call(CoreObject *o, char* number)\r
+{\r
+       TcorePlugin *plugin = NULL;\r
+       CallObject *co = NULL;\r
+       int id = 0;\r
+       dbg("Entry");\r
+\r
+       // Parent plugin\r
+       plugin = tcore_object_ref_plugin(o);\r
+\r
+       // Call Core object\r
+       co = tcore_call_object_find_by_number(o, number);\r
+       if (!co) {\r
+               err("Failed to find Call Core object!");\r
+               return;\r
+       }\r
+\r
+       // Call ID\r
+       id = tcore_call_object_get_id(co);\r
+\r
+       // Send notification to TAPI\r
+       tcore_server_send_notification(tcore_plugin_ref_server(plugin),\r
+                                                                       tcore_plugin_ref_core_object(plugin, "call"),\r
+                                                                       TNOTI_CALL_INFO_FORWARDED_CALL,\r
+                                                                       sizeof(unsigned int),\r
+                                                                       (void*)&id);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void s_call_info_mt_deflected_call(CoreObject *o, char* number)\r
+{\r
+       TcorePlugin *plugin = NULL;\r
+       CallObject *co = NULL;\r
+       int id = 0;\r
+       dbg("Entry");\r
+\r
+       // Parent plugin\r
+       plugin = tcore_object_ref_plugin(o);\r
+\r
+       // Call Core object\r
+       co = tcore_call_object_find_by_number(o, number);\r
+       if (!co) {\r
+               err("Failed to find Call Core object!");\r
+               return;\r
+       }\r
+\r
+       // Call ID\r
+       id = tcore_call_object_get_id(co);\r
+\r
+       // Send notification to TAPI\r
+       tcore_server_send_notification(tcore_plugin_ref_server(plugin),\r
+                                                                       tcore_plugin_ref_core_object(plugin, "call"),\r
+                                                                       TNOTI_CALL_INFO_DEFLECTED_CALL,\r
+                                                                       sizeof(unsigned int),\r
+                                                                       (void*)&id);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void s_call_info_mt_transfered(CoreObject *o, char* number)\r
+{\r
+       TcorePlugin *plugin = NULL;\r
+       CallObject *co = NULL;\r
+       int id = 0;\r
+       dbg("Entry");\r
+\r
+       // Parent plugin\r
+       plugin = tcore_object_ref_plugin(o);\r
+\r
+       // Call Core object\r
+       co = tcore_call_object_find_by_number(o, number);\r
+       if (!co) {\r
+               err("Failed to find Call Core object!");\r
+               return;\r
+       }\r
+\r
+       // Call ID\r
+       id = tcore_call_object_get_id(co);\r
+\r
+       // Send notification to TAPI\r
+       tcore_server_send_notification(tcore_plugin_ref_server(plugin),\r
+                                                                       tcore_plugin_ref_core_object(plugin, "call"),\r
+                                                                       TNOTI_CALL_INFO_TRANSFERED_CALL,\r
+                                                                       sizeof(unsigned int),\r
+                                                                       (void*)&id);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void s_call_info_held(CoreObject *o, char* number)\r
+{\r
+       TcorePlugin *plugin = NULL;\r
+       CallObject *co = NULL;\r
+       int id = 0;\r
+       dbg("Entry");\r
+\r
+       // Parent plugin\r
+       plugin = tcore_object_ref_plugin(o);\r
+\r
+       // Call Core object\r
+       co = tcore_call_object_find_by_number(o, number);\r
+       if (!co) {\r
+               err("Failed to find Call Core object!");\r
+               return;\r
+       }\r
+\r
+       // Call ID\r
+       id = tcore_call_object_get_id(co);\r
+\r
+       // Send notification to TAPI\r
+       tcore_server_send_notification(tcore_plugin_ref_server(plugin),\r
+                                                                       tcore_plugin_ref_core_object(plugin, "call"),\r
+                                                                       TNOTI_CALL_INFO_HELD,\r
+                                                                       sizeof(unsigned int),\r
+                                                                       (void*)&id);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void s_call_info_active(CoreObject *o, char* number)\r
+{\r
+       TcorePlugin *plugin = NULL;\r
+       CallObject *co = NULL;\r
+       int id = 0;\r
+       dbg("Entry");\r
+\r
+       // Parent plugin\r
+       plugin = tcore_object_ref_plugin(o);\r
+\r
+       // Call Core object\r
+       co = tcore_call_object_find_by_number(o, number);\r
+       if (!co) {\r
+               err("Failed to find Call Core object!");\r
+               return;\r
+       }\r
+\r
+       // Call ID\r
+       id = tcore_call_object_get_id(co);\r
+\r
+       // Send notification to TAPI\r
+       tcore_server_send_notification(tcore_plugin_ref_server(plugin),\r
+                                                                       tcore_plugin_ref_core_object(plugin, "call"),\r
+                                                                       TNOTI_CALL_INFO_ACTIVE,\r
+                                                                       sizeof(unsigned int),\r
+                                                                       (void*)&id);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void s_call_info_joined(CoreObject *o, char* number)\r
+{\r
+       TcorePlugin *plugin = NULL;\r
+       CallObject *co = NULL;\r
+       int id = 0;\r
+       dbg("Entry");\r
+\r
+       //Parent plugin\r
+       plugin = tcore_object_ref_plugin(o);\r
+\r
+       //Call Core object\r
+       co = tcore_call_object_find_by_number(o, number);\r
+       if (!co) {\r
+               err("Failed to find Call Core object!");\r
+               return;\r
+       }\r
+\r
+       // Call ID\r
+       id = tcore_call_object_get_id(co);\r
+\r
+       // Send notification to TAPI\r
+       tcore_server_send_notification(tcore_plugin_ref_server(plugin),\r
+                                                                       tcore_plugin_ref_core_object(plugin, "call"),\r
+                                                                       TNOTI_CALL_INFO_JOINED,\r
+                                                                       sizeof(unsigned int),\r
+                                                                       (void*)&id);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void s_call_info_released_on_hold(CoreObject *o, char* number)\r
+{\r
+       TcorePlugin *plugin = NULL;\r
+       CallObject *co = NULL;\r
+       int id = 0;\r
+       dbg("Entry");\r
+\r
+       // Parent plugin\r
+       plugin = tcore_object_ref_plugin(o);\r
+\r
+       // Call Core object\r
+       co = tcore_call_object_find_by_number(o, number);\r
+       if (!co) {\r
+               err("Failed to find Call Core object!");\r
+               return;\r
+       }\r
+\r
+       // Call ID\r
+       id = tcore_call_object_get_id(co);\r
+\r
+       // Send notification to TAPI\r
+       tcore_server_send_notification(tcore_plugin_ref_server(plugin),\r
+                                                                       tcore_plugin_ref_core_object(plugin, "call"),\r
+                                                                       TNOTI_CALL_INFO_RELEASED_ON_HOLD,\r
+                                                                       sizeof(unsigned int),\r
+                                                                       (void*)&id);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void s_call_info_transfer_alert(CoreObject *o, char* number)\r
+{\r
+       TcorePlugin *plugin = NULL;\r
+       CallObject *co = NULL;\r
+       int id = 0;\r
+       dbg("Entry");\r
+\r
+       //Parent plugin\r
+       plugin = tcore_object_ref_plugin(o);\r
+\r
+       // Call Core object\r
+       co = tcore_call_object_find_by_number(o, number);\r
+       if (!co) {\r
+               err("Failed to find Call Core object!");\r
+               return;\r
+       }\r
+\r
+       // Call ID\r
+       id = tcore_call_object_get_id(co);\r
+\r
+       //Send notification to TAPI\r
+       tcore_server_send_notification(tcore_plugin_ref_server(plugin),\r
+                                                                       tcore_plugin_ref_core_object(plugin, "call"),\r
+                                                                       TNOTI_CALL_INFO_TRANSFER_ALERT,\r
+                                                                       sizeof(unsigned int),\r
+                                                                       (void*)&id);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void s_call_info_transfered(CoreObject *o, char* number)\r
+{\r
+       TcorePlugin *plugin = NULL;\r
+       CallObject *co = NULL;\r
+       int id = 0;\r
+       dbg("Entry");\r
+\r
+       // Parent plugin\r
+       plugin = tcore_object_ref_plugin(o);\r
+\r
+       // Call Core object\r
+       co = tcore_call_object_find_by_number(o, number);\r
+       if (!co) {\r
+               err("Failed to find Call Core object!");\r
+               return;\r
+       }\r
+\r
+       // Call ID\r
+       id = tcore_call_object_get_id(co);\r
+\r
+       // Send notification to TAPI\r
+       tcore_server_send_notification(tcore_plugin_ref_server(plugin),\r
+                                                                       tcore_plugin_ref_core_object(plugin, "call"),\r
+                                                                       TNOTI_CALL_INFO_TRANSFERED,\r
+                                                                       sizeof(unsigned int),\r
+                                                                       (void*)&id);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void s_call_info_cf_check_message(CoreObject *o, char* number)\r
+{\r
+       TcorePlugin *plugin = NULL;\r
+       CallObject *co = NULL;\r
+       int id = 0;\r
+       dbg("Entry");\r
+\r
+       // Parent plugin\r
+       plugin = tcore_object_ref_plugin(o);\r
+\r
+       // Call Core object\r
+       co = tcore_call_object_find_by_number(o, number);\r
+       if (!co) {\r
+               err("Failed to find Call Core object!");\r
+               return;\r
+       }\r
+\r
+       // Call ID\r
+       id = tcore_call_object_get_id(co);\r
+\r
+       // Send notification to TAPI\r
+       tcore_server_send_notification(tcore_plugin_ref_server(plugin),\r
+                                                                       tcore_plugin_ref_core_object(plugin, "call"),\r
+                                                                       TNOTI_CALL_INFO_CF_CHECK_MESSAGE,\r
+                                                                       sizeof(unsigned int),\r
+                                                                       (void*)&id);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+// Call Information Operations\r
+static struct tcore_call_information_operations call_information_ops = {\r
+       .mo_call_col                            = 0,\r
+       .mo_call_waiting                        = s_call_info_mo_waiting,\r
+       .mo_call_cug                            = 0,\r
+       .mo_call_forwarded                  = s_call_info_mo_forwarded,\r
+       .mo_call_barred_incoming        = s_call_info_mo_barred_incoming,\r
+       .mo_call_barred_outgoing        = s_call_info_mo_barred_outgoing,\r
+       .mo_call_deflected                      = s_call_info_mo_deflected,\r
+       .mo_call_clir_suppression_reject = s_call_info_mo_clir_suppression_reject,\r
+       .mo_call_cfu                            = s_call_info_mo_cfu,\r
+       .mo_call_cfc                            = s_call_info_mo_cfc,\r
+       .mt_call_cli                            = s_call_info_mt_cli,\r
+       .mt_call_cna                            = s_call_info_mt_cna,\r
+       .mt_call_forwarded_call         = s_call_info_mt_forwarded_call,\r
+       .mt_call_cug_call                       = 0,\r
+       .mt_call_deflected_call         = s_call_info_mt_deflected_call,\r
+       .mt_call_transfered                     = s_call_info_mt_transfered,\r
+       .call_held                                      = s_call_info_held,\r
+       .call_active                            = s_call_info_active,\r
+       .call_joined                            = s_call_info_joined,\r
+       .call_released_on_hold          = s_call_info_released_on_hold,\r
+       .call_transfer_alert            = s_call_info_transfer_alert,\r
+       .call_transfered                        = s_call_info_transfered,\r
+       .call_cf_check_message          = s_call_info_cf_check_message,\r
+};\r
+\r
+gboolean s_call_init(TcorePlugin *p, TcoreHal *h)\r
+{\r
+       CoreObject *o = NULL;\r
+       struct property_call_info *data = NULL;\r
+       dbg("Entry");\r
+\r
+       //Creating Call COre object\r
+       o = tcore_call_new(p, "call", &call_ops, h);\r
+       if (!o) {\r
+               err("Failed to create Call Core Object");\r
+               return FALSE;\r
+       }\r
+\r
+       //Set Call Operations\r
+       tcore_call_information_set_operations(o, &call_information_ops);\r
+\r
+       // Add Callbacks\r
+       tcore_object_add_callback(o, "+XCALLSTAT", on_notification_call_info, NULL);\r
+       tcore_object_add_callback(o, "+CLIP", on_notification_call_clip_info, NULL);\r
+\r
+       // User Data\r
+       data = calloc(sizeof(struct property_call_info *), 1);\r
+       tcore_plugin_link_property(p, "CALL", data);\r
+\r
+       dbg("Exit");\r
+       return TRUE;\r
+}\r
+\r
+void s_call_exit(TcorePlugin *p)\r
+{\r
+       CoreObject *o = NULL;\r
+       struct property_network_info *data = NULL;\r
+       dbg("Entry");\r
+\r
+       o = tcore_plugin_ref_core_object(p, "call");\r
+\r
+       // Free Call Core Object */\r
+       tcore_call_free(o);\r
+\r
+       // Free 'CALL' property */\r
+       data = tcore_plugin_ref_property(p, "CALL");\r
+       if (data) {\r
+               g_free(data);\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
index f9a6075..3c0c616 100755 (executable)
-/**
- * tel-plugin-samsung
- *
- * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Contact: Ja-young Gu <jygu@samsung.com>
- *
- * 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 <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <glib.h>
-
-
-#include "s_common.h"
-
-#include <plugin.h>
-
-
-void util_hex_dump(char *pad, int size, const void *data)
-{
-       char buf[255] = {0, };
-       char hex[4] = {0, };
-       int i;
-       unsigned char *p;
-
-       if (size <= 0) {
-               msg("%sno data", pad);
-               return;
-       }
-
-       p = (unsigned char *)data;
-
-       snprintf(buf, 255, "%s%04X: ", pad, 0);
-       for (i = 0; i<size; i++) {
-               snprintf(hex, 4, "%02X ", p[i]);
-               strcat(buf, hex);
-
-               if ((i + 1) % 8 == 0) {
-                       if ((i + 1) % 16 == 0) {
-                               msg("%s", buf);
-                               memset(buf, 0, 255);
-                               snprintf(buf, 255, "%s%04X: ", pad, i + 1);
-                       }
-                       else {
-                               strcat(buf, "  ");
-                       }
-               }
-       }
-
-       msg("%s", buf);
-}
-
-void hook_hex_dump(enum direction_e d, int size, const void *data)
-{
-       msg("=== TX data DUMP =====");
-       util_hex_dump("          ", size, data);
-       msg("=== TX data DUMP =====");
-
-}
-
-unsigned int util_assign_message_sequence_id(TcorePlugin *p)
-{
-       struct global_data *gd;
-
-       if (!p) {
-               dbg("plugin is NULL");
-               return -1;
-       }
-
-       gd = tcore_plugin_ref_user_data(p);
-       if (!gd) {
-               dbg("global data is NULL");
-               return -1;
-       }
-
-       if (gd->msg_auto_id_current == 0) {
-               gd->msg_auto_id_current = gd->msg_auto_id_start;
-               dbg("pending_auto_id_current is 0, reset to start");
-       }
-       else if (gd->msg_auto_id_current >= gd->msg_auto_id_end) {
-               gd->msg_auto_id_current = gd->msg_auto_id_start;
-               dbg("pending_auto_id_current is over, reset to start");
-       }
-       else {
-               gd->msg_auto_id_current++;
-       }
-
-       dbg("message_sequence_id = %d", gd->msg_auto_id_current);
-
-       return gd->msg_auto_id_current;
-}
-
-gboolean util_add_waiting_job(GQueue *queue, unsigned int id, UserRequest *ur)
-{
-       struct work_queue_data *wqd;
-
-       if (!queue)
-               return FALSE;
-
-       wqd = calloc(sizeof(struct work_queue_data), 1);
-       if (!wqd)
-               return FALSE;
-
-       wqd->id = id;
-       wqd->ur = tcore_user_request_ref(ur);
-       g_queue_push_tail(queue, wqd);
-
-       dbg("id = %d, ur = 0x%x", wqd->id, wqd->ur);
-       return TRUE;
-}
-
-UserRequest *util_pop_waiting_job(GQueue *queue, unsigned int id)
-{
-       int i = 0;
-       UserRequest *ur;
-       struct work_queue_data *wqd;
-
-       if (!queue)
-               return NULL;
-
-
-       dbg("before waiting job count: %d", g_queue_get_length(queue));
-
-       do {
-               wqd = g_queue_peek_nth(queue, i);
-               if (!wqd)
-                       return NULL;
-
-               if (wqd->id == id) {
-                       wqd = g_queue_pop_nth(queue, i);
-                       break;
-               }
-
-               i++;
-       } while (wqd != NULL);
-
-       dbg("after  waiting job count: %d", g_queue_get_length(queue));
-
-       if (!wqd)
-               return NULL;
-
-       ur = wqd->ur;
-       free(wqd);
-
-       return ur;
-}
-
-unsigned char util_hexCharToInt(char c)
-{
-    if (c >= '0' && c <= '9')
-        return (c - '0');
-    else if (c >= 'A' && c <= 'F')
-        return (c - 'A' + 10);
-    else if (c >= 'a' && c <= 'f')
-        return (c - 'a' + 10);
-    else
-    {
-        dbg("invalid charater!!");
-        return -1;
-    }
-}
-
-char * util_hexStringToBytes(char * s)
-{
-    char * ret;
-    int     i;
-    int         sz;
-
-    if(s == NULL)
-        return NULL;
-
-        sz = strlen(s);
-
-    ret = malloc(sz /2);
-
-    dbg("Convert String to Binary!!");
-
-    for(i = 0; i < sz; i += 2)
-    {
-        ret[i/2] = (char)((util_hexCharToInt(s[i]) << 4) | util_hexCharToInt(s[i + 1]));
-        dbg("[%02x]", ret[i/2]);
-    }
-
-    return ret;
-}
-
+/**\r
+ * tel-plugin-samsung\r
+ *\r
+ * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved\r
+ *\r
+ * Contact: Ja-young Gu <jygu@samsung.com>\r
+ *\r
+ * PROPRIETARY/CONFIDENTIAL\r
+ *\r
+ * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information").\r
+ * You shall not disclose such Confidential Information and shall\r
+ * use it only in accordance with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS.\r
+ * SAMSUNG make no representations or warranties about the suitability\r
+ * of the software, either express or implied, including but not\r
+ * limited to the implied warranties of merchantability, fitness for a particular purpose, or non-infringement.\r
+ * SAMSUNG shall not be liable for any damages suffered by licensee as\r
+ * a result of using, modifying or distributing this software or its derivatives.\r
+ */\r
+\r
+#include <stdio.h>\r
+#include <string.h>\r
+#include <stdlib.h>\r
+\r
+#include <glib.h>\r
+\r
+\r
+#include "s_common.h"\r
+\r
+#include <plugin.h>\r
+\r
+#undef MAX\r
+#define MAX(a, b)  (((a) > (b)) ? (a) : (b))\r
+\r
+#undef MIN\r
+#define MIN(a, b)  (((a) < (b)) ? (a) : (b))\r
+\r
+#define bitsize(type) (sizeof(type) * 8)\r
+\r
+#define copymask(type) ((0xffffffff) >> (32 - bitsize(type)))\r
+\r
+#define MASK(width, offset, data) \\r
+   (((width) == bitsize(data)) ? (data) :   \\r
+   ((((copymask(data) << (bitsize(data) - ((width) % bitsize(data)))) & copymask(data)) >>  (offset)) & (data))) \\r
+\r
+\r
+#define MASK_AND_SHIFT(width, offset, shift, data)  \\r
+                  ((((signed) (shift)) < 0) ?       \\r
+                    MASK((width), (offset), (data)) << -(shift) :  \\r
+                    MASK((width), (offset), (data)) >>  (((unsigned) (shift)))) \\r
+\r
+\r
+void util_hex_dump(char *pad, int size, const void *data)\r
+{\r
+       char buf[255] = {0, };\r
+       char hex[4] = {0, };\r
+       int i;\r
+       unsigned char *p;\r
+\r
+       if (size <= 0) {\r
+               msg("%sno data", pad);\r
+               return;\r
+       }\r
+\r
+       p = (unsigned char *)data;\r
+\r
+       snprintf(buf, 255, "%s%04X: ", pad, 0);\r
+       for (i = 0; i<size; i++) {\r
+               snprintf(hex, 4, "%02X ", p[i]);\r
+               strcat(buf, hex);\r
+\r
+               if ((i + 1) % 8 == 0) {\r
+                       if ((i + 1) % 16 == 0) {\r
+                               msg("%s", buf);\r
+                               memset(buf, 0, 255);\r
+                               snprintf(buf, 255, "%s%04X: ", pad, i + 1);\r
+                       }\r
+                       else {\r
+                               strcat(buf, "  ");\r
+                       }\r
+               }\r
+       }\r
+\r
+       msg("%s", buf);\r
+}\r
+\r
+void hook_hex_dump(enum direction_e d, int size, const void *data)\r
+{\r
+       msg("=== TX data DUMP =====");\r
+       util_hex_dump("          ", size, data);\r
+       msg("=== TX data DUMP =====");\r
+\r
+}\r
+\r
+unsigned int util_assign_message_sequence_id(TcorePlugin *p)\r
+{\r
+       struct global_data *gd;\r
+\r
+       if (!p) {\r
+               dbg("plugin is NULL");\r
+               return -1;\r
+       }\r
+\r
+       gd = tcore_plugin_ref_user_data(p);\r
+       if (!gd) {\r
+               dbg("global data is NULL");\r
+               return -1;\r
+       }\r
+\r
+       if (gd->msg_auto_id_current == 0) {\r
+               gd->msg_auto_id_current = gd->msg_auto_id_start;\r
+               dbg("pending_auto_id_current is 0, reset to start");\r
+       }\r
+       else if (gd->msg_auto_id_current >= gd->msg_auto_id_end) {\r
+               gd->msg_auto_id_current = gd->msg_auto_id_start;\r
+               dbg("pending_auto_id_current is over, reset to start");\r
+       }\r
+       else {\r
+               gd->msg_auto_id_current++;\r
+       }\r
+\r
+       dbg("message_sequence_id = %d", gd->msg_auto_id_current);\r
+\r
+       return gd->msg_auto_id_current;\r
+}\r
+\r
+gboolean util_add_waiting_job(GQueue *queue, unsigned int id, UserRequest *ur)\r
+{\r
+       struct work_queue_data *wqd;\r
+\r
+       if (!queue)\r
+               return FALSE;\r
+\r
+       wqd = calloc(sizeof(struct work_queue_data), 1);\r
+       if (!wqd)\r
+               return FALSE;\r
+\r
+       wqd->id = id;\r
+       wqd->ur = tcore_user_request_ref(ur);\r
+       g_queue_push_tail(queue, wqd);\r
+\r
+       dbg("id = %d, ur = 0x%x", wqd->id, wqd->ur);\r
+       return TRUE;\r
+}\r
+\r
+UserRequest *util_pop_waiting_job(GQueue *queue, unsigned int id)\r
+{\r
+       int i = 0;\r
+       UserRequest *ur;\r
+       struct work_queue_data *wqd;\r
+\r
+       if (!queue)\r
+               return NULL;\r
+\r
+\r
+       dbg("before waiting job count: %d", g_queue_get_length(queue));\r
+\r
+       do {\r
+               wqd = g_queue_peek_nth(queue, i);\r
+               if (!wqd)\r
+                       return NULL;\r
+\r
+               if (wqd->id == id) {\r
+                       wqd = g_queue_pop_nth(queue, i);\r
+                       break;\r
+               }\r
+\r
+               i++;\r
+       } while (wqd != NULL);\r
+\r
+       dbg("after  waiting job count: %d", g_queue_get_length(queue));\r
+\r
+       if (!wqd)\r
+               return NULL;\r
+\r
+       ur = wqd->ur;\r
+       free(wqd);\r
+\r
+       return ur;\r
+}\r
+\r
+unsigned char util_hexCharToInt(char c)\r
+{\r
+    if (c >= '0' && c <= '9')\r
+        return (c - '0');\r
+    else if (c >= 'A' && c <= 'F')\r
+        return (c - 'A' + 10);\r
+    else if (c >= 'a' && c <= 'f')\r
+        return (c - 'a' + 10);\r
+    else\r
+    {\r
+        dbg("invalid charater!!");\r
+        return -1;\r
+    }\r
+}\r
+\r
+char * util_hexStringToBytes(char * s)\r
+{\r
+    char * ret;\r
+       int i;\r
+       int sz;\r
+\r
+       if (s == NULL)\r
+               return NULL;\r
+\r
+       sz = strlen(s);\r
+\r
+       ret = calloc((sz/2)+1, 1);\r
+\r
+       dbg("Convert String to Binary!!");\r
+\r
+       for (i = 0; i < sz; i += 2) {\r
+               ret[i / 2] = (char) ((util_hexCharToInt(s[i]) << 4) | util_hexCharToInt(s[i + 1]));\r
+               dbg("[%02x]", ret[i/2]);\r
+    }\r
+\r
+    return ret;\r
+}\r
+\r
+char _util_unpackb(const char *src, int pos, int len)\r
+{\r
+       char result = 0;\r
+       int rshift = 0;\r
+\r
+       src += pos/8;\r
+       pos %= 8;\r
+\r
+       rshift = MAX( 8 - (pos + len), 0);\r
+\r
+       if ( rshift > 0 ) {\r
+\r
+        result = MASK_AND_SHIFT(len, pos, rshift, *src);\r
+\r
+       } else {\r
+\r
+        result = MASK(8-pos, pos, *src);\r
+        src++;\r
+        len -= 8 - pos;\r
+\r
+         if ( len > 0 ) result = ( result<<len ) | (*src >> (8-len));  // if any bits left\r
+       }\r
+\r
+       return result;\r
+}\r
+\r
+char _util_convert_byte_hexChar (char val)\r
+{\r
+       char hex_char;\r
+\r
+       if (val <= 9)\r
+       {\r
+               hex_char = (char)(val+'0');\r
+       }\r
+       else if (val >= 10 && val <= 15)\r
+       {\r
+               hex_char = (char)(val-10+'A');\r
+       }\r
+       else\r
+       {\r
+               hex_char = '0';\r
+       }\r
+\r
+       return (hex_char);\r
+}\r
+\r
+gboolean util_byte_to_hex(const char *byte_pdu, char *hex_pdu, int num_bytes)\r
+{\r
+       int i;\r
+       char nibble;\r
+       int buf_pos = 0;\r
+\r
+       for (i=0; i<num_bytes*2; i++)\r
+       {\r
+               nibble = _util_unpackb(byte_pdu,buf_pos,4);\r
+               buf_pos += 4;\r
+               hex_pdu[i] = _util_convert_byte_hexChar(nibble);\r
+       }\r
+\r
+       return TRUE;\r
+}\r
index d11cdd4..aae8ae5 100755 (executable)
-/*
- * tel-plugin-imc
- *
- * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Hayoon Ko <hayoon.ko@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <glib.h>
-
-#include <tcore.h>
-#include <hal.h>
-#include <core_object.h>
-#include <plugin.h>
-#include <queue.h>
-#include <co_modem.h>
-#include <storage.h>
-#include <server.h>
-#include <at.h>
-
-#include "s_common.h"
-#include "s_modem.h"
-
-#define ID_RESERVED_AT 0x0229
-
-#define MAX_VERSION_LEN        32
-#define TAPI_MISC_ME_SN_LEN_MAX                                32
-#define TAPI_MISC_PRODUCT_CODE_LEN_MAX         32
-#define TAPI_MISC_MODEL_ID_LEN_MAX                     17
-#define TAPI_MISC_PRL_ERI_VER_LEN_MAX          17
-
-#define CPAS_RES_READY                 0
-#define CPAS_RES_UNAVAIL               1
-#define CPAS_RES_UNKNOWN               2
-#define CPAS_RES_RINGING               3
-#define CPAS_RES_CALL_PROGRESS 4
-#define CPAS_RES_ASLEEP           5
-#define AT_VER_LEN 20
-
-
-enum cp_state {
-       CP_STATE_OFFLINE,
-       CP_STATE_CRASH_RESET,
-       CP_STATE_CRASH_EXIT,
-       CP_STATE_BOOTING,
-       CP_STATE_ONLINE,
-       CP_STATE_NV_REBUILDING,
-       CP_STATE_LOADER_DONE,
-};
-
-typedef enum {
-       TAPI_MISC_ME_IMEI = 0x00, /**< 0x00: IMEI, GSM/UMTS device */
-       TAPI_MISC_ME_ESN = 0x01, /**< 0x01: ESN(Electronic Serial Number), It`s essentially run out. CDMA device */
-       TAPI_MISC_ME_MEID = 0x02, /**< 0x02: MEID, This value can have hexa decimal digits. CDMA device */
-       TAPI_MISC_ME_MAX = 0xff /**< 0xff: reserved */
-} TelMiscSNIndexType_t;
-
-typedef struct {
-       TelMiscSNIndexType_t sn_index; /**< serial number index */
-       int sn_len; /**< Length */
-       unsigned char szNumber[TAPI_MISC_ME_SN_LEN_MAX]; /**< Number */
-} TelMiscSNInformation;
-
-/**
- * Mobile Equipment Version Information
- */
-typedef struct {
-       unsigned char ver_mask; /**< version mask  - 0x01:SW_ver, 0x02:HW_ver, 0x04:RF_CAL_date, 0x08:Product_code, 0x10:Model_ID, 0x20:PRL, 0x04:ERI, 0xff:all */
-       unsigned char szSwVersion[MAX_VERSION_LEN]; /**< Software version, null termination */
-       unsigned char szHwVersion[MAX_VERSION_LEN]; /**< Hardware version, null termination */
-       unsigned char szRfCalDate[MAX_VERSION_LEN]; /**< Calculation Date, null termination */
-       unsigned char szProductCode[TAPI_MISC_PRODUCT_CODE_LEN_MAX]; /**< product code, null termination */
-       unsigned char szModelId[TAPI_MISC_MODEL_ID_LEN_MAX]; /**< model id (only for CDMA), null termination */
-       unsigned char prl_nam_num; /**< number of PRL NAM fields */
-       unsigned char szPrlVersion[TAPI_MISC_PRL_ERI_VER_LEN_MAX * 3];/**< prl version (only for CDMA), null termination */
-       unsigned char eri_nam_num; /**< number of PRL NAM fields */
-       unsigned char szEriVersion[TAPI_MISC_PRL_ERI_VER_LEN_MAX * 3];/**< eri version (only for CDMA), null termination */
-} TelMiscVersionInformation;
-
-void prepare_and_send_pending_request(TcorePlugin *plugin, char *co_name, const char *at_cmd, const char* prefix, enum tcore_at_command_type at_cmd_type, TcorePendingResponseCallback callback);
-static void on_confirmation_modem_message_send(TcorePending *p, gboolean result, void *user_data); // from Kernel
-void on_response_bootup_subscription(TcorePending *p, gboolean result, void *user_data);
-void on_response_last_bootup_subscription(TcorePending *p, gboolean result, void *user_data);
-static void on_timeout_modem_poweron(TcorePending *p, void *user_data);
-
-static void on_timeout_modem_poweron(TcorePending *p, void *user_data)
-{
-       unsigned int data_len = 0;
-       char data[] = "AT+CPAS\r";                      
-       dbg("TIMEOUT for 1st AT Command !!!!! NO Response for initial AT command. Resending it");       
-       data_len = sizeof(data);
-       
-       /* Retransmit 1st AT command directly via HAL, don't disturb pending queue. */
-       /* HAL was passed as user_data, re-use it */
-       if (user_data) 
-       {
-               tcore_hal_send_data(user_data, data_len, (void *)data); 
-       }
-}
-
-static void on_confirmation_modem_message_send(TcorePending *p, gboolean result, void *user_data)
-{
-       dbg("on_confirmation_modem_message_send - msg out from queue.\n");
-
-       if (result == FALSE) {
-               /* Fail */
-               dbg("SEND FAIL");
-       }
-       else {
-               dbg("SEND OK");
-       }
-}
-
-void prepare_and_send_pending_request(TcorePlugin *plugin, char *co_name, const char *at_cmd, const char* prefix, enum tcore_at_command_type at_cmd_type, TcorePendingResponseCallback callback)
-{
-       TcoreATRequest *req = NULL;
-       TcoreHal *hal;
-       CoreObject *o= NULL;
-       TcorePending *pending = NULL;
-       TReturn ret;
-       
-       o = tcore_plugin_ref_core_object(plugin, co_name);
-       hal = tcore_object_get_hal(o);
-       
-       pending = tcore_pending_new(o, 0);
-       if(!pending)
-               dbg("Pending is NULL");
-       req = tcore_at_request_new(at_cmd, prefix, at_cmd_type);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, callback, NULL);
-       tcore_pending_set_send_callback(pending, on_confirmation_modem_message_send, NULL);
-       tcore_pending_link_user_request(pending, NULL); //set user request to NULL - this is intenal request
-       ret = tcore_hal_send_request(hal, pending);
-       return;
-}
-
-void on_response_bootup_subscription(TcorePending *p, gboolean result, void *user_data)
-{      
-       dbg("enry of on_response_bootup_subscription() - response comes\n");
-
-       if (result == FALSE) {
-               /* Fail */
-               dbg("result ERROR");
-       }
-       else {
-               dbg("result OK");
-       }
-}
-
-void on_response_last_bootup_subscription(TcorePending *p, gboolean result, void *user_data)
-{
-       dbg("enry of on_response_last_bootup_subscription() - final response comes\n");
-
-       if (result == FALSE) {
-               /* Fail */
-               dbg("SEND FAIL");
-       }
-       else {
-               dbg("SEND OK");
-       }
-       
-       dbg("Response for AT+CLIP. Boot-up configration completed for IMC modem. Bring CP to online based on Flightmode status\n");
-       on_event_modem_power(NULL, NULL, tcore_pending_ref_plugin(p));
-}
-
-
-
-static void on_response_power_off(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       CoreObject *o = 0;
-       TcoreHal *h = 0;
-       o = tcore_pending_ref_core_object(p);
-       h = tcore_object_get_hal(o);
-
-       dbg("modem power off");
-
-       tcore_hal_set_power_state(h, FALSE);
-}
-
-static void on_response_set_flight_mode(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       CoreObject *o = user_data;
-       UserRequest *ur = NULL;
-       const TcoreATResponse *resp = data;
-       GSList *tokens=NULL;
-       const char *line;
-       struct tresp_modem_set_flightmode res;
-       GQueue *queue;
-       int err;
-       int response;
-       struct tnoti_modem_flight_mode modem_flight_mode;
-
-       o = tcore_pending_ref_core_object(p);
-
-       
-       if(resp->success > 0){
-               dbg("RESPONSE OK - flight mode operation finished");
-               res.result = TCORE_RETURN_SUCCESS;
-       }
-       else    {
-               dbg("RESPONSE NOK");
-               line = (const char*)resp->final_response;
-               tokens = tcore_at_tok_new(line);
-
-               if (g_slist_length(tokens) < 1) {
-                       dbg("err cause not specified or string corrupted");
-                       res.result = TCORE_RETURN_3GPP_ERROR;
-               }
-               else    {
-                       response = atoi(g_slist_nth_data(tokens, 0));
-                       /* TODO: CMEE error mapping is required. */
-                       res.result = TCORE_RETURN_3GPP_ERROR;
-               }
-       }
-
-       ur = tcore_pending_ref_user_request(p);
-       if(NULL == ur){
-               dbg("No user request ");
-       }
-       else    {
-               tcore_user_request_send_response(ur, TRESP_MODEM_SET_FLIGHTMODE, sizeof(struct tresp_modem_set_flightmode), &res);
-       }
-
-       if(resp->success > 0){  
-               modem_flight_mode.enable = tcore_modem_get_flight_mode_state(o);
-               
-               dbg("sucess case - Sending Flight Mode Notification (%d) to Server",modem_flight_mode.enable);
-               
-               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_MODEM_FLIGHT_MODE,
-                               sizeof(struct tnoti_modem_flight_mode), &modem_flight_mode);
-       }
-       
-       tcore_at_tok_free(tokens);
-}
-
-static void on_response_imei(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse* resp = data;
-       TcorePlugin *plugin;
-       struct tresp_modem_get_imei res;
-       TelMiscSNInformation *imei_property;
-       UserRequest* ur = NULL;
-       GSList *tokens=NULL;
-       const char *line;
-       int response;
-       int err;
-
-       memset(&res, 0, sizeof(struct tresp_modem_get_imei));
-
-       if(resp->success > 0)
-       {
-               dbg("RESPONSE OK");
-               if(resp->lines) {
-                       line = (const char*)resp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       if (g_slist_length(tokens) != 1) {
-                               msg("invalid message");
-                               goto OUT;
-                       }
-               }
-               res.result = TCORE_RETURN_SUCCESS;
-               strncpy(res.imei, g_slist_nth_data(tokens, 0), 16);
-
-               dbg("imei = [%s]", res.imei);
-
-               plugin = tcore_pending_ref_plugin(p);
-               imei_property = tcore_plugin_ref_property(plugin, "IMEI");
-               if (imei_property)
-               {
-                       imei_property->sn_index = TAPI_MISC_ME_IMEI;
-                       imei_property->sn_len = strlen(res.imei);
-                       memcpy(imei_property->szNumber, res.imei, imei_property->sn_len);
-               }
-       }
-       else
-       {
-               dbg("RESPONSE NOK");
-               if(resp->lines) {
-                       line = (const char*)resp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-               }
-
-               memset(&res, 0, sizeof(struct tresp_modem_get_version));
-
-
-               if (g_slist_length(tokens) < 1) {
-                       dbg("err cause not specified or string corrupted");
-                   res.result = TCORE_RETURN_3GPP_ERROR;
-               }
-               else
-               {
-                       response = atoi(g_slist_nth_data(tokens, 0));
-                       /* TODO: CMEE error mapping is required. */
-               res.result = TCORE_RETURN_3GPP_ERROR;
-               }
-       }
-
-       ur = tcore_pending_ref_user_request(p); 
-       tcore_user_request_send_response(ur, TRESP_MODEM_GET_IMEI, sizeof(struct tresp_modem_get_imei), &res);  
-
-OUT:
-       tcore_at_tok_free(tokens);
-
-}
-
-static void on_response_version(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse *resp = data;
-       TcorePlugin *plugin;
-       TelMiscVersionInformation *vi;
-       TelMiscVersionInformation *vi_property;
-       struct tresp_modem_get_version res;
-       UserRequest *ur;
-       GSList* tokens = NULL;
-       const char* line=NULL;
-       char *swver= NULL,*hwver=NULL, *caldate=NULL,*pcode=NULL,*id=NULL;
-
-       int response, err;
-
-       if(resp->success > 0)
-       {
-               dbg("RESPONSE OK");
-               if(resp->lines) {
-                       line = (const char*)resp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       if (g_slist_length(tokens) != 5) {
-                               msg("invalid message");
-                               goto OUT;
-                       }
-               }
-
-               swver = g_slist_nth_data(tokens, 0);
-               hwver = g_slist_nth_data(tokens, 1);
-               caldate = g_slist_nth_data(tokens, 2);
-               pcode = g_slist_nth_data(tokens, 3);
-               id = g_slist_nth_data(tokens, 4);
-
-               dbg("version: sw=[%s], hw=[%s], rf_cal=[%s], product_code=[%s], model_id=[%s]", swver, hwver, caldate, pcode, id);
-
-               vi = calloc(sizeof(TelMiscVersionInformation), 1);
-               if(NULL!=swver)
-                       memcpy(vi->szSwVersion, swver, strlen(swver));
-               if(NULL!=hwver)
-                       memcpy(vi->szHwVersion, hwver, strlen(hwver));
-               if(NULL!=caldate)
-                       memcpy(vi->szRfCalDate, caldate, strlen(caldate));
-               if(NULL!=pcode)
-                       memcpy(vi->szProductCode, pcode,strlen(pcode));
-               if(NULL!=id)
-                       memcpy(vi->szModelId, id, strlen(id));
-
-               memset(&res, 0, sizeof(struct tresp_modem_get_version));
-
-               if(NULL!=swver)         
-                       snprintf(res.software, (AT_VER_LEN >strlen(swver) ?strlen(swver):AT_VER_LEN), "%s", swver);
-               if(NULL!=hwver)
-                       snprintf(res.hardware, (AT_VER_LEN >strlen(hwver) ?strlen(hwver):AT_VER_LEN), "%s", hwver);
-
-               plugin = tcore_pending_ref_plugin(p);
-               vi_property = tcore_plugin_ref_property(plugin, "VERSION");
-               memcpy(vi_property, vi, sizeof(TelMiscVersionInformation));
-       }
-       else
-       {
-               dbg("RESPONSE NOK");
-               if(resp->lines) {
-                       line = (const char*)resp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-               }
-
-               memset(&res, 0, sizeof(struct tresp_modem_get_version));
-
-
-               if (g_slist_length(tokens) < 1) {
-                       dbg("err cause not specified or string corrupted");
-                   res.result = TCORE_RETURN_3GPP_ERROR;
-               }
-               else
-               {
-                       response = atoi(g_slist_nth_data(tokens, 0));
-                       /* TODO: CMEE error mapping is required. */
-               res.result = TCORE_RETURN_3GPP_ERROR;
-               }
-       }
-
-       ur = tcore_pending_ref_user_request(p);
-       tcore_user_request_send_response(ur, TRESP_MODEM_GET_VERSION, sizeof(struct tresp_modem_get_version), &res);
-
-OUT:
-       tcore_at_tok_free(tokens);
-
-}
-
-static gboolean on_event_bootup_sim_status(CoreObject *o, const void *event_info, void *user_data)
-{
-       GSList *tok = NULL;
-       GSList *lines = NULL;
-       int value = -1;
-       char* line = NULL;
-
-       lines = (GSList*)event_info;
-       if (1 != g_slist_length(lines)) {
-               dbg("unsolicited msg but multiple line");
-           goto OUT;
-       }
-       line  = (char*)(lines->data);
-       dbg("on_bootup_event_sim_status notification : %s", line);
-
-       tok = tcore_at_tok_new(line);
-       value = atoi(g_slist_nth_data(tok, 0));
-
-       if(7 == value){
-               dbg("SIM ready. request COPS & remove callback");
-               prepare_and_send_pending_request(tcore_object_ref_plugin(o), "umts_network", "AT+COPS=0", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);
-               return FALSE;
-       }
-
-OUT:
-       return TRUE;
-}
-
-
-
-gboolean on_event_modem_power(TcoreAT *at, const char *line, TcorePlugin *p)
-{
-       CoreObject *o;
-       struct treq_modem_set_flightmode flight_mode_set;
-       struct tnoti_modem_power modem_power;
-       TcoreHal *h;
-       Storage *strg;
-       
-       o = tcore_plugin_ref_core_object(p, "modem");
-       
-       strg = tcore_server_find_storage(tcore_plugin_ref_server(p), "vconf");
-       flight_mode_set.enable = tcore_storage_get_bool(strg, STORAGE_KEY_SETAPPL_FLIGHT_MODE_BOOL);
-
-       tcore_hal_set_power_state(h, TRUE);
-       
-       /* Set Flight mode as per AP settings */
-       if (flight_mode_set.enable)
-       { /* Radio Off */
-               prepare_and_send_pending_request(p, "modem", "AT+CFUN=4", NULL, TCORE_AT_NO_RESULT, on_response_set_flight_mode);
-               tcore_modem_set_flight_mode_state(o, TRUE);
-       }
-       else
-       {/* Radio On */
-               prepare_and_send_pending_request(p, "modem", "AT+CFUN=1", NULL, TCORE_AT_NO_RESULT, on_response_set_flight_mode);
-               tcore_modem_set_flight_mode_state(o, FALSE);
-       }
-               
-       /* Get IMEI */
-       prepare_and_send_pending_request(p, "modem", "AT+CGSN", NULL, TCORE_AT_NUMERIC, on_response_imei);
-
-       /* Get Version Number  */
-       prepare_and_send_pending_request(p, "modem", "AT+CGMR", NULL, TCORE_AT_SINGLELINE, on_response_version);
-       
-       tcore_modem_set_powered(o, TRUE);
-
-       modem_power.state = MODEM_STATE_ONLINE;
-
-       tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_MODEM_POWER,
-                       sizeof(struct tnoti_modem_power), &modem_power);
-
-       return TRUE;
-}
-
-
-#ifdef ENABLE_CMUX
-
-static void on_response_setupmux(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       TcorePlugin *plugin = NULL;
-       
-       plugin = tcore_pending_ref_plugin(p);
-       
-       /* TODO: Initialize MUX module.
-        *       Append each MUX HAL to each Co-Object while initialization.
-        * API: tcore_object_set_hal(CoreObject *o, TcoreHal *h)
-        *
-        * After MUX setup, AT parse functionality of PHY HAL
-        * should be disabled.
-        * e.g.) plugin = tcore_pending_ref_plugin((TcorePending*) p);
-        *       hal    = tcore_plugin_ref_hal((TcorePlugin*) plugin);
-        *       tcore_hal_disable_queue((TcoreHal*) hal);
-        */
-
-       /* TODO: Should be moved to ...
-        * Proceed power up noti process after MUX initialization.
-        */
-       s_modem_send_poweron(NULL, NULL, plugin);
-}
-
-
-
-static void setup_mux(CoreObject *o)
-{
-       TcoreHal* hal;
-       TcoreATRequest *req;
-       TcorePending *pending = NULL;
-
-
-       prepare_and_send_pending_request(p, "modem", "AT+CMUX=0,0,,1509,10,3,30,,", +CMUX, TCORE_AT_NO_RESULT, on_response_set_flight_mode);
-
-       /* HAL has type itself,
-        * e.g.) TCORE_HAL_MODE_AT
-        */
-       hal = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-
-       /* Set Metainfo into TcorePending directly
-        * using TcoreATRequest
-        * command type: e.g.) SINGLELINE
-        * response prefix
-        */
-       req = tcore_at_request_new("AT+CMUX=0,0,,1509,10,3,30,,", "+CMUX", TCORE_AT_NO_RESULT);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, on_response_setupmux, hal);
-       tcore_pending_set_send_callback(pending, on_confirmation_modem_message_send, NULL);
-
-       tcore_hal_send_request(hal, pending);
-}
-
-#endif
-       
-static void on_response_enable_logging(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse *resp = data;
-       TcorePlugin *plugin = NULL;
-       
-       plugin = tcore_pending_ref_plugin(p);
-       
-       /* DELETE ME: only for DEBUG */
-       if (!resp)
-               dbg("no data");
-
-       dbg("response...(result = %d, final_response = '%s')", resp->success, resp->final_response);
-
-       if(resp->success){
-               dbg("RESPONSE OK");
-               dbg("Enabling CP logging is success !!!\n");
-
-       }else {
-               dbg("RESPONSE NOK");
-               dbg("Enabling CP logging is failed !!!\n");
-       }
-
-
-#ifdef ENABLE_CMUX
-       dbg("call setup_mux");
-       prepare_and_send_pending_request(plugin, "modem", "AT+CMUX=0,0,,1509,10,3,30,,", +CMUX, TCORE_AT_NO_RESULT, on_response_setupmux);
-       /*setup_mux(tcore_pending_ref_core_object(p));*/
-#else
-
-       /* XCALLSTAT subscription */
-       prepare_and_send_pending_request(plugin, "call", "at+xcallstat=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);
-
-       /* XSIMSTATE subscription */
-       prepare_and_send_pending_request(plugin, "sim", "at+xsimstate=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);
-       
-       /* CREG subscription */
-       prepare_and_send_pending_request(plugin, "umts_network", "at+creg=2", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);
-
-       /* CGREG subscription */
-       prepare_and_send_pending_request(plugin, "umts_network", "at+cgreg=2", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);
-
-       /* XMER subscription */
-       prepare_and_send_pending_request(plugin, "umts_network", "at+xmer=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);
-
-       /* CGEREP subscription */
-       prepare_and_send_pending_request(plugin, "umts_ps", "at+cgerep=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);
-
-       /* XDATASTAT subscription */
-       prepare_and_send_pending_request(plugin, "umts_ps", "at+xdatastat=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);
-
-       /* CMGF subscription */
-       prepare_and_send_pending_request(plugin, "umts_sms", "at+cmgf=0", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);
-
-       /* CSSN subscription */
-       prepare_and_send_pending_request(plugin, "call", "at+cssn=1,1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);
-
-       /* CUSD subscription */
-       prepare_and_send_pending_request(plugin, "call", "at+cusd=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);
-
-       /* XDNS subscription */
-       prepare_and_send_pending_request(plugin, "umts_ps", "at+xdns=1,1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);
-
-       /* CLIP subscription */
-       prepare_and_send_pending_request(plugin, "call", "at+clip=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);
-
-       /*CMEE subscription*/
-       prepare_and_send_pending_request(plugin,"umts_ps","at+cmee=2",NULL,TCORE_AT_NO_RESULT, on_response_bootup_subscription);
-
-
-       /*incoming sms and cb subscription*/
-       prepare_and_send_pending_request(plugin,"umts_sms","at+cnmi=1,2,2,2,0",NULL,TCORE_AT_NO_RESULT, on_response_bootup_subscription);
-
-       /*message service subscription*/
-       prepare_and_send_pending_request(plugin,"umts_sms","at+csms=1",NULL,TCORE_AT_NO_RESULT, on_response_bootup_subscription);
-
-       /* text/pdu mode subscription*/
-       prepare_and_send_pending_request(plugin,"umts_sms","at+cmgf=0",NULL,TCORE_AT_NO_RESULT, on_response_last_bootup_subscription);
-#if 0
-       /* Check for SIM PIN status */
-       prepare_and_send_pending_request(plugin, "sim", "at+cpin?", on_response_bootup_subscription);
-#endif
-       
-#endif
-}
-
-static void _send_enable_logging_command(CoreObject *o)
-{
-       TcoreATRequest *req;
-       TcoreHal *hal;
-       TcorePending *pending;
-       TReturn ret;
-       /* DLELTE ME */
-       dbg("Send Trace enabling command for CP logging. \n");
-
-       if(!o){
-               dbg("Co-object is Null !!\n");
-               //goto error;
-       }
-
-       hal = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-       req = tcore_at_request_new("at+xsystrace=1,\"digrf=1;bb_sw=1;3g_sw=1\",\"digrf=0x84\",\"oct=4\";+xsystrace=11;+trace=1", NULL, TCORE_AT_NO_RESULT);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, on_response_enable_logging, hal);
-       tcore_pending_set_send_callback(pending, on_confirmation_modem_message_send, NULL);
-
-       ret = tcore_hal_send_request(hal, pending);
-       if(ret != TCORE_RETURN_SUCCESS)
-               dbg("tcore_hal_send_request fail !!! (hal: 0x%x, pending: 0x%x)\n", hal, pending);
-
-}
-
-static void on_response_poweron(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse *resp = data;
-       GSList*tokens=NULL;
-       const char *line=NULL;
-       gboolean bpoweron = FALSE;
-       int response = 0;
-       int err;
-       
-       if(resp->success){
-               dbg("RESPONSE OK");
-               /* Parse AT Response */
-               if (resp->lines) {
-                       line = (const char *)resp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       if (g_slist_length(tokens) != 1) {
-                               dbg("invalid message");
-                               bpoweron = FALSE;
-                               goto error;
-                       }
-               }
-
-               response = atoi(g_slist_nth_data(tokens, 0));
-
-               dbg("CPAS: response %d",response);
-
-               switch(response)
-               {
-                       case CPAS_RES_READY:
-                       case CPAS_RES_RINGING:
-                       case CPAS_RES_CALL_PROGRESS:
-                       case CPAS_RES_ASLEEP:
-                               bpoweron = TRUE;
-                       break;
-
-                       case CPAS_RES_UNAVAIL:
-                       case CPAS_RES_UNKNOWN:
-                       default:
-                               dbg("unvail/unknown,but response received - CP can communicate - proceed bootup");
-                               //bpoweron = FALSE;
-                               bpoweron = TRUE;
-                       break;
-               }
-       }else{
-               dbg("CPAS: RESPONSE NOK");
-               bpoweron = FALSE;
-       }
-
-error:
-       /* DELE ME: AT request & response are freed after AT processing in HAL.
-        * ref.) _emit_pending_response (libtcore/src/at.c)
-        */
-        tcore_at_tok_free(tokens);
-
-       if(bpoweron == TRUE){
-               dbg("Power on NOTI received, (pending: 0x%x, co: 0x%x)\n", p, tcore_pending_ref_core_object(p));
-
-               _send_enable_logging_command(tcore_pending_ref_core_object(p));
-       }
-       else{
-               dbg("CP is not ready, send CPAS once again");
-               s_modem_send_poweron(tcore_object_ref_plugin(tcore_pending_ref_core_object(p)));
-       }
-}
-
-static TReturn power_on(CoreObject *o, UserRequest *ur)
-{
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn power_off(CoreObject *o, UserRequest *ur)
-{
-       TcoreHal* hal;
-       TcoreATRequest *req;
-       TcorePending *pending = NULL;
-
-       /* FIXME: Before MUX setup, use PHY HAL directly. */
-       hal = tcore_object_get_hal(o);
-
-       pending = tcore_pending_new(o, 0);
-
-       /* TODO:
-        * Need to mapping or define AT command
-        * including prefix if neccessary otherwise NULL.
-        * Response type (e.g. TCORE_AT_SINGLELINE)
-        */
-       req = tcore_at_request_new("AT+CFUN=0", NULL, TCORE_AT_NO_RESULT);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, on_response_power_off, hal);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_modem_message_send, NULL);
-
-       tcore_hal_send_request(hal, pending);
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn power_reset(CoreObject *o, UserRequest *ur)
-{
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn get_imei(CoreObject *o, UserRequest *ur)
-{
-       TcoreHal* hal;
-       TcoreATRequest *req;
-       TcorePending *pending = NULL;
-
-       hal = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-
-       req = tcore_at_request_new("AT+CGSN", NULL, TCORE_AT_NUMERIC);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, on_response_imei, hal);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_modem_message_send, NULL);
-
-       tcore_hal_send_request(hal, pending);
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-
-static TReturn get_version(CoreObject *o, UserRequest *ur)
-{
-       TcoreHal* hal;
-       TcoreATRequest *req;
-       TcorePending *pending = NULL;
-
-       hal = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-
-       req = tcore_at_request_new("AT+CGMR", NULL, TCORE_AT_SINGLELINE);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, on_response_version, hal);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_modem_message_send, NULL);
-
-       tcore_hal_send_request(hal, pending);
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn set_flight_mode(CoreObject *o, UserRequest *ur)
-{
-       TcoreHal* hal;
-       TcoreATRequest *req;
-       TcorePending *pending = NULL;
-       const struct treq_modem_set_flightmode *req_data;
-       char* cmd_str = NULL;
-
-       hal = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-
-       req_data = tcore_user_request_ref_data(ur, NULL);
-
-       if (req_data->enable) {
-               dbg("Flight mode on/n");
-               cmd_str = g_strdup("AT+CFUN=4\r");
-       }
-       else {
-               dbg("Flight mode off/n");
-               cmd_str = g_strdup("AT+CFUN=1\r");
-       }
-
-       req = tcore_at_request_new((const char*)cmd_str, NULL, TCORE_AT_NO_RESULT);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, on_response_set_flight_mode, hal);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_modem_message_send, NULL);
-
-       tcore_hal_send_request(hal, pending);
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-
-static struct tcore_modem_operations modem_ops =
-{
-       .power_on = power_on,
-       .power_off = power_off,
-       .power_reset = power_reset,
-       .set_flight_mode = set_flight_mode,
-       .get_imei = get_imei,
-       .get_version = get_version,
-       .get_sn = NULL,
-       .dun_pin_ctrl = NULL,
-};
-
-gboolean s_modem_init(TcorePlugin *p, TcoreHal *h)
-{
-       CoreObject *o;
-       GQueue *work_queue;
-       TelMiscVersionInformation *vi_property;
-       TelMiscSNInformation *imei_property;
-       TelMiscSNInformation *sn_property;
-
-       o = tcore_modem_new(p, "modem", &modem_ops, h);
-       if (!o)
-               return FALSE;
-
-       work_queue = g_queue_new();
-       tcore_object_link_user_data(o, work_queue);
-
-       vi_property = calloc(sizeof(TelMiscVersionInformation), 1);
-       tcore_plugin_link_property(p, "VERSION", vi_property);
-
-       imei_property = calloc(sizeof(TelMiscSNInformation), 1);
-       tcore_plugin_link_property(p, "IMEI", imei_property);
-
-       sn_property = calloc(sizeof(TelMiscSNInformation), 1);
-       tcore_plugin_link_property(p, "SN", sn_property);
-
-       tcore_object_add_callback(o, "+XSIM", on_event_bootup_sim_status, NULL);
-       return TRUE;
-}
-
-void s_modem_exit(TcorePlugin *p)
-{
-       CoreObject *o;
-       GQueue *work_queue;
-       TelMiscVersionInformation *vi_property;
-       TelMiscSNInformation *imei_property;
-       TelMiscSNInformation *sn_property;
-
-       if (!p)
-               return;
-
-       o = tcore_plugin_ref_core_object(p, "modem");
-
-       work_queue = tcore_object_ref_user_data(o);
-       g_queue_free(work_queue);
-
-       vi_property = tcore_plugin_ref_property(p, "VERSION");
-       if (vi_property)
-               free(vi_property);
-
-       imei_property = tcore_plugin_ref_property(p, "IMEI");
-       if (imei_property)
-               free(imei_property);
-
-       sn_property = tcore_plugin_ref_property(p, "SN");
-       if (sn_property)
-               free(sn_property);
-
-       tcore_modem_free(o);
-}
-
-gboolean s_modem_send_poweron(TcorePlugin *p)
-{
-       TcoreHal* hal;
-       TcoreATRequest *req;
-       TcorePending *pending = NULL;
-       CoreObject *o;
-
-       o = tcore_plugin_ref_core_object(p, "modem");
-       hal = tcore_object_get_hal(o);
-       /* HAL has type itself,
-        * e.g.) TCORE_HAL_MODE_AT
-        */
-       pending = tcore_pending_new(o, 0);
-
-       /* Set Metainfo into TcorePending directly
-        * using TcoreATRequest
-        * command type: e.g.) SINGLELINE
-        * response prefix
-        */
-
-       req = tcore_at_request_new("AT+CPAS", "+CPAS", TCORE_AT_SINGLELINE);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_timeout(pending, 10);
-       tcore_pending_set_priority(pending, TCORE_PENDING_PRIORITY_DEFAULT);    
-       tcore_pending_set_timeout_callback(pending, on_timeout_modem_poweron, hal);
-       
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, on_response_poweron, hal);
-       tcore_pending_set_send_callback(pending, on_confirmation_modem_message_send, NULL);
-
-       tcore_hal_send_request(hal, pending);
-
-       return TRUE;
-}
+/*\r
+ * tel-plugin-imc\r
+ *\r
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: Hayoon Ko <hayoon.ko@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include <unistd.h>\r
+\r
+#include <glib.h>\r
+\r
+#include <tcore.h>\r
+#include <hal.h>\r
+#include <core_object.h>\r
+#include <plugin.h>\r
+#include <queue.h>\r
+#include <co_modem.h>\r
+#include <storage.h>\r
+#include <server.h>\r
+#include <at.h>\r
+#ifdef ENABLE_CMUX\r
+#include <mux.h>\r
+#endif\r
+\r
+#include "s_common.h"\r
+#include "s_modem.h"\r
+\r
+#define ID_RESERVED_AT 0x0229\r
+\r
+#define MAX_VERSION_LEN        32\r
+#define TAPI_MISC_ME_SN_LEN_MAX                                32\r
+#define TAPI_MISC_PRODUCT_CODE_LEN_MAX         32\r
+#define TAPI_MISC_MODEL_ID_LEN_MAX                     17\r
+#define TAPI_MISC_PRL_ERI_VER_LEN_MAX          17\r
+\r
+#define CPAS_RES_READY                 0\r
+#define CPAS_RES_UNAVAIL               1\r
+#define CPAS_RES_UNKNOWN               2\r
+#define CPAS_RES_RINGING               3\r
+#define CPAS_RES_CALL_PROGRESS 4\r
+#define CPAS_RES_ASLEEP           5\r
+#define AT_VER_LEN 20\r
+\r
+\r
+enum cp_state {\r
+       CP_STATE_OFFLINE,\r
+       CP_STATE_CRASH_RESET,\r
+       CP_STATE_CRASH_EXIT,\r
+       CP_STATE_BOOTING,\r
+       CP_STATE_ONLINE,\r
+       CP_STATE_NV_REBUILDING,\r
+       CP_STATE_LOADER_DONE,\r
+};\r
+\r
+typedef enum {\r
+       TAPI_MISC_ME_IMEI = 0x00, /**< 0x00: IMEI, GSM/UMTS device */\r
+       TAPI_MISC_ME_ESN = 0x01, /**< 0x01: ESN(Electronic Serial Number), It`s essentially run out. CDMA device */\r
+       TAPI_MISC_ME_MEID = 0x02, /**< 0x02: MEID, This value can have hexa decimal digits. CDMA device */\r
+       TAPI_MISC_ME_MAX = 0xff /**< 0xff: reserved */\r
+} TelMiscSNIndexType_t;\r
+\r
+typedef struct {\r
+       TelMiscSNIndexType_t sn_index; /**< serial number index */\r
+       int sn_len; /**< Length */\r
+       unsigned char szNumber[TAPI_MISC_ME_SN_LEN_MAX]; /**< Number */\r
+} TelMiscSNInformation;\r
+\r
+/**\r
+ * Mobile Equipment Version Information\r
+ */\r
+typedef struct {\r
+       unsigned char ver_mask; /**< version mask  - 0x01:SW_ver, 0x02:HW_ver, 0x04:RF_CAL_date, 0x08:Product_code, 0x10:Model_ID, 0x20:PRL, 0x04:ERI, 0xff:all */\r
+       unsigned char szSwVersion[MAX_VERSION_LEN]; /**< Software version, null termination */\r
+       unsigned char szHwVersion[MAX_VERSION_LEN]; /**< Hardware version, null termination */\r
+       unsigned char szRfCalDate[MAX_VERSION_LEN]; /**< Calculation Date, null termination */\r
+       unsigned char szProductCode[TAPI_MISC_PRODUCT_CODE_LEN_MAX]; /**< product code, null termination */\r
+       unsigned char szModelId[TAPI_MISC_MODEL_ID_LEN_MAX]; /**< model id (only for CDMA), null termination */\r
+       unsigned char prl_nam_num; /**< number of PRL NAM fields */\r
+       unsigned char szPrlVersion[TAPI_MISC_PRL_ERI_VER_LEN_MAX * 3];/**< prl version (only for CDMA), null termination */\r
+       unsigned char eri_nam_num; /**< number of PRL NAM fields */\r
+       unsigned char szEriVersion[TAPI_MISC_PRL_ERI_VER_LEN_MAX * 3];/**< eri version (only for CDMA), null termination */\r
+} TelMiscVersionInformation;\r
+\r
+\r
+void prepare_and_send_pending_request(TcorePlugin *plugin, char *co_name, const char *at_cmd, const char* prefix, enum tcore_at_command_type at_cmd_type, TcorePendingResponseCallback callback);\r
+static void on_confirmation_modem_message_send(TcorePending *p, gboolean result, void *user_data); // from Kernel\r
+void on_response_bootup_subscription(TcorePending *p, int data_len, const void *data, void *user_data);\r
+void on_response_last_bootup_subscription(TcorePending *p, int data_len, const void *data, void *user_data);\r
+static void on_timeout_modem_poweron(TcorePending *p, void *user_data);\r
+static void on_response_enable_proactive_command(TcorePending *p, int data_len, const void *data, void *user_data);\r
+\r
+static void on_timeout_modem_poweron(TcorePending *p, void *user_data)\r
+{\r
+       unsigned int data_len = 0;\r
+       char data[] = "AT+CPAS";                        \r
+       dbg("TIMEOUT for 1st AT Command !!!!! NO Response for initial AT command. Resending it");       \r
+       data_len = sizeof(data);\r
+       \r
+       /* Retransmit 1st AT command directly via HAL, don't disturb pending queue. */\r
+       /* HAL was passed as user_data, re-use it */\r
+       if (user_data) \r
+       {\r
+               tcore_hal_send_data(user_data, data_len, (void *)data); \r
+       }\r
+}\r
+\r
+static void on_confirmation_modem_message_send(TcorePending *p, gboolean result, void *user_data)\r
+{\r
+       dbg("on_confirmation_modem_message_send - msg out from queue.\n");\r
+\r
+       if (result == FALSE) {\r
+               /* Fail */\r
+               dbg("SEND FAIL");\r
+       }\r
+       else {\r
+               dbg("SEND OK");\r
+       }\r
+}\r
+\r
+static void on_response_enable_proactive_command(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *resp = data;\r
+       \r
+       if(resp->success > 0){\r
+               dbg("RESPONSE OK proactive command enabled");\r
+               \r
+       }\r
+       else    {\r
+               dbg("RESPONSE NOK proactive command disabled");\r
+       }\r
+}\r
+\r
+void prepare_and_send_pending_request(TcorePlugin *plugin, char *co_name, const char *at_cmd, const char* prefix, enum tcore_at_command_type at_cmd_type, TcorePendingResponseCallback callback)\r
+{\r
+       TcoreATRequest *req = NULL;\r
+       TcoreHal *hal = NULL;\r
+       CoreObject *o= NULL;\r
+       TcorePending *pending = NULL;\r
+       TReturn ret;\r
+       \r
+       o = tcore_plugin_ref_core_object(plugin, co_name);\r
+       hal = tcore_object_get_hal(o);\r
+       dbg("hal: %p", hal);\r
+       \r
+       pending = tcore_pending_new(o, 0);\r
+       if(!pending)\r
+               dbg("Pending is NULL");\r
+       req = tcore_at_request_new(at_cmd, prefix, at_cmd_type);\r
+\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       tcore_pending_set_response_callback(pending, callback, NULL);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_modem_message_send, NULL);\r
+       tcore_pending_link_user_request(pending, NULL); //set user request to NULL - this is intenal request\r
+       ret = tcore_hal_send_request(hal, pending);\r
+       return;\r
+}\r
+\r
+void on_response_bootup_subscription(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *resp = data;\r
+       dbg("enry of on_response_bootup_subscription() - response comes\n");\r
+\r
+       if(resp->success){\r
+               dbg("result OK");       \r
+       }\r
+       else{\r
+               dbg("result ERROR");\r
+       }\r
+}\r
+\r
+void on_response_last_bootup_subscription(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *resp = data;\r
+       dbg("enry of on_response_last_bootup_subscription() - final response comes\n");\r
+       if(resp->success){\r
+               dbg("SEND OK"); \r
+       }\r
+       else{\r
+               dbg("SEND FAIL");\r
+       }\r
+       dbg("Response for AT+CLIP. Boot-up configration completed for IMC modem. Bring CP to online based on Flightmode status\n");\r
+       on_event_modem_power(NULL, NULL, tcore_pending_ref_plugin(p));\r
+}\r
+\r
+static void on_response_power_off(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       CoreObject *o = 0;\r
+       TcoreHal *h = 0;\r
+       o = tcore_pending_ref_core_object(p);\r
+       h = tcore_object_get_hal(o);\r
+\r
+       dbg("modem power off");\r
+\r
+       tcore_hal_set_power_state(h, FALSE);\r
+}\r
+\r
+static void on_response_set_flight_mode(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       CoreObject *o = user_data;\r
+       UserRequest *ur = NULL;\r
+       const TcoreATResponse *resp = data;\r
+       GSList *tokens=NULL;\r
+       const char *line = NULL;\r
+       struct tresp_modem_set_flightmode res = {0};\r
+       int response = 0;\r
+       struct tnoti_modem_flight_mode modem_flight_mode = {0};\r
+\r
+       o = tcore_pending_ref_core_object(p);\r
+\r
+       if(resp->success > 0){\r
+               dbg("RESPONSE OK - flight mode operation finished");\r
+               res.result = TCORE_RETURN_SUCCESS;\r
+       }\r
+       else    {\r
+               dbg("RESPONSE NOK");\r
+               line = (const char*)resp->final_response;\r
+               tokens = tcore_at_tok_new(line);\r
+\r
+               if (g_slist_length(tokens) < 1) {\r
+                       dbg("err cause not specified or string corrupted");\r
+                       res.result = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               else    {\r
+                       response = atoi(g_slist_nth_data(tokens, 0));\r
+                       /* TODO: CMEE error mapping is required. */\r
+                       res.result = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+       }\r
+\r
+       ur = tcore_pending_ref_user_request(p);\r
+       if(NULL == ur){\r
+               dbg("No user request. Internal request created during boot-up sequence");\r
+               \r
+               if(resp->success > 0){\r
+                       modem_flight_mode.enable = tcore_modem_get_flight_mode_state(o);\r
+                       dbg("sucess case - Sending Flight Mode Notification (%d) to Telephony Server",modem_flight_mode.enable);\r
+                       \r
+                       tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_MODEM_FLIGHT_MODE,\r
+                                       sizeof(struct tnoti_modem_flight_mode), &modem_flight_mode);\r
+               }\r
+       }\r
+       \r
+       tcore_at_tok_free(tokens);\r
+}\r
+\r
+static void on_response_imei(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse* resp = data;\r
+       TcorePlugin *plugin = NULL;\r
+       struct tresp_modem_get_imei res;\r
+       TelMiscSNInformation *imei_property = NULL;\r
+       UserRequest* ur = NULL;\r
+       GSList *tokens=NULL;\r
+       const char *line;\r
+       int response = 0;\r
+\r
+       memset(&res, 0, sizeof(struct tresp_modem_get_imei));\r
+\r
+       if(resp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               if(resp->lines) {\r
+                       line = (const char*)resp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       if (g_slist_length(tokens) != 1) {\r
+                               msg("invalid message");\r
+                               goto OUT;\r
+                       }\r
+               }\r
+               res.result = TCORE_RETURN_SUCCESS;\r
+               strncpy(res.imei, g_slist_nth_data(tokens, 0), 16);\r
+\r
+               dbg("imei = [%s]", res.imei);\r
+\r
+               plugin = tcore_pending_ref_plugin(p);\r
+               imei_property = tcore_plugin_ref_property(plugin, "IMEI");\r
+               if (imei_property)\r
+               {\r
+                       imei_property->sn_index = TAPI_MISC_ME_IMEI;\r
+                       imei_property->sn_len = strlen(res.imei);\r
+                       memcpy(imei_property->szNumber, res.imei, imei_property->sn_len);\r
+               }\r
+       }\r
+       else\r
+       {\r
+               dbg("RESPONSE NOK");\r
+               if(resp->lines) {\r
+                       line = (const char*)resp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+               }\r
+\r
+               \r
+               if (g_slist_length(tokens) < 1) {\r
+                       dbg("err cause not specified or string corrupted");\r
+                       res.result = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               else\r
+               {\r
+                       response = atoi(g_slist_nth_data(tokens, 0));\r
+                       /* TODO: CMEE error mapping is required. */\r
+                       res.result = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+       }\r
+\r
+       ur = tcore_pending_ref_user_request(p); \r
+       tcore_user_request_send_response(ur, TRESP_MODEM_GET_IMEI, sizeof(struct tresp_modem_get_imei), &res);  \r
+\r
+OUT:\r
+       if(tokens != NULL)\r
+               tcore_at_tok_free(tokens);\r
+\r
+       return;\r
+}\r
+\r
+static void on_response_version(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *resp = data;\r
+       TcorePlugin *plugin = NULL;\r
+       struct tresp_modem_get_version res = {0};\r
+       TelMiscVersionInformation *vi_property = NULL;\r
+       TelMiscVersionInformation *vi = NULL;\r
+       UserRequest *ur = NULL;\r
+       GSList* tokens = NULL;\r
+       const char* line=NULL;\r
+       char *swver= NULL;\r
+       char *hwver=NULL; \r
+       char *caldate=NULL;\r
+       char *pcode=NULL;\r
+       char *id=NULL;\r
+\r
+       int response = 0;\r
+\r
+       if(resp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               if(resp->lines) {\r
+                       line = (const char*)resp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       if (g_slist_length(tokens) != 5) {\r
+                               msg("invalid message");\r
+                               goto OUT;\r
+                       }\r
+               }\r
+\r
+               swver = g_slist_nth_data(tokens, 0);\r
+               hwver = g_slist_nth_data(tokens, 1);\r
+               caldate = g_slist_nth_data(tokens, 2);\r
+               pcode = g_slist_nth_data(tokens, 3);\r
+               id = g_slist_nth_data(tokens, 4);\r
+\r
+               dbg("version: sw=[%s], hw=[%s], rf_cal=[%s], product_code=[%s], model_id=[%s]", swver, hwver, caldate, pcode, id);\r
+\r
+               vi = calloc(sizeof(TelMiscVersionInformation), 1);\r
+               if(NULL!=swver)\r
+                       memcpy(vi->szSwVersion, swver, strlen(swver));\r
+               if(NULL!=hwver)\r
+                       memcpy(vi->szHwVersion, hwver, strlen(hwver));\r
+               if(NULL!=caldate)\r
+                       memcpy(vi->szRfCalDate, caldate, strlen(caldate));\r
+               if(NULL!=pcode)\r
+                       memcpy(vi->szProductCode, pcode,strlen(pcode));\r
+               if(NULL!=id)\r
+                       memcpy(vi->szModelId, id, strlen(id));\r
+\r
+               memset(&res, 0, sizeof(struct tresp_modem_get_version));\r
+\r
+               if(NULL!=swver)         \r
+                       snprintf(res.software, (AT_VER_LEN >strlen(swver) ?strlen(swver):AT_VER_LEN), "%s", swver);\r
+               if(NULL!=hwver)\r
+                       snprintf(res.hardware, (AT_VER_LEN >strlen(hwver) ?strlen(hwver):AT_VER_LEN), "%s", hwver);\r
+\r
+               plugin = tcore_pending_ref_plugin(p);\r
+               vi_property = tcore_plugin_ref_property(plugin, "VERSION");\r
+               memcpy(vi_property, vi, sizeof(TelMiscVersionInformation));\r
+               free(vi);\r
+       }\r
+       else\r
+       {\r
+               dbg("RESPONSE NOK");\r
+               if(resp->lines) {\r
+                       line = (const char*)resp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+               }\r
+\r
+               memset(&res, 0, sizeof(struct tresp_modem_get_version));\r
+\r
+\r
+               if (g_slist_length(tokens) < 1) {\r
+                       dbg("err cause not specified or string corrupted");\r
+                   res.result = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               else\r
+               {\r
+                       response = atoi(g_slist_nth_data(tokens, 0));\r
+                       /* TODO: CMEE error mapping is required. */\r
+               res.result = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+       }\r
+\r
+       ur = tcore_pending_ref_user_request(p);\r
+       tcore_user_request_send_response(ur, TRESP_MODEM_GET_VERSION, sizeof(struct tresp_modem_get_version), &res);\r
+\r
+OUT:\r
+       if(tokens != NULL)\r
+               tcore_at_tok_free(tokens);\r
+\r
+       return; \r
+}\r
+\r
+static gboolean on_event_bootup_sim_status(CoreObject *o, const void *event_info, void *user_data)\r
+{\r
+       GSList *tok = NULL;\r
+       GSList *lines = NULL;\r
+       int value = -1;\r
+       char* line = NULL;\r
+\r
+       lines = (GSList*)event_info;\r
+       if (1 != g_slist_length(lines)) {\r
+               dbg("unsolicited msg but multiple line");\r
+           goto OUT;\r
+       }\r
+       line  = (char*)(lines->data);\r
+       dbg("on_bootup_event_sim_status notification : %s", line);\r
+\r
+       tok = tcore_at_tok_new(line);\r
+       value = atoi(g_slist_nth_data(tok, 0));\r
+\r
+       if(7 == value){\r
+               dbg("SIM ready. request COPS & remove callback");\r
+               dbg("power on done set for proactive command receiving mode");\r
+               prepare_and_send_pending_request(tcore_object_ref_plugin(o), "sat", "AT+CFUN=6", NULL, TCORE_AT_NO_RESULT, on_response_enable_proactive_command);\r
+               prepare_and_send_pending_request(tcore_object_ref_plugin(o), "umts_network", "AT+COPS=0", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+               return FALSE;\r
+       }\r
+\r
+OUT:\r
+       if (tok != NULL)\r
+               tcore_at_tok_free(tok);\r
+       \r
+       return TRUE;\r
+}\r
+\r
+\r
+\r
+gboolean on_event_modem_power(TcoreAT *at, const char *line, TcorePlugin *p)\r
+{\r
+       CoreObject *o = NULL;\r
+       struct treq_modem_set_flightmode flight_mode_set = {0};\r
+       struct tnoti_modem_power modem_power = {0};\r
+       TcoreHal *h = NULL;\r
+       Storage *strg = NULL; \r
+       \r
+       o = tcore_plugin_ref_core_object(p, "modem");\r
+       \r
+       strg = tcore_server_find_storage(tcore_plugin_ref_server(p), "vconf");\r
+       flight_mode_set.enable = tcore_storage_get_bool(strg, STORAGE_KEY_SETAPPL_FLIGHT_MODE_BOOL);\r
+\r
+       h = tcore_object_get_hal(o);\r
+       tcore_hal_set_power_state(h, TRUE);\r
+       \r
+       /* Set Flight mode as per AP settings */\r
+       if (flight_mode_set.enable)\r
+       { /* Radio Off */\r
+               prepare_and_send_pending_request(p, "modem", "AT+CFUN=4", NULL, TCORE_AT_NO_RESULT, on_response_set_flight_mode);\r
+               tcore_modem_set_flight_mode_state(o, TRUE);\r
+       }\r
+       else\r
+       {/* Radio On */\r
+               prepare_and_send_pending_request(p, "modem", "AT+CFUN=1", NULL, TCORE_AT_NO_RESULT, on_response_set_flight_mode);\r
+               tcore_modem_set_flight_mode_state(o, FALSE);\r
+       }\r
+               \r
+       /* Get IMEI */\r
+       prepare_and_send_pending_request(p, "modem", "AT+CGSN", NULL, TCORE_AT_NUMERIC, on_response_imei);\r
+\r
+       /* Get Version Number  */\r
+       prepare_and_send_pending_request(p, "modem", "AT+CGMR", NULL, TCORE_AT_SINGLELINE, on_response_version);\r
+       \r
+       tcore_modem_set_powered(o, TRUE);\r
+\r
+       modem_power.state = MODEM_STATE_ONLINE;\r
+\r
+       tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_MODEM_POWER,\r
+                       sizeof(struct tnoti_modem_power), &modem_power);\r
+\r
+       return TRUE;\r
+}\r
+\r
+static void _modem_subscribe_events(TcorePlugin *plugin)\r
+{\r
+       dbg("Entry");\r
+       \r
+       /* XCALLSTAT subscription */\r
+       prepare_and_send_pending_request(plugin, "call", "at+xcallstat=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+\r
+       /* XSIMSTATE subscription */\r
+       prepare_and_send_pending_request(plugin, "sim", "at+xsimstate=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+       prepare_and_send_pending_request(plugin, "umts_sms", "at+xsimstate=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+       prepare_and_send_pending_request(plugin, "modem", "at+xsimstate=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+\r
+       /* CREG subscription */\r
+       prepare_and_send_pending_request(plugin, "umts_network", "at+creg=2", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+\r
+       /* CGREG subscription */\r
+       prepare_and_send_pending_request(plugin, "umts_network", "at+cgreg=2", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+       prepare_and_send_pending_request(plugin, "umts_ps", "at+cgreg=2", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+\r
+       /* Allow automatic time Zone updation via NITZ */\r
+       prepare_and_send_pending_request(plugin, "umts_network", "at+ctzu=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+\r
+       /* TZ, time & daylight changing event reporting subscription */\r
+       prepare_and_send_pending_request(plugin, "umts_network", "at+ctzr=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+       \r
+       /* XMER subscription */\r
+       prepare_and_send_pending_request(plugin, "umts_network", "at+xmer=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+       \r
+       /* CGEREP subscription */\r
+       prepare_and_send_pending_request(plugin, "umts_ps", "at+cgerep=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+\r
+       /* XDATASTAT subscription */\r
+       prepare_and_send_pending_request(plugin, "umts_ps", "at+xdatastat=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+\r
+       /* CMGF subscription */\r
+       prepare_and_send_pending_request(plugin, "umts_sms", "at+cmgf=0", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+\r
+       /* CSSN subscription */\r
+       prepare_and_send_pending_request(plugin, "call", "at+cssn=1,1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+\r
+       /* CUSD subscription */\r
+       prepare_and_send_pending_request(plugin, "call", "at+cusd=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+\r
+       /* XDNS subscription */\r
+       prepare_and_send_pending_request(plugin, "umts_ps", "at+xdns=1,1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+\r
+       /* CLIP subscription */\r
+       prepare_and_send_pending_request(plugin, "call", "at+clip=1", NULL, TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+\r
+       /*CMEE subscription*/\r
+       prepare_and_send_pending_request(plugin,"umts_ps","at+cmee=2",NULL,TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+\r
+       /*incoming sms and cb subscription*/\r
+       prepare_and_send_pending_request(plugin,"umts_sms","at+cnmi=1,2,0,0,0",NULL,TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+\r
+       /*message service subscription*/\r
+       prepare_and_send_pending_request(plugin,"umts_sms","at+csms=1",NULL,TCORE_AT_NO_RESULT, on_response_bootup_subscription);\r
+\r
+       /* text/pdu mode subscription*/\r
+       prepare_and_send_pending_request(plugin,"umts_sms","at+cmgf=1",NULL,TCORE_AT_NO_RESULT, on_response_last_bootup_subscription);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+#ifdef ENABLE_CMUX\r
+static void on_response_setupmux(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       TcorePlugin *plugin = NULL;\r
+       TcoreHal *hal = NULL;\r
+       \r
+       /* IMC Plugin dereferenced from pending request */\r
+       plugin = tcore_pending_ref_plugin(p);\r
+       \r
+       /* Actual HAL - like svnet(2) */\r
+       hal = (TcoreHal *)user_data;\r
+\r
+       /* Link HAL */\r
+       //tcore_plugin_link_user_data(plugin, hal);\r
+       \r
+       /* TODO: Initialize MUX module.\r
+        *       Append each MUX HAL to each Co-Object while initialization.\r
+        * API: tcore_object_set_hal(CoreObject *o, TcoreHal *h)\r
+        *\r
+        * After MUX setup, AT parse functionality of PHY HAL\r
+        * should be disabled.\r
+        * e.g.) plugin = tcore_pending_ref_plugin((TcorePending*) p);\r
+        *       hal    = tcore_plugin_ref_hal((TcorePlugin*) plugin);\r
+        *       tcore_hal_disable_queue((TcoreHal*) hal);\r
+        */\r
+\r
+       /* TODO: Should be moved to ...\r
+        * Proceed power up noti process after MUX initialization.\r
+        */\r
+\r
+       /* Initialize CMUX */\r
+       tcore_cmux_init(plugin, hal);\r
+       \r
+       return;\r
+}\r
+\r
+\r
+\r
+static void setup_mux(CoreObject *o)\r
+{\r
+       TcoreHal* hal = NULL;\r
+       TcorePending *pending = NULL;\r
+       dbg("Entered");\r
+\r
+       /* HAL has type itself,\r
+        * e.g.) TCORE_HAL_MODE_AT\r
+        */\r
+       /*o = tcore_pending_ref_core_object(plugin);*/\r
+       hal = tcore_object_get_hal(o);\r
+\r
+       //prepare_and_send_pending_request(plugin, "modem", "AT+CMUX=0,0,,1509,10,3,30,,", "+CMUX", TCORE_AT_NO_RESULT, on_response_setupmux);\r
+       pending = tcore_at_pending_new(o, "AT+CMUX=0,0,,1509,10,3,30,,", "+CMUX", TCORE_AT_NO_RESULT, on_response_setupmux, hal);\r
+\r
+       tcore_pending_set_send_callback(pending, on_confirmation_modem_message_send, NULL);\r
+\r
+       /* Send callback */\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       return;\r
+}\r
+\r
+static gboolean on_event_mux_channel_up(CoreObject *o, const void *event_info, void *user_data)\r
+{\r
+       TcorePlugin *plugin = NULL;\r
+       dbg("Entry");\r
+\r
+       plugin = (TcorePlugin *)user_data;\r
+       _modem_subscribe_events(plugin);\r
+       dbg("Exit");\r
+       return;\r
+}\r
+#endif\r
+       \r
+static void on_response_enable_logging(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *resp = data;\r
+       TcorePlugin *plugin = NULL;\r
+       \r
+       plugin = tcore_pending_ref_plugin(p);\r
+       \r
+       /* DELETE ME: only for DEBUG */\r
+       if (!resp)\r
+               dbg("no data");\r
+\r
+       dbg("response...(result = %d, final_response = '%s')", resp->success, resp->final_response);\r
+\r
+       if(resp->success){\r
+               dbg("RESPONSE OK");\r
+               dbg("Enabling CP logging is success !!!\n");\r
+\r
+       }else {\r
+               dbg("RESPONSE NOK");\r
+               dbg("Enabling CP logging is failed !!!\n");\r
+       }\r
+\r
+#ifdef ENABLE_CMUX\r
+       dbg("Calling setup_mux");\r
+       setup_mux(tcore_pending_ref_core_object(p));\r
+#else\r
+       _modem_subscribe_events(plugin);\r
+#endif\r
+\r
+       dbg("Exit");\r
+       return;\r
+\r
+}\r
+\r
+static void _send_enable_logging_command(CoreObject *o)\r
+{\r
+       TcoreATRequest *req = NULL;\r
+       TcoreHal *hal = NULL;\r
+       TcorePending *pending = NULL;\r
+       TReturn ret = 0;\r
+       \r
+       /* DLELTE ME */\r
+       dbg("Send Trace enabling command for CP logging. \n");\r
+\r
+       if(!o){\r
+               dbg("Co-object is Null !!\n");\r
+               //goto error;\r
+       }\r
+\r
+       hal = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+       req = tcore_at_request_new("at+xsystrace=1,\"digrf=1;bb_sw=1;3g_sw=1\",\"digrf=0x84\",\"oct=4\";+xsystrace=11;+trace=1", NULL, TCORE_AT_NO_RESULT);\r
+\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       tcore_pending_set_response_callback(pending, on_response_enable_logging, hal);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_modem_message_send, NULL);\r
+\r
+       ret = tcore_hal_send_request(hal, pending);\r
+       if(ret != TCORE_RETURN_SUCCESS)\r
+               dbg("tcore_hal_send_request fail !!! (hal: 0x%x, pending: 0x%x)\n", hal, pending);\r
+\r
+}\r
+\r
+static void on_response_poweron(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *resp = data;\r
+       GSList*tokens=NULL;\r
+       const char *line=NULL;\r
+       gboolean bpoweron = FALSE;\r
+       int response = 0;\r
+               \r
+       if(resp->success){\r
+               dbg("RESPONSE OK");\r
+               /* Parse AT Response */\r
+               if (resp->lines) {\r
+                       line = (const char *)resp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       if (g_slist_length(tokens) != 1) {\r
+                               dbg("invalid message");\r
+                               bpoweron = FALSE;\r
+                               goto error;\r
+                       }\r
+               }\r
+\r
+               response = atoi(g_slist_nth_data(tokens, 0));\r
+\r
+               dbg("CPAS: response %d",response);\r
+\r
+               switch(response)\r
+               {\r
+                       case CPAS_RES_READY:\r
+                       case CPAS_RES_RINGING:\r
+                       case CPAS_RES_CALL_PROGRESS:\r
+                       case CPAS_RES_ASLEEP:\r
+                               bpoweron = TRUE;\r
+                       break;\r
+\r
+                       case CPAS_RES_UNAVAIL:\r
+                       case CPAS_RES_UNKNOWN:\r
+                       default:\r
+                               dbg("value is unvail/unknown - but forcefully proceed for test. should be changed -hyko20120803");\r
+                               //bpoweron = FALSE;\r
+                               bpoweron = TRUE;\r
+                       break;\r
+               }\r
+       }else{\r
+               dbg("CPAS: RESPONSE NOK");\r
+               bpoweron = FALSE;\r
+       }\r
+\r
+error:\r
+       /* DELE ME: AT request & response are freed after AT processing in HAL.\r
+        * ref.) _emit_pending_response (libtcore/src/at.c)\r
+        */\r
+        if(tokens != NULL)\r
+               tcore_at_tok_free(tokens);\r
+\r
+       if(bpoweron == TRUE){\r
+               dbg("Power on NOTI received, (pending: 0x%x, co: 0x%x)\n", p, tcore_pending_ref_core_object(p));\r
+\r
+               _send_enable_logging_command(tcore_pending_ref_core_object(p));\r
+       }\r
+       else{\r
+               dbg("CP is not ready, let us send CPAS once again");\r
+               s_modem_send_poweron(tcore_object_ref_plugin(tcore_pending_ref_core_object(p)));\r
+       }\r
+       return;\r
+}\r
+\r
+static TReturn power_off(CoreObject *o, UserRequest *ur)\r
+{\r
+       TcoreHal *hal = NULL;\r
+       TcoreATRequest *req = NULL;\r
+       TcorePending *pending = NULL;\r
+\r
+       /* FIXME: Before MUX setup, use PHY HAL directly. */\r
+       hal = tcore_object_get_hal(o);\r
+\r
+       pending = tcore_pending_new(o, 0);\r
+\r
+       /* TODO:\r
+        * Need to mapping or define AT command\r
+        * including prefix if neccessary otherwise NULL.\r
+        * Response type (e.g. TCORE_AT_SINGLELINE)\r
+        */\r
+       req = tcore_at_request_new("AT+CFUN=0", NULL, TCORE_AT_NO_RESULT);\r
+\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       tcore_pending_set_response_callback(pending, on_response_power_off, hal);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_modem_message_send, NULL);\r
+\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn get_imei(CoreObject *o, UserRequest *ur)\r
+{\r
+       TcoreHal* hal;\r
+       TcoreATRequest *req;\r
+       TcorePending *pending = NULL;\r
+\r
+       hal = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+\r
+       req = tcore_at_request_new("AT+CGSN", NULL, TCORE_AT_NUMERIC);\r
+\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       tcore_pending_set_response_callback(pending, on_response_imei, hal);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_modem_message_send, NULL);\r
+\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+\r
+static TReturn get_version(CoreObject *o, UserRequest *ur)\r
+{\r
+       TcoreHal* hal;\r
+       TcoreATRequest *req;\r
+       TcorePending *pending = NULL;\r
+\r
+       hal = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+\r
+       req = tcore_at_request_new("AT+CGMR", NULL, TCORE_AT_SINGLELINE);\r
+\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       tcore_pending_set_response_callback(pending, on_response_version, hal);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_modem_message_send, NULL);\r
+\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn set_flight_mode(CoreObject *o, UserRequest *ur)\r
+{\r
+       TcoreHal *hal = NULL;\r
+       TcoreATRequest *req = NULL;\r
+       TcorePending *pending = NULL;\r
+       const struct treq_modem_set_flightmode *req_data = NULL;\r
+       char *cmd_str = NULL;\r
+\r
+       hal = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+\r
+       req_data = tcore_user_request_ref_data(ur, NULL);\r
+\r
+       if (req_data->enable) {\r
+               dbg("Flight mode on/n");\r
+               cmd_str = g_strdup("AT+CFUN=4");\r
+       }\r
+       else {\r
+               dbg("Flight mode off/n");\r
+               cmd_str = g_strdup("AT+CFUN=1");\r
+       }\r
+\r
+       req = tcore_at_request_new((const char*)cmd_str, NULL, TCORE_AT_NO_RESULT);\r
+\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       tcore_pending_set_response_callback(pending, on_response_set_flight_mode, hal);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_modem_message_send, NULL);\r
+\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+\r
+static struct tcore_modem_operations modem_ops =\r
+{\r
+       .power_on = NULL,\r
+       .power_off = power_off,\r
+       .power_reset = NULL,\r
+       .set_flight_mode = set_flight_mode,\r
+       .get_imei = get_imei,\r
+       .get_version = get_version,\r
+       .get_sn = NULL,\r
+       .dun_pin_ctrl = NULL,\r
+};\r
+\r
+gboolean s_modem_init(TcorePlugin *p, TcoreHal *h)\r
+{\r
+       CoreObject *o = NULL;\r
+       GQueue *work_queue = NULL;\r
+       TelMiscVersionInformation *vi_property = NULL;\r
+       TelMiscSNInformation *imei_property = NULL;\r
+       TelMiscSNInformation *sn_property = NULL;\r
+\r
+       o = tcore_modem_new(p, "modem", &modem_ops, h);\r
+       if (!o)\r
+               return FALSE;\r
+\r
+       work_queue = g_queue_new();\r
+       tcore_object_link_user_data(o, work_queue);\r
+\r
+       vi_property = calloc(sizeof(TelMiscVersionInformation), 1);\r
+       tcore_plugin_link_property(p, "VERSION", vi_property);\r
+\r
+       imei_property = calloc(sizeof(TelMiscSNInformation), 1);\r
+       tcore_plugin_link_property(p, "IMEI", imei_property);\r
+\r
+       sn_property = calloc(sizeof(TelMiscSNInformation), 1);\r
+       tcore_plugin_link_property(p, "SN", sn_property);\r
+       \r
+#ifdef ENABLE_CMUX\r
+       dbg("Registerind for CMUX-UP event");\r
+       tcore_object_add_callback(o, "CMUX-UP", on_event_mux_channel_up, p);\r
+#endif\r
+\r
+       dbg("Registering for +XSIM event");\r
+       tcore_object_add_callback(o, "+XSIM", on_event_bootup_sim_status, NULL);\r
+\r
+       return TRUE;\r
+}\r
+\r
+void s_modem_exit(TcorePlugin *p)\r
+{\r
+       CoreObject *o = NULL;\r
+       GQueue *work_queue = NULL;\r
+       TelMiscVersionInformation *vi_property = NULL;\r
+       TelMiscSNInformation *imei_property = NULL;\r
+       TelMiscSNInformation *sn_property = NULL;\r
+\r
+       if (!p)\r
+               return;\r
+\r
+       o = tcore_plugin_ref_core_object(p, "modem");\r
+\r
+       work_queue = tcore_object_ref_user_data(o);\r
+       g_queue_free(work_queue);\r
+\r
+       vi_property = tcore_plugin_ref_property(p, "VERSION");\r
+       if (vi_property)\r
+               free(vi_property);\r
+\r
+       imei_property = tcore_plugin_ref_property(p, "IMEI");\r
+       if (imei_property)\r
+               free(imei_property);\r
+\r
+       sn_property = tcore_plugin_ref_property(p, "SN");\r
+       if (sn_property)\r
+               free(sn_property);\r
+\r
+       tcore_modem_free(o);\r
+       return;\r
+}\r
+\r
+gboolean s_modem_send_poweron(TcorePlugin *p)\r
+{\r
+       TcoreHal* hal;\r
+       TcoreATRequest *req;\r
+       TcorePending *pending = NULL;\r
+       CoreObject *o;\r
+\r
+       o = tcore_plugin_ref_core_object(p, "modem");\r
+       hal = tcore_object_get_hal(o);\r
+       /* HAL has type itself,\r
+        * e.g.) TCORE_HAL_MODE_AT\r
+        */\r
+       pending = tcore_pending_new(o, 0);\r
+\r
+       /* Set Metainfo into TcorePending directly\r
+        * using TcoreATRequest\r
+        * command type: e.g.) SINGLELINE\r
+        * response prefix\r
+        */\r
+\r
+       req = tcore_at_request_new("AT+CPAS", "+CPAS", TCORE_AT_SINGLELINE);\r
+\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_timeout(pending, 10);\r
+       tcore_pending_set_priority(pending, TCORE_PENDING_PRIORITY_DEFAULT);    \r
+       tcore_pending_set_timeout_callback(pending, on_timeout_modem_poweron, hal);\r
+       \r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       tcore_pending_set_response_callback(pending, on_response_poweron, hal);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_modem_message_send, NULL);\r
+\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       return TRUE;\r
+}\r
index 93abe01..9c89ed2 100755 (executable)
-/*
- * tel-plugin-imc
- *
- * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Hayoon Ko <hayoon.ko@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <glib.h>
-
-#include <tcore.h>
-#include <hal.h>
-#include <core_object.h>
-#include <plugin.h>
-#include <queue.h>
-#include <co_network.h>
-#include <co_ps.h>
-#include <server.h>
-#include <storage.h>
-#include <util.h>
-#include <at.h>
-
-#include "s_common.h"
-#include "s_network.h"
-
-#define AT_CREG_STAT_NOT_REG   0 /* not registered, MT is not currently searching a new operator to register to */
-#define AT_CREG_STAT_REG_HOME  1 /* registered, home network */
-#define AT_CREG_STAT_SEARCHING 2 /* not registered, but MT is currently searching a new operator to register to */
-#define AT_CREG_STAT_REG_DENIED        3 /* registration denied */
-#define AT_CREG_STAT_UNKNOWN   4 /* unknown */
-#define AT_CREG_STAT_REG_ROAM  5 /* registered, roaming */
-
-#define AT_COPS_MODE_AUTOMATIC 0 /* automatic (<oper> field is ignored) */
-#define AT_COPS_MODE_MANUAL    1 /* manual (<oper> field shall be present, and <AcT> optionally) */
-#define AT_COPS_MODE_DEREGISTER        2 /* deregister from network */
-#define AT_COPS_MODE_SET_ONLY  3 /* set only <format> */
-#define AT_COPS_MODE_MANUAL_AUTOMATIC 4 /*automatic - manual*/
-
-#define AT_COPS_FORMAT_LONG_ALPHANUMERIC       0 /* long format alphanumeric <oper> */
-#define AT_COPS_FORMAT_SHORT_ALPHANUMERIC      1 /* short format alphanumeric <oper> */
-#define AT_COPS_FORMAT_NUMERIC                 2 /* numeric <oper> */
-
-#define AT_COPS_ACT_GSM                        0       /* GSM */
-#define AT_COPS_ACT_GSM_COMPACT                1       /* GSM Compact */
-#define AT_COPS_ACT_UTRAN              2       /* UTRAN */
-#define AT_COPS_ACT_GSM_EGPRS          3       /* GSM w/EGPRS */
-#define AT_COPS_ACT_UTRAN_HSDPA                4       /* UTRAN w/HSDPA */
-#define AT_COPS_ACT_UTRAN_HSUPA                5       /* UTRAN w/HSUPA */
-#define AT_COPS_ACT_UTRAN_HSDPA_HSUPA  6       /* UTRAN w/HSDPA and HSUPA */
-#define AT_COPS_ACT_E_UTRAN            7       /* E-UTRAN */
-
-#define AT_XBANDSEL_0 0 
-#define AT_XBANDSEL_1800 1800
-#define AT_XBANDSEL_1900 1900
-#define AT_XBANDSEL_850 850
-#define AT_XBANDSEL_450 450
-#define AT_XBANDSEL_480 480
-#define AT_XBANDSEL_750 750
-#define AT_XBANDSEL_380 380
-#define AT_XBANDSEL_410 410
-
-#define MAX_NETWORKS_PREF_PLMN_SUPPORT 150
-#define MAX_NETWORKS_MANUAL_SEARCH_SUPPORT 20
-
-static unsigned int lookup_tbl_net_status[] = {
-               [AT_CREG_STAT_NOT_REG] = NETWORK_SERVICE_DOMAIN_STATUS_NO,
-               [AT_CREG_STAT_REG_HOME] = NETWORK_SERVICE_DOMAIN_STATUS_FULL,
-               [AT_CREG_STAT_SEARCHING] = NETWORK_SERVICE_DOMAIN_STATUS_SEARCH,
-               [AT_CREG_STAT_REG_DENIED] = NETWORK_SERVICE_DOMAIN_STATUS_EMERGENCY,
-               [AT_CREG_STAT_UNKNOWN] = NETWORK_SERVICE_DOMAIN_STATUS_NO,
-               [AT_CREG_STAT_REG_ROAM] = NETWORK_SERVICE_DOMAIN_STATUS_FULL,
-};
-
-static unsigned int lookup_tbl_access_technology[] = {
-       [AT_COPS_ACT_GSM]               = NETWORK_ACT_GSM,
-       [AT_COPS_ACT_GSM_COMPACT]       = NETWORK_ACT_GSM,
-       [AT_COPS_ACT_UTRAN]             = NETWORK_ACT_UTRAN,
-       [AT_COPS_ACT_GSM_EGPRS]         = NETWORK_ACT_EGPRS,
-       [AT_COPS_ACT_UTRAN_HSDPA]       = NETWORK_ACT_UTRAN,
-       [AT_COPS_ACT_UTRAN_HSUPA]       = NETWORK_ACT_UTRAN,
-       [AT_COPS_ACT_UTRAN_HSDPA_HSUPA] = NETWORK_ACT_UTRAN,
-       [AT_COPS_ACT_E_UTRAN]           = NETWORK_ACT_GSM_UTRAN,
-};
-
-static gboolean get_serving_network(CoreObject *o, UserRequest *ur);
-
-
-static void on_confirmation_network_message_send(TcorePending *p, gboolean result, void *user_data)
-{
-       dbg("on_confirmation_modem_message_send - msg out from queue.\n");
-
-       if (result == FALSE) {
-               /* Fail */
-               dbg("SEND FAIL");
-       }
-       else {
-               dbg("SEND OK");
-       }
-}
-
-static void nwk_prepare_and_send_pending_request(TcorePlugin *plugin, char *co_name, const char *at_cmd, const char* prefix,enum tcore_at_command_type at_cmd_type, TcorePendingResponseCallback callback)
-{
-       TcoreATRequest *req = NULL;
-       TcoreHal *hal;
-       CoreObject *o= NULL;
-       TcorePending *pending = NULL;
-       TReturn ret;
-       
-       o = tcore_plugin_ref_core_object(plugin, co_name);
-       hal = tcore_object_get_hal(o);
-       
-       pending = tcore_pending_new(o, 0);
-       req = tcore_at_request_new(at_cmd, prefix, at_cmd_type);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, callback, req->cmd);
-       tcore_pending_set_send_callback(pending, on_confirmation_network_message_send, NULL);
-
-       ret = tcore_hal_send_request(hal, pending);
-       return;
-}
-
-
-static void _insert_mcc_mnc_oper_list(TcorePlugin *p, CoreObject *o)
-{
-       Server *s;
-       Storage *strg;
-       void *handle;
-       char query[255] = {     0, };
-       GHashTableIter iter;
-       gpointer key, value;
-       GHashTable *result = NULL, *row = NULL;
-       struct tcore_network_operator_info *noi = NULL;
-       int count = 0;
-
-       s = tcore_plugin_ref_server(p);
-       strg = tcore_server_find_storage(s, "database");
-
-       handle = tcore_storage_create_handle(strg, "/opt/dbspace/.mcc_mnc_oper_list.db");
-       if (!handle) {
-               dbg("fail to create database handle");
-               return;
-       }
-
-       snprintf(query, 255, "select country, mcc, mnc, oper from mcc_mnc_oper_list");
-
-       result = g_hash_table_new_full(g_str_hash, g_str_equal, NULL,
-                       (GDestroyNotify) g_hash_table_destroy);
-
-       tcore_storage_read_query_database(strg, handle, query, NULL, result, 4);
-
-       g_hash_table_iter_init(&iter, result);
-       while (g_hash_table_iter_next(&iter, &key, &value) == TRUE) {
-               row = value;
-
-               noi = calloc(sizeof(struct tcore_network_operator_info), 1);
-
-               snprintf(noi->mcc, 4, "%s", (char *)g_hash_table_lookup(row, "1"));
-               snprintf(noi->mnc, 4, "%s",  (char *)g_hash_table_lookup(row, "2"));
-               snprintf(noi->name, 41, "%s",  (char *)g_hash_table_lookup(row, "3"));
-               snprintf(noi->country, 4, "%s",  (char *)g_hash_table_lookup(row, "0"));
-
-               tcore_network_operator_info_add(o, noi);
-
-               count++;
-       }
-
-       dbg("count = %d", count);
-
-       g_hash_table_destroy(result);
-
-       tcore_storage_remove_handle(strg, handle);
-}
-
-static enum telephony_network_service_type _get_service_type(enum telephony_network_service_type prev_type,
-               int domain, int act, int cs_status, int ps_status)
-{
-       enum telephony_network_service_type ret;
-
-       ret = prev_type;
-
-       switch (act) {
-               case NETWORK_ACT_UNKNOWN:
-                       ret = NETWORK_SERVICE_TYPE_UNKNOWN;
-                       break;
-
-               case NETWORK_ACT_GSM:
-                       if (prev_type == NETWORK_SERVICE_TYPE_2_5G_EDGE && domain == NETWORK_SERVICE_DOMAIN_CS)
-                               ret = NETWORK_SERVICE_TYPE_2_5G_EDGE;
-                       else
-                               ret = NETWORK_SERVICE_TYPE_2G;
-                       break;
-
-               case NETWORK_ACT_EGPRS:
-                       return NETWORK_SERVICE_TYPE_2_5G_EDGE;
-                       break;
-
-               case NETWORK_ACT_UMTS:
-                       ret = NETWORK_SERVICE_TYPE_3G;
-                       break;
-
-       }
-
-       if (cs_status == NETWORK_SERVICE_DOMAIN_STATUS_NO && ps_status == NETWORK_SERVICE_DOMAIN_STATUS_NO) {
-               ret = NETWORK_SERVICE_TYPE_NO_SERVICE;
-       }
-       else if (cs_status == NETWORK_SERVICE_DOMAIN_STATUS_SEARCH || ps_status == NETWORK_SERVICE_DOMAIN_STATUS_SEARCH) 
-       {
-               if (cs_status == NETWORK_SERVICE_DOMAIN_STATUS_FULL || ps_status == NETWORK_SERVICE_DOMAIN_STATUS_FULL) 
-               {
-                       /* no change */
-               }
-               else 
-               {
-                       ret = NETWORK_SERVICE_TYPE_SEARCH;
-               }
-       }
-       else if (cs_status == NETWORK_SERVICE_DOMAIN_STATUS_EMERGENCY || ps_status == NETWORK_SERVICE_DOMAIN_STATUS_EMERGENCY) 
-       {
-               if (cs_status == NETWORK_SERVICE_DOMAIN_STATUS_FULL || ps_status == NETWORK_SERVICE_DOMAIN_STATUS_FULL) 
-               {
-                       /* no change */
-               }
-               else 
-               {
-                       ret = NETWORK_SERVICE_TYPE_EMERGENCY;
-               }
-       }
-
-       return ret;
-}
-
-static void _ps_set(TcorePlugin *p, int status)
-{
-       GSList *co_list = NULL;
-
-       co_list = tcore_plugin_get_core_objects_bytype(p, CORE_OBJECT_TYPE_PS);
-       do {
-               CoreObject *o = NULL;
-               o = (CoreObject *) co_list->data;
-               if (!o)
-                       break;
-
-               if (status == NETWORK_SERVICE_DOMAIN_STATUS_FULL) {
-                       tcore_ps_set_online(o, TRUE);
-               }
-               else {
-                       tcore_ps_set_online(o, FALSE);
-               }
-       } while ((co_list = g_slist_next(co_list)));
-
-       g_slist_free(co_list);
-}
-
-static void on_timeout_search_network(TcorePending *p, void *user_data)
-{
-       UserRequest *ur;
-       struct tresp_network_search resp;
-
-       dbg("TIMEOUT !!!!! pending=%p", p);
-
-       memset(&resp, 0, sizeof(struct tresp_network_search));
-
-       resp.list_count = 0;
-
-       ur = tcore_pending_ref_user_request(p);
-       if (ur) {
-               tcore_user_request_send_response(ur, TRESP_NETWORK_SEARCH, sizeof(struct tresp_network_search), &resp);
-       }
-}
-
-static void on_response_set_plmn_selection_mode(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       UserRequest *ur;
-       const TcoreATResponse *atResp = data;
-       //GSList *tokens = NULL;
-       //char * line = NULL;
-       struct tresp_network_set_plmn_selection_mode resp = {0};
-       
-       if(atResp->success > 0)
-       {
-               dbg("RESPONSE OK");
-               resp.result = TCORE_RETURN_SUCCESS;
-       }
-       else
-       {
-               dbg("RESPONSE NOK");
-               resp.result = TCORE_RETURN_FAILURE;
-       }
-
-       ur = tcore_pending_ref_user_request(p);
-       if (ur) {
-               tcore_user_request_send_response(ur, TRESP_NETWORK_SET_PLMN_SELECTION_MODE, sizeof(struct tresp_network_set_plmn_selection_mode), &resp);
-       }
-}
-
-static void on_response_get_plmn_selection_mode(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       UserRequest *ur;
-       struct tresp_network_get_plmn_selection_mode resp = {0};
-       const TcoreATResponse *atResp = data;
-       GSList *tokens = NULL;
-       char * line = NULL;
-       int mode = 0;
-
-       resp.result = TCORE_RETURN_FAILURE;
-
-       if(atResp->success > 0)
-       {
-               dbg("RESPONSE OK");
-               /* Format of output 
-               +COPS: <mode>[,<format>,<oper>[,< AcT>]]
-               */
-               
-               if(atResp->lines)
-                       {
-                               line = (char*)atResp->lines->data;
-                               tokens = tcore_at_tok_new(line);
-                               if (g_slist_length(tokens) < 1){
-                               msg("invalid message");
-                               goto OUT;
-                               }
-                               mode = atoi(tcore_at_tok_nth(tokens, 0));
-                               dbg("mode = %d", mode);
-                       
-                               switch(mode) {
-                                       case AT_COPS_MODE_AUTOMATIC:
-                                               resp.mode = NETWORK_SELECT_MODE_GLOBAL_AUTOMATIC;
-                                               break;
-                                       case AT_COPS_MODE_MANUAL:
-                                       case AT_COPS_MODE_MANUAL_AUTOMATIC:
-                                               resp.mode = NETWORK_SELECT_MODE_GSM_MANUAL;
-                                               break;
-                                       case AT_COPS_MODE_DEREGISTER:
-                                       case AT_COPS_MODE_SET_ONLY:
-                                               resp.result = TCORE_RETURN_FAILURE;
-                                       goto OUT;
-                               }
-                       resp.result = TCORE_RETURN_SUCCESS;
-                       }
-       }
-       else
-       {
-               dbg("RESPONSE NOK");
-               resp.result = TCORE_RETURN_FAILURE;
-       }
-
-OUT:
-       ur = tcore_pending_ref_user_request(p);
-       if (ur) {
-               tcore_user_request_send_response(ur, TRESP_NETWORK_GET_PLMN_SELECTION_MODE, sizeof(struct tresp_network_get_plmn_selection_mode), &resp);
-       }
-
-       if(tokens != NULL)
-               tcore_at_tok_free(tokens);
-
-       return;
-
-}
-
-static void on_response_search_network(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       UserRequest *ur;
-       struct tresp_network_search resp;
-       int i = 0, ctr =0;
-       char* line=NULL;
-       const TcoreATResponse *atResp = data;
-       GSList *tokens = NULL;
-       GSList *network_token = NULL;
-       int AcT=0 , stat = 0;
-       char* cp_plmn =NULL;
-       char* temp_plmn_info =NULL;
-       char *pResp = NULL;
-       int num_network_avail = 0;
-
-       memset(&resp, 0, sizeof(struct tresp_network_search));
-       resp.result = TCORE_RETURN_FAILURE;
-       resp.list_count = 0;
-
-       if(atResp->success > 0)
-       {
-               dbg("RESPONSE OK");
-               if(atResp->lines) {
-                       line = (char*)atResp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       num_network_avail = g_slist_length(tokens);
-                       dbg(" length of tokens is %d\n", num_network_avail);
-                       if (num_network_avail < 1) {
-                               msg("invalid message");
-                               goto OUT;
-                       }
-               }
-                                       
-               resp.result = TCORE_RETURN_SUCCESS;
-               /*
-                *      +COPS: [list of supported (<stat>,long alphanumeric <oper>,short alphanumeric <oper>,numeric <oper>[,<AcT>])s]
-                *             [,,(list of supported <mode>s),(list of supported <format>s)]
-               */
-                       
-               /* (2,"IND airtel","airtel","40445",2,),(1,"IND airtel","airtel","40445",0,),(3,"TATA DOCOMO","TATA DO","405034",2,) */
-                       
-               for(i=0; ((i<num_network_avail) && (i<MAX_NETWORKS_MANUAL_SEARCH_SUPPORT)); i++)
-                       {
-                       /* (2,"IND airtel","airtel","40445",2,) */
-                       network_token = tcore_at_tok_new(g_slist_nth_data(tokens, i));
-
-                       pResp = (tcore_at_tok_nth(network_token, 0));
-                       if(pResp != NULL){
-                               dbg("status : %s",pResp);
-                               resp.list[i].status = (enum telephony_network_plmn_status)atoi(pResp);
-                       }
-
-                       if (pResp = (tcore_at_tok_nth(network_token, 1)))
-                       { /* Long Aplha name */
-                               dbg("Long Aplha name : %s",pResp);
-                               
-                               if(strlen(pResp) > 0)
-                                       /* Strip off starting quote & ending quote */
-                                       strncpy(resp.list[i].name, pResp+1, strlen(pResp)-2);
-                       }
-                       else if (pResp = (tcore_at_tok_nth(network_token, 2)))
-                       { 
-                               dbg("Short Aplha name : %s",pResp);
-                               /* Short Aplha name */
-                               /* Strip off starting quote & ending quote */
-                               if(strlen(pResp) > 0)
-                                       strncpy(resp.list[i].name, pResp+1, strlen(pResp)-2);
-                       }
-
-                       /* PLMN ID */
-                       pResp = tcore_at_tok_nth(network_token, 3);
-                       if(pResp != NULL)
-                       {
-                               dbg("PLMN ID : %s",pResp);
-                               if(strlen(pResp) > 0){
-                                       temp_plmn_info = malloc((strlen(pResp) - 2)+1); /* 1 extra character for NULL storage */
-                                       memset(temp_plmn_info, 0x00, strlen(pResp) -2+1);
-                                       
-                                       /* Strip off starting quotes & ending quotes */
-                                       strncpy(temp_plmn_info, pResp+1, strlen(pResp)-2);
-                               }
-                       }
-
-                       /* Decode PLMN ID from Hexa String to Hexa bytes */
-                       //cp_plmn = util_hexStringToBytes(temp_plmn_info);
-               
-                       memcpy(resp.list[i].plmn, temp_plmn_info, 6);
-                                       if (resp.list[i].plmn[5] == '#')
-                                               resp.list[i].plmn[5] = '\0';
-
-                       /* Parse Access Technology */
-                       if(pResp = tcore_at_tok_nth(tokens, 4))
-                       {
-                               if(strlen(pResp) > 0){
-                                       AcT = atoi(pResp);
-                               
-                                       if (0 == AcT)
-                                               resp.list[i].act = NETWORK_ACT_GSM;
-                                       else if(2 == AcT)
-                                               resp.list[i].act = NETWORK_ACT_UMTS;
-                               }
-                       }
-
-                       dbg("Operator [%d] :: stat = %d, Name =%s, plmnId = %s, AcT=%d\n", resp.list_count, resp.list[i].status, resp.list[i].name, resp.list[i].plmn, AcT);
-                       resp.list_count++;
-
-                       tcore_at_tok_free(network_token);
-                       free(temp_plmn_info);
-                       //free(cp_plmn);
-               }
-       }
-       else
-       {
-                       dbg("RESPONSE NOK");
-                       resp.result = TCORE_RETURN_FAILURE;
-       }
-
-OUT:
-       ur = tcore_pending_ref_user_request(p);
-       if (ur) {
-               tcore_user_request_send_response(ur, TRESP_NETWORK_SEARCH, sizeof(struct tresp_network_search), &resp);
-       }
-       tcore_at_tok_free(tokens);
-       return;
-}
-
-static void on_response_set_service_domain(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       dbg("Entry");
-
-       dbg("Exit");
-       return;
-}
-
-static void on_response_get_service_domain(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       dbg("Entry");
-
-       dbg("Exit");
-       return;
-}
-
-static void on_response_set_band(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       UserRequest *ur;
-       struct tresp_network_set_band resp;
-
-       char* line=NULL;
-       const TcoreATResponse *atResp = data;
-
-       dbg("On Response Set Band");
-       if(atResp->success > 0)
-       {
-               dbg("Response OK");
-               resp.result = TCORE_RETURN_SUCCESS;
-       }else
-       {
-               dbg("Response NOK");
-               resp.result = TCORE_RETURN_FAILURE;
-       }
-
-       ur = tcore_pending_ref_user_request(p);
-       if (ur) {
-               tcore_user_request_send_response(ur, TRESP_NETWORK_SET_BAND, sizeof(struct tresp_network_set_band), &resp);
-       }
-}
-
-static void on_response_get_band(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       dbg("Entry");
-
-       dbg("Exit");
-       return;
-}
-
-static void on_response_set_preferred_plmn(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       dbg("Entry");
-
-       dbg("Exit");
-       return;
-}
-
-static void on_response_get_preferred_plmn(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       UserRequest *ur;
-       int i = 0, ctr =0;
-       char* line=NULL;
-       const TcoreATResponse *atResp = data;
-       GSList *tokens = NULL;
-       char* cp_plmn =NULL;
-       char temp_plmn_info[17] = {0};
-       char *pResp = NULL;
-       int num_network_avail = 0;
-       int plmn_format = 0;
-       
-       struct tresp_network_get_preferred_plmn resp = {0};
-       int total_lines = 0;
-       int GSM_AcT2 = 0, GSM_Compact_AcT2= 0, UTRAN_AcT2 = 0;
-
-       dbg("Entry");
-
-       if(atResp->success > 0)
-       {
-               dbg("RESPONSE OK");
-               if(atResp->lines) {
-                       total_lines = g_slist_length(atResp->lines);
-                       dbg("Total number of network present in Preferred PLMN list is %d\n", total_lines);
-
-                       if (total_lines < 1) {
-                               msg("invalid message");
-                               goto OUT;
-                       }
-
-                       if (total_lines >= MAX_NETWORKS_PREF_PLMN_SUPPORT)
-                               total_lines = MAX_NETWORKS_PREF_PLMN_SUPPORT;
-                       
-/*
-+COPL: <index1>,<format>,<oper1>[,<GSM_AcT1>,<GSM_Compact_AcT1>,<UTRAN_AcT1>,<E-UTRAN_AcT1>] [<CR><LF>
-+CPOL: <index2>,<format>,<oper2>[,<GSM_AcT2>,<GSM_Compact_AcT2>,<UTRAN_AcT2>,<E-UTRAN_AcT2>]
-*/
-
-                       resp.result = TCORE_RETURN_SUCCESS;
-
-                       for (i=0; i<total_lines; i++) {
-                               /* Take each line response at a time & parse it */
-                               line = tcore_at_tok_nth(atResp->lines, i);
-                               tokens = tcore_at_tok_new(line);
-
-                               /* <index2>,<format>,<oper2>[,<GSM_AcT2>,<GSM_Compact_AcT2>,<UTRAN_AcT2>,<E-UTRAN_AcT2>] */
-
-                               /* EF Index */
-                               if (pResp = tcore_at_tok_nth(tokens, 0))
-                               {
-                                       dbg("Index : %s",pResp);                                        
-                                       resp.list[i].ef_index = atoi(pResp);
-                               }
-                               /* Format */
-                               if(pResp = tcore_at_tok_nth(tokens, 1))
-                               {
-                                       dbg("format : %s",pResp);
-                                       plmn_format = atoi(pResp);
-                               }
-
-                               /* Operator PLMN ID */
-                               if(pResp = tcore_at_tok_nth(tokens, 2));
-                               {
-                                       dbg("plmn ID : %s",pResp);
-
-                                       if(strlen(pResp) > 0){
-                                               strncmp(temp_plmn_info, pResp+1, strlen(pResp)-2);
-                                       
-                                               //Get only PLMN ID
-                                               if (plmn_format == 2)
-                                               {
-                                                       //cp_plmn = util_hexStringToBytes(temp_plmn_info);
-                                               
-                                                       if (strncmp((char *)temp_plmn_info, "000000", 6) == 0)
-                                                               continue;
-                               
-                                                       memcpy(resp.list[i].plmn, temp_plmn_info, 6);
-                                                       if (resp.list[i].plmn[5] == '#')
-                                                               resp.list[i].plmn[5] = '\0';
-
-                                                       //free(cp_plmn);
-                                               }
-                                       }
-                               }
-
-                               if(pResp = tcore_at_tok_nth(tokens, 3)){
-                                       dbg("GSM_AcT2  : %s",pResp);
-                                       GSM_AcT2 = atoi(pResp);
-                               }
-                                       
-                               if(pResp = tcore_at_tok_nth(tokens, 4)){
-                                       dbg("GSM_Compact AcT2  : %s",pResp);
-                                       GSM_Compact_AcT2 = atoi(pResp);
-                               }
-       
-                               if(pResp = tcore_at_tok_nth(tokens, 5)){
-                                       dbg("UTRAN_AcT2  : %s",pResp);
-                                       UTRAN_AcT2 = atoi(pResp);
-                               }
-
-                               if(UTRAN_AcT2 && (GSM_AcT2 ||GSM_Compact_AcT2))
-                                       resp.list[i].act = NETWORK_ACT_GSM_UTRAN;
-                               else if (UTRAN_AcT2)
-                                       resp.list[i].act = NETWORK_ACT_UMTS;
-                               else if (GSM_AcT2 || GSM_Compact_AcT2)
-                                       resp.list[i].act = NETWORK_ACT_GPRS;
-
-                               (resp.list_count)++;
-
-                               tcore_at_tok_free(tokens);
-                       }
-               }
-       }
-OUT:
-       ur = tcore_pending_ref_user_request(p);
-       if (ur) {
-               tcore_user_request_send_response(ur, TRESP_NETWORK_GET_PREFERRED_PLMN, sizeof(struct tresp_network_get_preferred_plmn), &resp);
-       }
-       dbg("Exit");
-       return;
-}
-
-static void on_response_set_order(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       dbg("Entry");
-
-       dbg("Exit");
-       return;
-}
-
-static void on_response_get_order(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       dbg("Entry");
-
-       dbg("Exit");
-       return;
-}
-
-static void on_response_set_power_on_attach(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       dbg("Entry");
-
-       dbg("Exit");
-       return;
-}
-
-static void on_response_get_power_on_attach(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       dbg("Entry");
-
-       dbg("Exit");
-       return;
-}
-
-static void on_response_set_cancel_manual_search(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       dbg("Entry");
-
-       dbg("Exit");
-       return;
-}
-
-
-static void on_response_get_serving_network(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse* resp = data;
-       UserRequest *ur;
-       struct tresp_network_get_serving_network Tresp = {0};
-       char plmn[7] = {0};
-       char *long_plmn_name, *short_plmn_name = NULL;
-       CoreObject *o;
-       GSList *tokens=NULL;
-       const char *line;
-       int network_mode = -1;
-       int plmn_format = -1;
-       enum telephony_network_access_technology AcT = NETWORK_ACT_UNKNOWN;
-       struct tnoti_network_identity noti ={0};
-       char *pResp = NULL;
-       int nol, count =0;
-
-       o = tcore_pending_ref_core_object(p);
-
-       if(resp->success <= 0){
-               dbg("RESPONSE NOK");
-
-               ur = tcore_pending_ref_user_request(p);
-               if (ur) {
-                       Tresp.result = TCORE_RETURN_FAILURE;            
-                       tcore_user_request_send_response(ur, TRESP_NETWORK_GET_SERVING_NETWORK, sizeof(struct tresp_network_get_serving_network), &Tresp);
-               }
-
-               return;
-       }else{
-       dbg("RESPONSE OK");
-               nol = g_slist_length(resp->lines);
-               dbg("nol : %d", nol);
-
-               for(count =0; count < nol; count++){
-                       //parse each line 
-                               line = g_slist_nth_data(resp->lines, count);
-               tokens = tcore_at_tok_new(line);
-                       dbg("line %d start---------------",count);
-                       //mode
-               if (pResp = tcore_at_tok_nth(tokens, 0)){
-                       dbg("mode  : %s",pResp);
-                       network_mode = atoi(pResp);
-               }
-
-                       //format (optional)                     
-               if(pResp = tcore_at_tok_nth(tokens, 1))
-               {
-                       dbg("format  : %s",pResp);
-                                       if(strlen(pResp)>0)
-                       plmn_format = atoi(pResp);
-               }
-
-                       //plmn 
-               switch(plmn_format)
-               {
-                       case AT_COPS_FORMAT_LONG_ALPHANUMERIC: 
-                               if(pResp = tcore_at_tok_nth(tokens, 2))
-                               {               
-                                       dbg("long PLMN  : %s",pResp);
-                                       if(strlen(pResp) > 0){
-                                               long_plmn_name = malloc((strlen(pResp) - 2)+1); /* 1 extra character for NULL storage */
-                                               memset(long_plmn_name, 0x00, strlen(pResp) -2+1);
-                                               /* Strip off starting quotes & ending quotes */
-                                               strncpy(long_plmn_name, pResp+1, strlen(pResp)-2);
-
-                                               //set network name into po
-                                               tcore_network_set_network_name(o,TCORE_NETWORK_NAME_TYPE_FULL,long_plmn_name);
-                                       }
-                               }
-                               break;
-               
-                               case AT_COPS_FORMAT_SHORT_ALPHANUMERIC:
-                                       if(pResp = tcore_at_tok_nth(tokens, 2))
-                                       {
-                                               dbg("short PLMN  : %s",pResp);
-                                               if(strlen(pResp)>0){
-                                                       short_plmn_name = malloc((strlen(pResp) - 2)+1); /* 1 extra character for NULL storage */
-                                                       memset(short_plmn_name, 0x00, strlen(pResp) -2+1);
-                                                       /* Strip off starting quotes & ending quotes */
-                                                       strncpy(short_plmn_name, pResp+1, strlen(pResp)-2);
-                                                       
-                                                       //set network name into po                                                      
-                                                       tcore_network_set_network_name(o,TCORE_NETWORK_NAME_TYPE_SHORT,short_plmn_name);                                                        
-                                               }
-                                       }                                       
-                               break;
-
-                               case AT_COPS_FORMAT_NUMERIC:
-                                       if(pResp = tcore_at_tok_nth(tokens, 2))
-                                       {
-                                               dbg("numeric : %s", pResp);
-                                               if(strlen(pResp)>0){
-                                                       memset(plmn, 0, 7);
-                                                       /* Strip off starting quotes & ending quotes */
-                                                       strncpy(plmn, pResp+1, strlen(pResp)-2);                                                        
-
-                                                       tcore_network_set_plmn(o,plmn);
-                                               }
-                                       }
-                               break;
-       
-                               default:
-                               break;
-                       }
-
-                       //act 
-                       if(pResp = tcore_at_tok_nth(tokens, 3))
-                       {               
-                               if(strlen(pResp)>0){
-                                       dbg("act  : %s",pResp);                                         
-                                        AcT = lookup_tbl_access_technology[atoi(pResp)];
-                                       dbg("AcT  : %d",AcT);   
-
-                                       tcore_network_set_access_technology(o, AcT);
-                               }
-                       }
-
-                       tcore_at_tok_free(tokens);
-               }
-
-               memcpy(Tresp.plmn, plmn, 7);
-               tcore_network_get_access_technology(o, &(Tresp.act)); 
-               tcore_network_get_lac(o, &(Tresp.gsm.lac)); 
-
-               ur = tcore_pending_ref_user_request(p);
-               if (ur) {
-                       Tresp.result = TCORE_RETURN_SUCCESS;            
-                       tcore_user_request_send_response(ur, TRESP_NETWORK_GET_SERVING_NETWORK, sizeof(struct tresp_network_get_serving_network), &Tresp);
-               }
-               else
-               {
-                       /* Network change noti */
-                       struct tnoti_network_change network_change;
-
-                       memset(&network_change, 0, sizeof(struct tnoti_network_change));
-                       memcpy(network_change.plmn, plmn, 7);
-                       tcore_network_get_access_technology(o, &(network_change.act));
-                       tcore_network_get_lac(o, &(network_change.gsm.lac));
-
-                       tcore_server_send_notification(tcore_plugin_ref_server(tcore_pending_ref_plugin(p)), tcore_pending_ref_core_object(p),
-                               TNOTI_NETWORK_CHANGE, sizeof(struct tnoti_network_change), &network_change);
-
-                       dbg("dbg.. network_change.plmn  : %s",network_change.plmn);
-                       dbg("dbg.. network_change.act  : %d",network_change.act);                                               
-                       dbg("dbg.. network_change.gsm.lac  : %d",network_change.gsm.lac);
-
-
-                       if((AT_COPS_MODE_DEREGISTER !=network_mode) &&
-                               (AT_COPS_MODE_SET_ONLY != network_mode)){
-                               /*Network identity noti*/
-                               memset(&noti, 0, sizeof(struct tnoti_network_change));
-                               if(long_plmn_name)
-                                       memcpy(noti.full_name, long_plmn_name, MIN(33, strlen(long_plmn_name)) );
-                               if(short_plmn_name)
-                                       memcpy(noti.short_name, short_plmn_name, MIN(17, strlen(long_plmn_name)) );
-                               memcpy(noti.plmn, plmn,7);
-                               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), 
-                                       o, TNOTI_NETWORK_IDENTITY,      sizeof(struct tnoti_network_identity), &noti);          
-
-                               dbg("dbg.. noti.short_name  : %s",noti.short_name);
-                               dbg("dbg.. noti.full_name  : %s",noti.full_name);                                               
-                               dbg("dbg.. noti.plmn  : %s",noti.plmn); 
-                       }
-               }
-
-               if(long_plmn_name)
-                       free(long_plmn_name);
-               if(short_plmn_name)
-                       free(short_plmn_name);
-       }
-
-       return;
-
-}
-
-static gboolean on_event_ps_network_regist(CoreObject *o, const void *data, void *user_data)
-{
-       struct tnoti_network_registration_status regist_status;
-       enum telephony_network_service_domain_status cs_status;
-       enum telephony_network_service_domain_status ps_status;
-       enum telephony_network_service_type service_type;
-       enum telephony_network_access_technology act = NETWORK_ACT_UNKNOWN;
-       struct tnoti_network_location_cellinfo net_lac_cell_info = {0};
-       struct tnoti_ps_protocol_status noti = {0};
-       int ret;
-       unsigned char svc_domain = NETWORK_SERVICE_DOMAIN_PS;
-       int stat= 0, AcT=0;
-       unsigned int lac=0xffff, ci=0xffff;
-       unsigned int rac = 0xffff;
-       GSList* tokens = NULL;
-       char* pResp;
-       char *line = NULL;
-       GSList *lines = NULL;
-
-       lines = (GSList*)data;
-       if (1 != g_slist_length(lines)) {
-               dbg("unsolicited msg but multiple line");
-           goto OUT;
-       }
-       line  = (char*)(lines->data);
-       dbg("+CGREG NOTI RECEIVED");
-
-/*
-+CREG: <stat> [[,<lac>,<ci>[AcT]]
-
-Possible values of <stat> can be
-0 Not registered, ME is not currently searching a new operator to register to
-1 Registered, home network
-2 Not registered, but ME is currently searching a new operator to register
-3 Registration denied
-4 Unknown
-5 Registered, in roaming
-
-<lac>
-string type; two byte location area code in hexadecimal format (e.g. �00C3�)
-
-<ci>
-string type; four byte cell ID in hexadecimal format (e.g. �0000A13F�)
-
-<ACT>
-0 GSM
-2 UTRAN
-3 GSM w/EGPRS
-4 UTRAN w/HSDPA
-5 UTRAN w/HSUPA
-6 UTRAN w/HSDPA and HSUPA
-Note: <Act> is supporting from R7 and above Protocol Stack.
-
-<rac>: is R7 and above feature, string type; one byte routing area code in hexadecimal format.
-*/
-       if (line!=NULL)
-       {
-               tokens = tcore_at_tok_new(line);
-               if(g_slist_length(tokens) < 1) {
-                       msg("invalid message");
-                       goto OUT;
-               }
-
-               if(!(pResp = g_slist_nth_data(tokens, 0)))
-               {
-                       dbg("No  STAT in +CGREG");
-                       goto OUT;
-               }
-               else
-               {
-                       stat = atoi(pResp);     
-                       if(pResp = g_slist_nth_data(tokens, 1))
-                               lac = atoi(pResp);
-
-                       if((pResp = g_slist_nth_data(tokens, 2)))
-                               ci = atoi(pResp);
-                       else
-                               dbg("No ci in +CGREG");
-                               
-                       if(pResp = g_slist_nth_data(tokens, 3))
-                               AcT = atoi(pResp);
-                       else
-                               dbg("No AcT in +CGREG");
-                       
-                       if(pResp = g_slist_nth_data(tokens, 4))
-                               rac = atoi(pResp);
-                       else
-                               dbg("No rac in +CGREG");
-               }
-
-
-               dbg("stat=%d, lac=0x%lx, ci=0x%lx, Act=%d, rac = 0x%x", stat, lac, ci, AcT, rac);
-
-               ps_status = lookup_tbl_net_status[stat];
-               
-               tcore_network_set_service_status(o, TCORE_NETWORK_SERVICE_DOMAIN_TYPE_PACKET, ps_status);
-               _ps_set(tcore_object_ref_plugin(o), ps_status);
-                       
-               tcore_network_get_service_status(o, TCORE_NETWORK_SERVICE_DOMAIN_TYPE_CIRCUIT, &cs_status);
-
-               act = lookup_tbl_access_technology[AcT];
-               tcore_network_set_access_technology(o, act);
-
-               if (stat == AT_CREG_STAT_REG_ROAM)
-                       tcore_network_set_roaming_state(o, TRUE);
-               else
-                       tcore_network_set_roaming_state(o, FALSE);
-
-               tcore_network_get_service_type(o, &service_type);
-               dbg("prev_service_type = 0x%x", service_type);
-               service_type = _get_service_type(service_type, svc_domain, act, cs_status, ps_status);
-               dbg("new_service_type = 0x%x", service_type);
-               tcore_network_set_service_type(o, service_type);
-
-               tcore_network_set_lac(o, lac);
-               tcore_network_set_cell_id(o, ci);
-               tcore_network_set_rac(o, rac);
-
-               net_lac_cell_info.lac = lac;
-               net_lac_cell_info.cell_id = ci;
-
-               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_NETWORK_LOCATION_CELLINFO,
-                               sizeof(struct tnoti_network_location_cellinfo), &net_lac_cell_info);
-
-               regist_status.cs_domain_status = cs_status;
-               regist_status.ps_domain_status = ps_status;
-               regist_status.service_type = service_type;
-               regist_status.roaming_status = tcore_network_get_roaming_state(o);
-
-               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o,
-                               TNOTI_NETWORK_REGISTRATION_STATUS, sizeof(struct tnoti_network_registration_status), &regist_status);
-
-               if(service_type == NETWORK_SERVICE_TYPE_HSDPA)
-                       noti.status = TELEPHONY_HSDPA_ON;
-               else
-                       noti.status = TELEPHONY_HSDPA_OFF;
-               
-               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_PS_PROTOCOL_STATUS,
-               sizeof(struct tnoti_ps_protocol_status), &noti);
-
-               /* Get PLMN ID needed to application */
-               //get_serving_network(o, NULL);
-
-
-       }
-       else
-       {
-               dbg("Response NOK");
-       }
-
-OUT:
-       if(NULL!=tokens)
-       tcore_at_tok_free(tokens);
-       return TRUE;
-}
-
-static gboolean on_event_cs_network_regist(CoreObject *o, const void *event_info, void *user_data)
-{
-       GSList *lines = NULL;
-       char *line = NULL;
-       struct tnoti_network_registration_status regist_status;
-       enum telephony_network_service_domain_status cs_status;
-       enum telephony_network_service_domain_status ps_status;
-       enum telephony_network_service_type service_type;
-       enum telephony_network_access_technology act = NETWORK_ACT_UNKNOWN;
-       struct tnoti_network_location_cellinfo net_lac_cell_info = {0};
-
-       int ret;
-       unsigned char svc_domain = NETWORK_SERVICE_DOMAIN_CS;
-       int stat= 0, AcT=0;
-       unsigned int lac=0xffff, ci=0xffff;
-       GSList* tokens = NULL;
-       char* pResp;
-
-       lines = (GSList*)event_info;
-       if (1 != g_slist_length(lines)) {
-               dbg("unsolicited msg but multiple line");
-           goto OUT;
-       }
-       line  = (char*)(lines->data);
-
-       dbg("+CREG NOTI RECEIVED");
-
-/*
-+CREG: <stat> [[,<lac>,<ci>[AcT]]
-
-Possible values of <stat> can be
-0 Not registered, ME is not currently searching a new operator to register to
-1 Registered, home network
-2 Not registered, but ME is currently searching a new operator to register
-3 Registration denied
-4 Unknown
-5 Registered, in roaming
-
-<lac>
-string type; two byte location area code in hexadecimal format (e.g. �00C3�)
-
-<ci>
-string type; four byte cell ID in hexadecimal format (e.g. �0000A13F�)
-
-<ACT>
-0 GSM
-2 UTRAN
-3 GSM w/EGPRS
-4 UTRAN w/HSDPA
-5 UTRAN w/HSUPA
-6 UTRAN w/HSDPA and HSUPA
-Note: <Act> is supporting from R7 and above Protocol Stack.
-*/
-       if (line!=NULL)
-       {
-               tokens = tcore_at_tok_new(line);
-               if(g_slist_length(tokens) < 1) {
-                       msg("invalid message");
-                       goto OUT;
-               }
-
-               if(!(pResp = g_slist_nth_data(tokens, 0)))
-               {
-                       dbg("No  STAT in +CREG");
-                       goto OUT;
-               }
-               else
-               {
-                       stat = atoi(pResp);     
-                       if(pResp = g_slist_nth_data(tokens, 1))
-                               lac = atoi(pResp);
-
-                       if((pResp = g_slist_nth_data(tokens, 2)))
-                               ci = atoi(pResp);
-                       else
-                               dbg("No ci in +CREG");
-                               
-                       if(pResp = g_slist_nth_data(tokens, 3))
-                               AcT = atoi(pResp);
-                       else
-                               dbg("No AcT in +CREG");
-               }
-
-
-               dbg("stat=%d, lac=0x%lx, ci=0x%lx, Act=%d", stat, lac, ci, AcT);
-
-               cs_status = lookup_tbl_net_status[stat];
-               tcore_network_set_service_status(o, TCORE_NETWORK_SERVICE_DOMAIN_TYPE_CIRCUIT, cs_status);
-
-       //      tcore_network_get_service_status(o, TCORE_NETWORK_SERVICE_DOMAIN_TYPE_CIRCUIT, &cs_status);
-               tcore_network_get_service_status(o, TCORE_NETWORK_SERVICE_DOMAIN_TYPE_PACKET, &ps_status);
-
-               act = lookup_tbl_access_technology[AcT];
-               tcore_network_set_access_technology(o, act);
-
-               if (stat == AT_CREG_STAT_REG_ROAM)
-                       tcore_network_set_roaming_state(o, TRUE);
-               else
-                       tcore_network_set_roaming_state(o, FALSE);
-
-               tcore_network_get_service_type(o, &service_type);
-               dbg("prev_service_type = 0x%x", service_type);
-               service_type = _get_service_type(service_type, svc_domain, act, cs_status, ps_status);
-               dbg("new_service_type = 0x%x", service_type);
-               tcore_network_set_service_type(o, service_type);
-
-               tcore_network_set_lac(o, lac);
-               tcore_network_set_cell_id(o, ci);
-
-               net_lac_cell_info.lac = lac;
-               net_lac_cell_info.cell_id = ci;
-
-               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_NETWORK_LOCATION_CELLINFO,
-                               sizeof(struct tnoti_network_location_cellinfo), &net_lac_cell_info);
-
-               regist_status.cs_domain_status = cs_status;
-               regist_status.ps_domain_status = ps_status;
-               regist_status.service_type = service_type;
-               regist_status.roaming_status = tcore_network_get_roaming_state(o);
-
-               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o,
-                               TNOTI_NETWORK_REGISTRATION_STATUS, sizeof(struct tnoti_network_registration_status), &regist_status);
-
-               /* Get PLMN ID needed to application */
-               if((NETWORK_SERVICE_DOMAIN_STATUS_FULL == cs_status )||
-                       NETWORK_SERVICE_DOMAIN_STATUS_FULL ==ps_status )
-               get_serving_network(o, NULL);
-       }
-       else
-       {
-               dbg("Response NOK");
-       }
-
-OUT:
-       if(NULL!=tokens)
-       tcore_at_tok_free(tokens);
-       return TRUE;
-
-}
-
-static gboolean on_event_network_icon_info(CoreObject *o, const void *event_info, void *user_data)
-{
-       struct tnoti_network_icon_info net_icon_info = {0};
-       char *line = NULL;
-       
-       int rssi = 0, battery = 0;
-       char * rssiToken = NULL;
-       char *batteryToken = NULL;
-       GSList* tokens = NULL;
-       GSList *lines = NULL;
-
-       lines = (GSList*)event_info;
-       if (1 != g_slist_length(lines)) {
-               dbg("unsolicited msg but multiple line");
-           goto OUT;
-       }
-       line = (char*)(lines->data);
-       dbg("+XCIEV Network Icon Info Noti Recieve");
-       memset(&net_icon_info, 0, sizeof(struct tnoti_network_icon_info));
-
-       if(line != NULL)
-       {
-               dbg("Response OK");
-       
-               tokens = tcore_at_tok_new(line);
-               if (g_slist_length(tokens) != 2) {
-                       msg("invalid message");
-                       goto OUT;
-               }
-
-               rssiToken = (char *)g_slist_nth_data(tokens, 0);
-
-               if (strlen(rssiToken)>0)
-               {
-                       net_icon_info.type = NETWORK_ICON_INFO_RSSI;
-                       net_icon_info.rssi= atoi(g_slist_nth_data(tokens, 0));
-                       dbg("rssi level : %d",net_icon_info.rssi);
-               }
-               else
-               {
-                       dbg("No rssi value");
-               }
-               
-               batteryToken = (char *)g_slist_nth_data(tokens,1);
-               if (strlen(batteryToken)>0)
-               {
-                       net_icon_info.type = NETWORK_ICON_INFO_BATTERY;
-                       net_icon_info.battery= 1 + atoi(g_slist_nth_data(tokens, 1)); // 1 level added for proper battery indication
-                       dbg("battery level : %d",net_icon_info.battery);
-               }
-               else
-               {
-                       dbg("No battery level recieved");
-               }
-               
-               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_NETWORK_ICON_INFO,
-                               sizeof(struct tnoti_network_icon_info), &net_icon_info);
-       }
-       else
-       {
-               dbg("Response NOK");            
-       }
-
-
-OUT:
-       if(NULL!=tokens)
-       tcore_at_tok_free(tokens);
-       return TRUE;
-       
-}
-
-static gboolean on_event_network_time_info(CoreObject *o, const void *event_info, void *user_data)
-{
-       struct tnoti_network_timeinfo net_time_info = {0};
-       int gmtoff;
-       char *line = NULL;
-       GSList* tokens = NULL;
-       char *time= NULL, *time_zone_variance = NULL;
-       GSList *lines = NULL;
-
-       dbg("Network Time Info Noti Recieved");
-       memset(&net_time_info, 0, sizeof(struct tnoti_network_icon_info));
-
-       lines = (GSList*)event_info;
-       if (1 != g_slist_length(lines)) {
-               dbg("unsolicited msg but multiple line");
-           goto OUT;
-       }
-       line  = (char*)(lines->data);
-
-       /*
-       <time> string type value; format is \93yy/MM/dd,hh:mms\94, wherein characters indicates year, month, day, hour, minutes, seconds.
-       <timzone_variance> is a string \93GMT+HH:MM\94 or \93GMT-HH:MM\94 e.g. \93GMT+5:30\94
-       */
-       dbg("Network time info noti recieved");
-       
-       if (line != NULL)
-       {       
-               dbg("Response OK");
-                       dbg("noti line is %s", line);
-                       
-                       tokens = tcore_at_tok_new(line);
-                       strcpy(time, g_slist_nth_data(tokens, 0));
-                       strcpy(time_zone_variance , g_slist_nth_data(tokens, 1));
-
-                       strncpy(net_time_info.hour,time ,2);
-                       strncpy(net_time_info.month, time+3, 2);        
-                       strncpy(net_time_info.day, time+6, 2);
-                       strncpy(net_time_info.hour, time+9 ,2);
-                       strncpy(net_time_info.minute, time+12,3);
-               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_NETWORK_TIMEINFO, sizeof(struct tnoti_network_timeinfo), &net_time_info);
-       }
-       else
-       {       
-               dbg("line is  NULL");
-       }
-OUT:
-       if(NULL!=tokens)
-               tcore_at_tok_free(tokens);
-       return TRUE;
-}
-
-static gboolean on_event_network_identity(CoreObject *o, const void *event_info, void *user_data)
-{
-       struct tnoti_network_identity noti;
-       char plmn[7] = { 0, };
-       int type = 0;
-       char *tmp;
-       GSList *lines = NULL;
-       char *line = NULL;
-       GSList* tokens = NULL;
-
-       dbg("NOTI RECEIVED");
-       lines = (GSList*)event_info;
-
-       if (1 != g_slist_length(lines)) {
-               dbg("unsolicited msg but multiple line");
-           goto OUT;
-       }
-
-       line  = (char*)(lines->data);
-
-       memset(&noti, 0, sizeof(struct tnoti_network_identity));
-       dbg("Network identity noti recieved");
-
-       if(line!=NULL)
-       {
-               dbg("Response OK");
-                       dbg("noti line is %s", line);
-                       tokens = tcore_at_tok_new(line);
-                       //noti.type = 0;
-                       strcpy(noti.plmn, g_slist_nth_data(tokens, 0));
-                       tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_NETWORK_IDENTITY,  sizeof(struct tnoti_network_identity), &noti);                  
-       }
-       else
-       {
-               dbg("Response NOK");            
-       }
-
-OUT:
-       if(NULL!=tokens)
-               tcore_at_tok_free(tokens);
-       return TRUE;
-}
-
-
-static void on_sim_resp_hook_get_netname(UserRequest *ur, enum tcore_response_command command, unsigned int data_len,
-               const void *data, void *user_data)
-{
-       const struct tresp_sim_read *resp = data;
-       CoreObject *o = user_data;
-
-       if (command == TRESP_SIM_GET_SPN) {
-               dbg("OK SPN GETTING!!");
-               dbg("resp->result = 0x%x", resp->result);
-               dbg("resp->data.spn.display_condition = 0x%x", resp->data.spn.display_condition);
-               dbg("resp->data.spn.spn = [%s]", resp->data.spn.spn);
-
-               tcore_network_set_network_name(o, TCORE_NETWORK_NAME_TYPE_SPN, (const char *)resp->data.spn.spn);
-
-               /**
-                * display condition
-                *  bit[0]: 0 = display of registered PLMN name not required when registered PLMN is either HPLMN or a PLMN in the service provider PLMN list
-                *          1 = display of registered PLMN name required when registered PLMN is either HPLMN or a PLMN in the service provider PLMN list
-                *  bit[1]: 0 = display of the service provider name is required when registered PLMN is neither HPLMN nor a PLMN in the service provider PLMN list
-                *          1 = display of the service provider name is not required when registered PLMN is neither HPLMN nor a PLMN in the service provider PLMN list
-                */
-               if (resp->data.spn.display_condition & 0x01) {
-                       tcore_network_set_network_name_priority(o, TCORE_NETWORK_NAME_PRIORITY_NETWORK);
-               }
-               if ((resp->data.spn.display_condition & 0x02) == 0) {
-                       tcore_network_set_network_name_priority(o, TCORE_NETWORK_NAME_PRIORITY_SPN);
-               }
-               if ((resp->data.spn.display_condition & 0x03) == 0x01) {
-                       tcore_network_set_network_name_priority(o, TCORE_NETWORK_NAME_PRIORITY_ANY);
-               }
-       }
-}
-
-static enum tcore_hook_return on_hook_sim_init(Server *s, CoreObject *source, enum tcore_notification_command command,
-               unsigned int data_len, void *data, void *user_data)
-{
-       const struct tnoti_sim_status *sim = data;
-       UserRequest *ur = NULL;
-
-       if (sim->sim_status == SIM_STATUS_INIT_COMPLETED) {
-               ur = tcore_user_request_new(NULL, NULL);
-               tcore_user_request_set_command(ur, TREQ_SIM_GET_SPN);
-               tcore_user_request_set_response_hook(ur, on_sim_resp_hook_get_netname, user_data);
-               tcore_object_dispatch_request(source, ur);
-       }
-
-       return TCORE_HOOK_RETURN_CONTINUE;
-}
-
-static TReturn search_network(CoreObject *o, UserRequest *ur)
-{
-       TcorePlugin *p = NULL;
-       TcoreHal *h = NULL;
-       TcorePending *pending = NULL;
-       TcoreATRequest *atreq = NULL;
-
-       char*cmd_str = NULL;
-       dbg("search_network - ENTER!!");
-       
-       if (!o || !ur)
-               return TCORE_RETURN_EINVAL;
-
-       h = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-
-       cmd_str = g_strdup_printf("AT+COPS=?\r");
-       atreq = tcore_at_request_new(cmd_str, "+COPS", TCORE_AT_SINGLELINE);
-       
-       tcore_pending_set_request_data(pending, 0, atreq);
-       //tcore_pending_set_timeout(pending, 60);
-       //tcore_pending_set_priority(pending, TCORE_PENDING_PRIORITY_DEFAULT);
-       tcore_pending_set_response_callback(pending, on_response_search_network, NULL);
-       //tcore_pending_set_timeout_callback(pending, on_timeout_search_network, NULL);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_network_message_send, NULL);
-
-       tcore_hal_send_request(h, pending);
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn set_plmn_selection_mode(CoreObject *o, UserRequest *ur)
-{
-       TcorePlugin *p = NULL;
-       TcoreHal *h = NULL;
-       TcorePending *pending = NULL;
-       TcoreATRequest *atreq;
-       char*cmd_str = NULL;
-       int format = 0; /* default value for long alphanumeric */
-       int mode = 0;
-       char plmn[7];
-       
-       const struct treq_network_set_plmn_selection_mode *req_data;
-
-
-       dbg("set_plmn_selection_mode - ENTER!!");
-
-       if (!o || !ur)
-               return TCORE_RETURN_EINVAL;
-
-       req_data = tcore_user_request_ref_data(ur, NULL);
-       h = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-
-       // Command Format - AT+COPS=[<mode>[,<format>[,<oper>[,< AcT>]]]]       
-       /* oper parameter format
-               - 0 <oper> format presentations are set to long alphanumeric. If Network name not available it displays combination of Mcc and MNC in string format.
-               - 1 <oper> format presentation is set to short alphanumeric.
-               - 2 <oper> format presentations set to numeric.
-       */
-       
-       switch(req_data->mode) {
-               case NETWORK_SELECT_MODE_GSM_MANUAL:
-               {
-                       mode = AT_COPS_MODE_MANUAL;
-                       format = AT_COPS_FORMAT_NUMERIC;
-
-                       memset(plmn, 0, 7);
-                       memcpy(plmn, req_data->plmn, 6);
-
-                       if (strlen(req_data->plmn) == 5) {
-                               plmn[5] = '#';
-                       }               
-
-                       cmd_str = g_strdup_printf("AT+COPS=%d,%d,%s\r", mode, format, plmn);
-               }
-               break;
-               
-               case NETWORK_SELECT_MODE_GLOBAL_AUTOMATIC:
-               default:
-                       cmd_str = g_strdup("AT+COPS=0\r");
-                       break;
-       }
-
-       
-       atreq = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);
-
-       tcore_pending_set_request_data(pending, 0, atreq);
-       tcore_pending_set_response_callback(pending, on_response_set_plmn_selection_mode, NULL);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_network_message_send, NULL);
-
-
-       tcore_hal_send_request(h, pending);
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn get_plmn_selection_mode(CoreObject *o, UserRequest *ur)
-{
-       TcorePlugin *p = NULL;
-       TcoreHal *h = NULL;
-       TcorePending *pending = NULL;
-       TcoreATRequest *atreq;
-       char*cmd_str = NULL;
-
-       dbg("get_plmn_selection_mode - ENTER!!");
-
-       if (!o || !ur)
-               return TCORE_RETURN_EINVAL;
-
-       h = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-
-       cmd_str = g_strdup_printf("AT+COPS?\r");
-       atreq = tcore_at_request_new(cmd_str, "+COPS", TCORE_AT_SINGLELINE);
-
-       tcore_pending_set_request_data(pending, 0, atreq);
-       tcore_pending_set_response_callback(pending, on_response_get_plmn_selection_mode, NULL);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_network_message_send, NULL);
-
-       tcore_hal_send_request(h, pending);
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-
-static TReturn set_band(CoreObject *o, UserRequest *ur)
-{
-       TcorePlugin *p = NULL;
-       TcoreHal *h = NULL;
-       TcorePending *pending = NULL;
-       TcoreATRequest *atreq;
-       char*cmd_str = NULL;
-       const struct treq_network_set_band *req_data;
-       int band = 0;
-       dbg("set_band - ENTER!!");
-
-       if (!o || !ur)
-               return TCORE_RETURN_EINVAL;
-
-       req_data = tcore_user_request_ref_data(ur, NULL);
-
-       h = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-
-       switch (req_data->band)
-       {
-               case NETWORK_BAND_TYPE_GSM850:
-                       band = AT_XBANDSEL_850;
-                       break;
-
-               case NETWORK_BAND_TYPE_GSM_900_1800:
-                       band = AT_XBANDSEL_1800; //summerize 900 + 1800
-                       break;
-
-               case NETWORK_BAND_TYPE_GSM1900:
-                       band = AT_XBANDSEL_1900;
-                       break;
-               case NETWORK_BAND_TYPE_GSM1800:
-                       band = AT_XBANDSEL_1800;
-                       break;
-               case NETWORK_BAND_TYPE_GSM_850_1900:
-                       band = AT_XBANDSEL_1900; //summerize 850 + 1900
-                       break; 
-               default:
-                       break;
-       }
-       pending = tcore_pending_new(o, 0);
-
-       //TODO - Done only for UMTS case, need to do for GSM seperately?
-       cmd_str = g_strdup_printf("AT+XUBANDSEL=%d", req_data->band);
-       atreq = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);
-
-       tcore_pending_set_request_data(pending, 0, atreq);
-       tcore_pending_set_timeout(pending, 0);
-       tcore_pending_set_priority(pending, TCORE_PENDING_PRIORITY_DEFAULT);
-       tcore_pending_set_response_callback(pending, on_response_set_band, NULL);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_network_message_send, NULL);
-
-
-       tcore_hal_send_request(h, pending);
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn get_band(CoreObject *o, UserRequest *ur)
-{
-       TcorePlugin *p = NULL;
-       TcoreHal *h = NULL;
-       TcorePending *pending = NULL;
-
-       TcoreATRequest *atreq;
-       char*cmd_str = NULL;
-       dbg("get_band - ENTER!!");
-
-       if (!o || !ur)
-               return TCORE_RETURN_EINVAL;
-
-       h = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-
-       cmd_str = g_strdup_printf("AT+XUBANDSEL?\r");
-       atreq = tcore_at_request_new(cmd_str, "+XUBANDSEL", TCORE_AT_SINGLELINE);
-
-       pending = tcore_pending_new(o, 0);
-       tcore_pending_set_request_data(pending, 0, atreq);
-       tcore_pending_set_response_callback(pending, on_response_get_band, NULL);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_network_message_send, NULL);
-       tcore_hal_send_request(h, pending);
-
-
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn set_preferred_plmn(CoreObject *o, UserRequest *ur)
-{
-       dbg("Entry");
-
-       dbg("Exit");
-       return TCORE_RETURN_SUCCESS; 
-}
-
-static TReturn get_preferred_plmn(CoreObject *o, UserRequest *ur)
-{
-       TcorePlugin *p = NULL;
-       TcoreHal *h = NULL;
-       TcorePending *pending = NULL;
-       TcoreATRequest *atreq = NULL;
-
-       char*cmd_str = NULL;
-
-       dbg("get_preferred_plmn - ENTER!!");
-
-       if (!o || !ur)
-               return TCORE_RETURN_EINVAL;
-
-       h = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-
-       cmd_str = g_strdup_printf("AT+CPOL?\r");
-       atreq = tcore_at_request_new(cmd_str, "+CPOL", TCORE_AT_MULTILINE);
-       
-       tcore_pending_set_request_data(pending, 0, atreq);
-       tcore_pending_set_response_callback(pending, on_response_get_preferred_plmn, NULL);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_network_message_send, NULL);
-
-       tcore_hal_send_request(h, pending);
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-
-static TReturn set_cancel_manual_search(CoreObject *o, UserRequest *ur)
-{
-       dbg("Entry");
-
-       dbg("Exit");
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn get_serving_network(CoreObject *o, UserRequest *ur)
-{
-       TcorePlugin *p = NULL;
-       TcoreHal *h = NULL;
-       TcorePending *pending = NULL;
-       dbg("get_serving_network - ENTER!!");
-       
-       if (!o)
-               return TCORE_RETURN_EINVAL;
-
-       dbg("new pending(AT+COPS?)");
-
-       nwk_prepare_and_send_pending_request(tcore_object_ref_plugin(o), "umts_network", "AT+COPS=3,2;+COPS?;+COPS=3,0;+COPS?\r", "+COPS", TCORE_AT_MULTILINE,on_response_get_serving_network);
-       return TCORE_RETURN_SUCCESS;
-}
-
-static struct tcore_network_operations network_ops = {
-               .search                                 = search_network,
-               .set_plmn_selection_mode        = set_plmn_selection_mode,
-               .get_plmn_selection_mode        = get_plmn_selection_mode,
-               .set_service_domain             = NULL,
-               .get_service_domain             = NULL,
-               .set_band                               = set_band,
-               .get_band                               = get_band,
-               .set_preferred_plmn             = set_preferred_plmn,
-               .get_preferred_plmn             = get_preferred_plmn,
-               .set_order                              = NULL,
-               .get_order                              = NULL,
-               .set_power_on_attach            = NULL,
-               .get_power_on_attach            = NULL,
-               .set_cancel_manual_search       = set_cancel_manual_search,
-               .get_serving_network            = get_serving_network,
-};
-
-gboolean s_network_init(TcorePlugin *p, TcoreHal *h)
-{
-       CoreObject *o = NULL;
-
-       o = tcore_network_new(p, "umts_network", &network_ops, h);
-       if (!o)
-               return FALSE;
-
-       tcore_object_add_callback(o,"+CREG", on_event_cs_network_regist, NULL);
-       tcore_object_add_callback(o,"+CGREG", on_event_ps_network_regist, NULL);
-       tcore_object_add_callback(o, "+XCIEV", on_event_network_icon_info, NULL);
-
-       //XNITZINFO is for <time><timezone variance>
-       //CTZDST is for <dst>
-       tcore_object_add_callback(o, "+XNITZINFO", on_event_network_time_info, NULL);
-       tcore_object_add_callback(o, "+CTZDST", on_event_network_time_info, NULL);
-
-       //tcore_object_add_callback(o, "+XCOPS", on_event_network_identity, NULL);
-
-       //need to check whether the following is needed
-
-       //tcore_server_add_notification_hook(tcore_plugin_ref_server(p), TNOTI_SIM_STATUS, on_hook_sim_init, o);
-
-       _insert_mcc_mnc_oper_list(p, o);
-
-       return TRUE;
-}
-
-void s_network_exit(TcorePlugin *p)
-{
-       CoreObject *o;
-
-       o = tcore_plugin_ref_core_object(p, "umts_network");
-
-       tcore_network_free(o);
-}
+/**\r
+ * tel-plugin-samsung\r
+ *\r
+ * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved\r
+ *\r
+ * Contact: Ja-young Gu <jygu@samsung.com>\r
+ *\r
+ * PROPRIETARY/CONFIDENTIAL\r
+ *\r
+ * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information").\r
+ * You shall not disclose such Confidential Information and shall\r
+ * use it only in accordance with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS.\r
+ * SAMSUNG make no representations or warranties about the suitability\r
+ * of the software, either express or implied, including but not\r
+ * limited to the implied warranties of merchantability, fitness for a particular purpose, or non-infringement.\r
+ * SAMSUNG shall not be liable for any damages suffered by licensee as\r
+ * a result of using, modifying or distributing this software or its derivatives.\r
+ */\r
+\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+\r
+#include <glib.h>\r
+\r
+#include <tcore.h>\r
+#include <hal.h>\r
+#include <core_object.h>\r
+#include <plugin.h>\r
+#include <queue.h>\r
+#include <co_network.h>\r
+#include <co_ps.h>\r
+#include <server.h>\r
+#include <storage.h>\r
+#include <util.h>\r
+#include <at.h>\r
+\r
+#include "s_common.h"\r
+#include "s_network.h"\r
+\r
+#define AT_CREG_STAT_NOT_REG   0 /* not registered, MT is not currently searching a new operator to register to */\r
+#define AT_CREG_STAT_REG_HOME  1 /* registered, home network */\r
+#define AT_CREG_STAT_SEARCHING 2 /* not registered, but MT is currently searching a new operator to register to */\r
+#define AT_CREG_STAT_REG_DENIED        3 /* registration denied */\r
+#define AT_CREG_STAT_UNKNOWN   4 /* unknown */\r
+#define AT_CREG_STAT_REG_ROAM  5 /* registered, roaming */\r
+\r
+#define AT_COPS_MODE_AUTOMATIC 0 /* automatic (<oper> field is ignored) */\r
+#define AT_COPS_MODE_MANUAL    1 /* manual (<oper> field shall be present, and <AcT> optionally) */\r
+#define AT_COPS_MODE_DEREGISTER        2 /* deregister from network */\r
+#define AT_COPS_MODE_SET_ONLY  3 /* set only <format> */\r
+#define AT_COPS_MODE_MANUAL_AUTOMATIC 4 /*automatic - manual*/\r
+\r
+#define AT_COPS_FORMAT_LONG_ALPHANUMERIC       0 /* long format alphanumeric <oper> */\r
+#define AT_COPS_FORMAT_SHORT_ALPHANUMERIC      1 /* short format alphanumeric <oper> */\r
+#define AT_COPS_FORMAT_NUMERIC                 2 /* numeric <oper> */\r
+\r
+#define AT_COPS_ACT_GSM                        0       /* GSM */\r
+#define AT_COPS_ACT_GSM_COMPACT                1       /* GSM Compact */\r
+#define AT_COPS_ACT_UTRAN              2       /* UTRAN */\r
+#define AT_COPS_ACT_GSM_EGPRS          3       /* GSM w/EGPRS */\r
+#define AT_COPS_ACT_UTRAN_HSDPA                4       /* UTRAN w/HSDPA */\r
+#define AT_COPS_ACT_UTRAN_HSUPA                5       /* UTRAN w/HSUPA */\r
+#define AT_COPS_ACT_UTRAN_HSDPA_HSUPA  6       /* UTRAN w/HSDPA and HSUPA */\r
+#define AT_COPS_ACT_E_UTRAN            7       /* E-UTRAN */\r
+\r
+#define AT_GSM_XBANDSEL_AUTOMATIC 0 \r
+#define AT_GSM_XBANDSEL_1800 1800\r
+#define AT_GSM_XBANDSEL_1900 1900\r
+#define AT_GSM_XBANDSEL_900 900\r
+#define AT_GSM_XBANDSEL_850 850\r
+#define AT_GSM_XBANDSEL_450 450\r
+#define AT_GSM_XBANDSEL_480 480\r
+#define AT_GSM_XBANDSEL_750 750\r
+#define AT_GSM_XBANDSEL_380 380\r
+#define AT_GSM_XBANDSEL_410 410\r
+\r
+#define AT_XRAT_GSM 0\r
+#define AT_XRAT_DUAL 1\r
+#define AT_XRAT_UMTS 2\r
+\r
+#define MAX_NETWORKS_PREF_PLMN_SUPPORT 150\r
+#define MAX_NETWORKS_MANUAL_SEARCH_SUPPORT 20\r
+\r
+static unsigned int lookup_tbl_net_status[] = {\r
+               [AT_CREG_STAT_NOT_REG] = NETWORK_SERVICE_DOMAIN_STATUS_NO,\r
+               [AT_CREG_STAT_REG_HOME] = NETWORK_SERVICE_DOMAIN_STATUS_FULL,\r
+               [AT_CREG_STAT_SEARCHING] = NETWORK_SERVICE_DOMAIN_STATUS_SEARCH,\r
+               [AT_CREG_STAT_REG_DENIED] = NETWORK_SERVICE_DOMAIN_STATUS_EMERGENCY,\r
+               [AT_CREG_STAT_UNKNOWN] = NETWORK_SERVICE_DOMAIN_STATUS_NO,\r
+               [AT_CREG_STAT_REG_ROAM] = NETWORK_SERVICE_DOMAIN_STATUS_FULL,\r
+};\r
+\r
+static unsigned int lookup_tbl_access_technology[] = {\r
+       [AT_COPS_ACT_GSM]               = NETWORK_ACT_GSM,\r
+       [AT_COPS_ACT_GSM_COMPACT]       = NETWORK_ACT_GSM,\r
+       [AT_COPS_ACT_UTRAN]             = NETWORK_ACT_UTRAN,\r
+       [AT_COPS_ACT_GSM_EGPRS]         = NETWORK_ACT_EGPRS,\r
+       [AT_COPS_ACT_UTRAN_HSDPA]       = NETWORK_ACT_UTRAN,\r
+       [AT_COPS_ACT_UTRAN_HSUPA]       = NETWORK_ACT_UTRAN,\r
+       [AT_COPS_ACT_UTRAN_HSDPA_HSUPA] = NETWORK_ACT_UTRAN,\r
+       [AT_COPS_ACT_E_UTRAN]           = NETWORK_ACT_GSM_UTRAN,\r
+};\r
+\r
+static gboolean get_serving_network(CoreObject *o, UserRequest *ur);\r
+\r
+\r
+static void on_confirmation_network_message_send(TcorePending *p, gboolean result, void *user_data)\r
+{\r
+       dbg("on_confirmation_modem_message_send - msg out from queue.\n");\r
+\r
+       if (result == FALSE) {\r
+               /* Fail */\r
+               dbg("SEND FAIL");\r
+       }\r
+       else {\r
+               dbg("SEND OK");\r
+       }\r
+}\r
+\r
+static void nwk_prepare_and_send_pending_request(TcorePlugin *plugin, char *co_name, const char *at_cmd, const char* prefix,enum tcore_at_command_type at_cmd_type, UserRequest *ur, TcorePendingResponseCallback callback)\r
+{\r
+       TcoreATRequest *req = NULL;\r
+       TcoreHal *hal;\r
+       CoreObject *o= NULL;\r
+       TcorePending *pending = NULL;\r
+       TReturn ret;\r
+       \r
+       o = tcore_plugin_ref_core_object(plugin, co_name);\r
+       hal = tcore_object_get_hal(o);\r
+       \r
+       pending = tcore_pending_new(o, 0);\r
+       req = tcore_at_request_new(at_cmd, prefix, at_cmd_type);\r
+\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       tcore_pending_set_response_callback(pending, callback, req->cmd);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_network_message_send, NULL);\r
+\r
+       ret = tcore_hal_send_request(hal, pending);\r
+       return;\r
+}\r
+\r
+\r
+static void _insert_mcc_mnc_oper_list(TcorePlugin *p, CoreObject *o)\r
+{\r
+       Server *s;\r
+       Storage *strg;\r
+       void *handle;\r
+       char query[255] = {     0, };\r
+       GHashTableIter iter;\r
+       gpointer key, value;\r
+       GHashTable *result = NULL, *row = NULL;\r
+       struct tcore_network_operator_info *noi = NULL;\r
+       int count = 0;\r
+\r
+       s = tcore_plugin_ref_server(p);\r
+       strg = tcore_server_find_storage(s, "database");\r
+\r
+       handle = tcore_storage_create_handle(strg, "/opt/dbspace/.mcc_mnc_oper_list.db");\r
+       if (!handle) {\r
+               dbg("fail to create database handle");\r
+               return;\r
+       }\r
+\r
+       snprintf(query, 255, "select country, mcc, mnc, oper from mcc_mnc_oper_list");\r
+\r
+       result = g_hash_table_new_full(g_str_hash, g_str_equal, NULL,\r
+                       (GDestroyNotify) g_hash_table_destroy);\r
+\r
+       tcore_storage_read_query_database(strg, handle, query, NULL, result, 4);\r
+\r
+       g_hash_table_iter_init(&iter, result);\r
+       while (g_hash_table_iter_next(&iter, &key, &value) == TRUE) {\r
+               row = value;\r
+\r
+               noi = calloc(sizeof(struct tcore_network_operator_info), 1);\r
+\r
+               snprintf(noi->mcc, 4, "%s", (char *)g_hash_table_lookup(row, "1"));\r
+               snprintf(noi->mnc, 4, "%s",  (char *)g_hash_table_lookup(row, "2"));\r
+               snprintf(noi->name, 41, "%s",  (char *)g_hash_table_lookup(row, "3"));\r
+               snprintf(noi->country, 4, "%s",  (char *)g_hash_table_lookup(row, "0"));\r
+\r
+               tcore_network_operator_info_add(o, noi);\r
+\r
+               count++;\r
+       }\r
+\r
+       dbg("count = %d", count);\r
+\r
+       g_hash_table_destroy(result);\r
+\r
+       tcore_storage_remove_handle(strg, handle);\r
+}\r
+\r
+static enum telephony_network_service_type _get_service_type(enum telephony_network_service_type prev_type,\r
+               int domain, int act, int cs_status, int ps_status)\r
+{\r
+       enum telephony_network_service_type ret;\r
+\r
+       ret = prev_type;\r
+\r
+       switch (act) {\r
+               case NETWORK_ACT_UNKNOWN:\r
+                       ret = NETWORK_SERVICE_TYPE_UNKNOWN;\r
+                       break;\r
+\r
+               case NETWORK_ACT_GSM:\r
+                       if (prev_type == NETWORK_SERVICE_TYPE_2_5G_EDGE && domain == NETWORK_SERVICE_DOMAIN_CS)\r
+                               ret = NETWORK_SERVICE_TYPE_2_5G_EDGE;\r
+                       else\r
+                               ret = NETWORK_SERVICE_TYPE_2G;\r
+                       break;\r
+\r
+               case NETWORK_ACT_EGPRS:\r
+                       return NETWORK_SERVICE_TYPE_2_5G_EDGE;\r
+                       break;\r
+\r
+               case NETWORK_ACT_UMTS:\r
+                       ret = NETWORK_SERVICE_TYPE_3G;\r
+                       break;\r
+\r
+       }\r
+\r
+       if (cs_status == NETWORK_SERVICE_DOMAIN_STATUS_NO && ps_status == NETWORK_SERVICE_DOMAIN_STATUS_NO) {\r
+               ret = NETWORK_SERVICE_TYPE_NO_SERVICE;\r
+       }\r
+       else if (cs_status == NETWORK_SERVICE_DOMAIN_STATUS_SEARCH || ps_status == NETWORK_SERVICE_DOMAIN_STATUS_SEARCH) \r
+       {\r
+               if (cs_status == NETWORK_SERVICE_DOMAIN_STATUS_FULL || ps_status == NETWORK_SERVICE_DOMAIN_STATUS_FULL) \r
+               {\r
+                       /* no change */\r
+               }\r
+               else \r
+               {\r
+                       ret = NETWORK_SERVICE_TYPE_SEARCH;\r
+               }\r
+       }\r
+       else if (cs_status == NETWORK_SERVICE_DOMAIN_STATUS_EMERGENCY || ps_status == NETWORK_SERVICE_DOMAIN_STATUS_EMERGENCY) \r
+       {\r
+               if (cs_status == NETWORK_SERVICE_DOMAIN_STATUS_FULL || ps_status == NETWORK_SERVICE_DOMAIN_STATUS_FULL) \r
+               {\r
+                       /* no change */\r
+               }\r
+               else \r
+               {\r
+                       ret = NETWORK_SERVICE_TYPE_EMERGENCY;\r
+               }\r
+       }\r
+\r
+       return ret;\r
+}\r
+\r
+static void _ps_set(TcorePlugin *p, int status)\r
+{\r
+       GSList *co_list = NULL;\r
+\r
+       co_list = tcore_plugin_get_core_objects_bytype(p, CORE_OBJECT_TYPE_PS);\r
+       do {\r
+               CoreObject *o = NULL;\r
+               o = (CoreObject *) co_list->data;\r
+               if (!o)\r
+                       break;\r
+\r
+               if (status == NETWORK_SERVICE_DOMAIN_STATUS_FULL) {\r
+                       tcore_ps_set_online(o, TRUE);\r
+               }\r
+               else {\r
+                       tcore_ps_set_online(o, FALSE);\r
+               }\r
+       } while ((co_list = g_slist_next(co_list)));\r
+\r
+       g_slist_free(co_list);\r
+}\r
+\r
+static void on_timeout_search_network(TcorePending *p, void *user_data)\r
+{\r
+       UserRequest *ur;\r
+       struct tresp_network_search resp;\r
+\r
+       dbg("TIMEOUT !!!!! pending=%p", p);\r
+\r
+       memset(&resp, 0, sizeof(struct tresp_network_search));\r
+\r
+       resp.list_count = 0;\r
+\r
+       ur = tcore_pending_ref_user_request(p);\r
+       if (ur) {\r
+               tcore_user_request_send_response(ur, TRESP_NETWORK_SEARCH, sizeof(struct tresp_network_search), &resp);\r
+       }\r
+}\r
+\r
+static void on_response_set_plmn_selection_mode(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest *ur;\r
+       const TcoreATResponse *atResp = data;\r
+       //GSList *tokens = NULL;\r
+       //char * line = NULL;\r
+       struct tresp_network_set_plmn_selection_mode resp = {0};\r
+       \r
+       if(atResp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               resp.result = TCORE_RETURN_SUCCESS;\r
+       }\r
+       else\r
+       {\r
+               dbg("RESPONSE NOK");\r
+               resp.result = TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+       ur = tcore_pending_ref_user_request(p);\r
+       if (ur) {\r
+               tcore_user_request_send_response(ur, TRESP_NETWORK_SET_PLMN_SELECTION_MODE, sizeof(struct tresp_network_set_plmn_selection_mode), &resp);\r
+       }\r
+}\r
+\r
+static void on_response_get_plmn_selection_mode(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest *ur;\r
+       struct tresp_network_get_plmn_selection_mode resp = {0};\r
+       const TcoreATResponse *atResp = data;\r
+       GSList *tokens = NULL;\r
+       char * line = NULL;\r
+       int mode = 0;\r
+\r
+       resp.result = TCORE_RETURN_FAILURE;\r
+\r
+       if(atResp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               /* Format of output \r
+               +COPS: <mode>[,<format>,<oper>[,< AcT>]]\r
+               */\r
+               \r
+               if(atResp->lines)\r
+                       {\r
+                               line = (char*)atResp->lines->data;\r
+                               tokens = tcore_at_tok_new(line);\r
+                               if (g_slist_length(tokens) < 1){\r
+                               msg("invalid message");\r
+                               goto OUT;\r
+                               }\r
+                               mode = atoi(tcore_at_tok_nth(tokens, 0));\r
+                               dbg("mode = %d", mode);\r
+                       \r
+                               switch(mode) {\r
+                                       case AT_COPS_MODE_AUTOMATIC:\r
+                                               resp.mode = NETWORK_SELECT_MODE_GLOBAL_AUTOMATIC;\r
+                                               break;\r
+                                       case AT_COPS_MODE_MANUAL:\r
+                                       case AT_COPS_MODE_MANUAL_AUTOMATIC:\r
+                                               resp.mode = NETWORK_SELECT_MODE_GSM_MANUAL;\r
+                                               break;\r
+                                       case AT_COPS_MODE_DEREGISTER:\r
+                                       case AT_COPS_MODE_SET_ONLY:\r
+                                               resp.result = TCORE_RETURN_FAILURE;\r
+                                       goto OUT;\r
+                               }\r
+                       resp.result = TCORE_RETURN_SUCCESS;\r
+                       }\r
+       }\r
+       else\r
+       {\r
+               dbg("RESPONSE NOK");\r
+               resp.result = TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+OUT:\r
+       ur = tcore_pending_ref_user_request(p);\r
+       if (ur) {\r
+               tcore_user_request_send_response(ur, TRESP_NETWORK_GET_PLMN_SELECTION_MODE, sizeof(struct tresp_network_get_plmn_selection_mode), &resp);\r
+       }\r
+\r
+       if(tokens != NULL)\r
+               tcore_at_tok_free(tokens);\r
+\r
+       return;\r
+\r
+}\r
+\r
+static void on_response_search_network(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest *ur;\r
+       struct tresp_network_search resp;\r
+       int i = 0;\r
+       char* line=NULL;\r
+       const TcoreATResponse *atResp = data;\r
+       GSList *tokens = NULL;\r
+       GSList *network_token = NULL;\r
+       int AcT=0;\r
+       char* temp_plmn_info =NULL;\r
+       char *pResp = NULL;\r
+       int num_network_avail = 0;\r
+\r
+       memset(&resp, 0, sizeof(struct tresp_network_search));\r
+       resp.result = TCORE_RETURN_FAILURE;\r
+       resp.list_count = 0;\r
+\r
+       if(atResp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               if(atResp->lines) {\r
+                       line = (char*)atResp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       num_network_avail = g_slist_length(tokens);\r
+                       dbg(" length of tokens is %d\n", num_network_avail);\r
+                       if (num_network_avail < 1) {\r
+                               msg("invalid message");\r
+                               goto OUT;\r
+                       }\r
+               }\r
+                                       \r
+               resp.result = TCORE_RETURN_SUCCESS;\r
+               /*\r
+                *      +COPS: [list of supported (<stat>,long alphanumeric <oper>,short alphanumeric <oper>,numeric <oper>[,<AcT>])s]\r
+                *             [,,(list of supported <mode>s),(list of supported <format>s)]\r
+               */\r
+                       \r
+               /* (2,"IND airtel","airtel","40445",2,),(1,"IND airtel","airtel","40445",0,),(3,"TATA DOCOMO","TATA DO","405034",2,) */\r
+                       \r
+               for(i=0; ((i<num_network_avail) && (i<MAX_NETWORKS_MANUAL_SEARCH_SUPPORT)); i++)\r
+                       {\r
+                       /* (2,"IND airtel","airtel","40445",2,) */\r
+                       network_token = tcore_at_tok_new(g_slist_nth_data(tokens, i));\r
+\r
+                       pResp = (tcore_at_tok_nth(network_token, 0));\r
+                       if(pResp != NULL){\r
+                               dbg("status : %s",pResp);\r
+                               resp.list[i].status = (enum telephony_network_plmn_status)atoi(pResp);\r
+                       }\r
+\r
+                       if ((pResp = tcore_at_tok_nth(network_token, 1)))\r
+                       { /* Long Aplha name */\r
+                               dbg("Long Aplha name : %s",pResp);\r
+                               \r
+                               if(strlen(pResp) > 0)\r
+                                       /* Strip off starting quote & ending quote */\r
+                                       strncpy(resp.list[i].name, pResp+1, strlen(pResp)-2);\r
+                       }\r
+                       else if ((pResp = tcore_at_tok_nth(network_token, 2)))\r
+                       { \r
+                               dbg("Short Aplha name : %s",pResp);\r
+                               /* Short Aplha name */\r
+                               /* Strip off starting quote & ending quote */\r
+                               if(strlen(pResp) > 0)\r
+                                       strncpy(resp.list[i].name, pResp+1, strlen(pResp)-2);\r
+                       }\r
+\r
+                       /* PLMN ID */\r
+                       pResp = tcore_at_tok_nth(network_token, 3);\r
+                       if(pResp != NULL)\r
+                       {\r
+                               dbg("PLMN ID : %s",pResp);\r
+                               if(strlen(pResp) > 0){\r
+                                       temp_plmn_info = malloc((strlen(pResp) - 2)+1); /* 1 extra character for NULL storage */\r
+                                       memset(temp_plmn_info, 0x00, strlen(pResp) -2+1);\r
+                                       \r
+                                       /* Strip off starting quotes & ending quotes */\r
+                                       strncpy(temp_plmn_info, pResp+1, strlen(pResp)-2);\r
+                               }\r
+                       }\r
+\r
+                       memcpy(resp.list[i].plmn, temp_plmn_info, 6);\r
+                       if (resp.list[i].plmn[5] == '#')\r
+                               resp.list[i].plmn[5] = '\0';\r
+\r
+                       /* Parse Access Technology */\r
+                       if((pResp = tcore_at_tok_nth(tokens, 4)))\r
+                       {\r
+                               if(strlen(pResp) > 0){\r
+                                       AcT = atoi(pResp);\r
+                               \r
+                                       if (0 == AcT)\r
+                                               resp.list[i].act = NETWORK_ACT_GSM;\r
+                                       else if(2 == AcT)\r
+                                               resp.list[i].act = NETWORK_ACT_UMTS;\r
+                               }\r
+                       }\r
+\r
+                       dbg("Operator [%d] :: stat = %d, Name =%s, plmnId = %s, AcT=%d\n", resp.list_count, resp.list[i].status, resp.list[i].name, resp.list[i].plmn, resp.list[i].act);\r
+                       resp.list_count++;\r
+\r
+                       tcore_at_tok_free(network_token);\r
+                       free(temp_plmn_info);\r
+               }\r
+       }\r
+       else\r
+       {\r
+                       dbg("RESPONSE NOK");\r
+                       resp.result = TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+OUT:\r
+       ur = tcore_pending_ref_user_request(p);\r
+       if (ur) {\r
+               tcore_user_request_send_response(ur, TRESP_NETWORK_SEARCH, sizeof(struct tresp_network_search), &resp);\r
+       }\r
+       tcore_at_tok_free(tokens);\r
+       return;\r
+}\r
+\r
+static void on_response_set_umts_band(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *atResp = data;\r
+\r
+       dbg("On Response Set UMTS Band");\r
+       \r
+       if(atResp->success > 0) {\r
+               dbg("Response OK");\r
+       }\r
+       else {\r
+               dbg("Response NOK");\r
+       }\r
+\r
+       dbg("Wait for response of XRAT before sending final band setting response to AP");\r
+       return;\r
+}\r
+\r
+\r
+static void on_response_set_gsm_band(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *atResp = data;\r
+\r
+       dbg("On Response Set GSM Band");\r
+       if(atResp->success > 0){\r
+               dbg("Response OK");\r
+       }\r
+       else{\r
+               dbg("Response NOK");\r
+       }\r
+\r
+       dbg("Wait for response of XRAT before sending final band setting response to AP");\r
+       return;\r
+}\r
+\r
+static void on_response_get_umts_band(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *atResp = data;\r
+       GSList *tokens = NULL;\r
+       const char *line=NULL;\r
+       int total_umts_bands = 0;\r
+       int i = 0;\r
+       char *band_token = NULL;\r
+       char umts_band[20] = {0};\r
+       char umts_band_1 = 0;\r
+       char umts_band_2 = 0;\r
+       char umts_band_5 = 0;\r
+       UserRequest *ur = NULL;\r
+       struct tresp_network_get_band resp = {0};\r
+       \r
+       dbg("Entry on_response_get_umts_band");\r
+\r
+       resp.mode = NETWORK_BAND_MODE_PREFERRED;\r
+       resp.result = TCORE_RETURN_SUCCESS;\r
+\r
+       if(atResp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               if(atResp->lines) {\r
+                       line = (char*)atResp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       total_umts_bands = g_slist_length(tokens);\r
+                       dbg("Total UMTS bands enabled are : %d\n", total_umts_bands);\r
+                       if (total_umts_bands < 1) {\r
+                               goto OUT;\r
+                       }\r
+               }\r
+       }\r
+       else\r
+       {\r
+               dbg("RESPONSE NOK");\r
+               goto OUT;\r
+       }\r
+\r
+       for (i = 0; i<total_umts_bands; i++)\r
+       {\r
+               band_token = tcore_at_tok_nth(tokens, i);\r
+\r
+               if(band_token == NULL)\r
+                       continue;\r
+               \r
+               memset(umts_band, 0x00, sizeof(umts_band));\r
+\r
+               if(atoi(band_token) == 0){ /* 0 means UMTS automatic */\r
+                       umts_band_1 = umts_band_2 = umts_band_5 = TRUE;\r
+                       break;\r
+               }\r
+               \r
+               /* Strip off starting quotes & ending quotes */\r
+               strncpy(umts_band, band_token+1, strlen(band_token)-2);\r
+\r
+               if (!strcmp(umts_band, "UMTS_BAND_I")) {\r
+                       umts_band_1 = TRUE;\r
+               }\r
+               else if (!strcmp(umts_band, "UMTS_BAND_II")){\r
+                       umts_band_2 = TRUE;\r
+               }\r
+               else if (!strcmp(umts_band, "UMTS_BAND_II")){\r
+                       umts_band_5 = TRUE;\r
+               }\r
+               else{\r
+                        /* Telephony is not interest */\r
+                        dbg("Telephony is not interested in %s band", umts_band);\r
+               }\r
+       }\r
+\r
+OUT:\r
+       if((umts_band_1) && (umts_band_2) && (umts_band_5)){\r
+               resp.band = NETWORK_BAND_TYPE_WCDMA;\r
+       }\r
+       else if (umts_band_1){\r
+               resp.band = NETWORK_BAND_TYPE_WCDMA2100;\r
+       }\r
+       else if (umts_band_2){\r
+               resp.band = NETWORK_BAND_TYPE_WCDMA1900;\r
+       }\r
+       else if (umts_band_5){\r
+               resp.band = NETWORK_BAND_TYPE_WCDMA850;\r
+       }\r
+       else{\r
+               resp.result = TCORE_RETURN_FAILURE;\r
+       }\r
+       \r
+       dbg("Final resp.band sent to TS = %d", resp.band);\r
+\r
+       ur = tcore_pending_ref_user_request(p);\r
+       if (ur) {\r
+               tcore_user_request_send_response(ur, TRESP_NETWORK_GET_BAND, sizeof(struct tresp_network_get_band), &resp);\r
+       }\r
+       \r
+       if(tokens != NULL)\r
+               tcore_at_tok_free(tokens);\r
+       \r
+       dbg("Exit on_response_get_umts_band");\r
+       return;\r
+}\r
+\r
+static void on_response_get_gsm_band(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       struct tresp_network_get_band resp = {0};\r
+       const TcoreATResponse *atResp = data;\r
+       GSList *tokens = NULL;\r
+       int total_gsm_bands = 0;\r
+       const char *line=NULL;\r
+       int i = 0;\r
+       char *band_token = NULL;\r
+       UserRequest *ur = NULL;\r
+       int gsm_850 = 0;\r
+       int gsm_900 = 0;\r
+       int gsm_1800 = 0;\r
+       int gsm_1900 = 0;\r
+       \r
+       dbg("Entry on_response_get_gsm_band");\r
+       \r
+       resp.mode = NETWORK_BAND_MODE_PREFERRED;\r
+       resp.result = TCORE_RETURN_SUCCESS;\r
+               \r
+       if(atResp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               if(atResp->lines) {\r
+                       line = (char*)atResp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       total_gsm_bands = g_slist_length(tokens);\r
+                       dbg("Total GSM bands enabled are : %d\n", total_gsm_bands);\r
+                       if (total_gsm_bands < 1)\r
+                               goto OUT;\r
+               }\r
+       }\r
+\r
+       for (i = 0; i<total_gsm_bands; i++)\r
+       {\r
+               band_token = tcore_at_tok_nth(tokens, i);\r
+\r
+               if(band_token == NULL)\r
+                       continue;\r
+\r
+               if(atoi(band_token) == 0){ /* 0 means GSM automatic */\r
+                       gsm_850 = gsm_900 = gsm_1800 = gsm_1900 = TRUE;\r
+                       break;\r
+               }\r
+               \r
+               switch(atoi(band_token)) {\r
+                       case AT_GSM_XBANDSEL_850:\r
+                               gsm_850 = TRUE;\r
+                               break;\r
+\r
+                       case AT_GSM_XBANDSEL_900:\r
+                               gsm_900 = TRUE;\r
+                               break;\r
+\r
+                       case AT_GSM_XBANDSEL_1800:\r
+                               gsm_1800 = TRUE;\r
+                               break;\r
+                               \r
+                       case AT_GSM_XBANDSEL_1900:\r
+                               gsm_1900 = TRUE;\r
+                               break;\r
+                                               \r
+                       default:\r
+                               break;\r
+               }\r
+       }\r
+       \r
+OUT:\r
+\r
+       if(gsm_850 && gsm_900 && gsm_1800 && gsm_1900) {\r
+               resp.band = NETWORK_BAND_TYPE_GSM;\r
+       }\r
+       else if (gsm_850 && gsm_1900) {\r
+               resp.band = NETWORK_BAND_TYPE_GSM_850_1900;\r
+       }\r
+       else if (gsm_900 && gsm_1800) {\r
+               resp.band = NETWORK_BAND_TYPE_GSM_900_1800;\r
+       }\r
+       else if (gsm_1900) {\r
+               resp.band = NETWORK_BAND_TYPE_GSM1900;\r
+       }\r
+       else if (gsm_850) {\r
+               resp.band = NETWORK_BAND_TYPE_GSM850;\r
+       }\r
+       else if (gsm_1800) {\r
+               resp.band = NETWORK_BAND_TYPE_GSM1800;\r
+       }\r
+       else if (gsm_900) {\r
+               resp.band = NETWORK_BAND_TYPE_GSM900;\r
+       }\r
+       else{\r
+               resp.result = TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+       dbg("Final resp.band sent to TS = %d", resp.band);\r
+\r
+       ur = tcore_pending_ref_user_request(p);\r
+       if (ur) {\r
+               tcore_user_request_send_response(ur, TRESP_NETWORK_GET_BAND, sizeof(struct tresp_network_get_band), &resp);\r
+       }\r
+\r
+       if(tokens != NULL)\r
+               tcore_at_tok_free(tokens);\r
+       \r
+       dbg("Exit on_response_get_gsm_band");\r
+       return;\r
+}\r
+\r
+\r
+static void on_response_get_xrat(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       TcoreHal *h = NULL;\r
+       UserRequest *ur = NULL;\r
+\r
+       TcoreATRequest *atreq;\r
+       char*cmd_str = NULL;\r
+       UserRequest *dup_ur = NULL;\r
+       const TcoreATResponse *atResp = data;\r
+       const char *line=NULL;\r
+       char *pResp = NULL;\r
+       GSList *tokens = NULL;\r
+       TcorePending *pending = NULL;\r
+       CoreObject *o = NULL;\r
+       int cp_xrat = 0;\r
+       struct tresp_network_get_band resp = {0};\r
+\r
+       dbg("Enter on_response_get_xrat !!");\r
+\r
+       resp.mode = NETWORK_BAND_MODE_PREFERRED;\r
+\r
+       ur = tcore_pending_ref_user_request(p);\r
+       h = tcore_object_get_hal(tcore_pending_ref_core_object(p));\r
+       o = tcore_pending_ref_core_object(p);\r
+\r
+       if(atResp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               if(atResp->lines) {\r
+                       line = (char*)atResp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       if ( g_slist_length(tokens) < 1){\r
+                               msg("invalid message");\r
+                               goto OUT;\r
+                       }\r
+               }\r
+\r
+               if((pResp = tcore_at_tok_nth(tokens, 0))){\r
+                       cp_xrat = atoi(pResp);\r
+\r
+                       if((cp_xrat == AT_XRAT_DUAL)){ /* mode is Dual, send reply to Telephony */\r
+                               resp.result = TCORE_RETURN_SUCCESS;\r
+                               resp.band = NETWORK_BAND_TYPE_ANY;\r
+                               \r
+                               ur = tcore_pending_ref_user_request(p);\r
+                               if (ur) {\r
+                                       tcore_user_request_send_response(ur, TRESP_NETWORK_GET_BAND, sizeof(struct tresp_network_get_band), &resp);\r
+                               }\r
+                               goto OUT;\r
+                       }\r
+                       else if((cp_xrat == AT_XRAT_UMTS)){\r
+                               /* Get UMTS Band Information */\r
+                               dup_ur = tcore_user_request_ref(ur); /* duplicate user request for AT+XUBANDSEL */\r
+                               cmd_str = g_strdup_printf("AT+XUBANDSEL?");\r
+                               atreq = tcore_at_request_new(cmd_str, "+XUBANDSEL", TCORE_AT_SINGLELINE);\r
+                               pending = tcore_pending_new(o, 0);\r
+                               tcore_pending_set_request_data(pending, 0, atreq);\r
+                               tcore_pending_set_response_callback(pending, on_response_get_umts_band, NULL);\r
+                               tcore_pending_link_user_request(pending, ur);\r
+                               tcore_pending_set_send_callback(pending, on_confirmation_network_message_send, NULL);\r
+                               tcore_hal_send_request(h, pending);\r
+                       }\r
+                       else if((cp_xrat == AT_XRAT_UMTS)){\r
+                               /* Get GSM Band Information */\r
+                               dup_ur = tcore_user_request_ref(ur); /* duplicate user request for AT+XBANDSEL */\r
+                               cmd_str = g_strdup_printf("AT+XBANDSEL?");\r
+                               atreq = tcore_at_request_new(cmd_str, "+XBANDSEL", TCORE_AT_SINGLELINE);\r
+                               pending = tcore_pending_new(o, 0);\r
+                               tcore_pending_set_request_data(pending, 0, atreq);\r
+                               tcore_pending_set_response_callback(pending, on_response_get_gsm_band, NULL);\r
+                               tcore_pending_link_user_request(pending, dup_ur);\r
+                               tcore_pending_set_send_callback(pending, on_confirmation_network_message_send, NULL);\r
+                               tcore_hal_send_request(h, pending);\r
+                       }\r
+               }\r
+       }\r
+       else {\r
+               dbg("RESPONSE NOK");\r
+               \r
+               resp.result = TCORE_RETURN_FAILURE;\r
+               resp.band = NETWORK_BAND_TYPE_ANY;\r
+               \r
+               ur = tcore_pending_ref_user_request(p);\r
+               if (ur) {\r
+                       tcore_user_request_send_response(ur, TRESP_NETWORK_GET_BAND, sizeof(struct tresp_network_get_band), &resp);\r
+               }\r
+       }\r
+OUT:\r
+       \r
+       if(tokens != NULL)\r
+               tcore_at_tok_free(tokens);\r
+       \r
+       dbg("Exit on_response_get_xrat !!");\r
+       \r
+       return;\r
+}\r
+\r
+\r
+static void on_response_set_xrat(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest *ur = NULL;\r
+       struct tresp_network_set_band resp = {0};\r
+       const TcoreATResponse *atResp = data;\r
+\r
+       dbg("On Response Set XRAT");\r
+       \r
+       if(atResp->success > 0){\r
+               dbg("Response OK");\r
+               resp.result = TCORE_RETURN_SUCCESS;\r
+       }else{\r
+               dbg("Response NOK");\r
+               resp.result = TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+       ur = tcore_pending_ref_user_request(p);\r
+       if (ur) {\r
+               tcore_user_request_send_response(ur, TRESP_NETWORK_SET_BAND, sizeof(struct tresp_network_set_band), &resp);\r
+       }\r
+\r
+       return;\r
+}\r
+\r
+static void on_response_set_preferred_plmn(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest *ur = NULL;\r
+       struct tresp_network_set_preferred_plmn resp = {0};\r
+       const TcoreATResponse *atResp = data;\r
+\r
+       dbg("ENTER on_response_set_preferred_plmn");\r
+\r
+       if(atResp->success > 0)\r
+       {\r
+               dbg("Response OK");\r
+               resp.result = TCORE_RETURN_SUCCESS;\r
+       }else\r
+       {\r
+               dbg("Response NOK");\r
+               resp.result = TCORE_RETURN_FAILURE;\r
+       }\r
+       \r
+       ur = tcore_pending_ref_user_request(p);\r
+       if (ur) {\r
+               tcore_user_request_send_response(ur, TRESP_NETWORK_SET_PREFERRED_PLMN, sizeof(struct tresp_network_set_preferred_plmn), &resp);\r
+       }\r
+\r
+       dbg("Exit on_response_set_preferred_plmn");\r
+       return;\r
+}\r
+\r
+static void on_response_get_nitz_name(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+\r
+       \r
+       const TcoreATResponse *atResp = data;\r
+       GSList *tokens = NULL;\r
+       const char *line=NULL;\r
+       CoreObject *o = NULL;\r
+       struct tnoti_network_identity noti;\r
+       int nol = 0;\r
+       int count = 0;\r
+       int net_name_type = 0;\r
+       char *pResp = NULL;\r
+       \r
+       dbg("Entry on_response_get_nitz_name (+XCOPS)");\r
+       o  = tcore_pending_ref_core_object(p);\r
+       if(atResp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+\r
+               if(atResp->lines) {\r
+                       nol = g_slist_length(atResp->lines);\r
+                       if(nol > 3){\r
+                               msg("invalid message");\r
+                               goto OUT;\r
+                       }\r
+\r
+                       for(count =0; count < nol; count++){\r
+                               //parse each line \r
+                               line = g_slist_nth_data(atResp->lines, count);\r
+                               tokens = tcore_at_tok_new(line);\r
+                               dbg("line %d start---------------",count);\r
+\r
+                               if ((pResp = tcore_at_tok_nth(tokens, 0))){\r
+                                       net_name_type = atoi(pResp);\r
+                                       dbg("Net name type  : %d", net_name_type);\r
+                                       \r
+                                       switch(net_name_type)\r
+                                       {\r
+                                               case 0: /* plmn_id (mcc, mnc) */\r
+                                                       if ((pResp = tcore_at_tok_nth(tokens, 1))){\r
+                                                               strncpy(noti.plmn, pResp+1, strlen(pResp)-2); /* skip quotes (") while copying */\r
+                                                       }\r
+                                                       break;\r
+\r
+                                                case 5: /* Short Nitz name*/\r
+                                                       if ((pResp = tcore_at_tok_nth(tokens, 1))){\r
+                                                               strncpy(noti.short_name, pResp+1, strlen(pResp)-2); /* skip quotes (") while copying */\r
+                                                       }\r
+                                                       break;\r
+\r
+                                               case 6: /* Full Nitz name */\r
+                                                       if ((pResp = tcore_at_tok_nth(tokens, 1))){\r
+                                                               strncpy(noti.full_name, pResp+1, strlen(pResp)-2); /* skip quotes (") while copying */\r
+                                                       }\r
+                                                       break;\r
+\r
+                                               default:\r
+                                                       break;\r
+                                       }\r
+                               }\r
+                               if(tokens != NULL)\r
+                                       tcore_at_tok_free(tokens);\r
+                       }\r
+                       \r
+                       tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_NETWORK_IDENTITY,\r
+                               sizeof(struct tnoti_network_identity), &noti);\r
+               }\r
+       }\r
+       else{\r
+               dbg("RESPONSE NOK");\r
+       }\r
+\r
+OUT:\r
+       dbg("Exit on_response_get_nitz_name");\r
+\r
+}\r
+\r
+static void on_response_get_preferred_plmn(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest *ur;\r
+       int i = 0;\r
+       char* line=NULL;\r
+       const TcoreATResponse *atResp = data;\r
+       GSList *tokens = NULL;\r
+       char temp_plmn_info[17] = {0};\r
+       char *pResp = NULL;\r
+       int plmn_format = 0;\r
+       \r
+       struct tresp_network_get_preferred_plmn resp = {0};\r
+       int total_lines = 0;\r
+       int GSM_AcT2 = 0, GSM_Compact_AcT2= 0, UTRAN_AcT2 = 0;\r
+\r
+       dbg("Entry on_response_get_preferred_plmn");\r
+\r
+       if(atResp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               if(atResp->lines) {\r
+                       total_lines = g_slist_length(atResp->lines);\r
+                       dbg("Total number of network present in Preferred PLMN list is %d\n", total_lines);\r
+\r
+                       if (total_lines < 1) {\r
+                               msg("invalid message");\r
+                               goto OUT;\r
+                       }\r
+\r
+                       if (total_lines >= MAX_NETWORKS_PREF_PLMN_SUPPORT)\r
+                               total_lines = MAX_NETWORKS_PREF_PLMN_SUPPORT;\r
+                       \r
+/*\r
++COPL: <index1>,<format>,<oper1>[,<GSM_AcT1>,<GSM_Compact_AcT1>,<UTRAN_AcT1>,<E-UTRAN_AcT1>] [<CR><LF>\r
++CPOL: <index2>,<format>,<oper2>[,<GSM_AcT2>,<GSM_Compact_AcT2>,<UTRAN_AcT2>,<E-UTRAN_AcT2>]\r
+*/\r
+\r
+                       resp.result = TCORE_RETURN_SUCCESS;\r
+\r
+                       for (i=0; i<total_lines; i++) {\r
+                               /* Take each line response at a time & parse it */\r
+                               line = tcore_at_tok_nth(atResp->lines, i);\r
+                               tokens = tcore_at_tok_new(line);\r
+\r
+                               /* <index2>,<format>,<oper2>[,<GSM_AcT2>,<GSM_Compact_AcT2>,<UTRAN_AcT2>,<E-UTRAN_AcT2>] */\r
+\r
+                               /* EF Index */\r
+                               if ((pResp = tcore_at_tok_nth(tokens, 0)))\r
+                               {\r
+                                       dbg("Index : %s",pResp);                                        \r
+                                       resp.list[i].ef_index = atoi(pResp);\r
+                               }\r
+                               /* Format */\r
+                               if((pResp = tcore_at_tok_nth(tokens, 1)))\r
+                               {\r
+                                       dbg("format : %s",pResp);\r
+                                       plmn_format = atoi(pResp);\r
+                               }\r
+\r
+                               /* Operator PLMN ID */\r
+                               if((pResp = tcore_at_tok_nth(tokens, 2)))\r
+                               {\r
+                                       dbg("plmn ID : %s",pResp);\r
+\r
+                                       if(strlen(pResp) > 0){\r
+                                               strncpy(temp_plmn_info, pResp+1, (strlen(pResp))-2);\r
+                                       \r
+                                               //Get only PLMN ID\r
+                                               if (plmn_format == 2)\r
+                                               {\r
+                                                       //cp_plmn = util_hexStringToBytes(temp_plmn_info);\r
+                                               \r
+                                                       if (strncmp((char *)temp_plmn_info, "000000", 6) == 0)\r
+                                                               continue;\r
+                               \r
+                                                       memcpy(resp.list[i].plmn, temp_plmn_info, 6);\r
+                                                       if (resp.list[i].plmn[5] == '#')\r
+                                                               resp.list[i].plmn[5] = '\0';\r
+\r
+                                                       //free(cp_plmn);\r
+                                               }\r
+                                       }\r
+                               }\r
+\r
+                               if((pResp = tcore_at_tok_nth(tokens, 3))){\r
+                                       dbg("GSM_AcT2  : %s",pResp);\r
+                                       GSM_AcT2 = atoi(pResp);\r
+                               }\r
+                                       \r
+                               if((pResp = tcore_at_tok_nth(tokens, 4))){\r
+                                       dbg("GSM_Compact AcT2  : %s",pResp);\r
+                                       GSM_Compact_AcT2 = atoi(pResp);\r
+                               }\r
+       \r
+                               if((pResp = tcore_at_tok_nth(tokens, 5))){\r
+                                       dbg("UTRAN_AcT2  : %s",pResp);\r
+                                       UTRAN_AcT2 = atoi(pResp);\r
+                               }\r
+\r
+                               if(UTRAN_AcT2 && (GSM_AcT2 ||GSM_Compact_AcT2))\r
+                                       resp.list[i].act = NETWORK_ACT_GSM_UTRAN;\r
+                               else if (UTRAN_AcT2)\r
+                                       resp.list[i].act = NETWORK_ACT_UMTS;\r
+                               else if (GSM_AcT2 || GSM_Compact_AcT2)\r
+                                       resp.list[i].act = NETWORK_ACT_GPRS;\r
+\r
+                               (resp.list_count)++;\r
+\r
+                               tcore_at_tok_free(tokens);\r
+                       }\r
+               }\r
+       }\r
+OUT:\r
+       ur = tcore_pending_ref_user_request(p);\r
+       if (ur) {\r
+               tcore_user_request_send_response(ur, TRESP_NETWORK_GET_PREFERRED_PLMN, sizeof(struct tresp_network_get_preferred_plmn), &resp);\r
+       }\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void on_response_get_serving_network(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse* resp = data;\r
+       UserRequest *ur;\r
+       struct tresp_network_get_serving_network Tresp = {0};\r
+       char plmn[7] = {0};\r
+       char *long_plmn_name = NULL;\r
+       char *short_plmn_name = NULL;\r
+       CoreObject *o;\r
+       GSList *tokens=NULL;\r
+       const char *line;\r
+       int network_mode = -1;\r
+       int plmn_format = -1;\r
+       int AcT = -1;\r
+       struct tnoti_network_identity noti; \r
+       char *pResp = NULL;\r
+       int nol, count =0;\r
+\r
+       o = tcore_pending_ref_core_object(p);\r
+\r
+       if(resp->success <= 0){\r
+               dbg("RESPONSE NOK");\r
+\r
+               ur = tcore_pending_ref_user_request(p);\r
+               if (ur) {\r
+                       Tresp.result = TCORE_RETURN_FAILURE;            \r
+                       tcore_user_request_send_response(ur, TRESP_NETWORK_GET_SERVING_NETWORK, sizeof(struct tresp_network_get_serving_network), &Tresp);\r
+               }\r
+\r
+               return;\r
+       }else{\r
+       dbg("RESPONSE OK");\r
+               nol = g_slist_length(resp->lines);\r
+               dbg("nol : %d", nol);\r
+\r
+               for(count =0; count < nol; count++){\r
+                       //parse each line \r
+                               line = g_slist_nth_data(resp->lines, count);\r
+               tokens = tcore_at_tok_new(line);\r
+                       dbg("line %d start---------------",count);\r
+                       //mode\r
+               if((pResp = tcore_at_tok_nth(tokens, 0))){\r
+                       dbg("mode  : %s",pResp);\r
+                       network_mode = atoi(pResp);\r
+               }\r
+\r
+                       //format (optional)                     \r
+               if((pResp = tcore_at_tok_nth(tokens, 1)))\r
+               {\r
+                       dbg("format  : %s",pResp);\r
+                                       if(strlen(pResp)>0)\r
+                       plmn_format = atoi(pResp);\r
+               }\r
+\r
+                       //plmn \r
+               switch(plmn_format)\r
+               {\r
+                       case AT_COPS_FORMAT_LONG_ALPHANUMERIC: \r
+                               if((pResp = tcore_at_tok_nth(tokens, 2)))\r
+                               {               \r
+                                       dbg("long PLMN  : %s",pResp);\r
+                                       if(strlen(pResp) > 0){\r
+                                               long_plmn_name = malloc((strlen(pResp) - 2)+1); /* 1 extra character for NULL storage */\r
+                                               memset(long_plmn_name, 0x00, strlen(pResp) -2+1);\r
+                                               /* Strip off starting quotes & ending quotes */\r
+                                               strncpy(long_plmn_name, pResp+1, strlen(pResp)-2);\r
+\r
+                                               //set network name into po\r
+                                               tcore_network_set_network_name(o,TCORE_NETWORK_NAME_TYPE_FULL,long_plmn_name);\r
+                                       }\r
+                               }\r
+                               break;\r
+               \r
+                               case AT_COPS_FORMAT_SHORT_ALPHANUMERIC:\r
+                                       if((pResp = tcore_at_tok_nth(tokens, 2)))\r
+                                       {\r
+                                               dbg("short PLMN  : %s",pResp);\r
+                                               if(strlen(pResp)>0){\r
+                                                       short_plmn_name = malloc((strlen(pResp) - 2)+1); /* 1 extra character for NULL storage */\r
+                                                       memset(short_plmn_name, 0x00, strlen(pResp) -2+1);\r
+                                                       /* Strip off starting quotes & ending quotes */\r
+                                                       strncpy(short_plmn_name, pResp+1, strlen(pResp)-2);\r
+                                                       \r
+                                                       //set network name into po                                                      \r
+                                                       tcore_network_set_network_name(o,TCORE_NETWORK_NAME_TYPE_SHORT,short_plmn_name);                                                        \r
+                                               }\r
+                                       }                                       \r
+                               break;\r
+\r
+                               case AT_COPS_FORMAT_NUMERIC:\r
+                                       if((pResp = tcore_at_tok_nth(tokens, 2)))\r
+                                       {\r
+                                               dbg("numeric : %s", pResp);\r
+                                               if(strlen(pResp)>0){\r
+                                                       memset(plmn, 0, 7);\r
+                                                       /* Strip off starting quotes & ending quotes */\r
+                                                       strncpy(plmn, pResp+1, strlen(pResp)-2);                                                        \r
+                                                       tcore_network_set_plmn(o,plmn);\r
+                                               }\r
+                                       }\r
+                               break;\r
+       \r
+                               default:\r
+                               break;\r
+                       }\r
+\r
+                       //act \r
+                       if((pResp = tcore_at_tok_nth(tokens, 3)))\r
+                       {               \r
+                               dbg("AcT  : %s",pResp);\r
+                               if(strlen(pResp)>0){\r
+                                       AcT = atoi(pResp);\r
+                                       tcore_network_set_access_technology(o, lookup_tbl_access_technology[AcT]);\r
+                               }\r
+                       }\r
+\r
+                       tcore_at_tok_free(tokens);\r
+               }\r
+\r
+               memcpy(Tresp.plmn, plmn, 7);\r
+               tcore_network_get_access_technology(o, &(Tresp.act)); \r
+               tcore_network_get_lac(o, &(Tresp.gsm.lac)); \r
+\r
+               ur = tcore_pending_ref_user_request(p);\r
+               if (ur) {\r
+                       Tresp.result = TCORE_RETURN_SUCCESS;            \r
+                       tcore_user_request_send_response(ur, TRESP_NETWORK_GET_SERVING_NETWORK, sizeof(struct tresp_network_get_serving_network), &Tresp);\r
+               }\r
+               else\r
+               {\r
+                       /* Network change noti */\r
+                       struct tnoti_network_change network_change;\r
+\r
+                       memset(&network_change, 0, sizeof(struct tnoti_network_change));\r
+                       memcpy(network_change.plmn, plmn, 7);\r
+                       tcore_network_get_access_technology(o, &(network_change.act));\r
+                       tcore_network_get_lac(o, &(network_change.gsm.lac));\r
+\r
+                       tcore_server_send_notification(tcore_plugin_ref_server(tcore_pending_ref_plugin(p)), tcore_pending_ref_core_object(p),\r
+                               TNOTI_NETWORK_CHANGE, sizeof(struct tnoti_network_change), &network_change);\r
+                       dbg("dbg.. network_change.plmn  : %s",network_change.plmn);\r
+                       dbg("dbg.. network_change.act  : %d",network_change.act);                                               \r
+                       dbg("dbg.. network_change.gsm.lac  : %d",network_change.gsm.lac);\r
+\r
+                       if((AT_COPS_MODE_DEREGISTER !=network_mode) &&\r
+                               (AT_COPS_MODE_SET_ONLY != network_mode)){\r
+                               /*Network identity noti*/\r
+                               memset(&noti, 0x0, sizeof(struct tnoti_network_change));\r
+                               if(long_plmn_name)\r
+                                       memcpy(noti.full_name, long_plmn_name, MIN(33, strlen(long_plmn_name)) );\r
+                               if(short_plmn_name)\r
+                                       memcpy(noti.short_name, short_plmn_name, MIN(17, strlen(long_plmn_name)) );\r
+                               memcpy(noti.plmn, plmn,7);\r
+                               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), \r
+                                       o, TNOTI_NETWORK_IDENTITY,      sizeof(struct tnoti_network_identity), &noti);                  \r
+                               dbg("dbg.. noti.short_name  : %s",noti.short_name);\r
+                               dbg("dbg.. noti.full_name  : %s",noti.full_name);                                               \r
+                               dbg("dbg.. noti.plmn  : %s",noti.plmn); \r
+                       }\r
+               }\r
+\r
+               if(long_plmn_name)\r
+                       free(long_plmn_name);\r
+               if(short_plmn_name)\r
+                       free(short_plmn_name);\r
+       }\r
+\r
+       return;\r
+\r
+}\r
+\r
+static gboolean on_event_ps_network_regist(CoreObject *o, const void *data, void *user_data)\r
+{\r
+       struct tnoti_network_registration_status regist_status;\r
+       enum telephony_network_service_domain_status cs_status;\r
+       enum telephony_network_service_domain_status ps_status;\r
+       enum telephony_network_service_type service_type;\r
+       enum telephony_network_access_technology act = NETWORK_ACT_UNKNOWN;\r
+       struct tnoti_network_location_cellinfo net_lac_cell_info = {0};\r
+       struct tnoti_ps_protocol_status noti = {0};\r
+       unsigned char svc_domain = NETWORK_SERVICE_DOMAIN_PS;\r
+       int stat= 0, AcT=0;\r
+       unsigned int lac=0xffff, ci=0xffff;\r
+       unsigned int rac = 0xffff;\r
+       GSList* tokens = NULL;\r
+       char* pResp;\r
+       char *line = NULL;\r
+       GSList *lines = NULL;\r
+\r
+       lines = (GSList*)data;\r
+       if (1 != g_slist_length(lines)) {\r
+               dbg("unsolicited msg but multiple line");\r
+           goto OUT;\r
+       }\r
+       line  = (char*)(lines->data);\r
+       dbg("+CGREG NOTI RECEIVED");\r
+\r
+/*\r
++CREG: <stat> [[,<lac>,<ci>[AcT]]\r
+\r
+Possible values of <stat> can be\r
+0 Not registered, ME is not currently searching a new operator to register to\r
+1 Registered, home network\r
+2 Not registered, but ME is currently searching a new operator to register\r
+3 Registration denied\r
+4 Unknown\r
+5 Registered, in roaming\r
+\r
+<lac>\r
+string type; two byte location area code in hexadecimal format (e.g. �00C3�)\r
+\r
+<ci>\r
+string type; four byte cell ID in hexadecimal format (e.g. �0000A13F�)\r
+\r
+<ACT>\r
+0 GSM\r
+2 UTRAN\r
+3 GSM w/EGPRS\r
+4 UTRAN w/HSDPA\r
+5 UTRAN w/HSUPA\r
+6 UTRAN w/HSDPA and HSUPA\r
+Note: <Act> is supporting from R7 and above Protocol Stack.\r
+\r
+<rac>: is R7 and above feature, string type; one byte routing area code in hexadecimal format.\r
+*/\r
+       if (line!=NULL)\r
+       {\r
+               tokens = tcore_at_tok_new(line);\r
+               if(g_slist_length(tokens) < 1) {\r
+                       msg("invalid message");\r
+                       goto OUT;\r
+               }\r
+\r
+               if(!(pResp = g_slist_nth_data(tokens, 0)))\r
+               {\r
+                       dbg("No  STAT in +CGREG");\r
+                       goto OUT;\r
+               }\r
+               else\r
+               {\r
+                       stat = atoi(pResp);     \r
+                       if((pResp = g_slist_nth_data(tokens, 1)))\r
+                               lac = atoi(pResp);\r
+\r
+                       if((pResp = g_slist_nth_data(tokens, 2)))\r
+                               ci = atoi(pResp);\r
+                       else\r
+                               dbg("No ci in +CGREG");\r
+                               \r
+                       if((pResp = g_slist_nth_data(tokens, 3)))\r
+                               AcT = atoi(pResp);\r
+                       else\r
+                               dbg("No AcT in +CGREG");\r
+                       \r
+                       if((pResp = g_slist_nth_data(tokens, 4)))\r
+                               rac = atoi(pResp);\r
+                       else\r
+                               dbg("No rac in +CGREG");\r
+               }\r
+\r
+\r
+               dbg("stat=%d, lac=0x%lx, ci=0x%lx, Act=%d, rac = 0x%x", stat, lac, ci, AcT, rac);\r
+\r
+               ps_status = lookup_tbl_net_status[stat];\r
+               \r
+               tcore_network_set_service_status(o, TCORE_NETWORK_SERVICE_DOMAIN_TYPE_PACKET, ps_status);\r
+               _ps_set(tcore_object_ref_plugin(o), ps_status);\r
+                       \r
+               tcore_network_get_service_status(o, TCORE_NETWORK_SERVICE_DOMAIN_TYPE_CIRCUIT, &cs_status);\r
+\r
+               act = lookup_tbl_access_technology[AcT];\r
+               tcore_network_set_access_technology(o, act);\r
+\r
+               if (stat == AT_CREG_STAT_REG_ROAM)\r
+                       tcore_network_set_roaming_state(o, TRUE);\r
+               else\r
+                       tcore_network_set_roaming_state(o, FALSE);\r
+\r
+               tcore_network_get_service_type(o, &service_type);\r
+               dbg("prev_service_type = 0x%x", service_type);\r
+               service_type = _get_service_type(service_type, svc_domain, act, cs_status, ps_status);\r
+               dbg("new_service_type = 0x%x", service_type);\r
+               tcore_network_set_service_type(o, service_type);\r
+\r
+               tcore_network_set_lac(o, lac);\r
+               tcore_network_set_cell_id(o, ci);\r
+               tcore_network_set_rac(o, rac);\r
+\r
+               net_lac_cell_info.lac = lac;\r
+               net_lac_cell_info.cell_id = ci;\r
+\r
+               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_NETWORK_LOCATION_CELLINFO,\r
+                               sizeof(struct tnoti_network_location_cellinfo), &net_lac_cell_info);\r
+\r
+               regist_status.cs_domain_status = cs_status;\r
+               regist_status.ps_domain_status = ps_status;\r
+               regist_status.service_type = service_type;\r
+               regist_status.roaming_status = tcore_network_get_roaming_state(o);\r
+\r
+               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o,\r
+                               TNOTI_NETWORK_REGISTRATION_STATUS, sizeof(struct tnoti_network_registration_status), &regist_status);\r
+\r
+               if(service_type == NETWORK_SERVICE_TYPE_HSDPA)\r
+                       noti.status = TELEPHONY_HSDPA_ON;\r
+               else\r
+                       noti.status = TELEPHONY_HSDPA_OFF;\r
+               \r
+               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_PS_PROTOCOL_STATUS,\r
+               sizeof(struct tnoti_ps_protocol_status), &noti);\r
+\r
+               /* Get PLMN ID needed to application */\r
+               //get_serving_network(o, NULL);\r
+\r
+\r
+       }\r
+       else\r
+       {\r
+               dbg("Response NOK");\r
+       }\r
+\r
+OUT:\r
+       if(NULL!=tokens)\r
+               tcore_at_tok_free(tokens);\r
+       return TRUE;\r
+}\r
+\r
+static gboolean on_event_cs_network_regist(CoreObject *o, const void *event_info, void *user_data)\r
+{\r
+       GSList *lines = NULL;\r
+       char *line = NULL;\r
+       struct tnoti_network_registration_status regist_status;\r
+       enum telephony_network_service_domain_status cs_status;\r
+       enum telephony_network_service_domain_status ps_status;\r
+       enum telephony_network_service_type service_type;\r
+       enum telephony_network_access_technology act = NETWORK_ACT_UNKNOWN;\r
+       struct tnoti_network_location_cellinfo net_lac_cell_info = {0};\r
+\r
+       \r
+       unsigned char svc_domain = NETWORK_SERVICE_DOMAIN_CS;\r
+       int stat= 0, AcT=0;\r
+       unsigned int lac=0xffff, ci=0xffff;\r
+       GSList* tokens = NULL;\r
+       char* pResp;\r
+\r
+       lines = (GSList*)event_info;\r
+       if (1 != g_slist_length(lines)) {\r
+               dbg("unsolicited msg but multiple line");\r
+           goto OUT;\r
+       }\r
+       line  = (char*)(lines->data);\r
+\r
+       dbg("+CREG NOTI RECEIVED");\r
+\r
+/*\r
++CREG: <stat> [[,<lac>,<ci>[AcT]]\r
+\r
+Possible values of <stat> can be\r
+0 Not registered, ME is not currently searching a new operator to register to\r
+1 Registered, home network\r
+2 Not registered, but ME is currently searching a new operator to register\r
+3 Registration denied\r
+4 Unknown\r
+5 Registered, in roaming\r
+\r
+<lac>\r
+string type; two byte location area code in hexadecimal format (e.g. �00C3�)\r
+\r
+<ci>\r
+string type; four byte cell ID in hexadecimal format (e.g. �0000A13F�)\r
+\r
+<ACT>\r
+0 GSM\r
+2 UTRAN\r
+3 GSM w/EGPRS\r
+4 UTRAN w/HSDPA\r
+5 UTRAN w/HSUPA\r
+6 UTRAN w/HSDPA and HSUPA\r
+Note: <Act> is supporting from R7 and above Protocol Stack.\r
+*/\r
+       if (line!=NULL)\r
+       {\r
+               tokens = tcore_at_tok_new(line);\r
+               if(g_slist_length(tokens) < 1) {\r
+                       msg("invalid message");\r
+                       goto OUT;\r
+               }\r
+\r
+               if(!(pResp = g_slist_nth_data(tokens, 0)))\r
+               {\r
+                       dbg("No  STAT in +CREG");\r
+                       goto OUT;\r
+               }\r
+               else\r
+               {\r
+                       stat = atoi(pResp);     \r
+                       if((pResp = g_slist_nth_data(tokens, 1)))\r
+                               lac = atoi(pResp);\r
+\r
+                       if((pResp = g_slist_nth_data(tokens, 2)))\r
+                               ci = atoi(pResp);\r
+                       else\r
+                               dbg("No ci in +CREG");\r
+                               \r
+                       if((pResp = g_slist_nth_data(tokens, 3)))\r
+                               AcT = atoi(pResp);\r
+                       else\r
+                               dbg("No AcT in +CREG");\r
+               }\r
+\r
+\r
+               dbg("stat=%d, lac=0x%lx, ci=0x%lx, Act=%d", stat, lac, ci, AcT);\r
+\r
+               cs_status = lookup_tbl_net_status[stat];\r
+               tcore_network_set_service_status(o, TCORE_NETWORK_SERVICE_DOMAIN_TYPE_CIRCUIT, cs_status);\r
+\r
+       //      tcore_network_get_service_status(o, TCORE_NETWORK_SERVICE_DOMAIN_TYPE_CIRCUIT, &cs_status);\r
+               tcore_network_get_service_status(o, TCORE_NETWORK_SERVICE_DOMAIN_TYPE_PACKET, &ps_status);\r
+\r
+               act = lookup_tbl_access_technology[AcT];\r
+               tcore_network_set_access_technology(o, act);\r
+\r
+               if (stat == AT_CREG_STAT_REG_ROAM)\r
+                       tcore_network_set_roaming_state(o, TRUE);\r
+               else\r
+                       tcore_network_set_roaming_state(o, FALSE);\r
+\r
+               tcore_network_get_service_type(o, &service_type);\r
+               dbg("prev_service_type = 0x%x", service_type);\r
+               service_type = _get_service_type(service_type, svc_domain, act, cs_status, ps_status);\r
+               dbg("new_service_type = 0x%x", service_type);\r
+               tcore_network_set_service_type(o, service_type);\r
+\r
+               tcore_network_set_lac(o, lac);\r
+               tcore_network_set_cell_id(o, ci);\r
+\r
+               net_lac_cell_info.lac = lac;\r
+               net_lac_cell_info.cell_id = ci;\r
+\r
+               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_NETWORK_LOCATION_CELLINFO,\r
+                               sizeof(struct tnoti_network_location_cellinfo), &net_lac_cell_info);\r
+\r
+               regist_status.cs_domain_status = cs_status;\r
+               regist_status.ps_domain_status = ps_status;\r
+               regist_status.service_type = service_type;\r
+               regist_status.roaming_status = tcore_network_get_roaming_state(o);\r
+\r
+               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o,\r
+                               TNOTI_NETWORK_REGISTRATION_STATUS, sizeof(struct tnoti_network_registration_status), &regist_status);\r
+\r
+               /* Get PLMN ID needed to application */\r
+               if((NETWORK_SERVICE_DOMAIN_STATUS_FULL == cs_status )||\r
+                       NETWORK_SERVICE_DOMAIN_STATUS_FULL ==ps_status )\r
+               get_serving_network(o, NULL);\r
+       }\r
+       else\r
+       {\r
+               dbg("Response NOK");\r
+       }\r
+\r
+OUT:\r
+       if(NULL!=tokens)\r
+               tcore_at_tok_free(tokens);\r
+       return TRUE;\r
+\r
+}\r
+\r
+static gboolean on_event_network_icon_info(CoreObject *o, const void *event_info, void *user_data)\r
+{\r
+       struct tnoti_network_icon_info net_icon_info = {0};\r
+       char *line = NULL;\r
+       char * rssiToken = NULL;\r
+       char *batteryToken = NULL;\r
+       GSList* tokens = NULL;\r
+       GSList *lines = NULL;\r
+\r
+       lines = (GSList*)event_info;\r
+       if (1 != g_slist_length(lines)) {\r
+               dbg("unsolicited msg but multiple line");\r
+           goto OUT;\r
+       }\r
+       line = (char*)(lines->data);\r
+       dbg("+XCIEV Network Icon Info Noti Recieve");\r
+       memset(&net_icon_info, 0, sizeof(struct tnoti_network_icon_info));\r
+\r
+       if(line != NULL)\r
+       {\r
+               dbg("Response OK");\r
+       \r
+               tokens = tcore_at_tok_new(line);\r
+               if (g_slist_length(tokens) != 2) {\r
+                       msg("invalid message");\r
+                       goto OUT;\r
+               }\r
+\r
+               rssiToken = (char *)g_slist_nth_data(tokens, 0);\r
+\r
+               if (strlen(rssiToken)>0)\r
+               {\r
+                       net_icon_info.type = NETWORK_ICON_INFO_RSSI;\r
+                       net_icon_info.rssi= atoi(g_slist_nth_data(tokens, 0));\r
+                       dbg("rssi level : %d",net_icon_info.rssi);\r
+               }\r
+               \r
+               batteryToken = (char *)g_slist_nth_data(tokens,1);\r
+               if (strlen(batteryToken)>0)\r
+               {\r
+                       net_icon_info.type = NETWORK_ICON_INFO_BATTERY;\r
+                       net_icon_info.battery= atoi(g_slist_nth_data(tokens, 1));\r
+                       dbg("battery level : %d",net_icon_info.battery);\r
+               }\r
+               \r
+               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_NETWORK_ICON_INFO,\r
+                               sizeof(struct tnoti_network_icon_info), &net_icon_info);\r
+       }\r
+       else\r
+       {\r
+               dbg("Response NOK");            \r
+       }\r
+\r
+\r
+OUT:\r
+       if(NULL!=tokens)\r
+               tcore_at_tok_free(tokens);\r
+       \r
+       return TRUE;\r
+       \r
+}\r
+\r
+static gboolean on_event_network_ds_time_info(CoreObject *o, const void *event_info, void *user_data)\r
+{\r
+/*\r
++CTZDST<dst>\r
+<dst> daylight savings time value:\r
+0 No adjustment for Daylight Saving Time\r
+1 +1 hour adjustment for Daylight Saving Time\r
+2 +2 hours adjustment for Daylight Saving Time\r
+*/\r
+       return TRUE;\r
+}\r
+\r
+\r
+static gboolean on_event_network_ctzv_time_info(CoreObject *o, const void *event_info, void *user_data)\r
+{\r
+       struct tnoti_network_timeinfo net_time_info = {0};\r
+       char *line = NULL;\r
+       GSList* tokens = NULL;\r
+       char *time= NULL;\r
+       char *time_zone = NULL;\r
+       GSList *lines = NULL;\r
+       char ptime_param[20] = {0};\r
+       UserRequest *ur = NULL;\r
+       dbg("Enter : on_event_network_ctzv_time_info");\r
+\r
+       lines = (GSList*)event_info;\r
+       if (1 != g_slist_length(lines)) {\r
+               dbg("unsolicited msg but multiple line");\r
+           goto OUT;\r
+       }\r
+       line  = (char*)(lines->data);\r
+\r
+/*\r
++CTZV: <tz>,<time>\r
+<tz> integer value indicating the time zone (e.g. -22 or +34)\r
+<time> string type value; format is “yy/MM/dd,hh:mms”, wherein characters indicates year, month, day, hour,\r
+minutes, seconds.\r
+*/\r
+       dbg("Network time info (+CTZV) recieved");\r
+       \r
+       if (line != NULL)\r
+       {\r
+               dbg("Response OK");\r
+               dbg("noti line is %s", line);\r
+               \r
+               tokens = tcore_at_tok_new(line);\r
+               \r
+               if(g_slist_length(tokens) < 2) {\r
+                       msg("invalid message");\r
+                       goto OUT;\r
+               }\r
+\r
+               if ((time_zone = g_slist_nth_data(tokens, 0))){\r
+                       net_time_info.gmtoff = atoi(time_zone) * 15; /* TZ in minutes */\r
+               }\r
+\r
+               if (tcore_network_get_plmn(o) != NULL)\r
+                       strcpy(net_time_info.plmn, tcore_network_get_plmn(o));\r
+               \r
+               if ((time = g_slist_nth_data(tokens, 1)) && (strlen(time) >18)){\r
+                       strncpy(ptime_param, time+1, 2); /* skip past initial quote (") */\r
+                       net_time_info.year = atoi(ptime_param); \r
+                               \r
+                       strncpy(ptime_param, time+4, 2); /* skip slash (/) after year param */\r
+                       net_time_info.month = atoi(ptime_param);\r
+                               \r
+                       strncpy(ptime_param, time+7, 2); /* skip past slash (/) after month param */\r
+                       net_time_info.day = atoi(ptime_param);\r
+                       \r
+                       strncpy(ptime_param, time+10, 2); /* skip past comma (,) after day param */\r
+                       net_time_info.hour = atoi(ptime_param);\r
+                       \r
+                       strncpy(ptime_param, time+13, 2); /* skip past colon (:) after hour param */\r
+                       net_time_info.minute = atoi(ptime_param);\r
+                       \r
+                       strncpy(ptime_param, time+16, 2); /* skip past colon (:) after minute param */\r
+                       net_time_info.second = atoi(ptime_param);\r
+               }\r
+               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_NETWORK_TIMEINFO, sizeof(struct tnoti_network_timeinfo), &net_time_info);\r
+\r
+               dbg("new pending(AT+XOPS=0/5/6 for Nitz PLMN name)");\r
+\r
+               /* Get NITZ name and plmn_id via AT+XCOPS = 0/5/6 */\r
+               nwk_prepare_and_send_pending_request(tcore_object_ref_plugin(o), "umts_network", "AT+XCOPS=0;+XCOPS=5;+XCOPS=6", "+XCOPS", TCORE_AT_MULTILINE, ur, on_response_get_nitz_name);\r
+       }\r
+       else\r
+       {       \r
+               dbg("line is  NULL");\r
+       }\r
+       \r
+OUT:\r
+       if(NULL!=tokens)\r
+               tcore_at_tok_free(tokens);\r
+\r
+       dbg("Exit: on_event_network_ctzv_time_info");\r
+       return TRUE;\r
+}\r
+\r
+static void on_sim_resp_hook_get_netname(UserRequest *ur, enum tcore_response_command command, unsigned int data_len,\r
+               const void *data, void *user_data)\r
+{\r
+       const struct tresp_sim_read *resp = data;\r
+       CoreObject *o = user_data;\r
+\r
+       if (command == TRESP_SIM_GET_SPN) {\r
+               dbg("OK SPN GETTING!!");\r
+               dbg("resp->result = 0x%x", resp->result);\r
+               dbg("resp->data.spn.display_condition = 0x%x", resp->data.spn.display_condition);\r
+               dbg("resp->data.spn.spn = [%s]", resp->data.spn.spn);\r
+\r
+               tcore_network_set_network_name(o, TCORE_NETWORK_NAME_TYPE_SPN, (const char *)resp->data.spn.spn);\r
+\r
+               /**\r
+                * display condition\r
+                *  bit[0]: 0 = display of registered PLMN name not required when registered PLMN is either HPLMN or a PLMN in the service provider PLMN list\r
+                *          1 = display of registered PLMN name required when registered PLMN is either HPLMN or a PLMN in the service provider PLMN list\r
+                *  bit[1]: 0 = display of the service provider name is required when registered PLMN is neither HPLMN nor a PLMN in the service provider PLMN list\r
+                *          1 = display of the service provider name is not required when registered PLMN is neither HPLMN nor a PLMN in the service provider PLMN list\r
+                */\r
+               if (resp->data.spn.display_condition & 0x01) {\r
+                       tcore_network_set_network_name_priority(o, TCORE_NETWORK_NAME_PRIORITY_NETWORK);\r
+               }\r
+               if ((resp->data.spn.display_condition & 0x02) == 0) {\r
+                       tcore_network_set_network_name_priority(o, TCORE_NETWORK_NAME_PRIORITY_SPN);\r
+               }\r
+               if ((resp->data.spn.display_condition & 0x03) == 0x01) {\r
+                       tcore_network_set_network_name_priority(o, TCORE_NETWORK_NAME_PRIORITY_ANY);\r
+               }\r
+       }\r
+}\r
+\r
+static enum tcore_hook_return on_hook_sim_init(Server *s, CoreObject *source, enum tcore_notification_command command,\r
+               unsigned int data_len, void *data, void *user_data)\r
+{\r
+       const struct tnoti_sim_status *sim = data;\r
+       UserRequest *ur = NULL;\r
+\r
+       if (sim->sim_status == SIM_STATUS_INIT_COMPLETED) {\r
+               ur = tcore_user_request_new(NULL, NULL);\r
+               tcore_user_request_set_command(ur, TREQ_SIM_GET_SPN);\r
+               tcore_user_request_set_response_hook(ur, on_sim_resp_hook_get_netname, user_data);\r
+               tcore_object_dispatch_request(source, ur);\r
+       }\r
+\r
+       return TCORE_HOOK_RETURN_CONTINUE;\r
+}\r
+\r
+static TReturn search_network(CoreObject *o, UserRequest *ur)\r
+{\r
+       TcoreHal *h = NULL;\r
+       TcorePending *pending = NULL;\r
+       TcoreATRequest *atreq = NULL;\r
+\r
+       char*cmd_str = NULL;\r
+       dbg("search_network - ENTER!!");\r
+       \r
+       if (!o || !ur)\r
+               return TCORE_RETURN_EINVAL;\r
+\r
+       h = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+\r
+       cmd_str = g_strdup_printf("AT+COPS=?");\r
+       atreq = tcore_at_request_new(cmd_str, "+COPS", TCORE_AT_SINGLELINE);\r
+       \r
+       tcore_pending_set_request_data(pending, 0, atreq);\r
+       tcore_pending_set_timeout(pending, 60);\r
+       tcore_pending_set_priority(pending, TCORE_PENDING_PRIORITY_DEFAULT);\r
+       tcore_pending_set_response_callback(pending, on_response_search_network, NULL);\r
+       tcore_pending_set_timeout_callback(pending, on_timeout_search_network, NULL);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_network_message_send, NULL);\r
+\r
+       tcore_hal_send_request(h, pending);\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn set_plmn_selection_mode(CoreObject *o, UserRequest *ur)\r
+{\r
+       TcoreHal *h = NULL;\r
+       TcorePending *pending = NULL;\r
+       TcoreATRequest *atreq;\r
+       char*cmd_str = NULL;\r
+       int format = 0; /* default value for long alphanumeric */\r
+       int mode = 0;\r
+       char plmn[7] = {0};\r
+       int act = 0;\r
+       \r
+       const struct treq_network_set_plmn_selection_mode *req_data;\r
+\r
+\r
+       dbg("set_plmn_selection_mode - ENTER!!");\r
+\r
+       if (!o || !ur)\r
+               return TCORE_RETURN_EINVAL;\r
+\r
+       req_data = tcore_user_request_ref_data(ur, NULL);\r
+       h = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+\r
+       // Command Format - AT+COPS=[<mode>[,<format>[,<oper>[,< AcT>]]]]       \r
+       /* oper parameter format\r
+               - 0 <oper> format presentations are set to long alphanumeric. If Network name not available it displays combination of Mcc and MNC in string format.\r
+               - 1 <oper> format presentation is set to short alphanumeric.\r
+               - 2 <oper> format presentations set to numeric.\r
+       */\r
+\r
+       if((req_data->act == NETWORK_ACT_GSM ) || (req_data->act == NETWORK_ACT_EGPRS ))\r
+               act = 0;\r
+       else\r
+               act = 2;\r
+\r
+       switch(req_data->mode) {\r
+               case NETWORK_SELECT_MODE_GSM_MANUAL:\r
+               {\r
+                       mode = AT_COPS_MODE_MANUAL;\r
+                       format = AT_COPS_FORMAT_NUMERIC;\r
+\r
+                       memset(plmn, 0, 7);\r
+                       memcpy(plmn, req_data->plmn, 6);\r
+\r
+                       if (strlen(req_data->plmn) == 6) {\r
+                               if(plmn[5] =='#')\r
+                                       plmn[5] = 0;\r
+                       }\r
+\r
+                       cmd_str = g_strdup_printf("AT+COPS=%d,%d,\"%s\",%d", mode, format, plmn, act);\r
+               }\r
+               break;\r
+               \r
+               case NETWORK_SELECT_MODE_GLOBAL_AUTOMATIC:\r
+               default:\r
+                       cmd_str = g_strdup("AT+COPS=0");\r
+                       break;\r
+       }\r
+\r
+       \r
+       atreq = tcore_at_request_new(cmd_str, "+COPS", TCORE_AT_NO_RESULT);\r
+\r
+       tcore_pending_set_request_data(pending, 0, atreq);\r
+       tcore_pending_set_response_callback(pending, on_response_set_plmn_selection_mode, NULL);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_network_message_send, NULL);\r
+\r
+\r
+       tcore_hal_send_request(h, pending);\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn get_plmn_selection_mode(CoreObject *o, UserRequest *ur)\r
+{\r
+       TcoreHal *h = NULL;\r
+       TcorePending *pending = NULL;\r
+       TcoreATRequest *atreq;\r
+       char*cmd_str = NULL;\r
+\r
+       dbg("get_plmn_selection_mode - ENTER!!");\r
+\r
+       if (!o || !ur)\r
+               return TCORE_RETURN_EINVAL;\r
+\r
+       h = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+\r
+       cmd_str = g_strdup_printf("AT+COPS?");\r
+       atreq = tcore_at_request_new(cmd_str, "+COPS", TCORE_AT_SINGLELINE);\r
+\r
+       tcore_pending_set_request_data(pending, 0, atreq);\r
+       tcore_pending_set_response_callback(pending, on_response_get_plmn_selection_mode, NULL);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_network_message_send, NULL);\r
+\r
+       tcore_hal_send_request(h, pending);\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+\r
+static TReturn set_band(CoreObject *o, UserRequest *ur)\r
+{\r
+       TcoreHal *h = NULL;\r
+       TcorePending *pending = NULL;\r
+       TcorePending *pending_gsm = NULL;\r
+       TcorePending *pending_umts = NULL;\r
+       TcoreATRequest *atreq;\r
+       char*cmd_str = NULL;\r
+       const struct treq_network_set_band *req_data;\r
+       gboolean set_gsm_band = 0;\r
+       gboolean set_umts_band = 0;\r
+       int gsm_band = 255;\r
+       int gsm_band2 = 255;\r
+       char *umts_band = NULL;\r
+       UserRequest *dup_ur_gsm = NULL;\r
+       UserRequest *dup_ur_umts = NULL;\r
+       \r
+       dbg("set_band - ENTER!!");\r
+\r
+       if (!o || !ur)\r
+               return TCORE_RETURN_EINVAL;\r
+\r
+       req_data = tcore_user_request_ref_data(ur, NULL);\r
+       h = tcore_object_get_hal(o);\r
+\r
+       dbg("set_band - called with band = %d", req_data->band);\r
+\r
+       switch (req_data->band)\r
+       {\r
+               case NETWORK_BAND_TYPE_GSM850:\r
+                       gsm_band = AT_GSM_XBANDSEL_850;\r
+                       set_gsm_band = TRUE;\r
+                       break;\r
+\r
+               case NETWORK_BAND_TYPE_GSM_900_1800:\r
+                       gsm_band = AT_GSM_XBANDSEL_900; \r
+                       gsm_band2 = AT_GSM_XBANDSEL_1800;\r
+                       set_gsm_band = TRUE;\r
+                       break;\r
+\r
+               case NETWORK_BAND_TYPE_GSM1900:\r
+                       gsm_band = AT_GSM_XBANDSEL_1900;\r
+                       set_gsm_band = TRUE;\r
+                       break;\r
+                       \r
+               case NETWORK_BAND_TYPE_GSM1800:\r
+                       gsm_band = AT_GSM_XBANDSEL_1800;\r
+                       set_gsm_band = TRUE;\r
+                       break;\r
+                       \r
+               case NETWORK_BAND_TYPE_GSM_850_1900:\r
+                       gsm_band = AT_GSM_XBANDSEL_850;\r
+                       gsm_band2 = AT_GSM_XBANDSEL_1900;\r
+                       set_gsm_band = TRUE;\r
+                       break; \r
+                       \r
+               case NETWORK_BAND_TYPE_ANY:\r
+                       gsm_band = AT_GSM_XBANDSEL_AUTOMATIC;\r
+                       set_umts_band = TRUE;\r
+                       set_gsm_band = TRUE;\r
+                       break;\r
+\r
+               case NETWORK_BAND_TYPE_WCDMA:\r
+                       set_umts_band = TRUE;\r
+                       break;\r
+                       \r
+               case NETWORK_BAND_TYPE_WCDMA2100:\r
+                       umts_band = "UMTS_BAND_I";\r
+                       set_umts_band = TRUE;\r
+                       break;\r
+                       \r
+               case NETWORK_BAND_TYPE_WCDMA1900:\r
+                       umts_band = "UMTS_BAND_II";\r
+                       set_umts_band = TRUE;\r
+                       break;\r
+                       \r
+               case NETWORK_BAND_TYPE_WCDMA850:\r
+                       umts_band = "UMTS_BAND_V";\r
+                       set_umts_band = TRUE;\r
+                       break;\r
+\r
+               default:\r
+                       break;\r
+       }\r
+\r
+       dbg("set_band > set_umts_band = %d, set_gsm_band = %d", set_umts_band, set_gsm_band);\r
+\r
+       if(set_umts_band == TRUE)\r
+       {\r
+               if((req_data->band == NETWORK_BAND_TYPE_WCDMA) || (req_data->band == NETWORK_BAND_TYPE_ANY))\r
+                       cmd_str = g_strdup_printf("AT+XUBANDSEL=0");\r
+               else    \r
+                       cmd_str = g_strdup_printf("AT+XUBANDSEL=%s", umts_band);\r
+               \r
+               atreq = tcore_at_request_new(cmd_str, "+XUBANDSEL", TCORE_AT_NO_RESULT);\r
+               pending_umts = tcore_pending_new(o, 0);\r
+\r
+               tcore_pending_set_request_data(pending_umts, 0, atreq);\r
+               tcore_pending_set_timeout(pending_umts, 0);\r
+               tcore_pending_set_priority(pending_umts, TCORE_PENDING_PRIORITY_DEFAULT);\r
+               tcore_pending_set_response_callback(pending_umts, on_response_set_umts_band, NULL);\r
+               \r
+               /* duplicate user request for UMTS Band setting AT command for same UR */\r
+               dup_ur_umts = tcore_user_request_ref(ur);\r
+               tcore_pending_link_user_request(pending_umts, dup_ur_umts);\r
+               tcore_pending_set_send_callback(pending_umts, on_confirmation_network_message_send, NULL);\r
+\r
+               tcore_hal_send_request(h, pending_umts);\r
+       }\r
+       \r
+       if(set_gsm_band == TRUE)\r
+       {\r
+               dbg("Entered set_gsm_band");\r
+               if (gsm_band2 == 255)\r
+                       cmd_str = g_strdup_printf("AT+XBANDSEL=%d", gsm_band);\r
+               else\r
+                       cmd_str = g_strdup_printf("AT+XBANDSEL=%d,%d", gsm_band, gsm_band2);\r
+\r
+               dbg("Command string: %s",cmd_str);\r
+               atreq = tcore_at_request_new(cmd_str, "+XBANDSEL", TCORE_AT_NO_RESULT);\r
+               pending_gsm = tcore_pending_new(o, 0);\r
+\r
+               tcore_pending_set_request_data(pending_gsm, 0, atreq);\r
+               tcore_pending_set_timeout(pending_gsm, 0);\r
+               tcore_pending_set_priority(pending_gsm, TCORE_PENDING_PRIORITY_DEFAULT);\r
+               tcore_pending_set_response_callback(pending_gsm, on_response_set_gsm_band, NULL);\r
+\r
+               /* duplicate user request for GSM Band setting AT command for same UR */\r
+               dup_ur_gsm = tcore_user_request_ref(ur);\r
+               tcore_pending_link_user_request(pending_gsm, dup_ur_gsm);\r
+               tcore_pending_set_send_callback(pending_gsm, on_confirmation_network_message_send, NULL);\r
+\r
+               tcore_hal_send_request(h, pending_gsm);\r
+       }\r
+\r
+       /* Lock device to specific RAT as requested by application */\r
+/*\r
+AT+XRAT=<Act>[,<PreferredAct>]\r
+<AcT> indicates the radio access technology and may be\r
+0 GSM single mode\r
+1 GSM / UMTS Dual mode\r
+2 UTRAN (UMTS)\r
+*/\r
+       if ((set_umts_band == TRUE) && (set_gsm_band == TRUE)){\r
+               cmd_str = g_strdup_printf("AT+XRAT=%d", AT_XRAT_DUAL);\r
+       }\r
+       else if (set_umts_band == TRUE){\r
+               cmd_str = g_strdup_printf("AT+XRAT=%d", AT_XRAT_UMTS);\r
+       }\r
+       else{\r
+               cmd_str = g_strdup_printf("AT+XRAT=%d", AT_XRAT_GSM);\r
+       }\r
+       atreq = tcore_at_request_new(cmd_str, "+XRAT", TCORE_AT_NO_RESULT);\r
+       pending = tcore_pending_new(o, 0);\r
+\r
+       tcore_pending_set_request_data(pending, 0, atreq);\r
+       tcore_pending_set_timeout(pending, 0);\r
+       tcore_pending_set_priority(pending, TCORE_PENDING_PRIORITY_DEFAULT);\r
+       tcore_pending_set_response_callback(pending, on_response_set_xrat, NULL);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_network_message_send, NULL);\r
+\r
+       tcore_hal_send_request(h, pending);\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn get_band(CoreObject *o, UserRequest *ur)\r
+{\r
+       TcoreHal *h = NULL;\r
+       TcorePending *pending = NULL;\r
+\r
+       TcoreATRequest *atreq;\r
+       char*cmd_str = NULL;\r
+       dbg("get_band - ENTER!!");\r
+\r
+       if (!o || !ur)\r
+               return TCORE_RETURN_EINVAL;\r
+\r
+       h = tcore_object_get_hal(o);\r
+       \r
+       /* Get RAT Information Information. Based on RAT read response, we will get specific RAT bands only */\r
+       cmd_str = g_strdup_printf("AT+XRAT?");\r
+       atreq = tcore_at_request_new(cmd_str, "+XRAT", TCORE_AT_SINGLELINE);\r
+       pending = tcore_pending_new(o, 0);\r
+       tcore_pending_set_request_data(pending, 0, atreq);\r
+       tcore_pending_set_response_callback(pending, on_response_get_xrat, NULL);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_network_message_send, NULL);\r
+       tcore_hal_send_request(h, pending);\r
+       \r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn set_preferred_plmn(CoreObject *o, UserRequest *ur)\r
+{\r
+       TcoreHal *h = NULL;\r
+       TcorePlugin *p = NULL;\r
+       TcorePending *pending = NULL;\r
+       TcoreATRequest *atreq = NULL;\r
+       const struct treq_network_set_preferred_plmn *req_data = NULL;\r
+       char*cmd_str = NULL;\r
+       int format = 2; /* Alway use numeric format, as application gives data in this default format */\r
+       int gsm_act = 0;\r
+       int gsm_compact_act = 0;\r
+       int utran_act = 0;\r
+\r
+       if (!o || !ur)\r
+               return TCORE_RETURN_EINVAL;\r
+\r
+       req_data = tcore_user_request_ref_data(ur, NULL);\r
+\r
+       dbg("Entry set_preferred_plmn");\r
+       \r
+       p = tcore_object_ref_plugin(o);\r
+       h = tcore_object_get_hal(o);    \r
+\r
+/*\r
+AT+CPOL=\r
+[<index>][,<format>[,<oper>[,<GSM_AcT>,\r
+<GSM_Compact_AcT>,<UTRAN_AcT>]]]\r
+ */\r
\r
+       if((req_data->act == NETWORK_ACT_GSM) || (req_data->act == NETWORK_ACT_GPRS) || (req_data->act == NETWORK_ACT_EGPRS))\r
+               gsm_act = TRUE;\r
+       else if ((req_data->act == NETWORK_ACT_UMTS) || (req_data->act == NETWORK_ACT_UTRAN))\r
+               utran_act = TRUE;\r
+       else if (req_data->act == NETWORK_ACT_GSM_UTRAN)\r
+               gsm_act= utran_act = TRUE;\r
+       \r
+       cmd_str = g_strdup_printf("AT+CPOL=%d,%d,\"%s\",%d, %d,%d",req_data->ef_index, format, req_data->plmn, gsm_act, gsm_compact_act, utran_act);\r
+       atreq = tcore_at_request_new(cmd_str, "+CPOL", TCORE_AT_NO_RESULT);\r
+       \r
+       tcore_pending_set_request_data(pending, 0, atreq);\r
+       tcore_pending_set_response_callback(pending, on_response_set_preferred_plmn, NULL);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_network_message_send, NULL);\r
+\r
+       tcore_hal_send_request(h, pending);\r
+\r
+       dbg("Exit set_preferred_plmn");\r
+       return TCORE_RETURN_SUCCESS; \r
+}\r
+\r
+static TReturn get_preferred_plmn(CoreObject *o, UserRequest *ur)\r
+{\r
+       \r
+       TcoreHal *h = NULL;\r
+       TcorePending *pending = NULL;\r
+       TcoreATRequest *atreq = NULL;\r
+\r
+       char*cmd_str = NULL;\r
+\r
+       dbg("get_preferred_plmn - ENTER!!");\r
+\r
+       if (!o || !ur)\r
+               return TCORE_RETURN_EINVAL;\r
+\r
+       h = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+\r
+       cmd_str = g_strdup_printf("AT+CPOL?");\r
+       atreq = tcore_at_request_new(cmd_str, "+CPOL", TCORE_AT_MULTILINE);\r
+       \r
+       tcore_pending_set_request_data(pending, 0, atreq);\r
+       tcore_pending_set_response_callback(pending, on_response_get_preferred_plmn, NULL);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_network_message_send, NULL);\r
+\r
+       tcore_hal_send_request(h, pending);\r
+\r
+       dbg("get_preferred_plmn - EXIT!!");\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn get_serving_network(CoreObject *o, UserRequest *ur)\r
+{\r
+       dbg("get_serving_network - ENTER!!");\r
+       \r
+       if (!o)\r
+               return TCORE_RETURN_EINVAL;\r
+\r
+       dbg("new pending(AT+COPS?)");\r
+\r
+       nwk_prepare_and_send_pending_request(tcore_object_ref_plugin(o), "umts_network", "AT+COPS=3,2;+COPS?;+COPS=3,0;+COPS?", "+COPS", TCORE_AT_MULTILINE, ur, on_response_get_serving_network);\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static struct tcore_network_operations network_ops = {\r
+               .search                                 = search_network,\r
+               .set_plmn_selection_mode        = set_plmn_selection_mode,\r
+               .get_plmn_selection_mode        = get_plmn_selection_mode,\r
+               .set_service_domain             = NULL,\r
+               .get_service_domain             = NULL,\r
+               .set_band                               = set_band,\r
+               .get_band                               = get_band,\r
+               .set_preferred_plmn             = set_preferred_plmn,\r
+               .get_preferred_plmn             = get_preferred_plmn,\r
+               .set_order                              = NULL,\r
+               .get_order                              = NULL,\r
+               .set_power_on_attach            = NULL,\r
+               .get_power_on_attach            = NULL,\r
+               .set_cancel_manual_search       = NULL,\r
+               .get_serving_network            = get_serving_network,\r
+};\r
+\r
+gboolean s_network_init(TcorePlugin *p, TcoreHal *h)\r
+{\r
+       CoreObject *o = NULL;\r
+\r
+       o = tcore_network_new(p, "umts_network", &network_ops, h);\r
+       if (!o)\r
+               return FALSE;\r
+\r
+       tcore_object_add_callback(o,"+CREG", on_event_cs_network_regist, NULL);\r
+       tcore_object_add_callback(o,"+CGREG", on_event_ps_network_regist, NULL);\r
+       tcore_object_add_callback(o, "+XCIEV", on_event_network_icon_info, NULL);\r
+\r
+       /* +CTZV: <tz>,<time> */\r
+       tcore_object_add_callback(o, "+CTZV", on_event_network_ctzv_time_info, NULL);\r
+       /* +CTZDST: <dst> */ \r
+       tcore_object_add_callback(o, "+CTZDST", on_event_network_ds_time_info, NULL);\r
+\r
+       tcore_server_add_notification_hook(tcore_plugin_ref_server(p), TNOTI_SIM_STATUS, on_hook_sim_init, o);\r
+\r
+       _insert_mcc_mnc_oper_list(p, o);\r
+\r
+       return TRUE;\r
+}\r
+\r
+void s_network_exit(TcorePlugin *p)\r
+{\r
+       CoreObject *o;\r
+\r
+       o = tcore_plugin_ref_core_object(p, "umts_network");\r
+\r
+       tcore_network_free(o);\r
+}\r
index 56bc1ee..21c4216 100755 (executable)
-/*
- * tel-plugin-imc
- *
- * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Hayoon Ko <hayoon.ko@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <glib.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-
-#include <tcore.h>
-#include <hal.h>
-#include <core_object.h>
-#include <plugin.h>
-#include <queue.h>
-#include <co_ps.h>
-#include <co_context.h>
-#include <storage.h>
-#include <server.h>
-#include <at.h>
-#include <util.h>
-#include <type/ps.h>
-
-#include "s_common.h"
-#include "s_ps.h"
-
-#define CR '\r'
-#define LF '\n'
-
-
-
-#define VNET_CH_PATH_BOOT0     "/dev/umts_boot0"
-#define IOCTL_CG_DATA_SEND  _IO('o', 0x37)
-
-/*Invalid Session ID*/
-#define PS_INVALID_CID 999 /*Need to check */
-
-/*Maximum Number of Active PDP context */
-#define MAX_NUM_PS_PDP_ACTIVE_SESSION 5
-
-/*Maximum String length Of the Command*/
-#define MAX_AT_CMD_STR_LEN     150
-
-/*Name of Packet Service */
-
-/*ps call status*/
-#define AT_SESSION_UP 1
-#define AT_SESSION_DOWN 0
-
-/*Command for PS Attach and Detach*/
-#define AT_PS_ATTACH 1
-#define AT_PS_DETACH 0
-
-/*Max retry for the message*/
-#define AT_MAX_RETRY_COUNT 5
-
-/*Command for PDP activation and Deactivation*/
-#define AT_PDP_ACTIVATE 1
-#define AT_PDP_DEACTIVATE 0
-
-#define AT_DUN_NOTIFICATION_ENABLE 1
-#define AT_DUN_NOTIFICATION_DISABLE    0
-
-#define AT_XDNS_ENABLE 1
-#define AT_XDNS_DISABLE 0
-
-static char addr[4];
-static void _ps_free(void * ptr)
-{
-       dbg("Entered");
-       if(ptr)
-       {
-               (void)free(ptr);
-               ptr = NULL;
-       }
-       dbg("Exit");
-       return;
-}
-static void unable_to_get_pending(CoreObject *co_ps,CoreObject *ps_context)
-{
-       struct tnoti_ps_call_status data_resp = {0};
-       dbg("Entered");
-       data_resp.context_id = tcore_context_get_id(ps_context);
-       data_resp.state = AT_SESSION_DOWN;/*check value of state*/
-       data_resp.result =0xFF;/*check error value*/
-       tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(co_ps)), co_ps,
-               TNOTI_PS_CALL_STATUS, sizeof(struct tnoti_ps_call_status), &data_resp);
-       (void)tcore_context_set_state(ps_context, CONTEXT_STATE_DEACTIVATED);
-       dbg("Exit");
-}
-static TReturn _pdp_device_control(gboolean flag, unsigned int context_id)
-{
-       int fd = -1;
-       int ret = -1 ;
-       //int errno; 
-       fd = open ( VNET_CH_PATH_BOOT0, O_RDWR );
-       if ( fd < 0 ) {
-               dbg("error : open [ %s ] [ %s ]", VNET_CH_PATH_BOOT0, strerror(errno));
-               return -1;
-       }
-
-       dbg("Send IOCTL: arg 0x05 (0101) HSIC1, cid=%d \n",context_id);
-       ret = ioctl(fd, IOCTL_CG_DATA_SEND, 0x05);
-       if (ret < 0) 
-       {
-               dbg("[ error ] send IOCTL_CG_DATA_SEND (0x%x) fail!! \n",IOCTL_CG_DATA_SEND);
-               close(fd);
-               return TCORE_RETURN_FAILURE;
-       }
-       else
-       {
-               dbg("[ ok ] send IOCTL_CG_DATA_SEND (0x%x) success!! \n",IOCTL_CG_DATA_SEND);
-               close(fd);
-               return TCORE_RETURN_SUCCESS;
-       }
-}
-
-static gboolean on_event_cgev_handle(CoreObject *co_ps, const void *data, void *user_data)
-{
-       
-       char *token = NULL;
-       GSList *tokens= NULL;
-    GSList *lines = NULL;
-       const char *line = NULL;
-       char *noti_data = NULL;
-       int i = 0;
-       int value = 20;
-       int state = -1;
-
-       dbg("Entered");
-       lines = (GSList*)data;
-       line = (const char *)lines->data;
-       dbg("Lines->data :-%s",line);
-       
-       tokens = tcore_at_tok_new(line);
-       switch(g_slist_length(tokens))
-       {
-               case 0:
-               {
-                       dbg("No token present: Ignore +CGEV Notifications ");
-                       return TRUE;
-               }
-               case 1:
-               {
-                       dbg("one Token present");
-                       noti_data = g_slist_nth_data(tokens, 0);
-                       dbg("notification data :-%s",noti_data);
-                       if(0 ==  strcmp(noti_data,"ME CLASS B"))
-                       {
-                               dbg("ME Class B notification received");
-                               goto ignore;
-                       }
-                       dbg("");
-                       if(0 ==  strcmp(noti_data,"NW CLASS A"))
-                       {
-                               dbg("NW Class A notification received");
-                               goto ignore;
-                       }       
-                       
-                       token = strtok(noti_data, " ");
-                       while(token != NULL)
-                       {
-                               if((i == 0) && (0!=  strcmp(token,"ME")))
-                                       break;
-                               if((i == 1) && (0!=  strcmp(token,"PDN")))
-                                       break;
-                               if((i == 2) && (0 ==  strcmp(token,"ACT")))
-                                               state = 1;                              
-                               if((i == 2) && (0 ==  strcmp(token,"DEACT")))
-                                               state = 0;      
-                               if(i == 3 )
-                               {
-                                       value = atoi(token);
-                                       break;
-                               }
-                               
-                               i++;
-                               token = strtok(NULL, " ");
-                       }
-                       dbg("value:%d ",value);
-                       i = 0;
-                       break;
-               }
-               case 3:
-               {
-                       i = 0;  
-                       state = 0;
-                       value = 0;
-                       dbg("Three Token present");
-                       noti_data = g_slist_nth_data(tokens, 0);
-                       dbg("notification data :-%s",noti_data);
-                       token = strtok(noti_data, " ");
-                       while(token != NULL)
-                       {
-                               if((i == 0) && (0 ==  strcmp(token,"ME")))
-                                       state = 1;
-                               if((i == 1) && (0!=  strcmp(token,"DEACT")))
-                                       break;
-                               if((i == 2) && (0 ==  strcmp(token,"\"IP\"")) && (0 == state))
-                               {
-                                       dbg("MObile Deactiavted the Context");
-                                       value = 10;
-                                               break;                          
-                               }
-                               if((i == 2) && (0 ==  strcmp(token,"\"IP\"")) && (1 == state))
-                               {
-                                       dbg("NW Deactiavted the Context");
-                                       value = 10;
-                                               break;                          
-                               }       
-                               i++;
-                               token = strtok(NULL, " ");
-                       }
-                       if(value == 10 && state == 0)
-                       {
-                               dbg("Recieved Notification for Context deactivations from network");
-                               noti_data = g_slist_nth_data(tokens, 1);
-                               dbg("PDP Address :- %s",noti_data);
-                               noti_data = g_slist_nth_data(tokens, 2);
-                               dbg("CID got deactivated :- %d",atoi(noti_data));
-                       }
-                       if(value == 10 && state == 1)
-                       {
-                               dbg("Recieved Notification for Context deactivations from Mobile");
-                               noti_data = g_slist_nth_data(tokens, 1);
-                               dbg("PDP Address :- %s",noti_data);
-                               noti_data = g_slist_nth_data(tokens, 2);
-                               dbg("CID got deactivated :- %d",atoi(noti_data));                               
-
-                       }
-                       state = 100;
-                       value  = 100;
-                       break;
-               }
-               default:
-               {
-                       dbg("Ignore +CGEV Notifications ");
-                       
-               }
-       }
-       if(state == 1)
-       {
-               dbg("Notification recieved for Activation of CID:-%d",value);
-               
-       }
-       else if(state == 0)
-       {
-               dbg("Notification recieved for Deactivation of CID:-%d",value);
-               
-       }
-       else
-       {
-               dbg("ignore");
-       }       
-ignore:                
-       tcore_at_tok_free(tokens);
-       return TRUE;
-               
-}
-
-#if 0 /*Not Needed Right Now*/
-static void on_response_send_ps_attach (TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse *resp = data;
-       CoreObject *co_ps = NULL;
-       CoreObject *ps_context = user_data;
-       struct tnoti_ps_call_status resp_data;
-
-       dbg("Entered");
-       memset(&resp_data,0x0,sizeof(struct tnoti_ps_call_status));
-       
-       co_ps = tcore_pending_ref_core_object(p);
-
-       if(resp->success)
-       {
-               dbg("Response Ok");
-               /*Activating the Context */
-               send_pdp_activate_cmd(co_ps,ps_context);
-               return;
-       }
-       else
-       {
-               send_ps_attach_cmd(co_ps,ps_context);
-               
-               
-               dbg("Retry Count: %d",retry_count);
-               resp_data.context_id =tcore_context_get_id(ps_context);
-               resp_data.state = AT_SESSION_DOWN;/*check value of state*/
-               resp_data.result =0xFF;/*check error value*/
-               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(co_ps)), co_ps,
-                       TNOTI_PS_CALL_STATUS, sizeof(struct tnoti_ps_call_status), &resp_data);
-               dbg("Exit: Response NOK");
-               return;
-       }
-}
-
-static void send_ps_attach_cmd(CoreObject *co_ps,CoreObject *ps_context)
-{
-       TcoreHal *hal = NULL;
-       TcorePending *pending = NULL;
-       char cmd_str[MAX_AT_CMD_STR_LEN] ;
-       
-       dbg("Entered");
-       memset(cmd_str,0x0,MAX_AT_CMD_STR_LEN);
-
-       /* FIXME: Before MUX setup, use PHY HAL directly. */
-       hal = tcore_object_get_hal(co_ps);
-       
-       (void)sprintf(cmd_str, "AT+CGATT=%d%c",AT_PS_ATTACH,CR);
-       pending = tcore_at_pending_new(co_ps,cmd_str,NULL,TCORE_AT_NO_RESULT,
-                                       on_response_send_ps_attach,ps_context );
-       if(NULL == pending)
-       {
-               err("Unable to get the create a AT request ");
-               goto error;
-       }
-       tcore_hal_send_request(hal, pending);
-       dbg("Exit: Successfully");
-       return ;        
-
-error:
-       err("Unable to create At request");
-       send_undefine_context_cmd(co_ps,ps_context);
-       return; 
-}
-static void on_response_check_ps_attach(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse *resp = data;
-       CoreObject *co_ps = NULL;
-       CoreObject *ps_context = user_data;
-
-       GSList *tokens=NULL;
-       const char *line = NULL;
-
-       co_ps = tcore_pending_ref_core_object(p);
-       if(resp->final_response)
-       {
-               if(resp->lines)
-               {
-                       line = (const char*)resp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       if((g_slist_length (tokens)) < 1 )
-                               goto error;     
-                       if(atoi((char *)g_slist_nth_data(tokens,0)) == 1)
-                       {
-                               dbg("PS is Already Attached");
-                               send_pdp_activate_cmd(co_ps,ps_context);
-                       }
-                       else
-                       {
-                               dbg("PS is not attached:Need To send AT command To attach PS");
-                               send_ps_attach_cmd(co_ps,ps_context);
-                       }
-                       tcore_at_tok_free(tokens);
-                       return;
-               }
-       }
-       else
-       {
-               
-               send_check_ps_attach_cmd(co_ps,ps_context);
-               
-       }
-error:
-       
-       err("Exit:Response NOK");
-       tcore_at_tok_free(tokens);
-       send_undefine_context_cmd(co_ps,ps_context);
-       return;
-}
-
-static void send_check_ps_attach_cmd(CoreObject *co_ps,CoreObject *ps_context)
-{
-       
-       TcoreHal *hal = NULL;
-       TcorePending *pending = NULL;
-       char cmd_str[MAX_AT_CMD_STR_LEN] ;
-       
-       
-       dbg("Entered");
-       memset(cmd_str,0x0,MAX_AT_CMD_STR_LEN);
-       
-       /* FIXME: Before MUX setup, use PHY HAL directly. */
-       hal = tcore_object_get_hal(co_ps);
-       
-       (void)sprintf(cmd_str, "AT+CGATT?%c",CR);
-       pending = tcore_at_pending_new(co_ps,cmd_str,"+CGATT",TCORE_AT_SINGLELINE,
-                                       on_response_check_ps_attach,ps_context );
-       if(NULL == pending)
-       {
-               err("Unable to get the create a AT request ");
-               goto error;
-       }
-       tcore_hal_send_request(hal, pending);
-       dbg("Exit: Successfully");
-       return; 
-error:
-
-       dbg("Unable To create At request");
-       send_undefine_context_cmd(co_ps,ps_context);
-       return;
-}
-
-static gboolean on_event_ps_protocol_status(CoreObject *co_ps, const void *data, void *user_data)
-{
-       struct tnoti_ps_protocol_status noti;
-       GSList *tokens=NULL;
-       const char *line = NULL;
-       int value;
-       GSList *lines = NULL;
-
-       lines = (GSList*)data;
-       if (1 != g_slist_length(lines)) {
-               dbg("unsolicited msg but multiple line");
-           goto OUT;
-       }
-
-       line = (const char *)(lines->data);
-       tokens = tcore_at_tok_new(line);
-       value= atoi(g_slist_nth_data(tokens, 0));       
-               switch(value)
-               {
-                       case 1:
-                       {
-                               dbg("registered, home network ");
-                               break;
-                       }       
-                       case 0:/*Fall through*/
-                       case 2:/*Fall through*/
-                       case 3:/*Fall through*/
-                       case 4:/*Fall through*/
-                       case 5:/*Fall through*/
-                       case 6:/*Fall through*/
-                       case 7:/*Fall through*/
-                       case 8:/*Fall through*/
-                       case 9:/*Fall through*/
-                       case 10:/*Fall through*/
-                       default:/*Fall through*/
-                       dbg("circuit mode registration status : %d",value);
-                       noti.status = TELEPHONY_HSDPA_OFF;
-                       tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(co_ps)), co_ps,
-                               TNOTI_PS_PROTOCOL_STATUS,sizeof(struct tnoti_ps_protocol_status), &noti);
-                       tcore_at_tok_free(tokens);      
-                       return TRUE;
-               }       
-               value= atoi(g_slist_nth_data(tokens,4));        
-               switch(value)
-               {
-                       case 4:
-                       {
-                               dbg("ACT:HSDPA");
-                               noti.status = TELEPHONY_HSDPA_ON;
-                               break;
-                       }
-                       case 5:
-                       {
-                               dbg("ACT:HSUPA");
-                               noti.status = TELEPHONY_HSUPA_ON;
-                               break;
-                       }
-                       case 6:
-                       {
-                               dbg("ACT:HSPA");
-                               noti.status = TELEPHONY_HSPA_ON;
-                               break;
-                       }
-                       case 0:/*Fall Through*/
-                       case 1:/*Fall Through*/
-                       case 2:/*Fall Through*/
-                       case 3:/*Fall Through*/
-                       default:
-                       {
-                               dbg("ACT:Unsupported ");
-                               goto OUT;
-                       }
-               }
-               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(co_ps)), co_ps,
-                               TNOTI_PS_PROTOCOL_STATUS,sizeof(struct tnoti_ps_protocol_status), &noti);
-OUT:
-       if(NULL!=tokens)
-               tcore_at_tok_free(tokens);
-       return TRUE;
-}
-
-static gboolean on_event_ps_call_status(CoreObject *co_ps, const void *data, void *user_data)
-{
-       CoreObject *ps_context = (CoreObject *)user_data;
-       GSList *tokens=NULL;
-       GSList *lines = NULL;
-       const char *line = NULL;
-       int value;
-       struct tnoti_ps_call_status data_resp;
-
-       lines = (GSList*)data;
-       if (1 != g_slist_length(lines)) {
-               dbg("unsolicited msg but multiple line");
-               goto OUT;
-       }
-
-       line = (const char*)(lines->data);      
-       tokens = tcore_at_tok_new(line);
-
-       value = atoi(g_slist_nth_data(tokens,0));
-       if(value == 1)
-       {
-               dbg("Session is resumed");
-               data_resp.context_id = tcore_context_get_id(ps_context);
-               data_resp.state = 1;
-               data_resp.result = 0;
-               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(co_ps)), co_ps,
-                       TNOTI_PS_CALL_STATUS, sizeof(struct tnoti_ps_call_status), &data_resp);
-       }       
-       else
-       {
-               dbg("Session is suspended");
-               data_resp.context_id = tcore_context_get_id(ps_context);
-               data_resp.state = 0;
-               data_resp.result = 50;/*To Do: check exact value*/
-               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(co_ps)), co_ps,
-                       TNOTI_PS_CALL_STATUS, sizeof(struct tnoti_ps_call_status), &data_resp);
-               if (_pdp_device_control(FALSE, data_resp.context_id) != TCORE_RETURN_SUCCESS) {
-               dbg("_pdp_device_control() failed");
-               }
-       }
-OUT:
-       if(NULL!=tokens)
-               tcore_at_tok_free(tokens);
-       return TRUE;
-}
-static gboolean on_event_cmee_error_handle(CoreObject *co_ps, const void *data, void *user_data)
-{
-       struct tnoti_ps_call_status data_resp = {0};
-       GSList *tokens= NULL;
-    GSList *lines = NULL;
-       const char *line = NULL;
-       int value = 0;
-
-       dbg("Entered");
-       lines = (GSList*)data;
-       if (1 != g_slist_length(lines)) {
-               dbg("unsolicited msg but multiple line");
-               goto OUT;
-       }
-
-       line = (const char*)(lines->data);      
-       tokens = tcore_at_tok_new(line);
-       value = atoi(g_slist_nth_data(tokens,0));
-
-       data_resp.context_id = 1;/*to do have cid extarcted */
-       data_resp.state = 0;
-       data_resp.result = value;
-       dbg("Exiting: Sending Notification Upwards");
-       tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(co_ps)), co_ps,
-                       TNOTI_PS_CALL_STATUS, sizeof(struct tnoti_ps_call_status), &data_resp);
-OUT:
-       if(tokens)
-               tcore_at_tok_free(tokens);
-       dbg("Ignoring the indications ")
-       return TRUE;
-}
-#endif
-static gboolean on_event_dun_call_notification(CoreObject *o, const void *data, void *user_data)
-{
-       GSList *tokens=NULL;
-       const char *line = NULL;
-       int value;
-       GSList *lines = NULL;
-
-
-       dbg("Entered");
-
-       lines = (GSList*)data;
-       if (1 != g_slist_length(lines)) {
-               dbg("unsolicited msg but multiple line");
-               goto OUT;
-       }
-
-       line = (char*)(lines->data);
-               tokens = tcore_at_tok_new(line);
-       value = atoi(g_slist_nth_data(tokens, 0));
-
-/*
-<status> may be
-0: DUN activation in progress
-1: DUN deactivation in progress
-2: DUN activated
-3: DUN deactivated
-*/
-               switch(value)
-               {
-                       case 0:/*Fall Through*/
-                       case 1:
-                       break;  
-                       case 2:
-                       {
-                               /*To Do:- Fill Data structure : data*/
-                               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o,
-                               TNOTI_PS_EXTERNAL_CALL, sizeof(struct tnoti_ps_external_call), &data);  
-                       }
-                       case 3:
-                       {
-                               /*To Do:- Fill Data structure : data*/
-                               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o,
-                               TNOTI_PS_EXTERNAL_CALL, sizeof(struct tnoti_ps_external_call), &data);
-                       }
-                       break;
-                       default:
-                       goto OUT;       
-               }       
-OUT:
-       if(NULL!=tokens)
-               tcore_at_tok_free(tokens);
-       return TRUE;    
-}
-#if 0
-static void on_response_dun_call_notification(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       TcoreATResponse *resp = data;
-       CoreObject *co_ps =  tcore_pending_ref_core_object(p);
-       CoreObject *ps_context = user_data;
-       
-       if(resp->final_response)
-       {
-               dbg("Dn notification is Enabled");
-                               
-       }
-       else
-       {
-       
-       /*To Do: Need to check that is it to be  reported*/
-       dbg("Unable to set the Dun Notifications");
-       dbg("Response NOK");
-       }
-       return;
-}
-/*This should be called only in case of CID == 1*/
-
-static void send_dun_call_notification(CoreObject *co_ps,CoreObject *ps_context)
-{
-       TcoreHal *hal = NULL;
-       TcorePending *pending = NULL;
-       char cmd_str[MAX_AT_CMD_STR_LEN] ;
-
-       memset(cmd_str,0x0,MAX_AT_CMD_STR_LEN);
-
-       hal = tcore_object_get_hal(co_ps);
-       
-       (void)sprintf(cmd_str, "AT+XNOTIFYDUNSTATUS=%d%c",AT_DUN_NOTIFICATION_ENABLE,CR);
-       pending = tcore_at_pending_new(co_ps,cmd_str,NULL,TCORE_AT_NO_RESULT,
-                                       on_response_dun_call_notification,ps_context );
-       if(NULL == pending)
-       {
-               err("Unable to get the create a AT request ");
-               goto error;
-       }
-       tcore_hal_send_request(hal, pending);
-       return ;
-error: 
-       /*To Do: Need to check that is it to be  reported*/
-               dbg("Unable to set the Dun Notifications");
-       return;
-}
-
-static int find_free_tbl_entry(CoreObject *co_ps,int cid, struct context *loc[])
-{
-       struct context *tbl = tcore_object_ref_user_data(co_ps);
-       dbg("Entered");
-       *loc = tbl + cid;
-       if(tbl->isvalid == 0)
-       {
-               dbg("Entry is free");
-               return 1;
-       }
-       else
-       {
-               dbg("PDP session is already defined ");
-               return 0;
-       }
-}
-
-#endif /*Not Needed Right Now*/
-static void on_response_undefine_context_cmd(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       CoreObject *co_ps = NULL;
-       const TcoreATResponse *resp = data;
-       CoreObject *ps_context = user_data;
-       
-       dbg("Entered");
-       co_ps = tcore_pending_ref_core_object(p);
-       
-       if(resp->success)
-       {
-               dbg("Response Ok");
-               /*getting the IP address and DNS from the modem*/
-       }
-       dbg("Response NOk");
-       unable_to_get_pending(co_ps,ps_context);
-       return;
-}
-
-static void send_undefine_context_cmd(CoreObject *co_ps,CoreObject *ps_context)
-{
-       TcoreHal *hal = NULL;
-       TcorePending *pending = NULL;
-       char cmd_str[MAX_AT_CMD_STR_LEN] ;
-       int cid = 0;
-
-       dbg("Entered");
-       memset(cmd_str,0x0,MAX_AT_CMD_STR_LEN);
-
-       /* FIXME: Before MUX setup, use PHY HAL directly. */
-       hal = tcore_object_get_hal(co_ps);
-       
-       /*Getting Context ID from Core Object*/
-       cid = tcore_context_get_id(ps_context);
-
-       (void)sprintf(cmd_str, "AT+CGDCONT=%d%c",cid,CR);
-       pending = tcore_at_pending_new(co_ps,cmd_str,NULL,TCORE_AT_NO_RESULT,
-                                       on_response_undefine_context_cmd,ps_context );
-       if(NULL == pending)
-       {
-               err("Unable to get the create a AT request ");
-               goto error;
-       }
-       tcore_hal_send_request(hal, pending);
-       dbg("Exit: Successfully");
-       return ;
-
-error:
-       {
-               dbg("Exit: With error");
-               unable_to_get_pending(co_ps,ps_context);
-               return;
-       }
-}
-static void on_response_data_counter_command(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       CoreObject *ps_context = user_data;
-       const TcoreATResponse *resp = data;
-       CoreObject *co_ps = tcore_pending_ref_core_object(p);
-
-       
-       GSList *tokens=NULL;
-       GSList *pRespData; 
-       const char *line = NULL;
-
-       int no_pdp_active =0;
-       int loc = 0;
-       unsigned long long Rx;
-       unsigned long long Tx;
-       int cid = tcore_context_get_id(ps_context);     
-       dbg("Entered");
-       
-       if(resp->final_response)
-       {
-               dbg("Response OK");
-               dbg(" response lines : -%s",resp->lines);
-               if(resp->lines) {
-
-                       pRespData =  (GSList*)resp->lines;
-                       no_pdp_active = g_slist_length(pRespData);
-                       dbg("Total Number of Active PS Context :- %d",no_pdp_active);
-
-                       if(no_pdp_active == 0)
-                               return;
-                       while(pRespData)
-                       {
-                               dbg("Entered the Loop pRespData");
-
-                               line = (const char*)pRespData->data;
-                               dbg("Response->lines->data :%s",line);
-                               tokens = tcore_at_tok_new(line);        
-                               if(cid == atoi(g_slist_nth_data(tokens, 0)))
-                               {
-                                       dbg("Found the data for our CID");
-                                       Tx = (unsigned long long)g_ascii_strtoull((g_slist_nth_data(tokens,1)), NULL, 10);
-                                       dbg("Tx: %d", Tx);
-
-                                       Rx = (unsigned long long)g_ascii_strtoull((g_slist_nth_data(tokens, 2)), NULL, 10);
-                                       dbg("Rx: %d", Rx);
-                               
-                               tcore_at_tok_free(tokens);
-                               tokens = NULL;
-                               dbg("Exiting the Loop pRespData");
-                               break;
-                               }
-                       tcore_at_tok_free(tokens);
-                       tokens = NULL;
-                       pRespData= pRespData->next;
-                       
-               }
-               dbg("Sending Data counter notifications");      
-               
-               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(co_ps)), co_ps,
-                               TNOTI_PS_CURRENT_SESSION_DATA_COUNTER, 0, NULL);
-                       return;
-               }
-               else
-               {
-                       dbg("No Active PS Context");
-               }
-       }
-       
-       dbg("Response NOK");
-ERROR: /* TODO : What to send to TAPI in failure case? */
-       tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(co_ps)), co_ps,
-                       TNOTI_PS_CURRENT_SESSION_DATA_COUNTER, 0, NULL);
-       return;
-}
-
-static void send_data_counter_command(CoreObject *co_ps,CoreObject *ps_context)
-{
-       TcoreHal *hal = NULL;
-       TcorePending *pending = NULL;
-       char cmd_str[MAX_AT_CMD_STR_LEN] ;
-
-       dbg("Enetered");
-       memset(cmd_str,0x0,MAX_AT_CMD_STR_LEN);
-
-       hal = tcore_object_get_hal(co_ps);
-       
-       (void)sprintf(cmd_str, "AT+XGCNTRD%c",CR);
-       pending = tcore_at_pending_new(co_ps,cmd_str,"+XGCNTRD",TCORE_AT_MULTILINE,
-                                       on_response_data_counter_command,ps_context );
-       if(NULL == pending)
-       {
-               goto error;
-       }
-       tcore_pending_set_response_callback(pending, on_response_data_counter_command,ps_context);
-       tcore_hal_send_request(hal, pending);
-       dbg("Exit : Successfully");
-       return ;
-error:
-       /*Unable to create At request Still the Context is deactivated*/
-       err("Unable to create AT request");
-       tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(co_ps)), co_ps,
-                       TNOTI_PS_CURRENT_SESSION_DATA_COUNTER, 0,NULL);
-       return ;
-/*Add code if unable to get the data usage*/
-}
-static void on_response_deactivate_ps_context(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       CoreObject *co_ps = tcore_pending_ref_core_object(p);
-       CoreObject *ps_context = user_data;
-       const TcoreATResponse *resp = data;
-       int cid ;
-
-       cid = tcore_context_get_id(ps_context);
-       if(resp->success)
-       {
-               dbg("Response OK");
-               /*get the data usage and report it application*/
-               (void)tcore_context_set_state(ps_context, CONTEXT_STATE_DEACTIVATED);
-               send_data_counter_command(co_ps,ps_context);
-               
-               /*get the HSDPA status and report it to server*/
-       }
-       else
-       {
-               dbg("Response NOK");
-               _pdp_device_control(TRUE, cid);
-               send_undefine_context_cmd(co_ps,ps_context);
-       }
-       return;
-}
-
-static TReturn deactivate_ps_context(CoreObject *co_ps, CoreObject *ps_context, void *user_data)
-{
-       TcoreHal *hal = NULL;
-       TcorePending *pending = NULL;
-       unsigned int cid = PS_INVALID_CID;
-       char cmd_str[MAX_AT_CMD_STR_LEN] ;
-       struct context *tbl_entry = NULL;
-       dbg("Entered");
-       memset(cmd_str,0x0,MAX_AT_CMD_STR_LEN);
-       
-       /*Getting Context ID from Core Object*/
-       cid = tcore_context_get_id(ps_context);
-
-       /* FIXME: Before MUX setup, use PHY HAL directly. */
-       hal = tcore_object_get_hal(co_ps);
-       
-       tbl_entry = tcore_object_ref_user_data(co_ps);
-       
-       (void)sprintf(cmd_str, "AT+CGACT=%d,%d%c",AT_PDP_DEACTIVATE,cid,CR);
-       dbg("At commands :- %s",cmd_str);
-
-       pending = tcore_at_pending_new(co_ps,cmd_str,NULL,TCORE_AT_NO_RESULT,
-                                       on_response_deactivate_ps_context,ps_context );
-       if(NULL == pending)
-               return TCORE_RETURN_FAILURE;
-       
-       tcore_hal_send_request(hal, pending);
-       (void)tcore_context_set_state(ps_context, CONTEXT_STATE_DEACTIVATING);
-       return TCORE_RETURN_SUCCESS;
-}
-
-static void on_response_get_dns_cmnd(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-
-       int i;
-       int loc;        
-       int num_tokens;
-       int tok_pos = 0;
-       struct tnoti_ps_pdp_ipconfiguration noti = {0};
-       struct tnoti_ps_call_status data_status = {0};
-       char devname[10] = {0,};
-       char s_cid[4];
-       int found = 0;
-       const TcoreATResponse *resp = data;
-       CoreObject *co_ps = tcore_pending_ref_core_object(p);
-       CoreObject *ps_context = user_data;
-       //const char *addr;
-
-       
-       
-       GSList *tokens= NULL;
-       const char *line = NULL;
-       char *token_add = NULL;
-       char *token_dns = NULL;
-       char dns[50] = {0}; /* 3 characted for each IP address value: 12 for IPv4, 48 for IP6*/;
-       
-       int cid = tcore_context_get_id(ps_context);
-
-       dbg("Entered");
-
-       (void)sprintf(s_cid,"%d%s",cid,"\0");
-#if 1  
-       if(resp->final_response)
-       {
-               dbg("RESPONSE OK");
-
-               if(resp->lines) 
-               {
-                       dbg("Resp->lines present");
-                       line = (const char*)resp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       num_tokens = g_slist_length(tokens);
-                       if ( num_tokens < 2) 
-                       {
-                               msg("invalid message");
-                               goto exit_case;
-                       }
-                       while(tok_pos < num_tokens)
-                       {
-                               if(cid == atoi(g_slist_nth_data(tokens,tok_pos)))
-                               {
-                                       dbg("match found for the CID"); 
-                                       found = tok_pos;
-                                       break;
-                               }
-                               tok_pos = tok_pos + 3;
-                               found = 0;
-                       }
-                       if(found != tok_pos )
-                               goto exit_case;
-                                               
-                       { /* Read primary DNS */
-                               token_dns = g_slist_nth_data(tokens, tok_pos + 1);
-                               /* Strip off starting " and ending " from this token to read actual PDP address */
-                               strncpy(dns, token_dns+1, strlen(token_dns)-2);
-                               dbg("Token_dns :%s",token_dns);
-                               dbg("DNS :- %s",dns);
-                               i = 0;
-                               token_add = strtok(dns, ".");
-                               while(token_add != NULL)
-                               {
-                                               noti.primary_dns[i++]= atoi(token_add);
-                                               token_add = strtok(NULL, ".");
-                               }
-                               //_ps_free(token_add);// This is just reference point, not actual pointer allocated in this function.
-                       }
-                       { /* Read Secondary DNS */
-                               memset(dns,0x0,50);
-                               token_dns = g_slist_nth_data(tokens, loc+1);
-                               /* Strip off starting " and ending " from this token to read actual PDP address */
-                               strncpy(dns, token_dns+1, strlen(token_dns)-2);
-
-                               dbg("Token_dns :%s",token_dns);
-                               dbg("DNS :- %s",dns);
-                               i = 0;
-                               token_add = strtok(dns, ".");
-                               while(token_add != NULL)
-                               {
-                                       noti.secondary_dns[i++]= atoi(token_add);
-                                       token_add = strtok(NULL, ".");
-                               }
-                               //_ps_free(token_add);.// This is just reference point, not actual pointer allocated in this function.
-                       }
-                       
-                       /*To DO :  Add Code to notify the the Tapi*/
-               }
-       goto send;      
-       }
-       else
-       {
-               dbg("Respons NOK");
-               dbg("unable to DNS address so static assigning it");
-
-               /*To Do :- Add code if only One DNS Found*/
-       }
-#endif
-#if 0
-#else
-exit_case:
-       dbg("Adding default DNS");
-       tcore_at_tok_free(tokens);
-       dbg("Adding the Primary DNS");
-       noti.primary_dns[0] = 8;
-       noti.primary_dns[1] = 8;
-       noti.primary_dns[2] = 8;
-       noti.primary_dns[3] = 8;
-       dbg("Adding Secondary DNS");
-       noti.secondary_dns[0] = 8;
-       noti.secondary_dns[1] = 8;
-       noti.secondary_dns[2] = 4;
-       noti.secondary_dns[3] = 4;
-
-#endif
-       
-       /* fileds: 
-       0x0001 -> IP address
-       0x0002 -> Primany DNS
-       0x0003 -> Seconday DNS
-       */
-send:  
-       dbg("Adding flag");
-       noti.field_flag = (0x0001 & 0x0002 & 0x0004);
-       dbg("Adding Error if Present");
-       noti.err = 0;
-       noti.context_id = cid;
-       dbg("ADDING IP address");
-#if 0
-       addr = tcore_context_get_address(ps_context);
-       memcpy(&noti.ip_address, &addr, 4);
-       _ps_free((void *)addr);
-#else
-       memcpy(&noti.ip_address, &addr, 4);
-#endif
-       if (_pdp_device_control(TRUE, cid) != TCORE_RETURN_SUCCESS) 
-       {
-               dbg("_pdp_device_control() failed. errno=%d", errno);
-       }
-       snprintf(devname, 10, "pdp%d", cid - 1);
-       memcpy(noti.devname, devname, 10);
-       dbg("devname = [%s]", devname);
-       if (tcore_util_netif_up(devname) != TCORE_RETURN_SUCCESS) 
-       {
-               dbg("util_netif_up() failed. errno=%d", errno);
-       }
-
-       dbg("Send Notification upwards of IP address");
-       tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(co_ps)), co_ps, TNOTI_PS_PDP_IPCONFIGURATION,
-               sizeof(struct tnoti_ps_pdp_ipconfiguration), &noti);
-
-       data_status.context_id = cid;
-       data_status.state = 1;
-       data_status.result = 0 ;
-
-       tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(co_ps)), co_ps,
-                       TNOTI_PS_CALL_STATUS, sizeof(struct tnoti_ps_call_status), &data_status);
-       dbg("EXIT : Without error");
-       return;
-}
-
-static void send_get_dns_cmd(CoreObject *co_ps,CoreObject *ps_context)
-{
-       TcoreHal *hal = NULL;
-       TcorePending *pending = NULL;
-       char cmd_str[MAX_AT_CMD_STR_LEN] ;
-       struct tnoti_ps_call_status data = {0};
-
-       memset(cmd_str,0x0,MAX_AT_CMD_STR_LEN);
-
-       dbg("Entered");
-       hal = tcore_object_get_hal(co_ps);
-
-       (void)sprintf(cmd_str, "AT+XDNS?%c",CR);
-       pending = tcore_at_pending_new(co_ps,cmd_str,"+XDNS",TCORE_AT_MULTILINE,
-                                       on_response_get_dns_cmnd,ps_context );
-       if(NULL == pending)
-       {
-               err("Unable to get the create a AT request ");
-               goto error;
-       }
-       tcore_hal_send_request(hal, pending);
-       dbg("Exit Successfully");
-       return ;
-error: 
-       /*unable to get Ip address so closing the PDP session*/
-       dbg("Unable to get the pending");       
-       
-       data.context_id =tcore_context_get_id(ps_context);
-       data.state = AT_SESSION_DOWN;/*check value of state*/
-       data.result =0xFF;/*check error value*/
-       tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(co_ps)), co_ps,
-       TNOTI_PS_CALL_STATUS, sizeof(struct tnoti_ps_call_status), &data);
-       dbg("Exit : Error");
-       return;
-}
-
-static void on_response_get_pdp_address(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse *resp = data;
-       CoreObject *co_ps =  tcore_pending_ref_core_object(p);
-       CoreObject *ps_context = user_data;
-       int i = 0;
-       GSList *tokens=NULL;
-       const char *line;
-       char *token_pdp_address;
-       char *token_add;
-       char pdp_address[50] = {0}; /* 3 characted for each IP address value: 12 for IPv4, 48 for IP6*/
-       //char addr[4];
-       dbg("Enetered");
-       if(resp->final_response)
-       {
-               dbg("RESPONSE OK");
-               if(resp->lines != NULL) 
-               {
-                       dbg("resp->lines present ");
-                       line = (const char*)resp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       if (g_slist_length(tokens) < 2) 
-                       {
-                               msg("invalid message");
-                               goto error;
-                       }
-                       dbg("line:- %s",line);
-                       /* CID is already stored in ps_context, skip over & read PDP address */
-                       token_pdp_address = g_slist_nth_data(tokens, 1);
-
-                       dbg("token_pdp_address :- %s",token_pdp_address);
-                       /* Strip off starting " and ending " from this token to read actual PDP address */
-                       strncpy(pdp_address, token_pdp_address+1, strlen(token_pdp_address)-2);
-                       dbg("PDP address :- %s",pdp_address);
-                       /* Store IP address in char array, Telephony expected IP address in this format */
-                       token_add = strtok(pdp_address, ".");
-                       i = 0;
-                       while((token_add != NULL) && (i<4)) /* Currently only IPv4 is supported */
-                       {
-                               addr[i++]= atoi(token_add);
-                               token_add = strtok(NULL, ".");
-                       }
-                       dbg("PDP address:- %s",addr);
-                       }
-               //tcore_context_set_address(ps_context,(const char *)addr);
-               send_get_dns_cmd(co_ps,ps_context);
-       }
-       else
-       {
-               dbg("Response NOK");
-               /*without PDP address we will not be able to start packet service*/
-               (void)deactivate_ps_context(co_ps,ps_context,NULL);
-       }
-       error:  
-       tcore_at_tok_free(tokens);
-}
-
-static void send_get_pdp_address_cmd(CoreObject *co_ps,CoreObject *ps_context)
-{
-       TcoreHal *hal = NULL;
-       TcorePending *pending = NULL;
-       unsigned int cid = PS_INVALID_CID;
-       char cmd_str[MAX_AT_CMD_STR_LEN] = {0};
-       struct tnoti_ps_call_status data_resp = {0};
-       dbg("Entered");
-       hal = tcore_object_get_hal(co_ps);
-
-       cid = tcore_context_get_id(ps_context);
-       (void)sprintf(cmd_str, "AT+CGPADDR=%d%c",cid,CR);
-       pending = tcore_at_pending_new(co_ps,cmd_str,"+CGPADDR",TCORE_AT_SINGLELINE,
-                                       on_response_get_pdp_address,ps_context );
-       if(NULL == pending)
-       {
-               err("Unable to get the create a AT request ");
-               goto error;
-       }
-       tcore_hal_send_request(hal, pending);
-       dbg("Exiting Successfully");
-       return ;
-
-error:
-               /*unable to get pending*/
-               dbg("Unable to get the pending");       
-               unable_to_get_pending(co_ps,ps_context);
-               dbg("Exit : Error");
-               return;
-}
-
-static void on_response_send_pdp_activate_cmd (TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       CoreObject *co_ps = NULL;
-       const TcoreATResponse *resp = data;
-       CoreObject *ps_context = user_data;
-       
-       int cid;
-       cid = tcore_context_get_id(ps_context);
-
-       
-       dbg("Entered");
-       if(!p)
-               goto error;
-               
-       co_ps = tcore_pending_ref_core_object(p);
-       
-       if(resp->success)
-       {
-               dbg("Response Ok");
-               /*getting the IP address and DNS from the modem*/
-               dbg("Getting the IP Address");
-               send_get_pdp_address_cmd(co_ps,ps_context);
-               return;
-       }
-       else
-       {       
-               
-               dbg("Unable to actiavte PDP context for CID: %d ",cid);
-               dbg("Undefineing the PDP context");
-               (void)tcore_context_set_state(ps_context, CONTEXT_STATE_DEACTIVATED);
-               send_undefine_context_cmd(co_ps,ps_context);
-       }
-       return;
-
-error:
-       {
-               unable_to_get_pending(co_ps,ps_context);
-               return;
-       }
-}
-
-static void send_pdp_activate_cmd(CoreObject *co_ps, CoreObject *ps_context)
-{
-       TcoreHal *hal = NULL;
-       TcorePending *pending = NULL;
-       char cmd_str[MAX_AT_CMD_STR_LEN] = {0};
-       int cid = 0;
-       dbg("Entered");
-       /* FIXME: Before MUX setup, use PHY HAL directly. */
-       hal = tcore_object_get_hal(co_ps);
-       
-       /*Getting Context ID from Core Object*/
-       cid = tcore_context_get_id(ps_context);
-       (void)sprintf(cmd_str, "AT+CGACT=%d,%d%c",AT_PDP_ACTIVATE,cid,CR);
-       pending = tcore_at_pending_new(co_ps,cmd_str,NULL,TCORE_AT_NO_RESULT,
-                                       on_response_send_pdp_activate_cmd,ps_context );
-       if(NULL == pending)
-       {
-               err("Unable to get the create a AT request ");
-               goto error;
-       }
-       
-       tcore_hal_send_request(hal, pending);
-       dbg("Exit: Successfully");
-       return ;
-       
-error:
-       {
-               dbg("Unable to get the pending");
-               unable_to_get_pending(co_ps,ps_context);
-               return;
-       }
-}
-
-static void on_response_xdns_enable_cmd(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       TcoreATResponse *resp = (TcoreATResponse *)data;
-       CoreObject *co_ps =  tcore_pending_ref_core_object(p);
-       CoreObject *ps_context = user_data;
-       dbg("Entered");
-       if(resp->success)
-       {
-               dbg("Response OK");
-               dbg("DNS address getting is Enabled");
-       }
-       else
-       {
-               dbg("Response NOK");
-               /*If response to enable the DNS NOK then we will use google DNS for the PDP context*/
-       }
-       send_pdp_activate_cmd(co_ps, ps_context);
-       dbg("Exiting");
-       return; 
-}
-
-static void send_xdns_enable_cmd(CoreObject *co_ps,CoreObject *ps_context)
-{
-       TcoreHal *hal = NULL;
-       TcorePending *pending = NULL;
-       int cid = -1 ;
-       char cmd_str[MAX_AT_CMD_STR_LEN] ;
-       
-       dbg("Entered");
-       memset(cmd_str,0x0,MAX_AT_CMD_STR_LEN);
-
-       hal = tcore_object_get_hal(co_ps);
-       cid = tcore_context_get_id(ps_context);
-
-       (void)sprintf(cmd_str, "AT+XDNS=%d,%d%c",cid,AT_XDNS_ENABLE,CR);
-       pending = tcore_at_pending_new(co_ps,cmd_str, NULL, TCORE_AT_NO_RESULT,
-                                       on_response_xdns_enable_cmd, ps_context );
-       if(NULL == pending)
-       {
-               err("Unable to get the create a AT request ");
-               goto error;
-       }
-       tcore_hal_send_request(hal, pending);
-       dbg("Exiting Successfully");
-       return ;
-
-error:
-       dbg("Unable to create pending for the AT Request");
-       unable_to_get_pending(co_ps,ps_context);
-       return;
-}
-
-static void on_response_define_pdp_context(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse *resp = data;
-       CoreObject *ps_context = (CoreObject *)user_data;
-       CoreObject *co_ps = tcore_pending_ref_core_object(p);
-               
-       dbg("Entered");
-       if(resp->success)
-       {
-               dbg("Response OK");
-               send_xdns_enable_cmd(co_ps,ps_context);
-       }
-       else
-       {
-               dbg("response NOK");
-               unable_to_get_pending(co_ps,ps_context);
-       }
-       dbg("Exiting");
-       return;
-}
-
-static TReturn send_define_pdp_context_cmd(CoreObject *co_ps, CoreObject *ps_context)
-{
-       
-       TcoreHal *hal = NULL;
-       TcorePending *pending = NULL;
-       char *apn = NULL;
-       char *addr = NULL;
-       char cmd_str[MAX_AT_CMD_STR_LEN] ={0} ;
-       char pdp_type_str[10] = {0};
-       unsigned int cid = PS_INVALID_CID;
-       enum co_context_type pdp_type;
-       enum co_context_d_comp d_comp;
-       enum co_context_h_comp h_comp;
-               
-       dbg("Entered");
-
-       cid = tcore_context_get_id(ps_context);
-       
-       pdp_type = tcore_context_get_type(ps_context);
-       d_comp = tcore_context_get_data_compression(ps_context);
-       h_comp = tcore_context_get_header_compression(ps_context);
-       apn = tcore_context_get_apn(ps_context);
-       //addr = tcore_context_get_address(ps_context);
-
-       /* FIXME: Before MUX setup, use PHY HAL directly. */
-       hal = tcore_object_get_hal(co_ps);
-       switch(pdp_type)
-       {
-               case CONTEXT_TYPE_X25:
-               {
-                       dbg("CONTEXT_TYPE_X25");
-                       strcpy(pdp_type_str,"X.25");
-                       break;
-               }
-               case CONTEXT_TYPE_IP:
-               {
-                       dbg("CONTEXT_TYPE_IP");
-                       strcpy(pdp_type_str,"IP");
-               }
-               break;
-               case CONTEXT_TYPE_PPP:
-               {
-                       dbg("CONTEXT_TYPE_PPP");
-                       strcpy(pdp_type_str,"PPP");
-               }
-               break;
-               case CONTEXT_TYPE_IPV6:
-               {
-                       dbg("CONTEXT_TYPE_IPV6");
-                       strcpy(pdp_type_str,"IPV6");
-                       break;
-               }
-               default :
-               {
-                       /*PDP Type not supported supported*/
-                       dbg("Unsupported PDP type :- %d returning ",pdp_type);
-                       goto error;
-               }
-       }
-       dbg("Activating context for CID :- %d",cid);
-       if(addr)
-               (void)sprintf(cmd_str, "AT+CGDCONT=%d,\"%s\",\"%s\",%s,%d,%d%c",cid,pdp_type_str,apn,addr,d_comp,h_comp,CR);
-       else
-               (void)sprintf(cmd_str, "AT+CGDCONT=%d,\"%s\",\"%s\",,%d,%d%c",cid,pdp_type_str,apn,d_comp,h_comp,CR);
-       pending = tcore_at_pending_new(co_ps,cmd_str,NULL,TCORE_AT_NO_RESULT,
-                                       on_response_define_pdp_context,ps_context );
-       
-       if(NULL == pending)
-       {
-               dbg("Unable to get the create a Pending ");
-               goto error;
-       }
-       tcore_hal_send_request(hal, pending);
-       (void)tcore_context_set_state(ps_context, CONTEXT_STATE_ACTIVATING);
-       return TCORE_RETURN_SUCCESS;
-       
-error:
-       {
-               unable_to_get_pending(co_ps,ps_context);
-               return TCORE_RETURN_FAILURE;
-       }
-}
-
-static TReturn activate_ps_context(CoreObject *co_ps, CoreObject *ps_context, void *user_data)
-{
-       dbg("Entered");
-       return send_define_pdp_context_cmd(co_ps,ps_context);
-}
-
-
-static struct tcore_ps_operations ps_ops =
-{
-       .activate_context = activate_ps_context,
-       .deactivate_context = deactivate_ps_context
-};
-
-gboolean s_ps_init(TcorePlugin *p,TcoreHal *hal)
-{
-       CoreObject *o;
-       struct context *context_table = NULL;
-
-       dbg("Entered");
-       o = tcore_ps_new(p,"umts_ps", &ps_ops, hal);
-
-       if (!o)
-               return FALSE;
-       tcore_object_link_user_data(o, (void *)context_table);
-       
-       tcore_object_add_callback(o, "+CGEV", on_event_cgev_handle,p);
-       tcore_object_add_callback(o, "+XNOTIFYDUNSTATUS", on_event_dun_call_notification, p);
-       
-       dbg("Exiting");
-       return TRUE;
-}
-
-void s_ps_exit(TcorePlugin *p)
-{
-       CoreObject *o;
-
-       dbg("Entered");
-       o = tcore_plugin_ref_core_object(p,"umts_ps");
-       if (!o)
-               return;
-       
-       tcore_ps_free(o);
-       dbg("Exiting");
-}
-
-
+/**\r
+ * tel-plugin-samsung\r
+ *\r
+ * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved\r
+ *\r
+ * Contact: Arun Shukla <arun.shukla@samsung.com>\r
+ *\r
+ * PROPRIETARY/CONFIDENTIAL\r
+ *\r
+ * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information").\r
+ * You shall not disclose such Confidential Information and shall\r
+ * use it only in accordance with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS.\r
+ * SAMSUNG make no representations or warranties about the suitability\r
+ * of the software, either express or implied, including but not\r
+ * limited to the implied warranties of merchantability, fitness for a particular purpose, or non-infringement.\r
+ * SAMSUNG shall not be liable for any damages suffered by licensee as\r
+ * a result of using, modifying or distributing this software or its derivatives.\r
+ */\r
+\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include <unistd.h>\r
+\r
+#include <glib.h>\r
+#include <fcntl.h>\r
+#include <sys/ioctl.h>\r
+\r
+#include <tcore.h>\r
+#include <hal.h>\r
+#include <core_object.h>\r
+#include <plugin.h>\r
+#include <queue.h>\r
+#include <co_ps.h>\r
+#include <co_context.h>\r
+#include <storage.h>\r
+#include <server.h>\r
+#include <at.h>\r
+#include <util.h>\r
+#include <type/ps.h>\r
+\r
+#include "s_common.h"\r
+#include "s_ps.h"\r
+\r
+\r
+\r
+#define VNET_CH_PATH_BOOT0     "/dev/umts_boot0"\r
+#define IOCTL_CG_DATA_SEND  _IO('o', 0x37)\r
+\r
+/*Invalid Session ID*/\r
+#define PS_INVALID_CID 999 /*Need to check */\r
+\r
+/*Maximum String length Of the Command*/\r
+#define MAX_AT_CMD_STR_LEN     150\r
+\r
+/*Command for PDP activation and Deactivation*/\r
+#define AT_PDP_ACTIVATE 1\r
+#define AT_PDP_DEACTIVATE 0\r
+\r
+#define AT_XDNS_ENABLE 1\r
+#define AT_XDNS_DISABLE 0\r
+#define AT_SESSION_DOWN 0\r
+static void _ps_free(void * ptr)\r
+{\r
+       dbg("Entered");\r
+       if(ptr)\r
+       {\r
+               (void)free(ptr);\r
+               ptr = NULL;\r
+       }\r
+       dbg("Exit");\r
+       return;\r
+}\r
+static void _unable_to_get_pending(CoreObject *co_ps,CoreObject *ps_context)\r
+{\r
+       struct tnoti_ps_call_status data_resp = {0};\r
+       dbg("Entered");\r
+       data_resp.context_id = tcore_context_get_id(ps_context);\r
+       data_resp.state = AT_SESSION_DOWN;/*check value of state*/\r
+       data_resp.result =0xFF;/*check error value*/\r
+       tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(co_ps)), co_ps,\r
+               TNOTI_PS_CALL_STATUS, sizeof(struct tnoti_ps_call_status), &data_resp);\r
+       (void)tcore_context_set_state(ps_context, CONTEXT_STATE_DEACTIVATED);\r
+       dbg("Exit");\r
+}\r
+static TReturn _pdp_device_control(unsigned int cid)\r
+{\r
+       int fd = -1;\r
+       int ret = -1;\r
+       fd = open ( VNET_CH_PATH_BOOT0, O_RDWR );\r
+       if(fd < 0)\r
+       {\r
+               dbg("error : open [ %s ] [ %s ]", VNET_CH_PATH_BOOT0, strerror(errno));\r
+               return -1;\r
+       }\r
+       /*To Do for different Cids*/\r
+       dbg("Send IOCTL: arg 0x05 (0101) HSIC1, cid=%d \n",cid);\r
+       if(cid == 1)\r
+       {\r
+               ret = ioctl(fd, IOCTL_CG_DATA_SEND, 0x05);\r
+       }\r
+       else if(cid == 2)\r
+       {\r
+               ret = ioctl(fd, IOCTL_CG_DATA_SEND, 0xA);\r
+       }\r
+       else\r
+       {\r
+               dbg("More Than 2 context are not supported right Now");\r
+       }\r
+       close(fd);\r
+       if (ret < 0)\r
+       {\r
+               dbg("[ error ] send IOCTL_CG_DATA_SEND (0x%x) fail!! \n",IOCTL_CG_DATA_SEND);\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+       else\r
+       {\r
+               dbg("[ ok ] send IOCTL_CG_DATA_SEND (0x%x) success!! \n",IOCTL_CG_DATA_SEND);\r
+               return TCORE_RETURN_SUCCESS;\r
+       }\r
+}\r
+\r
+static gboolean on_event_cgev_handle(CoreObject *co_ps, const void *data, void *user_data)\r
+{\r
+\r
+       char *token = NULL;\r
+       GSList *tokens= NULL;\r
+    GSList *lines = NULL;\r
+       const char *line = NULL;\r
+       char *noti_data = NULL;\r
+       int i = 0;\r
+       int value = 20;\r
+       int state = -1;\r
+       struct tnoti_ps_call_status data_resp = {0};\r
+\r
+       dbg("Entered");\r
+       lines = (GSList*)data;\r
+       line = (const char *)lines->data;\r
+       dbg("Lines->data :-%s",line);\r
+\r
+       tokens = tcore_at_tok_new(line);\r
+       switch(g_slist_length(tokens))\r
+       {\r
+               case 0:\r
+                       {\r
+                               dbg("No token present: Ignore +CGEV Notifications ");\r
+                               return TRUE;\r
+                       }\r
+                       case 1:\r
+                       {\r
+                               dbg("one Token present");\r
+                               noti_data = g_slist_nth_data(tokens, 0);\r
+                               dbg("notification data :-%s",noti_data);\r
+                               if(0 ==  strcmp(noti_data,"ME CLASS B"))\r
+                               {\r
+                                       dbg("ME Class B notification received");\r
+                                       goto ignore;\r
+                               }\r
+                               if(0 ==  strcmp(noti_data,"NW CLASS A"))\r
+                               {\r
+                                       dbg("NW Class A notification received");\r
+                                       goto ignore;\r
+                               }\r
+                               token = strtok(noti_data, " ");\r
+                               while(token != NULL)\r
+                               {\r
+                                       if((i == 0) && (0!=  strcmp(token,"ME")))\r
+                                       {\r
+                                               break;\r
+                                       }\r
+                                       if((i == 1) && (0!=  strcmp(token,"PDN")))\r
+                                       {\r
+                                               break;\r
+                                       }\r
+                                       if((i == 2) && (0 ==  strcmp(token,"ACT")))\r
+                                       {\r
+                                               state = 1;\r
+                                       }\r
+                                       if((i == 2) && (0 ==  strcmp(token,"DEACT")))\r
+                                       {\r
+                                               state = 0;\r
+                                       }\r
+                                       if(i == 3 )\r
+                                       {\r
+                                               value = atoi(token);\r
+                                               break;\r
+                                       }\r
+                                       i++;\r
+                                       token = strtok(NULL, " ");\r
+                               }\r
+                               dbg("value:%d ",value);\r
+                               i = 0;\r
+                               break;\r
+                       }\r
+                       case 3:\r
+                       {\r
+                               i = 0;\r
+                               state = 0;\r
+                               value = 0;\r
+                               dbg("Three Token present");\r
+                               noti_data = g_slist_nth_data(tokens, 0);\r
+                               dbg("notification data :-%s",noti_data);\r
+                               token = strtok(noti_data, " ");\r
+                               while(token != NULL)\r
+                               {\r
+                                       if((i == 0) && (0 ==  strcmp(token,"ME")))\r
+                                       {\r
+                                               state = 1;\r
+                                       }\r
+                                       if((i == 1) && (0!=  strcmp(token,"DEACT")))\r
+                                       {\r
+                                               break;\r
+                                       }\r
+                                       if((i == 2) && (0 ==  strcmp(token,"\"IP\"")) && (0 == state))\r
+                                       {\r
+                                               dbg("MObile Deactiavted the Context");\r
+                                               value = 10;\r
+                                               break;\r
+                                       }\r
+                                       if((i == 2) && (0 ==  strcmp(token,"\"IP\"")) && (1 == state))\r
+                                       {\r
+                                               dbg("NW Deactiavted the Context");\r
+                                               value = 10;\r
+                                               break;\r
+                                       }\r
+                                       i++;\r
+                                       token = strtok(NULL, " ");\r
+                               }\r
+                               if(value == 10 && state == 0)\r
+                               {\r
+                                       dbg("Recieved Notification for Context deactivations from network");\r
+                                       noti_data = g_slist_nth_data(tokens, 1);\r
+                                       dbg("PDP Address :- %s",noti_data);\r
+                                       noti_data = g_slist_nth_data(tokens, 2);\r
+                                       dbg("CID got deactivated :- %d",atoi(noti_data));\r
+                               }\r
+                               if(value == 10 && state == 1)\r
+                               {\r
+                                       dbg("Recieved Notification for Context deactivations from Mobile");\r
+                                       noti_data = g_slist_nth_data(tokens, 1);\r
+                                       dbg("PDP Address :- %s",noti_data);\r
+                                       noti_data = g_slist_nth_data(tokens, 2);\r
+                                       dbg("CID got deactivated :- %d",atoi(noti_data));\r
+                               }\r
+                               data_resp.context_id = atoi(noti_data);\r
+                               data_resp.state = 3;/*check value of state*/\r
+                               dbg("State of the service :- %d",data_resp.state);\r
+                               data_resp.result =0xFF;/*check error value*/\r
+                               dbg("Sending the notification");\r
+                               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(co_ps)), co_ps,\r
+                               TNOTI_PS_CALL_STATUS, sizeof(struct tnoti_ps_call_status), &data_resp);\r
+                               state = 100;\r
+                               value  = 100;\r
+                               break;\r
+               }\r
+               default:\r
+               {\r
+                       dbg("Ignore +CGEV Notifications ");\r
+               }\r
+       }\r
+       if(state == 1)\r
+       {\r
+               dbg("Notification recieved for Activation of CID:-%d",value);\r
+       }\r
+       else if(state == 0)\r
+       {\r
+               dbg("Notification recieved for Deactivation of CID:-%d",value);\r
+       }\r
+       else\r
+       {\r
+               dbg("ignore");\r
+       }\r
+ignore:\r
+       tcore_at_tok_free(tokens);\r
+       return TRUE;\r
+}\r
+\r
+static gboolean on_event_dun_call_notification(CoreObject *o, const void *data, void *user_data)\r
+{\r
+       GSList *tokens=NULL;\r
+       const char *line = NULL;\r
+       int value = 0;\r
+       GSList *lines = NULL;\r
+       dbg("Entered");\r
+\r
+       lines = (GSList*)data;\r
+       if (1 != g_slist_length(lines))\r
+       {\r
+               dbg("unsolicited msg but multiple line");\r
+               goto OUT;\r
+       }\r
+       line = (char*)(lines->data);\r
+       tokens = tcore_at_tok_new(line);\r
+       value = atoi(g_slist_nth_data(tokens, 0));\r
+\r
+       /*\r
+       <status> may be\r
+       0: DUN activation in progress\r
+       1: DUN deactivation in progress\r
+       2: DUN activated\r
+       3: DUN deactivated\r
+       */\r
+       switch(value)\r
+       {\r
+               case 0:/*Fall Through*/\r
+               case 1:\r
+               {\r
+                       break;\r
+               }\r
+               case 2:\r
+               {\r
+                       /*To Do:- Fill Data structure : data*/\r
+                       tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o,\r
+                       TNOTI_PS_EXTERNAL_CALL, sizeof(struct tnoti_ps_external_call), &data);\r
+               }\r
+               case 3:\r
+               {\r
+                       /*To Do:- Fill Data structure : data*/\r
+                       tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o,\r
+                       TNOTI_PS_EXTERNAL_CALL, sizeof(struct tnoti_ps_external_call), &data);\r
+               }\r
+               break;\r
+               default:\r
+               goto OUT;\r
+       }\r
+       OUT:\r
+       if(NULL!=tokens)\r
+       {\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+       return TRUE;\r
+}\r
+static void on_response_undefine_context_cmd(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       CoreObject *co_ps = NULL;\r
+       const TcoreATResponse *resp = data;\r
+       CoreObject *ps_context = user_data;\r
+       dbg("Entered");\r
+       co_ps = tcore_pending_ref_core_object(p);\r
+       if(resp->success)\r
+       {\r
+               dbg("Response Ok");\r
+               /*getting the IP address and DNS from the modem*/\r
+       }\r
+       dbg("Response NOk");\r
+       _unable_to_get_pending(co_ps,ps_context);\r
+       return;\r
+}\r
+\r
+static void send_undefine_context_cmd(CoreObject *co_ps,CoreObject *ps_context)\r
+{\r
+       TcoreHal *hal = NULL;\r
+       TcorePending *pending = NULL;\r
+       char cmd_str[MAX_AT_CMD_STR_LEN] ;\r
+       int cid = 0;\r
+\r
+       dbg("Entered");\r
+       memset(cmd_str,0x0,MAX_AT_CMD_STR_LEN);\r
+\r
+       /* FIXME: Before MUX setup, use PHY HAL directly. */\r
+       hal = tcore_object_get_hal(co_ps);\r
+\r
+       /*Getting Context ID from Core Object*/\r
+       cid = tcore_context_get_id(ps_context);\r
+\r
+       (void)sprintf(cmd_str, "AT+CGDCONT=%d",cid);\r
+       pending = tcore_at_pending_new(co_ps,cmd_str,NULL,TCORE_AT_NO_RESULT,\r
+                                       on_response_undefine_context_cmd,ps_context );\r
+       if(NULL == pending)\r
+       {\r
+               err("Unable to get the create a AT request ");\r
+               goto error;\r
+       }\r
+       tcore_hal_send_request(hal, pending);\r
+       dbg("Exit: Successfully");\r
+       return ;\r
+error:\r
+       {\r
+               dbg("Exit: With error");\r
+               _unable_to_get_pending(co_ps,ps_context);\r
+               return;\r
+       }\r
+}\r
+static void on_response_data_counter_command(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       CoreObject *ps_context = user_data;\r
+       const TcoreATResponse *resp = data;\r
+       CoreObject *co_ps = tcore_pending_ref_core_object(p);\r
+\r
+       GSList *tokens=NULL;\r
+       GSList *pRespData;\r
+       const char *line = NULL;\r
+       int no_pdp_active =0;\r
+       unsigned long long Rx;\r
+       unsigned long long Tx;\r
+       int cid = tcore_context_get_id(ps_context);\r
+       dbg("Entered");\r
+\r
+       if(resp->final_response)\r
+       {\r
+               dbg("Response OK");\r
+               dbg(" response lines : -%s",resp->lines);\r
+               if(resp->lines)\r
+               {\r
+                       pRespData =  (GSList*)resp->lines;\r
+                       no_pdp_active = g_slist_length(pRespData);\r
+                       dbg("Total Number of Active PS Context :- %d",no_pdp_active);\r
+\r
+                       if(no_pdp_active == 0)\r
+                       {\r
+                               return;\r
+                       }\r
+                       while(pRespData)\r
+                       {\r
+                               dbg("Entered the Loop pRespData");\r
+\r
+                               line = (const char*)pRespData->data;\r
+                               dbg("Response->lines->data :%s",line);\r
+                               tokens = tcore_at_tok_new(line);\r
+                               if(cid == atoi(g_slist_nth_data(tokens, 0)))\r
+                               {\r
+                                       dbg("Found the data for our CID");\r
+                                       Tx = (unsigned long long)g_ascii_strtoull((g_slist_nth_data(tokens,1)), NULL, 10);\r
+                                       dbg("Tx: %d", Tx);\r
+\r
+                                       Rx = (unsigned long long)g_ascii_strtoull((g_slist_nth_data(tokens, 2)), NULL, 10);\r
+                                       dbg("Rx: %d", Rx);\r
+\r
+                                       tcore_at_tok_free(tokens);\r
+                                       tokens = NULL;\r
+                                       dbg("Exiting the Loop pRespData");\r
+                                       break;\r
+                               }\r
+                               tcore_at_tok_free(tokens);\r
+                               tokens = NULL;\r
+                               pRespData= pRespData->next;\r
+\r
+                       }\r
+                       dbg("Sending Data counter notifications");\r
+\r
+                       tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(co_ps)), co_ps,\r
+                               TNOTI_PS_CURRENT_SESSION_DATA_COUNTER, 0, NULL);\r
+                       return;\r
+               }\r
+               else\r
+               {\r
+               dbg("No Active PS Context");\r
+               }\r
+       }\r
+       dbg("Response NOK");\r
+}\r
+\r
+static TReturn send_data_counter_command(CoreObject *co_ps,CoreObject *ps_context)\r
+{\r
+       TcoreHal *hal = NULL;\r
+       TcorePending *pending = NULL;\r
+       char cmd_str[MAX_AT_CMD_STR_LEN] ;\r
+\r
+       dbg("Enetered");\r
+       memset(cmd_str,0x0,MAX_AT_CMD_STR_LEN);\r
+\r
+       hal = tcore_object_get_hal(co_ps);\r
+\r
+       (void)sprintf(cmd_str, "AT+XGCNTRD");\r
+       pending = tcore_at_pending_new(co_ps,cmd_str,"+XGCNTRD",TCORE_AT_MULTILINE,\r
+                                       on_response_data_counter_command,ps_context );\r
+       if(TCORE_RETURN_SUCCESS == tcore_hal_send_request(hal,pending))\r
+       {\r
+               return TCORE_RETURN_SUCCESS;\r
+       }\r
+       _unable_to_get_pending(co_ps,ps_context);\r
+       return TCORE_RETURN_FAILURE;\r
+/*Add code if unable to get the data usage*/\r
+}\r
+static void on_response_deactivate_ps_context(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       CoreObject *co_ps = tcore_pending_ref_core_object(p);\r
+       CoreObject *ps_context = user_data;\r
+       const TcoreATResponse *resp = data;\r
+       int cid ;\r
+\r
+       cid = tcore_context_get_id(ps_context);\r
+       if(resp->success)\r
+       {\r
+               dbg("Response OK");\r
+               /*get the data usage and report it application*/\r
+               (void)send_data_counter_command(co_ps,ps_context);\r
+               /*get the HSDPA status and report it to server*/\r
+       }\r
+       else\r
+       {\r
+               dbg("Response NOK");\r
+               send_undefine_context_cmd(co_ps,ps_context);\r
+       }\r
+       return;\r
+}\r
+\r
+static TReturn deactivate_ps_context(CoreObject *co_ps, CoreObject *ps_context, void *user_data)\r
+{\r
+       TcoreHal *hal = NULL;\r
+       TcorePending *pending = NULL;\r
+       unsigned int cid = PS_INVALID_CID;\r
+       char cmd_str[MAX_AT_CMD_STR_LEN] ;\r
+\r
+       dbg("Entered");\r
+       memset(cmd_str,0x0,MAX_AT_CMD_STR_LEN);\r
+\r
+       /*Getting Context ID from Core Object*/\r
+       cid = tcore_context_get_id(ps_context);\r
+\r
+       /* FIXME: Before MUX setup, use PHY HAL directly. */\r
+       hal = tcore_object_get_hal(co_ps);\r
+\r
+       (void)sprintf(cmd_str, "AT+CGACT=%d,%d",AT_PDP_DEACTIVATE,cid);\r
+       dbg("At commands :- %s",cmd_str);\r
+\r
+       pending = tcore_at_pending_new(co_ps,cmd_str,NULL,TCORE_AT_NO_RESULT,\r
+                                       on_response_deactivate_ps_context,ps_context );\r
+       if(TCORE_RETURN_SUCCESS == tcore_hal_send_request(hal,pending))\r
+       {\r
+               (void)tcore_context_set_state(ps_context,CONTEXT_STATE_DEACTIVATING);\r
+               return TCORE_RETURN_SUCCESS;\r
+       }\r
+       _unable_to_get_pending(co_ps,ps_context);\r
+       return TCORE_RETURN_FAILURE;\r
+}\r
+\r
+static void on_response_get_dns_cmnd(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+\r
+       struct tnoti_ps_pdp_ipconfiguration noti = {0};\r
+       struct tnoti_ps_call_status data_status = {0};\r
+       char devname[10] = {0,};\r
+       char dns[50] = {0}; /* 3 characted for each IP address value: 12 for IPv4, 48 for IP6*/\r
+       char pdp_address[50]={0};\r
+       char addr[4]= {0};\r
+       GSList *tokens=NULL;\r
+       GSList *pRespData;\r
+       const char *line = NULL;\r
+       char *token_dns = NULL;\r
+       char *token_add = NULL;\r
+\r
+       char *token_pdp_address = NULL;\r
+       int no_pdp_active =0;\r
+       int index = 0;\r
+\r
+       CoreObject *ps_context = user_data;\r
+       const TcoreATResponse *resp = data;\r
+       CoreObject *co_ps = tcore_pending_ref_core_object(p);\r
+       int cid = tcore_context_get_id(ps_context);\r
+\r
+       dbg("Entered");\r
+\r
+       if(resp->final_response)\r
+       {\r
+               dbg("Response OK");\r
+               if(resp->lines)\r
+               {\r
+                       dbg("DNS data present in the Response");\r
+                       pRespData =  (GSList*)resp->lines;\r
+                       no_pdp_active = g_slist_length(pRespData);\r
+                       dbg("Total Number of Active PS Context :- %d",no_pdp_active);\r
+                       if(0 == no_pdp_active)\r
+                       {\r
+                               goto exit_fail;\r
+                       }\r
+                       while(pRespData)\r
+                       {\r
+                               dbg("traversing the DNS data for each active context");\r
+                               line = (const char*)pRespData->data;\r
+                               dbg("Response->lines->data :%s",line);\r
+                               tokens = tcore_at_tok_new(line);\r
+                               if(cid == atoi(g_slist_nth_data(tokens, 0)))\r
+                               {\r
+                                       dbg("Found the DNS details for the Current context");\r
+                                       dbg("Context Id of The Context : %d",atoi(g_slist_nth_data(tokens, 0)));\r
+                                       break;\r
+                               }\r
+                               tcore_at_tok_free(tokens);\r
+                               tokens = NULL;\r
+                               pRespData= pRespData->next;\r
+                       }\r
+                       { /* Read primary DNS */\r
+                               token_dns = g_slist_nth_data(tokens,1);\r
+                               /* Strip off starting " and ending " from this token to read actual PDP address */\r
+                               strncpy(dns, token_dns+1, strlen(token_dns)-2);\r
+                               dbg("Token_dns :%s",token_dns);\r
+                               dbg("Primary DNS :- %s",dns);\r
+                               index = 0;\r
+                               token_add = strtok(dns, ".");\r
+                               while(token_add != NULL)\r
+                               {\r
+                                       noti.primary_dns[index++]= atoi(token_add);\r
+                                       token_add = strtok(NULL, ".");\r
+                               }\r
+                       }\r
+                       { /* Read Secondary DNS */\r
+                               memset(dns,0x0,50);\r
+                               token_add = NULL;\r
+                               token_dns = g_slist_nth_data(tokens,2);\r
+                               /* Strip off starting " and ending " from this token to read actual PDP address */\r
+                               strncpy(dns, token_dns+1, strlen(token_dns)-2);\r
+\r
+                               dbg("Token_dns :%s",token_dns);\r
+                               dbg("Secondary DNS :- %s",dns);\r
+                               index = 0;\r
+                               token_add = strtok(dns, ".");\r
+                               while(token_add != NULL)\r
+                               {\r
+                                       noti.secondary_dns[index++]= atoi(token_add);\r
+                                       token_add = strtok(NULL, ".");\r
+                               }\r
+                       }\r
+                       tcore_at_tok_free(tokens);\r
+                       tokens = NULL;\r
+                       goto exit_success;\r
+               }\r
+               else\r
+               {\r
+                       dbg("No data present in the Response");\r
+               }\r
+\r
+       }\r
+       dbg("Response NOK");\r
+       exit_fail:\r
+       {\r
+               dbg("Adding default DNS");\r
+               dbg("Adding the Primary DNS");\r
+               noti.primary_dns[0] = 8;\r
+               noti.primary_dns[1] = 8;\r
+               noti.primary_dns[2] = 8;\r
+               noti.primary_dns[3] = 8;\r
+               dbg("Adding Secondary DNS");\r
+               noti.secondary_dns[0] = 8;\r
+               noti.secondary_dns[1] = 8;\r
+               noti.secondary_dns[2] = 4;\r
+               noti.secondary_dns[3] = 4;\r
+       }\r
+       exit_success:\r
+       {\r
+               dbg("Able to get the DNS from the DNS Query");\r
+               token_pdp_address = tcore_context_get_address(ps_context);\r
+               strncpy(pdp_address, token_pdp_address+1, strlen(token_pdp_address)-2);\r
+               _ps_free((void *)token_pdp_address);\r
+               dbg("PDP address :- %s",pdp_address);\r
+               /* Store IP address in char array, Telephony expected IP address in this format */\r
+               token_add = strtok(pdp_address, ".");\r
+               index = 0;\r
+               while((token_add != NULL) && (index<4)) /* Currently only IPv4 is supported */\r
+               {\r
+                       addr[index++]= atoi(token_add);\r
+                       token_add = strtok(NULL, ".");\r
+               }\r
+               noti.field_flag = (0x0001 & 0x0002 & 0x0004);\r
+               noti.err = 0;\r
+               noti.context_id = cid;\r
+               memcpy(&noti.ip_address, &addr, 4);\r
+               if (_pdp_device_control(cid) != TCORE_RETURN_SUCCESS)\r
+               {\r
+                       dbg("_pdp_device_control() failed. errno=%d", errno);\r
+               }\r
+               snprintf(devname, 10, "pdp%d", cid - 1);\r
+               memcpy(noti.devname, devname, 10);\r
+               dbg("devname = [%s]", devname);\r
+               if (tcore_util_netif_up(devname) != TCORE_RETURN_SUCCESS)\r
+               {\r
+                       dbg("util_netif_up() failed. errno=%d", errno);\r
+               }\r
+\r
+               dbg("Send Notification upwards of IP address");\r
+               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(co_ps)), co_ps, TNOTI_PS_PDP_IPCONFIGURATION,\r
+               sizeof(struct tnoti_ps_pdp_ipconfiguration), &noti);\r
+\r
+               data_status.context_id = cid;\r
+               data_status.state = 1;\r
+               data_status.result = 0 ;\r
+\r
+               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(co_ps)), co_ps,\r
+               TNOTI_PS_CALL_STATUS, sizeof(struct tnoti_ps_call_status), &data_status);\r
+               dbg("EXIT : Without error");\r
+               return;\r
+       }\r
+}\r
+\r
+static TReturn send_get_dns_cmd(CoreObject *co_ps,CoreObject *ps_context)\r
+{\r
+       TcoreHal *hal = NULL;\r
+       TcorePending *pending = NULL;\r
+       char cmd_str[MAX_AT_CMD_STR_LEN] ;\r
+       \r
+       memset(cmd_str,0x0,MAX_AT_CMD_STR_LEN);\r
+\r
+       dbg("Entered");\r
+       hal = tcore_object_get_hal(co_ps);\r
+\r
+       (void)sprintf(cmd_str, "AT+XDNS?");\r
+       pending = tcore_at_pending_new(co_ps,cmd_str,"+XDNS",TCORE_AT_MULTILINE,\r
+                                       on_response_get_dns_cmnd,ps_context );\r
+       if(TCORE_RETURN_SUCCESS == tcore_hal_send_request(hal,pending))\r
+       {\r
+               return TCORE_RETURN_SUCCESS;\r
+       }\r
+       _unable_to_get_pending(co_ps,ps_context);\r
+       return TCORE_RETURN_FAILURE;\r
+}\r
+\r
+static void on_response_get_pdp_address(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *resp = data;\r
+       CoreObject *co_ps =  tcore_pending_ref_core_object(p);\r
+       CoreObject *ps_context = user_data;\r
+       GSList *tokens=NULL;\r
+       const char *line;\r
+       char *token_pdp_address;\r
+       dbg("Enetered");\r
+       if(resp->final_response)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               if(resp->lines != NULL)\r
+               {\r
+                       dbg("resp->lines present ");\r
+                       line = (const char*)resp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       if (g_slist_length(tokens) < 2)\r
+                       {\r
+                               msg("invalid message");\r
+                               goto error;\r
+                       }\r
+                       dbg("line:- %s",line);\r
+                       /* CID is already stored in ps_context, skip over & read PDP address */\r
+                       token_pdp_address = g_slist_nth_data(tokens, 1);\r
+\r
+                       dbg("token_pdp_address :- %s",token_pdp_address);\r
+                       /* Strip off starting " and ending " from this token to read actual PDP address */\r
+                       (void)tcore_context_set_address(ps_context,(const char *)token_pdp_address);\r
+               }\r
+\r
+               (void)send_get_dns_cmd(co_ps,ps_context);\r
+       }\r
+       else\r
+       {\r
+               dbg("Response NOK");\r
+               /*without PDP address we will not be able to start packet service*/\r
+               (void)deactivate_ps_context(co_ps,ps_context,NULL);\r
+       }\r
+       error:\r
+       tcore_at_tok_free(tokens);\r
+       return;\r
+}\r
+\r
+static TReturn send_get_pdp_address_cmd(CoreObject *co_ps,CoreObject *ps_context)\r
+{\r
+       TcoreHal *hal = NULL;\r
+       TcorePending *pending = NULL;\r
+       unsigned int cid = PS_INVALID_CID;\r
+       char cmd_str[MAX_AT_CMD_STR_LEN] = {0};\r
+\r
+       dbg("Entered");\r
+       hal = tcore_object_get_hal(co_ps);\r
+\r
+       cid = tcore_context_get_id(ps_context);\r
+       (void)sprintf(cmd_str, "AT+CGPADDR=%d",cid);\r
+       pending = tcore_at_pending_new(co_ps,cmd_str,"+CGPADDR",TCORE_AT_SINGLELINE,\r
+       on_response_get_pdp_address,ps_context );\r
+       if(TCORE_RETURN_SUCCESS == tcore_hal_send_request(hal,pending))\r
+       {\r
+               return TCORE_RETURN_SUCCESS;\r
+       }\r
+       _unable_to_get_pending(co_ps,ps_context);\r
+       return TCORE_RETURN_FAILURE;\r
+}\r
+\r
+static void on_response_send_pdp_activate_cmd (TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       CoreObject *co_ps = NULL;\r
+       const TcoreATResponse *resp = data;\r
+       CoreObject *ps_context = user_data;\r
+\r
+       int cid;\r
+       cid = tcore_context_get_id(ps_context);\r
+\r
+\r
+       dbg("Entered");\r
+       if(!p)\r
+       {\r
+               goto error;\r
+       }\r
+       co_ps = tcore_pending_ref_core_object(p);\r
+\r
+       if(resp->success)\r
+       {\r
+               dbg("Response Ok");\r
+               /*getting the IP address and DNS from the modem*/\r
+               dbg("Getting the IP Address");\r
+               (void)send_get_pdp_address_cmd(co_ps,ps_context);\r
+               return;\r
+       }\r
+       else\r
+       {\r
+\r
+               dbg("Unable to actiavte PDP context for CID: %d ",cid);\r
+               dbg("Undefineing the PDP context");\r
+               (void)tcore_context_set_state(ps_context, CONTEXT_STATE_DEACTIVATED);\r
+               send_undefine_context_cmd(co_ps,ps_context);\r
+               return;\r
+       }\r
+error:\r
+       {\r
+               _unable_to_get_pending(co_ps,ps_context);\r
+               return;\r
+       }\r
+}\r
+\r
+static TReturn send_pdp_activate_cmd(CoreObject *co_ps, CoreObject *ps_context)\r
+{\r
+       TcoreHal *hal = NULL;\r
+       TcorePending *pending = NULL;\r
+       char cmd_str[MAX_AT_CMD_STR_LEN] = {0};\r
+       int cid = 0;\r
+       dbg("Entered");\r
+       /* FIXME: Before MUX setup, use PHY HAL directly. */\r
+       hal = tcore_object_get_hal(co_ps);\r
+\r
+       /*Getting Context ID from Core Object*/\r
+       cid = tcore_context_get_id(ps_context);\r
+       (void)sprintf(cmd_str, "AT+CGACT=%d,%d",AT_PDP_ACTIVATE,cid);\r
+       pending = tcore_at_pending_new(co_ps,cmd_str,NULL,TCORE_AT_NO_RESULT,\r
+                                       on_response_send_pdp_activate_cmd,ps_context);\r
+       if(TCORE_RETURN_SUCCESS == tcore_hal_send_request(hal,pending))\r
+       {\r
+               return TCORE_RETURN_SUCCESS;\r
+       }\r
+       _unable_to_get_pending(co_ps,ps_context);\r
+       return TCORE_RETURN_FAILURE;\r
+}\r
+\r
+static void on_response_xdns_enable_cmd(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       TcoreATResponse *resp = (TcoreATResponse *)data;\r
+       CoreObject *co_ps =  tcore_pending_ref_core_object(p);\r
+       CoreObject *ps_context = user_data;\r
+       dbg("Entered");\r
+       if(resp->success)\r
+       {\r
+               dbg("Response OK");\r
+               dbg("DNS address getting is Enabled");\r
+       }\r
+       else\r
+       {\r
+               dbg("Response NOK");\r
+               /*If response to enable the DNS NOK then we will use google DNS for the PDP context*/\r
+       }\r
+       (void)send_pdp_activate_cmd(co_ps,ps_context);\r
+       return;\r
+}\r
+\r
+static TReturn send_xdns_enable_cmd(CoreObject *co_ps,CoreObject *ps_context)\r
+{\r
+       TcoreHal *hal = NULL;\r
+       TcorePending *pending = NULL;\r
+       int cid = -1 ;\r
+       char cmd_str[MAX_AT_CMD_STR_LEN];\r
+\r
+       dbg("Entered");\r
+       memset(cmd_str,0x0,MAX_AT_CMD_STR_LEN);\r
+\r
+       hal = tcore_object_get_hal(co_ps);\r
+       cid = tcore_context_get_id(ps_context);\r
+\r
+       (void)sprintf(cmd_str, "AT+XDNS=%d,%d",cid,AT_XDNS_ENABLE);\r
+       pending = tcore_at_pending_new(co_ps,cmd_str, NULL, TCORE_AT_NO_RESULT,\r
+                                       on_response_xdns_enable_cmd, ps_context);\r
+       if(TCORE_RETURN_SUCCESS == tcore_hal_send_request(hal,pending))\r
+       {\r
+               return TCORE_RETURN_SUCCESS;\r
+       }\r
+       _unable_to_get_pending(co_ps,ps_context);\r
+       return TCORE_RETURN_FAILURE;\r
+}\r
+\r
+static void on_response_define_pdp_context(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *resp = data;\r
+       CoreObject *ps_context = (CoreObject *)user_data;\r
+       CoreObject *co_ps = tcore_pending_ref_core_object(p);\r
+\r
+       dbg("Entered");\r
+       if(resp->success)\r
+       {\r
+               dbg("Response OK");\r
+               send_xdns_enable_cmd(co_ps,ps_context);\r
+       }\r
+       else\r
+       {\r
+               dbg("response NOK");\r
+               _unable_to_get_pending(co_ps,ps_context);\r
+               dbg("Exiting");\r
+       }\r
+       return;\r
+       \r
+}\r
+\r
+static TReturn send_define_pdp_context_cmd(CoreObject *co_ps, CoreObject *ps_context)\r
+{\r
+\r
+       TcoreHal *hal = NULL;\r
+       TcorePending *pending = NULL;\r
+       char *apn = NULL;\r
+       char *addr = NULL;\r
+       char cmd_str[MAX_AT_CMD_STR_LEN] ={0} ;\r
+       char pdp_type_str[10] = {0};\r
+       unsigned int cid = PS_INVALID_CID;\r
+       enum co_context_type pdp_type;\r
+       enum co_context_d_comp d_comp;\r
+       enum co_context_h_comp h_comp;\r
+\r
+       dbg("Entered");\r
+\r
+       cid = tcore_context_get_id(ps_context);\r
+\r
+       pdp_type = tcore_context_get_type(ps_context);\r
+       d_comp = tcore_context_get_data_compression(ps_context);\r
+       h_comp = tcore_context_get_header_compression(ps_context);\r
+       apn = tcore_context_get_apn(ps_context);\r
+       addr = tcore_context_get_address(ps_context);\r
+\r
+       /* FIXME: Before MUX setup, use PHY HAL directly. */\r
+       hal = tcore_object_get_hal(co_ps);\r
+       switch(pdp_type)\r
+       {\r
+               case CONTEXT_TYPE_X25:\r
+               {\r
+                       dbg("CONTEXT_TYPE_X25");\r
+                       strcpy(pdp_type_str,"X.25");\r
+                       break;\r
+               }\r
+               case CONTEXT_TYPE_IP:\r
+               {\r
+                       dbg("CONTEXT_TYPE_IP");\r
+                       strcpy(pdp_type_str,"IP");\r
+               }\r
+               break;\r
+               case CONTEXT_TYPE_PPP:\r
+               {\r
+                       dbg("CONTEXT_TYPE_PPP");\r
+                       strcpy(pdp_type_str,"PPP");\r
+               }\r
+               break;\r
+               case CONTEXT_TYPE_IPV6:\r
+               {\r
+                       dbg("CONTEXT_TYPE_IPV6");\r
+                       strcpy(pdp_type_str,"IPV6");\r
+                       break;\r
+               }\r
+               default :\r
+               {\r
+                       /*PDP Type not supported supported*/\r
+                       dbg("Unsupported PDP type :- %d returning ",pdp_type);\r
+                       return TCORE_RETURN_FAILURE;\r
+               }\r
+       }\r
+       dbg("Activating context for CID :- %d",cid);\r
+       if(addr)\r
+               (void)sprintf(cmd_str, "AT+CGDCONT=%d,\"%s\",\"%s\",%s,%d,%d",cid,pdp_type_str,apn,addr,d_comp,h_comp);\r
+       else\r
+               (void)sprintf(cmd_str, "AT+CGDCONT=%d,\"%s\",\"%s\",,%d,%d",cid,pdp_type_str,apn,d_comp,h_comp);\r
+       pending = tcore_at_pending_new(co_ps,cmd_str,NULL,TCORE_AT_NO_RESULT,\r
+                                       on_response_define_pdp_context,ps_context );\r
+       if(TCORE_RETURN_SUCCESS == tcore_hal_send_request(hal,pending))\r
+       {\r
+               (void)tcore_context_set_state(ps_context,CONTEXT_STATE_ACTIVATING);\r
+               return TCORE_RETURN_SUCCESS;\r
+       }\r
+       _unable_to_get_pending(co_ps,ps_context);\r
+       return TCORE_RETURN_FAILURE;\r
+\r
+}\r
+\r
+static TReturn activate_ps_context(CoreObject *co_ps, CoreObject *ps_context, void *user_data)\r
+{\r
+       dbg("Entered");\r
+       return send_define_pdp_context_cmd(co_ps,ps_context);\r
+}\r
+\r
+\r
+static struct tcore_ps_operations ps_ops =\r
+{\r
+       .activate_context = activate_ps_context,\r
+       .deactivate_context = deactivate_ps_context\r
+};\r
+\r
+gboolean s_ps_init(TcorePlugin *p,TcoreHal *hal)\r
+{\r
+       CoreObject *o;\r
+       struct context *context_table = NULL;\r
+\r
+       dbg("Entered");\r
+       o = tcore_ps_new(p,"umts_ps", &ps_ops, hal);\r
+\r
+       if (!o)\r
+               return FALSE;\r
+       tcore_object_link_user_data(o, (void *)context_table);\r
+\r
+       tcore_object_add_callback(o, "+CGEV", on_event_cgev_handle,p);\r
+       tcore_object_add_callback(o, "+XNOTIFYDUNSTATUS", on_event_dun_call_notification, p);\r
+\r
+       dbg("Exiting");\r
+       return TRUE;\r
+}\r
+\r
+void s_ps_exit(TcorePlugin *p)\r
+{\r
+       CoreObject *o;\r
+\r
+       dbg("Entered");\r
+       o = tcore_plugin_ref_core_object(p,"umts_ps");\r
+       if (!o)\r
+               return;\r
+\r
+       tcore_ps_free(o);\r
+       dbg("Exiting");\r
+}\r
+\r
+\r
index 7a0081a..769066c 100755 (executable)
-/*
- * tel-plugin-imc
- *
- * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Hayoon Ko <hayoon.ko@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <glib.h>
-
-#include <tcore.h>
-#include <hal.h>
-#include <core_object.h>
-#include <plugin.h>
-#include <queue.h>
-#include <server.h>
-#include <co_sat.h>
-#include <user_request.h>
-#include <at.h>
-
-#include "s_common.h"
-#include "s_sat.h"
-#define ENVELOPE_CMD_LEN        256
-
-static struct tnoti_sat_proactive_ind *g_refresh_data = NULL;
-
-static TReturn s_terminal_response(CoreObject *o, UserRequest *ur);
-//static void setup_event_rsp_get_ipc(CoreObject *o, struct tel_sat_setup_event_list_tlv *setup_evt_list);
-static void on_confirmation_sat_message_send(TcorePending *p, gboolean result, void *user_data ); // from Kernel
-
-static void on_confirmation_sat_message_send( TcorePending *p, gboolean result, void *user_data )
-{
-       dbg("on_confirmation_modem_message_send - msg out from queue.\n");
-
-       if (result == FALSE) {
-               /* Fail */
-               dbg("SEND FAIL");
-       }
-       else {
-               dbg("SEND OK");
-       }
-}
-
-static enum tcore_response_command _find_resp_command(UserRequest *ur)
-{
-       enum tcore_request_command command;
-       command = tcore_user_request_get_command(ur);
-       switch(command){
-               case TREQ_SIM_VERIFY_PINS:
-                       return TRESP_SIM_VERIFY_PINS;
-                       break;
-               case TREQ_SIM_VERIFY_PUKS:
-                       return TRESP_SIM_VERIFY_PUKS;
-                       break;
-               case TREQ_SIM_CHANGE_PINS:
-                       return TRESP_SIM_CHANGE_PINS;
-                       break;
-               case TREQ_SIM_GET_FACILITY_STATUS:
-                       return TRESP_SIM_GET_FACILITY_STATUS;
-                       break;
-               case TREQ_SIM_DISABLE_FACILITY:
-                       return TRESP_SIM_DISABLE_FACILITY;
-                       break;
-               case TREQ_SIM_ENABLE_FACILITY:
-                       return TRESP_SIM_ENABLE_FACILITY;
-                       break;
-               case TREQ_SIM_GET_LOCK_INFO:
-                       return TRESP_SIM_GET_LOCK_INFO;
-                       break;
-               case TREQ_SIM_TRANSMIT_APDU:
-                       return TRESP_SIM_TRANSMIT_APDU;
-                       break;
-               case TREQ_SIM_GET_ATR:
-                       return TRESP_SIM_GET_ATR;
-                       break;
-               case TREQ_SIM_GET_ECC:
-                       return TRESP_SIM_GET_ECC;
-                       break;
-               case TREQ_SIM_GET_LANGUAGE:
-                       return TRESP_SIM_GET_LANGUAGE;
-                       break;
-               case TREQ_SIM_SET_LANGUAGE:
-                       return TRESP_SIM_SET_LANGUAGE;
-                       break;
-               case TREQ_SIM_GET_ICCID:
-                       return TRESP_SIM_GET_ICCID;
-                       break;
-               case TREQ_SIM_GET_MAILBOX:
-                       return TRESP_SIM_GET_MAILBOX;
-                       break;
-               case TREQ_SIM_GET_CALLFORWARDING:
-                       return TRESP_SIM_GET_CALLFORWARDING;
-                       break;
-               case TREQ_SIM_SET_CALLFORWARDING:
-                       return TRESP_SIM_SET_CALLFORWARDING;
-                       break;
-               case TREQ_SIM_GET_MESSAGEWAITING:
-                       return TRESP_SIM_GET_MESSAGEWAITING;
-                       break;
-               case TREQ_SIM_GET_CPHS_INFO:
-                       return TRESP_SIM_GET_CPHS_INFO;
-                       break;
-               case TREQ_SIM_GET_MSISDN:
-                       return TRESP_SIM_GET_MSISDN;
-                       break;
-               case TREQ_SIM_GET_SPN:
-                       return TRESP_SIM_GET_SPN;
-                       break;
-               case TREQ_SIM_GET_SPDI:
-                       return TRESP_SIM_GET_SPDI;
-                       break;
-               case TREQ_SIM_GET_OPL:
-                       return TRESP_SIM_GET_OPL;
-                       break;
-               case TREQ_SIM_GET_PNN:
-                       return TRESP_SIM_GET_PNN;
-                       break;
-               case TREQ_SIM_GET_CPHS_NETNAME:
-                       return TRESP_SIM_GET_CPHS_NETNAME;
-                       break;
-               case TREQ_SIM_GET_OPLMNWACT:
-                       return TRESP_SIM_GET_OPLMNWACT;
-                       break;
-               case TREQ_SIM_REQ_AUTHENTICATION:
-                       return TRESP_SIM_REQ_AUTHENTICATION;
-                       break;
-               default:
-                       break;
-       }
-       return TRESP_UNKNOWN;
-}
-
-/*static void on_response_set_up_eventlist(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       UserRequest *ur = NULL;
-       CoreObject *o = NULL;
-
-       dbg("SAT setup event list get rsp");
-       o = tcore_pending_ref_core_object(p);
-       ur = tcore_user_request_ref((UserRequest *)user_data);
-
-       s_terminal_response(o, ur);
-       return;
-}*/
-
-/*static void on_event_sat_envelope_resp(CoreObject *o, const void *event_info, void *user_data)
-{
-
-}
-
-static void on_event_sat_refresh_status(CoreObject *o, const void *event_info, void *user_data)
-{
-       ipc_sat_refresh_noti_type *ind = (ipc_sat_refresh_noti_type*) event_info;
-       dbg("CP SAT refresh status[%d]-0:start,1:end,2:fail", ind->action_type);
-
-       if (ind->action_type == IPC_SAT_REFRESH_ACTION_END) {
-               if(g_refresh_data) {
-                       tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_SAT_PROACTIVE_CMD,
-                               sizeof(struct tnoti_sat_proactive_ind), g_refresh_data);
-                       free(g_refresh_data);
-               } else {
-                       dbg("refresh proactive command data is null");
-               }
-       }
-}*/
-
-
-static void on_response_terminal_response_confirm(CoreObject *o, const void *event_info, void *user_data)
-{
-       dbg("Function Entry");
-       dbg("Function Exit");
-}
-
-static void on_event_sat_proactive_command(CoreObject *o, const void *event_info, void *user_data)
-{
-       
-       struct tcore_sat_proactive_command decoded_data;
-       struct tnoti_sat_proactive_ind proactive_noti;
-       int     len_proactive_cmd = 0;
-       GSList  *lines= NULL;
-       GSList  *tokens= NULL;
-       char    *line= NULL;
-       char    *hexData= NULL;
-       char    *tmp= NULL;
-       char    *recordData= NULL;
-
-       dbg("Function Entry");
-
-       memset(&proactive_noti, 0x00, sizeof(struct tnoti_sat_proactive_ind));
-       lines = (GSList*)event_info;
-       line = (char*)lines->data;
-       tokens = tcore_at_tok_new(line);
-       if (g_slist_length(tokens) != 1) {
-               dbg("invalid message");
-               tcore_at_tok_free(tokens);
-               return FALSE;
-       }
-       hexData = (char*)g_slist_nth_data(tokens, 0);
-       
-       dbg("hexdata %s ", hexData);
-       dbg("hexdata length %d", strlen(hexData));
-
-       tmp = calloc(1, strlen(hexData)-1);
-       if(tmp == NULL){
-               return;
-       }       
-       memcpy(tmp, hexData+1, strlen(hexData)-2);
-
-       recordData = util_hexStringToBytes(tmp);
-       dbg("recordData: %x", recordData);
-       free(tmp);
-       util_hex_dump("    ", strlen(hexData)/2, recordData);
-       len_proactive_cmd = strlen(recordData);
-       dbg("len_proactive_cmd = %d", len_proactive_cmd);
-       tcore_sat_decode_proactive_command(recordData, (strlen(hexData)/2) - 1, &decoded_data);
-       free(recordData);
-
-       proactive_noti.cmd_number = decoded_data.cmd_num;
-       proactive_noti.cmd_type = decoded_data.cmd_type;
-
-       switch(decoded_data.cmd_type){
-               case SAT_PROATV_CMD_DISPLAY_TEXT:
-                       dbg("decoded command is display text!!");
-                       memcpy(&proactive_noti.proactive_ind_data.display_text, &decoded_data.data.display_text,        sizeof(struct tel_sat_display_text_tlv));
-                       break;
-               case SAT_PROATV_CMD_GET_INKEY:
-                       dbg("decoded command is get inkey!!");
-                       memcpy(&proactive_noti.proactive_ind_data.get_inkey, &decoded_data.data.get_inkey,      sizeof(struct tel_sat_get_inkey_tlv));
-                       break;
-               case SAT_PROATV_CMD_GET_INPUT:
-                       dbg("decoded command is get input!!");
-                       memcpy(&proactive_noti.proactive_ind_data.get_input, &decoded_data.data.get_input,      sizeof(struct tel_sat_get_input_tlv));
-                       break;
-               case SAT_PROATV_CMD_MORE_TIME:
-                       dbg("decoded command is more time!!");
-                       memcpy(&proactive_noti.proactive_ind_data.more_time, &decoded_data.data.more_time,      sizeof(struct tel_sat_more_time_tlv));
-                       break;
-               case SAT_PROATV_CMD_PLAY_TONE:
-                       dbg("decoded command is play tone!!");
-                       memcpy(&proactive_noti.proactive_ind_data.play_tone, &decoded_data.data.play_tone,      sizeof(struct tel_sat_play_tone_tlv));
-                       break;
-               case SAT_PROATV_CMD_SETUP_MENU:
-                       dbg("decoded command is SETUP MENU!!");
-                       memcpy(&proactive_noti.proactive_ind_data.setup_menu, &decoded_data.data.setup_menu, sizeof(struct tel_sat_setup_menu_tlv));
-                       break;
-               case SAT_PROATV_CMD_SELECT_ITEM:
-                       dbg("decoded command is select item!!");
-                       memcpy(&proactive_noti.proactive_ind_data.select_item, &decoded_data.data.select_item,  sizeof(struct tel_sat_select_item_tlv));
-                       break;
-               case SAT_PROATV_CMD_SEND_SMS:
-                       dbg("decoded command is send sms!!");
-                       memcpy(&proactive_noti.proactive_ind_data.send_sms, &decoded_data.data.send_sms,        sizeof(struct tel_sat_send_sms_tlv));
-                       break;
-               case SAT_PROATV_CMD_SEND_SS:
-                       dbg("decoded command is send ss!!");
-                       memcpy(&proactive_noti.proactive_ind_data.send_ss, &decoded_data.data.send_ss,  sizeof(struct tel_sat_send_ss_tlv));
-                       break;
-               case SAT_PROATV_CMD_SEND_USSD:
-                       dbg("decoded command is send ussd!!");
-                       memcpy(&proactive_noti.proactive_ind_data.send_ussd, &decoded_data.data.send_ussd,      sizeof(struct tel_sat_send_ussd_tlv));
-                       break;
-               case SAT_PROATV_CMD_SETUP_CALL:
-                       dbg("decoded command is setup call!!");
-                       memcpy(&proactive_noti.proactive_ind_data.setup_call, &decoded_data.data.setup_call,    sizeof(struct tel_sat_setup_call_tlv));
-                       break;
-               case SAT_PROATV_CMD_REFRESH:
-                       dbg("decoded command is refresh");
-                       memcpy(&proactive_noti.proactive_ind_data.refresh, &decoded_data.data.refresh, sizeof(struct tel_sat_refresh_tlv));
-                       break;
-               case SAT_PROATV_CMD_PROVIDE_LOCAL_INFO:
-                       dbg("decoded command is provide local info");
-                       memcpy(&proactive_noti.proactive_ind_data.provide_local_info, &decoded_data.data.provide_local_info, sizeof(struct tel_sat_provide_local_info_tlv));
-                       break;
-               case SAT_PROATV_CMD_SETUP_EVENT_LIST:
-                       dbg("decoded command is setup event list!!");
-                       memcpy(&proactive_noti.proactive_ind_data.setup_event_list, &decoded_data.data.setup_event_list, sizeof(struct tel_sat_setup_event_list_tlv));
-                       //setup_event_rsp_get_ipc(o, &decoded_data.data.setup_event_list);
-                       break;
-               case SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT:
-                       dbg("decoded command is setup idle mode text");
-                       memcpy(&proactive_noti.proactive_ind_data.setup_idle_mode_text, &decoded_data.data.setup_idle_mode_text,        sizeof(struct tel_sat_setup_idle_mode_text_tlv));
-                       break;
-               case SAT_PROATV_CMD_SEND_DTMF:
-                       dbg("decoded command is send dtmf");
-                       memcpy(&proactive_noti.proactive_ind_data.send_dtmf, &decoded_data.data.send_dtmf,       sizeof(struct tel_sat_send_dtmf_tlv));
-                       break;
-               case SAT_PROATV_CMD_LANGUAGE_NOTIFICATION:
-                       dbg("decoded command is language notification");
-                       memcpy(&proactive_noti.proactive_ind_data.language_notification, &decoded_data.data.language_notification,      sizeof(struct tel_sat_language_notification_tlv));
-                       break;
-               case SAT_PROATV_CMD_LAUNCH_BROWSER:
-                       dbg("decoded command is launch browser");
-                       memcpy(&proactive_noti.proactive_ind_data.launch_browser, &decoded_data.data.launch_browser,    sizeof(struct tel_sat_launch_browser_tlv));
-                       break;
-               case SAT_PROATV_CMD_OPEN_CHANNEL:
-                       dbg("decoded command is open channel!!");
-                       memcpy(&proactive_noti.proactive_ind_data.open_channel, &decoded_data.data.open_channel,        sizeof(struct tel_sat_open_channel_tlv));
-                       break;
-               case SAT_PROATV_CMD_CLOSE_CHANNEL:
-                       dbg("decoded command is close channel!!");
-                       memcpy(&proactive_noti.proactive_ind_data.close_channel, &decoded_data.data.close_channel,      sizeof(struct tel_sat_close_channel_tlv));
-                       break;
-               case SAT_PROATV_CMD_RECEIVE_DATA:
-                       dbg("decoded command is receive data!!");
-                       memcpy(&proactive_noti.proactive_ind_data.receive_data, &decoded_data.data.receive_data,        sizeof(struct tel_sat_receive_channel_tlv));
-                       break;
-               case SAT_PROATV_CMD_SEND_DATA:
-                       dbg("decoded command is send data!!");
-                       memcpy(&proactive_noti.proactive_ind_data.send_data, &decoded_data.data.send_data,      sizeof(struct tel_sat_send_channel_tlv));
-                       break;
-               case SAT_PROATV_CMD_GET_CHANNEL_STATUS:
-                       dbg("decoded command is get channel status!!");
-                       memcpy(&proactive_noti.proactive_ind_data.get_channel_status, &decoded_data.data.get_channel_status,    sizeof(struct tel_sat_get_channel_status_tlv));
-                       break;
-               default:
-                       dbg("wrong input");
-                       break;
-       }
-
-       if (decoded_data.cmd_type == SAT_PROATV_CMD_REFRESH){
-               g_refresh_data = calloc(1, sizeof(struct tnoti_sat_proactive_ind));
-               if(g_refresh_data == NULL){
-                       dbg("fail to calloc for refresh data");
-                       return;
-               }else {
-                       memcpy(g_refresh_data, &proactive_noti, sizeof(struct tnoti_sat_proactive_ind));
-               }
-       } else{
-               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_SAT_PROACTIVE_CMD,
-                               sizeof(struct tnoti_sat_proactive_ind), &proactive_noti);
-       }
-       tcore_at_tok_free(tokens);
-       dbg("Function Exit");
-}
-
-/*static void on_event_sat_control_result(CoreObject *o, const void *event_info, void *user_data)
-{
-
-}*/
-
-static void on_response_envelop_cmd(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse *resp = data;
-       UserRequest *ur = NULL;
-       const struct treq_sat_envelop_cmd_data *req_data = NULL;
-       GSList *tokens=NULL;
-       struct tresp_sat_envelop_data res;
-       const char *line;
-       const char *env_res;
-       int busy;
-
-       
-       ur = tcore_pending_ref_user_request(p);
-       req_data = tcore_user_request_ref_data(ur, NULL);
-
-       if(!req_data){
-               dbg("request data is NULL");
-               return;
-       }
-       memset(&res, 0, sizeof(struct tresp_sat_envelop_data));
-
-       res.sub_cmd = req_data->sub_cmd;
-
-       if(resp->success > 0)
-       {
-               dbg("RESPONSE OK");
-               if(resp->lines) {
-                       line = (const char*)resp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       if (g_slist_length(tokens) < 1) {
-                               msg("invalid message");
-                               tcore_at_tok_free(tokens);
-                               return;
-                       }
-               }
-               env_res = g_slist_nth_data(tokens, 0);
-               /*TODO - update actual value now not handled in TAPI*/
-               res.result = 0x8000;
-               res.envelop_resp = ENVELOPE_SUCCESS;
-               /*dbg("RESPONSE OK 3");
-               if(NULL != g_slist_nth_data(tokens, 1)){
-                       busy = atoi(g_slist_nth_data(tokens, 1));
-                       dbg("RESPONSE OK 4");
-                       if(busy != 0){
-                               dbg("RESPONSE OK 5");
-                               res.result = -1;
-                               res.envelop_resp = ENVELOPE_SIM_BUSY;
-                       }
-               }*/
-       }
-       else{
-               dbg("RESPONSE NOK");
-               res.result = -1;
-               res.envelop_resp = ENVELOPE_FAILED;
-       }
-
-       if (ur) {
-               tcore_user_request_send_response(ur, TRESP_SAT_REQ_ENVELOPE, sizeof(struct tresp_sat_envelop_data), &res);
-       }
-       tcore_at_tok_free(tokens);
-       dbg(" Function exit");
-}
-
-static void on_timeout_terminal_response(TcorePending *p, void *user_data)
-{
-       UserRequest *ur = NULL;
-       CoreObject *o = NULL;
-       gpointer tmp = NULL;
-
-       dbg("Function Entry");
-       dbg("SAT - TIMEOUT !!!!! pending=%p", p);
-
-       ur = tcore_pending_ref_user_request(p);
-       tmp = (gpointer)tcore_user_request_ref_communicator(ur);
-       if(!ur || !tmp ){
-               dbg("error - current ur is NULL");
-               return;
-       }
-
-       o = tcore_pending_ref_core_object(p);
-       if(!o)
-               dbg("error - current sat core is NULL");
-
-       tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_SAT_SESSION_END,    0, NULL);
-       dbg("Function Exit");
-}
-
-
-static void on_response_terminal_response(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       UserRequest *ur = NULL;
-       CoreObject *o = NULL;
-       const TcoreATResponse *resp = data;
-       gpointer tmp = NULL;
-
-       dbg("Function Entry");
-
-       if(resp->success > 0){
-               dbg("RESPONSE OK");
-               dbg(" resp->success = %d",  resp->success);
-               ur = tcore_pending_ref_user_request(p);
-               tmp = (gpointer)tcore_user_request_ref_communicator(ur);
-               if(!ur || !tmp ){
-                       dbg("error - current ur is NULL");
-                       return;
-               }
-
-               o = tcore_pending_ref_core_object(p);
-               if(!o)
-                       dbg("error - current sat core is NULL");
-
-               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_SAT_SESSION_END,    0, NULL);
-       }
-
-       dbg("Function Exit");
-}
-
-static TReturn s_envelope(CoreObject *o, UserRequest *ur)
-{
-       TcoreHal* hal;
-       TcoreATRequest *req;
-       TcorePending *pending = NULL;
-       char *cmd_str = NULL;
-       const struct treq_sat_envelop_cmd_data *req_data;
-       int envelope_cmd_len = 0;
-       char envelope_cmd[ENVELOPE_CMD_LEN];
-       int count = 0;
-       char envelope_cmdhex[ENVELOPE_CMD_LEN*2];
-       char *pbuffer = NULL;
-
-       dbg("Function Entry");
-       memset(&envelope_cmdhex, 0x00, sizeof(envelope_cmdhex));
-       pbuffer = envelope_cmdhex;
-
-       hal = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-       req_data = tcore_user_request_ref_data(ur, NULL);
-       dbg("new pending sub cmd(%d)", req_data->sub_cmd);
-
-       envelope_cmd_len = tcore_sat_encode_envelop_cmd(req_data, (char *)envelope_cmd);
-               
-       dbg("envelope_cmd_len %d", envelope_cmd_len);           
-       if(envelope_cmd_len == 0){
-               return TCORE_RETURN_EINVAL;
-       }
-       for(count = 0; count < envelope_cmd_len ;count++ )
-       {
-               dbg("envelope_cmd %02x", envelope_cmd[count]);
-               sprintf(pbuffer, "%02x", envelope_cmd[count]);
-               pbuffer +=2;
-       }
-       dbg("pbuffer %s", envelope_cmdhex);     
-       cmd_str = g_strdup_printf("AT+SATE=\"%s\"%s", envelope_cmdhex,"\r");
-
-       req = tcore_at_request_new(cmd_str, "+SATE:", TCORE_AT_SINGLELINE);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, on_response_envelop_cmd, hal);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sat_message_send, NULL);
-
-       tcore_hal_send_request(hal, pending);
-       
-       dbg("Function Exit");
-       return TCORE_RETURN_SUCCESS;
-
-       
-}
-
-static TReturn s_terminal_response(CoreObject *o, UserRequest *ur)
-{
-       TcoreHal* hal;
-       TcoreATRequest *req;
-       TcorePending *pending = NULL;
-       char *cmd_str = NULL;
-       const struct treq_sat_terminal_rsp_data *req_data;
-       int proactive_resp_len = 0;
-       char proactive_resp[ENVELOPE_CMD_LEN];
-       char proactive_resphex[ENVELOPE_CMD_LEN*2];
-       char *pbuffer = NULL;
-       int count = 0;
-       int i = 0;
-       char *hexString = NULL;
-
-       dbg("Function Entry");
-       memset(&proactive_resphex, 0x00, sizeof(proactive_resphex));
-       pbuffer = proactive_resphex;
-       hal = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-       req_data = tcore_user_request_ref_data(ur, NULL);
-
-       proactive_resp_len = tcore_sat_encode_terminal_response(req_data, (char *)proactive_resp);
-       dbg("proactive_resp %s", proactive_resp);
-       dbg("proactive_resp length %d", strlen(proactive_resp));
-       if(proactive_resp_len == 0){
-               return TCORE_RETURN_EINVAL;
-       }
-
-
-        hexString = calloc((proactive_resp_len*2)+1, 1);
-
-    for(i=0; i<proactive_resp_len*2; i+=2) 
-    {
-                    char value = 0;
-
-                    value = (proactive_resp[i/2] & 0xf0) >> 4;
-                    if(value < 0xA)
-                                    hexString[i] = ((proactive_resp[i/2] & 0xf0) >> 4) + '0';
-                    else hexString[i] = ((proactive_resp[i/2] & 0xf0) >> 4) + 'A' -10;
-
-                    value = proactive_resp[i/2] & 0x0f;
-                    if(value < 0xA)
-                                    hexString[i+1] = (proactive_resp[i/2] & 0x0f) + '0';
-                    else hexString[i+1] = (proactive_resp[i/2] & 0x0f) + 'A' -10;
-       }
-
-       dbg("hexString %s", hexString);
-       cmd_str = g_strdup_printf("AT+SATR=\"%s\"%s", hexString,"\r");
-
-       req = tcore_at_request_new(cmd_str, NULL , TCORE_AT_NO_RESULT);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_timeout(pending, 10);
-       tcore_pending_set_response_callback(pending, on_response_terminal_response, hal);
-       tcore_pending_set_timeout_callback(pending, on_timeout_terminal_response, NULL);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sat_message_send, NULL);
-       tcore_hal_send_request(hal, pending);
-
-       dbg("Function Exit");
-       return TCORE_RETURN_SUCCESS;
-}
-
-//static void setup_event_rsp_get_ipc(CoreObject *o, struct tel_sat_setup_event_list_tlv *setup_evt_list){
-/*     UserRequest *ur = NULL;
-       struct tcore_user_info ui = { 0, };
-       struct treq_sat_terminal_rsp_data tr;*/
-
-/*     TcorePlugin *p = NULL;
-       TcoreHal *h = NULL;
-       TcorePending *pending = NULL;
-       ipc_sat_setup_evtlist_get_type ipc;
-
-       dbg("new pending(IPC_SAT_TERMINAL_RESPONSE)");
-
-       p = tcore_object_ref_plugin(o);
-       h = tcore_plugin_ref_hal(p);
-
-       memset(&ipc, 0, sizeof(ipc_sat_setup_evtlist_get_type));
-       ipc.hdr.len = (ipc_uint16) sizeof(ipc_sat_setup_evtlist_get_type);
-       ipc.hdr.main_cmd = (ipc_uint8) IPC_SAT_CMD;
-       ipc.hdr.sub_cmd = (ipc_uint8) IPC_SAT_SETUP_EVENT_LIST;
-       ipc.hdr.cmd_type = (ipc_uint8) IPC_CMD_GET;
-       ipc.hdr.msg_seq = (ipc_uint8) 0xFF;
-
-       memset(ipc.evt_list, 0xFF, SAT_EVENT_LIST_MAX);
-       ipc.evt_list_len = setup_evt_list->modem_event_list.event_list_cnt;
-       memcpy(ipc.evt_list, setup_evt_list->modem_event_list.evt_list, sizeof(ipc.evt_list)); */
-
-       //create ur for terminal response
-/*     ur = tcore_user_request_new(NULL, NULL);
-       tcore_user_request_set_user_info(ur, &ui);
-       memset(&tr, 0, sizeof(struct treq_sat_terminal_rsp_data));
-       tr.cmd_number = setup_evt_list->command_detail.cmd_num;
-       tr.cmd_type = setup_evt_list->command_detail.cmd_type;
-       tr.terminal_rsp_data.setup_event_list.command_detail.cmd_num = setup_evt_list->command_detail.cmd_num;
-       tr.terminal_rsp_data.setup_event_list.command_detail.cmd_type = setup_evt_list->command_detail.cmd_type;
-       tr.terminal_rsp_data.setup_event_list.device_id.src = setup_evt_list->device_id.dest;
-       tr.terminal_rsp_data.setup_event_list.device_id.dest = setup_evt_list->device_id.src;
-       tr.terminal_rsp_data.setup_event_list.result_type = RESULT_SUCCESS;
-       tcore_user_request_set_data(ur, sizeof(struct treq_sat_terminal_rsp_data), (void *)&tr);
-       tcore_user_request_set_command(ur, TREQ_SAT_REQ_TERMINALRESPONSE);*/
-
-/*     pending = tcore_pending_new(o, UTIL_ID(ipc.hdr));
-       tcore_pending_set_request_data(pending, sizeof(ipc_sat_setup_evtlist_get_type), &ipc);
-       tcore_pending_set_timeout(pending, 0);
-
-       tcore_pending_set_auto_free_status_after_sent(pending, TRUE);
-       //tcore_pending_set_response_callback(pending, on_response_set_up_eventlist, ur);
-       tcore_hal_send_request(h, pending);
-
-       return;
-}*/
-
-static struct tcore_sat_operations sat_ops =
-{
-       .envelope = s_envelope,
-       .terminal_response = s_terminal_response,
-};
-
-gboolean s_sat_init(TcorePlugin *p, TcoreHal *h)
-{
-       dbg("Entry");
-       CoreObject *o;
-       o = tcore_sat_new(p, "sat", &sat_ops,h);
-       if (!o)
-       {
-               dbg("CoreObject NULL !!");
-               return FALSE;
-       }
-
-       //tcore_object_add_callback(o, " ", on_event_sat_envelope_resp, NULL);
-       //tcore_object_add_callback(o, " ", on_event_sat_refresh_status, NULL);
-       tcore_object_add_callback(o, "+SATI", on_event_sat_proactive_command, NULL);
-       tcore_object_add_callback(o, "+SATN", on_event_sat_proactive_command, NULL);
-       tcore_object_add_callback(o, "+SATF", on_response_terminal_response_confirm, NULL);
-       //tcore_object_add_callback(o, EVENT_IPC_NOTI_SAT_CONTROL_RESULT, on_event_sat_control_result, NULL);
-
-       dbg("Exit");
-       return TRUE;
-}
-
-void s_sat_exit(TcorePlugin *p)
-{
-       CoreObject *o;
-       o = tcore_plugin_ref_core_object(p, "sat");
-       if (!o)
-               return;
-
-       tcore_sat_free(o);
-}
+/**\r
+ * tel-plugin-samsung\r
+ *\r
+ * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved\r
+ *\r
+ * Contact: chandan swarup patra <chandan.sp@samsung.com>\r
+ *\r
+ * PROPRIETARY/CONFIDENTIAL\r
+ *\r
+ * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information").\r
+ * You shall not disclose such Confidential Information and shall\r
+ * use it only in accordance with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS.\r
+ * SAMSUNG make no representations or warranties about the suitability\r
+ * of the software, either express or implied, including but not\r
+ * limited to the implied warranties of merchantability, fitness for a particular purpose, or non-infringement.\r
+ * SAMSUNG shall not be liable for any damages suffered by licensee as\r
+ * a result of using, modifying or distributing this software or its derivatives.\r
+ */\r
+\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include <glib.h>\r
+#include <tcore.h>\r
+#include <hal.h>\r
+#include <core_object.h>\r
+#include <plugin.h>\r
+#include <queue.h>\r
+#include <server.h>\r
+#include <co_sat.h>\r
+#include <user_request.h>\r
+#include <at.h>\r
+\r
+#include "s_common.h"\r
+#include "s_sat.h"\r
+#define ENVELOPE_CMD_LEN        256\r
+\r
+static TReturn s_terminal_response(CoreObject *o, UserRequest *ur);\r
+static void on_confirmation_sat_message_send(TcorePending *p, gboolean result, void *user_data ); // from Kernel\r
+\r
+static void on_confirmation_sat_message_send( TcorePending *p, gboolean result, void *user_data )\r
+{\r
+       dbg("on_confirmation_modem_message_send - msg out from queue.\n");\r
+\r
+       if (result == FALSE)\r
+       {\r
+               /* Fail */\r
+               dbg("SEND FAIL");\r
+       }\r
+       else \r
+       {\r
+               dbg("SEND OK");\r
+       }\r
+}\r
+\r
+static gboolean on_response_terminal_response_confirm(CoreObject *o, const void *event_info, void *user_data)\r
+{\r
+       dbg("Function Entry");\r
+       return TRUE;\r
+       dbg("Function Exit");\r
+}\r
+\r
+static gboolean on_event_sat_proactive_command(CoreObject *o, const void *event_info, void *user_data)\r
+{\r
+       struct tcore_sat_proactive_command      decoded_data;\r
+       struct tnoti_sat_proactive_ind          proactive_noti;\r
+       int                                     len_proactive_cmd = 0;\r
+       GSList                                  *lines= NULL;\r
+       GSList                                  *tokens= NULL;\r
+       char                                    *line= NULL;\r
+       char                                    *hexData= NULL;\r
+       char                                    *tmp= NULL;\r
+       char                                    *recordData= NULL;\r
+\r
+       dbg("Function Entry");\r
+\r
+       memset(&proactive_noti, 0x00, sizeof(struct tnoti_sat_proactive_ind));\r
+       memset(&decoded_data, 0x00, sizeof(struct tcore_sat_proactive_command));\r
+       lines = (GSList*)event_info;\r
+       line = (char*)lines->data;\r
+       tokens = tcore_at_tok_new(line);\r
+       if (g_slist_length(tokens) != 1) \r
+       {\r
+               dbg("invalid message");\r
+               tcore_at_tok_free(tokens);\r
+               return FALSE;\r
+       }\r
+       hexData = (char*)g_slist_nth_data(tokens, 0);\r
+       \r
+       dbg("hexdata %s ", hexData);\r
+       dbg("hexdata length %d", strlen(hexData));\r
+\r
+       tmp = calloc(1, strlen(hexData)-1);\r
+       if(tmp == NULL)\r
+       {\r
+               return FALSE;\r
+       }       \r
+       memcpy(tmp, hexData+1, strlen(hexData)-2);\r
+\r
+       recordData = util_hexStringToBytes(tmp);\r
+       dbg("recordData: %x", recordData);\r
+       free(tmp);\r
+       util_hex_dump("    ", strlen(hexData)/2, recordData);\r
+       len_proactive_cmd = strlen(recordData);\r
+       dbg("len_proactive_cmd = %d", len_proactive_cmd);\r
+       tcore_sat_decode_proactive_command((unsigned char*)recordData, (strlen(hexData)/2) - 1, &decoded_data);\r
+       free(recordData);\r
+\r
+       proactive_noti.cmd_number = decoded_data.cmd_num;\r
+       proactive_noti.cmd_type = decoded_data.cmd_type;\r
+\r
+       switch(decoded_data.cmd_type)\r
+       {\r
+               case SAT_PROATV_CMD_DISPLAY_TEXT:\r
+                       dbg("decoded command is display text!!");\r
+                       memcpy(&proactive_noti.proactive_ind_data.display_text, &decoded_data.data.display_text,        sizeof(struct tel_sat_display_text_tlv));\r
+                       break;\r
+               case SAT_PROATV_CMD_GET_INKEY:\r
+                       dbg("decoded command is get inkey!!");\r
+                       memcpy(&proactive_noti.proactive_ind_data.get_inkey, &decoded_data.data.get_inkey,      sizeof(struct tel_sat_get_inkey_tlv));\r
+                       break;\r
+               case SAT_PROATV_CMD_GET_INPUT:\r
+                       dbg("decoded command is get input!!");\r
+                       memcpy(&proactive_noti.proactive_ind_data.get_input, &decoded_data.data.get_input,      sizeof(struct tel_sat_get_input_tlv));\r
+                       break;\r
+               case SAT_PROATV_CMD_MORE_TIME:\r
+                       dbg("decoded command is more time!!");\r
+                       memcpy(&proactive_noti.proactive_ind_data.more_time, &decoded_data.data.more_time,      sizeof(struct tel_sat_more_time_tlv));\r
+                       break;\r
+               case SAT_PROATV_CMD_PLAY_TONE:\r
+                       dbg("decoded command is play tone!!");\r
+                       memcpy(&proactive_noti.proactive_ind_data.play_tone, &decoded_data.data.play_tone,      sizeof(struct tel_sat_play_tone_tlv));\r
+                       break;\r
+               case SAT_PROATV_CMD_SETUP_MENU:\r
+                       dbg("decoded command is SETUP MENU!!");\r
+                       memcpy(&proactive_noti.proactive_ind_data.setup_menu, &decoded_data.data.setup_menu, sizeof(struct tel_sat_setup_menu_tlv));\r
+                       break;\r
+               case SAT_PROATV_CMD_SELECT_ITEM:\r
+                       dbg("decoded command is select item!!");\r
+                       memcpy(&proactive_noti.proactive_ind_data.select_item, &decoded_data.data.select_item,  sizeof(struct tel_sat_select_item_tlv));\r
+                       break;\r
+               case SAT_PROATV_CMD_SEND_SMS:\r
+                       dbg("decoded command is send sms!!");\r
+                       memcpy(&proactive_noti.proactive_ind_data.send_sms, &decoded_data.data.send_sms,        sizeof(struct tel_sat_send_sms_tlv));\r
+                       break;\r
+               case SAT_PROATV_CMD_SEND_SS:\r
+                       dbg("decoded command is send ss!!");\r
+                       memcpy(&proactive_noti.proactive_ind_data.send_ss, &decoded_data.data.send_ss,  sizeof(struct tel_sat_send_ss_tlv));\r
+                       break;\r
+               case SAT_PROATV_CMD_SEND_USSD:\r
+                       dbg("decoded command is send ussd!!");\r
+                       memcpy(&proactive_noti.proactive_ind_data.send_ussd, &decoded_data.data.send_ussd,      sizeof(struct tel_sat_send_ussd_tlv));\r
+                       break;\r
+               case SAT_PROATV_CMD_SETUP_CALL:\r
+                       dbg("decoded command is setup call!!");\r
+                       memcpy(&proactive_noti.proactive_ind_data.setup_call, &decoded_data.data.setup_call,    sizeof(struct tel_sat_setup_call_tlv));\r
+                       break;\r
+               case SAT_PROATV_CMD_REFRESH:\r
+                       dbg("decoded command is refresh");\r
+                       memcpy(&proactive_noti.proactive_ind_data.refresh, &decoded_data.data.refresh, sizeof(struct tel_sat_refresh_tlv));\r
+                       break;  \r
+               case SAT_PROATV_CMD_PROVIDE_LOCAL_INFO:\r
+                       dbg("decoded command is provide local info");\r
+                       memcpy(&proactive_noti.proactive_ind_data.provide_local_info, &decoded_data.data.provide_local_info, sizeof(struct tel_sat_provide_local_info_tlv));\r
+                       break;\r
+               case SAT_PROATV_CMD_SETUP_EVENT_LIST:\r
+                       dbg("decoded command is setup event list!!");\r
+                       memcpy(&proactive_noti.proactive_ind_data.setup_event_list, &decoded_data.data.setup_event_list, sizeof(struct tel_sat_setup_event_list_tlv));\r
+                       //setup_event_rsp_get(o, &decoded_data.data.setup_event_list);\r
+                       break;\r
+               case SAT_PROATV_CMD_SETUP_IDLE_MODE_TEXT:\r
+                       dbg("decoded command is setup idle mode text");\r
+                       memcpy(&proactive_noti.proactive_ind_data.setup_idle_mode_text, &decoded_data.data.setup_idle_mode_text,        sizeof(struct tel_sat_setup_idle_mode_text_tlv));\r
+                       break;\r
+               case SAT_PROATV_CMD_SEND_DTMF:\r
+                       dbg("decoded command is send dtmf");\r
+                       memcpy(&proactive_noti.proactive_ind_data.send_dtmf, &decoded_data.data.send_dtmf,       sizeof(struct tel_sat_send_dtmf_tlv));\r
+                       break;\r
+               case SAT_PROATV_CMD_LANGUAGE_NOTIFICATION:\r
+                       dbg("decoded command is language notification");\r
+                       memcpy(&proactive_noti.proactive_ind_data.language_notification, &decoded_data.data.language_notification,      sizeof(struct tel_sat_language_notification_tlv));\r
+                       break;\r
+               case SAT_PROATV_CMD_LAUNCH_BROWSER:\r
+                       dbg("decoded command is launch browser");\r
+                       memcpy(&proactive_noti.proactive_ind_data.launch_browser, &decoded_data.data.launch_browser,    sizeof(struct tel_sat_launch_browser_tlv));\r
+                       break;\r
+               case SAT_PROATV_CMD_OPEN_CHANNEL:\r
+                       dbg("decoded command is open channel!!");\r
+                       memcpy(&proactive_noti.proactive_ind_data.open_channel, &decoded_data.data.open_channel,        sizeof(struct tel_sat_open_channel_tlv));\r
+                       break;\r
+               case SAT_PROATV_CMD_CLOSE_CHANNEL:\r
+                       dbg("decoded command is close channel!!");\r
+                       memcpy(&proactive_noti.proactive_ind_data.close_channel, &decoded_data.data.close_channel,      sizeof(struct tel_sat_close_channel_tlv));\r
+                       break;\r
+               case SAT_PROATV_CMD_RECEIVE_DATA:\r
+                       dbg("decoded command is receive data!!");\r
+                       memcpy(&proactive_noti.proactive_ind_data.receive_data, &decoded_data.data.receive_data,        sizeof(struct tel_sat_receive_channel_tlv));\r
+                       break;\r
+               case SAT_PROATV_CMD_SEND_DATA:\r
+                       dbg("decoded command is send data!!");\r
+                       memcpy(&proactive_noti.proactive_ind_data.send_data, &decoded_data.data.send_data,      sizeof(struct tel_sat_send_channel_tlv));\r
+                       break;\r
+               case SAT_PROATV_CMD_GET_CHANNEL_STATUS:\r
+                       dbg("decoded command is get channel status!!");\r
+                       memcpy(&proactive_noti.proactive_ind_data.get_channel_status, &decoded_data.data.get_channel_status,    sizeof(struct tel_sat_get_channel_status_tlv));\r
+                       break;\r
+               default:\r
+                       dbg("wrong input");\r
+                       break;\r
+       }\r
+       if((decoded_data.cmd_type == SAT_PROATV_CMD_REFRESH) || (decoded_data.cmd_type == SAT_PROATV_CMD_SETUP_EVENT_LIST))\r
+       {\r
+               /*Not supported*/\r
+               dbg("Not suported Proactive command");\r
+               return FALSE;\r
+       }\r
+       tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_SAT_PROACTIVE_CMD,\r
+               sizeof(struct tnoti_sat_proactive_ind), &proactive_noti);\r
+       tcore_at_tok_free(tokens);\r
+       dbg("Function Exit");\r
+       return TRUE;\r
+}\r
+\r
+static void on_response_envelop_cmd(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse           *resp = data;\r
+       UserRequest                             *ur = NULL;\r
+       CoreObject                                      *o = NULL;\r
+       const struct                            treq_sat_envelop_cmd_data       *req_data = NULL;\r
+       GSList                                          *tokens=NULL;\r
+       struct                                          tresp_sat_envelop_data          res;\r
+       const char                                      *line = NULL;\r
+       const char                                      *env_res = NULL;\r
+       int                                                     sw2 = -1;\r
+       \r
+       ur = tcore_pending_ref_user_request(p);\r
+       req_data = tcore_user_request_ref_data(ur, NULL);\r
+       o = tcore_pending_ref_core_object(p);\r
+\r
+       if(!req_data){\r
+               dbg("request data is NULL");\r
+               return;\r
+       }\r
+       memset(&res, 0, sizeof(struct tresp_sat_envelop_data));\r
+\r
+       res.sub_cmd = req_data->sub_cmd;\r
+\r
+       if(resp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               if(resp->lines) \r
+               {\r
+                       line = (const char*)resp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       if (g_slist_length(tokens) < 1) \r
+                       {\r
+                               msg("invalid message");\r
+                               tcore_at_tok_free(tokens);\r
+                               return;\r
+                       }\r
+               }\r
+               env_res = g_slist_nth_data(tokens, 0);\r
+               res.result = 0x8000;\r
+               res.envelop_resp = ENVELOPE_SUCCESS;\r
+               dbg("RESPONSE OK 3");\r
+               if(NULL != g_slist_nth_data(tokens, 1))\r
+               {\r
+                       sw2 = atoi(g_slist_nth_data(tokens, 1));\r
+                       dbg("RESPONSE OK 4");\r
+                       if(sw2 == 0)\r
+                       {\r
+                               dbg("RESPONSE OK 5");\r
+                               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_SAT_SESSION_END,    0, NULL);\r
+                       }\r
+               }\r
+       }\r
+       else\r
+       {\r
+               dbg("RESPONSE NOK");\r
+               res.result = -1;\r
+               res.envelop_resp = ENVELOPE_FAILED;\r
+       }\r
+       \r
+       if (ur) \r
+       {\r
+                       tcore_user_request_send_response(ur, TRESP_SAT_REQ_ENVELOPE, sizeof(struct tresp_sat_envelop_data), &res);\r
+       }\r
+       tcore_at_tok_free(tokens);\r
+       dbg(" Function exit");\r
+}\r
+\r
+static void on_timeout_terminal_response(TcorePending *p, void *user_data)\r
+{\r
+       UserRequest     *ur = NULL;\r
+       CoreObject      *o = NULL;\r
+       gpointer        tmp = NULL;\r
+\r
+       dbg("Function Entry");\r
+       dbg("SAT - TIMEOUT !!!!! pending=%p", p);\r
+\r
+       ur = tcore_pending_ref_user_request(p);\r
+       tmp = (gpointer)tcore_user_request_ref_communicator(ur);\r
+       if(!ur || !tmp )\r
+       {\r
+               dbg("error - current ur is NULL");\r
+               return;\r
+       }\r
+\r
+       o = tcore_pending_ref_core_object(p);\r
+       if(!o)\r
+               dbg("error - current sat core is NULL");\r
+\r
+       tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_SAT_SESSION_END,    0, NULL);\r
+       dbg("Function Exit");\r
+}\r
+\r
+\r
+static void on_response_terminal_response(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest                     *ur = NULL;\r
+       CoreObject                      *o = NULL;\r
+       const TcoreATResponse           *resp = data;\r
+       gpointer                        tmp = NULL;\r
+\r
+       dbg("Function Entry");\r
+\r
+       if(resp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               dbg(" resp->success = %d",  resp->success);\r
+               ur = tcore_pending_ref_user_request(p);\r
+               tmp = (gpointer)tcore_user_request_ref_communicator(ur);\r
+               if(!ur || !tmp )\r
+               {\r
+                       dbg("error - current ur is NULL");\r
+                       return;\r
+               }\r
+\r
+               o = tcore_pending_ref_core_object(p);\r
+               if(!o)\r
+                       dbg("error - current sat core is NULL");\r
+               tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_SAT_SESSION_END,    0, NULL);\r
+       }\r
+       dbg("Function Exit");\r
+}\r
+\r
+static TReturn s_envelope(CoreObject *o, UserRequest *ur)\r
+{\r
+       TcoreHal*                               hal;\r
+       TcoreATRequest                  *req = NULL;\r
+       TcorePending                    *pending = NULL;\r
+       char                                    *cmd_str = NULL;\r
+       const struct                    treq_sat_envelop_cmd_data       *req_data = NULL;\r
+       int                                     envelope_cmd_len = 0;\r
+       char                                    envelope_cmd[ENVELOPE_CMD_LEN];\r
+       int                                     count = 0;\r
+       char                                    envelope_cmdhex[ENVELOPE_CMD_LEN*2];\r
+       char                                    *pbuffer = NULL;\r
+\r
+       dbg("Function Entry");\r
+       memset(&envelope_cmdhex, 0x00, sizeof(envelope_cmdhex));\r
+       pbuffer = envelope_cmdhex;\r
+\r
+       hal = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+       req_data = tcore_user_request_ref_data(ur, NULL);\r
+       dbg("new pending sub cmd(%d)", req_data->sub_cmd);\r
+\r
+       envelope_cmd_len = tcore_sat_encode_envelop_cmd(req_data, (char *)envelope_cmd);\r
+               \r
+       dbg("envelope_cmd_len %d", envelope_cmd_len);           \r
+       if(envelope_cmd_len == 0)\r
+       {\r
+               return TCORE_RETURN_EINVAL;\r
+       }\r
+       for(count = 0; count < envelope_cmd_len ;count++ )\r
+       {\r
+               dbg("envelope_cmd %02x", envelope_cmd[count]);\r
+               sprintf(pbuffer, "%02x", envelope_cmd[count]);\r
+               pbuffer +=2;\r
+       }\r
+       dbg("pbuffer %s", envelope_cmdhex);     \r
+       cmd_str = g_strdup_printf("AT+SATE=\"%s\"%s", envelope_cmdhex,"\r");\r
+       req = tcore_at_request_new(cmd_str, "+SATE:", TCORE_AT_SINGLELINE);\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       tcore_pending_set_response_callback(pending, on_response_envelop_cmd, hal);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sat_message_send, NULL);\r
+       tcore_hal_send_request(hal, pending);\r
+       \r
+       dbg("Function Exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_terminal_response(CoreObject *o, UserRequest *ur)\r
+{\r
+       TcoreHal                                *hal = NULL;\r
+       TcoreATRequest                  *req = NULL;\r
+       TcorePending                    *pending = NULL;\r
+       char                                    *cmd_str = NULL;\r
+       const struct                    treq_sat_terminal_rsp_data *req_data = NULL;\r
+       int                                     proactive_resp_len = 0;\r
+       char                                    proactive_resp[ENVELOPE_CMD_LEN];\r
+       char                                    proactive_resphex[ENVELOPE_CMD_LEN*2];\r
+       char                                    *pbuffer = NULL;\r
+       int                                     i = 0;\r
+       char                                    *hexString = NULL;\r
+\r
+       dbg("Function Entry");\r
+       memset(&proactive_resphex, 0x00, sizeof(proactive_resphex));\r
+       pbuffer = proactive_resphex;\r
+       hal = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+       req_data = tcore_user_request_ref_data(ur, NULL);\r
+\r
+       proactive_resp_len = tcore_sat_encode_terminal_response(req_data, (char *)proactive_resp);\r
+       dbg("proactive_resp %s", proactive_resp);\r
+       dbg("proactive_resp length %d", strlen(proactive_resp));\r
+       if(proactive_resp_len == 0)\r
+       {\r
+               return TCORE_RETURN_EINVAL;\r
+       }\r
+       hexString = calloc((proactive_resp_len*2)+1, 1);\r
+\r
+       for(i=0; i<proactive_resp_len*2; i+=2) \r
+       {\r
+                               char value = 0;\r
+                               value = (proactive_resp[i/2] & 0xf0) >> 4;\r
+                               if(value < 0xA)\r
+                                       hexString[i] = ((proactive_resp[i/2] & 0xf0) >> 4) + '0';\r
+                               else \r
+                                       hexString[i] = ((proactive_resp[i/2] & 0xf0) >> 4) + 'A' -10;\r
+\r
+                               value = proactive_resp[i/2] & 0x0f;\r
+                               if(value < 0xA)\r
+                                       hexString[i+1] = (proactive_resp[i/2] & 0x0f) + '0';\r
+                               else \r
+                                       hexString[i+1] = (proactive_resp[i/2] & 0x0f) + 'A' -10;\r
+       }\r
+\r
+       dbg("hexString %s", hexString);\r
+       cmd_str = g_strdup_printf("AT+SATR=\"%s\"%s", hexString,"\r");\r
+\r
+       req = tcore_at_request_new(cmd_str, NULL , TCORE_AT_NO_RESULT);\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       tcore_pending_set_timeout(pending, 10);\r
+       tcore_pending_set_response_callback(pending, on_response_terminal_response, hal);\r
+       tcore_pending_set_timeout_callback(pending, on_timeout_terminal_response, NULL);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sat_message_send, NULL);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       dbg("Function Exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static struct tcore_sat_operations sat_ops =\r
+{\r
+       .envelope = s_envelope,\r
+       .terminal_response = s_terminal_response,\r
+};\r
+\r
+gboolean s_sat_init(TcorePlugin *p, TcoreHal *h)\r
+{\r
+       CoreObject *o = NULL;\r
+\r
+       dbg("Entry");\r
+       o = tcore_sat_new(p, "sat", &sat_ops,h);\r
+       if (!o)\r
+       {\r
+               dbg("CoreObject NULL !!");\r
+               return FALSE;\r
+       }\r
+       \r
+       tcore_object_add_callback(o, "+SATI", on_event_sat_proactive_command, NULL);\r
+       tcore_object_add_callback(o, "+SATN", on_event_sat_proactive_command, NULL);\r
+       tcore_object_add_callback(o, "+SATF", on_response_terminal_response_confirm, NULL);\r
+\r
+       dbg("Exit");\r
+       return TRUE;\r
+}\r
+\r
+void s_sat_exit(TcorePlugin *p)\r
+{\r
+       CoreObject *o = NULL;\r
+       o = tcore_plugin_ref_core_object(p, "sat");\r
+       if (!o)\r
+               return;\r
+       tcore_sat_free(o);\r
+}\r
index 79b6bf5..20fbcd7 100755 (executable)
-/*
- * tel-plugin-imc
- *
- * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Hayoon Ko <hayoon.ko@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <glib.h>
-
-
-#include <tcore.h>
-#include <hal.h>
-#include <core_object.h>
-#include <plugin.h>
-#include <queue.h>
-#include <co_sim.h>
-#include <storage.h>
-#include <user_request.h>
-#include <server.h>
-#include <at.h>
-
-#include "s_common.h"
-#include "s_sim.h"
-
-#define ID_RESERVED_AT 0x0229
-
-#define SWAPBYTES16(x) \
-{ \
-    unsigned short int data = *(unsigned short int*)&(x); \
-    data = ((data & 0xff00) >> 8) |    \
-           ((data & 0x00ff) << 8);     \
-    *(unsigned short int*)&(x) = data ;      \
-}
-
-enum s_sim_file_type_e {
-       SIM_FTYPE_DEDICATED = 0x00, /**< Dedicated */
-       SIM_FTYPE_TRANSPARENT = 0x01, /**< Transparent -binary type*/
-       SIM_FTYPE_LINEAR_FIXED = 0x02, /**< Linear fixed - record type*/
-       SIM_FTYPE_CYCLIC = 0x04, /**< Cyclic - record type*/
-       SIM_FTYPE_INVALID_TYPE = 0xFF /**< Invalid type */
-};
-
-enum s_sim_sec_op_e {
-       SEC_PIN1_VERIFY,
-       SEC_PIN2_VERIFY,
-       SEC_PUK1_VERIFY,
-       SEC_PUK2_VERIFY,
-       SEC_SIM_VERIFY,
-       SEC_ADM_VERIFY,
-       SEC_PIN1_CHANGE,
-       SEC_PIN2_CHANGE,
-       SEC_PIN1_ENABLE,
-       SEC_PIN1_DISABLE,
-       SEC_PIN2_ENABLE,
-       SEC_PIN2_DISABLE, //10
-       SEC_SIM_ENABLE,
-       SEC_SIM_DISABLE,
-       SEC_NET_ENABLE,
-       SEC_NET_DISABLE,
-       SEC_NS_ENABLE,
-       SEC_NS_DISABLE,
-       SEC_SP_ENABLE,
-       SEC_SP_DISABLE,
-       SEC_CP_ENABLE,
-       SEC_CP_DISABLE, //20
-       SEC_FDN_ENABLE,
-       SEC_FDN_DISABLE,
-       SEC_PIN1_STATUS,
-       SEC_PIN2_STATUS,
-       SEC_FDN_STATUS,
-       SEC_NET_STATUS,
-       SEC_NS_STATUS,
-       SEC_SP_STATUS,
-       SEC_CP_STATUS,
-       SEC_SIM_STATUS,
-       SEC_SIM_UNKNOWN = 0xff
-};
-
-struct s_sim_property {
-       gboolean b_valid; /**< Valid or not */
-       enum tel_sim_file_id file_id; /**< File identifier */
-       enum s_sim_file_type_e file_type; /**< File type and structure */
-       int rec_length; /**< Length of one record in file */
-       int rec_count; /**< Number of records in file */
-       int data_size; /**< File size */
-       int current_index; /**< current index to read */
-       enum tel_sim_status first_recv_status;
-       enum s_sim_sec_op_e current_sec_op; /**< current index to read */
-       struct tresp_sim_read files;
-};
-
-static void _next_from_get_file_info(CoreObject *o, UserRequest *ur, enum tel_sim_file_id ef, enum tel_sim_access_result rt);
-static void _next_from_get_file_data(CoreObject *o, UserRequest *ur, enum tel_sim_access_result rt, int decode_ret);
-static gboolean _get_sim_type(CoreObject *o);
-static TReturn _get_file_info(CoreObject *o, UserRequest *ur, const enum tel_sim_file_id ef);
-static gboolean _get_file_data(CoreObject *o, UserRequest *ur, const enum tel_sim_file_id ef, const int offset, const int length);
-static gboolean _get_file_record(CoreObject *o, UserRequest *ur, const enum tel_sim_file_id ef, const int index, const int length);
-static void _sim_status_update(CoreObject *o, enum tel_sim_status sim_status);
-
-
-static void on_confirmation_sim_message_send(TcorePending *p, gboolean result, void *user_data); // from Kernel
-
-static void on_confirmation_sim_message_send(TcorePending *p, gboolean result, void *user_data)
-{
-       dbg("on_confirmation_sim_message_send - msg out from queue.\n");
-
-       if (result == FALSE) {
-               /* Fail */
-               dbg("SEND FAIL");
-       }
-       else {
-               dbg("SEND OK");
-       }
-}
-
-static enum tcore_response_command _find_resp_command(UserRequest *ur)
-{
-       enum tcore_request_command command;
-       command = tcore_user_request_get_command(ur);
-       switch(command){
-               case TREQ_SIM_VERIFY_PINS:
-                       return TRESP_SIM_VERIFY_PINS;
-                       break;
-               case TREQ_SIM_VERIFY_PUKS:
-                       return TRESP_SIM_VERIFY_PUKS;
-                       break;
-               case TREQ_SIM_CHANGE_PINS:
-                       return TRESP_SIM_CHANGE_PINS;
-                       break;
-               case TREQ_SIM_GET_FACILITY_STATUS:
-                       return TRESP_SIM_GET_FACILITY_STATUS;
-                       break;
-               case TREQ_SIM_DISABLE_FACILITY:
-                       return TRESP_SIM_DISABLE_FACILITY;
-                       break;
-               case TREQ_SIM_ENABLE_FACILITY:
-                       return TRESP_SIM_ENABLE_FACILITY;
-                       break;
-               case TREQ_SIM_GET_LOCK_INFO:
-                       return TRESP_SIM_GET_LOCK_INFO;
-                       break;
-               case TREQ_SIM_TRANSMIT_APDU:
-                       return TRESP_SIM_TRANSMIT_APDU;
-                       break;
-               case TREQ_SIM_GET_ATR:
-                       return TRESP_SIM_GET_ATR;
-                       break;
-               case TREQ_SIM_GET_ECC:
-                       return TRESP_SIM_GET_ECC;
-                       break;
-               case TREQ_SIM_GET_LANGUAGE:
-                       return TRESP_SIM_GET_LANGUAGE;
-                       break;
-               case TREQ_SIM_SET_LANGUAGE:
-                       return TRESP_SIM_SET_LANGUAGE;
-                       break;
-               case TREQ_SIM_GET_ICCID:
-                       return TRESP_SIM_GET_ICCID;
-                       break;
-               case TREQ_SIM_GET_MAILBOX:
-                       return TRESP_SIM_GET_MAILBOX;
-                       break;
-               case TREQ_SIM_GET_CALLFORWARDING:
-                       return TRESP_SIM_GET_CALLFORWARDING;
-                       break;
-               case TREQ_SIM_SET_CALLFORWARDING:
-                       return TRESP_SIM_SET_CALLFORWARDING;
-                       break;
-               case TREQ_SIM_GET_MESSAGEWAITING:
-                       return TRESP_SIM_GET_MESSAGEWAITING;
-                       break;
-               case TREQ_SIM_GET_CPHS_INFO:
-                       return TRESP_SIM_GET_CPHS_INFO;
-                       break;
-               case TREQ_SIM_GET_MSISDN:
-                       return TRESP_SIM_GET_MSISDN;
-                       break;
-               case TREQ_SIM_GET_SPN:
-                       return TRESP_SIM_GET_SPN;
-                       break;
-               case TREQ_SIM_GET_SPDI:
-                       return TRESP_SIM_GET_SPDI;
-                       break;
-               case TREQ_SIM_GET_OPL:
-                       return TRESP_SIM_GET_OPL;
-                       break;
-               case TREQ_SIM_GET_PNN:
-                       return TRESP_SIM_GET_PNN;
-                       break;
-               case TREQ_SIM_GET_CPHS_NETNAME:
-                       return TRESP_SIM_GET_CPHS_NETNAME;
-                       break;
-               case TREQ_SIM_GET_OPLMNWACT:
-                       return TRESP_SIM_GET_OPLMNWACT;
-                       break;
-               case TREQ_SIM_REQ_AUTHENTICATION:
-                       return TRESP_SIM_REQ_AUTHENTICATION;
-                       break;
-               default:
-                       break;
-       }
-       return TRESP_UNKNOWN;
-}
-
-static int _sim_get_current_pin_facility(enum s_sim_sec_op_e op)
-{
-       int ret_type = 0;
-       dbg("current sec_op[%d]", op);
-       switch(op){
-               case SEC_PIN1_VERIFY :
-               case SEC_PIN1_CHANGE :
-                       ret_type = SIM_PTYPE_PIN1;
-                       break;
-               case SEC_PIN2_VERIFY :
-               case SEC_PIN2_CHANGE :
-                       ret_type = SIM_PTYPE_PIN2;
-                       break;
-               case SEC_PUK1_VERIFY :
-                       ret_type = SIM_PTYPE_PUK1;
-                       break;
-               case SEC_PUK2_VERIFY :
-                       ret_type = SIM_PTYPE_PUK2;
-                       break;
-               case SEC_SIM_VERIFY :
-                       ret_type = SIM_PTYPE_SIM;
-                       break;
-               case SEC_ADM_VERIFY :
-                       ret_type = SIM_PTYPE_ADM;
-                       break;
-
-               case SEC_PIN1_ENABLE :
-               case SEC_PIN1_DISABLE :
-               case SEC_PIN1_STATUS :
-                       ret_type = SIM_FACILITY_SC;
-                       break;
-               case SEC_SIM_ENABLE :
-               case SEC_SIM_DISABLE :
-               case SEC_SIM_STATUS :
-                       ret_type = SIM_FACILITY_PS;
-                       break;
-               case SEC_NET_ENABLE :
-               case SEC_NET_DISABLE :
-               case SEC_NET_STATUS :
-                       ret_type = SIM_FACILITY_PN;
-                       break;
-               case SEC_NS_ENABLE :
-               case SEC_NS_DISABLE :
-               case SEC_NS_STATUS :
-                       ret_type = SIM_FACILITY_PU;
-                       break;
-               case SEC_SP_ENABLE :
-               case SEC_SP_DISABLE :
-               case SEC_SP_STATUS :
-                       ret_type = SIM_FACILITY_PP;
-                       break;
-               case SEC_CP_ENABLE :
-               case SEC_CP_DISABLE :
-               case SEC_CP_STATUS :
-                       ret_type = SIM_FACILITY_PC;
-                       break;
-               case SEC_FDN_ENABLE :
-               case SEC_FDN_DISABLE :
-               case SEC_FDN_STATUS :
-                       ret_type = SIM_FACILITY_FD;
-                       break;
-
-               default:
-                       dbg("not handled current sec op[%d]",op)
-                       break;
-       }
-       return ret_type;
-}
-
-static enum tel_sim_access_result _decode_status_word(unsigned short status_word1, unsigned short status_word2)
-{
-       enum tel_sim_access_result rst = SIM_ACCESS_FAILED;
-
-       if (status_word1 == 0x93 && status_word2 == 0x00) {
-               rst = SIM_ACCESS_FAILED;
-               /*Failed SIM request command*/
-               dbg(" error - SIM application toolkit busy [%x][%x]", status_word1, status_word2);
-       }
-       else if (status_word1 == 0x94 && status_word2 == 0x00) {
-               rst = SIM_ACCESS_FAILED;
-               /*Failed SIM request command*/
-               dbg(" error - No EF Selected [%x][%x]", status_word1, status_word2);
-       }
-       else if (status_word1 == 0x94 && status_word2 == 0x02) {
-               rst = SIM_ACCESS_FAILED;
-               /*Failed SIM request command*/
-               dbg("error - Out of Range - Invalid address or record number[%x][%x]",
-                               status_word1, status_word2);
-       }
-       else if (status_word1 == 0x94 && status_word2 == 0x04) {
-               rst = SIM_ACCESS_FILE_NOT_FOUND;
-               /*Failed SIM request command*/
-               dbg(" error - File ID not found [%x][%x]", status_word1, status_word2);
-       }
-       else if (status_word1 == 0x94 && status_word2 == 0x08) {
-               rst = SIM_ACCESS_FAILED; /* MOdem not support */
-               /*Failed SIM request command*/
-               dbg(" error - File is inconsistent with command - Modem not support or USE [%x][%x]",
-                               status_word1, status_word2);
-       }
-       else if (status_word1 == 0x98 && status_word2 == 0x02) {
-               rst = SIM_ACCESS_CONDITION_NOT_SATISFIED;
-               /*Failed SIM request command*/
-               dbg(" error - CHV not initialized [%x][%x]", status_word1, status_word2);
-       }
-       else if (status_word1 == 0x98 && status_word2 == 0x04) {
-               rst = SIM_ACCESS_CONDITION_NOT_SATISFIED;
-               /*Failed SIM request command*/
-               dbg(" error - Access condition not fullfilled [%x][%x]", status_word1, status_word2);
-               dbg(" error -Unsuccessful CHV verification - at least one attempt left [%x][%x]",
-                               status_word1, status_word2);
-               dbg(" error - Unsuccessful Unblock CHV - at least one attempt left [%x][%x]",
-                               status_word1, status_word2);
-               dbg(" error - Authentication failure [%x][%x]", status_word1, status_word2);
-       }
-       else if (status_word1 == 0x98 && status_word2 == 0x08) {
-               rst = SIM_ACCESS_CONDITION_NOT_SATISFIED;
-               /*Failed SIM request command*/
-               dbg(" error - Contradiction with CHV status [%x][%x]", status_word1, status_word2);
-       }
-       else if (status_word1 == 0x98 && status_word2 == 0x10) {
-               rst = SIM_ACCESS_CONDITION_NOT_SATISFIED;
-               /*Failed SIM request command*/
-               dbg(" error - Contradiction with invalidation  status [%x][%x]",
-                               status_word1, status_word2);
-       }
-       else if (status_word1 == 0x98 && status_word2 == 0x40) {
-               rst = SIM_ACCESS_CONDITION_NOT_SATISFIED;
-               /*Failed SIM request command*/
-               dbg(" error -Unsuccessful CHV verification - no attempt left [%x][%x]",
-                               status_word1, status_word2);
-               dbg(" error - Unsuccessful Unblock CHV - no attempt left [%x][%x]",
-                               status_word1, status_word2);
-               dbg(" error - CHV blocked [%x][%x]", status_word1, status_word2);
-       }
-       else if (status_word1 == 0x67 && status_word2 == 0x00) {
-               rst = SIM_ACCESS_FAILED;
-               dbg(" error -Incorrect Parameter 3 [%x][%x]", status_word1, status_word2);
-       }
-       else if (status_word1 == 0x6B && status_word2 == 0x00) {
-               rst = SIM_ACCESS_FAILED;
-               dbg(" error -Incorrect Parameter 1 or 2 [%x][%x]", status_word1, status_word2);
-       }
-       else if (status_word1 == 0x6D && status_word2 == 0x00) {
-               rst = SIM_ACCESS_CONDITION_NOT_SATISFIED;
-               dbg(" error -Unknown instruction given as command [%x][%x]", status_word1, status_word2);
-       }
-       else if (status_word1 == 0x6E && status_word2 == 0x00) {
-               rst = SIM_ACCESS_CONDITION_NOT_SATISFIED;
-               dbg(" error -Unknown instruction given as command [%x][%x]", status_word1, status_word2);
-       }
-       else if (status_word1 == 0x69 && status_word2 == 0x82) {
-               rst = SIM_ACCESS_CONDITION_NOT_SATISFIED;
-               dbg(" error -Access denied [%x][%x]", status_word1, status_word2);
-       }
-       else if (status_word1 == 0x6A && status_word2 == 0x87) {
-               rst = SIM_ACCESS_FAILED;
-               dbg(" error -Incorrect parameters [%x][%x]", status_word1, status_word2);
-       }
-       else if (status_word1 == 0x6A && status_word2 == 0x82) {
-               rst = SIM_ACCESS_FILE_NOT_FOUND; // not sure of the SW1 and SW2 meaning here
-               dbg(" error -File Not found [%x][%x]", status_word1, status_word2);
-       }
-       else if (status_word1 == 0x6A && status_word2 == 0x83) {
-               rst = SIM_ACCESS_FILE_NOT_FOUND; // not sure of the SW1 and SW2 meaning here
-               dbg(" error -Record Not found [%x][%x]", status_word1, status_word2);
-       }
-       else {
-               rst = SIM_ACCESS_CARD_ERROR;
-               dbg(" error -Unknown state [%x][%x]", status_word1, status_word2);
-       }
-       return rst;
-}
-
-static gboolean _sim_check_identity(CoreObject *o, struct tel_sim_imsi *imsi)
-{
-       Server *s = NULL;
-       Storage *strg = NULL;
-       char* old_imsi = NULL;
-       char new_imsi[15+1] = {0,};
-
-       s = tcore_plugin_ref_server(tcore_object_ref_plugin(o));
-       if(!s){
-               dbg("there is no valid server at this point");
-               return FALSE;
-       }
-
-       strg = (Storage*)tcore_server_find_storage(s, "vconf");
-       if(!strg){
-               dbg("there is no valid storage plugin");
-               return FALSE;
-       }
-
-       memcpy(&new_imsi, imsi->plmn, strlen(imsi->plmn));
-       memcpy(&new_imsi[strlen(imsi->plmn)], imsi->msin, strlen(imsi->msin));
-       new_imsi[strlen(imsi->plmn)+strlen(imsi->msin)] = '\0';
-
-       old_imsi = tcore_storage_get_string(strg, STORAGE_KEY_TELEPHONY_IMSI);
-       dbg("old_imsi[%s],newImsi[%s]", old_imsi, new_imsi);
-
-       if (old_imsi != NULL) {
-               if (strncmp(old_imsi, new_imsi, 15) != 0) {
-                       dbg("NEW SIM");
-                       if (tcore_storage_set_string(strg, STORAGE_KEY_TELEPHONY_IMSI, (const char*) &new_imsi) == FALSE)
-                               dbg("[FAIL] UPDATE STORAGE_KEY_TELEPHONY_IMSI");
-                       tcore_sim_set_identification(o, TRUE);
-               }
-               else {
-                       dbg("SAME SIM");
-                       tcore_sim_set_identification(o, FALSE);
-               }
-       }
-       else {
-               dbg("OLD SIM VALUE IS NULL. NEW SIM");
-               if (tcore_storage_set_string(strg, STORAGE_KEY_TELEPHONY_IMSI, (const char*) &new_imsi) == FALSE)
-                       dbg("[FAIL] UPDATE STORAGE_KEY_TELEPHONY_IMSI");
-               tcore_sim_set_identification(o, TRUE);
-       }
-       return 1;
-}
-
-static void  _next_from_get_file_info(CoreObject *o,  UserRequest *ur, enum tel_sim_file_id ef, enum tel_sim_access_result rt)
-{
-       struct tresp_sim_read resp = {0,};
-       struct s_sim_property *file_meta = NULL;
-
-       dbg("EF[0x%x] access Result[%d]", ef, rt);
-
-       resp.result = rt;
-       memset(&resp.data, 0x00, sizeof(resp.data));
-       file_meta = (struct s_sim_property*)tcore_user_request_ref_metainfo(ur, NULL);
-
-       if ((ef != SIM_EF_ELP && ef != SIM_EF_LP && ef != SIM_EF_USIM_PL && ef != SIM_EF_CPHS_CPHS_INFO)
-                       && (rt != SIM_ACCESS_SUCCESS)) {
-               tcore_user_request_send_response(ur, _find_resp_command(ur), sizeof(struct tresp_sim_read),
-                               &resp);
-               return;
-       }
-
-       switch (ef) {
-               case SIM_EF_ELP:
-                       if (rt == SIM_ACCESS_SUCCESS) {
-                               dbg("[SIM DATA] exist EFELP/PL(0x2F05)");
-                               /*                              if (po->language_file == 0x00)
-                                po->language_file = SIM_EF_ELP;*/
-                               _get_file_data(o, ur, ef, 0, file_meta->data_size);
-                       }
-                       else {
-                               if (tcore_sim_get_type(o) == SIM_TYPE_GSM) {
-                                       dbg(" [SIM DATA]SIM_EF_ELP(2F05) access fail. Request SIM_EF_LP(0x6F05) info");
-                                       /* The ME requests the Language Preference (EFLP) if EFELP is not available  */
-                                       _get_file_info(o, ur, SIM_EF_LP);
-                               }
-                               else if (tcore_sim_get_type(o) == SIM_TYPE_USIM) {
-                                       dbg(
-                                                       " [SIM DATA]fail to get Language information in USIM(EF-LI(6F05),EF-PL(2F05)). Request SIM_EF_ECC(0x6FB7) info");
-                                       /* EFELPand EFLI not present at this point. */
-                                       /*                                      po->language.lang_cnt = 0;*/
-                                       tcore_user_request_send_response(ur, _find_resp_command(ur),
-                                                       sizeof(struct tresp_sim_read), &resp);
-                                       return;
-                               }
-                       }
-                       break;
-
-               case SIM_EF_LP: //same with SIM_EF_USIM_LI
-                       if (rt == SIM_ACCESS_SUCCESS) {
-                               dbg("[SIM DATA] exist EFLP/LI(0x6F05)");
-                               /*                              if (po->language_file == 0x00)
-                                po->language_file = SIM_EF_LP;*/
-                               _get_file_data(o, ur, ef, 0, file_meta->data_size);
-                       }
-                       else {
-                               dbg("[SIM DATA]SIM_EF_LP/LI(6F05) access fail. Current CardType[%d]",
-                                               tcore_sim_get_type(o));
-                               if (tcore_sim_get_type(o) == SIM_TYPE_GSM) {
-                                       /* EFELPand EFLP not present at this point.*/
-                                       /*                                      po->language.lang_cnt = 0;*/
-                                       tcore_user_request_send_response(ur, _find_resp_command(ur),
-                                                       sizeof(struct tresp_sim_read), &resp);
-                                       return;
-                               }
-                               /*  if EFLI is not present, then the language selection shall be as defined in EFPL at the MF level     */
-                               else if (tcore_sim_get_type(o) == SIM_TYPE_USIM) {
-                                       dbg("[SIM DATA] try USIM EFPL(0x2F05)");
-                                       _get_file_info(o, ur, SIM_EF_ELP);
-                               }
-                       }
-                       break;
-
-               case SIM_EF_USIM_PL:
-                       if (rt == SIM_ACCESS_SUCCESS) {
-                               dbg("[SIM DATA] exist EFELP/PL(0x2F05)");
-                               /*                              if (po->language_file == 0x00)
-                                po->language_file = SIM_EF_ELP;*/
-                               _get_file_data(o, ur, SIM_EF_ELP, 0, file_meta->data_size);
-                       }
-                       else {
-                               /* EFELIand EFPL not present, so set language count as zero and select ECC */
-                               dbg(
-                                               " [SIM DATA]SIM_EF_USIM_PL(2A05) access fail. Request SIM_EF_ECC(0x6FB7) info");
-                               /*                              po->language.lang_cnt = 0;*/
-                               tcore_user_request_send_response(ur, _find_resp_command(ur),
-                                               sizeof(struct tresp_sim_read), &resp);
-                               return;
-                       }
-                       break;
-
-               case SIM_EF_ECC:
-                       if (tcore_sim_get_type(o) == SIM_TYPE_GSM) {
-                               _get_file_data(o, ur, ef, 0, file_meta->data_size);
-                       }
-                       else if (tcore_sim_get_type(o) == SIM_TYPE_USIM) {
-                               if (file_meta->rec_count > SIM_ECC_RECORD_CNT_MAX)
-                                       file_meta->rec_count = SIM_ECC_RECORD_CNT_MAX;
-
-                               file_meta->current_index++;
-                               _get_file_record(o, ur, ef, file_meta->current_index, file_meta->rec_length);
-                       }
-                       break;
-
-               case SIM_EF_ICCID:
-               case SIM_EF_IMSI:
-               case SIM_EF_SST:
-               case SIM_EF_SPN:
-               case SIM_EF_SPDI:
-               //case SIM_EF_CPHS_CPHS_INFO:
-               case SIM_EF_CPHS_CALL_FORWARD_FLAGS:
-               case SIM_EF_CPHS_VOICE_MSG_WAITING:
-               case SIM_EF_CPHS_OPERATOR_NAME_STRING:
-               case SIM_EF_CPHS_OPERATOR_NAME_SHORT_FORM_STRING:
-               case SIM_EF_CPHS_DYNAMICFLAGS:
-               case SIM_EF_CPHS_DYNAMIC2FLAG:
-               case SIM_EF_CPHS_CUSTOMER_SERVICE_PROFILE:
-               case SIM_EF_CPHS_CUSTOMER_SERVICE_PROFILE_LINE2:
-                       _get_file_data(o, ur, ef, 0, file_meta->data_size);
-                       break;
-
-               case SIM_EF_CPHS_CPHS_INFO:
-                       if (rt == SIM_ACCESS_SUCCESS) {
-                               tcore_sim_set_cphs_status(o, TRUE);
-                               if (!tcore_user_request_ref_communicator(ur)) {
-                                       dbg("internal CPHS INFO request before sim status update");
-                                       _sim_status_update(o, SIM_STATUS_INIT_COMPLETED);
-                               } else {
-                                       dbg("external CPHS INFO request");
-                                       _get_file_data(o, ur, ef, 0, file_meta->data_size);
-                               }
-                       } else {
-                               tcore_sim_set_cphs_status(o, FALSE);
-                               if (!tcore_user_request_ref_communicator(ur)) {
-                                       dbg("internal CPHS INFO request before sim status update");
-                                       _sim_status_update(o, SIM_STATUS_INIT_COMPLETED);
-                               } else {
-                                       dbg("external CPHS INFO request");
-                                       tcore_user_request_send_response(ur, _find_resp_command(ur),
-                                                       sizeof(struct tresp_sim_read), &resp);
-                               }
-                       }
-                       break;
-
-
-               case SIM_EF_USIM_CFIS:
-                       if (file_meta->rec_count > SIM_CF_RECORD_CNT_MAX)
-                               file_meta->rec_count = SIM_CF_RECORD_CNT_MAX;
-                       file_meta->current_index++;
-                       _get_file_record(o, ur, ef, file_meta->current_index, file_meta->rec_length);
-                       break;
-
-               case SIM_EF_OPL:
-               case SIM_EF_PNN:
-               case SIM_EF_USIM_MWIS:
-               case SIM_EF_USIM_MBI:
-               case SIM_EF_MBDN:
-               case SIM_EF_CPHS_MAILBOX_NUMBERS:
-               case SIM_EF_CPHS_INFORMATION_NUMBERS:
-                       file_meta->current_index++;
-                       _get_file_record(o, ur, ef, file_meta->current_index, file_meta->rec_length);
-                       break;
-
-               default:
-                       dbg("error - File id for get file info [0x%x]", ef);
-                       break;
-       }
-       return;
-}
-
-static void _next_from_get_file_data(CoreObject *o, UserRequest *ur, enum tel_sim_access_result rt, int decode_ret)
-{
-       struct s_sim_property *file_meta = NULL;
-       dbg("Entry");
-
-       file_meta = (struct s_sim_property*)tcore_user_request_ref_metainfo(ur, NULL);
-       dbg("[SIM]EF[0x%x] read rt[%d] Decode rt[%d]", file_meta->file_id, rt, decode_ret);
-       switch (file_meta->file_id) {
-               case SIM_EF_ELP:
-               case SIM_EF_USIM_PL:
-               case SIM_EF_LP:
-               case SIM_EF_USIM_LI:
-                       if (decode_ret == TRUE) {
-                               if (file_meta->file_id == SIM_EF_LP || file_meta->file_id == SIM_EF_USIM_LI) {
-/*                                     po->language_file = SIM_EF_LP;*/
-                               } else if (file_meta->file_id == SIM_EF_ELP || file_meta->file_id == SIM_EF_USIM_PL) {
-/*                                     po->language_file = SIM_EF_ELP;*/
-                               }
-                               tcore_user_request_send_response(ur, _find_resp_command(ur),    sizeof(struct tresp_sim_read), &file_meta->files);
-                       } else {
-                               /* 2G */
-                               /*  The ME requests the Extended Language Preference. The ME only requests the Language Preference (EFLP) if at least one of the following conditions holds:
-                                -      EFELP is not available;
-                                -      EFELP does not contain an entry corresponding to a language specified in ISO 639[30];
-                                -      the ME does not support any of the languages in EFELP.
-                                */
-                               /* 3G */
-                               /*  The ME only requests the Language Preference (EFPL) if at least one of the following conditions holds:
-                                -      if the EFLI has the value 'FFFF' in its highest priority position
-                                -      if the ME does not support any of the language codes indicated in EFLI , or if EFLI is not present
-                                */
-                               if (tcore_sim_get_type(o) == SIM_TYPE_GSM) {
-                                       if (file_meta->file_id == SIM_EF_LP)
-                                               tcore_user_request_send_response(ur, _find_resp_command(ur),    sizeof(struct tresp_sim_read), &file_meta->files);
-                                       else
-                                               _get_file_info(o, ur, SIM_EF_LP);
-                               } else if (tcore_sim_get_type(o) == SIM_TYPE_USIM) {
-
-                                       if (file_meta->file_id == SIM_EF_LP || file_meta->file_id == SIM_EF_USIM_LI){
-                                               _get_file_info(o, ur, SIM_EF_ELP);
-                                       }
-                                       else{
-                                               tcore_user_request_send_response(ur, _find_resp_command(ur),    sizeof(struct tresp_sim_read), &file_meta->files);
-                                       }
-                               }
-                       }
-                       break;
-
-               case SIM_EF_ECC:
-                       if (tcore_sim_get_type(o) == SIM_TYPE_USIM) {
-                               if (file_meta->current_index == file_meta->rec_count) {
-                                       tcore_user_request_send_response(ur, _find_resp_command(ur),    sizeof(struct tresp_sim_read), &file_meta->files);
-                               } else {
-                                       file_meta->current_index++;
-                                       _get_file_record(o, ur, file_meta->file_id, file_meta->current_index, file_meta->rec_length);
-                               }
-                       } else if (tcore_sim_get_type(o) == SIM_TYPE_GSM) {
-                               tcore_user_request_send_response(ur, _find_resp_command(ur),    sizeof(struct tresp_sim_read), &file_meta->files);
-                       } else {
-                               dbg("[SIM DATA]Invalid CardType[%d] Unable to handle", tcore_sim_get_type(o));
-                       }
-                       break;
-
-               case SIM_EF_IMSI:
-                       ur = tcore_user_request_new(NULL, NULL); //this is for using ur metainfo set/ref functionality.
-                       _get_file_info(o, ur, SIM_EF_CPHS_CPHS_INFO);
-                       break;
-
-               case SIM_EF_MSISDN:
-                       if (file_meta->current_index == file_meta->rec_count) {
-                               tcore_user_request_send_response(ur, _find_resp_command(ur),    sizeof(struct tresp_sim_read), &file_meta->files);
-                       } else {
-                               file_meta->current_index++;
-                               _get_file_record(o, ur, file_meta->file_id, file_meta->current_index, file_meta->rec_length);
-                       }
-                       break;
-
-               case SIM_EF_OPL:
-                       if (file_meta->current_index == file_meta->rec_count) {
-                               tcore_user_request_send_response(ur, _find_resp_command(ur),    sizeof(struct tresp_sim_read), &file_meta->files);
-                       } else {
-                               file_meta->current_index++;
-                               _get_file_record(o, ur, file_meta->file_id, file_meta->current_index, file_meta->rec_length);
-                       }
-                       break;
-
-               case SIM_EF_PNN:
-                       if (file_meta->current_index == file_meta->rec_count) {
-                               tcore_user_request_send_response(ur, _find_resp_command(ur),    sizeof(struct tresp_sim_read), &file_meta->files);
-                       } else {
-                               file_meta->current_index++;
-                               _get_file_record(o, ur, file_meta->file_id, file_meta->current_index, file_meta->rec_length);
-                       }
-                       break;
-
-               case SIM_EF_USIM_CFIS:
-               case SIM_EF_USIM_MWIS:
-               case SIM_EF_USIM_MBI:
-               case SIM_EF_MBDN:
-               case SIM_EF_CPHS_MAILBOX_NUMBERS:
-               case SIM_EF_CPHS_INFORMATION_NUMBERS:
-                       if (file_meta->current_index == file_meta->rec_count) {
-                               tcore_user_request_send_response(ur, _find_resp_command(ur),    sizeof(struct tresp_sim_read), &file_meta->files);
-                       } else {
-                               file_meta->current_index++;
-                               _get_file_record(o, ur, file_meta->file_id, file_meta->current_index, file_meta->rec_length);
-                       }
-                       break;
-
-               case SIM_EF_CPHS_OPERATOR_NAME_STRING:
-                       file_meta->files.result = rt;
-                       if (decode_ret == TRUE && rt == SIM_ACCESS_SUCCESS)
-                               memcpy(file_meta->files.data.cphs_net.full_name, file_meta->files.data.cphs_net.full_name, strlen((char*)file_meta->files.data.cphs_net.full_name));
-                       _get_file_info(o, ur, SIM_EF_CPHS_OPERATOR_NAME_SHORT_FORM_STRING);
-                       break;
-
-               case SIM_EF_CPHS_OPERATOR_NAME_SHORT_FORM_STRING:
-                       if (file_meta->files.result == SIM_ACCESS_SUCCESS || file_meta->files.result == SIM_ACCESS_SUCCESS)
-                               file_meta->files.result = SIM_ACCESS_SUCCESS;
-                       if (strlen((char*)file_meta->files.data.cphs_net.full_name))
-                               memcpy(&file_meta->files.data.cphs_net.full_name, &file_meta->files.data.cphs_net.full_name, strlen((char*)file_meta->files.data.cphs_net.full_name));
-                       tcore_user_request_send_response(ur, _find_resp_command(ur),    sizeof(struct tresp_sim_read), &file_meta->files);
-                       break;
-
-               case SIM_EF_ICCID:
-               case SIM_EF_SST:
-               case SIM_EF_SPN:
-               case SIM_EF_SPDI:
-               case SIM_EF_OPLMN_ACT:
-               case SIM_EF_CPHS_CPHS_INFO :
-               case SIM_EF_CPHS_CALL_FORWARD_FLAGS:
-               case SIM_EF_CPHS_VOICE_MSG_WAITING:
-               case SIM_EF_CPHS_DYNAMICFLAGS:
-               case SIM_EF_CPHS_DYNAMIC2FLAG:
-               case SIM_EF_CPHS_CUSTOMER_SERVICE_PROFILE:
-               case SIM_EF_CPHS_CUSTOMER_SERVICE_PROFILE_LINE2:
-                       tcore_user_request_send_response(ur, _find_resp_command(ur),    sizeof(struct tresp_sim_read), &file_meta->files);
-                       break;
-
-               default:
-                       dbg("File id not handled [0x%x]", file_meta->file_id);
-                       break;
-       }
-}
-
-static void _sim_status_update(CoreObject *o, enum tel_sim_status sim_status)
-{
-       struct tnoti_sim_status noti_data = {0,};
-
-       dbg("tcore_sim_set_status and send noti w/ [%d]", sim_status);
-       tcore_sim_set_status(o, sim_status);
-       noti_data.sim_status = sim_status;
-       tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_SIM_STATUS,
-                       sizeof(struct tnoti_sim_status), &noti_data);
-}
-
-static void _response_get_sim_type(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse *resp = data;
-       UserRequest *ur = NULL;
-       CoreObject *co_sim = NULL;
-       struct s_sim_property *sp = NULL;
-       GSList *tokens=NULL;
-       enum tel_sim_type sim_type = SIM_TYPE_UNKNOWN;
-       const char *line;
-       int state;
-
-       dbg(" Function entry ");
-       
-       co_sim = tcore_pending_ref_core_object(p);
-       sp = tcore_sim_ref_userdata(co_sim);
-       ur = tcore_pending_ref_user_request(p);
-
-       if(resp->success > 0)
-       {
-               dbg("RESPONSE OK");
-               if(resp->lines) {
-                       line = (const char*)resp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       if (g_slist_length(tokens) != 1) {
-                               msg("invalid message");
-                               tcore_at_tok_free(tokens);
-                               return;
-                       }
-               }
-               state = atoi(g_slist_nth_data(tokens, 0));
-               dbg("SIM Type is %d", state);
-
-               if(state == 0){
-                       sim_type = SIM_TYPE_GSM;
-               }else if(state == 1){
-                       sim_type = SIM_TYPE_USIM;
-               }else{
-                       sim_type = SIM_TYPE_UNKNOWN;
-               }
-               
-       }
-       else
-       {
-               dbg("RESPONSE NOK");
-               sim_type = SIM_TYPE_UNKNOWN;
-       }
-
-       tcore_sim_set_type(co_sim, sim_type);
-       _sim_status_update(co_sim, sp->first_recv_status);
-       tcore_at_tok_free(tokens);
-       dbg(" Function exit");
-}
-
-static void _response_get_file_info(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse *resp = data;
-       UserRequest *ur = NULL;
-       CoreObject *co_sim = NULL;
-       struct s_sim_property *file_meta = NULL;
-       GSList *tokens=NULL;
-       enum tel_sim_access_result rt;
-       GQueue *queue = NULL;
-       const char *line;
-       int sw1 = 0;
-       int sw2 = 0;
-
-       dbg(" Function entry ");
-       
-       co_sim = tcore_pending_ref_core_object(p);
-       ur = tcore_pending_ref_user_request(p);
-       file_meta = (struct s_sim_property*)tcore_user_request_ref_metainfo(ur, NULL);
-       
-       if(resp->success > 0)
-       {
-               dbg("RESPONSE OK");
-               if(resp->lines) {
-                       line = (const char*)resp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       if (g_slist_length(tokens) < 2) {
-                               err("invalid message");
-                               tcore_at_tok_free(tokens);
-                               return;
-                       }
-               }
-               sw1 = atoi(g_slist_nth_data(tokens, 0));
-               sw2 = atoi(g_slist_nth_data(tokens, 1));
-
-               /*1. SIM access success case*/
-               if ((sw1 == 0x90 && sw2 == 0x00) || sw1 == 0x91) {
-                       unsigned char tag_len = 0; /*   1 or 2 bytes ??? */
-                       unsigned short record_len = 0;
-                       char num_of_records = 0;
-                       unsigned char file_id_len = 0;
-                       unsigned short file_id = 0;
-                       unsigned short file_size = 0;
-                       unsigned short file_type = 0;
-                       unsigned short arr_file_id = 0;
-                       int arr_file_id_rec_num = 0;
-
-                       /*      handling only last 3 bits */
-                       unsigned char file_type_tag = 0x07;
-                       unsigned char *ptr_data;
-
-                       char *hexData;
-                       char *tmp;
-                       char *recordData = NULL;
-                       hexData = g_slist_nth_data(tokens, 2);
-                       dbg("hexData: %s", hexData);
-                       dbg("hexData: %s", hexData+1);
-
-                       tmp = calloc(1, strlen(hexData)-2);
-                       memcpy(tmp, hexData+1, strlen(hexData)-2);
-                       dbg("tmp: %s", tmp);
-
-                       recordData = util_hexStringToBytes(tmp);
-                       dbg("recordData: %x", recordData);
-                       free(tmp);
-                       util_hex_dump("    ", strlen(hexData)/2, recordData);
-                       
-                       ptr_data = (unsigned char *)recordData;
-                       if (tcore_sim_get_type(co_sim) == SIM_TYPE_USIM) {
-                               /*
-                                ETSI TS 102 221 v7.9.0
-                                - Response Data
-                                '62'   FCP template tag
-                                - Response for an EF
-                                '82'   M       File Descriptor
-                                '83'   M       File Identifier
-                                'A5'   O       Proprietary information
-                                '8A'   M       Life Cycle Status Integer
-                                '8B', '8C' or 'AB'     C1      Security attributes
-                                '80'   M       File size
-                                '81'   O       Total file size
-                                '88'   O       Short File Identifier (SFI)
-                                */
-
-                               /* rsim.res_len  has complete data length received  */
-
-                               /* FCP template tag - File Control Parameters tag*/
-                               if (*ptr_data == 0x62) {
-                                       /* parse complete FCP tag*/
-                                       /* increment to next byte */
-                                       ptr_data++;
-                                       tag_len = *ptr_data++;
-                                       dbg("tag_len: %02x", tag_len);
-                                       /* FCP file descriptor - file type, accessibility, DF, ADF etc*/
-                                       if (*ptr_data == 0x82) {
-                                               /* increment to next byte */
-                                               ptr_data++;
-                                               /* 2 or 5 value*/
-                                               ptr_data++;
-                                               /*      unsigned char file_desc_len = *ptr_data++;*/
-                                               /*      dbg("file descriptor length: [%d]", file_desc_len);*/
-                                               /* TBD:  currently capture only file type : ignore sharable, non sharable, working, internal etc*/
-                                               /* consider only last 3 bits*/
-                                               dbg("file_type_tag: %02x", file_type_tag);
-                                               file_type_tag = file_type_tag & (*ptr_data);
-                                               dbg("file_type_tag: %02x", file_type_tag);
-
-                                               switch (file_type_tag) {
-                                                       /* increment to next byte */
-                                                       //ptr_data++;
-                                                       case 0x1:
-                                                               dbg("Getting FileType: [Transparent file type]");
-                                                               file_type = SIM_FTYPE_TRANSPARENT;
-
-                                                               /* increment to next byte */
-                                                               ptr_data++;
-                                                               /* increment to next byte */
-                                                               ptr_data++;
-                                                               break;
-
-                                                       case 0x2:
-                                                               dbg("Getting FileType: [Linear fixed file type]");
-                                                               /* increment to next byte */
-                                                               ptr_data++;
-                                                               /*      data coding byte - value 21 */
-                                                               ptr_data++;
-                                                               /*      2bytes */
-                                                               memcpy(&record_len, ptr_data, 2);
-                                                               /* swap bytes */
-                                                               SWAPBYTES16(record_len);
-                                                               ptr_data = ptr_data + 2;
-                                                               num_of_records = *ptr_data++;
-                                                               /* Data lossy conversation from enum (int) to unsigned char */
-                                                               file_type = SIM_FTYPE_LINEAR_FIXED;
-                                                               break;
-
-                                                       case 0x6:
-                                                               dbg(" Cyclic fixed file type");
-                                                               /* increment to next byte */
-                                                               ptr_data++;
-                                                               /*      data coding byte - value 21 */
-                                                               ptr_data++;
-                                                               /*      2bytes */
-                                                               memcpy(&record_len, ptr_data, 2);
-                                                               /* swap bytes  */
-                                                               SWAPBYTES16(record_len);
-                                                               ptr_data = ptr_data + 2;
-                                                               num_of_records = *ptr_data++;
-                                                               file_type = SIM_FTYPE_CYCLIC;
-                                                               break;
-
-                                               default:
-                                                       dbg("not handled file type [0x%x]", *ptr_data);
-                                                       break;
-                                               }
-                                       } else {
-                                               dbg("INVALID FCP received - DEbug!");
-                                               return;
-                                       }
-
-                                       /*File identifier - file id?? */ // 0x84,0x85,0x86 etc are currently ignored and not handled
-                                       if (*ptr_data == 0x83) {
-                                               /* increment to next byte */
-                                               ptr_data++;
-                                               file_id_len = *ptr_data++;
-                                               dbg("file_id_len: %02x", file_id_len);
-
-                                               memcpy(&file_id, ptr_data, file_id_len);
-                                               dbg("file_id: %x", file_id);
-
-                                               /* swap bytes    */
-                                               SWAPBYTES16(file_id);
-                                               dbg("file_id: %x", file_id);
-
-                                               ptr_data = ptr_data + 2;
-                                               dbg("Getting FileID=[0x%x]", file_id);
-                                       } else {
-                                               dbg("INVALID FCP received - DEbug!");
-                                               free(recordData);                                       
-                                               return;
-                                       }
-
-                                       /*      proprietary information  */
-                                       if (*ptr_data == 0xA5) {
-                                               unsigned short prop_len;
-                                               /* increment to next byte */
-                                               ptr_data++;
-
-                                               /* length */
-                                               prop_len = *ptr_data;
-                                               dbg("prop_len: %02x", prop_len);
-
-                                               /* skip data */
-                                               ptr_data = ptr_data + prop_len + 1;
-                                       } else {
-                                               dbg("INVALID FCP received - DEbug!");
-                                       }
-
-                                       /* life cycle status integer [8A][length:0x01][status]*/
-                                       /*
-                                        status info b8~b1
-                                        00000000 : No information given
-                                        00000001 : creation state
-                                        00000011 : initialization state
-                                        000001-1 : operation state -activated
-                                        000001-0 : operation state -deactivated
-                                        000011-- : Termination state
-                                        b8~b5 !=0, b4~b1=X : Proprietary
-                                        Any other value : RFU
-                                        */
-                                       if (*ptr_data == 0x8A) {
-                                               /* increment to next byte */
-                                               ptr_data++;
-                                               /* length - value 1 */
-                                               ptr_data++;
-
-                                               switch (*ptr_data) {
-                                                       case 0x04:
-                                                       case 0x06:
-                                                               dbg("<RX> operation state -deactivated");
-                                                               ptr_data++;
-                                                               break;
-                                                       case 0x05:
-                                                       case 0x07:
-                                                               dbg("<RX> operation state -activated");
-                                                               ptr_data++;
-                                                               break;
-                                                       default:
-                                                               dbg("<RX> DEBUG! LIFE CYCLE STATUS =[0x%x]",*ptr_data);
-                                                               ptr_data++;
-                                                               break;
-                                               }
-                                       }
-
-                                       /* related to security attributes : currently not handled*/
-                                       if (*ptr_data == 0x86 || *ptr_data == 0x8B || *ptr_data == 0x8C || *ptr_data == 0xAB) {
-                                               /* increment to next byte */
-                                               ptr_data++;
-                                               /* if tag length is 3 */
-                                               if (*ptr_data == 0x03) {
-                                                       /* increment to next byte */
-                                                       ptr_data++;
-                                                       /* EFARR file id */
-                                                       memcpy(&arr_file_id, ptr_data, 2);
-                                                       /* swap byes */
-                                                       SWAPBYTES16(arr_file_id);
-                                                       ptr_data = ptr_data + 2;
-                                                       arr_file_id_rec_num = *ptr_data++;
-                                               } else {
-                                                       /* if tag length is not 3 */
-                                                       /* ignoring bytes       */
-                                                       //      ptr_data = ptr_data + 4;
-                                                       dbg("Useless security attributes, so jump to next tag");
-                                                       ptr_data = ptr_data + (*ptr_data + 1);
-                                               }
-                                       } else {
-                                               dbg("INVALID FCP received[0x%x] - DEbug!", *ptr_data);
-                                               free(recordData);                                               
-                                               return;
-                                       }
-
-                                       dbg("Current ptr_data value is [%x]", *ptr_data);
-
-                                       /* file size excluding structural info*/
-                                       if (*ptr_data == 0x80) {
-                                               /* for EF file size is body of file and for Linear or cyclic it is
-                                                * number of recXsizeof(one record)
-                                                */
-                                               /* increment to next byte */
-                                               ptr_data++;
-                                               /* length is 1 byte - value is 2 bytes or more */
-                                               ptr_data++;
-                                               memcpy(&file_size, ptr_data, 2);
-                                               /* swap bytes */
-                                               SWAPBYTES16(file_size);
-                                               ptr_data = ptr_data + 2;
-                                       } else {
-                                               dbg("INVALID FCP received - DEbug!");
-                                               free(recordData);
-                                               return;
-                                       }
-
-                                       /* total file size including structural info*/
-                                       if (*ptr_data == 0x81) {
-                                               int len;
-                                               /* increment to next byte */
-                                               ptr_data++;
-                                               /* length */
-                                               len = *ptr_data;
-                                               /* ignored bytes */
-                                               ptr_data = ptr_data + 3;
-                                       } else {
-                                               dbg("INVALID FCP received - DEbug!");
-                                               /* 0x81 is optional tag?? check out! so do not return -1 from here! */
-                                               /* return -1; */
-                                       }
-                                       /*short file identifier ignored*/
-                                       if (*ptr_data == 0x88) {
-                                               dbg("0x88: Do Nothing");
-                                               /*DO NOTHING*/
-                                       }
-                               } else {
-                                       dbg("INVALID FCP received - DEbug!");
-                                       free(recordData);
-                                       return;
-                               }
-                       } else if (tcore_sim_get_type(co_sim) == SIM_TYPE_GSM) {
-                               unsigned char gsm_specific_file_data_len = 0;
-                               /*      ignore RFU byte1 and byte2 */
-                               ptr_data++;
-                               ptr_data++;
-                               /*      file size */
-                               //file_size = p_info->response_len;
-                               memcpy(&file_size, ptr_data, 2);
-                               /* swap bytes */
-                               SWAPBYTES16(file_size);
-                               /*      parsed file size */
-                               ptr_data = ptr_data + 2;
-                               /*  file id  */
-                               memcpy(&file_id, ptr_data, 2);
-                               SWAPBYTES16(file_id);
-                               dbg(" FILE id --> [%x]", file_id);
-                               ptr_data = ptr_data + 2;
-                               /* save file type - transparent, linear fixed or cyclic */
-                               file_type_tag = (*(ptr_data + 7));
-
-                               switch (*ptr_data) {
-                                       case 0x0:
-                                               /* RFU file type */
-                                               dbg(" RFU file type- not handled - Debug!");
-                                               break;
-                                       case 0x1:
-                                               /* MF file type */
-                                               dbg(" MF file type - not handled - Debug!");
-                                               break;
-                                       case 0x2:
-                                               /* DF file type */
-                                               dbg(" DF file type - not handled - Debug!");
-                                               break;
-                                       case 0x4:
-                                               /* EF file type */
-                                               dbg(" EF file type [%d] ", file_type_tag);
-                                               /*      increment to next byte */
-                                               ptr_data++;
-
-                                               if (file_type_tag == 0x00 || file_type_tag == 0x01) {
-                                                       /* increament to next byte as this byte is RFU */
-                                                       ptr_data++;
-                                                       file_type =
-                                                                       (file_type_tag == 0x00) ? SIM_FTYPE_TRANSPARENT : SIM_FTYPE_LINEAR_FIXED;
-                                               } else {
-                                                       /* increment to next byte */
-                                                       ptr_data++;
-                                                       /*      For a cyclic EF all bits except bit 7 are RFU; b7=1 indicates that */
-                                                       /* the INCREASE command is allowed on the selected cyclic file. */
-                                                       file_type = SIM_FTYPE_CYCLIC;
-                                               }
-                                               /* bytes 9 to 11 give SIM file access conditions */
-                                               ptr_data++;
-                                               /* byte 10 has one nibble that is RF U and another for INCREASE which is not used currently */
-                                               ptr_data++;
-                                               /* byte 11 is invalidate and rehabilate nibbles */
-                                               ptr_data++;
-                                               /* byte 12 - file status */
-                                               ptr_data++;
-                                               /* byte 13 - GSM specific data */
-                                               gsm_specific_file_data_len = *ptr_data;
-                                               ptr_data++;
-                                               /*      byte 14 - structure of EF - transparent or linear or cyclic , already saved above */
-                                               ptr_data++;
-                                               /* byte 15 - length of record for linear and cyclic , for transparent it is set to 0x00. */
-                                               record_len = *ptr_data;
-                                               dbg("record length[%d], file size[%d]", record_len, file_size);
-
-                                               if (record_len != 0)
-                                                       num_of_records = (file_size / record_len);
-
-                                               dbg("Number of records [%d]", num_of_records);
-                                               break;
-
-                                       default:
-                                               dbg(" not handled file type");
-                                               break;
-                               }
-                       } 
-                       else 
-                       {
-                               dbg(" Card Type - UNKNOWN  [%d]", tcore_sim_get_type(co_sim));
-                       }
-
-                       dbg("req ef[0x%x] resp ef[0x%x] size[%ld] Type[0x%x] NumOfRecords[%ld] RecordLen[%ld]",
-                                       file_meta->file_id, file_id, file_size, file_type, num_of_records, record_len);
-
-                       file_meta->file_type = file_type;
-                       file_meta->data_size = file_size;
-                       file_meta->rec_length = record_len;
-                       file_meta->rec_count = num_of_records;
-                       file_meta->current_index = 0; //reset for new record type EF
-                       rt = SIM_ACCESS_SUCCESS;
-                       free(recordData);
-               }
-               else 
-               {
-                       /*2. SIM access fail case*/
-                       dbg("error to get ef[0x%x]", file_meta->file_id);
-                       dbg("error to get ef[0x%x] (file_meta->file_id) ", file_meta->file_id);
-                       rt = _decode_status_word(sw1, sw2);
-               }
-               
-               //queue = tcore_object_ref_user_data(co_sim);
-               //if (queue)
-               //{
-                       ur = tcore_user_request_ref(ur);
-                       //util_add_waiting_job(queue, ID_RESERVED_AT, ur);
-               //}
-               dbg("Calling _next_from_get_file_info");
-               _next_from_get_file_info(co_sim, ur, file_meta->file_id, rt);
-               tcore_at_tok_free(tokens);
-       }
-       else
-       {
-               dbg("RESPONSE NOK");
-               dbg("error to get ef[0x%x]", file_meta->file_id);
-               dbg("error to get ef[0x%x] (file_meta->file_id) ", file_meta->file_id);
-               rt = SIM_ACCESS_FAILED;
-
-               ur = tcore_user_request_ref(ur);
-               _next_from_get_file_info(co_sim, ur, file_meta->file_id, rt);
-       }
-       dbg(" Function exit");
-}
-
-static void _response_get_file_data(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse *resp = data;
-       UserRequest *ur = NULL;
-       CoreObject *co_sim = NULL;
-       struct s_sim_property *file_meta = NULL;
-       GSList *tokens=NULL;
-       enum tel_sim_access_result rt;
-       struct tel_sim_imsi imsi;
-       struct tel_sim_ecc ecc;
-       struct tel_sim_msisdn msisdn;
-       struct tel_sim_opl opl;
-       struct tel_sim_pnn pnn;
-       GQueue *queue = NULL;
-       gboolean dr = FALSE;
-       const char *line = NULL;
-       unsigned char *res = NULL;
-       char *tmp = NULL;
-       int res_len;
-       int sw1 = 0;
-       int sw2 = 0;
-
-       dbg(" Function entry ");
-       
-       co_sim = tcore_pending_ref_core_object(p);
-       ur = tcore_pending_ref_user_request(p);
-       file_meta = (struct s_sim_property*)tcore_user_request_ref_metainfo(ur, NULL);
-       
-       if(resp->success > 0)
-       {
-               dbg("RESPONSE OK");
-               if(resp->lines) {
-                       line = (const char*)resp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       if (g_slist_length(tokens) != 3) {
-                               msg("invalid message");
-                               tcore_at_tok_free(tokens);
-                               return;
-                       }
-               }
-               sw1 = atoi(g_slist_nth_data(tokens, 0));
-               sw2 = atoi(g_slist_nth_data(tokens, 1));
-               res  = g_slist_nth_data(tokens, 2);
-               
-               res_len = strlen((const char*)res);
-               tmp = calloc(1, res_len-2);
-               memcpy(tmp, res+1, res_len-2);
-               dbg("tmp: %s", tmp);
-
-               res = util_hexStringToBytes(tmp);
-               res_len = strlen((const char*)res);
-               dbg("res: %s res_len: %d", res, res_len);
-
-               if((sw1 == 0x90 && sw2 == 0x00) || sw1 == 0x91){
-                       rt = SIM_ACCESS_SUCCESS;
-                       file_meta->files.result = rt;
-                       dbg("file_meta->file_id : %x", file_meta->file_id);                             
-               
-                       switch (file_meta->file_id) {
-                               case SIM_EF_IMSI:
-                               {
-                                       dbg("res: %s", res);
-                                       dr = tcore_sim_decode_imsi(&imsi, res, res_len);
-                                       if (dr == FALSE) {
-                                               dbg("imsi decoding failed");
-                                       } else {
-                                               _sim_check_identity(co_sim,&imsi);
-                                               tcore_sim_set_imsi(co_sim,&imsi);
-                                       }
-                                       break;
-                               }
-                               case SIM_EF_ICCID:
-                                       dr = tcore_sim_decode_iccid(&file_meta->files.data.iccid, res, res_len);
-                                       break;
-
-                               case SIM_EF_ELP:/*  2G EF -  2 bytes decoding*/
-                               case SIM_EF_USIM_LI: /* 3G EF - 2 bytes decoding*/
-                               case SIM_EF_USIM_PL:/*  3G EF - same as EFELP, so 2  byte decoding*/
-                               case SIM_EF_LP:/*  1 byte encoding*/
-                                       if (tcore_sim_get_type(co_sim) == SIM_TYPE_GSM && file_meta->file_id == SIM_EF_LP) {
-                                                /*2G LP(0x6F05) has 1 byte for each language*/
-                                               dr = tcore_sim_decode_lp(&file_meta->files.data.language, res, res_len);
-                                       } else {
-                                                /*3G LI(0x6F05)/PL(0x2F05), 2G ELP(0x2F05) has 2 bytes for each language*/
-                                               dr = tcore_sim_decode_li(file_meta->file_id, &file_meta->files.data.language, res, res_len);
-                                       }
-                                       break;
-                               case SIM_EF_SPN:
-                                       dr = tcore_sim_decode_spn(&file_meta->files.data.spn, res, res_len);
-                                       break;
-
-                               case SIM_EF_SPDI:
-                                       dr = tcore_sim_decode_spdi(&file_meta->files.data.spdi, res, res_len);
-                                       break;
-
-                               case SIM_EF_SST:
-/*                                     if(tcore_sim_get_type(o) == SIM_TYPE_GSM)
-                                               dr = tcore_sim_decode_sst(&file_meta->files.data , res, res_len);
-                                       else if(tcore_sim_get_type(o) == SIM_TYPE_USIM)
-                                               dr = tcore_sim_decode_ust(&po->st_u.ust, res, res_len);
-                                       else {
-                                               dbg("err not handled tcore_sim_get_type(o)[%d] in here",tcore_sim_get_type(o));
-                                       }*/
-                                       break;
-
-                               case SIM_EF_MBDN:
-/*                                     dr = tcore_sim_decode_xdn(&file_meta->files.data.mailbox, res, res_len);*/
-                                       break;
-
-                               case SIM_EF_ECC:
-                                       if(tcore_sim_get_type(co_sim) == SIM_TYPE_GSM) {
-                                               dr = tcore_sim_decode_ecc(&file_meta->files.data.ecc, res, res_len);
-                                       } else if(tcore_sim_get_type(co_sim) == SIM_TYPE_USIM){
-                                               dbg("decode w/ index [%d]",file_meta->current_index);
-                                               memset(&ecc, 0x00, sizeof(struct tel_sim_ecc));
-                                               dr = tcore_sim_decode_uecc(&ecc, res, res_len);
-                                               if (dr == TRUE) {
-                                                       memcpy(&file_meta->files.data.ecc.ecc[file_meta->files.data.ecc.ecc_count], &ecc, sizeof(struct tel_sim_ecc));
-                                                       file_meta->files.data.ecc.ecc_count++;
-                                               }
-                                       } else {
-                                               dbg("err not handled tcore_sim_get_type(o)[%d] in here",tcore_sim_get_type(co_sim));
-                                       }
-                                       break;
-
-                               case SIM_EF_USIM_MBI:
-/*                                     dr = tcore_sim_decode_mbi(&po->mb_u.mailbox.mbi, res, res_len);*/
-                                       break;
-
-                               case SIM_EF_MSISDN :
-                                       dbg("decode w/ index [%d]",file_meta->current_index);
-                                       memset(&msisdn, 0x00, sizeof(struct tel_sim_msisdn));
-                                       dr = tcore_sim_decode_msisdn(&msisdn, res, res_len);
-                                       if (dr == TRUE) {
-                                               memcpy(&file_meta->files.data.msisdn_list.msisdn[file_meta->files.data.msisdn_list.count], &msisdn, sizeof(struct tel_sim_msisdn));
-                                               file_meta->files.data.msisdn_list.count++;
-                                       }
-                                       break;
-
-                               case SIM_EF_OPL:
-                                       dbg("decode w/ index [%d]",file_meta->current_index);
-                                       memset(&opl, 0x00, sizeof(struct tel_sim_opl));
-                                       dr = tcore_sim_decode_opl(&opl, res, res_len);
-                                       if (dr == TRUE) {
-                                               memcpy(&file_meta->files.data.opl.opl[file_meta->files.data.opl.opl_count], &opl, sizeof(struct tel_sim_opl));
-                                               file_meta->files.data.opl.opl_count++;
-                                       }
-                                       break;
-
-                               case SIM_EF_PNN:
-                                       dbg("decode w/ index [%d]",file_meta->current_index);
-                                       memset(&pnn, 0x00, sizeof(struct tel_sim_pnn));
-                                       dr = tcore_sim_decode_pnn(&pnn, res, res_len);
-                                       if (dr == TRUE) {
-                                               memcpy(&file_meta->files.data.pnn.pnn[file_meta->files.data.pnn.pnn_count], &opl, sizeof(struct tel_sim_pnn));
-                                               file_meta->files.data.pnn.pnn_count++;
-                                       }
-                                       break;
-
-                               case SIM_EF_OPLMN_ACT:
-                                       dr = tcore_sim_decode_oplmnwact(&file_meta->files.data.opwa, res, res_len);
-                                       break;
-
-                               case SIM_EF_CPHS_CALL_FORWARD_FLAGS:
-                                       dr = tcore_sim_decode_cff(&file_meta->files.data.cf, res, res_len);
-                                       break;
-
-                               case SIM_EF_CPHS_CUSTOMER_SERVICE_PROFILE:
-/*                                     dr = tcore_sim_decode_csp(&po->p_cphs->csp, res, res_len);*/
-                                       break;
-
-                               case SIM_EF_CPHS_VOICE_MSG_WAITING:
-                                       dr = tcore_sim_decode_vmwf(&file_meta->files.data.mw.mw_data_u.cphs_mw, res, res_len);
-                                       break;
-
-                               case SIM_EF_CPHS_MAILBOX_NUMBERS:
-/*                                     dbg("[CPHS]decoding SIM_EF_CPHS_MAILBOX_NUMBERS");
-                                       if (file_meta->current_index == 1)
-                                               dr = tcore_sim_decode_xdn(&po->mb_u.mbn.voice_line1, res, res_len);
-                                       else if (file_meta->current_index == 2)
-                                               dr = tcore_sim_decode_xdn(&po->mb_u.mbn.voice_line2, res, res_len);
-                                       else if (file_meta->current_index == 3)
-                                               dr = tcore_sim_decode_xdn(&po->mb_u.mbn.video, res, res_len);
-                                       else if (file_meta->current_index == 4)
-                                               dr = tcore_sim_decode_xdn(&po->mb_u.mbn.fax, res, res_len);
-                                       else {
-                                               dbg("[CPHS]wrong EF record index[%d] in here", file_meta->current_index);
-                                       }*/
-                                       break;
-
-                               case SIM_EF_USIM_MWIS:
-                                       dr = tcore_sim_decode_mwis(&file_meta->files.data.mw.mw_data_u.mw, res, res_len);
-                                       break;
-
-                               case SIM_EF_USIM_CFIS:
-                                       dr = tcore_sim_decode_cfis(&file_meta->files.data.cf, res, res_len);
-                                       break;
-
-                               case SIM_EF_CPHS_SERVICE_STRING_TABLE:
-                                       dbg(" not handled -SIM_EF_CPHS_SERVICE_STRING_TABLE ");
-                                       break;
-
-                               case SIM_EF_CPHS_OPERATOR_NAME_STRING:
-                                       dr = tcore_sim_decode_ons((unsigned char*)&file_meta->files.data.cphs_net.full_name, res, res_len);
-                                       dbg(" file_meta->files.result[%d],file_meta->files.data.cphs_net.full_name[%s]", file_meta->files.result, file_meta->files.data.cphs_net.full_name);
-                                       break;
-
-                               case SIM_EF_CPHS_DYNAMICFLAGS:
-/*                                     dr = tcore_sim_decode_dynamic_flag(&po->p_cphs->dflagsinfo, res, res_len);*/
-                                       break;
-
-                               case SIM_EF_CPHS_DYNAMIC2FLAG:
-/*                                     dr = tcore_sim_decode_dynamic2_flag(&po->p_cphs->d2flagsinfo, res,      res_len);*/
-                                       break;
-
-                               case SIM_EF_CPHS_CPHS_INFO:
-                                       dr = tcore_sim_decode_cphs_info(&file_meta->files.data.cphs, res, res_len);
-                                       break;
-
-                               case SIM_EF_CPHS_OPERATOR_NAME_SHORT_FORM_STRING:
-                                       dr = tcore_sim_decode_short_ons((unsigned char*)&file_meta->files.data.cphs_net.short_name, res, res_len);
-                                       break;
-
-                               case SIM_EF_CPHS_INFORMATION_NUMBERS:
-/*                                     dr = tcore_sim_decode_information_number(&po->p_cphs->infn, res, res_len);*/
-                                       break;
-
-                               default:
-                                       dbg("File Decoding Failed - not handled File[0x%x]", file_meta->file_id);
-                                       dr = 0;
-                                       break;
-                       }
-               }
-               else{
-                       rt =  _decode_status_word(sw1, sw2);
-                       file_meta->files.result = rt;
-               }
-               free(tmp);
-               tcore_at_tok_free(tokens);
-       }
-       else{
-               dbg("RESPONSE NOK");
-               dbg("error to get ef[0x%x]", file_meta->file_id);
-               rt = SIM_ACCESS_FAILED;
-       }
-
-               ur = tcore_user_request_ref(ur);
-       dbg("Calling _next_from_get_file_data");
-       _next_from_get_file_data(tcore_pending_ref_core_object(p), ur, rt, dr);
-       dbg(" Function exit");
-}
-
-static void _response_get_retry_count(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse *resp = data;
-       UserRequest *ur = NULL;
-       CoreObject *co_sim = NULL;
-       struct s_sim_property *sp = NULL;
-       GSList *tokens=NULL;
-       const char *line;
-       struct tresp_sim_verify_pins v_pin = {0,};
-       struct tresp_sim_verify_puks v_puk = {0,};
-       struct tresp_sim_change_pins change_pin = {0,};
-       struct tresp_sim_disable_facility dis_facility = {0,};
-       struct tresp_sim_enable_facility en_facility = {0,};
-       int lock_type;
-       int attempts_left = 0;
-       int time_penalty = 0;
-
-       dbg(" Function entry ");
-
-       co_sim = tcore_pending_ref_core_object(p);
-       sp = tcore_sim_ref_userdata(co_sim);
-       ur = tcore_pending_ref_user_request(p);
-
-       if(resp->success > 0)
-       {
-               if(resp->lines) {
-                       line = (const char*)resp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       if (g_slist_length(tokens) != 3) {
-                               msg("invalid message");
-                               tcore_at_tok_free(tokens);
-                               return;
-                       }
-               }
-               lock_type = atoi(g_slist_nth_data(tokens, 0));
-               attempts_left = atoi(g_slist_nth_data(tokens, 1));
-               time_penalty = atoi(g_slist_nth_data(tokens, 2));
-
-               switch (sp->current_sec_op) {
-                       case SEC_PIN1_VERIFY:
-                       case SEC_PIN2_VERIFY:
-                       case SEC_SIM_VERIFY:
-                       case SEC_ADM_VERIFY:
-                               v_pin.result = SIM_INCORRECT_PASSWORD;
-                               v_pin.pin_type = _sim_get_current_pin_facility(sp->current_sec_op);
-                               v_pin.retry_count = attempts_left;
-                               tcore_user_request_send_response(ur, _find_resp_command(ur),
-                                               sizeof(struct tresp_sim_verify_pins), &v_pin);
-                               break;
-
-                       case SEC_PUK1_VERIFY:
-                       case SEC_PUK2_VERIFY:
-                               v_puk.result = SIM_INCORRECT_PASSWORD;
-                               v_puk.pin_type = _sim_get_current_pin_facility(sp->current_sec_op);
-                               v_puk.retry_count = attempts_left;
-                               tcore_user_request_send_response(ur, _find_resp_command(ur),
-                                               sizeof(struct tresp_sim_verify_puks), &v_puk);
-                               break;
-
-                       case SEC_PIN1_CHANGE:
-                       case SEC_PIN2_CHANGE:
-                               change_pin.result = SIM_INCORRECT_PASSWORD;
-                               change_pin.pin_type = _sim_get_current_pin_facility(sp->current_sec_op);
-                               change_pin.retry_count = attempts_left;
-                               tcore_user_request_send_response(ur, _find_resp_command(ur),
-                                               sizeof(struct tresp_sim_change_pins), &change_pin);
-                               break;
-
-                       case SEC_PIN1_DISABLE:
-                       case SEC_PIN2_DISABLE:
-                       case SEC_FDN_DISABLE:
-                       case SEC_SIM_DISABLE:
-                       case SEC_NET_DISABLE:
-                       case SEC_NS_DISABLE:
-                       case SEC_SP_DISABLE:
-                       case SEC_CP_DISABLE:
-                               dis_facility.result = SIM_INCORRECT_PASSWORD;
-                               dis_facility.type = _sim_get_current_pin_facility(sp->current_sec_op);
-                               dis_facility.retry_count = attempts_left;
-                               tcore_user_request_send_response(ur, _find_resp_command(ur),
-                                               sizeof(struct tresp_sim_disable_facility), &dis_facility);
-                               break;
-
-                       case SEC_PIN1_ENABLE:
-                       case SEC_PIN2_ENABLE:
-                       case SEC_FDN_ENABLE:
-                       case SEC_SIM_ENABLE:
-                       case SEC_NET_ENABLE:
-                       case SEC_NS_ENABLE:
-                       case SEC_SP_ENABLE:
-                       case SEC_CP_ENABLE:
-                               en_facility.result = SIM_INCORRECT_PASSWORD;
-                               en_facility.type = _sim_get_current_pin_facility(sp->current_sec_op);
-                               en_facility.retry_count = attempts_left;
-                               tcore_user_request_send_response(ur, _find_resp_command(ur),
-                                               sizeof(struct tresp_sim_enable_facility), &en_facility);
-                               break;
-
-                       default:
-                               dbg("not handled sec op[%d]", sp->current_sec_op);
-                               break;
-               }
-               tcore_at_tok_free(tokens);
-       }
-       dbg(" Function exit");
-}
-
-static gboolean _get_sim_type(CoreObject *o)
-{
-       TcoreHal* hal;
-       TcoreATRequest *req;
-       TcorePending *pending = NULL;
-       UserRequest *ur = NULL;
-       char *cmd_str = NULL;
-
-       dbg(" Function entry ");        
-       
-       hal = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-       
-       cmd_str = g_strdup_printf("AT+XUICC?%s", "\r");
-
-       req = tcore_at_request_new(cmd_str, "+XUICC:", TCORE_AT_SINGLELINE);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, _response_get_sim_type, hal);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);
-
-       tcore_hal_send_request(hal, pending);
-
-       free(cmd_str);
-       dbg(" Function exit");
-       return TRUE;
-}
-
-static TReturn _get_file_info(CoreObject *o, UserRequest *ur, const enum tel_sim_file_id ef)
-{
-       TcoreHal* hal;
-       //TcoreATRequest *req = NULL;
-       TcorePending *pending = NULL;
-       struct s_sim_property file_meta={0,};
-       char *cmd_str = NULL;
-       int trt = 0;
-
-       dbg(" Function entry ");        
-       
-       //file_meta = (struct s_sim_property*)tcore_user_request_ref_metainfo(ur, NULL);
-       //dbg("file_meta: %x", file_meta);
-       file_meta.file_id = ef;
-       dbg("file_meta.file_id: %d", file_meta.file_id);
-       hal = tcore_object_get_hal(o);
-       dbg("hal: %x", hal);
-       pending = tcore_pending_new(o, 0);
-       
-       trt = tcore_user_request_set_metainfo(ur, sizeof(struct s_sim_property), &file_meta);
-       dbg("trt[%d]",trt);
-       cmd_str = g_strdup_printf("AT+CRSM=192, %d%s", ef, "\r");                       /*command - 192 : GET RESPONSE*/
-       dbg("cmd_str: %x", cmd_str);
-
-       //dbg("cmd : %s, prefix(if any) :%s, cmd_len : 0x%x", req->cmd, req->prefix, strlen(req->cmd));
-       pending = tcore_at_pending_new(o, cmd_str, "+CRSM:", TCORE_AT_SINGLELINE, _response_get_file_info, NULL);
-
-       tcore_pending_link_user_request(pending, ur);
-       tcore_hal_send_request(hal, pending);
-
-       free(cmd_str);
-       dbg(" Function exit");
-       return TCORE_RETURN_SUCCESS;
-}
-
-static gboolean _get_file_data(CoreObject *o, UserRequest *ur, const enum tel_sim_file_id ef, const int offset, const int length)
-{
-       TcoreHal* hal;
-       TcoreATRequest *req;
-       TcorePending *pending = NULL;
-       char *cmd_str = NULL;
-       //struct s_sim_property *sp = NULL;
-       int p1 = 0;
-       int p2 = 0;
-       int p3 = 0;
-       
-       dbg(" Function entry ");        
-       hal = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-       //sp = tcore_sim_ref_userdata(o);
-       
-       //dbg("sp: %x", sp);
-       //sp->file_id = ef;
-       dbg("file_id: %x", ef);
-
-       p1 = (unsigned char)(offset & 0xFF00) >> 8;
-       p2 = (unsigned char)offset & 0x00FF; //offset low
-       p3 = (unsigned char)length;
-       
-       cmd_str = g_strdup_printf("AT+CRSM=176, %d, %d, %d, %d%s", ef,p1,p2,p3,"\r");                   /*command - 176 : READ BINARY*/
-
-       req = tcore_at_request_new(cmd_str, "+CRSM:", TCORE_AT_SINGLELINE);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, _response_get_file_data, hal);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);
-
-       tcore_hal_send_request(hal, pending);
-
-       free(cmd_str);
-       dbg(" Function exit");
-       return TRUE;
-}
-
-static gboolean _get_file_record(CoreObject *o, UserRequest *ur, const enum tel_sim_file_id ef, const int index, const int length)
-{
-
-       TcoreHal* hal;
-       TcoreATRequest *req;
-       TcorePending *pending = NULL;
-       char *cmd_str = NULL;
-       int p1 = 0;
-       int p2 = 0;
-       int p3 = 0;
-
-       dbg(" Function entry ");        
-       
-       hal = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-
-       p1 = (unsigned char)index;
-       p2 = (unsigned char)0x04;               /* 0x4 for absolute mode  */
-       p3 = (unsigned char)length;
-       
-       cmd_str = g_strdup_printf("AT+CRSM=178, %d, %d, %d, %d%s", ef,p1,p2,p3,"\r");                   /*command - 178 : READ RECORD*/
-
-       req = tcore_at_request_new(cmd_str, "+CRSM:", TCORE_AT_SINGLELINE);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, _response_get_file_data, hal);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);
-
-       tcore_hal_send_request(hal, pending);
-
-       free(cmd_str);
-       dbg(" Function exit");
-       return TRUE;
-}
-
-static TReturn _get_retry_count(CoreObject *o, UserRequest *ur)                /*ToDo*/
-{
-       TcoreHal* hal;
-       TcoreATRequest *req;
-       TcorePending *pending = NULL;
-       char *cmd_str = NULL;
-       const struct treq_sim_get_lock_info *req_data;
-       struct s_sim_property *sp = NULL;
-       char *fac = NULL;
-
-       dbg(" Function entry ");        
-       
-       hal = tcore_object_get_hal(o);
-       sp = tcore_sim_ref_userdata(o);
-       pending = tcore_pending_new(o, 0);
-       req_data = tcore_user_request_ref_data(ur, NULL);
-
-       switch (sp->current_sec_op) {
-               case SEC_PIN1_VERIFY:
-               case SEC_PUK1_VERIFY:
-               case SEC_PIN1_CHANGE:
-               case SEC_PIN1_ENABLE:
-               case SEC_PIN1_DISABLE:
-                       fac = "SC";
-                       break;
-               case SEC_PIN2_VERIFY:
-               case SEC_PUK2_VERIFY:
-               case SEC_PIN2_CHANGE:
-               case SEC_PIN2_ENABLE:
-               case SEC_PIN2_DISABLE:
-               case SEC_FDN_ENABLE:
-               case SEC_FDN_DISABLE:
-                       fac = "FD";
-                       break;
-               case SEC_SIM_VERIFY:
-               case SEC_SIM_ENABLE:
-               case SEC_SIM_DISABLE:
-                       fac = "PS";
-                       break;
-               case SEC_ADM_VERIFY:
-                       fac = "PF";
-                       break;
-               case SEC_NET_ENABLE:
-               case SEC_NET_DISABLE:
-                       fac = "PN";
-                       break;
-               case SEC_NS_ENABLE:
-               case SEC_NS_DISABLE:
-                       fac = "PU";
-                       break;
-               case SEC_SP_ENABLE:
-               case SEC_SP_DISABLE:
-                       fac = "PP";
-                       break;
-               case SEC_CP_ENABLE:
-               case SEC_CP_DISABLE:
-                       fac = "PC";
-                       break;
-               default:
-                       break;
-       }
-
-       cmd_str = g_strdup_printf("AT+XPINCNT=\"%s\"%s",fac,"\r");
-
-       req = tcore_at_request_new(cmd_str, "+XPINCNT:", TCORE_AT_SINGLELINE);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, _response_get_retry_count, hal);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);
-
-       tcore_hal_send_request(hal, pending);
-
-       free(cmd_str);
-       dbg(" Function exit");
-       return TCORE_RETURN_SUCCESS;
-}
-
-
-static gboolean on_event_pin_status(CoreObject *o, const void *event_info, void *user_data)
-{
-       UserRequest *ur = NULL;
-       struct s_sim_property *sp = NULL;
-       enum tel_sim_status sim_status = SIM_STATUS_INITIALIZING;
-       GSList *tokens=NULL;
-       GSList *lines = NULL;
-       const char *line = NULL;
-       int sim_state = 0;
-
-       dbg(" Function entry ");        
-       
-       sp = tcore_sim_ref_userdata(o);
-
-       lines = (GSList*)event_info;
-       if (1 != g_slist_length(lines)) {
-               dbg("unsolicited msg but multiple line");
-               goto OUT;
-       }
-       line  = (char*)(lines->data);
-
-       tokens = tcore_at_tok_new(line);
-       if (g_slist_length(tokens) != 1) {
-               msg("invalid message");
-               tcore_at_tok_free(tokens);
-               return TRUE;
-       }
-       sim_state = atoi(g_slist_nth_data(tokens, 0));
-
-       switch (sim_state) {
-               case 0:                                                                                                         //sim state = SIM not present
-                       sim_status = SIM_STATUS_CARD_NOT_PRESENT;
-                       dbg("NO SIM");
-                       break;
-               case 1:                                                                                                         //sim state = PIN verification needed
-                       sim_status = SIM_STATUS_PIN_REQUIRED;
-                       dbg(" PIN required");
-                       break;
-               case 2:                                                                                                         //sim state = PIN verification not needed \96 Ready
-               case 3:                                                                                                         //sim state = PIN verified \96 Ready
-                       sim_status = SIM_STATUS_INITIALIZING;
-                       dbg(" Inside PIN disabled at BOOT UP");
-                       break;
-               case 4:                                                                                                         //sim state = PUK verification needed
-                       sim_status = SIM_STATUS_PUK_REQUIRED;
-                       dbg(" PUK required");
-                       break;
-               case 5:                                                                                                         //sim state = SIM permanently blocked
-                       sim_status = SIM_STATUS_CARD_BLOCKED;
-                       dbg(" Card permanently blocked");
-                       break;
-               case 6:                                                                                                         //sim state = SIM error
-                       sim_status = SIM_STATUS_CARD_ERROR;
-                       dbg("SIM card error ");
-                       break;          
-               case 7:                                                                                                         //sim state = ready for attach (+COPS)
-                       sim_status = SIM_STATUS_INIT_COMPLETED;
-                       dbg("Modem init completed");
-                       break;
-               case 8:                                                                                                         //sim state = SIM Technical Problem
-                       sim_status = SIM_STATUS_CARD_ERROR;
-                       dbg("SIM unavailable");
-                       break;
-               case 9:                                                                                                         //sim state = SIM removed
-                       sim_status = SIM_STATUS_CARD_REMOVED;
-                       dbg("SIM removed");
-                       break;
-               case 99:                                                                                                                //sim state = SIM State Unknown
-                       sim_status = SIM_STATUS_UNKNOWN;
-                       dbg("SIM State Unknown");
-                       break;
-               case 12:
-                       dbg("SIM Status : %d", sim_status);
-                       /*if (sim_status != SIM_STATUS_INIT_COMPLETED)
-                               sim_status = SIM_STATUS_INIT_COMPLETED;
-                       else*/
-                       goto OUT;
-               default:
-                       dbg(" not handled SEC lock type ");
-                       break;
-       }
-
-       switch (sim_status) {
-               case SIM_STATUS_INIT_COMPLETED:
-                       ur = tcore_user_request_new(NULL, NULL); //this is for using ur metainfo set/ref functionality.
-                       _get_file_info(o, ur, SIM_EF_IMSI);
-                       break;
-
-               case SIM_STATUS_INITIALIZING:
-               case SIM_STATUS_PIN_REQUIRED:
-               case SIM_STATUS_PUK_REQUIRED:
-               case SIM_STATUS_CARD_BLOCKED:
-               case SIM_STATUS_NCK_REQUIRED:
-               case SIM_STATUS_NSCK_REQUIRED:
-               case SIM_STATUS_SPCK_REQUIRED:
-               case SIM_STATUS_CCK_REQUIRED:
-               case SIM_STATUS_LOCK_REQUIRED:
-                       if(sp->first_recv_status == SIM_STATUS_UNKNOWN) {
-                               dbg("first received sim status[%d]",sim_status);
-                               sp->first_recv_status = sim_status;
-                               _get_sim_type(o);
-                       } else {
-                               dbg("second or later received lock status[%d]",sim_status);
-                               if (tcore_sim_get_status(o) != SIM_STATUS_INIT_COMPLETED) {
-                                       dbg("sim is not init complete in telephony side yet");
-                                       _sim_status_update(o,sim_status);
-                               }
-                       }
-                       break;
-
-               case SIM_STATUS_CARD_REMOVED:
-               case SIM_STATUS_CARD_NOT_PRESENT:
-               case SIM_STATUS_CARD_ERROR:
-                       if (sim_status == SIM_STATUS_CARD_NOT_PRESENT && tcore_sim_get_status(o) != SIM_STATUS_UNKNOWN) {
-                               dbg("[SIM]SIM CARD REMOVED!!");
-                               sim_status = SIM_STATUS_CARD_REMOVED;
-                       }
-                       _sim_status_update(o,sim_status);
-                       break;
-
-               default:
-                       dbg("not handled status[%d]", sim_status);
-                       
-                       break;
-               }       
-OUT:
-       dbg(" Function exit");
-       if(NULL!=tokens)
-               tcore_at_tok_free(tokens);
-       return TRUE;
-}
-
-static gboolean on_event_facility_lock_status(CoreObject *o, const void *event_info, void *user_data)
-{
-       const TcoreATResponse *resp = event_info;
-       UserRequest *ur = NULL;
-       struct s_sim_property *sp = NULL;
-       enum tel_sim_status sim_status = SIM_STATUS_INITIALIZING;
-       GSList *tokens=NULL;
-       GSList *lines = NULL;
-       const char *line;
-       char *fac;
-       int lock_state = 0;
-       int lock_result = 0;
-
-       sp = tcore_sim_ref_userdata(o);
-
-       dbg(" Function entry ");
-#if 1
-return TRUE;
-#endif
-       lines = (GSList*)event_info;
-       if (1 != g_slist_length(lines)) {
-               dbg("unsolicited msg but multiple line");
-               goto OUT;
-       }
-       
-       line  = (char*)(lines->data);
-       tokens = tcore_at_tok_new(line);
-       
-       if(resp->success > 0)
-       {
-               dbg("RESPONSE OK");
-               if(resp->lines) {
-                       line = (const char*)resp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       if (g_slist_length(tokens) != 3) {
-                               dbg("invalid message");
-                               tcore_at_tok_free(tokens);
-                               return FALSE;
-                       }
-               }
-               fac = g_slist_nth_data(tokens, 0);
-               lock_state = atoi(g_slist_nth_data(tokens, 1));
-               lock_result = atoi(g_slist_nth_data(tokens, 2));
-
-               if(strcmp(fac, "PS")){
-                       dbg(" SIM LOCK required");
-                       sim_status = SIM_STATUS_LOCK_REQUIRED;
-               }else if(strcmp(fac, "PN")){
-                       if(lock_result == 1){                                           //lock_result = "verfication needed"
-                               dbg(" ADMIN-NCK required");
-                               sim_status = SIM_STATUS_NCK_REQUIRED;
-                       }
-               }else if(strcmp(fac, "PU")){
-                       if(lock_result == 1){                                           //lock_result = "verfication needed"
-                               dbg(" ADMIN-NSCK required");
-                               sim_status = SIM_STATUS_NSCK_REQUIRED;
-                       }
-               }else if(strcmp(fac, "PP")){
-                       if(lock_result == 1){                                           //lock_result = "verfication needed"
-                               dbg(" ADMIN-SPCK required");
-                               sim_status = SIM_STATUS_SPCK_REQUIRED;
-                       }
-               }else if(strcmp(fac, "PC")){
-                       if(lock_result == 1){                                           //lock_result = "verfication needed"
-                               dbg(" ADMIN-CCK required");
-                               sim_status = SIM_STATUS_CCK_REQUIRED;
-                       }
-               }else{
-                       sim_status = SIM_STATUS_CARD_ERROR;
-               }
-
-               switch (sim_status) {
-                       case SIM_STATUS_INIT_COMPLETED:
-                               ur = tcore_user_request_new(NULL, NULL); //this is for using ur metainfo set/ref functionality.
-                               _get_file_info(o, ur, SIM_EF_IMSI);
-                               break;
-
-                       case SIM_STATUS_INITIALIZING:
-                       case SIM_STATUS_PIN_REQUIRED:
-                       case SIM_STATUS_PUK_REQUIRED:
-                       case SIM_STATUS_CARD_BLOCKED:
-                       case SIM_STATUS_NCK_REQUIRED:
-                       case SIM_STATUS_NSCK_REQUIRED:
-                       case SIM_STATUS_SPCK_REQUIRED:
-                       case SIM_STATUS_CCK_REQUIRED:
-                       case SIM_STATUS_LOCK_REQUIRED:
-                               if(sp->first_recv_status == SIM_STATUS_UNKNOWN) {
-                                       dbg("first received sim status[%d]",sim_status);
-                                       sp->first_recv_status = sim_status;
-                                       _get_sim_type(o);
-                               } else {
-                                       dbg("second or later received lock status[%d]",sim_status);
-                                       if (tcore_sim_get_status(o) != SIM_STATUS_INIT_COMPLETED) {
-                                               dbg("sim is not init complete in telephony side yet");
-                                               _sim_status_update(o,sim_status);
-                                       }
-                               }
-                               break;
-
-                       case SIM_STATUS_CARD_REMOVED:
-                       case SIM_STATUS_CARD_NOT_PRESENT:
-                       case SIM_STATUS_CARD_ERROR:
-                               if (sim_status == SIM_STATUS_CARD_NOT_PRESENT && tcore_sim_get_status(o) != SIM_STATUS_UNKNOWN) {
-                                       dbg("[SIM]SIM CARD REMOVED!!");
-                                       sim_status = SIM_STATUS_CARD_REMOVED;
-                               }
-                               _sim_status_update(o,sim_status);
-                               break;
-
-                       default:
-                               dbg("not handled status[%d]", sim_status);
-                               
-                               break;
-               }       
-       }
-       dbg(" Function exit");
-
-OUT:
-       if(NULL!=tokens)
-               tcore_at_tok_free(tokens);
-       return TRUE;
-}
-
-static void on_response_verify_pins(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse *resp = data;
-       UserRequest *ur = NULL;
-       CoreObject *co_sim = NULL;
-       struct s_sim_property *sp = NULL;
-       GSList *tokens=NULL;
-       struct tresp_sim_verify_pins res;
-       GQueue *queue;
-       const char *line;
-       int err;
-
-       dbg(" Function entry ");        
-       
-       co_sim = tcore_pending_ref_core_object(p);
-       sp = tcore_sim_ref_userdata(co_sim);
-       ur = tcore_pending_ref_user_request(p);
-       
-       memset(&res, 0, sizeof(struct tresp_sim_verify_pins));
-
-       if(resp->success > 0)
-       {
-               dbg("RESPONSE OK");
-               res.result = SIM_PIN_OPERATION_SUCCESS;
-               res.pin_type = _sim_get_current_pin_facility(sp->current_sec_op);
-               
-               if (res.pin_type == SIM_PTYPE_PIN1 || res.pin_type == SIM_PTYPE_SIM) 
-               {
-                       if (tcore_sim_get_status(co_sim) != SIM_STATUS_INIT_COMPLETED)
-                               _sim_status_update(co_sim, SIM_STATUS_INITIALIZING);
-               }
-               tcore_user_request_send_response(ur, TRESP_SIM_VERIFY_PINS,     sizeof(struct tresp_sim_verify_pins), &res);
-       }
-       else
-       {
-               dbg("RESPONSE NOK");
-               line = (const char*)resp->final_response;
-               tokens = tcore_at_tok_new(line);
-
-               if (g_slist_length(tokens) < 1) {
-                       dbg("err cause not specified or string corrupted");
-                   res.result = TCORE_RETURN_3GPP_ERROR;
-               }
-               else
-               {
-                       err = atoi(g_slist_nth_data(tokens, 0));
-                       dbg("on_response_verify_pins: err = %d", err);
-                       queue = tcore_object_ref_user_data(co_sim);
-
-                       ur = tcore_user_request_ref(ur);
-
-                       _get_retry_count(co_sim, ur);
-               }       
-               tcore_at_tok_free(tokens);
-       }
-       dbg(" Function exit");
-}
-
-static void on_response_verify_puks(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse *resp = data;
-       UserRequest *ur = NULL;
-       CoreObject *co_sim = NULL;
-       struct s_sim_property *sp = NULL;
-       GSList *tokens=NULL;
-       struct tresp_sim_verify_puks res;
-       GQueue *queue;
-       const char *line;
-       int err;
-
-       dbg(" Function entry ");        
-       
-       co_sim = tcore_pending_ref_core_object(p);
-       sp = tcore_sim_ref_userdata(co_sim);
-       ur = tcore_pending_ref_user_request(p);
-
-       memset(&res, 0, sizeof(struct tresp_sim_verify_pins));
-
-       if(resp->success > 0)
-       {
-               dbg("RESPONSE OK");
-               res.result = SIM_PIN_OPERATION_SUCCESS;
-               res.pin_type = _sim_get_current_pin_facility(sp->current_sec_op);
-               tcore_user_request_send_response(ur, TRESP_SIM_VERIFY_PUKS,     sizeof(struct tresp_sim_verify_pins), &res);
-       }
-       else
-       {
-               dbg("RESPONSE NOK");
-               line = (const char*)resp->final_response;
-               tokens = tcore_at_tok_new(line);
-
-               if (g_slist_length(tokens) < 1) {
-                       dbg("err cause not specified or string corrupted");
-                   res.result = TCORE_RETURN_3GPP_ERROR;
-               }
-               else
-               {
-                       err = atoi(g_slist_nth_data(tokens, 0));
-       
-                       queue = tcore_object_ref_user_data(co_sim);
-                       
-                       ur = tcore_user_request_ref(ur);
-                       
-                       _get_retry_count(co_sim, ur);
-               }       
-               tcore_at_tok_free(tokens);
-       }
-       dbg(" Function exit");
-}
-
-static void on_response_change_pins(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse *resp = data;
-       UserRequest *ur = NULL;
-       CoreObject *co_sim = NULL;
-       struct s_sim_property *sp = NULL;
-       GSList *tokens=NULL;
-       struct tresp_sim_change_pins res;
-       GQueue *queue;
-       const char *line;
-       int err;
-
-       dbg(" Function entry ");        
-       
-       co_sim = tcore_pending_ref_core_object(p);
-       sp = tcore_sim_ref_userdata(co_sim);
-       ur = tcore_pending_ref_user_request(p);
-
-       memset(&res, 0, sizeof(struct tresp_sim_change_pins));
-
-       if(resp->success > 0)
-       {
-               dbg("RESPONSE OK");
-               res.result = SIM_PIN_OPERATION_SUCCESS;
-               res.pin_type = _sim_get_current_pin_facility(sp->current_sec_op);
-               tcore_user_request_send_response(ur, TRESP_SIM_CHANGE_PINS,sizeof(struct tresp_sim_change_pins), &res);
-       }
-       else
-       {
-               dbg("RESPONSE NOK");
-               line = (const char*)resp->final_response;
-               tokens = tcore_at_tok_new(line);
-
-               if (g_slist_length(tokens) < 1) {
-                       dbg("err cause not specified or string corrupted");
-                   res.result = TCORE_RETURN_3GPP_ERROR;
-               }
-               else
-               {
-                       err = atoi(g_slist_nth_data(tokens, 0));
-       
-                       queue = tcore_object_ref_user_data(co_sim);
-                       
-                       ur = tcore_user_request_ref(ur);
-                       
-                       _get_retry_count(co_sim, ur);
-               }       
-               tcore_at_tok_free(tokens);
-       }
-       dbg(" Function exit");
-}
-
-static void on_response_get_facility_status(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse *resp = data;
-       UserRequest *ur = NULL;
-       CoreObject *co_sim = NULL;
-       struct s_sim_property *sp = NULL;
-       GSList *tokens=NULL;
-       struct tresp_sim_get_facility_status res;
-       const char *line;
-
-       dbg(" Function entry ");        
-       
-       co_sim = tcore_pending_ref_core_object(p);
-       sp = tcore_sim_ref_userdata(co_sim);
-       ur = tcore_pending_ref_user_request(p);
-
-       memset(&res, 0, sizeof(struct tresp_sim_change_pins));
-
-       res.result = SIM_PIN_OPERATION_SUCCESS;
-       res.type = _sim_get_current_pin_facility(sp->current_sec_op);
-
-       if(resp->success > 0)
-       {
-               dbg("RESPONSE OK");
-               if(resp->lines) {
-                       line = (const char*)resp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       if (g_slist_length(tokens) != 1) {
-                               msg("invalid message");
-                               tcore_at_tok_free(tokens);
-                               return;
-                       }
-               }
-               res.b_enable = atoi(g_slist_nth_data(tokens, 0));
-       
-       }
-       else
-       {
-               dbg("RESPONSE NOK");
-               res.result = SIM_INCOMPATIBLE_PIN_OPERATION;    
-       }
-
-       if (ur) {
-               tcore_user_request_send_response(ur, TRESP_SIM_GET_FACILITY_STATUS,
-                               sizeof(struct tresp_sim_get_facility_status), &res);    
-       }
-       tcore_at_tok_free(tokens);
-       dbg(" Function exit");
-}
-
-static void on_response_enable_facility(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse *resp = data;
-       UserRequest *ur = NULL;
-       CoreObject *co_sim = NULL;
-       struct s_sim_property *sp = NULL;
-       GSList *tokens=NULL;
-       struct tresp_sim_enable_facility res;
-       GQueue *queue;
-       const char *line;
-
-       dbg(" Function entry ");        
-       
-       co_sim = tcore_pending_ref_core_object(p);
-       sp = tcore_sim_ref_userdata(co_sim);
-       ur = tcore_pending_ref_user_request(p);
-
-       memset(&res, 0, sizeof(struct tresp_sim_enable_facility));
-
-       res.result = SIM_PIN_OPERATION_SUCCESS;
-       res.type = _sim_get_current_pin_facility(sp->current_sec_op);
-
-       if(resp->success > 0)
-       {
-               dbg("RESPONSE OK");
-               if(resp->lines) {
-                       line = (const char*)resp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       if (g_slist_length(tokens) != 1) {
-                               msg("invalid message");
-                               tcore_at_tok_free(tokens);
-                               return;
-                       }
-               }
-               res.result = atoi(g_slist_nth_data(tokens, 0));
-       
-               if (ur) {
-               tcore_user_request_send_response(ur, TRESP_SIM_ENABLE_FACILITY,
-                               sizeof(struct tresp_sim_enable_facility), &res);
-               }
-               tcore_at_tok_free(tokens);
-       }
-       else
-       {
-               dbg("RESPONSE NOK");
-               queue = tcore_object_ref_user_data(co_sim);
-
-               ur = tcore_user_request_ref(ur);
-               
-               _get_retry_count(co_sim, ur);
-       }
-       dbg(" Function exit");
-}
-
-static void on_response_disable_facility(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse *resp = data;
-       UserRequest *ur = NULL;
-       CoreObject *co_sim = NULL;
-       struct s_sim_property *sp = NULL;
-       GSList *tokens=NULL;
-       struct tresp_sim_disable_facility res;
-       GQueue *queue;
-       const char *line;
-
-       dbg(" Function entry ");        
-       
-       co_sim = tcore_pending_ref_core_object(p);
-       sp = tcore_sim_ref_userdata(co_sim);
-       ur = tcore_pending_ref_user_request(p);
-
-       memset(&res, 0, sizeof(struct tresp_sim_disable_facility));
-
-       res.result = SIM_PIN_OPERATION_SUCCESS;
-       res.type = _sim_get_current_pin_facility(sp->current_sec_op);
-
-       if(resp->success > 0)
-       {
-               dbg("RESPONSE OK");
-               if(resp->lines) {
-                       line = (const char*)resp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       if (g_slist_length(tokens) != 1) {
-                               msg("invalid message");
-                               tcore_at_tok_free(tokens);
-                               return;
-                       }
-               }
-               res.result = atoi(g_slist_nth_data(tokens, 0));
-
-               if (ur) {
-               tcore_user_request_send_response(ur, TRESP_SIM_DISABLE_FACILITY,
-                               sizeof(struct tresp_sim_disable_facility), &res);
-               }
-               tcore_at_tok_free(tokens);
-       }
-       else
-       {
-               dbg("RESPONSE NOK");
-               queue = tcore_object_ref_user_data(co_sim);
-               
-               ur = tcore_user_request_ref(ur);
-               
-               _get_retry_count(co_sim, ur);
-       }
-       dbg(" Function exit");
-}
-
-static void on_response_get_lock_info(TcorePending *   p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse *resp = data;
-       UserRequest *ur = NULL;
-       CoreObject *co_sim = NULL;
-       struct s_sim_property *sp = NULL;
-       GSList *tokens=NULL;
-       const char *line;
-       struct tresp_sim_verify_pins v_pin = {0,};
-       struct tresp_sim_verify_puks v_puk = {0,};
-       struct tresp_sim_change_pins change_pin = {0,};
-       struct tresp_sim_disable_facility dis_facility = {0,};
-       struct tresp_sim_enable_facility en_facility = {0,};
-       int lock_type;
-       int attempts_left = 0;
-       int time_penalty = 0;
-
-       dbg(" Function entry ");        
-       
-       co_sim = tcore_pending_ref_core_object(p);
-       sp = tcore_sim_ref_userdata(co_sim);
-       ur = tcore_pending_ref_user_request(p);
-
-       if(resp->success > 0)
-       {
-               dbg("RESPONSE OK");
-               if(resp->lines) {
-                       line = (const char*)resp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       if (g_slist_length(tokens) != 3) {
-                               msg("invalid message");
-                               tcore_at_tok_free(tokens);
-                               return;
-                       }
-               }
-               lock_type = atoi(g_slist_nth_data(tokens, 0));
-               attempts_left = atoi(g_slist_nth_data(tokens, 1));
-               time_penalty = atoi(g_slist_nth_data(tokens, 2));
-               
-               switch (sp->current_sec_op) {
-                       case SEC_PIN1_VERIFY:
-                       case SEC_PIN2_VERIFY:
-                       case SEC_SIM_VERIFY:
-                       case SEC_ADM_VERIFY:
-                               v_pin.result = SIM_INCORRECT_PASSWORD;
-                               v_pin.pin_type = _sim_get_current_pin_facility(sp->current_sec_op);
-                               v_pin.retry_count = attempts_left;
-                               tcore_user_request_send_response(ur, _find_resp_command(ur),
-                                               sizeof(struct tresp_sim_verify_pins), &v_pin);
-                               break;
-
-                       case SEC_PUK1_VERIFY:
-                       case SEC_PUK2_VERIFY:
-                               v_puk.result = SIM_INCORRECT_PASSWORD;
-                               v_puk.pin_type = _sim_get_current_pin_facility(sp->current_sec_op);
-                               v_puk.retry_count = attempts_left;
-                               tcore_user_request_send_response(ur, _find_resp_command(ur),
-                                               sizeof(struct tresp_sim_verify_puks), &v_puk);
-                               break;
-
-                       case SEC_PIN1_CHANGE:
-                       case SEC_PIN2_CHANGE:
-                               change_pin.result = SIM_INCORRECT_PASSWORD;
-                               change_pin.pin_type = _sim_get_current_pin_facility(sp->current_sec_op);
-                               change_pin.retry_count = attempts_left;
-                               tcore_user_request_send_response(ur, _find_resp_command(ur),
-                                               sizeof(struct tresp_sim_change_pins), &change_pin);
-                               break;
-
-                       case SEC_PIN1_DISABLE:
-                       case SEC_PIN2_DISABLE:
-                       case SEC_FDN_DISABLE:
-                       case SEC_SIM_DISABLE:
-                       case SEC_NET_DISABLE:
-                       case SEC_NS_DISABLE:
-                       case SEC_SP_DISABLE:
-                       case SEC_CP_DISABLE:
-                               dis_facility.result = SIM_INCORRECT_PASSWORD;
-                               dis_facility.type = _sim_get_current_pin_facility(sp->current_sec_op);
-                               dis_facility.retry_count = attempts_left;
-                               tcore_user_request_send_response(ur, _find_resp_command(ur),
-                                               sizeof(struct tresp_sim_disable_facility), &dis_facility);
-                               break;
-
-                       case SEC_PIN1_ENABLE:
-                       case SEC_PIN2_ENABLE:
-                       case SEC_FDN_ENABLE:
-                       case SEC_SIM_ENABLE:
-                       case SEC_NET_ENABLE:
-                       case SEC_NS_ENABLE:
-                       case SEC_SP_ENABLE:
-                       case SEC_CP_ENABLE:
-                               en_facility.result = SIM_INCORRECT_PASSWORD;
-                               en_facility.type = _sim_get_current_pin_facility(sp->current_sec_op);
-                               en_facility.retry_count = attempts_left;
-                               tcore_user_request_send_response(ur, _find_resp_command(ur),
-                                               sizeof(struct tresp_sim_enable_facility), &en_facility);
-                               break;
-
-                       default:
-                               dbg("not handled sec op[%d]", sp->current_sec_op);
-                               break;
-               }       
-               tcore_at_tok_free(tokens);
-       }
-       dbg(" Function exit");
-}
-
-static void on_response_update_file(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse *resp = data;
-       UserRequest *ur = NULL;
-       CoreObject *co_sim = NULL;
-       struct tresp_sim_set_callforwarding resp_cf = {0, };
-       struct tresp_sim_set_language resp_language ={0,};
-       struct s_sim_property *sp = NULL;
-       GSList *tokens=NULL;
-       enum tel_sim_access_result result;
-       const char *line;
-       int sw1 = 0;
-       int sw2 = 0;
-
-       dbg(" Function entry ");        
-       
-       co_sim = tcore_pending_ref_core_object(p);
-       sp = tcore_sim_ref_userdata(co_sim);
-       ur = tcore_pending_ref_user_request(p);
-
-       if(resp->success > 0)
-       {
-               dbg("RESPONSE OK");
-               if(resp->lines) {
-                       line = (const char*)resp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       if (g_slist_length(tokens) != 2) {
-                               msg("invalid message");
-                               tcore_at_tok_free(tokens);
-                               return;
-                       }
-               }
-               sw1 = atoi(g_slist_nth_data(tokens, 0));
-               sw2 = atoi(g_slist_nth_data(tokens, 1));
-
-               if((sw1 == 0x90 && sw2 == 0x00) ||sw1 == 0x91){
-                       result = SIM_ACCESS_SUCCESS;
-               }else{
-                       result =  _decode_status_word(sw1, sw2);
-               }
-       }else{
-               dbg("RESPONSE NOK");
-               result = SIM_ACCESS_FAILED;
-       }
-       
-       switch(sp->file_id){
-               case SIM_EF_CPHS_CALL_FORWARD_FLAGS :
-               case SIM_EF_USIM_CFIS :
-                       tcore_user_request_send_response(ur, _find_resp_command(ur), sizeof(struct tresp_sim_set_callforwarding), &resp_cf);
-                       break;
-               case SIM_EF_ELP:
-               case SIM_EF_LP:
-               case SIM_EF_USIM_LI:
-               case SIM_EF_USIM_PL:
-                       tcore_user_request_send_response(ur, _find_resp_command(ur), sizeof(struct tresp_sim_set_language), &resp_language);
-                       break;
-               default:
-                       break;
-       }
-       tcore_at_tok_free(tokens);
-       dbg(" Function exit");
-}
-
-static void on_response_transmit_apdu(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse *resp = data;
-       UserRequest *ur = NULL;
-       CoreObject *co_sim = NULL;
-       struct s_sim_property *sp = NULL;
-       GSList *tokens=NULL;
-       struct tresp_sim_transmit_apdu res;
-       const char *line;
-
-       dbg(" Function entry ");        
-       
-       co_sim = tcore_pending_ref_core_object(p);
-       sp = tcore_sim_ref_userdata(co_sim);
-       ur = tcore_pending_ref_user_request(p);
-
-       memset(&res, 0, sizeof(struct tresp_sim_transmit_apdu));
-
-       if(resp->success > 0)
-       {
-               dbg("RESPONSE OK");
-               res.result = SIM_ACCESS_SUCCESS;
-               if(resp->lines) {
-                       line = (const char*)resp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       if (g_slist_length(tokens) != 2) {
-                               msg("invalid message");
-                               tcore_at_tok_free(tokens);
-                               return;
-                       }
-               }
-               res.apdu_resp_length = atoi(g_slist_nth_data(tokens, 0));
-               strncpy((char *)res.apdu_resp, (const char *)g_slist_nth_data(tokens, 1), res.apdu_resp_length);
-       }
-       else
-       {
-               dbg("RESPONSE NOK");
-               res.result = SIM_ACCESS_FAILED; 
-       }
-
-       ur = tcore_pending_ref_user_request(p);
-       if (ur) {
-               tcore_user_request_send_response(ur, _find_resp_command(ur), sizeof(struct tresp_sim_transmit_apdu), &res);
-       }
-       tcore_at_tok_free(tokens);
-       dbg(" Function exit");
-}
-
-static TReturn s_verify_pins(CoreObject *o, UserRequest *ur)
-{
-       TcoreHal* hal;
-       TcoreATRequest *req = NULL;
-       TcorePending *pending = NULL;
-       char *cmd_str = NULL;
-       const struct treq_sim_verify_pins *req_data = NULL;
-       struct s_sim_property *sp = NULL;
-
-       dbg(" Function entry ");        
-
-       hal = tcore_object_get_hal(o);
-       sp = tcore_sim_ref_userdata(o);
-       pending = tcore_pending_new(o, 0);
-       req_data = tcore_user_request_ref_data(ur, NULL);
-
-       if (!o || !ur)
-               return TCORE_RETURN_EINVAL;
-
-       if (req_data->pin_type == SIM_PTYPE_PIN1) {
-               sp->current_sec_op = SEC_PIN1_VERIFY;
-       }
-       else if (req_data->pin_type == SIM_PTYPE_PIN2) {
-               sp->current_sec_op = SEC_PIN2_VERIFY;
-       }
-       else if (req_data->pin_type == SIM_PTYPE_SIM) {
-               sp->current_sec_op = SEC_SIM_VERIFY;
-       }
-       else if (req_data->pin_type == SIM_PTYPE_ADM) {
-               sp->current_sec_op = SEC_ADM_VERIFY;
-       }
-       else {
-               return TCORE_RETURN_EINVAL;
-       }
-
-       cmd_str = g_strdup_printf("AT+CPIN=\"%s\"%s", req_data->pin, "\r");
-
-       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, on_response_verify_pins, hal);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);
-
-       tcore_hal_send_request(hal, pending);
-       
-       free(cmd_str);
-       dbg(" Function exit");
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_verify_puks(CoreObject *o, UserRequest *ur)
-{
-       TcoreHal* hal;
-       TcoreATRequest *req;
-       TcorePending *pending = NULL;
-       char *cmd_str = NULL;
-       const struct treq_sim_verify_puks *req_data;
-       struct s_sim_property *sp = NULL;
-
-       dbg(" Function entry ");        
-
-       hal = tcore_object_get_hal(o);
-       sp = tcore_sim_ref_userdata(o);
-       pending = tcore_pending_new(o, 0);
-       req_data = tcore_user_request_ref_data(ur, NULL);
-
-       if (!o || !ur)
-               return TCORE_RETURN_EINVAL;
-
-       if(req_data->puk_type == SIM_PTYPE_PUK1){
-               sp->current_sec_op = SEC_PUK1_VERIFY;
-       }
-       else if(req_data->puk_type == SIM_PTYPE_PUK2){
-               sp->current_sec_op = SEC_PUK2_VERIFY;
-       }
-       else {
-               return TCORE_RETURN_EINVAL;
-       }
-
-       cmd_str = g_strdup_printf("AT+CPIN=\"%s\", \"%s\"%s", req_data->puk, req_data->pin, "\r");
-
-       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, on_response_verify_puks, hal);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);
-
-       tcore_hal_send_request(hal, pending);
-
-       free(cmd_str);
-       dbg(" Function exit");
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_change_pins(CoreObject *o, UserRequest *ur)
-{
-       TcoreHal* hal;
-       TcoreATRequest *req;
-       TcorePending *pending = NULL;
-       char *cmd_str = NULL;
-       const struct treq_sim_change_pins *req_data;
-       struct s_sim_property *sp = NULL;
-
-       dbg(" Function entry ");        
-
-       hal = tcore_object_get_hal(o);
-       sp = tcore_sim_ref_userdata(o);
-       pending = tcore_pending_new(o, 0);
-       req_data = tcore_user_request_ref_data(ur, NULL);
-
-       if (!o || !ur)
-               return TCORE_RETURN_EINVAL;
-
-       if(req_data->type == SIM_PTYPE_PIN1) {
-               sp->current_sec_op = SEC_PIN1_CHANGE;
-       }
-       else if(req_data->type == SIM_PTYPE_PIN2) {
-               sp->current_sec_op = SEC_PIN2_CHANGE;
-       }
-       else {
-               return TCORE_RETURN_EINVAL;
-       }
-
-       cmd_str = g_strdup_printf("AT+CPIN=\"%s\", \"%s\"%s", req_data->old_pin, req_data->new_pin, "\r");
-
-       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, on_response_change_pins, hal);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);
-
-       tcore_hal_send_request(hal, pending);
-
-       free(cmd_str);
-       dbg(" Function exit");
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_get_facility_status(CoreObject *o, UserRequest *ur)
-{
-       TcoreHal* hal;
-       TcoreATRequest *req;
-       TcorePending *pending = NULL;
-       char *cmd_str = NULL;
-       const struct treq_sim_get_facility_status *req_data;
-       struct s_sim_property *sp = NULL;
-       char *fac = "SC";
-       int mode = 2;           /* 0:unlock, 1:lock, 2:query*/
-
-       dbg(" Function entry ");        
-       
-       hal = tcore_object_get_hal(o);
-       sp = tcore_sim_ref_userdata(o);
-       pending = tcore_pending_new(o, 0);
-       req_data = tcore_user_request_ref_data(ur, NULL);
-
-       if (!o || !ur)
-               return TCORE_RETURN_EINVAL;
-       
-       if(req_data->type == SIM_FACILITY_PS){
-               fac = "PS";                                                             /*PH-SIM, Lock PHone to SIM/UICC card*/
-       }else if(req_data->type == SIM_FACILITY_SC){
-               fac = "SC";                                                             /*Lock SIM/UICC card, simply PIN1*/
-       }else if(req_data->type == SIM_FACILITY_FD){
-               fac = "FD";                                                             /*Fixed Dialing Number feature, need PIN2*/
-       }else if(req_data->type == SIM_FACILITY_PN){
-               fac = "PN";                                                             /*Network Personalization*/
-       }else if(req_data->type == SIM_FACILITY_PU){
-               fac = "PU";                                                             /*network sUbset Personalization*/
-       }else if(req_data->type == SIM_FACILITY_PP){
-               fac = "PP";                                                             /*service Provider Personalization*/
-       }else if(req_data->type == SIM_FACILITY_PC){
-               fac = "PC";                                                             /*Corporate Personalization*/
-       }else{
-               return TCORE_RETURN_EINVAL;
-       }
-
-       cmd_str = g_strdup_printf("AT+CLCK=\"%s\", %d%s", fac, mode, "\r");
-
-       req = tcore_at_request_new(cmd_str, "+CLCK:", TCORE_AT_SINGLELINE);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, on_response_get_facility_status, hal);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);
-
-       tcore_hal_send_request(hal, pending);
-
-       free(cmd_str);
-       dbg(" Function exit");
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_enable_facility(CoreObject *o, UserRequest *ur)
-{
-       TcoreHal* hal;
-       TcoreATRequest *req;
-       TcorePending *pending = NULL;
-       char *cmd_str = NULL;
-       const struct treq_sim_enable_facility *req_data;
-       struct s_sim_property *sp = NULL;
-       char *fac = "SC";
-       int mode = 1;           /* 0:unlock, 1:lock, 2:query*/
-
-       dbg(" Function entry ");        
-       
-       hal = tcore_object_get_hal(o);
-       sp = tcore_sim_ref_userdata(o);
-       pending = tcore_pending_new(o, 0);
-       req_data = tcore_user_request_ref_data(ur, NULL);
-
-       if (!o || !ur)
-               return TCORE_RETURN_EINVAL;
-       
-       if(req_data->type == SIM_FACILITY_PS){
-               fac = "PS";                                                             /*PH-SIM, Lock PHone to SIM/UICC card*/
-               sp->current_sec_op = SEC_SIM_ENABLE;
-       }else if(req_data->type == SIM_FACILITY_SC){
-               fac = "SC";                                                             /*Lock SIM/UICC card, simply PIN1*/
-               sp->current_sec_op = SEC_PIN1_ENABLE;
-       }else if(req_data->type == SIM_FACILITY_FD){
-               fac = "FD";                                                             /*Fixed Dialing Number feature, need PIN2*/
-               sp->current_sec_op = SEC_FDN_ENABLE;
-       }else if(req_data->type == SIM_FACILITY_PN){
-               fac = "PN";                                                             /*Network Personalization*/
-               sp->current_sec_op = SEC_NET_ENABLE;
-       }else if(req_data->type == SIM_FACILITY_PU){
-               fac = "PU";                                                             /*network sUbset Personalization*/
-               sp->current_sec_op = SEC_NS_ENABLE;
-       }else if(req_data->type == SIM_FACILITY_PP){
-               fac = "PP";                                                             /*service Provider Personalization*/
-               sp->current_sec_op = SEC_SP_ENABLE;
-       }else if(req_data->type == SIM_FACILITY_PC){
-               fac = "PC";                                                             /*Corporate Personalization*/
-               sp->current_sec_op = SEC_CP_ENABLE;
-       }else{
-               return TCORE_RETURN_EINVAL;
-       }
-
-       cmd_str = g_strdup_printf("AT+CLCK=\"%s\", %d, \"%s\"%s", fac, mode, req_data->password,"\r");
-
-       req = tcore_at_request_new(cmd_str, "+CLCK:", TCORE_AT_SINGLELINE);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, on_response_enable_facility, hal);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);
-
-       tcore_hal_send_request(hal, pending);
-
-       free(cmd_str);
-       dbg(" Function exit");
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_disable_facility(CoreObject *o, UserRequest *ur)
-{
-       TcoreHal* hal;
-       TcoreATRequest *req;
-       TcorePending *pending = NULL;
-       char *cmd_str = NULL;
-       const struct treq_sim_enable_facility *req_data;
-       struct s_sim_property *sp = NULL;
-       char *fac = "SC";
-       int mode = 0;           /* 0:unlock, 1:lock, 2:query*/
-
-       dbg(" Function entry ");        
-       
-       hal = tcore_object_get_hal(o);
-       sp = tcore_sim_ref_userdata(o);
-       pending = tcore_pending_new(o, 0);
-       req_data = tcore_user_request_ref_data(ur, NULL);
-
-       if (!o || !ur)
-               return TCORE_RETURN_EINVAL;
-       
-       if(req_data->type == SIM_FACILITY_PS){
-               fac = "PS";                                                             /*PH-SIM, Lock PHone to SIM/UICC card*/
-               sp->current_sec_op = SEC_SIM_DISABLE;
-       }else if(req_data->type == SIM_FACILITY_SC){
-               fac = "SC";                                                             /*Lock SIM/UICC card, simply PIN1*/
-               sp->current_sec_op = SEC_PIN1_DISABLE;
-       }else if(req_data->type == SIM_FACILITY_FD){
-               fac = "FD";                                                             /*Fixed Dialing Number feature, need PIN2*/
-               sp->current_sec_op = SEC_FDN_DISABLE;
-       }else if(req_data->type == SIM_FACILITY_PN){
-               fac = "PN";                                                             /*Network Personalization*/
-               sp->current_sec_op = SEC_NET_DISABLE;
-       }else if(req_data->type == SIM_FACILITY_PU){
-               fac = "PU";                                                             /*network sUbset Personalization*/
-               sp->current_sec_op = SEC_NS_DISABLE;
-       }else if(req_data->type == SIM_FACILITY_PP){
-               fac = "PP";                                                             /*service Provider Personalization*/
-               sp->current_sec_op = SEC_SP_DISABLE;
-       }else if(req_data->type == SIM_FACILITY_PC){
-               fac = "PC";                                                             /*Corporate Personalization*/
-               sp->current_sec_op = SEC_CP_DISABLE;
-       }else{
-               return TCORE_RETURN_EINVAL;
-       }
-
-       cmd_str = g_strdup_printf("AT+CLCK=\"%s\", %d, \"%s\"%s", fac, mode, req_data->password,"\r");
-
-       req = tcore_at_request_new(cmd_str, "+CLCK:", TCORE_AT_SINGLELINE);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, on_response_disable_facility, hal);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);
-
-       tcore_hal_send_request(hal, pending);
-
-       free(cmd_str);
-       dbg(" Function exit");
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_get_lock_info(CoreObject *o, UserRequest *ur)
-{
-       TcoreHal* hal;
-       TcoreATRequest *req;
-       TcorePending *pending = NULL;
-       char *cmd_str = NULL;
-       char    *lock_type = NULL;
-       const struct treq_sim_get_lock_info *req_data;
-       struct s_sim_property *sp = NULL;
-
-       dbg(" Function entry ");        
-       
-       hal = tcore_object_get_hal(o);
-       sp = tcore_sim_ref_userdata(o);
-       pending = tcore_pending_new(o, 0);
-       req_data = tcore_user_request_ref_data(ur, NULL);
-
-       if (!o || !ur)
-               return TCORE_RETURN_EINVAL;
-
-       switch (req_data->type) {
-               case SIM_FACILITY_PS:
-                       lock_type = "PS";
-                       break;
-               case SIM_FACILITY_SC:
-                       lock_type = "SC";
-                       break;
-               case SIM_FACILITY_FD:
-                       lock_type = "FD";
-                       break;
-               case SIM_FACILITY_PN:
-                       lock_type = "PN";
-                       break;
-               case SIM_FACILITY_PU:
-                       lock_type = "PU";
-                       break;
-               case SIM_FACILITY_PP:
-                       lock_type = "PP";
-                       break;
-               case SIM_FACILITY_PC:
-                       lock_type = "PC";
-                       break;
-               default:
-                       break;
-       }
-
-       cmd_str = g_strdup_printf("AT+XPINCNT =\"%s\"%s", lock_type,"\r");
-
-       req = tcore_at_request_new(cmd_str, "+XPINCNT:", TCORE_AT_SINGLELINE);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, on_response_get_lock_info, hal);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);
-
-       tcore_hal_send_request(hal, pending);
-
-       free(cmd_str);
-       dbg(" Function exit");
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_read_file(CoreObject *o, UserRequest *ur)
-{
-       TReturn api_ret = TCORE_RETURN_SUCCESS;
-       enum tcore_request_command command;
-       command = tcore_user_request_get_command(ur);
-
-       dbg(" Function entry ");        
-       
-       if (!o || !ur)
-               return TCORE_RETURN_EINVAL;
-
-       switch (command) {
-               case TREQ_SIM_GET_ECC:
-                       api_ret = _get_file_info(o, ur, SIM_EF_ECC);
-                       break;
-
-               case TREQ_SIM_GET_LANGUAGE:
-                       if (tcore_sim_get_type(o) == SIM_TYPE_GSM)
-                               api_ret = _get_file_info(o, ur, SIM_EF_ELP);
-                       else if (tcore_sim_get_type(o) == SIM_TYPE_USIM)
-                               api_ret = _get_file_info(o, ur, SIM_EF_LP);
-                       else
-                               api_ret = TCORE_RETURN_ENOSYS;
-                       break;
-
-               case TREQ_SIM_GET_ICCID:
-                       api_ret = _get_file_info(o, ur, SIM_EF_ICCID);
-                       break;
-
-               case TREQ_SIM_GET_MAILBOX:
-                       if(tcore_sim_get_cphs_status(o))
-                               api_ret = _get_file_info(o, ur, SIM_EF_CPHS_MAILBOX_NUMBERS);
-                       else
-                               api_ret = _get_file_info(o, ur, SIM_EF_MBDN);
-                       break;
-
-               case TREQ_SIM_GET_CALLFORWARDING:
-                       if(tcore_sim_get_cphs_status(o))
-                               api_ret = _get_file_info(o, ur, SIM_EF_CPHS_CALL_FORWARD_FLAGS);
-                       else
-                               api_ret = _get_file_info(o, ur, SIM_EF_USIM_CFIS);
-                       break;
-
-               case TREQ_SIM_GET_MESSAGEWAITING:
-                       if(tcore_sim_get_cphs_status(o))
-                               api_ret = _get_file_info(o, ur, SIM_EF_CPHS_VOICE_MSG_WAITING);
-                       else
-                               api_ret = _get_file_info(o, ur, SIM_EF_USIM_MWIS);
-                       break;
-
-               case TREQ_SIM_GET_CPHS_INFO:
-/*                     if(tcore_sim_get_cphs_status(o))*/
-                               api_ret = _get_file_info(o, ur, SIM_EF_CPHS_CPHS_INFO);
-/*                     else
-                               api_ret = TCORE_RETURN_ENOSYS;*/
-                       break;
-
-               case TREQ_SIM_GET_MSISDN:
-                       api_ret = _get_file_info(o, ur, SIM_EF_MSISDN);
-                       break;
-
-               case TREQ_SIM_GET_SPN:
-                       dbg("enter case SPN");
-                       api_ret = _get_file_info(o, ur, SIM_EF_SPN);
-                       break;
-
-               case TREQ_SIM_GET_SPDI:
-                       api_ret = _get_file_info(o, ur, SIM_EF_SPDI);
-                       break;
-
-               case TREQ_SIM_GET_OPL:
-                       api_ret = _get_file_info(o, ur, SIM_EF_OPL);
-                       break;
-
-               case TREQ_SIM_GET_PNN:
-                       api_ret = _get_file_info(o, ur, SIM_EF_PNN);
-                       break;
-
-               case TREQ_SIM_GET_CPHS_NETNAME:
-/*                     if(tcore_sim_get_cphs_status(o))*/
-                               api_ret = _get_file_info(o, ur, SIM_EF_CPHS_OPERATOR_NAME_STRING);
-/*                     else
-                               api_ret = TCORE_RETURN_ENOSYS;*/
-                       break;
-
-/*             case TREQ_SIM_GET_CPHS_FULLNETNAME:
-                       if(tcore_sim_get_cphs_status(o))
-                               api_ret = _get_file_info(o, ur, SIM_EF_CPHS_OPERATOR_NAME_STRING);
-                       else
-                               api_ret = TCORE_RETURN_ENOSYS;
-                       break;*/
-
-               case TREQ_SIM_GET_OPLMNWACT:
-                       api_ret = _get_file_info(o, ur, SIM_EF_OPLMN_ACT);
-                       break;
-
-               default:
-                       dbg("error - not handled read treq command[%d]", command);
-                       api_ret = TCORE_RETURN_EINVAL;
-                       break;
-       }
-       dbg(" Function exit");
-       return api_ret;
-}
-
-static TReturn s_update_file(CoreObject *o, UserRequest *ur)
-{
-       TcoreHal* hal;
-       TcoreATRequest *req;
-       TcorePending *pending = NULL;
-       char *cmd_str = NULL;
-       TReturn api_ret = TCORE_RETURN_SUCCESS;
-       char *encoded_data = NULL;
-       int encoded_len = 0;
-       enum tcore_request_command command;
-       enum tel_sim_file_id ef = SIM_EF_INVALID;
-       const struct treq_sim_set_callforwarding *cf;
-       int p1 = 0;
-       int p2 = 0;
-       int p3 = 0;
-       int cmd = 0;
-       command = tcore_user_request_get_command(ur);
-
-       dbg(" Function entry ");        
-
-       hal = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-
-       if (!o || !ur)
-               return TCORE_RETURN_EINVAL;
-
-       switch (command) {
-               case TREQ_SIM_SET_LANGUAGE:
-                       if (tcore_sim_get_type(o) == SIM_TYPE_GSM)
-                               ef = SIM_EF_ELP;
-                       else if (tcore_sim_get_type(o) == SIM_TYPE_USIM)
-                               ef = SIM_EF_LP;
-                       else
-                               api_ret = TCORE_RETURN_ENOSYS;
-                       break;
-
-               case TREQ_SIM_SET_CALLFORWARDING:
-                       cf = tcore_user_request_ref_data(ur, NULL);
-                       if(tcore_sim_get_cphs_status(o)) {
-                               encoded_data = tcore_sim_encode_cff((const struct tel_sim_callforwarding*)cf);
-                               ef = SIM_EF_CPHS_CALL_FORWARD_FLAGS;
-                               p1 = 0;
-                               p2 = 0;
-                               p3 = strlen(encoded_data);
-                               cmd = 214;                              /*command - 214 : UPDATE BINARY*/
-                       } else {
-                               encoded_data = tcore_sim_encode_cfis(&encoded_len, (const struct tel_sim_callforwarding*)cf);
-                               ef = SIM_EF_USIM_CFIS;
-                               p1 = 1;
-                               p2 = 0x04;
-                               p3 = encoded_len;
-                               cmd = 220;                              /*command - 220 : UPDATE RECORD*/
-                       }
-                       break;
-
-               default:
-                       dbg("error - not handled update treq command[%d]", command);
-                       api_ret = TCORE_RETURN_EINVAL;
-                       break;
-       }
-
-       cmd_str = g_strdup_printf("AT+CRSM=%d%d%d%d%d%s%s", cmd,ef,p1,p2,p3, encoded_data,"\r");
-
-       req = tcore_at_request_new(cmd_str, "+CRSM:", TCORE_AT_SINGLELINE);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-       
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, on_response_update_file, hal);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);
-
-       tcore_hal_send_request(hal, pending);
-       if(NULL != encoded_data){
-               g_free(encoded_data);
-       }
-       free(cmd_str);
-       dbg(" Function exit");
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_transmit_apdu(CoreObject *o, UserRequest *ur)
-{
-       TcoreHal* hal;
-       TcoreATRequest *req;
-       TcorePending *pending = NULL;
-       char *cmd_str = NULL;
-       const struct treq_sim_transmit_apdu *req_data;
-
-       dbg(" Function entry ");        
-       
-       hal = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-       req_data = tcore_user_request_ref_data(ur, NULL);
-
-       if (!o || !ur)
-               return TCORE_RETURN_EINVAL;
-       
-       cmd_str = g_strdup_printf("AT+CSIM=%d%s%s", req_data->apdu_length, req_data->apdu,"\r");
-
-       req = tcore_at_request_new(cmd_str, "+CSIM:", TCORE_AT_SINGLELINE);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, on_response_transmit_apdu, hal);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);
-
-       tcore_hal_send_request(hal, pending);
-
-       free(cmd_str);
-       dbg(" Function exit");
-       return TCORE_RETURN_SUCCESS;
-}
-
-/*ToDo - Need to be implemented in Phase-2*/
-/*
-static TReturn s_get_atr(CoreObject *o, UserRequest *ur)
-{
-       TcoreHal* hal;
-       TcoreATRequest *req;
-       TcorePending *pending = NULL;
-       char *cmd_str = NULL;
-
-       hal = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-       req_data = tcore_user_request_ref_data(ur, NULL);
-       
-       cmd_str = g_strdup_printf("AT+",);                                      //ToDo - Construct AT string
-
-       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_SINGLELINE);     //ToDo - Set prefix if require
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, on_response_get_atr, hal);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);
-
-       tcore_hal_send_request(hal, pending);
-
-       return TCORE_RETURN_SUCCESS;
-}*/
-
-
-/*ToDo - Need to be implemented in Phase-2*/
-/*
-static TReturn s_req_authentication(CoreObject *o, UserRequest *ur)
-{
-       TcoreHal* hal;
-       TcoreATRequest *req;
-       TcorePending *pending = NULL;
-       char *cmd_str = NULL;
-       const struct treq_sim_req_authentication *req_data;
-
-       hal = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-       req_data = tcore_user_request_ref_data(ur, NULL);
-
-       //ToDo - Fill required parameters
-       
-       cmd_str = g_strdup_printf("AT+",);              //ToDo - Construct AT string
-
-       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_SINGLELINE); //ToDo - Set prefix if require
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-       tcore_pending_set_response_callback(pending, on_response_req_authentication, hal);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);
-
-       tcore_hal_send_request(hal, pending);
-
-       return TCORE_RETURN_SUCCESS;
-}*/
-
-static struct tcore_sim_operations sim_ops =
-{
-               .verify_pins = s_verify_pins,
-               .verify_puks = s_verify_puks,
-               .change_pins = s_change_pins,
-               .get_facility_status = s_get_facility_status,
-               .enable_facility = s_enable_facility,
-               .disable_facility = s_disable_facility,
-               .get_lock_info = s_get_lock_info,
-               .read_file = s_read_file,
-               .update_file = s_update_file,
-               .transmit_apdu = s_transmit_apdu,
-               //.get_atr = s_get_atr,
-               //.req_authentication = s_req_authentication
-};
-
-gboolean s_sim_init(TcorePlugin *p, TcoreHal *h)
-{
-       CoreObject *o;
-       struct s_sim_property *file_meta = NULL;
-       GQueue *work_queue;
-
-       dbg("entry");
-
-       o = tcore_sim_new(p, "sim", &sim_ops, h);
-       
-       if (!o)
-               return FALSE;
-
-       file_meta = calloc(sizeof(struct s_sim_property),1);
-       if (!file_meta)
-               return FALSE;
-
-       work_queue = g_queue_new();
-       tcore_object_link_user_data(o, work_queue);
-
-       file_meta->first_recv_status = SIM_STATUS_UNKNOWN;
-       tcore_sim_link_userdata(o, file_meta);
-
-       tcore_object_add_callback(o, "+XLOCK", on_event_facility_lock_status, NULL);
-       tcore_object_add_callback(o, "+XSIM", on_event_pin_status, NULL);
-       dbg("exit");
-       return TRUE;
-}
-
-
-void s_sim_exit(TcorePlugin *p)
-{
-       CoreObject *o;
-
-       o = tcore_plugin_ref_core_object(p, "sim");
-       if (!o)
-               return;
-       tcore_sim_free(o);
-}
+/**\r
+ * tel-plugin-samsung\r
+ *\r
+ * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved\r
+ *\r
+ * Contact: Ankit Jogi <ankit.jogi@samsung.com>\r
+ *\r
+ * PROPRIETARY/CONFIDENTIAL\r
+ *\r
+ * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information").\r
+ * You shall not disclose such Confidential Information and shall\r
+ * use it only in accordance with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS.\r
+ * SAMSUNG make no representations or warranties about the suitability\r
+ * of the software, either express or implied, including but not\r
+ * limited to the implied warranties of merchantability, fitness for a particular purpose, or non-infringement.\r
+ * SAMSUNG shall not be liable for any damages suffered by licensee as\r
+ * a result of using, modifying or distributing this software or its derivatives.\r
+ */\r
+\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include <glib.h>\r
+#include <tcore.h>\r
+#include <hal.h>\r
+#include <core_object.h>\r
+#include <plugin.h>\r
+#include <queue.h>\r
+#include <co_sim.h>\r
+#include <storage.h>\r
+#include <user_request.h>\r
+#include <server.h>\r
+#include <at.h>\r
+\r
+#include "s_common.h"\r
+#include "s_sim.h"\r
+\r
+#define ID_RESERVED_AT 0x0229\r
+\r
+#define SWAPBYTES16(x) \\r
+{ \\r
+    unsigned short int data = *(unsigned short int*)&(x); \\r
+    data = ((data & 0xff00) >> 8) |    \\r
+           ((data & 0x00ff) << 8);     \\r
+    *(unsigned short int*)&(x) = data ;      \\r
+}\r
+\r
+enum s_sim_file_type_e {\r
+       SIM_FTYPE_DEDICATED = 0x00, /**< Dedicated */\r
+       SIM_FTYPE_TRANSPARENT = 0x01, /**< Transparent -binary type*/\r
+       SIM_FTYPE_LINEAR_FIXED = 0x02, /**< Linear fixed - record type*/\r
+       SIM_FTYPE_CYCLIC = 0x04, /**< Cyclic - record type*/\r
+       SIM_FTYPE_INVALID_TYPE = 0xFF /**< Invalid type */\r
+};\r
+\r
+enum s_sim_sec_op_e {\r
+       SEC_PIN1_VERIFY,\r
+       SEC_PIN2_VERIFY,\r
+       SEC_PUK1_VERIFY,\r
+       SEC_PUK2_VERIFY,\r
+       SEC_SIM_VERIFY,\r
+       SEC_ADM_VERIFY,\r
+       SEC_PIN1_CHANGE,\r
+       SEC_PIN2_CHANGE,\r
+       SEC_PIN1_ENABLE,\r
+       SEC_PIN1_DISABLE,\r
+       SEC_PIN2_ENABLE,\r
+       SEC_PIN2_DISABLE, //10\r
+       SEC_SIM_ENABLE,\r
+       SEC_SIM_DISABLE,\r
+       SEC_NET_ENABLE,\r
+       SEC_NET_DISABLE,\r
+       SEC_NS_ENABLE,\r
+       SEC_NS_DISABLE,\r
+       SEC_SP_ENABLE,\r
+       SEC_SP_DISABLE,\r
+       SEC_CP_ENABLE,\r
+       SEC_CP_DISABLE, //20\r
+       SEC_FDN_ENABLE,\r
+       SEC_FDN_DISABLE,\r
+       SEC_PIN1_STATUS,\r
+       SEC_PIN2_STATUS,\r
+       SEC_FDN_STATUS,\r
+       SEC_NET_STATUS,\r
+       SEC_NS_STATUS,\r
+       SEC_SP_STATUS,\r
+       SEC_CP_STATUS,\r
+       SEC_SIM_STATUS,\r
+       SEC_SIM_UNKNOWN = 0xff\r
+};\r
+\r
+struct s_sim_property {\r
+       gboolean b_valid; /**< Valid or not */\r
+       enum tel_sim_file_id file_id; /**< File identifier */\r
+       enum s_sim_file_type_e file_type; /**< File type and structure */\r
+       int rec_length; /**< Length of one record in file */\r
+       int rec_count; /**< Number of records in file */\r
+       int data_size; /**< File size */\r
+       int current_index; /**< current index to read */\r
+       enum tel_sim_status first_recv_status;\r
+       enum s_sim_sec_op_e current_sec_op; /**< current index to read */\r
+       struct tresp_sim_read files;\r
+};\r
+\r
+static void _next_from_get_file_info(CoreObject *o, UserRequest *ur, enum tel_sim_file_id ef, enum tel_sim_access_result rt);\r
+static void _next_from_get_file_data(CoreObject *o, UserRequest *ur, enum tel_sim_access_result rt, int decode_ret);\r
+static gboolean _get_sim_type(CoreObject *o);\r
+static TReturn _get_file_info(CoreObject *o, UserRequest *ur, const enum tel_sim_file_id ef);\r
+static gboolean _get_file_data(CoreObject *o, UserRequest *ur, const enum tel_sim_file_id ef, const int offset, const int length);\r
+static gboolean _get_file_record(CoreObject *o, UserRequest *ur, const enum tel_sim_file_id ef, const int index, const int length);\r
+static void _sim_status_update(CoreObject *o, enum tel_sim_status sim_status);\r
+static void on_confirmation_sim_message_send(TcorePending *p, gboolean result, void *user_data ); // from Kernel\r
+\r
+static void on_confirmation_sim_message_send( TcorePending *p, gboolean result, void *user_data )\r
+{\r
+       dbg("on_confirmation_sim_message_send - msg out from queue.\n");\r
+\r
+       if (result == FALSE) {\r
+               /* Fail */\r
+               dbg("SEND FAIL");\r
+       }\r
+       else\r
+       {\r
+               dbg("SEND OK");\r
+       }\r
+}\r
+\r
+static enum tcore_response_command _find_resp_command(UserRequest *ur)\r
+{\r
+       enum tcore_request_command command;\r
+       command = tcore_user_request_get_command(ur);\r
+       switch(command){\r
+               case TREQ_SIM_VERIFY_PINS:\r
+                       return TRESP_SIM_VERIFY_PINS;\r
+                       break;\r
+               case TREQ_SIM_VERIFY_PUKS:\r
+                       return TRESP_SIM_VERIFY_PUKS;\r
+                       break;\r
+               case TREQ_SIM_CHANGE_PINS:\r
+                       return TRESP_SIM_CHANGE_PINS;\r
+                       break;\r
+               case TREQ_SIM_GET_FACILITY_STATUS:\r
+                       return TRESP_SIM_GET_FACILITY_STATUS;\r
+                       break;\r
+               case TREQ_SIM_DISABLE_FACILITY:\r
+                       return TRESP_SIM_DISABLE_FACILITY;\r
+                       break;\r
+               case TREQ_SIM_ENABLE_FACILITY:\r
+                       return TRESP_SIM_ENABLE_FACILITY;\r
+                       break;\r
+               case TREQ_SIM_GET_LOCK_INFO:\r
+                       return TRESP_SIM_GET_LOCK_INFO;\r
+                       break;\r
+               case TREQ_SIM_TRANSMIT_APDU:\r
+                       return TRESP_SIM_TRANSMIT_APDU;\r
+                       break;\r
+               case TREQ_SIM_GET_ATR:\r
+                       return TRESP_SIM_GET_ATR;\r
+                       break;\r
+               case TREQ_SIM_GET_ECC:\r
+                       return TRESP_SIM_GET_ECC;\r
+                       break;\r
+               case TREQ_SIM_GET_LANGUAGE:\r
+                       return TRESP_SIM_GET_LANGUAGE;\r
+                       break;\r
+               case TREQ_SIM_SET_LANGUAGE:\r
+                       return TRESP_SIM_SET_LANGUAGE;\r
+                       break;\r
+               case TREQ_SIM_GET_ICCID:\r
+                       return TRESP_SIM_GET_ICCID;\r
+                       break;\r
+               case TREQ_SIM_GET_MAILBOX:\r
+                       return TRESP_SIM_GET_MAILBOX;\r
+                       break;\r
+               case TREQ_SIM_GET_CALLFORWARDING:\r
+                       return TRESP_SIM_GET_CALLFORWARDING;\r
+                       break;\r
+               case TREQ_SIM_SET_CALLFORWARDING:\r
+                       return TRESP_SIM_SET_CALLFORWARDING;\r
+                       break;\r
+               case TREQ_SIM_GET_MESSAGEWAITING:\r
+                       return TRESP_SIM_GET_MESSAGEWAITING;\r
+                       break;\r
+               case TREQ_SIM_GET_CPHS_INFO:\r
+                       return TRESP_SIM_GET_CPHS_INFO;\r
+                       break;\r
+               case TREQ_SIM_GET_MSISDN:\r
+                       return TRESP_SIM_GET_MSISDN;\r
+                       break;\r
+               case TREQ_SIM_GET_SPN:\r
+                       return TRESP_SIM_GET_SPN;\r
+                       break;\r
+               case TREQ_SIM_GET_SPDI:\r
+                       return TRESP_SIM_GET_SPDI;\r
+                       break;\r
+               case TREQ_SIM_GET_OPL:\r
+                       return TRESP_SIM_GET_OPL;\r
+                       break;\r
+               case TREQ_SIM_GET_PNN:\r
+                       return TRESP_SIM_GET_PNN;\r
+                       break;\r
+               case TREQ_SIM_GET_CPHS_NETNAME:\r
+                       return TRESP_SIM_GET_CPHS_NETNAME;\r
+                       break;\r
+               case TREQ_SIM_GET_OPLMNWACT:\r
+                       return TRESP_SIM_GET_OPLMNWACT;\r
+                       break;\r
+               case TREQ_SIM_REQ_AUTHENTICATION:\r
+                       return TRESP_SIM_REQ_AUTHENTICATION;\r
+                       break;\r
+               default:\r
+                       break;\r
+       }\r
+       return TRESP_UNKNOWN;\r
+}\r
+\r
+static int _sim_get_current_pin_facility(enum s_sim_sec_op_e op)\r
+{\r
+       int ret_type = 0;\r
+       dbg("current sec_op[%d]", op);\r
+       switch(op)\r
+       {\r
+               case SEC_PIN1_VERIFY :\r
+               case SEC_PIN1_CHANGE :\r
+                       ret_type = SIM_PTYPE_PIN1;\r
+                       break;\r
+               case SEC_PIN2_VERIFY :\r
+               case SEC_PIN2_CHANGE :\r
+                       ret_type = SIM_PTYPE_PIN2;\r
+                       break;\r
+               case SEC_PUK1_VERIFY :\r
+                       ret_type = SIM_PTYPE_PUK1;\r
+                       break;\r
+               case SEC_PUK2_VERIFY :\r
+                       ret_type = SIM_PTYPE_PUK2;\r
+                       break;\r
+               case SEC_SIM_VERIFY :\r
+                       ret_type = SIM_PTYPE_SIM;\r
+                       break;\r
+               case SEC_ADM_VERIFY :\r
+                       ret_type = SIM_PTYPE_ADM;\r
+                       break;\r
+\r
+               case SEC_PIN1_ENABLE :\r
+               case SEC_PIN1_DISABLE :\r
+               case SEC_PIN1_STATUS :\r
+                       ret_type = SIM_FACILITY_SC;\r
+                       break;\r
+               case SEC_SIM_ENABLE :\r
+               case SEC_SIM_DISABLE :\r
+               case SEC_SIM_STATUS :\r
+                       ret_type = SIM_FACILITY_PS;\r
+                       break;\r
+               case SEC_NET_ENABLE :\r
+               case SEC_NET_DISABLE :\r
+               case SEC_NET_STATUS :\r
+                       ret_type = SIM_FACILITY_PN;\r
+                       break;\r
+               case SEC_NS_ENABLE :\r
+               case SEC_NS_DISABLE :\r
+               case SEC_NS_STATUS :\r
+                       ret_type = SIM_FACILITY_PU;\r
+                       break;\r
+               case SEC_SP_ENABLE :\r
+               case SEC_SP_DISABLE :\r
+               case SEC_SP_STATUS :\r
+                       ret_type = SIM_FACILITY_PP;\r
+                       break;\r
+               case SEC_CP_ENABLE :\r
+               case SEC_CP_DISABLE :\r
+               case SEC_CP_STATUS :\r
+                       ret_type = SIM_FACILITY_PC;\r
+                       break;\r
+               case SEC_FDN_ENABLE :\r
+               case SEC_FDN_DISABLE :\r
+               case SEC_FDN_STATUS :\r
+                       ret_type = SIM_FACILITY_FD;\r
+                       break;\r
+\r
+               default:\r
+                       dbg("not handled current sec op[%d]",op )\r
+                       break;\r
+       }\r
+       return ret_type;\r
+}\r
+\r
+static enum tel_sim_access_result _decode_status_word(unsigned short status_word1, unsigned short status_word2)\r
+{\r
+       enum tel_sim_access_result rst = SIM_ACCESS_FAILED;\r
+\r
+       if (status_word1 == 0x93 && status_word2 == 0x00)\r
+       {\r
+               rst = SIM_ACCESS_FAILED;\r
+               /*Failed SIM request command*/\r
+               dbg(" error - SIM application toolkit busy [%x][%x]", status_word1, status_word2);\r
+       }\r
+       else if (status_word1 == 0x94 && status_word2 == 0x00)\r
+       {\r
+               rst = SIM_ACCESS_FAILED;\r
+               /*Failed SIM request command*/\r
+               dbg(" error - No EF Selected [%x][%x]", status_word1, status_word2);\r
+       }\r
+       else if (status_word1 == 0x94 && status_word2 == 0x02)\r
+       {\r
+               rst = SIM_ACCESS_FAILED;\r
+               /*Failed SIM request command*/\r
+               dbg("error - Out of Range - Invalid address or record number[%x][%x]",\r
+                               status_word1, status_word2);\r
+       }\r
+       else if (status_word1 == 0x94 && status_word2 == 0x04)\r
+       {\r
+               rst = SIM_ACCESS_FILE_NOT_FOUND;\r
+               /*Failed SIM request command*/\r
+               dbg(" error - File ID not found [%x][%x]", status_word1, status_word2);\r
+       }\r
+       else if (status_word1 == 0x94 && status_word2 == 0x08)\r
+       {\r
+               rst = SIM_ACCESS_FAILED; /* MOdem not support */\r
+               /*Failed SIM request command*/\r
+               dbg(" error - File is inconsistent with command - Modem not support or USE IPC [%x][%x]",\r
+                               status_word1, status_word2);\r
+       }\r
+       else if (status_word1 == 0x98 && status_word2 == 0x02)\r
+       {\r
+               rst = SIM_ACCESS_CONDITION_NOT_SATISFIED;\r
+               /*Failed SIM request command*/\r
+               dbg(" error - CHV not initialized [%x][%x]", status_word1, status_word2);\r
+       }\r
+       else if (status_word1 == 0x98 && status_word2 == 0x04)\r
+       {\r
+               rst = SIM_ACCESS_CONDITION_NOT_SATISFIED;\r
+               /*Failed SIM request command*/\r
+               dbg(" error - Access condition not fullfilled [%x][%x]", status_word1, status_word2);\r
+               dbg(" error -Unsuccessful CHV verification - at least one attempt left [%x][%x]",\r
+                               status_word1, status_word2);\r
+               dbg(" error - Unsuccessful Unblock CHV - at least one attempt left [%x][%x]",\r
+                               status_word1, status_word2);\r
+               dbg(" error - Authentication failure [%x][%x]", status_word1, status_word2);\r
+       }\r
+       else if (status_word1 == 0x98 && status_word2 == 0x08)\r
+       {\r
+               rst = SIM_ACCESS_CONDITION_NOT_SATISFIED;\r
+               /*Failed SIM request command*/\r
+               dbg(" error - Contradiction with CHV status [%x][%x]", status_word1, status_word2);\r
+       }\r
+       else if (status_word1 == 0x98 && status_word2 == 0x10)\r
+       {\r
+               rst = SIM_ACCESS_CONDITION_NOT_SATISFIED;\r
+               /*Failed SIM request command*/\r
+               dbg(" error - Contradiction with invalidation  status [%x][%x]",\r
+                               status_word1, status_word2);\r
+       }\r
+       else if (status_word1 == 0x98 && status_word2 == 0x40)\r
+       {\r
+               rst = SIM_ACCESS_CONDITION_NOT_SATISFIED;\r
+               /*Failed SIM request command*/\r
+               dbg(" error -Unsuccessful CHV verification - no attempt left [%x][%x]",\r
+                               status_word1, status_word2);\r
+               dbg(" error - Unsuccessful Unblock CHV - no attempt left [%x][%x]",\r
+                               status_word1, status_word2);\r
+               dbg(" error - CHV blocked [%x][%x]", status_word1, status_word2);\r
+       }\r
+       else if (status_word1 == 0x67 && status_word2 == 0x00)\r
+       {\r
+               rst = SIM_ACCESS_FAILED;\r
+               dbg(" error -Incorrect Parameter 3 [%x][%x]", status_word1, status_word2);\r
+       }\r
+       else if (status_word1 == 0x6B && status_word2 == 0x00)\r
+       {\r
+               rst = SIM_ACCESS_FAILED;\r
+               dbg(" error -Incorrect Parameter 1 or 2 [%x][%x]", status_word1, status_word2);\r
+       }\r
+       else if (status_word1 == 0x6D && status_word2 == 0x00)\r
+       {\r
+               rst = SIM_ACCESS_CONDITION_NOT_SATISFIED;\r
+               dbg(" error -Unknown instruction given as command [%x][%x]", status_word1, status_word2);\r
+       }\r
+       else if (status_word1 == 0x6E && status_word2 == 0x00)\r
+       {\r
+               rst = SIM_ACCESS_CONDITION_NOT_SATISFIED;\r
+               dbg(" error -Unknown instruction given as command [%x][%x]", status_word1, status_word2);\r
+       }\r
+       else if (status_word1 == 0x69 && status_word2 == 0x82)\r
+       {\r
+               rst = SIM_ACCESS_CONDITION_NOT_SATISFIED;\r
+               dbg(" error -Access denied [%x][%x]", status_word1, status_word2);\r
+       }\r
+       else if (status_word1 == 0x6A && status_word2 == 0x87)\r
+       {\r
+               rst = SIM_ACCESS_FAILED;\r
+               dbg(" error -Incorrect parameters [%x][%x]", status_word1, status_word2);\r
+       }\r
+       else if (status_word1 == 0x6A && status_word2 == 0x82)\r
+       {\r
+               rst = SIM_ACCESS_FILE_NOT_FOUND; // not sure of the SW1 and SW2 meaning here\r
+               dbg(" error -File Not found [%x][%x]", status_word1, status_word2);\r
+       }\r
+       else if (status_word1 == 0x6A && status_word2 == 0x83)\r
+       {\r
+               rst = SIM_ACCESS_FILE_NOT_FOUND; // not sure of the SW1 and SW2 meaning here\r
+               dbg(" error -Record Not found [%x][%x]", status_word1, status_word2);\r
+       }\r
+       else\r
+       {\r
+               rst = SIM_ACCESS_CARD_ERROR;\r
+               dbg(" error -Unknown state [%x][%x]", status_word1, status_word2);\r
+       }\r
+       return rst;\r
+}\r
+\r
+static gboolean _sim_check_identity(CoreObject *o, struct tel_sim_imsi *imsi)\r
+{\r
+       Server *s = NULL;\r
+       Storage *strg = NULL;\r
+       char* old_imsi = NULL;\r
+       char new_imsi[15+1] = {0,};\r
+\r
+       s = tcore_plugin_ref_server(tcore_object_ref_plugin(o));\r
+       if(!s)\r
+       {\r
+               dbg("there is no valid server at this point");\r
+               return FALSE;\r
+       }\r
+       strg = (Storage*)tcore_server_find_storage(s, "vconf");\r
+       if(!strg)\r
+       {\r
+               dbg("there is no valid storage plugin");\r
+               return FALSE;\r
+       }\r
+       memcpy(&new_imsi, imsi->plmn, strlen(imsi->plmn));\r
+       memcpy(&new_imsi[strlen(imsi->plmn)], imsi->msin, strlen(imsi->msin));\r
+       new_imsi[strlen(imsi->plmn)+strlen(imsi->msin)] = '\0';\r
+\r
+       old_imsi = tcore_storage_get_string(strg, STORAGE_KEY_TELEPHONY_IMSI);\r
+       dbg("old_imsi[%s],newImsi[%s]", old_imsi, new_imsi);\r
+\r
+       if (old_imsi != NULL)\r
+       {\r
+               if (strncmp(old_imsi, new_imsi, 15) != 0)\r
+               {\r
+                       dbg("NEW SIM");\r
+                       if (tcore_storage_set_string(strg, STORAGE_KEY_TELEPHONY_IMSI, (const char*) &new_imsi) == FALSE )\r
+                       {\r
+                               dbg("[FAIL] UPDATE STORAGE_KEY_TELEPHONY_IMSI");\r
+                       }\r
+                       tcore_sim_set_identification(o, TRUE);\r
+               }\r
+               else\r
+               {\r
+                       dbg("SAME SIM");\r
+                       tcore_sim_set_identification(o, FALSE);\r
+               }\r
+       }\r
+       else\r
+       {\r
+               dbg("OLD SIM VALUE IS NULL. NEW SIM");\r
+               if (tcore_storage_set_string(strg, STORAGE_KEY_TELEPHONY_IMSI, (const char*) &new_imsi) == FALSE)\r
+               {\r
+                       dbg("[FAIL] UPDATE STORAGE_KEY_TELEPHONY_IMSI");\r
+               }\r
+               tcore_sim_set_identification(o, TRUE);\r
+       }\r
+       return 1;\r
+}\r
+\r
+static void  _next_from_get_file_info(CoreObject *o,  UserRequest *ur, enum tel_sim_file_id ef, enum tel_sim_access_result rt )\r
+{\r
+       struct tresp_sim_read resp = {0,};\r
+       struct s_sim_property *file_meta = NULL;\r
+       dbg("EF[0x%x] access Result[%d]", ef, rt);\r
+\r
+       resp.result = rt;\r
+       memset(&resp.data, 0x00, sizeof(resp.data));\r
+       file_meta = (struct s_sim_property*)tcore_user_request_ref_metainfo(ur, NULL);\r
+\r
+       if ((ef != SIM_EF_ELP && ef != SIM_EF_LP && ef != SIM_EF_USIM_PL && ef != SIM_EF_CPHS_CPHS_INFO )\r
+                       && (rt != SIM_ACCESS_SUCCESS))\r
+       {\r
+               tcore_user_request_send_response(ur, _find_resp_command(ur), sizeof(struct tresp_sim_read),&resp);\r
+               return;\r
+       }\r
+\r
+       switch (ef)\r
+       {\r
+               case SIM_EF_ELP:\r
+                       if (rt == SIM_ACCESS_SUCCESS)\r
+                       {\r
+                               dbg("[SIM DATA] exist EFELP/PL(0x2F05)");\r
+                               /*                              if (po->language_file == 0x00)\r
+                                po->language_file = SIM_EF_ELP;*/\r
+                               _get_file_data(o, ur, ef, 0, file_meta->data_size);\r
+                       }\r
+                       else\r
+                       {\r
+                               if (tcore_sim_get_type(o) == SIM_TYPE_GSM)\r
+                               {\r
+                                       dbg(" [SIM DATA]SIM_EF_ELP(2F05) access fail. Request SIM_EF_LP(0x6F05) info");\r
+                                       /* The ME requests the Language Preference (EFLP) if EFELP is not available  */\r
+                                       _get_file_info(o, ur, SIM_EF_LP);\r
+                               }\r
+                               else if (tcore_sim_get_type(o) == SIM_TYPE_USIM)\r
+                               {\r
+                                       dbg(\r
+                                                       " [SIM DATA]fail to get Language information in USIM(EF-LI(6F05),EF-PL(2F05)). Request SIM_EF_ECC(0x6FB7) info");\r
+                                       /* EFELPand EFLI not present at this point. */\r
+                                       /*                                      po->language.lang_cnt = 0;*/\r
+                                       tcore_user_request_send_response(ur, _find_resp_command(ur),\r
+                                                       sizeof(struct tresp_sim_read), &resp);\r
+                                       return;\r
+                               }\r
+                       }\r
+                       break;\r
+\r
+               case SIM_EF_LP: //same with SIM_EF_USIM_LI\r
+                       if (rt == SIM_ACCESS_SUCCESS)\r
+                       {\r
+                               dbg("[SIM DATA] exist EFLP/LI(0x6F05)");\r
+                               _get_file_data(o, ur, ef, 0, file_meta->data_size);\r
+                       }\r
+                       else\r
+                       {\r
+                               dbg("[SIM DATA]SIM_EF_LP/LI(6F05) access fail. Current CardType[%d]",\r
+                                               tcore_sim_get_type(o));\r
+                               if (tcore_sim_get_type(o) == SIM_TYPE_GSM)\r
+                               {\r
+                                       tcore_user_request_send_response(ur, _find_resp_command(ur),\r
+                                                       sizeof(struct tresp_sim_read), &resp);\r
+                                       return;\r
+                               }\r
+                               /*  if EFLI is not present, then the language selection shall be as defined in EFPL at the MF level     */\r
+                               else if (tcore_sim_get_type(o) == SIM_TYPE_USIM)\r
+                               {\r
+                                       dbg("[SIM DATA] try USIM EFPL(0x2F05)");\r
+                                       _get_file_info(o, ur, SIM_EF_ELP);\r
+                               }\r
+                       }\r
+                       break;\r
+\r
+               case SIM_EF_USIM_PL:\r
+                       if (rt == SIM_ACCESS_SUCCESS)\r
+                       {\r
+                               dbg("[SIM DATA] exist EFELP/PL(0x2F05)");\r
+                               _get_file_data(o, ur, SIM_EF_ELP, 0, file_meta->data_size);\r
+                       }\r
+                       else\r
+                       {\r
+                               /* EFELIand EFPL not present, so set language count as zero and select ECC */\r
+                               dbg(\r
+                                               " [SIM DATA]SIM_EF_USIM_PL(2A05) access fail. Request SIM_EF_ECC(0x6FB7) info");\r
+                               tcore_user_request_send_response(ur, _find_resp_command(ur),\r
+                                               sizeof(struct tresp_sim_read), &resp);\r
+                               return;\r
+                       }\r
+                       break;\r
+\r
+               case SIM_EF_ECC:\r
+                       if (tcore_sim_get_type(o) == SIM_TYPE_GSM)\r
+                       {\r
+                               _get_file_data(o, ur, ef, 0, file_meta->data_size);\r
+                       }\r
+                       else if (tcore_sim_get_type(o) == SIM_TYPE_USIM)\r
+                       {\r
+                               if (file_meta->rec_count > SIM_ECC_RECORD_CNT_MAX)\r
+                               {\r
+                                       file_meta->rec_count = SIM_ECC_RECORD_CNT_MAX;\r
+                               }\r
+\r
+                               file_meta->current_index++;\r
+                               _get_file_record(o, ur, ef, file_meta->current_index, file_meta->rec_length);\r
+                       }\r
+                       break;\r
+\r
+               case SIM_EF_ICCID:\r
+               case SIM_EF_IMSI:\r
+               case SIM_EF_SST:\r
+               case SIM_EF_SPN:\r
+               case SIM_EF_SPDI:\r
+               case SIM_EF_CPHS_CALL_FORWARD_FLAGS:\r
+               case SIM_EF_CPHS_VOICE_MSG_WAITING:\r
+               case SIM_EF_CPHS_OPERATOR_NAME_STRING:\r
+               case SIM_EF_CPHS_OPERATOR_NAME_SHORT_FORM_STRING:\r
+               case SIM_EF_CPHS_DYNAMICFLAGS:\r
+               case SIM_EF_CPHS_DYNAMIC2FLAG:\r
+               case SIM_EF_CPHS_CUSTOMER_SERVICE_PROFILE:\r
+               case SIM_EF_CPHS_CUSTOMER_SERVICE_PROFILE_LINE2:\r
+                       _get_file_data(o, ur, ef, 0, file_meta->data_size);\r
+                       break;\r
+\r
+               case SIM_EF_CPHS_CPHS_INFO:\r
+                       if (rt == SIM_ACCESS_SUCCESS)\r
+                       {\r
+                               tcore_sim_set_cphs_status(o, TRUE);\r
+                               if (!tcore_user_request_ref_communicator(ur))\r
+                               {\r
+                                       dbg("internal CPHS INFO request before sim status update");\r
+                                       _sim_status_update(o, SIM_STATUS_INIT_COMPLETED);\r
+                               } else\r
+                               {\r
+                                       dbg("external CPHS INFO request");\r
+                                       _get_file_data(o, ur, ef, 0, file_meta->data_size);\r
+                               }\r
+                       } else\r
+                       {\r
+                               tcore_sim_set_cphs_status(o, FALSE);\r
+                               if (!tcore_user_request_ref_communicator(ur))\r
+                               {\r
+                                       dbg("internal CPHS INFO request before sim status update");\r
+                                       _sim_status_update(o, SIM_STATUS_INIT_COMPLETED);\r
+                               } else\r
+                               {\r
+                                       dbg("external CPHS INFO request");\r
+                                       tcore_user_request_send_response(ur, _find_resp_command(ur),\r
+                                                       sizeof(struct tresp_sim_read), &resp);\r
+                               }\r
+                       }\r
+                       break;\r
+\r
+\r
+               case SIM_EF_USIM_CFIS:\r
+                       if (file_meta->rec_count > SIM_CF_RECORD_CNT_MAX)\r
+                       {\r
+                               file_meta->rec_count = SIM_CF_RECORD_CNT_MAX;\r
+                       }\r
+                       file_meta->current_index++;\r
+                       _get_file_record(o, ur, ef, file_meta->current_index, file_meta->rec_length);\r
+                       break;\r
+\r
+               case SIM_EF_OPL:\r
+               case SIM_EF_PNN:\r
+               case SIM_EF_USIM_MWIS:\r
+               case SIM_EF_USIM_MBI:\r
+               case SIM_EF_MBDN:\r
+               case SIM_EF_CPHS_MAILBOX_NUMBERS:\r
+               case SIM_EF_CPHS_INFORMATION_NUMBERS:\r
+                       file_meta->current_index++;\r
+                       _get_file_record(o, ur, ef, file_meta->current_index, file_meta->rec_length);\r
+                       break;\r
+\r
+               default:\r
+                       dbg( "error - File id for get file info [0x%x]", ef);\r
+                       break;\r
+       }\r
+       return;\r
+}\r
+\r
+static void _next_from_get_file_data(CoreObject *o, UserRequest *ur, enum tel_sim_access_result rt, int decode_ret)\r
+{\r
+       struct s_sim_property *file_meta = NULL;\r
+       dbg("Entry");\r
+\r
+       file_meta = (struct s_sim_property*)tcore_user_request_ref_metainfo(ur, NULL);\r
+       dbg("[SIM]EF[0x%x] read rt[%d] Decode rt[%d]", file_meta->file_id, rt, decode_ret);\r
+       switch (file_meta->file_id)\r
+       {\r
+               case SIM_EF_ELP:\r
+               case SIM_EF_USIM_PL:\r
+               case SIM_EF_LP:\r
+               case SIM_EF_USIM_LI:\r
+                       if (decode_ret == TRUE)\r
+                       {\r
+                               if (file_meta->file_id == SIM_EF_LP || file_meta->file_id == SIM_EF_USIM_LI)\r
+                               {\r
+/*                                     po->language_file = SIM_EF_LP;*/\r
+                               } else if (file_meta->file_id == SIM_EF_ELP || file_meta->file_id == SIM_EF_USIM_PL)\r
+                               {\r
+/*                                     po->language_file = SIM_EF_ELP;*/\r
+                               }\r
+                               tcore_user_request_send_response(ur, _find_resp_command(ur),    sizeof(struct tresp_sim_read), &file_meta->files);\r
+                       } else\r
+                       {\r
+                               /* 2G */\r
+                               /*  The ME requests the Extended Language Preference. The ME only requests the Language Preference (EFLP) if at least one of the following conditions holds:\r
+                                -      EFELP is not available;\r
+                                -      EFELP does not contain an entry corresponding to a language specified in ISO 639[30];\r
+                                -      the ME does not support any of the languages in EFELP.\r
+                                */\r
+                               /* 3G */\r
+                               /*  The ME only requests the Language Preference (EFPL) if at least one of the following conditions holds:\r
+                                -      if the EFLI has the value 'FFFF' in its highest priority position\r
+                                -      if the ME does not support any of the language codes indicated in EFLI , or if EFLI is not present\r
+                                */\r
+                               if (tcore_sim_get_type(o) == SIM_TYPE_GSM)\r
+                               {\r
+                                       if (file_meta->file_id == SIM_EF_LP)\r
+                                       {\r
+                                               tcore_user_request_send_response(ur, _find_resp_command(ur),    sizeof(struct tresp_sim_read), &file_meta->files);\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               _get_file_info(o, ur, SIM_EF_LP);\r
+                                       }\r
+                               } else if (tcore_sim_get_type(o) == SIM_TYPE_USIM)\r
+                               {\r
+\r
+                                       if (file_meta->file_id == SIM_EF_LP || file_meta->file_id == SIM_EF_USIM_LI)\r
+                                       {\r
+                                               _get_file_info(o, ur, SIM_EF_ELP);\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               tcore_user_request_send_response(ur, _find_resp_command(ur),    sizeof(struct tresp_sim_read), &file_meta->files);\r
+                                       }\r
+                               }\r
+                       }\r
+                       break;\r
+\r
+               case SIM_EF_ECC:\r
+                       if (tcore_sim_get_type(o) == SIM_TYPE_USIM)\r
+                       {\r
+                               if (file_meta->current_index == file_meta->rec_count)\r
+                               {\r
+                                       tcore_user_request_send_response(ur, _find_resp_command(ur),    sizeof(struct tresp_sim_read), &file_meta->files);\r
+                               } else\r
+                               {\r
+                                       file_meta->current_index++;\r
+                                       _get_file_record(o, ur, file_meta->file_id, file_meta->current_index, file_meta->rec_length );\r
+                               }\r
+                       } else if (tcore_sim_get_type(o) == SIM_TYPE_GSM)\r
+                       {\r
+                               tcore_user_request_send_response(ur, _find_resp_command(ur),    sizeof(struct tresp_sim_read), &file_meta->files);\r
+                       } else\r
+                       {\r
+                               dbg("[SIM DATA]Invalid CardType[%d] Unable to handle", tcore_sim_get_type(o));\r
+                       }\r
+                       break;\r
+\r
+               case SIM_EF_IMSI:\r
+                       ur = tcore_user_request_new(NULL, NULL); //this is for using ur metainfo set/ref functionality.\r
+                       _get_file_info(o, ur, SIM_EF_CPHS_CPHS_INFO);\r
+                       break;\r
+\r
+               case SIM_EF_MSISDN:\r
+                       if (file_meta->current_index == file_meta->rec_count)\r
+                       {\r
+                               tcore_user_request_send_response(ur, _find_resp_command(ur),    sizeof(struct tresp_sim_read), &file_meta->files);\r
+                       } else\r
+                       {\r
+                               file_meta->current_index++;\r
+                               _get_file_record(o, ur, file_meta->file_id, file_meta->current_index, file_meta->rec_length );\r
+                       }\r
+                       break;\r
+\r
+               case SIM_EF_OPL:\r
+                       if (file_meta->current_index == file_meta->rec_count)\r
+                       {\r
+                               tcore_user_request_send_response(ur, _find_resp_command(ur),    sizeof(struct tresp_sim_read), &file_meta->files);\r
+                       } else\r
+                       {\r
+                               file_meta->current_index++;\r
+                               _get_file_record(o, ur, file_meta->file_id, file_meta->current_index, file_meta->rec_length );\r
+                       }\r
+                       break;\r
+\r
+               case SIM_EF_PNN:\r
+                       if (file_meta->current_index == file_meta->rec_count)\r
+                       {\r
+                               tcore_user_request_send_response(ur, _find_resp_command(ur),    sizeof(struct tresp_sim_read), &file_meta->files);\r
+                       } else\r
+                       {\r
+                               file_meta->current_index++;\r
+                               _get_file_record(o, ur, file_meta->file_id, file_meta->current_index, file_meta->rec_length );\r
+                       }\r
+                       break;\r
+\r
+               case SIM_EF_USIM_CFIS:\r
+               case SIM_EF_USIM_MWIS:\r
+               case SIM_EF_USIM_MBI:\r
+               case SIM_EF_MBDN:\r
+               case SIM_EF_CPHS_MAILBOX_NUMBERS:\r
+               case SIM_EF_CPHS_INFORMATION_NUMBERS:\r
+                       if (file_meta->current_index == file_meta->rec_count)\r
+                       {\r
+                               tcore_user_request_send_response(ur, _find_resp_command(ur),    sizeof(struct tresp_sim_read), &file_meta->files);\r
+                       } else\r
+                       {\r
+                               file_meta->current_index++;\r
+                               _get_file_record(o, ur, file_meta->file_id, file_meta->current_index, file_meta->rec_length );\r
+                       }\r
+                       break;\r
+\r
+               case SIM_EF_CPHS_OPERATOR_NAME_STRING:\r
+                       file_meta->files.result = rt;\r
+                       if (decode_ret == TRUE && rt == SIM_ACCESS_SUCCESS)\r
+                       {\r
+                               memcpy(file_meta->files.data.cphs_net.full_name, file_meta->files.data.cphs_net.full_name, strlen((char*)file_meta->files.data.cphs_net.full_name));\r
+                       }\r
+                       _get_file_info(o, ur, SIM_EF_CPHS_OPERATOR_NAME_SHORT_FORM_STRING);\r
+                       break;\r
+\r
+               case SIM_EF_CPHS_OPERATOR_NAME_SHORT_FORM_STRING:\r
+                       if (file_meta->files.result == SIM_ACCESS_SUCCESS || file_meta->files.result == SIM_ACCESS_SUCCESS)\r
+                       {\r
+                               file_meta->files.result = SIM_ACCESS_SUCCESS;\r
+                       }\r
+                       if (strlen((char*)file_meta->files.data.cphs_net.full_name))\r
+                       {\r
+                               memcpy(&file_meta->files.data.cphs_net.full_name, &file_meta->files.data.cphs_net.full_name, strlen((char*)file_meta->files.data.cphs_net.full_name));\r
+                       }\r
+                       tcore_user_request_send_response(ur, _find_resp_command(ur),    sizeof(struct tresp_sim_read), &file_meta->files);\r
+                       break;\r
+\r
+               case SIM_EF_ICCID:\r
+               case SIM_EF_SST:\r
+               case SIM_EF_SPN:\r
+               case SIM_EF_SPDI:\r
+               case SIM_EF_OPLMN_ACT:\r
+               case SIM_EF_CPHS_CPHS_INFO :\r
+               case SIM_EF_CPHS_CALL_FORWARD_FLAGS:\r
+               case SIM_EF_CPHS_VOICE_MSG_WAITING:\r
+               case SIM_EF_CPHS_DYNAMICFLAGS:\r
+               case SIM_EF_CPHS_DYNAMIC2FLAG:\r
+               case SIM_EF_CPHS_CUSTOMER_SERVICE_PROFILE:\r
+               case SIM_EF_CPHS_CUSTOMER_SERVICE_PROFILE_LINE2:\r
+                       tcore_user_request_send_response(ur, _find_resp_command(ur),    sizeof(struct tresp_sim_read), &file_meta->files);\r
+                       break;\r
+\r
+               default:\r
+                       dbg("File id not handled [0x%x]", file_meta->file_id);\r
+                       break;\r
+       }\r
+}\r
+\r
+static void _sim_status_update(CoreObject *o, enum tel_sim_status sim_status)\r
+{\r
+       struct tnoti_sim_status noti_data = {0,};\r
+\r
+       dbg("tcore_sim_set_status and send noti w/ [%d]", sim_status);\r
+       tcore_sim_set_status(o, sim_status);\r
+       noti_data.sim_status = sim_status;\r
+       tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_SIM_STATUS,\r
+                       sizeof(struct tnoti_sim_status), &noti_data);\r
+}\r
+\r
+static void _response_get_sim_type(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *resp = data;\r
+       UserRequest *ur = NULL;\r
+       CoreObject *co_sim = NULL;\r
+       struct s_sim_property *sp = NULL;\r
+       GSList *tokens=NULL;\r
+       enum tel_sim_type sim_type = SIM_TYPE_UNKNOWN;\r
+       const char *line;\r
+       int state;\r
+\r
+       dbg(" Function entry ");\r
+\r
+       co_sim = tcore_pending_ref_core_object(p);\r
+       sp = tcore_sim_ref_userdata(co_sim);\r
+       ur = tcore_pending_ref_user_request(p);\r
+\r
+       if(resp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               if(resp->lines)\r
+               {\r
+                       line = (const char*)resp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       if (g_slist_length(tokens) != 1)\r
+                       {\r
+                               msg("invalid message");\r
+                               tcore_at_tok_free(tokens);\r
+                               return;\r
+                       }\r
+               }\r
+               state = atoi(g_slist_nth_data(tokens, 0));\r
+               dbg("SIM Type is %d", state);\r
+\r
+               if(state == 0)\r
+               {\r
+                       sim_type = SIM_TYPE_GSM;\r
+               }else if(state == 1)\r
+               {\r
+                       sim_type = SIM_TYPE_USIM;\r
+               }else\r
+               {\r
+                       sim_type = SIM_TYPE_UNKNOWN;\r
+               }\r
+\r
+       }\r
+       else\r
+       {\r
+               dbg("RESPONSE NOK");\r
+               sim_type = SIM_TYPE_UNKNOWN;\r
+       }\r
+\r
+       tcore_sim_set_type(co_sim, sim_type);\r
+       _sim_status_update(co_sim, sp->first_recv_status);\r
+       tcore_at_tok_free(tokens);\r
+       dbg(" Function exit");\r
+}\r
+\r
+static void _response_get_file_info(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *resp = data;\r
+       UserRequest *ur = NULL;\r
+       CoreObject *co_sim = NULL;\r
+       struct s_sim_property *file_meta = NULL;\r
+       GSList *tokens=NULL;\r
+       enum tel_sim_access_result rt;\r
+       const char *line = NULL;\r
+       int sw1 = 0;\r
+       int sw2 = 0;\r
+\r
+       dbg(" Function entry ");\r
+\r
+       co_sim = tcore_pending_ref_core_object(p);\r
+       ur = tcore_pending_ref_user_request(p);\r
+       file_meta = (struct s_sim_property*)tcore_user_request_ref_metainfo(ur, NULL);\r
+\r
+       if(resp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               if(resp->lines)\r
+               {\r
+                       line = (const char*)resp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       if (g_slist_length(tokens) < 2)\r
+                       {\r
+                               err("invalid message");\r
+                               tcore_at_tok_free(tokens);\r
+                               return;\r
+                       }\r
+               }\r
+               sw1 = atoi(g_slist_nth_data(tokens, 0));\r
+               sw2 = atoi(g_slist_nth_data(tokens, 1));\r
+\r
+               /*1. SIM access success case*/\r
+               if ((sw1 == 0x90 && sw2 == 0x00) || sw1 == 0x91) {\r
+                       unsigned char tag_len = 0; /*   1 or 2 bytes ??? */\r
+                       unsigned short record_len = 0;\r
+                       char num_of_records = 0;\r
+                       unsigned char file_id_len = 0;\r
+                       unsigned short file_id = 0;\r
+                       unsigned short file_size = 0;\r
+                       unsigned short file_type = 0;\r
+                       unsigned short arr_file_id = 0;\r
+                       int arr_file_id_rec_num = 0;\r
+\r
+                       /*      handling only last 3 bits */\r
+                       unsigned char file_type_tag = 0x07;\r
+                       unsigned char *ptr_data;\r
+\r
+                       char *hexData;\r
+                       char *tmp;\r
+                       char *recordData = NULL;\r
+                       hexData = g_slist_nth_data(tokens, 2);\r
+                       dbg("hexData: %s", hexData);\r
+                       dbg("hexData: %s", hexData+1);\r
+\r
+                       tmp = calloc(1, strlen(hexData)-1);\r
+                       memcpy(tmp, hexData+1, strlen(hexData)-2);\r
+                       dbg("tmp: %s", tmp);\r
+\r
+                       recordData = util_hexStringToBytes(tmp);\r
+                       dbg("recordData: %x", recordData);\r
+                       free(tmp);\r
+                       util_hex_dump("    ", strlen(hexData)/2, recordData);\r
+\r
+                       ptr_data = (unsigned char *)recordData;\r
+                       if (tcore_sim_get_type(co_sim) == SIM_TYPE_USIM)\r
+                       {\r
+                               /*\r
+                                ETSI TS 102 221 v7.9.0\r
+                                - Response Data\r
+                                '62'   FCP template tag\r
+                                - Response for an EF\r
+                                '82'   M       File Descriptor\r
+                                '83'   M       File Identifier\r
+                                'A5'   O       Proprietary information\r
+                                '8A'   M       Life Cycle Status Integer\r
+                                '8B', '8C' or 'AB'     C1      Security attributes\r
+                                '80'   M       File size\r
+                                '81'   O       Total file size\r
+                                '88'   O       Short File Identifier (SFI)\r
+                                */\r
+\r
+                               /* rsim.res_len  has complete data length received  */\r
+\r
+                               /* FCP template tag - File Control Parameters tag*/\r
+                               if (*ptr_data == 0x62)\r
+                               {\r
+                                       /* parse complete FCP tag*/\r
+                                       /* increment to next byte */\r
+                                       ptr_data++;\r
+                                       tag_len = *ptr_data++;\r
+                                       dbg("tag_len: %02x", tag_len);\r
+                                       /* FCP file descriptor - file type, accessibility, DF, ADF etc*/\r
+                                       if (*ptr_data == 0x82)\r
+                                       {\r
+                                               /* increment to next byte */\r
+                                               ptr_data++;\r
+                                               /* 2 or 5 value*/\r
+                                               ptr_data++;\r
+                                               /*      unsigned char file_desc_len = *ptr_data++;*/\r
+                                               /*      dbg("file descriptor length: [%d]", file_desc_len);*/\r
+                                               /* TBD:  currently capture only file type : ignore sharable, non sharable, working, internal etc*/\r
+                                               /* consider only last 3 bits*/\r
+                                               dbg("file_type_tag: %02x", file_type_tag);\r
+                                               file_type_tag = file_type_tag & (*ptr_data);\r
+                                               dbg("file_type_tag: %02x", file_type_tag);\r
+\r
+                                               switch (file_type_tag)\r
+                                               {\r
+                                                       /* increment to next byte */\r
+                                                       //ptr_data++;\r
+                                                       case 0x1:\r
+                                                               dbg("Getting FileType: [Transparent file type]");\r
+                                                               file_type = SIM_FTYPE_TRANSPARENT;\r
+\r
+                                                               /* increment to next byte */\r
+                                                               ptr_data++;\r
+                                                               /* increment to next byte */\r
+                                                               ptr_data++;\r
+                                                               break;\r
+\r
+                                                       case 0x2:\r
+                                                               dbg("Getting FileType: [Linear fixed file type]");\r
+                                                               /* increment to next byte */\r
+                                                               ptr_data++;\r
+                                                               /*      data coding byte - value 21 */\r
+                                                               ptr_data++;\r
+                                                               /*      2bytes */\r
+                                                               memcpy(&record_len, ptr_data, 2);\r
+                                                               /* swap bytes */\r
+                                                               SWAPBYTES16(record_len);\r
+                                                               ptr_data = ptr_data + 2;\r
+                                                               num_of_records = *ptr_data++;\r
+                                                               /* Data lossy conversation from enum (int) to unsigned char */\r
+                                                               file_type = SIM_FTYPE_LINEAR_FIXED;\r
+                                                               break;\r
+\r
+                                                       case 0x6:\r
+                                                               dbg(" Cyclic fixed file type");\r
+                                                               /* increment to next byte */\r
+                                                               ptr_data++;\r
+                                                               /*      data coding byte - value 21 */\r
+                                                               ptr_data++;\r
+                                                               /*      2bytes */\r
+                                                               memcpy(&record_len, ptr_data, 2);\r
+                                                               /* swap bytes  */\r
+                                                               SWAPBYTES16(record_len);\r
+                                                               ptr_data = ptr_data + 2;\r
+                                                               num_of_records = *ptr_data++;\r
+                                                               file_type = SIM_FTYPE_CYCLIC;\r
+                                                               break;\r
+\r
+                                               default:\r
+                                                       dbg("not handled file type [0x%x]", *ptr_data);\r
+                                                       break;\r
+                                               }\r
+                                       } else\r
+                                       {\r
+                                               dbg("INVALID FCP received - DEbug!");\r
+                                               return;\r
+                                       }\r
+\r
+                                       /*File identifier - file id?? */ // 0x84,0x85,0x86 etc are currently ignored and not handled\r
+                                       if (*ptr_data == 0x83)\r
+                                       {\r
+                                               /* increment to next byte */\r
+                                               ptr_data++;\r
+                                               file_id_len = *ptr_data++;\r
+                                               dbg("file_id_len: %02x", file_id_len);\r
+\r
+                                               memcpy(&file_id, ptr_data, file_id_len);\r
+                                               dbg("file_id: %x", file_id);\r
+\r
+                                               /* swap bytes    */\r
+                                               SWAPBYTES16(file_id);\r
+                                               dbg("file_id: %x", file_id);\r
+\r
+                                               ptr_data = ptr_data + 2;\r
+                                               dbg("Getting FileID=[0x%x]", file_id);\r
+                                       } else\r
+                                       {\r
+                                               dbg("INVALID FCP received - DEbug!");\r
+                                               free(recordData);\r
+                                               return;\r
+                                       }\r
+\r
+                                       /*      proprietary information  */\r
+                                       if (*ptr_data == 0xA5)\r
+                                       {\r
+                                               unsigned short prop_len;\r
+                                               /* increment to next byte */\r
+                                               ptr_data++;\r
+\r
+                                               /* length */\r
+                                               prop_len = *ptr_data;\r
+                                               dbg("prop_len: %02x", prop_len);\r
+\r
+                                               /* skip data */\r
+                                               ptr_data = ptr_data + prop_len + 1;\r
+                                       } else\r
+                                       {\r
+                                               dbg("INVALID FCP received - DEbug!");\r
+                                       }\r
+\r
+                                       /* life cycle status integer [8A][length:0x01][status]*/\r
+                                       /*\r
+                                        status info b8~b1\r
+                                        00000000 : No information given\r
+                                        00000001 : creation state\r
+                                        00000011 : initialization state\r
+                                        000001-1 : operation state -activated\r
+                                        000001-0 : operation state -deactivated\r
+                                        000011-- : Termination state\r
+                                        b8~b5 !=0, b4~b1=X : Proprietary\r
+                                        Any other value : RFU\r
+                                        */\r
+                                       if (*ptr_data == 0x8A)\r
+                                       {\r
+                                               /* increment to next byte */\r
+                                               ptr_data++;\r
+                                               /* length - value 1 */\r
+                                               ptr_data++;\r
+\r
+                                               switch (*ptr_data) {\r
+                                                       case 0x04:\r
+                                                       case 0x06:\r
+                                                               dbg("<RX> operation state -deactivated");\r
+                                                               ptr_data++;\r
+                                                               break;\r
+                                                       case 0x05:\r
+                                                       case 0x07:\r
+                                                               dbg("<RX> operation state -activated");\r
+                                                               ptr_data++;\r
+                                                               break;\r
+                                                       default:\r
+                                                               dbg("<RX> DEBUG! LIFE CYCLE STATUS =[0x%x]",*ptr_data);\r
+                                                               ptr_data++;\r
+                                                               break;\r
+                                               }\r
+                                       }\r
+\r
+                                       /* related to security attributes : currently not handled*/\r
+                                       if (*ptr_data == 0x86 || *ptr_data == 0x8B || *ptr_data == 0x8C || *ptr_data == 0xAB)\r
+                                       {\r
+                                               /* increment to next byte */\r
+                                               ptr_data++;\r
+                                               /* if tag length is 3 */\r
+                                               if (*ptr_data == 0x03)\r
+                                               {\r
+                                                       /* increment to next byte */\r
+                                                       ptr_data++;\r
+                                                       /* EFARR file id */\r
+                                                       memcpy(&arr_file_id, ptr_data, 2);\r
+                                                       /* swap byes */\r
+                                                       SWAPBYTES16(arr_file_id);\r
+                                                       ptr_data = ptr_data + 2;\r
+                                                       arr_file_id_rec_num = *ptr_data++;\r
+                                               } else\r
+                                               {\r
+                                                       /* if tag length is not 3 */\r
+                                                       /* ignoring bytes       */\r
+                                                       //      ptr_data = ptr_data + 4;\r
+                                                       dbg("Useless security attributes, so jump to next tag");\r
+                                                       ptr_data = ptr_data + (*ptr_data + 1);\r
+                                               }\r
+                                       } else\r
+                                       {\r
+                                               dbg("INVALID FCP received[0x%x] - DEbug!", *ptr_data);\r
+                                               free(recordData);\r
+                                               return;\r
+                                       }\r
+\r
+                                       dbg("Current ptr_data value is [%x]", *ptr_data);\r
+\r
+                                       /* file size excluding structural info*/\r
+                                       if (*ptr_data == 0x80)\r
+                                       {\r
+                                               /* for EF file size is body of file and for Linear or cyclic it is\r
+                                                * number of recXsizeof(one record)\r
+                                                */\r
+                                               /* increment to next byte */\r
+                                               ptr_data++;\r
+                                               /* length is 1 byte - value is 2 bytes or more */\r
+                                               ptr_data++;\r
+                                               memcpy(&file_size, ptr_data, 2);\r
+                                               /* swap bytes */\r
+                                               SWAPBYTES16(file_size);\r
+                                               ptr_data = ptr_data + 2;\r
+                                       } else\r
+                                       {\r
+                                               dbg("INVALID FCP received - DEbug!");\r
+                                               free(recordData);\r
+                                               return;\r
+                                       }\r
+\r
+                                       /* total file size including structural info*/\r
+                                       if (*ptr_data == 0x81)\r
+                                       {\r
+                                               int len;\r
+                                               /* increment to next byte */\r
+                                               ptr_data++;\r
+                                               /* length */\r
+                                               len = *ptr_data;\r
+                                               /* ignored bytes */\r
+                                               ptr_data = ptr_data + 3;\r
+                                       } else\r
+                                       {\r
+                                               dbg("INVALID FCP received - DEbug!");\r
+                                               /* 0x81 is optional tag?? check out! so do not return -1 from here! */\r
+                                               /* return -1; */\r
+                                       }\r
+                                       /*short file identifier ignored*/\r
+                                       if (*ptr_data == 0x88)\r
+                                       {\r
+                                               dbg("0x88: Do Nothing");\r
+                                               /*DO NOTHING*/\r
+                                       }\r
+                               } else\r
+                               {\r
+                                       dbg("INVALID FCP received - DEbug!");\r
+                                       free(recordData);\r
+                                       return;\r
+                               }\r
+                       } else if (tcore_sim_get_type(co_sim) == SIM_TYPE_GSM)\r
+                       {\r
+                               unsigned char gsm_specific_file_data_len = 0;\r
+                               /*      ignore RFU byte1 and byte2 */\r
+                               ptr_data++;\r
+                               ptr_data++;\r
+                               /*      file size */\r
+                               //file_size = p_info->response_len;\r
+                               memcpy(&file_size, ptr_data, 2);\r
+                               /* swap bytes */\r
+                               SWAPBYTES16(file_size);\r
+                               /*      parsed file size */\r
+                               ptr_data = ptr_data + 2;\r
+                               /*  file id  */\r
+                               memcpy(&file_id, ptr_data, 2);\r
+                               SWAPBYTES16(file_id);\r
+                               dbg(" FILE id --> [%x]", file_id);\r
+                               ptr_data = ptr_data + 2;\r
+                               /* save file type - transparent, linear fixed or cyclic */\r
+                               file_type_tag = (*(ptr_data + 7));\r
+\r
+                               switch (*ptr_data)\r
+                               {\r
+                                       case 0x0:\r
+                                               /* RFU file type */\r
+                                               dbg(" RFU file type- not handled - Debug!");\r
+                                               break;\r
+                                       case 0x1:\r
+                                               /* MF file type */\r
+                                               dbg(" MF file type - not handled - Debug!");\r
+                                               break;\r
+                                       case 0x2:\r
+                                               /* DF file type */\r
+                                               dbg(" DF file type - not handled - Debug!");\r
+                                               break;\r
+                                       case 0x4:\r
+                                               /* EF file type */\r
+                                               dbg(" EF file type [%d] ", file_type_tag);\r
+                                               /*      increment to next byte */\r
+                                               ptr_data++;\r
+\r
+                                               if (file_type_tag == 0x00 || file_type_tag == 0x01)\r
+                                               {\r
+                                                       /* increament to next byte as this byte is RFU */\r
+                                                       ptr_data++;\r
+                                                       file_type =\r
+                                                                       (file_type_tag == 0x00) ? SIM_FTYPE_TRANSPARENT : SIM_FTYPE_LINEAR_FIXED;\r
+                                               } else\r
+                                               {\r
+                                                       /* increment to next byte */\r
+                                                       ptr_data++;\r
+                                                       /*      For a cyclic EF all bits except bit 7 are RFU; b7=1 indicates that */\r
+                                                       /* the INCREASE command is allowed on the selected cyclic file. */\r
+                                                       file_type = SIM_FTYPE_CYCLIC;\r
+                                               }\r
+                                               /* bytes 9 to 11 give SIM file access conditions */\r
+                                               ptr_data++;\r
+                                               /* byte 10 has one nibble that is RF U and another for INCREASE which is not used currently */\r
+                                               ptr_data++;\r
+                                               /* byte 11 is invalidate and rehabilate nibbles */\r
+                                               ptr_data++;\r
+                                               /* byte 12 - file status */\r
+                                               ptr_data++;\r
+                                               /* byte 13 - GSM specific data */\r
+                                               gsm_specific_file_data_len = *ptr_data;\r
+                                               ptr_data++;\r
+                                               /*      byte 14 - structure of EF - transparent or linear or cyclic , already saved above */\r
+                                               ptr_data++;\r
+                                               /* byte 15 - length of record for linear and cyclic , for transparent it is set to 0x00. */\r
+                                               record_len = *ptr_data;\r
+                                               dbg("record length[%d], file size[%d]", record_len, file_size);\r
+\r
+                                               if (record_len != 0)\r
+                                                       num_of_records = (file_size / record_len);\r
+\r
+                                               dbg("Number of records [%d]", num_of_records);\r
+                                               break;\r
+\r
+                                       default:\r
+                                               dbg(" not handled file type");\r
+                                               break;\r
+                               }\r
+                       }\r
+                       else\r
+                       {\r
+                               dbg(" Card Type - UNKNOWN  [%d]", tcore_sim_get_type(co_sim));\r
+                       }\r
+\r
+                       dbg("req ef[0x%x] resp ef[0x%x] size[%ld] Type[0x%x] NumOfRecords[%ld] RecordLen[%ld]",\r
+                                       file_meta->file_id, file_id, file_size, file_type, num_of_records, record_len);\r
+\r
+                       file_meta->file_type = file_type;\r
+                       file_meta->data_size = file_size;\r
+                       file_meta->rec_length = record_len;\r
+                       file_meta->rec_count = num_of_records;\r
+                       file_meta->current_index = 0; //reset for new record type EF\r
+                       rt = SIM_ACCESS_SUCCESS;\r
+                       free(recordData);\r
+               }\r
+               else\r
+               {\r
+                       /*2. SIM access fail case*/\r
+                       dbg("error to get ef[0x%x]", file_meta->file_id);\r
+                       dbg("error to get ef[0x%x] (file_meta->file_id) ", file_meta->file_id);\r
+                       rt = _decode_status_word(sw1, sw2);\r
+               }\r
+               ur = tcore_user_request_ref(ur);\r
+               \r
+               dbg("Calling _next_from_get_file_info");\r
+               _next_from_get_file_info(co_sim, ur, file_meta->file_id, rt);\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+       else\r
+       {\r
+               dbg("RESPONSE NOK");\r
+               dbg("error to get ef[0x%x]", file_meta->file_id);\r
+               dbg("error to get ef[0x%x] (file_meta->file_id) ", file_meta->file_id);\r
+               rt = SIM_ACCESS_FAILED;\r
+\r
+               ur = tcore_user_request_ref(ur);\r
+               _next_from_get_file_info(co_sim, ur, file_meta->file_id, rt);\r
+       }\r
+       dbg(" Function exit");\r
+}\r
+\r
+static void _response_get_file_data(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *resp = data;\r
+       UserRequest *ur = NULL;\r
+       CoreObject *co_sim = NULL;\r
+       struct s_sim_property *file_meta = NULL;\r
+       GSList *tokens=NULL;\r
+       enum tel_sim_access_result rt;\r
+       struct tel_sim_imsi imsi;\r
+       struct tel_sim_ecc ecc;\r
+       struct tel_sim_msisdn msisdn;\r
+       struct tel_sim_opl opl;\r
+       struct tel_sim_pnn pnn;\r
+       gboolean dr = FALSE;\r
+       const char *line = NULL;\r
+       char *res = NULL;\r
+       char *tmp = NULL;\r
+       int res_len;\r
+       int sw1 = 0;\r
+       int sw2 = 0;\r
+\r
+       dbg(" Function entry ");\r
+\r
+       co_sim = tcore_pending_ref_core_object(p);\r
+       ur = tcore_pending_ref_user_request(p);\r
+       file_meta = (struct s_sim_property*)tcore_user_request_ref_metainfo(ur, NULL);\r
+\r
+       if(resp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               if(resp->lines)\r
+               {\r
+                       line = (const char*)resp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       if (g_slist_length(tokens) != 3)\r
+                       {\r
+                               msg("invalid message");\r
+                               tcore_at_tok_free(tokens);\r
+                               return;\r
+                       }\r
+               }\r
+               sw1 = atoi(g_slist_nth_data(tokens, 0));\r
+               sw2 = atoi(g_slist_nth_data(tokens, 1));\r
+               res  = g_slist_nth_data(tokens, 2);\r
+\r
+               res_len = strlen((const char*)res);\r
+               tmp = calloc(1, res_len-1);\r
+               memcpy(tmp, res+1, res_len-2);\r
+               dbg("tmp: %s", tmp);\r
+\r
+               res = util_hexStringToBytes(tmp);\r
+               res_len = strlen((const char*)res);\r
+               dbg("res: %s res_len: %d", res, res_len);\r
+\r
+               if((sw1 == 0x90 && sw2 == 0x00) || sw1 == 0x91)\r
+               {\r
+                       rt = SIM_ACCESS_SUCCESS;\r
+                       file_meta->files.result = rt;\r
+                       dbg("file_meta->file_id : %x", file_meta->file_id);\r
+\r
+                       switch (file_meta->file_id)\r
+                       {\r
+                               case SIM_EF_IMSI:\r
+                               {\r
+                                       dbg("res: %s", res);\r
+                                       dr = tcore_sim_decode_imsi(&imsi, (unsigned char*)res, res_len);\r
+                                       if (dr == FALSE)\r
+                                       {\r
+                                               dbg("imsi decoding failed");\r
+                                       } else\r
+                                       {\r
+                                               _sim_check_identity(co_sim,&imsi);\r
+                                               tcore_sim_set_imsi(co_sim,&imsi);\r
+                                       }\r
+                                       break;\r
+                               }\r
+                               case SIM_EF_ICCID:\r
+                                       dr = tcore_sim_decode_iccid(&file_meta->files.data.iccid, (unsigned char*)res, res_len);\r
+                                       break;\r
+\r
+                               case SIM_EF_ELP:/*  2G EF -  2 bytes decoding*/\r
+                               case SIM_EF_USIM_LI: /* 3G EF - 2 bytes decoding*/\r
+                               case SIM_EF_USIM_PL:/*  3G EF - same as EFELP, so 2  byte decoding*/\r
+                               case SIM_EF_LP:/*  1 byte encoding*/\r
+                                       if (tcore_sim_get_type(co_sim) == SIM_TYPE_GSM && file_meta->file_id == SIM_EF_LP)\r
+                                       {\r
+                                                /*2G LP(0x6F05) has 1 byte for each language*/\r
+                                               dr = tcore_sim_decode_lp(&file_meta->files.data.language, (unsigned char*)res, res_len);\r
+                                       } else\r
+                                       {\r
+                                                /*3G LI(0x6F05)/PL(0x2F05), 2G ELP(0x2F05) has 2 bytes for each language*/\r
+                                               dr = tcore_sim_decode_li(file_meta->file_id, &file_meta->files.data.language, (unsigned char*)res, res_len);\r
+                                       }\r
+                                       break;\r
+                               case SIM_EF_SPN:\r
+                                       dr = tcore_sim_decode_spn(&file_meta->files.data.spn, (unsigned char*)res, res_len);\r
+                                       break;\r
+                               case SIM_EF_SPDI:\r
+                                       dr = tcore_sim_decode_spdi(&file_meta->files.data.spdi, (unsigned char*)res, res_len);\r
+                                       break;\r
+                               case SIM_EF_ECC:\r
+                                       if(tcore_sim_get_type(co_sim) == SIM_TYPE_GSM)\r
+                                       {\r
+                                               dr = tcore_sim_decode_ecc(&file_meta->files.data.ecc, (unsigned char*)res, res_len);\r
+                                       } else if(tcore_sim_get_type(co_sim) == SIM_TYPE_USIM)\r
+                                       {\r
+                                               dbg("decode w/ index [%d]",file_meta->current_index);\r
+                                               memset(&ecc, 0x00, sizeof(struct tel_sim_ecc));\r
+                                               dr = tcore_sim_decode_uecc(&ecc, (unsigned char*)res, res_len);\r
+                                               if (dr == TRUE)\r
+                                               {\r
+                                                       memcpy( &file_meta->files.data.ecc.ecc[file_meta->files.data.ecc.ecc_count], &ecc, sizeof(struct tel_sim_ecc) );\r
+                                                       file_meta->files.data.ecc.ecc_count++;\r
+                                               }\r
+                                       } else\r
+                                       {\r
+                                               dbg("err not handled tcore_sim_get_type(o)[%d] in here",tcore_sim_get_type(co_sim));\r
+                                       }\r
+                                       break;\r
+                               case SIM_EF_MSISDN :\r
+                                       dbg("decode w/ index [%d]",file_meta->current_index);\r
+                                       memset(&msisdn, 0x00, sizeof(struct tel_sim_msisdn));\r
+                                       dr = tcore_sim_decode_msisdn(&msisdn, (unsigned char*)res, res_len);\r
+                                       if (dr == TRUE)\r
+                                       {\r
+                                               memcpy( &file_meta->files.data.msisdn_list.msisdn[file_meta->files.data.msisdn_list.count], &msisdn, sizeof(struct tel_sim_msisdn) );\r
+                                               file_meta->files.data.msisdn_list.count++;\r
+                                       }\r
+                                       break;\r
+                               case SIM_EF_OPL:\r
+                                       dbg("decode w/ index [%d]",file_meta->current_index);\r
+                                       memset(&opl, 0x00, sizeof(struct tel_sim_opl));\r
+                                       dr = tcore_sim_decode_opl(&opl, (unsigned char*)res, res_len);\r
+                                       if (dr == TRUE)\r
+                                       {\r
+                                               memcpy( &file_meta->files.data.opl.opl[file_meta->files.data.opl.opl_count], &opl, sizeof(struct tel_sim_opl) );\r
+                                               file_meta->files.data.opl.opl_count++;\r
+                                       }\r
+                                       break;\r
+                               case SIM_EF_PNN:\r
+                                       dbg("decode w/ index [%d]",file_meta->current_index);\r
+                                       memset(&pnn, 0x00, sizeof(struct tel_sim_pnn));\r
+                                       dr = tcore_sim_decode_pnn(&pnn, (unsigned char*)res, res_len);\r
+                                       if (dr == TRUE)\r
+                                       {\r
+                                               memcpy( &file_meta->files.data.pnn.pnn[file_meta->files.data.pnn.pnn_count], &opl, sizeof(struct tel_sim_pnn) );\r
+                                               file_meta->files.data.pnn.pnn_count++;\r
+                                       }\r
+                                       break;\r
+                               case SIM_EF_OPLMN_ACT:\r
+                                       dr = tcore_sim_decode_oplmnwact(&file_meta->files.data.opwa, (unsigned char*)res, res_len);\r
+                                       break;\r
+                               case SIM_EF_CPHS_CALL_FORWARD_FLAGS:\r
+                                       dr = tcore_sim_decode_cff(&file_meta->files.data.cf, (unsigned char*)res, res_len);\r
+                                       break;\r
+                               case SIM_EF_CPHS_VOICE_MSG_WAITING:\r
+                                       dr = tcore_sim_decode_vmwf(&file_meta->files.data.mw.mw_data_u.cphs_mw, (unsigned char*)res, res_len);\r
+                                       break;\r
+                               case SIM_EF_USIM_MWIS:\r
+                                       dr = tcore_sim_decode_mwis(&file_meta->files.data.mw.mw_data_u.mw, (unsigned char*)res, res_len);\r
+                                       break;\r
+                               case SIM_EF_USIM_CFIS:\r
+                                       dr = tcore_sim_decode_cfis(&file_meta->files.data.cf, (unsigned char*)res, res_len);\r
+                                       break;\r
+                               case SIM_EF_CPHS_SERVICE_STRING_TABLE:\r
+                                       dbg(" not handled -SIM_EF_CPHS_SERVICE_STRING_TABLE ");\r
+                                       break;\r
+                               case SIM_EF_CPHS_OPERATOR_NAME_STRING:\r
+                                       dr = tcore_sim_decode_ons((unsigned char*)&file_meta->files.data.cphs_net.full_name, (unsigned char*)res, res_len);\r
+                                       dbg(" file_meta->files.result[%d],file_meta->files.data.cphs_net.full_name[%s]", file_meta->files.result, file_meta->files.data.cphs_net.full_name);\r
+                                       break;\r
+                               case SIM_EF_CPHS_CPHS_INFO:\r
+                                       dr = tcore_sim_decode_cphs_info(&file_meta->files.data.cphs, (unsigned char*)res, res_len);\r
+                                       break;\r
+                               case SIM_EF_CPHS_OPERATOR_NAME_SHORT_FORM_STRING:\r
+                                       dr = tcore_sim_decode_short_ons((unsigned char*)&file_meta->files.data.cphs_net.short_name, (unsigned char*)res, res_len);\r
+                                       break;\r
+                               default:\r
+                                       dbg("File Decoding Failed - not handled File[0x%x]", file_meta->file_id);\r
+                                       dr = 0;\r
+                                       break;\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       rt =  _decode_status_word(sw1, sw2);\r
+                       file_meta->files.result = rt;\r
+               }\r
+               free(tmp);\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+       else\r
+       {\r
+               dbg("RESPONSE NOK");\r
+               dbg("error to get ef[0x%x]", file_meta->file_id);\r
+               rt = SIM_ACCESS_FAILED;\r
+       }\r
+       ur = tcore_user_request_ref(ur);\r
+       \r
+       dbg("Calling _next_from_get_file_data");\r
+       _next_from_get_file_data(tcore_pending_ref_core_object(p), ur, rt, dr);\r
+       dbg(" Function exit");\r
+}\r
+\r
+static void _on_response_get_retry_count(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *resp = data;\r
+       UserRequest *ur = NULL;\r
+       CoreObject *co_sim = NULL;\r
+       struct s_sim_property *sp = NULL;\r
+       GSList *tokens=NULL;\r
+       const char *line = NULL;\r
+       struct tresp_sim_verify_pins v_pin = {0,};\r
+       struct tresp_sim_verify_puks v_puk = {0,};\r
+       struct tresp_sim_change_pins change_pin = {0,};\r
+       struct tresp_sim_disable_facility dis_facility = {0,};\r
+       struct tresp_sim_enable_facility en_facility = {0,};\r
+       int lock_type = 0;\r
+       int attempts_left = 0;\r
+       int time_penalty = 0;\r
+\r
+       dbg(" Function entry ");\r
+\r
+       co_sim = tcore_pending_ref_core_object(p);\r
+       sp = tcore_sim_ref_userdata(co_sim);\r
+       ur = tcore_pending_ref_user_request(p);\r
+\r
+       if(resp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               if(resp->lines)\r
+               {\r
+                       line = (const char*)resp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       if (g_slist_length(tokens) < 3)\r
+                       {\r
+                               msg("invalid message");\r
+                               tcore_at_tok_free(tokens);\r
+                               return;\r
+                       }\r
+               }\r
+               lock_type = atoi(g_slist_nth_data(tokens, 0));\r
+               attempts_left = atoi(g_slist_nth_data(tokens, 1));\r
+               time_penalty = atoi(g_slist_nth_data(tokens, 2));\r
+\r
+               dbg("lock_type = %d, attempts_left = %d, time_penalty = %d",\r
+               lock_type,attempts_left,time_penalty);\r
+\r
+               switch (sp->current_sec_op)\r
+               {\r
+                       case SEC_PIN1_VERIFY:\r
+                       case SEC_PIN2_VERIFY:\r
+                       case SEC_SIM_VERIFY:\r
+                       case SEC_ADM_VERIFY:\r
+                               v_pin.result = SIM_INCORRECT_PASSWORD;\r
+                               v_pin.pin_type = _sim_get_current_pin_facility(sp->current_sec_op);\r
+                               v_pin.retry_count = attempts_left;\r
+                               tcore_user_request_send_response(ur, _find_resp_command(ur),\r
+                                               sizeof(struct tresp_sim_verify_pins), &v_pin);\r
+                               break;\r
+                       case SEC_PUK1_VERIFY:\r
+                       case SEC_PUK2_VERIFY:\r
+                               v_puk.result = SIM_INCORRECT_PASSWORD;\r
+                               v_puk.pin_type = _sim_get_current_pin_facility(sp->current_sec_op);\r
+                               v_puk.retry_count = attempts_left;\r
+                               tcore_user_request_send_response(ur, _find_resp_command(ur),\r
+                                               sizeof(struct tresp_sim_verify_puks), &v_puk);\r
+                               break;\r
+                       case SEC_PIN1_CHANGE:\r
+                       case SEC_PIN2_CHANGE:\r
+                               change_pin.result = SIM_INCORRECT_PASSWORD;\r
+                               change_pin.pin_type = _sim_get_current_pin_facility(sp->current_sec_op);\r
+                               change_pin.retry_count = attempts_left;\r
+                               tcore_user_request_send_response(ur, _find_resp_command(ur),\r
+                                               sizeof(struct tresp_sim_change_pins), &change_pin);\r
+                               break;\r
+                       case SEC_PIN1_DISABLE:\r
+                       case SEC_PIN2_DISABLE:\r
+                       case SEC_FDN_DISABLE:\r
+                       case SEC_SIM_DISABLE:\r
+                       case SEC_NET_DISABLE:\r
+                       case SEC_NS_DISABLE:\r
+                       case SEC_SP_DISABLE:\r
+                       case SEC_CP_DISABLE:\r
+                               dis_facility.result = SIM_INCORRECT_PASSWORD;\r
+                               dis_facility.type = _sim_get_current_pin_facility(sp->current_sec_op);\r
+                               dis_facility.retry_count = attempts_left;\r
+                               tcore_user_request_send_response(ur, _find_resp_command(ur),\r
+                                               sizeof(struct tresp_sim_disable_facility), &dis_facility);\r
+                               break;\r
+                       case SEC_PIN1_ENABLE:\r
+                       case SEC_PIN2_ENABLE:\r
+                       case SEC_FDN_ENABLE:\r
+                       case SEC_SIM_ENABLE:\r
+                       case SEC_NET_ENABLE:\r
+                       case SEC_NS_ENABLE:\r
+                       case SEC_SP_ENABLE:\r
+                       case SEC_CP_ENABLE:\r
+                               en_facility.result = SIM_INCORRECT_PASSWORD;\r
+                               en_facility.type = _sim_get_current_pin_facility(sp->current_sec_op);\r
+                               en_facility.retry_count =  attempts_left;\r
+                               tcore_user_request_send_response(ur, _find_resp_command(ur),\r
+                                               sizeof(struct tresp_sim_enable_facility), &en_facility);\r
+                               break;\r
+                       default:\r
+                               dbg("not handled sec op[%d]", sp->current_sec_op);\r
+                               break;\r
+               }\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+       dbg(" Function exit");\r
+}\r
+\r
+static gboolean _get_sim_type(CoreObject *o)\r
+{\r
+       TcoreHal* hal= NULL;\r
+       TcoreATRequest *req= NULL;\r
+       TcorePending *pending = NULL;\r
+       UserRequest *ur = NULL;\r
+       char *cmd_str = NULL;\r
+\r
+       dbg(" Function entry ");\r
+\r
+       hal = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+\r
+       cmd_str = g_strdup_printf("AT+XUICC?");\r
+       req = tcore_at_request_new(cmd_str, "+XUICC:", TCORE_AT_SINGLELINE);\r
+\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       tcore_pending_set_response_callback(pending, _response_get_sim_type, hal);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       free(cmd_str);\r
+       dbg(" Function exit");\r
+       return TRUE;\r
+}\r
+\r
+static TReturn _get_file_info(CoreObject *o, UserRequest *ur, const enum tel_sim_file_id ef)\r
+{\r
+       TcoreHal* hal= NULL;\r
+       TcorePending *pending = NULL;\r
+       struct s_sim_property file_meta={0,};\r
+       char *cmd_str = NULL;\r
+       int trt = 0;\r
+\r
+       dbg(" Function entry ");\r
+\r
+       file_meta.file_id = ef;\r
+       dbg("file_meta.file_id: %d", file_meta.file_id);\r
+       hal = tcore_object_get_hal(o);\r
+       dbg("hal: %x", hal);\r
+       pending = tcore_pending_new(o, 0);\r
+\r
+       trt = tcore_user_request_set_metainfo(ur, sizeof(struct s_sim_property), &file_meta);\r
+       dbg("trt[%d]",trt);\r
+       cmd_str = g_strdup_printf("AT+CRSM=192, %d", ef);                       /*command - 192 : GET RESPONSE*/\r
+       dbg("cmd_str: %x", cmd_str);\r
+\r
+       pending = tcore_at_pending_new(o, cmd_str, "+CRSM:", TCORE_AT_SINGLELINE, _response_get_file_info, NULL);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       free(cmd_str);\r
+       dbg(" Function exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static gboolean _get_file_data(CoreObject *o, UserRequest *ur, const enum tel_sim_file_id ef, const int offset, const int length)\r
+{\r
+       TcoreHal* hal= NULL;\r
+       TcoreATRequest *req= NULL;\r
+       TcorePending *pending = NULL;\r
+       char *cmd_str = NULL;\r
+       int p1 = 0;\r
+       int p2 = 0;\r
+       int p3 = 0;\r
+\r
+       dbg(" Function entry ");\r
+       hal = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+\r
+       dbg("file_id: %x", ef);\r
+\r
+       p1 = (unsigned char)(offset & 0xFF00) >> 8;\r
+       p2 = (unsigned char)offset & 0x00FF; //offset low\r
+       p3 = (unsigned char)length;\r
+\r
+       cmd_str = g_strdup_printf("AT+CRSM=176, %d, %d, %d, %d", ef,p1,p2,p3);                  /*command - 176 : READ BINARY*/\r
+\r
+       req = tcore_at_request_new(cmd_str, "+CRSM:", TCORE_AT_SINGLELINE);\r
+\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       tcore_pending_set_response_callback(pending, _response_get_file_data, hal);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);\r
+\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       free(cmd_str);\r
+       dbg(" Function exit");\r
+       return TRUE;\r
+}\r
+\r
+static gboolean _get_file_record(CoreObject *o, UserRequest *ur, const enum tel_sim_file_id ef, const int index, const int length)\r
+{\r
+\r
+       TcoreHal* hal= NULL;\r
+       TcoreATRequest *req= NULL;\r
+       TcorePending *pending = NULL;\r
+       char *cmd_str = NULL;\r
+       int p1 = 0;\r
+       int p2 = 0;\r
+       int p3 = 0;\r
+       dbg(" Function entry ");\r
+\r
+       hal = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+\r
+       p1 = (unsigned char)index;\r
+       p2 = (unsigned char)0x04;               /* 0x4 for absolute mode  */\r
+       p3 = (unsigned char)length;\r
+\r
+       cmd_str = g_strdup_printf("AT+CRSM=178, %d, %d, %d, %d", ef,p1,p2,p3);                  /*command - 178 : READ RECORD*/\r
+\r
+       req = tcore_at_request_new(cmd_str, "+CRSM:", TCORE_AT_SINGLELINE);\r
+\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       tcore_pending_set_response_callback(pending, _response_get_file_data, hal);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);\r
+\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       free(cmd_str);\r
+       dbg(" Function exit");\r
+       return TRUE;\r
+}\r
+\r
+static TReturn _get_retry_count(CoreObject *o, UserRequest *ur)\r
+{\r
+       TcoreHal* hal= NULL;\r
+       TcoreATRequest *req= NULL;\r
+       TcorePending *pending = NULL;\r
+       char *cmd_str = NULL;\r
+       int     lock_type = 0;\r
+       struct s_sim_property *sp = NULL;\r
+       const struct treq_sim_get_lock_info *req_data= NULL;\r
+\r
+       dbg(" Function entry ");\r
+\r
+       hal = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+       req_data = tcore_user_request_ref_data(ur, NULL);\r
+       sp = tcore_sim_ref_userdata(o);\r
+\r
+       switch (sp->current_sec_op)\r
+       {\r
+               case SEC_PIN1_VERIFY:\r
+               case SEC_PIN1_CHANGE:\r
+               case SEC_PIN1_ENABLE:\r
+               case SEC_PIN1_DISABLE:\r
+                       lock_type = 1;\r
+                       break;\r
+               case SEC_PIN2_VERIFY:\r
+               case SEC_PIN2_CHANGE:\r
+               case SEC_PIN2_ENABLE:\r
+               case SEC_PIN2_DISABLE:\r
+               case SEC_FDN_ENABLE:\r
+               case SEC_FDN_DISABLE:\r
+                       lock_type = 2;\r
+                       break;\r
+               case SEC_PUK1_VERIFY:\r
+                       lock_type = 3;\r
+                       break;\r
+               case SEC_PUK2_VERIFY:\r
+                       lock_type = 4;\r
+                       break;\r
+               case SEC_NET_ENABLE:\r
+               case SEC_NET_DISABLE:\r
+                       lock_type = 5;\r
+                       break;\r
+               case SEC_NS_ENABLE:\r
+               case SEC_NS_DISABLE:\r
+                       lock_type = 6;\r
+                       break;\r
+               case SEC_SP_ENABLE:\r
+               case SEC_SP_DISABLE:\r
+                       lock_type = 7;\r
+                       break;\r
+               case SEC_CP_ENABLE:\r
+               case SEC_CP_DISABLE:\r
+                       lock_type = 8;\r
+                       break;\r
+               case SEC_ADM_VERIFY:\r
+                       lock_type = 9;\r
+                       break;\r
+               default:\r
+                       break;\r
+       }\r
+\r
+       cmd_str = g_strdup_printf("AT+XPINCNT=%d", lock_type);\r
+       req = tcore_at_request_new(cmd_str, "+XPINCNT:", TCORE_AT_SINGLELINE);\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       tcore_pending_set_response_callback(pending, _on_response_get_retry_count, hal);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       free(cmd_str);\r
+       dbg(" Function exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+\r
+static gboolean on_event_facility_lock_status(CoreObject *o, const void *event_info, void *user_data)\r
+{\r
+       struct s_sim_property *sp = NULL;\r
+       char *line = NULL;\r
+       GSList *tokens=NULL;\r
+       GSList *lines = NULL;\r
+\r
+       dbg("Function entry");\r
+       return TRUE;\r
+\r
+       sp = tcore_sim_ref_userdata(o);\r
+       lines = (GSList*)event_info;\r
+       if (1 != g_slist_length(lines))\r
+       {\r
+               dbg("unsolicited msg but multiple line");\r
+               goto OUT;\r
+       }\r
+       line  = (char*)(lines->data);\r
+       tokens = tcore_at_tok_new(line);\r
+       if (g_slist_length(tokens) != 1)\r
+       {\r
+               msg("invalid message");\r
+               tcore_at_tok_free(tokens);\r
+               return TRUE;\r
+       }\r
+\r
+OUT:\r
+       dbg(" Function exit");\r
+       if(NULL!=tokens)\r
+               tcore_at_tok_free(tokens);\r
+       return TRUE;\r
+}\r
+\r
+\r
+static gboolean on_event_pin_status(CoreObject *o, const void *event_info, void *user_data)\r
+{\r
+       UserRequest *ur = NULL;\r
+       struct s_sim_property *sp = NULL;\r
+       enum tel_sim_status sim_status = SIM_STATUS_INITIALIZING;\r
+       GSList *tokens=NULL;\r
+       GSList *lines = NULL;\r
+       const char *line = NULL;\r
+       int sim_state = 0;\r
+\r
+       dbg(" Function entry ");\r
+\r
+       sp = tcore_sim_ref_userdata(o);\r
+\r
+       lines = (GSList*)event_info;\r
+       if (1 != g_slist_length(lines))\r
+       {\r
+               dbg("unsolicited msg but multiple line");\r
+               goto OUT;\r
+       }\r
+       line  = (char*)(lines->data);\r
+\r
+       tokens = tcore_at_tok_new(line);\r
+       if (g_slist_length(tokens) != 1)\r
+       {\r
+               msg("invalid message");\r
+               tcore_at_tok_free(tokens);\r
+               return TRUE;\r
+       }\r
+       sim_state = atoi(g_slist_nth_data(tokens, 0));\r
+\r
+       switch (sim_state)\r
+       {\r
+               case 0:                                                                                                         //sim state = SIM not present\r
+                       sim_status = SIM_STATUS_CARD_NOT_PRESENT;\r
+                       dbg( "NO SIM");\r
+                       break;\r
+               case 1:                                                                                                         //sim state = PIN verification needed\r
+                       sim_status = SIM_STATUS_PIN_REQUIRED;\r
+                       dbg( " PIN required");\r
+                       break;\r
+               case 2:                                                                                                         //sim state = PIN verification not needed \96 Ready\r
+               case 3:                                                                                                         //sim state = PIN verified \96 Ready\r
+                       sim_status = SIM_STATUS_INITIALIZING;\r
+                       dbg(" Inside PIN disabled at BOOT UP");\r
+                       break;\r
+               case 4:                                                                                                         //sim state = PUK verification needed\r
+                       sim_status = SIM_STATUS_PUK_REQUIRED;\r
+                       dbg(" PUK required");\r
+                       break;\r
+               case 5:                                                                                                         //sim state = SIM permanently blocked\r
+                       sim_status = SIM_STATUS_CARD_BLOCKED;\r
+                       dbg(" Card permanently blocked");\r
+                       break;\r
+               case 6:                                                                                                         //sim state = SIM error\r
+                       sim_status = SIM_STATUS_CARD_ERROR;\r
+                       dbg( "SIM card error ");\r
+                       break;\r
+               case 7:                                                                                                         //sim state = ready for attach (+COPS)\r
+                       sim_status = SIM_STATUS_INIT_COMPLETED;\r
+                       dbg( "Modem init completed");\r
+                       break;\r
+               case 8:                                                                                                         //sim state = SIM Technical Problem\r
+                       sim_status = SIM_STATUS_CARD_ERROR;\r
+                       dbg( "SIM unavailable");\r
+                       break;\r
+               case 9:                                                                                                         //sim state = SIM removed\r
+                       sim_status = SIM_STATUS_CARD_REMOVED;\r
+                       dbg( "SIM removed");\r
+                       break;\r
+               case 99:                                                                                                                //sim state = SIM State Unknown\r
+                       sim_status = SIM_STATUS_UNKNOWN;\r
+                       dbg( "SIM State Unknown");\r
+                       break;\r
+               case 12:\r
+                       dbg( "SIM Status : %d", sim_status);\r
+                       goto OUT;\r
+               default:\r
+                       dbg(" not handled SEC lock type ");\r
+                       break;\r
+       }\r
+\r
+       switch (sim_status)\r
+       {\r
+               case SIM_STATUS_INIT_COMPLETED:\r
+                       ur = tcore_user_request_new(NULL, NULL); //this is for using ur metainfo set/ref functionality.\r
+                       _get_file_info(o, ur, SIM_EF_IMSI);\r
+                       break;\r
+               case SIM_STATUS_INITIALIZING:\r
+               case SIM_STATUS_PIN_REQUIRED:\r
+               case SIM_STATUS_PUK_REQUIRED:\r
+               case SIM_STATUS_CARD_BLOCKED:\r
+               case SIM_STATUS_NCK_REQUIRED:\r
+               case SIM_STATUS_NSCK_REQUIRED:\r
+               case SIM_STATUS_SPCK_REQUIRED:\r
+               case SIM_STATUS_CCK_REQUIRED:\r
+               case SIM_STATUS_LOCK_REQUIRED:\r
+                       if( sp->first_recv_status == SIM_STATUS_UNKNOWN )\r
+                       {\r
+                               dbg("first received sim status[%d]",sim_status);\r
+                               sp->first_recv_status = sim_status;\r
+                               _get_sim_type(o);\r
+                       } else {\r
+                               dbg("second or later received lock status[%d]",sim_status);\r
+                               if ( tcore_sim_get_status(o) != SIM_STATUS_INIT_COMPLETED )\r
+                               {\r
+                                       dbg("sim is not init complete in telephony side yet");\r
+                                       _sim_status_update(o,sim_status);\r
+                               }\r
+                       }\r
+                       break;\r
+               case SIM_STATUS_CARD_REMOVED:\r
+               case SIM_STATUS_CARD_NOT_PRESENT:\r
+               case SIM_STATUS_CARD_ERROR:\r
+                       if (sim_status == SIM_STATUS_CARD_NOT_PRESENT && tcore_sim_get_status(o) != SIM_STATUS_UNKNOWN)\r
+                       {\r
+                               dbg("[SIM]SIM CARD REMOVED!!");\r
+                               sim_status = SIM_STATUS_CARD_REMOVED;\r
+                       }\r
+                       _sim_status_update(o,sim_status);\r
+                       break;\r
+               default:\r
+                       dbg("not handled status[%d]", sim_status);\r
+\r
+                       break;\r
+               }\r
+OUT:\r
+       dbg(" Function exit");\r
+       if(NULL!=tokens)\r
+               tcore_at_tok_free(tokens);\r
+       return TRUE;\r
+}\r
+\r
+\r
+\r
+static void on_response_verify_pins(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *resp = data;\r
+       UserRequest *ur = NULL;\r
+       CoreObject *co_sim = NULL;\r
+       struct s_sim_property *sp = NULL;\r
+       GSList *tokens=NULL;\r
+       struct tresp_sim_verify_pins res;\r
+       GQueue *queue= NULL;\r
+       const char *line;\r
+       int err;\r
+\r
+       dbg(" Function entry ");\r
+\r
+       co_sim = tcore_pending_ref_core_object(p);\r
+       sp = tcore_sim_ref_userdata(co_sim);\r
+       ur = tcore_pending_ref_user_request(p);\r
+\r
+       memset(&res, 0, sizeof(struct tresp_sim_verify_pins));\r
+\r
+       if(resp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               res.result = SIM_PIN_OPERATION_SUCCESS;\r
+               res.pin_type = _sim_get_current_pin_facility(sp->current_sec_op);\r
+               if (res.pin_type == SIM_PTYPE_PIN1 || res.pin_type == SIM_PTYPE_SIM)\r
+               {\r
+                       if (tcore_sim_get_status(co_sim) != SIM_STATUS_INIT_COMPLETED)\r
+                               _sim_status_update(co_sim, SIM_STATUS_INITIALIZING);\r
+               }\r
+               tcore_user_request_send_response(ur, TRESP_SIM_VERIFY_PINS,     sizeof(struct tresp_sim_verify_pins), &res);\r
+       }\r
+       else\r
+       {\r
+               dbg("RESPONSE NOK");\r
+               line = (const char*)resp->final_response;\r
+               tokens = tcore_at_tok_new(line);\r
+               if (g_slist_length(tokens) < 1)\r
+               {\r
+                       dbg("err cause not specified or string corrupted");\r
+                   res.result = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               else\r
+               {\r
+                       err = atoi(g_slist_nth_data(tokens, 0));\r
+                       dbg("on_response_verify_pins: err = %d", err);\r
+                       queue = tcore_object_ref_user_data(co_sim);\r
+                       ur = tcore_user_request_ref(ur);\r
+                       _get_retry_count(co_sim, ur);\r
+               }\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+       dbg(" Function exit");\r
+}\r
+\r
+static void on_response_verify_puks(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *resp = data;\r
+       UserRequest *ur = NULL;\r
+       CoreObject *co_sim = NULL;\r
+       struct s_sim_property *sp = NULL;\r
+       GSList *tokens=NULL;\r
+       struct tresp_sim_verify_puks res;\r
+       GQueue *queue= NULL;\r
+       const char *line;\r
+       int err;\r
+\r
+       dbg(" Function entry ");\r
+\r
+       co_sim = tcore_pending_ref_core_object(p);\r
+       sp = tcore_sim_ref_userdata(co_sim);\r
+       ur = tcore_pending_ref_user_request(p);\r
+\r
+       memset(&res, 0, sizeof(struct tresp_sim_verify_pins));\r
+\r
+       if(resp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               res.result = SIM_PIN_OPERATION_SUCCESS;\r
+               res.pin_type = _sim_get_current_pin_facility(sp->current_sec_op);\r
+               tcore_user_request_send_response(ur, TRESP_SIM_VERIFY_PUKS,     sizeof(struct tresp_sim_verify_pins), &res);\r
+       }\r
+       else\r
+       {\r
+               dbg("RESPONSE NOK");\r
+               line = (const char*)resp->final_response;\r
+               tokens = tcore_at_tok_new(line);\r
+\r
+               if (g_slist_length(tokens) < 1)\r
+               {\r
+                       dbg("err cause not specified or string corrupted");\r
+                   res.result = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               else\r
+               {\r
+                       err = atoi(g_slist_nth_data(tokens, 0));\r
+                       queue = tcore_object_ref_user_data(co_sim);\r
+                       ur = tcore_user_request_ref(ur);\r
+                       _get_retry_count(co_sim, ur);\r
+               }\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+       dbg(" Function exit");\r
+}\r
+\r
+static void on_response_change_pins(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *resp = data;\r
+       UserRequest *ur = NULL;\r
+       CoreObject *co_sim = NULL;\r
+       struct s_sim_property *sp = NULL;\r
+       GSList *tokens=NULL;\r
+       struct tresp_sim_change_pins res;\r
+       GQueue *queue;\r
+       const char *line;\r
+       int err;\r
+\r
+       dbg(" Function entry ");\r
+\r
+       co_sim = tcore_pending_ref_core_object(p);\r
+       sp = tcore_sim_ref_userdata(co_sim);\r
+       ur = tcore_pending_ref_user_request(p);\r
+\r
+       memset(&res, 0, sizeof(struct tresp_sim_change_pins));\r
+\r
+       if(resp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               res.result = SIM_PIN_OPERATION_SUCCESS;\r
+               res.pin_type = _sim_get_current_pin_facility(sp->current_sec_op);\r
+               tcore_user_request_send_response(ur, TRESP_SIM_CHANGE_PINS,sizeof(struct tresp_sim_change_pins), &res);\r
+       }\r
+       else\r
+       {\r
+               dbg("RESPONSE NOK");\r
+               line = (const char*)resp->final_response;\r
+               tokens = tcore_at_tok_new(line);\r
+\r
+               if (g_slist_length(tokens) < 1)\r
+               {\r
+                       dbg("err cause not specified or string corrupted");\r
+                   res.result = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               else\r
+               {\r
+                       err = atoi(g_slist_nth_data(tokens, 0));\r
+                       queue = tcore_object_ref_user_data(co_sim);\r
+                       ur = tcore_user_request_ref(ur);\r
+                       _get_retry_count(co_sim, ur);\r
+               }\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+       dbg(" Function exit");\r
+}\r
+\r
+static void on_response_get_facility_status(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *resp = data;\r
+       UserRequest *ur = NULL;\r
+       CoreObject *co_sim = NULL;\r
+       struct s_sim_property *sp = NULL;\r
+       GSList *tokens=NULL;\r
+       struct tresp_sim_get_facility_status res;\r
+       const char *line;\r
+\r
+       dbg(" Function entry ");\r
+\r
+       co_sim = tcore_pending_ref_core_object(p);\r
+       sp = tcore_sim_ref_userdata(co_sim);\r
+       ur = tcore_pending_ref_user_request(p);\r
+\r
+       memset(&res, 0, sizeof(struct tresp_sim_get_facility_status));\r
+\r
+       res.result = SIM_PIN_OPERATION_SUCCESS;\r
+       res.type = _sim_get_current_pin_facility(sp->current_sec_op);\r
+\r
+       if(resp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               if(resp->lines) {\r
+                       line = (const char*)resp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       if (g_slist_length(tokens) != 1)\r
+                       {\r
+                               msg("invalid message");\r
+                               tcore_at_tok_free(tokens);\r
+                               return;\r
+                       }\r
+               }\r
+               res.b_enable = atoi(g_slist_nth_data(tokens, 0));\r
+\r
+       }\r
+       else\r
+       {\r
+               dbg("RESPONSE NOK");\r
+               res.result = SIM_INCOMPATIBLE_PIN_OPERATION;\r
+       }\r
+\r
+       if (ur)\r
+       {\r
+               tcore_user_request_send_response(ur, TRESP_SIM_GET_FACILITY_STATUS,\r
+                               sizeof(struct tresp_sim_get_facility_status), &res);\r
+       }\r
+       tcore_at_tok_free(tokens);\r
+       dbg(" Function exit");\r
+}\r
+\r
+static void on_response_enable_facility(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *resp = data;\r
+       UserRequest *ur = NULL;\r
+       CoreObject *co_sim = NULL;\r
+       struct s_sim_property *sp = NULL;\r
+       GSList *tokens=NULL;\r
+       struct tresp_sim_enable_facility res;\r
+       GQueue *queue;\r
+       const char *line;\r
+\r
+       dbg(" Function entry ");\r
+\r
+       co_sim = tcore_pending_ref_core_object(p);\r
+       sp = tcore_sim_ref_userdata(co_sim);\r
+       ur = tcore_pending_ref_user_request(p);\r
+\r
+       memset(&res, 0, sizeof(struct tresp_sim_enable_facility));\r
+\r
+       res.result = SIM_PIN_OPERATION_SUCCESS;\r
+       res.type = _sim_get_current_pin_facility(sp->current_sec_op);\r
+\r
+       if(resp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               if(resp->lines)\r
+               {\r
+                       line = (const char*)resp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       if (g_slist_length(tokens) != 1)\r
+                       {\r
+                               msg("invalid message");\r
+                               tcore_at_tok_free(tokens);\r
+                               return;\r
+                       }\r
+               }\r
+               res.result = SIM_PIN_OPERATION_SUCCESS;\r
+               if (ur)\r
+               {\r
+                       tcore_user_request_send_response(ur, TRESP_SIM_ENABLE_FACILITY,\r
+                               sizeof(struct tresp_sim_enable_facility), &res);\r
+               }\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+       else\r
+       {\r
+               dbg("RESPONSE NOK");\r
+               queue = tcore_object_ref_user_data(co_sim);\r
+               ur = tcore_user_request_ref(ur);\r
+               _get_retry_count(co_sim, ur);\r
+       }\r
+       dbg(" Function exit");\r
+}\r
+\r
+static void on_response_disable_facility(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *resp = data;\r
+       UserRequest *ur = NULL;\r
+       CoreObject *co_sim = NULL;\r
+       struct s_sim_property *sp = NULL;\r
+       GSList *tokens=NULL;\r
+       struct tresp_sim_disable_facility res;\r
+       GQueue *queue;\r
+       const char *line;\r
+\r
+       dbg(" Function entry ");\r
+\r
+       co_sim = tcore_pending_ref_core_object(p);\r
+       sp = tcore_sim_ref_userdata(co_sim);\r
+       ur = tcore_pending_ref_user_request(p);\r
+\r
+       memset(&res, 0, sizeof(struct tresp_sim_disable_facility));\r
+\r
+       res.result = SIM_PIN_OPERATION_SUCCESS;\r
+       res.type = _sim_get_current_pin_facility(sp->current_sec_op);\r
+\r
+       if(resp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               if(resp->lines) {\r
+                       line = (const char*)resp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       if (g_slist_length(tokens) != 1)\r
+                       {\r
+                               msg("invalid message");\r
+                               tcore_at_tok_free(tokens);\r
+                               return;\r
+                       }\r
+               }\r
+               res.result = SIM_PIN_OPERATION_SUCCESS;\r
+               if (ur)\r
+               {\r
+                       tcore_user_request_send_response(ur, TRESP_SIM_DISABLE_FACILITY,\r
+                               sizeof(struct tresp_sim_disable_facility), &res);\r
+               }\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+       else\r
+       {\r
+               dbg("RESPONSE NOK");\r
+               queue = tcore_object_ref_user_data(co_sim);\r
+               ur = tcore_user_request_ref(ur);\r
+               _get_retry_count(co_sim, ur);\r
+       }\r
+       dbg(" Function exit");\r
+}\r
+\r
+static void on_response_get_lock_info(TcorePending *   p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *resp = data;\r
+       UserRequest *ur = NULL;\r
+       CoreObject *co_sim = NULL;\r
+       struct s_sim_property *sp = NULL;\r
+       GSList *tokens=NULL;\r
+       const char *line;\r
+       struct tresp_sim_verify_pins v_pin = {0,};\r
+       struct tresp_sim_verify_puks v_puk = {0,};\r
+       struct tresp_sim_change_pins change_pin = {0,};\r
+       struct tresp_sim_disable_facility dis_facility = {0,};\r
+       struct tresp_sim_enable_facility en_facility = {0,};\r
+       int lock_type;\r
+       int attempts_left = 0;\r
+       int time_penalty = 0;\r
+\r
+       dbg(" Function entry ");\r
+\r
+       co_sim = tcore_pending_ref_core_object(p);\r
+       sp = tcore_sim_ref_userdata(co_sim);\r
+       ur = tcore_pending_ref_user_request(p);\r
+\r
+       if(resp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               if(resp->lines) {\r
+                       line = (const char*)resp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       if (g_slist_length(tokens) != 3)\r
+                       {\r
+                               msg("invalid message");\r
+                               tcore_at_tok_free(tokens);\r
+                               return;\r
+                       }\r
+               }\r
+               lock_type = atoi(g_slist_nth_data(tokens, 0));\r
+               attempts_left = atoi(g_slist_nth_data(tokens, 1));\r
+               time_penalty = atoi(g_slist_nth_data(tokens, 2));\r
+\r
+               switch (sp->current_sec_op)\r
+               {\r
+                       case SEC_PIN1_VERIFY:\r
+                       case SEC_PIN2_VERIFY:\r
+                       case SEC_SIM_VERIFY:\r
+                       case SEC_ADM_VERIFY:\r
+                               v_pin.result = SIM_INCORRECT_PASSWORD;\r
+                               v_pin.pin_type = _sim_get_current_pin_facility(sp->current_sec_op);\r
+                               v_pin.retry_count = attempts_left;\r
+                               tcore_user_request_send_response(ur, _find_resp_command(ur),\r
+                                               sizeof(struct tresp_sim_verify_pins), &v_pin);\r
+                               break;\r
+                       case SEC_PUK1_VERIFY:\r
+                       case SEC_PUK2_VERIFY:\r
+                               v_puk.result = SIM_INCORRECT_PASSWORD;\r
+                               v_puk.pin_type = _sim_get_current_pin_facility(sp->current_sec_op);\r
+                               v_puk.retry_count = attempts_left;\r
+                               tcore_user_request_send_response(ur, _find_resp_command(ur),\r
+                                               sizeof(struct tresp_sim_verify_puks), &v_puk);\r
+                               break;\r
+                       case SEC_PIN1_CHANGE:\r
+                       case SEC_PIN2_CHANGE:\r
+                               change_pin.result = SIM_INCORRECT_PASSWORD;\r
+                               change_pin.pin_type = _sim_get_current_pin_facility(sp->current_sec_op);\r
+                               change_pin.retry_count = attempts_left;\r
+                               tcore_user_request_send_response(ur, _find_resp_command(ur),\r
+                                               sizeof(struct tresp_sim_change_pins), &change_pin);\r
+                               break;\r
+                       case SEC_PIN1_DISABLE:\r
+                       case SEC_PIN2_DISABLE:\r
+                       case SEC_FDN_DISABLE:\r
+                       case SEC_SIM_DISABLE:\r
+                       case SEC_NET_DISABLE:\r
+                       case SEC_NS_DISABLE:\r
+                       case SEC_SP_DISABLE:\r
+                       case SEC_CP_DISABLE:\r
+                               dis_facility.result = SIM_INCORRECT_PASSWORD;\r
+                               dis_facility.type = _sim_get_current_pin_facility(sp->current_sec_op);\r
+                               dis_facility.retry_count = attempts_left;\r
+                               tcore_user_request_send_response(ur, _find_resp_command(ur),\r
+                                               sizeof(struct tresp_sim_disable_facility), &dis_facility);\r
+                               break;\r
+                       case SEC_PIN1_ENABLE:\r
+                       case SEC_PIN2_ENABLE:\r
+                       case SEC_FDN_ENABLE:\r
+                       case SEC_SIM_ENABLE:\r
+                       case SEC_NET_ENABLE:\r
+                       case SEC_NS_ENABLE:\r
+                       case SEC_SP_ENABLE:\r
+                       case SEC_CP_ENABLE:\r
+                               en_facility.result = SIM_INCORRECT_PASSWORD;\r
+                               en_facility.type = _sim_get_current_pin_facility(sp->current_sec_op);\r
+                               en_facility.retry_count = attempts_left;\r
+                               tcore_user_request_send_response(ur, _find_resp_command(ur),\r
+                                               sizeof(struct tresp_sim_enable_facility), &en_facility);\r
+                               break;\r
+                       default:\r
+                               dbg("not handled sec op[%d]", sp->current_sec_op);\r
+                               break;\r
+               }\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+       dbg(" Function exit");\r
+}\r
+\r
+static void on_response_update_file(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *resp = data;\r
+       UserRequest *ur = NULL;\r
+       CoreObject *co_sim = NULL;\r
+       struct tresp_sim_set_callforwarding resp_cf = {0, };\r
+       struct tresp_sim_set_language resp_language ={0,};\r
+       struct s_sim_property *sp = NULL;\r
+       GSList *tokens=NULL;\r
+       enum tel_sim_access_result result;\r
+       const char *line;\r
+       int sw1 = 0;\r
+       int sw2 = 0;\r
+\r
+       dbg(" Function entry ");\r
+\r
+       co_sim = tcore_pending_ref_core_object(p);\r
+       sp = tcore_sim_ref_userdata(co_sim);\r
+       ur = tcore_pending_ref_user_request(p);\r
+\r
+       if(resp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               if(resp->lines)\r
+               {\r
+                       line = (const char*)resp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       if (g_slist_length(tokens) != 2)\r
+                       {\r
+                               msg("invalid message");\r
+                               tcore_at_tok_free(tokens);\r
+                               return;\r
+                       }\r
+               }\r
+               sw1 = atoi(g_slist_nth_data(tokens, 0));\r
+               sw2 = atoi(g_slist_nth_data(tokens, 1));\r
+\r
+               if((sw1 == 0x90 && sw2 == 0x00) ||sw1 == 0x91)\r
+               {\r
+                       result = SIM_ACCESS_SUCCESS;\r
+               }else\r
+               {\r
+                       result =  _decode_status_word(sw1, sw2);\r
+               }\r
+       }else{\r
+               dbg("RESPONSE NOK");\r
+               result = SIM_ACCESS_FAILED;\r
+       }\r
+\r
+       switch(sp->file_id)\r
+       {\r
+               case SIM_EF_CPHS_CALL_FORWARD_FLAGS :\r
+               case SIM_EF_USIM_CFIS :\r
+                       tcore_user_request_send_response(ur, _find_resp_command(ur), sizeof(struct tresp_sim_set_callforwarding), &resp_cf);\r
+                       break;\r
+               case SIM_EF_ELP:\r
+               case SIM_EF_LP:\r
+               case SIM_EF_USIM_LI:\r
+               case SIM_EF_USIM_PL:\r
+                       tcore_user_request_send_response(ur, _find_resp_command(ur), sizeof(struct tresp_sim_set_language), &resp_language);\r
+                       break;\r
+               default:\r
+                       break;\r
+       }\r
+       tcore_at_tok_free(tokens);\r
+       dbg(" Function exit");\r
+}\r
+\r
+static void on_response_transmit_apdu(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *resp = data;\r
+       UserRequest *ur = NULL;\r
+       CoreObject *co_sim = NULL;\r
+       struct s_sim_property *sp = NULL;\r
+       GSList *tokens=NULL;\r
+       struct tresp_sim_transmit_apdu res;\r
+       const char *line;\r
+\r
+       dbg(" Function entry ");\r
+\r
+       co_sim = tcore_pending_ref_core_object(p);\r
+       sp = tcore_sim_ref_userdata(co_sim);\r
+       ur = tcore_pending_ref_user_request(p);\r
+\r
+       memset(&res, 0, sizeof(struct tresp_sim_transmit_apdu));\r
+\r
+       if(resp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               res.result = SIM_ACCESS_SUCCESS;\r
+               if(resp->lines)\r
+               {\r
+                       line = (const char*)resp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       if (g_slist_length(tokens) != 2)\r
+                       {\r
+                               msg("invalid message");\r
+                               tcore_at_tok_free(tokens);\r
+                               return;\r
+                       }\r
+               }\r
+               res.apdu_resp_length = atoi(g_slist_nth_data(tokens, 0));\r
+               strncpy((char *)res.apdu_resp, (const char *)g_slist_nth_data(tokens, 1), res.apdu_resp_length);\r
+       }\r
+       else\r
+       {\r
+               dbg("RESPONSE NOK");\r
+               res.result = SIM_ACCESS_FAILED;\r
+       }\r
+       ur = tcore_pending_ref_user_request(p);\r
+       if (ur)\r
+       {\r
+               tcore_user_request_send_response(ur, _find_resp_command(ur), sizeof(struct tresp_sim_transmit_apdu), &res);\r
+       }\r
+       tcore_at_tok_free(tokens);\r
+       dbg(" Function exit");\r
+}\r
+\r
+static TReturn s_verify_pins(CoreObject *o, UserRequest *ur)\r
+{\r
+       TcoreHal* hal= NULL;\r
+       TcoreATRequest *req = NULL;\r
+       TcorePending *pending = NULL;\r
+       char *cmd_str = NULL;\r
+       const struct treq_sim_verify_pins *req_data = NULL;\r
+       struct s_sim_property *sp = NULL;\r
+\r
+       dbg(" Function entry ");\r
+\r
+       hal = tcore_object_get_hal(o);\r
+       sp = tcore_sim_ref_userdata(o);\r
+       pending = tcore_pending_new(o, 0);\r
+       req_data = tcore_user_request_ref_data(ur, NULL);\r
+\r
+       if (!o || !ur)\r
+               return TCORE_RETURN_EINVAL;\r
+\r
+       if (req_data->pin_type == SIM_PTYPE_PIN1)\r
+       {\r
+               sp->current_sec_op = SEC_PIN1_VERIFY;\r
+               cmd_str = g_strdup_printf("AT+CPIN=\"%s\"", req_data->pin);\r
+       }\r
+       else if (req_data->pin_type == SIM_PTYPE_PIN2)\r
+       {\r
+               sp->current_sec_op = SEC_PIN2_VERIFY;\r
+               cmd_str = g_strdup_printf("AT+CPIN2=\"%s\"", req_data->pin);\r
+       }\r
+       else if (req_data->pin_type == SIM_PTYPE_SIM)\r
+       {\r
+               sp->current_sec_op = SEC_SIM_VERIFY;\r
+               cmd_str = g_strdup_printf("AT+CPIN=\"%s\"", req_data->pin);\r
+       }\r
+       else if (req_data->pin_type == SIM_PTYPE_ADM)\r
+       {\r
+               sp->current_sec_op = SEC_ADM_VERIFY;\r
+               cmd_str = g_strdup_printf("AT+CPIN=\"%s\"", req_data->pin);\r
+       }\r
+       else\r
+       {\r
+               return TCORE_RETURN_EINVAL;\r
+       }\r
+\r
+       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);\r
+\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       tcore_pending_set_response_callback(pending, on_response_verify_pins, hal);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       free(cmd_str);\r
+       dbg(" Function exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_verify_puks(CoreObject *o, UserRequest *ur)\r
+{\r
+       TcoreHal* hal= NULL;\r
+       TcoreATRequest *req= NULL;\r
+       TcorePending *pending = NULL;\r
+       char *cmd_str = NULL;\r
+       const struct treq_sim_verify_puks *req_data;\r
+       struct s_sim_property *sp = NULL;\r
+\r
+       dbg(" Function entry ");\r
+\r
+       hal = tcore_object_get_hal(o);\r
+       sp = tcore_sim_ref_userdata(o);\r
+       pending = tcore_pending_new(o, 0);\r
+       req_data = tcore_user_request_ref_data(ur, NULL);\r
+\r
+       if (!o || !ur)\r
+               return TCORE_RETURN_EINVAL;\r
+\r
+       if(req_data->puk_type == SIM_PTYPE_PUK1)\r
+       {\r
+               sp->current_sec_op = SEC_PUK1_VERIFY;\r
+               cmd_str = g_strdup_printf("AT+CPIN=\"%s\", \"%s\"", req_data->puk, req_data->pin);\r
+       }\r
+       else if(req_data->puk_type == SIM_PTYPE_PUK2)\r
+       {\r
+               sp->current_sec_op = SEC_PUK2_VERIFY;\r
+               cmd_str = g_strdup_printf("AT+CPIN2=\"%s\", \"%s\"", req_data->puk, req_data->pin);\r
+       }\r
+       else\r
+       {\r
+               return TCORE_RETURN_EINVAL;\r
+       }\r
+       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);\r
+\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       tcore_pending_set_response_callback(pending, on_response_verify_puks, hal);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       free(cmd_str);\r
+       dbg(" Function exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_change_pins(CoreObject *o, UserRequest *ur)\r
+{\r
+       TcoreHal* hal= NULL;\r
+       TcoreATRequest *req= NULL;\r
+       TcorePending *pending = NULL;\r
+       char *cmd_str = NULL;\r
+       const struct treq_sim_change_pins *req_data;\r
+       struct s_sim_property *sp = NULL;\r
+       char *pin1 = "SC";\r
+       char *pin2 = "P2";\r
+\r
+       dbg(" Function entry ");\r
+\r
+       hal = tcore_object_get_hal(o);\r
+       sp = tcore_sim_ref_userdata(o);\r
+       pending = tcore_pending_new(o, 0);\r
+       req_data = tcore_user_request_ref_data(ur, NULL);\r
+\r
+       if (!o || !ur)\r
+               return TCORE_RETURN_EINVAL;\r
+               \r
+       if(req_data->type == SIM_PTYPE_PIN1)\r
+       {\r
+               sp->current_sec_op = SEC_PIN1_CHANGE;\r
+               cmd_str = g_strdup_printf("AT+CPWD=\"%s\",\"%s\",\"%s\"", pin1, req_data->old_pin, req_data->new_pin);\r
+\r
+       }\r
+       else if(req_data->type == SIM_PTYPE_PIN2)\r
+       {\r
+               sp->current_sec_op = SEC_PIN2_CHANGE;\r
+               cmd_str = g_strdup_printf("AT+CPWD=\"%s\",\"%s\",\"%s\"", pin2, req_data->old_pin, req_data->new_pin);\r
+       }\r
+       else\r
+       {\r
+               return TCORE_RETURN_EINVAL;\r
+       }\r
+       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);\r
+\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       tcore_pending_set_response_callback(pending, on_response_change_pins, hal);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       free(cmd_str);\r
+       dbg(" Function exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_get_facility_status(CoreObject *o, UserRequest *ur)\r
+{\r
+       TcoreHal* hal= NULL;\r
+       TcoreATRequest *req= NULL;\r
+       TcorePending *pending = NULL;\r
+       char *cmd_str = NULL;\r
+       const struct treq_sim_get_facility_status *req_data;\r
+       struct s_sim_property *sp = NULL;\r
+       char *fac = "SC";\r
+       int mode = 2;           /* 0:unlock, 1:lock, 2:query*/\r
+\r
+       dbg(" Function entry ");\r
+\r
+       hal = tcore_object_get_hal(o);\r
+       sp = tcore_sim_ref_userdata(o);\r
+       pending = tcore_pending_new(o, 0);\r
+       req_data = tcore_user_request_ref_data(ur, NULL);\r
+\r
+       if (!o || !ur)\r
+               return TCORE_RETURN_EINVAL;\r
+\r
+       if(req_data->type == SIM_FACILITY_PS)\r
+       {\r
+               fac = "PS";                                                             /*PH-SIM, Lock PHone to SIM/UICC card*/\r
+       }else if(req_data->type == SIM_FACILITY_SC)\r
+       {\r
+               fac = "SC";                                                             /*Lock SIM/UICC card, simply PIN1*/\r
+       }else if(req_data->type == SIM_FACILITY_FD)\r
+       {\r
+               fac = "FD";                                                             /*Fixed Dialing Number feature, need PIN2*/\r
+       }else if(req_data->type == SIM_FACILITY_PN)\r
+       {\r
+               fac = "PN";                                                             /*Network Personalization*/\r
+       }else if(req_data->type == SIM_FACILITY_PU)\r
+       {\r
+               fac = "PU";                                                             /*network sUbset Personalization*/\r
+       }else if(req_data->type == SIM_FACILITY_PP)\r
+       {\r
+               fac = "PP";                                                             /*service Provider Personalization*/\r
+       }else if(req_data->type == SIM_FACILITY_PC)\r
+       {\r
+               fac = "PC";                                                             /*Corporate Personalization*/\r
+       }else\r
+       {\r
+               return TCORE_RETURN_EINVAL;\r
+       }\r
+       cmd_str = g_strdup_printf("AT+CLCK=\"%s\", %d", fac, mode);\r
+       req = tcore_at_request_new(cmd_str, "+CLCK:", TCORE_AT_SINGLELINE);\r
+\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       tcore_pending_set_response_callback(pending, on_response_get_facility_status, hal);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       free(cmd_str);\r
+       dbg(" Function exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_enable_facility(CoreObject *o, UserRequest *ur)\r
+{\r
+       TcoreHal* hal = NULL;\r
+       TcoreATRequest *req = NULL;\r
+       TcorePending *pending = NULL;\r
+       char *cmd_str = NULL;\r
+       const struct treq_sim_enable_facility *req_data;\r
+       struct s_sim_property *sp = NULL;\r
+       char *fac = "SC";\r
+       int mode = 1;           /* 0:unlock, 1:lock, 2:query*/\r
+\r
+       dbg(" Function entry ");\r
+\r
+       hal = tcore_object_get_hal(o);\r
+       sp = tcore_sim_ref_userdata(o);\r
+       pending = tcore_pending_new(o, 0);\r
+       req_data = tcore_user_request_ref_data(ur, NULL);\r
+\r
+       if (!o || !ur)\r
+               return TCORE_RETURN_EINVAL;\r
+\r
+       if(req_data->type == SIM_FACILITY_PS)\r
+       {\r
+               fac = "PS";                                                             /*PH-SIM, Lock PHone to SIM/UICC card*/\r
+               sp->current_sec_op = SEC_SIM_ENABLE;\r
+       }else if(req_data->type == SIM_FACILITY_SC)\r
+       {\r
+               fac = "SC";                                                             /*Lock SIM/UICC card, simply PIN1*/\r
+               sp->current_sec_op = SEC_PIN1_ENABLE;\r
+       }else if(req_data->type == SIM_FACILITY_FD)\r
+       {\r
+               fac = "FD";                                                             /*Fixed Dialing Number feature, need PIN2*/\r
+               sp->current_sec_op = SEC_FDN_ENABLE;\r
+       }else if(req_data->type == SIM_FACILITY_PN)\r
+       {\r
+               fac = "PN";                                                             /*Network Personalization*/\r
+               sp->current_sec_op = SEC_NET_ENABLE;\r
+       }else if(req_data->type == SIM_FACILITY_PU)\r
+       {\r
+               fac = "PU";                                                             /*network sUbset Personalization*/\r
+               sp->current_sec_op = SEC_NS_ENABLE;\r
+       }else if(req_data->type == SIM_FACILITY_PP)\r
+       {\r
+               fac = "PP";                                                             /*service Provider Personalization*/\r
+               sp->current_sec_op = SEC_SP_ENABLE;\r
+       }else if(req_data->type == SIM_FACILITY_PC)\r
+       {\r
+               fac = "PC";                                                             /*Corporate Personalization*/\r
+               sp->current_sec_op = SEC_CP_ENABLE;\r
+       }else\r
+       {\r
+               return TCORE_RETURN_EINVAL;\r
+       }\r
+       cmd_str = g_strdup_printf("AT+CLCK=\"%s\", %d, \"%s\"", fac, mode, req_data->password);\r
+       req = tcore_at_request_new(cmd_str, "+CLCK:", TCORE_AT_SINGLELINE);\r
+\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       tcore_pending_set_response_callback(pending, on_response_enable_facility, hal);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       free(cmd_str);\r
+       dbg(" Function exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_disable_facility(CoreObject *o, UserRequest *ur)\r
+{\r
+       TcoreHal* hal;\r
+       TcoreATRequest *req;\r
+       TcorePending *pending = NULL;\r
+       char *cmd_str = NULL;\r
+       const struct treq_sim_enable_facility *req_data;\r
+       struct s_sim_property *sp = NULL;\r
+       char *fac = "SC";\r
+       int mode = 0;           /* 0:unlock, 1:lock, 2:query*/\r
+\r
+       dbg(" Function entry ");\r
+\r
+       hal = tcore_object_get_hal(o);\r
+       sp = tcore_sim_ref_userdata(o);\r
+       pending = tcore_pending_new(o, 0);\r
+       req_data = tcore_user_request_ref_data(ur, NULL);\r
+\r
+       if (!o || !ur)\r
+               return TCORE_RETURN_EINVAL;\r
+\r
+       if(req_data->type == SIM_FACILITY_PS)\r
+       {\r
+               fac = "PS";                                                             /*PH-SIM, Lock PHone to SIM/UICC card*/\r
+               sp->current_sec_op = SEC_SIM_DISABLE;\r
+       }else if(req_data->type == SIM_FACILITY_SC)\r
+       {\r
+               fac = "SC";                                                             /*Lock SIM/UICC card, simply PIN1*/\r
+               sp->current_sec_op = SEC_PIN1_DISABLE;\r
+       }else if(req_data->type == SIM_FACILITY_FD)\r
+       {\r
+               fac = "FD";                                                             /*Fixed Dialing Number feature, need PIN2*/\r
+               sp->current_sec_op = SEC_FDN_DISABLE;\r
+       }else if(req_data->type == SIM_FACILITY_PN)\r
+       {\r
+               fac = "PN";                                                             /*Network Personalization*/\r
+               sp->current_sec_op = SEC_NET_DISABLE;\r
+       }else if(req_data->type == SIM_FACILITY_PU)\r
+       {\r
+               fac = "PU";                                                             /*network sUbset Personalization*/\r
+               sp->current_sec_op = SEC_NS_DISABLE;\r
+       }else if(req_data->type == SIM_FACILITY_PP)\r
+       {\r
+               fac = "PP";                                                             /*service Provider Personalization*/\r
+               sp->current_sec_op = SEC_SP_DISABLE;\r
+       }else if(req_data->type == SIM_FACILITY_PC)\r
+       {\r
+               fac = "PC";                                                             /*Corporate Personalization*/\r
+               sp->current_sec_op = SEC_CP_DISABLE;\r
+       }else\r
+       {\r
+               return TCORE_RETURN_EINVAL;\r
+       }\r
+       cmd_str = g_strdup_printf("AT+CLCK=\"%s\", %d, \"%s\"", fac, mode, req_data->password);\r
+       req = tcore_at_request_new(cmd_str, "+CLCK:", TCORE_AT_SINGLELINE);\r
+\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       tcore_pending_set_response_callback(pending, on_response_disable_facility, hal);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       free(cmd_str);\r
+       dbg(" Function exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_get_lock_info(CoreObject *o, UserRequest *ur)\r
+{\r
+       TcoreHal* hal = NULL;\r
+       TcoreATRequest *req = NULL;\r
+       TcorePending *pending = NULL;\r
+       char *cmd_str = NULL;\r
+       char    *lock_type = NULL;\r
+       const struct treq_sim_get_lock_info *req_data;\r
+       struct s_sim_property *sp = NULL;\r
+\r
+       dbg(" Function entry ");\r
+\r
+       hal = tcore_object_get_hal(o);\r
+       sp = tcore_sim_ref_userdata(o);\r
+       pending = tcore_pending_new(o, 0);\r
+       req_data = tcore_user_request_ref_data(ur, NULL);\r
+\r
+       if (!o || !ur)\r
+               return TCORE_RETURN_EINVAL;\r
+\r
+       switch (req_data->type)\r
+       {\r
+               case SIM_FACILITY_PS:\r
+                       lock_type = "PS";\r
+                       break;\r
+               case SIM_FACILITY_SC:\r
+                       lock_type = "SC";\r
+                       break;\r
+               case SIM_FACILITY_FD:\r
+                       lock_type = "FD";\r
+                       break;\r
+               case SIM_FACILITY_PN:\r
+                       lock_type = "PN";\r
+                       break;\r
+               case SIM_FACILITY_PU:\r
+                       lock_type = "PU";\r
+                       break;\r
+               case SIM_FACILITY_PP:\r
+                       lock_type = "PP";\r
+                       break;\r
+               case SIM_FACILITY_PC:\r
+                       lock_type = "PC";\r
+                       break;\r
+               default:\r
+                       break;\r
+       }\r
+       cmd_str = g_strdup_printf("AT+XPINCNT =\"%s\"", lock_type);\r
+       req = tcore_at_request_new(cmd_str, "+XPINCNT:", TCORE_AT_SINGLELINE);\r
+\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       tcore_pending_set_response_callback(pending, on_response_get_lock_info, hal);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       free(cmd_str);\r
+       dbg(" Function exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_read_file(CoreObject *o, UserRequest *ur)\r
+{\r
+       TReturn api_ret = TCORE_RETURN_SUCCESS;\r
+       enum tcore_request_command command;\r
+       command = tcore_user_request_get_command(ur);\r
+\r
+       dbg(" Function entry ");\r
+\r
+       if (!o || !ur)\r
+               return TCORE_RETURN_EINVAL;\r
+\r
+       switch (command)\r
+       {\r
+               case TREQ_SIM_GET_ECC:\r
+                       api_ret = _get_file_info(o, ur, SIM_EF_ECC);\r
+                       break;\r
+               case TREQ_SIM_GET_LANGUAGE:\r
+                       if (tcore_sim_get_type(o) == SIM_TYPE_GSM)\r
+                               api_ret = _get_file_info(o, ur, SIM_EF_ELP);\r
+                       else if (tcore_sim_get_type(o) == SIM_TYPE_USIM)\r
+                               api_ret = _get_file_info(o, ur, SIM_EF_LP);\r
+                       else\r
+                               api_ret = TCORE_RETURN_ENOSYS;\r
+                       break;\r
+               case TREQ_SIM_GET_ICCID:\r
+                       api_ret = _get_file_info(o, ur, SIM_EF_ICCID);\r
+                       break;\r
+               case TREQ_SIM_GET_MAILBOX:\r
+                       if(tcore_sim_get_cphs_status(o))\r
+                               api_ret = _get_file_info(o, ur, SIM_EF_CPHS_MAILBOX_NUMBERS);\r
+                       else\r
+                               api_ret = _get_file_info(o, ur, SIM_EF_MBDN);\r
+                       break;\r
+               case TREQ_SIM_GET_CALLFORWARDING:\r
+                       if(tcore_sim_get_cphs_status(o))\r
+                               api_ret = _get_file_info(o, ur, SIM_EF_CPHS_CALL_FORWARD_FLAGS);\r
+                       else\r
+                               api_ret = _get_file_info(o, ur, SIM_EF_USIM_CFIS);\r
+                       break;\r
+               case TREQ_SIM_GET_MESSAGEWAITING:\r
+                       if(tcore_sim_get_cphs_status(o))\r
+                               api_ret = _get_file_info(o, ur, SIM_EF_CPHS_VOICE_MSG_WAITING);\r
+                       else\r
+                               api_ret = _get_file_info(o, ur, SIM_EF_USIM_MWIS);\r
+                       break;\r
+               case TREQ_SIM_GET_CPHS_INFO:\r
+                       api_ret = _get_file_info(o, ur, SIM_EF_CPHS_CPHS_INFO);\r
+                       break;\r
+               case TREQ_SIM_GET_MSISDN:\r
+                       api_ret = _get_file_info(o, ur, SIM_EF_MSISDN);\r
+                       break;\r
+               case TREQ_SIM_GET_SPN:\r
+                       dbg("enter case SPN");\r
+                       api_ret = _get_file_info(o, ur, SIM_EF_SPN);\r
+                       break;\r
+               case TREQ_SIM_GET_SPDI:\r
+                       api_ret = _get_file_info(o, ur, SIM_EF_SPDI);\r
+                       break;\r
+               case TREQ_SIM_GET_OPL:\r
+                       api_ret = _get_file_info(o, ur, SIM_EF_OPL);\r
+                       break;\r
+               case TREQ_SIM_GET_PNN:\r
+                       api_ret = _get_file_info(o, ur, SIM_EF_PNN);\r
+                       break;\r
+               case TREQ_SIM_GET_CPHS_NETNAME:\r
+                       api_ret = _get_file_info(o, ur, SIM_EF_CPHS_OPERATOR_NAME_STRING);\r
+                       break;\r
+               case TREQ_SIM_GET_OPLMNWACT:\r
+                       api_ret = _get_file_info(o, ur, SIM_EF_OPLMN_ACT);\r
+                       break;\r
+               default:\r
+                       dbg("error - not handled read treq command[%d]", command);\r
+                       api_ret = TCORE_RETURN_EINVAL;\r
+                       break;\r
+       }\r
+       dbg(" Function exit");\r
+       return api_ret;\r
+}\r
+\r
+static TReturn s_update_file(CoreObject *o, UserRequest *ur)\r
+{\r
+       TcoreHal* hal;\r
+       TcoreATRequest *req;\r
+       TcorePending *pending = NULL;\r
+       char *cmd_str = NULL;\r
+       TReturn api_ret = TCORE_RETURN_SUCCESS;\r
+       char *encoded_data = NULL;\r
+       int encoded_len = 0;\r
+       enum tcore_request_command command;\r
+       enum tel_sim_file_id ef = SIM_EF_INVALID;\r
+       const struct treq_sim_set_callforwarding *cf;\r
+       const struct treq_sim_set_language *cl;\r
+       int p1 = 0;\r
+       int p2 = 0;\r
+       int p3 = 0;\r
+       int cmd = 0;\r
+       gboolean bresult = FALSE;\r
+       struct tel_sim_language sim_language;\r
+\r
+       command = tcore_user_request_get_command(ur);\r
+\r
+       dbg(" Function entry ");\r
+\r
+       hal = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+\r
+       if (!o || !ur)\r
+               return TCORE_RETURN_EINVAL;\r
+\r
+       switch (command) {\r
+               case TREQ_SIM_SET_LANGUAGE:\r
+                       cl = tcore_user_request_ref_data(ur, NULL);\r
+                       memset(&sim_language, 0x00, sizeof(struct tel_sim_language));\r
+                       cmd = 214;\r
+                       p1 = 0;\r
+                       p2 = 0;\r
+                       p3 = 1;\r
+                       sim_language.language_count = 1;\r
+                       sim_language.language[0] = cl->language;\r
+                       encoded_data = malloc(1);\r
+                       memset(encoded_data, 0x00, 1);\r
+                       if (tcore_sim_get_type(o) == SIM_TYPE_GSM)\r
+                       {\r
+                               dbg("2G");\r
+                               ef = SIM_EF_ELP;\r
+                               bresult = tcore_sim_encode_lp(encoded_data, 1, &sim_language);\r
+                               dbg("%d ---", encoded_data[0]);\r
+                               dbg("result %d ", bresult);\r
+                       }\r
+                       else if (tcore_sim_get_type(o) == SIM_TYPE_USIM)\r
+                       {\r
+                               dbg("3G");\r
+                               ef = SIM_EF_LP;\r
+                               bresult = tcore_sim_encode_li(encoded_data, 1, &sim_language);\r
+                               dbg("result %d ", bresult);\r
+                               dbg("encoded_data %s", encoded_data);\r
+                       }\r
+                       else\r
+                       {\r
+                               api_ret = TCORE_RETURN_ENOSYS;\r
+                       }\r
+                       break;\r
+\r
+               case TREQ_SIM_SET_CALLFORWARDING:\r
+                       cf = tcore_user_request_ref_data(ur, NULL);\r
+                       if(tcore_sim_get_cphs_status(o))\r
+                       {\r
+                               encoded_data = tcore_sim_encode_cff((const struct tel_sim_callforwarding*)cf);\r
+                               ef = SIM_EF_CPHS_CALL_FORWARD_FLAGS;\r
+                               p1 = 0;\r
+                               p2 = 0;\r
+                               p3 = strlen(encoded_data);\r
+                               cmd = 214;                              /*command - 214 : UPDATE BINARY*/\r
+                       } else\r
+                       {\r
+                               encoded_data = tcore_sim_encode_cfis(&encoded_len, (const struct tel_sim_callforwarding*)cf);\r
+                               ef = SIM_EF_USIM_CFIS;\r
+                               p1 = 1;\r
+                               p2 = 0x04;\r
+                               p3 = encoded_len;\r
+                               cmd = 220;                              /*command - 220 : UPDATE RECORD*/\r
+                       }\r
+                       break;\r
+\r
+               default:\r
+                       dbg("error - not handled update treq command[%d]", command);\r
+                       api_ret = TCORE_RETURN_EINVAL;\r
+                       break;\r
+       }\r
+       cmd_str = g_strdup_printf("AT+CRSM=%d,%d,%d,%d,%d,\"%s\"", cmd,ef,p1,p2,p3, encoded_data);\r
+       req = tcore_at_request_new(cmd_str, "+CRSM:", TCORE_AT_SINGLELINE);\r
+\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       tcore_pending_set_response_callback(pending, on_response_update_file, hal);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);\r
+\r
+       tcore_hal_send_request(hal, pending);\r
+       if(NULL != encoded_data){\r
+               g_free(encoded_data);\r
+       }\r
+       free(cmd_str);\r
+       dbg(" Function exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_transmit_apdu(CoreObject *o, UserRequest *ur)\r
+{\r
+       TcoreHal* hal= NULL;\r
+       TcoreATRequest *req= NULL;\r
+       TcorePending *pending = NULL;\r
+       char *cmd_str = NULL;\r
+       const struct treq_sim_transmit_apdu *req_data;\r
+       dbg(" Function entry ");\r
+\r
+       hal = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+       req_data = tcore_user_request_ref_data(ur, NULL);\r
+\r
+       if (!o || !ur)\r
+               return TCORE_RETURN_EINVAL;\r
+\r
+       cmd_str = g_strdup_printf("AT+CSIM=%d,\"%s\"", req_data->apdu_length, req_data->apdu);\r
+\r
+       req = tcore_at_request_new(cmd_str, "+CSIM:", TCORE_AT_SINGLELINE);\r
+\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+       tcore_pending_set_response_callback(pending, on_response_transmit_apdu, hal);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sim_message_send, NULL);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       free(cmd_str);\r
+       dbg(" Function exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static struct tcore_sim_operations sim_ops =\r
+{\r
+               .verify_pins = s_verify_pins,\r
+               .verify_puks = s_verify_puks,\r
+               .change_pins = s_change_pins,\r
+               .get_facility_status = s_get_facility_status,\r
+               .enable_facility = s_enable_facility,\r
+               .disable_facility = s_disable_facility,\r
+               .get_lock_info = s_get_lock_info,\r
+               .read_file = s_read_file,\r
+               .update_file = s_update_file,\r
+               .transmit_apdu = s_transmit_apdu,\r
+               /*ToDo - Need to be implemented in Phase-2*/\r
+               /*.get_atr = s_get_atr,\r
+               .req_authentication = s_req_authentication*/\r
+};\r
+\r
+gboolean s_sim_init(TcorePlugin *p, TcoreHal *h)\r
+{\r
+       CoreObject *o;\r
+       struct s_sim_property *file_meta = NULL;\r
+       GQueue *work_queue;\r
+\r
+       dbg("entry");\r
+\r
+       o = tcore_sim_new(p, "sim", &sim_ops, h);\r
+\r
+       if (!o)\r
+               return FALSE;\r
+\r
+       file_meta = calloc(sizeof(struct s_sim_property),1);\r
+       if (!file_meta)\r
+               return FALSE;\r
+\r
+       work_queue = g_queue_new();\r
+       tcore_object_link_user_data(o, work_queue);\r
+\r
+       file_meta->first_recv_status = SIM_STATUS_UNKNOWN;\r
+       tcore_sim_link_userdata(o, file_meta);\r
+       \r
+       tcore_object_add_callback(o, "+XLOCK", on_event_facility_lock_status, NULL);\r
+       tcore_object_add_callback(o, "+XSIM", on_event_pin_status, NULL);\r
+\r
+       dbg("exit");\r
+       return TRUE;\r
+}\r
+\r
+void s_sim_exit(TcorePlugin *p)\r
+{\r
+       CoreObject *o;\r
+\r
+       o = tcore_plugin_ref_core_object(p, "sim");\r
+       if (!o)\r
+               return;\r
+       tcore_sim_free(o);\r
+}
\ No newline at end of file
index 4e99f88..fae1c2b 100755 (executable)
-/*
- * tel-plugin-imc
- *
- * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Hayoon Ko <hayoon.ko@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <glib.h>
-
-#include <tcore.h>
-#include <hal.h>
-#include <core_object.h>
-#include <plugin.h>
-#include <queue.h>
-#include <co_sms.h>
-#include <user_request.h>
-#include <storage.h>
-#include <server.h>
-#include <at.h>
-
-#include "common/TelErr.h"
-#include "s_common.h"
-#include "s_sms.h"
-
-/*=============================================================
-                                                       SMS PARAMETER_ID
-==============================================================*/
-#define TIZEN_SMSPARAMID_TELESERVICE_ID                                        0x01    /* Teleservice Identifier */
-#define TIZEN_SMSPARAMID_SERVICE_CATEGORY                              0x02    /* Broadcast Service Category */
-#define TIZEN_SMSPARAMID_ADDRESS                                                       0x03    /* Address */
-#define TIZEN_SMSPARAMID_SUBADDRESS                                            0x04    /* Subaddress */
-#define TIZEN_SMSPARAMID_BEARER_REPLY                                  0x05    /* Bearer Reply Option */
-#define TIZEN_SMSPARAMID_CAUSE_CODES                                   0x06    /* Cause Codes */
-#define TIZEN_SMSPARAMID_MESSAGE_ID                                            0x07    /* Message Identifier */
-#define TIZEN_SMSPARAMID_USER_DATA                                             0x08    /* User Data */
-#define TIZEN_SMSPARAMID_USER_RESPONSE_CODE                    0x09    /* User Response Code */
-#define TIZEN_SMSPARAMID_MC_TIME_STAMP                                 0x0A    /* Message Center Time Stamp */
-#define TIZEN_SMSPARAMID_VALIDITY_PERIOD_ABS                   0x0B    /* Validity Period - Absolute */
-#define TIZEN_SMSPARAMID_VALIDITY_PERIOD_REL                   0x0C    /* Validiry Period - Relative */
-#define TIZEN_SMSPARAMID_DEFERRED_DELIVERY_ABS                 0x0D    /* Deferred Delivery Time - Absolute */
-#define TIZEN_SMSPARAMID_DEFERRED_DELIVERY_REL                 0x0E    /* Deferred Delivery Time - Relative */
-#define TIZEN_SMSPARAMID_PRIORITY                                                      0x0F    /* Priority Indicator */
-#define TIZEN_SMSPARAMID_PRIVACY                                                       0x10    /* Privacy Indicator */
-#define TIZEN_SMSPARAMID_REPLY_OPTION                                  0x11    /* Reply Option */
-#define TIZEN_SMSPARAMID_NUMBER_OF_MESSAGE                             0x12    /* Number of Messages : Voice Mail Count */
-#define TIZEN_SMSPARAMID_ALERT_ON_DELIVERY                             0x13    /* Alert on Message Delivery */
-#define TIZEN_SMSPARAMID_LANGUAGE                                              0x14    /* Langauge Indicator */
-#define TIZEN_SMSPARAMID_CALLBACK                                              0x15    /* Call Back Number */
-#define TIZEN_SMSPARAMID_DISPLAY_MODE                                  0x16    /* Display Mode */
-#define TIZEN_SMSPARAMID_MULTI_ENCODING_USER_DATA              0x17    /* Multiply Encoding User Data */
-#define TIZEN_SMSPARAMID_MEMORY_INDEX                                  0x18    /* Memory address stored in Phone Memory */
-#define TIZEN_SMSPARAMID_BEARER_DATA                                   0x19    /* Bearer data - raw data  */
-#define TIZEN_SMSPARAMID_SCPT_DATA                                             0x1A    /* Service Category Program Data */
-#define TIZEN_SMSPARAMID_SCPT_RESURLT                                  0x1B    /* Service Category Program Result */
-
-/*=============================================================
-                                               TIZEN_SMSPARAMID_MESSAGE_ID Types
-==============================================================*/
-#define TIZEN_MESSAGETYPE_DELIVER                                              0x01
-#define TIZEN_MESSAGETYPE_SUBMIT                                               0x02
-#define TIZEN_MESSAGETYPE_CANCEL                                               0x03
-#define TIZEN_MESSAGETYPE_DELIVERY_ACK                         0x04
-#define TIZEN_MESSAGETYPE_USER_ACK                                     0x05
-
-/*=============================================================
-                                               TIZEN_SMSPARAMID_LANGUAGE Types
-==============================================================*/
-#define TIZEN_LANGUAGE_UNKNOWN                                 0x00
-#define TIZEN_LANGUAGE_ENGLISH                                 0x01
-#define TIZEN_LANGUAGE_FRENCH                                          0x02
-#define TIZEN_LANGUAGE_SPANISH                                 0x03
-#define TIZEN_LANGUAGE_JAPANESE                                        0x04
-#define TIZEN_LANGUAGE_KOREAN                                          0x05
-#define TIZEN_LANGUAGE_CHINESE                                 0x06
-#define TIZEN_LANGUAGE_HEBREW                                  0x07
-#define TIZEN_LANGUAGE_KOREAN1                                 0x40    /* Used in Korean 3 PCS's and STI */
-#define TIZEN_LANGUAGE_KOREAN_SKT                              0xFE    /* Used in only SKT */
-
-/*=============================================================
-                                                       CDMA-SMS Size
-==============================================================*/
-#define MAX_CDMA_SMS_DATA_SIZE                         512             /* Maximum number of bytes SMSP Record size (Y + 28), y : 0 ~ 128 */
-#define MAX_CDMA_SMS_ADDRESS_SIZE                      32              /* MAX sms destination(or origination ) address /call back number */
-
-/*=============================================================
-                                                       GSM-SMS Size
-==============================================================*/
-#define MAX_GSM_SMS_TPDU_SIZE                                          244
-#define MAX_GSM_SMS_MSG_NUM                                                    255
-#define MAX_GSM_SMS_SERVICE_CENTER_ADDR                                12              /* Maximum number of bytes of service center address */
-#define MAX_GSM_SMS_CBMI_LIST_SIZE                                     100             /* Maximum number of CBMI list size for CBS 30*2=60  */
-#define MAX_GSM_SMS_PARAM_RECORD_SIZE                          156             /* Maximum number of bytes SMSP Record size (Y + 28), y : 0 ~ 128 */
-#define MAX_GSM_SMS_STATUS_FILE_SIZE                                   2               /* Last Used TP-MR + SMS "Memory Cap. Exceeded" Noti Flag */
-#define TAPI_SIM_SMSP_ADDRESS_LEN                                      20
-
-/*=============================================================
-                                                       Device Ready
-==============================================================*/
-#define AT_SMS_DEVICE_READY                    12              /* AT device ready */
-#define SMS_DEVICE_READY                               1               /* Telephony device ready */
-#define SMS_DEVICE_NOT_READY                   0               /* Telephony device not ready */
-
-/*=============================================================
-                                                       CBMI Selection
-==============================================================*/
-#define SMS_CBMI_SELECTED_SOME         0x02    /* Some CBMIs are selected */
-#define SMS_CBMI_SELECTED_ALL                  0x01    /* All CBMIs are selected */
-
-/*=============================================================
-                                                       Message Status
-==============================================================*/
-#define AT_REC_UNREAD                                  0               /* Received and Unread */
-#define AT_REC_READ                                    1               /* Received and Read */
-#define AT_STO_UNSENT                                  2               /* Unsent */
-#define AT_STO_SENT                                    3               /* Sent */
-#define AT_ALL                                                         4               /* Unknown */
-
-/*=============================================================
-                                                       Memory Status
-==============================================================*/
-#define AT_MEMORY_AVAILABLE                    0               /* Memory Available */
-#define AT_MEMORY_FULL                                 1               /* Memory Full */
-
-/*=============================================================
-                                                       Security
-==============================================================*/
-#define MAX_SEC_PIN_LEN                                                        8
-#define MAX_SEC_PUK_LEN                                                        8
-#define MAX_SEC_PHONE_LOCK_PW_LEN                              39              /* Maximum Phone Locking Password Length */
-#define MAX_SEC_SIM_DATA_STRING                                        256             /* Maximum Length of the DATA or RESPONSE. Restricted SIM Access, Generic SIM Access Message */
-#define MAX_SEC_NUM_LOCK_TYPE                                          8               /* Maximum number of Lock Type used in Lock Information Message */                                                                                        
-#define MAX_SEC_IMS_AUTH_LEN                                           512             /* Maximum Length of IMS Authentication Message */
-
-/*=============================================================
-                                                       String Preprocessor
-==============================================================*/
-#define CR             '\r'            /* Carriage Return */
-
-/*=============================================================
-                                                       Developer
-==============================================================*/
-#define TAPI_CODE_SUBJECT_TO_CHANGE                            /* For folding future features */
-
-#define SMS_SWAPBYTES16(x) \
-{ \
-    unsigned short int data = *(unsigned short int*)&(x); \
-    data = ((data & 0xff00) >> 8) |    \
-           ((data & 0x00ff) << 8);     \
-    *(unsigned short int*)&(x) = data ;      \
-}
-
-
-static TReturn Send_SmsSubmitTpdu(CoreObject *o, UserRequest *ur);
-
-/********************************************************************************
-Send Callback: Invoked when request is out from queue
-********************************************************************************/
-static void on_confirmation_sms_message_send(TcorePending *p, gboolean result, void *user_data)
-{
-       dbg("Entered Function. Request message out from queue");
-
-       dbg("TcorePending: [%p]", p);
-       dbg("result: [%02x]", result);
-       dbg("user_data: [%p]", user_data);
-
-       if(result == TRUE)
-       {
-               dbg("SEND OK");
-       }
-       else /* Failed */
-       {
-               dbg("SEND NOK");
-       }
-
-       dbg("Exiting Function. Nothing to return");
-}
-
-/************************************************************/
-/*********************  Utility for SMS  *************************/
-/************************************************************/
-static void util_sms_get_length_of_sca(int* nScLength) {
-       if (*nScLength % 2) {
-               *nScLength = (*nScLength / 2) + 1;
-       } else {
-               *nScLength = *nScLength / 2;
-       }
-
-       return;
-}
-
-static TReturn util_sms_encode_submit_message(const struct telephony_sms_CdmaMsgInfo *pMsgInfo, unsigned char *output, unsigned int *pos)
-{
-       TReturn api_err = TCORE_RETURN_SUCCESS;
-
-       struct telephony_sms_Is637OutSubmit *pSubmit = NULL;
-       unsigned int index = 0;
-       int i = 0;
-
-       // 1. check null pointer
-       if(pMsgInfo == NULL || output == NULL || pos == NULL)
-               return TCORE_RETURN_EINVAL;
-
-       // 2. check manatory parameter in the TelSmsMsgInfo_t
-       if(!((pMsgInfo->ParamMask & SMS_PARAM_TELESERVICE_MASK) &&
-               (pMsgInfo->ParamMask & SMS_PARAM_ADDRESS_MASK) &&
-               (pMsgInfo->ParamMask & SMS_PARAM_MESSAGE_ID_MASK)))
-                               return TCORE_RETURN_EINVAL;
-
-       pSubmit = (struct telephony_sms_Is637OutSubmit *)&(pMsgInfo->MsgData.outSubmit);
-
-       printf("TIZEN_SMSPARAMID_TELESERVICE_ID\n");
-       printf("teleservice msg=%x\n", pSubmit->TeleService);
-       // 3. teleservice
-       output[index++] = TIZEN_SMSPARAMID_TELESERVICE_ID;
-       output[index++] = 2;
-       memcpy(output+index, &(pSubmit->TeleService), sizeof(unsigned short));
-       index += sizeof(unsigned short);
-
-       printf("TIZEN_SMSPARAMID_ADDRESS\n");
-       // 4. Destination address
-       output[index++] = TIZEN_SMSPARAMID_ADDRESS;
-       output[index++] = pSubmit->DstAddr.szAddrLength + 5;
-       output[index++] = (unsigned char)pSubmit->DstAddr.Digit;
-       output[index++] = (unsigned char)pSubmit->DstAddr.NumberMode;
-       output[index++] = (unsigned char)pSubmit->DstAddr.NumberType;
-       output[index++] = (unsigned char)pSubmit->DstAddr.NumberPlan;
-       output[index++] = (unsigned char)pSubmit->DstAddr.szAddrLength;
-       if(pSubmit->DstAddr.szAddrLength > SMS_MAXLENGTH_SMS_ADDRESS)
-               api_err = TCORE_RETURN_EINVAL;
-       else{
-               memcpy(output+ index, pSubmit->DstAddr.szAddress, pSubmit->DstAddr.szAddrLength);
-               index += pSubmit->DstAddr.szAddrLength;
-       }
-
-       printf("TIZEN_SMSPARAMID_SUBADDRESS\n");
-       // 5. Subaddress (optional)
-       if((api_err == TCORE_RETURN_SUCCESS)  && (pMsgInfo->ParamMask & SMS_PARAM_SUBADDRESS_MASK)){
-               output[index++] = TIZEN_SMSPARAMID_SUBADDRESS;
-               output[index++] = pSubmit->DstSubAddr.szAddrLength + 3;
-               output[index++] = pSubmit->DstSubAddr.SubType;
-               output[index++] = pSubmit->DstSubAddr.Odd;
-               output[index++] = pSubmit->DstSubAddr.szAddrLength;
-               if(pSubmit->DstSubAddr.szAddrLength > SMS_MAXLENGTH_SMS_ADDRESS)
-                       api_err = TCORE_RETURN_EINVAL;
-               else{
-                       memcpy(output+ index, pSubmit->DstSubAddr.szAddress, pSubmit->DstSubAddr.szAddrLength);
-                       index += pSubmit->DstSubAddr.szAddrLength;
-               }
-       }
-
-       printf("TIZEN_SMSPARAMID_BEARER_REPLY\n");
-       // 6. Bearer Reply Option
-       if((api_err == TCORE_RETURN_SUCCESS) && (pMsgInfo->ParamMask & SMS_PARAM_BEARER_REPLY_MASK)){
-               output[index++] = TIZEN_SMSPARAMID_BEARER_REPLY;
-               output[index++] = 1;
-               if(pSubmit->ReplySeqNumber >= 64)
-                       api_err = TCORE_RETURN_EINVAL;
-               else output[index++] = pSubmit->ReplySeqNumber;
-       }
-
-       printf("TIZEN_SMSPARAMID_MESSAGE_ID\n");
-       printf("Message ID msg=%x\n",pSubmit->MsgId);
-       // 7. Message Id
-       if((api_err == TCORE_RETURN_SUCCESS) && (pMsgInfo->ParamMask & SMS_PARAM_MESSAGE_ID_MASK)){
-               output[index++] = TIZEN_SMSPARAMID_MESSAGE_ID;
-               output[index++] = 3;
-               output[index++] = TIZEN_MESSAGETYPE_SUBMIT;
-               memcpy(output+ index, &(pSubmit->MsgId), sizeof(unsigned short));
-               index += sizeof(unsigned short);
-       }
-
-       printf("TIZEN_SMSPARAMID_USER_DATA\n");
-       // 8. User Data
-       if((api_err == TCORE_RETURN_SUCCESS) && (pMsgInfo->ParamMask & SMS_PARAM_USER_DATA_MASK)){
-               output[index++] = TIZEN_SMSPARAMID_USER_DATA;
-               output[index++] = 2 + pSubmit->MsgLength;
-               output[index++] = pSubmit->MsgEncoding;
-               output[index++] = pSubmit->MsgLength;
-               if(pSubmit->MsgLength > SMS_MAXLENGTH_SMS_MO_USER_DATA)
-                       api_err = TCORE_RETURN_EINVAL;
-               else{
-                       memcpy(output+ index, pSubmit->szData, pSubmit->MsgLength);
-                       index += pSubmit->MsgLength;
-               }
-       }
-
-       // 9. Deferred DeliveryTime Absolute
-       if((api_err == TCORE_RETURN_SUCCESS) && (pMsgInfo->ParamMask & SMS_PARAM_DEFERRED_DELIVERY_ABS_MASK)){
-               output[index++] = TIZEN_SMSPARAMID_DEFERRED_DELIVERY_ABS;
-               output[index++] = 6;
-               output[index++] = (unsigned char)pSubmit->DeferredDelTimeAbs.year;
-               output[index++] = (unsigned char)pSubmit->DeferredDelTimeAbs.month;
-               output[index++] = (unsigned char)pSubmit->DeferredDelTimeAbs.day;
-               output[index++] = (unsigned char)pSubmit->DeferredDelTimeAbs.hours;
-               output[index++] = (unsigned char)pSubmit->DeferredDelTimeAbs.minutes;
-               output[index++] = (unsigned char)pSubmit->DeferredDelTimeAbs.seconds;
-       }
-
-       // 10. Deferred DeliveryTime Relative
-       if((api_err == TCORE_RETURN_SUCCESS) && (pMsgInfo->ParamMask & SMS_PARAM_DEFERRED_DELIVERY_REL_MASK)){
-               output[index++] = TIZEN_SMSPARAMID_DEFERRED_DELIVERY_REL;
-               output[index++] = 1;
-               output[index++] = (unsigned char)pSubmit->DeferredDelTimeRel;
-       }
-
-       // 11. Priority Indicator
-       if((api_err == TCORE_RETURN_SUCCESS) && (pMsgInfo->ParamMask & SMS_PARAM_PRIORITY_MASK)){
-               output[index++] = TIZEN_SMSPARAMID_PRIORITY;
-               output[index++] = 1;
-               if((int)pSubmit->Privacy < SMS_PRIVACY_NOT_RESTRICTED || pSubmit->Privacy > SMS_PRIVACY_SECRET)
-                       api_err = TCORE_RETURN_EINVAL;
-               else output[index++] = pSubmit->Priority;
-       }
-
-       // 12. Privacy Indicator
-       if((api_err == TCORE_RETURN_SUCCESS) && (pMsgInfo->ParamMask & SMS_PARAM_PRIVACY_MASK)){
-               output[index++] = TIZEN_SMSPARAMID_PRIVACY;
-               output[index++] = 1;
-               if((int)pSubmit->Priority < SMS_PRIORITY_NORMAL || pSubmit->Priority > SMS_PRIORITY_EMERGENCY)
-                       api_err = TCORE_RETURN_EINVAL;
-               else output[index++] = pSubmit->Privacy;
-       }
-
-       // 13. Reply Option
-       if((api_err == TCORE_RETURN_SUCCESS) && (pMsgInfo->ParamMask & SMS_PARAM_REPLY_OPTION_MASK)){
-               output[index++] = TIZEN_SMSPARAMID_REPLY_OPTION;
-               output[index++] = 2;
-               if(pSubmit->bUserAckRequest == 0 &&  pSubmit->bDeliveryAckRequest == 0)
-                       api_err = TCORE_RETURN_EINVAL;
-               else {
-                       output[index++] = (unsigned char)(pSubmit->bUserAckRequest);
-                       output[index++] = (unsigned char)(pSubmit->bDeliveryAckRequest);
-               }
-       }
-
-       // 14. Alert on Message Delivery
-       if((api_err == TCORE_RETURN_SUCCESS) && (pMsgInfo->ParamMask & SMS_PARAM_ALERT_ON_DELIVERY_MASK)){
-               output[index++] = TIZEN_SMSPARAMID_ALERT_ON_DELIVERY;
-               output[index++] = 1;
-               if((int)pSubmit->AlertPriority< SMS_ALERT_PRIORITY_DEFAULT || pSubmit->AlertPriority > SMS_ALERT_PRIORITY_HIGH)
-                       api_err = TCORE_RETURN_EINVAL;
-               else output[index++] = pSubmit->AlertPriority;
-       }
-
-       // 15. Language Indicator
-       if((api_err == TCORE_RETURN_SUCCESS) && (pMsgInfo->ParamMask & SMS_PARAM_LANGUAGE_MASK)){
-               output[index++] = TIZEN_SMSPARAMID_LANGUAGE;
-               output[index++] = 1;
-               if((int)pSubmit->MsgLang< TIZEN_LANGUAGE_UNKNOWN || pSubmit->MsgLang > TIZEN_LANGUAGE_KOREAN_SKT)
-                       api_err = TCORE_RETURN_EINVAL;
-               else output[index++] = pSubmit->MsgLang;
-       }
-
-       printf("TIZEN_SMSPARAMID_CALLBACK\n");
-       // 16. Callback Number
-       if((api_err == TCORE_RETURN_SUCCESS) && (pMsgInfo->ParamMask & SMS_PARAM_CALLBACK_MASK)){
-               output[index++] = TIZEN_SMSPARAMID_CALLBACK;
-               output[index++] = 4 + pSubmit->CallBackNumber.szAddrLength;
-               output[index++] = pSubmit->CallBackNumber.Digit;
-               output[index++] = pSubmit->CallBackNumber.NumberType;
-               output[index++] = pSubmit->CallBackNumber.NumberPlan;
-               output[index++] = (unsigned char)pSubmit->CallBackNumber.szAddrLength;
-               printf("index before =%d, value=%x", (int)index, output[index-1]);
-               if(pSubmit->CallBackNumber.szAddrLength > SMS_MAXLENGTH_SMS_ADDRESS)
-                       api_err = TCORE_RETURN_EINVAL;
-               else{
-                       memcpy(output+ index, pSubmit->CallBackNumber.szAddress, pSubmit->CallBackNumber.szAddrLength);
-
-                       printf("index after =%d, value=%x\n", (int)index, output[index]);
-
-                       for (i=0;i<11;i++)
-                               printf("szAddr[%d]=%x\n", i, output[index+i]);
-                       index += pSubmit->CallBackNumber.szAddrLength;
-               }
-       }
-
-       printf("output index: (0)=%x, (-1)=%x, (+1)=%x\n", output[index], output[index-1],output[index+1]);
-
-       *pos = index;
-
-       return api_err;
-}
-
-static TReturn util_sms_encode_cancel_message(const struct telephony_sms_CdmaMsgInfo *pMsgInfo, unsigned char *output, unsigned int *pos)
-{
-       TReturn api_err = TCORE_RETURN_SUCCESS;
-       struct telephony_sms_Is637OutCancel *pCancel = NULL;
-       unsigned int index = 0;
-
-       // 1. check null pointer
-       if(pMsgInfo == NULL || output == NULL || pos == NULL)
-               return TCORE_RETURN_EINVAL;
-
-       // 2. check manatory parameter in the TelSmsMsgInfo_t
-       if(!((pMsgInfo->ParamMask & SMS_PARAM_TELESERVICE_MASK) &&
-               (pMsgInfo->ParamMask & SMS_PARAM_ADDRESS_MASK) &&
-               (pMsgInfo->ParamMask & SMS_PARAM_MESSAGE_ID_MASK)))
-               return TCORE_RETURN_EINVAL;
-
-       pCancel = (struct telephony_sms_Is637OutCancel *)&(pMsgInfo->MsgData.outCancel);
-
-       // 3. teleservice
-       output[index++] = TIZEN_SMSPARAMID_TELESERVICE_ID;
-       output[index++] = 2;
-       memcpy(output+index, &pCancel->TeleService, sizeof(unsigned short));
-       index += sizeof(unsigned short);
-
-
-       // 4. Destination address
-       output[index++] = TIZEN_SMSPARAMID_ADDRESS;
-       output[index++] = pCancel->DstAddr.szAddrLength + 5;
-       output[index++] = (unsigned char)pCancel->DstAddr.Digit;
-       output[index++] = (unsigned char)pCancel->DstAddr.NumberMode;
-       output[index++] = (unsigned char)pCancel->DstAddr.NumberType;
-       output[index++] = (unsigned char)pCancel->DstAddr.NumberPlan;
-       output[index++] = (unsigned char)pCancel->DstAddr.szAddrLength;
-       if(pCancel->DstAddr.szAddrLength > SMS_MAXLENGTH_SMS_ADDRESS)
-               api_err = TCORE_RETURN_EINVAL;
-       else{
-               memcpy(output+ index, pCancel->DstAddr.szAddress, pCancel->DstAddr.szAddrLength);
-               index += pCancel->DstAddr.szAddrLength;
-       }
-
-       // 5. Subaddress (optional)
-       if((api_err == TCORE_RETURN_SUCCESS)  && (pMsgInfo->ParamMask & SMS_PARAM_SUBADDRESS_MASK)){
-               output[index++] = TIZEN_SMSPARAMID_SUBADDRESS;
-               output[index++] = pCancel->DstSubAddr.szAddrLength + 3;
-               output[index++] = pCancel->DstSubAddr.SubType;
-               output[index++] = pCancel->DstSubAddr.Odd;
-               output[index++] = pCancel->DstSubAddr.szAddrLength;
-               if(pCancel->DstSubAddr.szAddrLength > SMS_MAXLENGTH_SMS_ADDRESS)
-                       api_err = TCORE_RETURN_EINVAL;
-               else{
-                       memcpy(output+ index, pCancel->DstSubAddr.szAddress, pCancel->DstSubAddr.szAddrLength);
-                       index += pCancel->DstSubAddr.szAddrLength;
-               }
-       }
-
-       // 6. Bearer Reply Option
-       if((api_err == TCORE_RETURN_SUCCESS) && (pMsgInfo->ParamMask & SMS_PARAM_BEARER_REPLY_MASK)){
-               output[index++] = TIZEN_SMSPARAMID_BEARER_REPLY;
-               output[index++] = 1;
-               if(pCancel->ReplySeqNumber >= 64)
-                       api_err = TCORE_RETURN_EINVAL;
-               else output[index++] = pCancel->ReplySeqNumber;
-       }
-
-       // 7. Message Id
-       if((api_err == TCORE_RETURN_SUCCESS) && (pMsgInfo->ParamMask & SMS_PARAM_MESSAGE_ID_MASK)){
-               output[index++] = TIZEN_SMSPARAMID_MESSAGE_ID;
-               output[index++] = 3;
-               output[index++] = TIZEN_MESSAGETYPE_CANCEL;
-               memcpy(output+ index, &pCancel->MsgId, sizeof(unsigned short));
-               index += sizeof(unsigned short);
-       }
-
-       *pos = index;
-
-       return api_err;
-}
-
-static TReturn util_sms_encode_user_ack_message(const struct telephony_sms_CdmaMsgInfo *pMsgInfo, unsigned char *output, unsigned int *pos)
-{
-       TReturn api_err = TCORE_RETURN_SUCCESS;
-       struct telephony_sms_Is637OutAck *pUserAck = NULL;
-       unsigned int index = 0;
-
-       // 1. check null pointer
-       if(pMsgInfo == NULL || output == NULL || pos == NULL)
-               return TCORE_RETURN_EINVAL;
-
-       if(!((pMsgInfo->ParamMask & SMS_PARAM_TELESERVICE_MASK) &&
-               (pMsgInfo->ParamMask & SMS_PARAM_ADDRESS_MASK) &&
-               (pMsgInfo->ParamMask & SMS_PARAM_MESSAGE_ID_MASK)))
-                               return TCORE_RETURN_EINVAL;
-
-       pUserAck = (struct telephony_sms_Is637OutAck *)&(pMsgInfo->MsgData.outAck);
-
-       // 3. teleservice
-       output[index++] = TIZEN_SMSPARAMID_TELESERVICE_ID;
-       output[index++] = 2;
-       memcpy(output+index, &pUserAck->TeleService, sizeof(unsigned short));
-       index += sizeof(unsigned short);
-
-
-       // 4. Destination address
-       output[index++] = TIZEN_SMSPARAMID_ADDRESS;
-       output[index++] = pUserAck->DstAddr.szAddrLength + 5;
-       output[index++] = (unsigned char)pUserAck->DstAddr.Digit;
-       output[index++] = (unsigned char)pUserAck->DstAddr.NumberMode;
-       output[index++] = (unsigned char)pUserAck->DstAddr.NumberType;
-       output[index++] = (unsigned char)pUserAck->DstAddr.NumberPlan;
-       output[index++] = (unsigned char)pUserAck->DstAddr.szAddrLength;
-       if(pUserAck->DstAddr.szAddrLength > SMS_MAXLENGTH_SMS_ADDRESS)
-               api_err = TCORE_RETURN_EINVAL;
-       else{
-               memcpy(output+ index, pUserAck->DstAddr.szAddress, pUserAck->DstAddr.szAddrLength);
-               index += pUserAck->DstAddr.szAddrLength;
-       }
-
-       // 5. Subaddress (optional)
-       if((api_err == TCORE_RETURN_SUCCESS)  && (pMsgInfo->ParamMask & SMS_PARAM_SUBADDRESS_MASK)){
-               output[index++] = TIZEN_SMSPARAMID_SUBADDRESS;
-               output[index++] = pUserAck->DstSubAddr.szAddrLength + 3;
-               output[index++] = pUserAck->DstSubAddr.SubType;
-               output[index++] = pUserAck->DstSubAddr.Odd;
-               output[index++] = pUserAck->DstSubAddr.szAddrLength;
-               if(pUserAck->DstSubAddr.szAddrLength > SMS_MAXLENGTH_SMS_ADDRESS)
-                       api_err = TCORE_RETURN_EINVAL;
-               else{
-                       memcpy(output+ index, pUserAck->DstSubAddr.szAddress, pUserAck->DstSubAddr.szAddrLength);
-                       index += pUserAck->DstSubAddr.szAddrLength;
-               }
-       }
-
-       // 6. Bearer Reply Option
-       if((api_err == TCORE_RETURN_SUCCESS) && (pMsgInfo->ParamMask & SMS_PARAM_BEARER_REPLY_MASK)){
-               output[index++] = TIZEN_SMSPARAMID_BEARER_REPLY;
-               output[index++] = 1;
-               if(pUserAck->ReplySeqNumber >= 64)
-                       api_err = TCORE_RETURN_EINVAL;
-               else output[index++] = pUserAck->ReplySeqNumber;
-       }
-
-       // 7. Message Id
-       if((api_err == TCORE_RETURN_SUCCESS) && (pMsgInfo->ParamMask & SMS_PARAM_MESSAGE_ID_MASK)){
-               output[index++] = TIZEN_SMSPARAMID_MESSAGE_ID;
-               output[index++] = 3;
-               output[index++] = TIZEN_MESSAGETYPE_USER_ACK;
-               memcpy(output+ index, &pUserAck->MsgId, sizeof(unsigned short));
-               index += sizeof(unsigned short);
-       }
-
-       // 8. User Data
-       if((api_err == TCORE_RETURN_SUCCESS) && (pMsgInfo->ParamMask & SMS_PARAM_USER_DATA_MASK)){
-               output[index++] = TIZEN_SMSPARAMID_USER_DATA;
-               output[index++] = 2 + pUserAck->MsgEncoding;
-               output[index++] = pUserAck->MsgLength;
-               if(pUserAck->MsgLength > SMS_MAXLENGTH_SMS_MO_USER_DATA)
-                       api_err = TCORE_RETURN_EINVAL;
-               else{
-                       memcpy(output+ index, pUserAck->szData, pUserAck->MsgLength);
-                       index += pUserAck->MsgLength;
-               }
-       }
-
-       // 9. User Response Code
-       if((api_err == TCORE_RETURN_SUCCESS) && (pMsgInfo->ParamMask & SMS_PARAM_USER_RESPONSE_CODE_MASK)){
-               output[index++] = TIZEN_SMSPARAMID_USER_RESPONSE_CODE;
-               output[index++] = 1;
-               output[index++] = pUserAck->UserResponseCode;
-       }
-
-       *pos = index;
-
-       return api_err;
-}
-
-static int util_sms_decode_inDeliver_message(unsigned char *incoming, unsigned int length, struct telephony_sms_CdmaMsgInfo *pMsgInfo)
-{
-       int rtn = TRUE;
-       unsigned int    index = 0;
-       unsigned int    ParamLen = 0;
-       struct telephony_sms_Is637InDeliver *InDeliver = NULL;
-
-       dbg("Parsing Bearer Data below, Total length[0x%x]", (unsigned int)length);
-
-       if(incoming == NULL || pMsgInfo == NULL)
-               return FALSE;
-
-       InDeliver = &(pMsgInfo->MsgData.inDeliver);
-
-       do{
-               if(incoming[index] == TIZEN_SMSPARAMID_USER_DATA){
-                       int i=0;
-                       dbg("ParamID[TIZEN_SMSPARAMID_USER_DATA=0x%x]\tParamLen[%d]", incoming[index], incoming[index+1]);
-                       ParamLen = incoming[++index];    //parameter length
-                       InDeliver->MsgEncoding = incoming[++index];
-                       InDeliver->MsgLength = incoming[++index];
-                       memcpy(InDeliver->szData, incoming+ ++index, InDeliver->MsgLength);
-                       index += InDeliver->MsgLength;
-                       pMsgInfo->ParamMask |= SMS_PARAM_USER_DATA_MASK;
-                       dbg("MsgEnconding[0x%x], MsgLength[%d]",
-                               InDeliver->MsgEncoding, InDeliver->MsgLength);
-
-                       for(i = 0 ; i < InDeliver->MsgLength ; i++)
-                       {
-                               dbg("Index[%d] Char[0x%x]", i, InDeliver->szData[i]);
-                       }
-                       dbg("Final Index[0x%x]", (unsigned int)index);
-
-
-               }
-               else if(incoming[index] == TIZEN_SMSPARAMID_VALIDITY_PERIOD_ABS){
-                       dbg("ParamID[TIZEN_SMSPARAMID_VALIDITY_PERIOD_ABS=0x%x]\tParamLen[%d]", incoming[index], incoming[index+1]);
-                       ParamLen = incoming[++index];    //parameter length
-                       InDeliver->ValidityPeriodAbs.year = incoming[++index];
-                       InDeliver->ValidityPeriodAbs.month = incoming[++index];
-                       InDeliver->ValidityPeriodAbs.day = incoming[++index];
-                       InDeliver->ValidityPeriodAbs.hours = incoming[++index];
-                       InDeliver->ValidityPeriodAbs.minutes = incoming[++index];
-                       InDeliver->ValidityPeriodAbs.seconds = incoming[++index];
-                       index++;
-                       pMsgInfo->ParamMask |= SMS_PARAM_VALIDITY_PERIOD_ABS_MASK;
-               }
-               else if(incoming[index] == TIZEN_SMSPARAMID_VALIDITY_PERIOD_REL){
-                       dbg("ParamID[TIZEN_SMSPARAMID_VALIDITY_PERIOD_REL=0x%x]\tParamLen[%d]", incoming[index], incoming[index+1]);
-                       ParamLen = incoming[++index];    //parameter length
-                       InDeliver->ValidityPeriodRel = incoming[++index];
-                       index++;
-                       pMsgInfo->ParamMask |= SMS_PARAM_VALIDITY_PERIOD_REL_MASK;
-               }
-               else if(incoming[index] == TIZEN_SMSPARAMID_MC_TIME_STAMP){
-                       dbg("ParamID[TIZEN_SMSPARAMID_MC_TIME_STAMP=0x%x]\tParamLen[%d]", incoming[index], incoming[index+1]);
-                       ParamLen = incoming[++index];    //parameter length
-                       InDeliver->MessageCenterTimeStamp.year = incoming[++index];
-                       InDeliver->MessageCenterTimeStamp.month = incoming[++index];
-                       InDeliver->MessageCenterTimeStamp.day = incoming[++index];
-                       InDeliver->MessageCenterTimeStamp.hours = incoming[++index];
-                       InDeliver->MessageCenterTimeStamp.minutes = incoming[++index];
-                       InDeliver->MessageCenterTimeStamp.seconds = incoming[++index];
-                       index++;
-                       pMsgInfo->ParamMask |= SMS_PARAM_MC_TIME_STAMP_MASK;
-               }
-
-               else if(incoming[index] == TIZEN_SMSPARAMID_PRIORITY){
-                       dbg("ParamID[TIZEN_SMSPARAMID_PRIORITY=0x%x]\tParamLen[%d]", incoming[index], incoming[index+1]);
-                       ParamLen = incoming[++index];    //parameter length
-                       InDeliver->Priority = incoming[++index];
-                       index++;
-                       pMsgInfo->ParamMask |= SMS_PARAM_PRIORITY_MASK;
-               }
-               else if(incoming[index] == TIZEN_SMSPARAMID_PRIVACY){
-                       dbg("ParamID[TIZEN_SMSPARAMID_PRIVACY=0x%x]\tParamLen[%d]", incoming[index], incoming[index+1]);
-                       ParamLen = incoming[++index];    //parameter length
-                       InDeliver->Privacy = incoming[++index];
-                       index++;
-                       pMsgInfo->ParamMask |= SMS_PARAM_PRIVACY_MASK;
-               }
-               else if(incoming[index] == TIZEN_SMSPARAMID_NUMBER_OF_MESSAGE){
-                       dbg("ParamID[TIZEN_SMSPARAMID_NUMBER_OF_MESSAGE=0x%x]\tParamLen[%d]", incoming[index], incoming[index+1]);
-                       ParamLen = incoming[++index];    //parameter length
-                       InDeliver->NumMsg = incoming[++index];
-                       index++;
-                       pMsgInfo->ParamMask |= SMS_PARAM_NUMBER_OF_MESSAGE_MASK;
-               }
-               else if(incoming[index] == TIZEN_SMSPARAMID_ALERT_ON_DELIVERY){
-                       dbg("ParamID[TIZEN_SMSPARAMID_ALERT_ON_DELIVERY=0x%x], ParamLen[%d]", incoming[index], incoming[index+1]);
-                       ParamLen = incoming[++index];    //parameter length
-                       InDeliver->AlertPriority = incoming[++index];
-                       index++;
-                       pMsgInfo->ParamMask |= SMS_PARAM_ALERT_ON_DELIVERY_MASK;
-               }
-               else if(incoming[index] == TIZEN_SMSPARAMID_LANGUAGE){
-                       dbg("ParamID[TIZEN_SMSPARAMID_LANGUAGE=0x%x]\tParamLen[%d]", incoming[index], incoming[index+1]);
-                       ParamLen = incoming[++index];    //parameter length
-                       InDeliver->MsgLang = incoming[++index];
-                       index++;
-                       pMsgInfo->ParamMask |= SMS_PARAM_LANGUAGE_MASK;
-               }
-               else if(incoming[index] == TIZEN_SMSPARAMID_REPLY_OPTION){
-                       dbg("ParamID[TIZEN_SMSPARAMID_REPLY_OPTION=0x%x]\tParamLen[%d]", incoming[index], incoming[index+1]);
-                       ParamLen = incoming[++index];    //parameter length
-                       InDeliver->bUserAckRequest = (int)incoming[++index];
-                       InDeliver->bDeliveryAckRequest = (int)incoming[++index];
-                       index++;
-                       pMsgInfo->ParamMask |= SMS_PARAM_REPLY_OPTION_MASK;
-               }
-               else if(incoming[index] == TIZEN_SMSPARAMID_CALLBACK){
-                       dbg("ParamID[TIZEN_SMSPARAMID_CALLBACK=0x%x]\tParamLen[%d]", incoming[index], incoming[index+1]);
-                       ParamLen = incoming[++index];    //parameter length
-                       InDeliver->CallBackNumer.Digit = incoming[++index];
-                       InDeliver->CallBackNumer.NumberType= incoming[++index];
-                       InDeliver->CallBackNumer.NumberPlan = incoming[++index];
-                       InDeliver->CallBackNumer.szAddrLength = incoming[++index];
-                       memcpy(InDeliver->CallBackNumer.szAddress, incoming+ ++index, InDeliver->CallBackNumer.szAddrLength);
-                       index+= InDeliver->CallBackNumer.szAddrLength;
-                       pMsgInfo->ParamMask |= TIZEN_SMSPARAMID_CALLBACK;
-               }
-               else if(incoming[index] == TIZEN_SMSPARAMID_DISPLAY_MODE){
-                       dbg("ParamID[TIZEN_SMSPARAMID_DISPLAY_MODE=0x%x]\tParamLen[%d]", incoming[index], incoming[index+1]);
-                       ParamLen = incoming[++index];    //parameter length
-                       InDeliver->Display= incoming[++index];
-                       index++;
-                       pMsgInfo->ParamMask |= SMS_PARAM_DISPLAY_MODE_MASK;
-               }
-               else if(incoming[index] == TIZEN_SMSPARAMID_MEMORY_INDEX){
-                       dbg("ParamID[TIZEN_SMSPARAMID_MEMORY_INDEX=0x%x]\tindex + 4", incoming[index]);
-                       index += 4;
-               }
-
-               else
-               {
-                       dbg("Undefined SMS Parameter ID [0x%x] in the Bearer Data", incoming[index]);
-                       rtn = FALSE;
-                       break;
-               }
-       }while(!(index == length));
-
-       return rtn;
-}
-
-static int util_sms_decode_inAck_message(unsigned char *incoming, unsigned int length, struct telephony_sms_CdmaMsgInfo *pMsgInfo)
-{
-       int rtn = TRUE;
-       struct telephony_sms_Is637InAck *InAck = NULL;
-       unsigned int    index = 0;
-       unsigned int    ParamLen = 0;
-
-       if(incoming == NULL || pMsgInfo == NULL)
-               return FALSE;
-
-       InAck = &(pMsgInfo->MsgData.inAck);
-       do{
-               if(incoming[index] == TIZEN_SMSPARAMID_USER_DATA){
-                       ParamLen = incoming[++index];    //parameter length
-                       InAck->MsgEncoding = incoming[++index];
-                       InAck->MsgLength = incoming[++index];
-                       memcpy(InAck->szData, incoming+ ++index, InAck->MsgLength);
-                       index += InAck->MsgLength;
-                       pMsgInfo->ParamMask |= SMS_PARAM_USER_DATA_MASK;
-               }
-               else if(incoming[index] == TIZEN_SMSPARAMID_USER_RESPONSE_CODE){
-                       ParamLen = incoming[++index];    //parameter length
-                       InAck->MsgEncoding = incoming[++index];
-                       InAck->UserResponseCode = incoming[++index];
-                       index++;
-                       pMsgInfo->ParamMask |= SMS_PARAM_USER_RESPONSE_CODE_MASK;
-               }
-               else if(incoming[index] == TIZEN_SMSPARAMID_MC_TIME_STAMP){
-                       ParamLen = incoming[++index];    //parameter length
-                       InAck->MessageCenterTimeStamp.year = incoming[++index];
-                       InAck->MessageCenterTimeStamp.month = incoming[++index];
-                       InAck->MessageCenterTimeStamp.day = incoming[++index];
-                       InAck->MessageCenterTimeStamp.hours = incoming[++index];
-                       InAck->MessageCenterTimeStamp.minutes = incoming[++index];
-                       InAck->MessageCenterTimeStamp.seconds = incoming[++index];
-                       index++;
-                       pMsgInfo->ParamMask |= SMS_PARAM_MC_TIME_STAMP_MASK;
-               }
-               else{
-                       rtn = FALSE;
-                       break;
-               }
-       }while(!(index == length));
-
-       return rtn;
-}
-
-static int util_sms_decode_inDeliverAck_message(unsigned char *incoming, unsigned int length, struct telephony_sms_CdmaMsgInfo *pMsgInfo)
-{
-       int rtn = TRUE;
-       struct telephony_sms_Is637InDeliverAck *InDelAck = NULL;
-       unsigned int    index = 0;
-       unsigned int    ParamLen = 0;
-
-       if(incoming == NULL || pMsgInfo == NULL)
-               return FALSE;
-
-       InDelAck = &(pMsgInfo->MsgData.inDeliverAck);
-       do{
-               if(incoming[index] == TIZEN_SMSPARAMID_USER_DATA){
-                       ParamLen = incoming[++index];    //parameter length
-                       InDelAck->MsgEncoding = incoming[++index];
-                       InDelAck->MsgLength = incoming[++index];
-                       memcpy(InDelAck->szData, incoming+ ++index, InDelAck->MsgLength);
-                       index += InDelAck->MsgLength;
-                       pMsgInfo->ParamMask |= SMS_PARAM_USER_DATA_MASK;
-               }
-               else if(incoming[index] == TIZEN_SMSPARAMID_MC_TIME_STAMP){
-                       ParamLen = incoming[++index];    //parameter length
-                       InDelAck->MessageCenterTimeStamp.year = incoming[++index];
-                       InDelAck->MessageCenterTimeStamp.month = incoming[++index];
-                       InDelAck->MessageCenterTimeStamp.day = incoming[++index];
-                       InDelAck->MessageCenterTimeStamp.hours = incoming[++index];
-                       InDelAck->MessageCenterTimeStamp.minutes = incoming[++index];
-                       InDelAck->MessageCenterTimeStamp.seconds = incoming[++index];
-                       index++;
-                       pMsgInfo->ParamMask |= SMS_PARAM_MC_TIME_STAMP_MASK;
-               }
-               else{
-                       rtn = FALSE;
-                       break;
-               }
-       }while(!(index == length));
-
-       return rtn;
-}
-
-static int util_sms_decode_ptp_message(unsigned char *incoming, unsigned int length, struct telephony_sms_CdmaMsgInfo *pMsgInfo)
-{
-       int rtn = TRUE;
-       unsigned int    index = 0;
-       unsigned int    ParamLen = 0;
-       struct telephony_sms_Is637InDeliver *pCommon = NULL;
-       enum telephony_sms_CdmaMsgType type;
-
-       if(incoming == NULL || pMsgInfo == NULL)
-               return FALSE;
-
-       pCommon = &(pMsgInfo->MsgData.inDeliver);
-
-       do{
-               if(incoming[index] == TIZEN_SMSPARAMID_TELESERVICE_ID)
-               {
-                       dbg("ParamID[TIZEN_SMSPARAMID_TELESERVICE_ID=0x%x]\tParamLen[%d]", incoming[index], incoming[index+1]);
-                       ParamLen = incoming[++index];    //parameter length
-                       memcpy(&pCommon->TeleService, incoming+ ++index, ParamLen);
-                       index += ParamLen;
-                       pMsgInfo->ParamMask |= SMS_PARAM_TELESERVICE_MASK;
-               }
-               else if(incoming[index] == TIZEN_SMSPARAMID_ADDRESS)
-               {
-                       dbg("ParamID[TIZEN_SMSPARAMID_ADDRESS=0x%x]\tParamLen[%d]", incoming[index], incoming[index+1]);
-                       ParamLen = incoming[++index];    //parameter length
-                       pCommon->OrigAddr.Digit = incoming[++index];
-                       pCommon->OrigAddr.NumberMode = incoming[++index];
-                       pCommon->OrigAddr.NumberType = incoming[++index];
-                       pCommon->OrigAddr.NumberPlan = incoming[++index];
-                       pCommon->OrigAddr.szAddrLength = incoming[++index];
-                       memcpy(pCommon->OrigAddr.szAddress, incoming+ ++index, pCommon->OrigAddr.szAddrLength);
-                       index += pCommon->OrigAddr.szAddrLength;
-                       pMsgInfo->ParamMask |= SMS_PARAM_ADDRESS_MASK;
-               }
-               else if(incoming[index] == TIZEN_SMSPARAMID_SUBADDRESS)
-               {
-                       dbg("ParamID[TIZEN_SMSPARAMID_SUBADDRESS=0x%x]\tParamLen[%d]", incoming[index], incoming[index+1]);
-                       ParamLen = incoming[++index];    //parameter length
-                       pCommon->OrigSubAddr.SubType =  incoming[++index];
-                       pCommon->OrigSubAddr.Odd =  incoming[++index];
-                       pCommon->OrigSubAddr.szAddrLength = incoming[++index];
-                       memcpy(pCommon->OrigSubAddr.szAddress, incoming+ ++index, pCommon->OrigSubAddr.szAddrLength);
-                       index += pCommon->OrigSubAddr.szAddrLength;
-                       pMsgInfo->ParamMask |= SMS_PARAM_SUBADDRESS_MASK;
-               }
-               else if(incoming[index] == TIZEN_SMSPARAMID_BEARER_REPLY)
-               {
-                       dbg("ParamID[TIZEN_SMSPARAMID_BEARER_REPLY=0x%x]\tParamLen[%d]", incoming[index], incoming[index+1]);
-                       ParamLen = incoming[++index];    //parameter length
-                       pCommon->bBearerReplySeqRequest = (int)TRUE;
-                       pCommon->ReplySeqNumber = incoming[++index];
-                       index++;
-                       pMsgInfo->ParamMask |= SMS_PARAM_BEARER_REPLY_MASK;
-               }
-               else if(incoming[index] == TIZEN_SMSPARAMID_MESSAGE_ID)
-               {
-                       dbg("ParamID[TIZEN_SMSPARAMID_MESSAGE_ID=0x%x]\tParamLen[%d]", incoming[index], incoming[index+1]);
-                       ParamLen = incoming[++index];    //parameter length
-                       type = incoming[++index];
-                       pMsgInfo->MsgType = type;
-                       memcpy(&pCommon->MsgId, incoming+ ++index, sizeof(unsigned short));
-                       index += sizeof(unsigned short);
-                       pMsgInfo->ParamMask |= SMS_PARAM_MESSAGE_ID_MASK;
-                       switch(type)
-                       {
-                               case SMS_MESSAGETYPE_DELIVER:
-                                       dbg("SubParamID[SMS_MESSAGETYPE_DELIVER=0x%x]", type);
-                                       dbg("Current Index[0x%x], Parsing Length[0x%x], ParamLen[0x%x]", (unsigned int)index, (unsigned int)length, (unsigned int)ParamLen);
-
-                                       rtn = util_sms_decode_inDeliver_message(incoming+index, length - index, pMsgInfo);
-
-                                       break;
-                               case SMS_MESSAGETYPE_DELIVERY_ACK:
-                                       dbg("SubParamID[SMS_MESSAGETYPE_DELIVERY_ACK=0x%x]", type);
-
-                                       rtn = util_sms_decode_inAck_message(incoming+index, length - index, pMsgInfo);
-
-                                       break;
-                               case SMS_MESSAGETYPE_USER_ACK:
-                                       dbg("SubParamID[SMS_MESSAGETYPE_USER_ACK=0x%x]", type);
-
-                                       rtn = util_sms_decode_inDeliverAck_message(incoming+index, length - index, pMsgInfo);
-
-                                       break;
-                               default:
-                                       dbg("Unknown Incoming Message Type = %d", type);
-                                       rtn = FALSE;
-                                       break;
-                       }
-                       index = length;
-               }
-               else
-               {
-                       dbg("ParamID[Undefined]");
-                       //rtn = FALSE;
-                       break;
-               }
-
-       }while(!(index == length));
-
-       return rtn;
-}
-
-static int util_sms_decode_broadcast_message(unsigned char *bcmsg, unsigned int length, struct telephony_sms_CdmaMsgInfo *pMsgInfo)
-{
-       int rtn = TRUE;
-       unsigned int    index = 0;
-       unsigned int    ParamLen = 0;
-       struct telephony_sms_Is637InBroadCast *pOutput = NULL;
-
-       if(bcmsg == NULL || pMsgInfo == NULL)
-               return FALSE;
-
-       pOutput = &(pMsgInfo->MsgData.inBc);
-
-       do{
-               if(bcmsg[index] == TIZEN_SMSPARAMID_SERVICE_CATEGORY){
-                       ParamLen = bcmsg[++index];       //parameter length
-                       memcpy(&pOutput->ServiceCategory, bcmsg+ ++index, ParamLen);
-                       index += ParamLen;
-                       pMsgInfo->ParamMask |= SMS_PARAM_SERVICE_CATEGORY_MASK;
-               }
-               else if(bcmsg[index] == TIZEN_SMSPARAMID_BEARER_REPLY){
-                       ParamLen = bcmsg[++index];       //parameter length
-                       pOutput->bBearerReplySeqRequest = (int)TRUE;
-                       pOutput->ReplySeqNumber = bcmsg[++index];
-                       index++;
-                       pMsgInfo->ParamMask |= SMS_PARAM_BEARER_REPLY_MASK;
-               }
-               else if(bcmsg[index] == TIZEN_SMSPARAMID_MESSAGE_ID){
-                       ParamLen = bcmsg[++index];       //parameter length
-                       memcpy(&pOutput->MsgId, bcmsg+ ++index, ParamLen);
-                       index += ParamLen;
-                       pMsgInfo->ParamMask |= SMS_PARAM_MESSAGE_ID_MASK;
-               }
-               else if(bcmsg[index] == TIZEN_SMSPARAMID_VALIDITY_PERIOD_ABS){
-                       ParamLen = bcmsg[++index];       //parameter length
-                       pOutput->ValidityPeriodAbs.year = bcmsg[++index];
-                       pOutput->ValidityPeriodAbs.month = bcmsg[++index];
-                       pOutput->ValidityPeriodAbs.day = bcmsg[++index];
-                       pOutput->ValidityPeriodAbs.hours = bcmsg[++index];
-                       pOutput->ValidityPeriodAbs.minutes = bcmsg[++index];
-                       pOutput->ValidityPeriodAbs.seconds = bcmsg[++index];
-                       index++;
-                       pMsgInfo->ParamMask |= SMS_PARAM_VALIDITY_PERIOD_ABS_MASK;
-               }
-               else if(bcmsg[index] == TIZEN_SMSPARAMID_VALIDITY_PERIOD_REL){
-                       ParamLen = bcmsg[++index];       //parameter length
-                       pOutput->ValidityPeriodRel = bcmsg[++index];
-                       index++;
-                       pMsgInfo->ParamMask |= SMS_PARAM_VALIDITY_PERIOD_REL_MASK;
-               }
-               else if(bcmsg[index] == TIZEN_SMSPARAMID_MC_TIME_STAMP){
-                       ParamLen = bcmsg[++index];       //parameter length
-                       pOutput->MessageCenterTimeStamp.year = bcmsg[++index];
-                       pOutput->MessageCenterTimeStamp.month = bcmsg[++index];
-                       pOutput->MessageCenterTimeStamp.day = bcmsg[++index];
-                       pOutput->MessageCenterTimeStamp.hours = bcmsg[++index];
-                       pOutput->MessageCenterTimeStamp.minutes = bcmsg[++index];
-                       pOutput->MessageCenterTimeStamp.seconds = bcmsg[++index];
-                       index++;
-                       pMsgInfo->ParamMask |= SMS_PARAM_MC_TIME_STAMP_MASK;
-               }
-               else if(bcmsg[index] == TIZEN_SMSPARAMID_PRIORITY){
-                       ParamLen = bcmsg[++index];       //parameter length
-                       pOutput->Priority= bcmsg[++index];
-                       index++;
-                       pMsgInfo->ParamMask |= SMS_PARAM_PRIORITY_MASK;
-               }
-               else if(bcmsg[index] == TIZEN_SMSPARAMID_ALERT_ON_DELIVERY){
-                       ParamLen = bcmsg[++index];       //parameter length
-                       pOutput->AlertPriority = bcmsg[++index];
-                       index++;
-                       pMsgInfo->ParamMask |= SMS_PARAM_ALERT_ON_DELIVERY_MASK;
-               }
-               else if(bcmsg[index] == TIZEN_SMSPARAMID_LANGUAGE){
-                       ParamLen = bcmsg[++index];       //parameter length
-                       pOutput->MsgLang = bcmsg[++index];
-                       index++;
-                       pMsgInfo->ParamMask |= SMS_PARAM_LANGUAGE_MASK;
-               }
-               else if(bcmsg[index] == TIZEN_SMSPARAMID_DISPLAY_MODE){
-                       ParamLen = bcmsg[++index];       //parameter length
-                       pOutput->Display = bcmsg[++index];
-                       index++;
-                       pMsgInfo->ParamMask |= SMS_PARAM_DISPLAY_MODE_MASK;
-               }
-               else if(bcmsg[index] == TIZEN_SMSPARAMID_USER_DATA){
-                       ParamLen = bcmsg[++index];       //parameter length
-                       pOutput->MsgEncoding = bcmsg[++index];
-                       pOutput->MsgLength = bcmsg[++index];
-                       memcpy(pOutput->szData, bcmsg+ ++index, pOutput->MsgLength);
-                       index += pOutput->MsgLength;
-                       pMsgInfo->ParamMask |= SMS_PARAM_USER_DATA_MASK;
-               }
-               else{
-                       rtn = FALSE;
-                       break;
-               }
-
-       }while(!(index == length));
-
-       return rtn;
-}
-
-static int util_sms_decode_smsParameters(unsigned char *incoming, unsigned int length, struct telephony_sms_Params *params)
-{
-       int alpha_id_len = 0;
-       int i = 0;
-       int nOffset = 0;
-
-       dbg(" RecordLen = %d", length);
-
-       if(incoming == NULL || params == NULL)
-               return FALSE;
-
-       alpha_id_len = length -SMS_SMSP_PARAMS_MAX_LEN;
-
-       if (alpha_id_len > 0)
-       {
-               if(alpha_id_len > SMS_SMSP_ALPHA_ID_LEN_MAX)
-               {
-                       alpha_id_len = SMS_SMSP_ALPHA_ID_LEN_MAX;
-               }
-
-               for(i=0 ; i < alpha_id_len ; i++)
-               {
-                       if(0xff == incoming[i])
-                       {
-                               dbg(" found");
-                               break;
-                       }
-               }
-
-               memcpy(params->szAlphaId, incoming, i);
-
-               params->alphaIdLen = i;
-
-               dbg(" Alpha id length = %d", i);
-
-       }
-       else
-       {
-               params->alphaIdLen = 0;
-               dbg(" Alpha id length is zero");
-       }
-
-       //dongil01.park - start parse from here.
-       params->paramIndicator = incoming[alpha_id_len];
-
-       dbg(" Param Indicator = %02x", params->paramIndicator);
-
-       //dongil01.park(2008/12/26) - DestAddr
-       if((params->paramIndicator & SMSPValidDestAddr) == 0)
-       {
-               nOffset = nDestAddrOffset;
-
-               if(0x00 == incoming[alpha_id_len + nOffset] || 0xff == incoming[alpha_id_len + nOffset])
-               {
-                       params->tpDestAddr.dialNumLen = 0;
-
-                       dbg("DestAddr Length is 0");
-               }
-               else
-               {
-                       if (0 < (int)incoming[alpha_id_len + nOffset])
-                       {
-                               params->tpDestAddr.dialNumLen = (int)(incoming[alpha_id_len + nOffset] - 1);
-
-                               if(params->tpDestAddr.dialNumLen > SMS_SMSP_ADDRESS_LEN)
-                                       params->tpDestAddr.dialNumLen = SMS_SMSP_ADDRESS_LEN;
-                       }
-                       else
-                       {
-                               params->tpDestAddr.dialNumLen = 0;
-                       }
-
-                       params->tpDestAddr.numPlanId= incoming[alpha_id_len + (++nOffset)] & 0x0f ;
-                       params->tpDestAddr.typeOfNum= (incoming[alpha_id_len + nOffset] & 0x70)>>4 ;
-
-                       memcpy(params->tpDestAddr.diallingNum, &incoming[alpha_id_len + (++nOffset)], (params->tpDestAddr.dialNumLen)) ;
-
-                       dbg("Dest TON is %d",params->tpDestAddr.typeOfNum);
-                       dbg("Dest NPI is %d",params->tpDestAddr.numPlanId);
-                       dbg("Dest Length = %d",params->tpDestAddr.dialNumLen);
-                       dbg("Dest Addr = %s",params->tpDestAddr.diallingNum);
-
-               }
-       }
-
-       //dongil01.park(2008/12/26) - SvcAddr
-       if((params->paramIndicator & SMSPValidSvcAddr) == 0)
-       {
-               nOffset = nSCAAddrOffset;
-
-               if(0x00 == (int)incoming[alpha_id_len + nOffset] || 0xff == (int)incoming[alpha_id_len + nOffset])
-               {
-                       params->tpSvcCntrAddr.dialNumLen = 0;
-
-                       dbg(" SCAddr Length is 0");
-               }
-               else
-               {
-                       if (0 < (int)incoming[alpha_id_len + nOffset] )
-                       {
-                               params->tpSvcCntrAddr.dialNumLen = (int)(incoming[alpha_id_len + nOffset] - 1);
-
-                               if(params->tpSvcCntrAddr.dialNumLen > SMS_SMSP_ADDRESS_LEN)
-                                       params->tpSvcCntrAddr.dialNumLen = SMS_SMSP_ADDRESS_LEN;
-
-                               params->tpSvcCntrAddr.numPlanId= incoming[alpha_id_len + (++nOffset)] & 0x0f ;
-                               params->tpSvcCntrAddr.typeOfNum= (incoming[alpha_id_len + nOffset] & 0x70) >>4 ;
-
-                               memcpy(params->tpSvcCntrAddr.diallingNum, &incoming[alpha_id_len + (++nOffset)], (params->tpSvcCntrAddr.dialNumLen));
-
-                               dbg("SCAddr Length = %d ",params->tpSvcCntrAddr.dialNumLen);
-                               dbg("SCAddr TON is %d",params->tpSvcCntrAddr.typeOfNum);
-                               dbg("SCAddr NPI is %d",params->tpSvcCntrAddr.numPlanId);
-
-                               for(i = 0 ; i < (int)params->tpSvcCntrAddr.dialNumLen ; i ++)
-                                       dbg("SCAddr = %d [%02x]",i,params->tpSvcCntrAddr.diallingNum[i]);
-                       }
-                       else
-                       {
-                               params->tpSvcCntrAddr.dialNumLen = 0;
-                       }
-               }
-       }
-       else if ((0x00 < (int)incoming[alpha_id_len +nSCAAddrOffset] && (int)incoming[alpha_id_len +nSCAAddrOffset] <= 12)
-                       || 0xff != (int)incoming[alpha_id_len +nSCAAddrOffset])
-       {
-               nOffset = nSCAAddrOffset;
-
-               if(0x00 == (int)incoming[alpha_id_len + nOffset] || 0xff == (int)incoming[alpha_id_len + nOffset])
-               {
-                       params->tpSvcCntrAddr.dialNumLen = 0;
-                       dbg("SCAddr Length is 0");
-               }
-               else
-               {
-
-                       if (0 < (int)incoming[alpha_id_len + nOffset] )
-                       {
-                               params->tpSvcCntrAddr.dialNumLen = (int)(incoming[alpha_id_len + nOffset] - 1);
-
-                               params->tpSvcCntrAddr.dialNumLen = incoming[alpha_id_len + nOffset] -1;
-
-                               if(params->tpSvcCntrAddr.dialNumLen > SMS_SMSP_ADDRESS_LEN)
-                                       params->tpSvcCntrAddr.dialNumLen = SMS_SMSP_ADDRESS_LEN;
-
-                               params->tpSvcCntrAddr.numPlanId= incoming[alpha_id_len + (++nOffset)] & 0x0f ;
-                               params->tpSvcCntrAddr.typeOfNum= (incoming[alpha_id_len + nOffset] & 0x70) >>4 ;
-
-                               memcpy(params->tpSvcCntrAddr.diallingNum, &incoming[alpha_id_len + (++nOffset)],
-                                               (params->tpSvcCntrAddr.dialNumLen)) ;
-
-                               dbg("SCAddr Length = %d ",params->tpSvcCntrAddr.dialNumLen);
-                               dbg("SCAddr TON is %d",params->tpSvcCntrAddr.typeOfNum);
-                               dbg("SCAddr NPI is %d",params->tpSvcCntrAddr.numPlanId);
-
-                               for(i = 0 ; i < (int)params->tpSvcCntrAddr.dialNumLen ; i ++)
-                                       dbg("SCAddr = %d [%02x]",i,params->tpSvcCntrAddr.diallingNum[i]);
-                       }
-                       else
-                       {
-                               params->tpSvcCntrAddr.dialNumLen = 0;
-                       }
-               }
-
-       }
-
-       if((params->paramIndicator & SMSPValidPID) == 0 &&      (alpha_id_len + nPIDOffset) < MAX_GSM_SMS_PARAM_RECORD_SIZE)
-       {
-               params->tpProtocolId = incoming[alpha_id_len + nPIDOffset];
-       }
-       if((params->paramIndicator & SMSPValidDCS) == 0 && (alpha_id_len + nDCSOffset) < MAX_GSM_SMS_PARAM_RECORD_SIZE)
-       {
-               params->tpDataCodingScheme = incoming[alpha_id_len + nDCSOffset];
-       }
-       if((params->paramIndicator & SMSPValidVP) == 0 && (alpha_id_len + nVPOffset) < MAX_GSM_SMS_PARAM_RECORD_SIZE)
-       {
-               params->tpValidityPeriod = incoming[alpha_id_len + nVPOffset];
-       }
-
-       dbg(" Alpha Id(Len) = %d",(int)params->alphaIdLen);
-
-       for (i=0; i< (int)params->alphaIdLen ; i++)
-       {
-               dbg(" Alpha Id = [%d] [%c]",i,params->szAlphaId[i]);
-       }
-       dbg(" PID = %d",params->tpProtocolId);
-       dbg(" DCS = %d",params->tpDataCodingScheme);
-       dbg(" VP = %d",params->tpValidityPeriod);
-
-       return TRUE;
-}
-
-/************************************************************/
-/************************  Events Cb  *************************/
-/************************************************************/
-
-static gboolean on_event_sms_ready_status(CoreObject *o, const void *event_info, void *user_data)
-{
-       struct tnoti_sms_ready_status readyStatusInfo = {0,};
-       char *line = NULL;
-       GSList* tokens = NULL;
-       GSList* lines = NULL;
-       char *pResp = NULL;
-       //CoreObject *o = NULL;
-       
-       int rtn = -1 , status = 0;
-
-       dbg(" Func Entrance");
-
-       lines = (GSList *)event_info;
-       if (1 != g_slist_length(lines))
-       {
-               dbg("unsolicited msg but multiple line");
-               goto OUT;
-       }
-       line = (char *)(lines->data);
-
-       dbg(" Func Entrance");
-
-       if(line!=NULL)
-       {
-               dbg("Response OK");
-                       dbg("noti line is %s", line);
-                       tokens = tcore_at_tok_new(line);
-                       pResp = g_slist_nth_data(tokens, 0);
-                       if (pResp !=NULL)
-                               status = atoi(pResp);
-
-       }
-       else
-       {
-               dbg("Response NOK");
-       }               
-
-       if (status == AT_SMS_DEVICE_READY)
-       {
-               readyStatusInfo.status = SMS_DEVICE_READY;
-               tcore_sms_set_ready_status(o, readyStatusInfo.status);
-               dbg("SMS Ready status = [%s]", readyStatusInfo.status ? "TRUE" : "FALSE");
-               rtn = tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_SMS_DEVICE_READY, sizeof(struct tnoti_sms_ready_status), &readyStatusInfo);
-               dbg(" Return value [%d]",rtn);
-       }
-       else
-       {
-               readyStatusInfo.status = SMS_DEVICE_NOT_READY;
-       }
-
-OUT:
-       if(NULL!=tokens)
-               tcore_at_tok_free(tokens);
-       return TRUE;
-}
-
-
-
-static gboolean on_event_sms_incom_msg(CoreObject *o, const void *event_info, void *user_data)
-{
-       struct property_sms_info *property;
-       
-
-       int rtn = -1, ScLength = 0, i = 0 , alpha = 0;
-       unsigned char format = 0;
-       unsigned char LastSemiOctect;
-
-       char * line1 = NULL, *line2 = NULL, *pResp = NULL;
-       GSList *tokens = NULL;
-
-       GSList *lines = NULL;
-       char *line = NULL;
-       int length = 0;
-       unsigned char *bytePDU = NULL;
-       struct tnoti_sms_umts_msg gsmMsgInfo;
-
-       dbg("Entered Function");
-
-       lines = (GSList *)event_info;
-       memset(&gsmMsgInfo, 0x00, sizeof(struct tnoti_sms_umts_msg));
-
-       if(2 != g_slist_length(lines))
-       {
-               err("Invalid number of lines for +CMT. Must be 2");
-               return FALSE;
-       }
-       
-       line = (char *)g_slist_nth_data(lines, 0); /* Fetch Line 1 */
-
-       dbg("Line 1: [%s]", line);
-       
-       if (!line)
-       {
-               err("Line 1 is invalid");
-               return FALSE;
-       }
-
-       tokens = tcore_at_tok_new(line); /* Split Line 1 into tokens */
-
-       dbg("Alpha ID: [%02x]", g_slist_nth_data(tokens, 0)); /* 0: Alpha ID */
-
-       length = atoi((char *)g_slist_nth_data(tokens, 1));
-
-       dbg("Length: [%d]", length);    /* 1: PDU Length */
-
-       gsmMsgInfo.msgInfo.msgLength = length;
-
-       line = (char *)g_slist_nth_data(lines, 1); /* Fetch Line 2 */
-
-       dbg("Line 2: [%s]", line);
-       
-       if (!line)
-       {
-               err("Line 2 is invalid");
-               return FALSE;
-       }
-
-       /* Convert to Bytes */
-       bytePDU = (unsigned char *)util_hexStringToBytes(line);
-
-       if(NULL == bytePDU)
-       {
-               err("bytePDU is NULL");
-               return FALSE;
-       }
-
-       memcpy(gsmMsgInfo.msgInfo.sca, bytePDU, (strlen(line)/2 - length));
-       memcpy(gsmMsgInfo.msgInfo.tpduData, &bytePDU[(strlen(line)/2 - length)], length);
-
-       util_hex_dump("      ", strlen(line)/2, bytePDU);
-       util_hex_dump("      ", (strlen(line)/2 - length), gsmMsgInfo.msgInfo.sca);
-       util_hex_dump("      ", length, gsmMsgInfo.msgInfo.tpduData);
-
-       rtn = tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_SMS_INCOM_MSG, sizeof(struct tnoti_sms_umts_msg), &gsmMsgInfo);
-       
-       return TRUE;
-}
-
-
-
-static void on_event_sms_send_ack(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-    GSList *lines = NULL;
-       
-    lines = (GSList*)data;
-    return TRUE;
-}
-
-static gboolean on_event_sms_memory_status(CoreObject *o, const void *event_info, void *user_data)
-{
-       struct tnoti_sms_memory_status memStatusInfo = {0,};
-
-       int rtn = -1 ,memoryStatus = 0;
-       const TcoreATResponse *atResp = event_info;
-       GSList *tokens=NULL;
-       GSList *lines=NULL;
-       char *line = NULL , pResp = NULL;
-
-       lines = (GSList *)event_info;
-        if (1 != g_slist_length(lines))
-        {
-                dbg("unsolicited msg but multiple line");
-               return;
-        }
-
-       line = (char*)(lines->data);
-
-
-       dbg(" Func Entrance");
-
-       if (atResp->success)
-       {
-               dbg("Response OK");
-               line = (const char*)lines->data;
-               tokens = tcore_at_tok_new(line);
-               pResp = g_slist_nth_data(tokens, 0);
-
-               if(pResp)
-               {
-                       memoryStatus = atoi(pResp);     
-               }
-               
-       }
-       switch(memoryStatus)
-       {
-               case AT_MEMORY_AVAILABLE:
-                       {
-                               memStatusInfo.status = SMS_PHONE_MEMORY_STATUS_AVAILABLE;
-                               break;
-                       }
-                       
-               case AT_MEMORY_FULL:
-                       {
-                               memStatusInfo.status = SMS_PHONE_MEMORY_STATUS_FULL;
-                               break;
-                       }
-               default:
-                       {
-                               memStatusInfo.status = -1;
-                               break;
-                       }
-       }
-
-       dbg("memory status - %d",memStatusInfo.status);
-
-       rtn = tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_SMS_MEMORY_STATUS, sizeof(struct tnoti_sms_memory_status), &memStatusInfo);
-       dbg(" Return value [%d]",rtn);
-
-       return TRUE;
-
-}
-
-static gboolean on_event_sms_cb_incom_msg(CoreObject *o, const void *event_info, void *user_data)
-{
-       //+CBM: <length><CR><LF><pdu>
-
-       struct tnoti_sms_cellBroadcast_msg cbMsgInfo;
-
-       int rtn = -1 , length = 0;
-       char * line = NULL, *pdu = NULL, pResp = NULL;
-       GSList *tokens = NULL;
-       GSList *lines = NULL;
-
-       dbg(" Func Entrance");
-
-       lines = (GSList *)event_info;
-
-       memset(&cbMsgInfo, 0, sizeof(struct tnoti_sms_cellBroadcast_msg));
-
-       if (1 != g_slist_length(lines))
-       {
-               dbg("unsolicited msg but multiple lines");
-               goto OUT;
-       }
-       line = (char *)(lines->data);
-
-       if (line != NULL)
-       {
-                       dbg("Response OK");
-                       dbg("Noti line is %s",line);
-                       pResp = g_slist_nth_data(tokens, 0);
-                       if (pResp)
-                       {
-                               length = atoi(pResp);
-                       }else
-                       {
-                               dbg("token 0 is null");
-                       }
-                       pdu = g_slist_nth_data(tokens, 3);
-                       if (pdu != NULL)
-                       {
-                               cbMsgInfo.cbMsg.length = length;
-                               cbMsgInfo.cbMsg.cbMsgType = SMS_CB_MSG_CBS ; //TODO - Need to check for other CB types
-
-                               dbg("CB Msg LENGTH [%2x](((( %d ))))", length, cbMsgInfo.cbMsg.length);
-
-                               if ( (cbMsgInfo.cbMsg.length >0) && ((SMS_CB_PAGE_SIZE_MAX +1)  > cbMsgInfo.cbMsg.length))
-                               {
-                                       memcpy(cbMsgInfo.cbMsg.msgData, (char*)pdu, cbMsgInfo.cbMsg.length);
-                                       rtn = tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_SMS_CB_INCOM_MSG, sizeof(struct tnoti_sms_cellBroadcast_msg), &cbMsgInfo);
-                               }
-                               else
-                               {
-                                       dbg("Invalid Message Length");
-                               }
-
-                       }
-                       else
-                       {
-                               dbg("Recieved NULL pdu");
-                       }
-       }
-       else
-       {
-                       dbg("Response NOK");
-       }
-       
-       
-       dbg(" Return value [%d]",rtn);
-
-OUT:
-
-       return;
-
-}
-
-static void on_response_sms_delete_msg_cnf(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       struct tresp_sms_delete_msg delMsgInfo = {0,};
-       UserRequest *ur = NULL;
-       const TcoreATResponse *atResp = data;
-       GSList *tokens=NULL;
-       char *line = NULL , pResp = NULL;
-
-       int rtn = -1 , RequestId = -1;
-       int index = (int *)user_data;
-
-       dbg(" Func Entrance");
-
-       ur = tcore_pending_ref_user_request(p);
-       if (atResp->success)
-       {
-               dbg("Response OK");
-               delMsgInfo.index = index;
-               delMsgInfo.result = SMS_SENDSMS_SUCCESS;
-               
-       }
-       else
-       {
-               dbg("Response NOK");    
-               delMsgInfo.index = index;
-               delMsgInfo.result = SMS_DEVICE_FAILURE;
-
-       }
-
-       rtn = tcore_user_request_send_response(ur, TRESP_SMS_DELETE_MSG, sizeof(struct tresp_sms_delete_msg), &delMsgInfo);
-
-       return;
-}
-
-static void on_response_sms_save_msg_cnf(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       struct tresp_sms_save_msg saveMsgInfo = {0,};
-       UserRequest *ur = NULL;
-       const TcoreATResponse *atResp = data;
-       GSList *tokens = NULL;
-       char *line = NULL;
-       char *pResp = NULL;
-       int rtn = -1, index = -1;
-
-       ur = tcore_pending_ref_user_request(p);
-       if (atResp->success)
-       {
-               dbg("Response OK");
-               if(atResp->lines)
-               {
-                       line = (const char *)atResp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       pResp = g_slist_nth_data(tokens, 0);
-                       if (pResp)
-                       {
-                               dbg("0: %s", pResp);
-                               saveMsgInfo.index = (atoi(pResp) - 1); /* IMC index starts from 1 */
-                               saveMsgInfo.result = SMS_SENDSMS_SUCCESS;
-                       }
-                       else
-                       {
-                               dbg("No Tokens");       
-                               saveMsgInfo.index = -1;
-                               saveMsgInfo.result = SMS_DEVICE_FAILURE;
-                       }
-                        
-               }
-       }
-       else
-       {
-               dbg("Response NOK");    
-               saveMsgInfo.index = -1;
-               saveMsgInfo.result = SMS_DEVICE_FAILURE;
-       }
-
-       rtn = tcore_user_request_send_response(ur, TRESP_SMS_SAVE_MSG, sizeof(struct tresp_sms_save_msg), &saveMsgInfo);
-       dbg("Return value [%d]", rtn);
-       return;
-}
-
-static void on_response_sms_deliver_rpt_cnf(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-
-       struct tresp_sms_set_delivery_report deliverReportInfo = {0,};
-       UserRequest *ur = NULL;
-       const TcoreATResponse *atResp = data;
-       GSList *tokens=NULL;
-       char *line = NULL , pResp = NULL;
-       int rtn = -1;
-
-       dbg(" Func Entrance");
-
-
-       if (atResp->success)
-       {
-               dbg("Response OK");
-               if(atResp->lines) 
-               {
-                       line = (const char*)atResp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                        pResp = g_slist_nth_data(tokens, 0);
-                        if (pResp)
-                       {
-                               deliverReportInfo.result = SMS_SENDSMS_SUCCESS;
-                       }
-                       else
-                       {
-                               dbg("No tokens");       
-                               deliverReportInfo.result = SMS_DEVICE_FAILURE;
-                       }
-               }else
-               {
-                       dbg("No lines");
-                       deliverReportInfo.result = SMS_DEVICE_FAILURE;
-               }
-       }else
-       {
-               dbg("Response NOK");
-       }
-
-
-       rtn = tcore_user_request_send_response(ur, TRESP_SMS_SET_DELIVERY_REPORT, sizeof(struct tresp_sms_set_delivery_report), &deliverReportInfo);
-
-       dbg(" Return value [%d]",rtn);
-
-       return;
-
-}
-
-
-
-/*************************************************************/
-/***********************  Responses Cb  ************************/
-/************************************************************/
-static void on_response_send_umts_msg(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       const TcoreATResponse *resp = data;
-       UserRequest *ur;
-       struct tresp_sms_send_umts_msg respSendMsg;
-
-       GSList *tokens=NULL;
-       int error;
-       char *line = NULL;
-       int ret;
-       int err;
-
-       ur = tcore_pending_ref_user_request(p);
-
-       if (resp->success)
-               {
-                       dbg("RESPONSE OK");
-                       ret = Send_SmsSubmitTpdu(tcore_pending_ref_core_object(p), ur);
-
-                       if(ret != (int)TCORE_RETURN_SUCCESS)
-                       {
-                               respSendMsg.result = SMS_INVALID_PARAMETER;
-                               tcore_user_request_send_response(ur, TRESP_SMS_SEND_UMTS_MSG, sizeof(struct tresp_sms_send_umts_msg), &respSendMsg);
-                       }       
-                       
-               }
-       else
-               {
-                       dbg("RESPONSE N OK");   
-                       memset(&respSendMsg, 0, sizeof(struct tresp_sms_send_umts_msg));
-       
-                       //failure case - consider this later
-                       line = resp->final_response;
-       
-                       respSendMsg.result = SMS_DEVICE_FAILURE;
-
-                       tcore_user_request_send_response(ur, TRESP_SMS_SEND_UMTS_MSG, sizeof(struct tresp_sms_send_umts_msg), &respSendMsg);
-                       
-               }
-}
-
-static void on_response_send_smsSubmitTpdu(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       dbg("Entered");
-
-       UserRequest *ur = NULL;
-       ur = tcore_pending_ref_user_request(p);
-       struct tresp_sms_send_umts_msg respUmtsInfo;
-       const TcoreATResponse *resp = data;
-       char *line = NULL , *pResp = NULL;
-       int ret =0, result = 0;
-       int mr = 0;
-       int error = 0;
-       GSList* tokens = NULL;
-
-       //currently IMC provides only index and msgref
-        memset(&respUmtsInfo, 0 , sizeof(struct tresp_sms_send_umts_msg));
-       
-       if(resp->success > 0)
-       {
-               dbg("Response OK");
-               if(resp->lines) {
-                       line = (const char *)resp->lines->data;
-                       dbg("line is %s",line);
-                       tokens = tcore_at_tok_new(line);
-                       pResp = g_slist_nth_data(tokens, 0);
-                       if (pResp != NULL)      
-                       {
-                               mr = atoi(pResp);
-                               result = SMS_SENDSMS_SUCCESS;
-                       }else
-                       {
-                               dbg("no MsgRef recieved");
-                               result = SMS_DEVICE_FAILURE;
-                       }
-               }else
-               {
-                       dbg("No lines");        
-                       result = SMS_DEVICE_FAILURE;
-               }
-       }else
-       {
-               //failure case - consider this later
-               dbg("Sent Status Response NOK");
-               result = SMS_DEVICE_FAILURE;
-       }
-               
-       ur = tcore_pending_ref_user_request(p);
-       if(ur)
-       {
-
-
-               dbg(" MR : %d", mr);
-               respUmtsInfo.result = result;
-               tcore_user_request_send_response(ur, TRESP_SMS_SEND_UMTS_MSG, sizeof(struct tresp_sms_send_umts_msg), &respUmtsInfo);
-
-       }
-       else
-       {
-               dbg("no user_request");
-       }
-       
-
-       dbg("Exit");
-       
-}
-
-static void on_response_read_msg(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       UserRequest *ur;
-       struct tresp_sms_read_msg respReadMsg;
-       const TcoreATResponse *atResp = data;
-
-       GSList *tokens=NULL;
-       char * line = NULL, *pResp = NULL , *pdu = NULL;
-       int ScLength = 0;
-       unsigned char LastSemiOctect;
-       int rtn =0 , i =0;
-       int stat =0 , alpha =0 , length =0;
-       int index = (int *)user_data;
-
-       ur = tcore_pending_ref_user_request(p);
-       if (!ur)
-       {
-               dbg("no user_request");
-               return;
-       }
-
-       if (atResp->success)
-       {
-               if (atResp->lines)
-               {
-                       line = (char*)atResp->lines->data;
-
-                       dbg("response Ok line is %s",line);
-
-                       tokens = tcore_at_tok_new(line);
-                       dbg(" length of tokens is %d\n", g_slist_length(atResp->lines));
-               
-                       pResp = g_slist_nth_data(tokens, 0);
-                       if (pResp != NULL)
-                       {
-                               //ToDO msg status mapping needs to be done
-                               stat = atoi(pResp);
-                               dbg("stat is %d",stat);
-                               switch (stat)
-                               {
-                                       case AT_REC_UNREAD:
-                                               respReadMsg.dataInfo.msgStatus = SMS_STATUS_UNREAD;
-                                               break;
-                                       case AT_REC_READ:
-                                               respReadMsg.dataInfo.msgStatus = SMS_STATUS_READ;
-                                               break;
-                                       case AT_STO_UNSENT:
-                                               respReadMsg.dataInfo.msgStatus = SMS_STATUS_UNSENT;
-                                               break;
-                                       case AT_STO_SENT:
-                                               respReadMsg.dataInfo.msgStatus = SMS_STATUS_SENT;
-                                               break;
-                                       case AT_ALL://TODO Need to verify the mapping
-                                               respReadMsg.dataInfo.msgStatus = SMS_STATUS_RESERVED;
-                                               break;
-                                       default://TODO Need to verify the mapping
-                                               respReadMsg.dataInfo.msgStatus = SMS_STATUS_RESERVED;
-                                               break;
-                               }
-                       }
-               
-                       pResp = g_slist_nth_data(tokens, 1);
-                       if (pResp != NULL)
-                       {
-                               alpha = atoi(pResp);
-                               dbg("alpha is %d",alpha);
-                       }
-               
-                       pResp = g_slist_nth_data(tokens, 2);
-                       if (pResp != NULL)
-                       {
-                               length = atoi(pResp);
-                               dbg("length is %d",length);
-                       }
-
-                       pdu = g_slist_nth_data(tokens, 3);
-                       if (pdu != NULL)
-                       {
-                               dbg("pdu is %s",pdu);
-                               ScLength = (int)pdu[0];
-
-                               respReadMsg.dataInfo.simIndex = index; //Retrieving index stored as part of req userdata 
-
-
-                       if(0 == ScLength)
-                       {
-
-                               respReadMsg.dataInfo.smsData.msgLength =  length  - (ScLength+1) ;
-
-                               if ((respReadMsg.dataInfo.smsData.msgLength >0) && (0xff >= respReadMsg.dataInfo.smsData.msgLength))
-                               {
-                                       dbg("SCA Length is 0");
-
-                                       memset(respReadMsg.dataInfo.smsData.sca, 0, TAPI_SIM_SMSP_ADDRESS_LEN);
-
-                                       //if(read_data.SmsData.MsgLength > SMS_SMDATA_SIZE_MAX)
-                                       //{
-                                               respReadMsg.dataInfo.smsData.msgLength = SMS_SMDATA_SIZE_MAX;
-                                       //}
-
-                                       memcpy(respReadMsg.dataInfo.smsData.tpduData, &pdu[2], respReadMsg.dataInfo.smsData.msgLength);
-                                       respReadMsg.result = SMS_SUCCESS;
-
-                                       rtn = tcore_user_request_send_response(ur, TRESP_SMS_READ_MSG, sizeof(struct tresp_sms_read_msg), &respReadMsg);
-                               }
-                               else
-                               {
-                                       dbg("Invalid Message Length");
-                                       respReadMsg.result = SMS_INVALID_PARAMETER_FORMAT;
-                                       rtn = tcore_user_request_send_response(ur, TRESP_SMS_READ_MSG, sizeof(struct tresp_sms_read_msg), &respReadMsg);
-                               }
-
-                       }
-                       else            //SCLength is Not 0
-                       {
-                               respReadMsg.dataInfo.smsData.msgLength =  (length - (ScLength+1));
-
-                               if ((respReadMsg.dataInfo.smsData.msgLength >0) && (0xff >= respReadMsg.dataInfo.smsData.msgLength))
-                               {
-                                       memcpy(respReadMsg.dataInfo.smsData.sca, (char*)pdu,(ScLength+1));
-
-                                       LastSemiOctect = pdu[ScLength + 1] & 0xf0;
-                                       if(LastSemiOctect == 0xf0)
-                                       {
-                                               respReadMsg.dataInfo.smsData.sca[0] = (ScLength-1)*2 - 1;
-                                       }
-                                       else
-                                       {
-                                               respReadMsg.dataInfo.smsData.sca[0] = (ScLength-1)*2;
-                                       }
-
-                                       //if(read_data.SmsData.MsgLength > SMS_SMDATA_SIZE_MAX)
-                                       //{
-                                               respReadMsg.dataInfo.smsData.msgLength = SMS_SMDATA_SIZE_MAX;
-                                       //}
-
-                                       for(i=0;i<(ScLength+1);i++)
-                                       {
-                                               dbg("SCA is [%2x] ", respReadMsg.dataInfo.smsData.sca[i]);
-                                       }
-
-                                       memcpy(respReadMsg.dataInfo.smsData.tpduData, &pdu[ScLength+1], respReadMsg.dataInfo.smsData.msgLength);
-                                       respReadMsg.result = SMS_SUCCESS;
-
-                                       rtn = tcore_user_request_send_response(ur, TRESP_SMS_READ_MSG, sizeof(struct tresp_sms_read_msg), &respReadMsg);
-                               }
-                               else
-                               {
-                                       dbg("Invalid Message Length");
-                                       respReadMsg.result = SMS_INVALID_PARAMETER_FORMAT;
-                                       rtn = tcore_user_request_send_response(ur, TRESP_SMS_READ_MSG, sizeof(struct tresp_sms_read_msg), &respReadMsg);
-                               }
-
-                       }
-               }
-               else
-               {
-                       dbg("Read PDU Is NULL");
-               }
-               }
-               else
-               {
-                       dbg("No lines in AT response");
-               }
-       }
-       else
-       {
-               dbg("Response NOK");
-       }
-       return;
-
-}
-
-
-static void on_response_get_msg_indices(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       UserRequest *ur = NULL;
-       struct tresp_sms_get_storedMsgCnt * respStoredMsgCnt = NULL;
-       int ctr = 0;
-       const TcoreATResponse *atResp = data;
-       GSList *tokens = NULL;
-       GSList *lines = NULL;
-       char *line = NULL , *pResp = NULL;
-       int usedCnt = 0, totalCnt = 0, result = 0, noOfLines = 0 , i = 0;
-
-       //memset(&respStoredMsgCnt, 0, sizeof(struct tresp_sms_get_storedMsgCnt));
-
-       respStoredMsgCnt = (struct tresp_sms_get_storedMsgCnt *)user_data;
-       ur = tcore_pending_ref_user_request(p);
-
-
-       if (atResp->success)
-        {
-                dbg("Response OK");
-                if(atResp->lines)
-                {
-                       noOfLines = g_slist_length(atResp->lines);
-
-                       if (noOfLines > SMS_GSM_SMS_MSG_NUM_MAX)
-                               noOfLines = SMS_GSM_SMS_MSG_NUM_MAX;
-
-                        line = (const char*)atResp->lines->data;
-                        dbg("line and no of lines is %s %d",line, noOfLines);
-                        tokens = tcore_at_tok_new(line);
-             
-       
-                       for (i = 0; i < noOfLines ; i++)
-                       {
-                               line = (char *)(lines->data);
-                               if (line != NULL)
-                               {
-                                       tokens = tcore_at_tok_new(line);
-                                       pResp = g_slist_nth_data(tokens, 0);
-                                       if (pResp != NULL)
-                                       {
-                                               respStoredMsgCnt->storedMsgCnt.indexList[i] = atoi(pResp);
-                                               lines = lines->next;
-                                       }
-                                       else
-                                       {
-                                               respStoredMsgCnt->result = SMS_DEVICE_FAILURE;
-                                               dbg("pResp is NULL");
-                               
-                                       }
-                               }
-                               else
-                               {
-                                       respStoredMsgCnt->result = SMS_DEVICE_FAILURE;
-                                       dbg("line is NULL");
-                               }
-                       }
-               }
-               else
-               {
-                       dbg("No lines");
-               }
-       }
-       else
-       {
-               dbg("Respnose NOK");
-       }
-       
-       
-       tcore_user_request_send_response(ur, TRESP_SMS_GET_STORED_MSG_COUNT, sizeof(struct tresp_sms_get_storedMsgCnt), respStoredMsgCnt);
-
-
-}
-
-static void on_response_get_storedMsgCnt(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       UserRequest *ur = NULL, *ur_dup = NULL;
-       struct tresp_sms_get_storedMsgCnt respStoredMsgCnt;
-       int ctr = 0;
-       const TcoreATResponse *atResp = data;
-       GSList *tokens=NULL;
-       char *line = NULL , *pResp = NULL , *cmd_str = NULL, *atReq = NULL;
-       int usedCnt = 0, totalCnt = 0, result = 0;
-
-       TcorePending *pending_new = NULL;
-       CoreObject *o = NULL;
-
-       memset(&respStoredMsgCnt, 0, sizeof(struct tresp_sms_get_storedMsgCnt));
-
-       ur = tcore_pending_ref_user_request(p);
-       ur_dup = tcore_user_request_ref(ur);
-       o = tcore_pending_ref_core_object(p);
-
-       if (atResp->success)
-       {
-               dbg("Response OK");
-               if(atResp->lines) 
-               {
-                       line = (const char*)atResp->lines->data;
-                       dbg("line is %s",line);
-                       tokens = tcore_at_tok_new(line);
-                        pResp = g_slist_nth_data(tokens, 0);
-                        if (pResp)
-                       {
-                                       usedCnt =atoi(pResp);
-                                       dbg("used cnt is %d",usedCnt);
-                                       
-                       }
-                        pResp = g_slist_nth_data(tokens, 1);
-                        if (pResp)
-                       {
-                                       totalCnt =atoi(pResp);
-                                       result = SMS_SENDSMS_SUCCESS;
-                                       
-                                       respStoredMsgCnt.storedMsgCnt.usedCount = usedCnt;
-                                       respStoredMsgCnt.storedMsgCnt.totalCount = totalCnt;
-                                       respStoredMsgCnt.result = result;
-                                       dbg("used %d, total %d, result %d",usedCnt, totalCnt,result);
-
-
-                                       // This is required  because CPMS does not give index list. So need to store the above in user req and again issue CMGL
-// commented to avoid parser malfunction hyKo 120819
-
-                                       pending_new = tcore_pending_new(o,0);
-                                       cmd_str = g_strdup_printf("AT+CMGL\r");;
-                                       dbg("cmd str is %s",cmd_str);
-                                       atReq = tcore_at_request_new((const char*)cmd_str, "+CMGL:", TCORE_AT_MULTILINE);
-                                       tcore_pending_set_request_data(pending_new, 0,atReq);
-                                       // Setting user data so as to send consolidated response to GetStoredMsgCnt notification
-                                       tcore_pending_set_response_callback(pending_new, on_response_get_msg_indices, (void *)&respStoredMsgCnt);
-                                       tcore_pending_link_user_request(pending_new, ur_dup);
-                                       tcore_pending_set_send_callback(pending_new, on_confirmation_sms_message_send, NULL);
-                                       tcore_hal_send_request(tcore_object_get_hal(o), pending_new);
-
-                                       return;
-
-                       }
-               }else
-               {
-                               dbg("No data");
-                               result = SMS_DEVICE_FAILURE;
-               }
-       }
-       else
-       {
-               dbg("Response NOK");
-       }
-
-       respStoredMsgCnt.storedMsgCnt.usedCount = usedCnt;
-       respStoredMsgCnt.storedMsgCnt.totalCount = totalCnt;
-       respStoredMsgCnt.result = result;
-       //TODO - index list needs to be populated
-//     tcore_user_request_send_response(ur, TRESP_SMS_GET_STORED_MSG_COUNT, sizeof(struct tresp_sms_get_storedMsgCnt), &respStoredMsgCnt);
-
-       return;
-}
-
-static void on_response_get_sca(TcorePending *pending, int data_len, const void *data, void *user_data)
-{
-       //Response is expected in this format +CSCA: <sca>,<tosca>
-
-       TcorePlugin *plugin;
-       UserRequest *ur;
-       struct tresp_sms_get_sca respGetSca;
-       GSList *tokens=NULL;
-
-       //copies the AT response data to resp
-       const TcoreATResponse *atResp = data;
-       char *line = NULL, *sca = NULL, *typeOfAddress = NULL;
-
-       int err = 0;
-       int response = 0;
-
-       // +CSCA: <sca number>,<sca type>
-
-       memset(&respGetSca, 0, sizeof(struct tresp_sms_get_sca));
-
-       ur = tcore_pending_ref_user_request(pending);
-       if (atResp->success)
-       {
-               dbg("Response OK");
-               if(atResp->lines) 
-               {
-                       line = (const char*)atResp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       sca = g_slist_nth_data(tokens, 0);
-                       typeOfAddress = g_slist_nth_data(tokens, 1);
-                       if ((sca) && (typeOfAddress))
-                       {
-                                       dbg("sca and address type are %s %s", sca, typeOfAddress);
-                                       respGetSca.scaAddress.dialNumLen = strlen(sca);
-                                       if(atoi(typeOfAddress) == 145)
-                                               {
-                                                       respGetSca.scaAddress.typeOfNum = SIM_TON_INTERNATIONAL;
-                                               }
-                                       else    
-                                               {
-                                                       respGetSca.scaAddress.typeOfNum = SIM_TON_NATIONAL;
-                                               }
-                                       respGetSca.scaAddress.numPlanId = 0;
-               
-                                       memcpy(respGetSca.scaAddress.diallingNum, sca, strlen(sca));
-
-                                       dbg("len %d, sca %s, TON %d, NPI %d",respGetSca.scaAddress.dialNumLen,respGetSca.scaAddress.diallingNum,respGetSca.scaAddress.typeOfNum,respGetSca.scaAddress.numPlanId); 
-                                       respGetSca.result = SMS_SENDSMS_SUCCESS;
-                       }
-               }
-       }
-       else
-       {
-               dbg("Response NOK");
-               respGetSca.result = SMS_DEVICE_FAILURE;
-       }
-       
-       tcore_user_request_send_response(ur, TRESP_SMS_GET_SCA, sizeof(struct tresp_sms_get_sca), &respGetSca);
-       return;
-       
-}
-
-static void on_response_set_sca(TcorePending *pending, int data_len, const void *data, void *user_data)
-{
-       /*
-       Response is expected in this format 
-       OK
-               or
-       +CMS ERROR: <err>
-       */
-       
-       //CoreObject *obj = user_data;
-       UserRequest *ur;
-       //copies the AT response data to resp
-       const TcoreATResponse *atResp = data;
-       char * line = NULL;
-       struct tresp_sms_set_sca respSetSca;
-       int err = 0, response = 0;
-
-       memset(&respSetSca, 0, sizeof(struct tresp_sms_set_sca));
-
-       ur = tcore_pending_ref_user_request(pending);
-       if (!ur)
-       {
-               dbg("no user_request");
-               return;
-       }
-       
-       if (atResp->success >0)
-       {
-               dbg("RESPONSE OK");
-               respSetSca.result = SMS_SUCCESS;
-       }
-       else
-       {
-               dbg("RESPONSE NOK");
-               respSetSca.result = SMS_DEVICE_FAILURE;
-       }
-
-       tcore_user_request_send_response(ur, TRESP_SMS_SET_SCA, sizeof(struct tresp_sms_set_sca), &respSetSca);
-
-       return;
-}
-
-
-static void on_response_get_cb_config(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       UserRequest *ur;
-       struct tresp_sms_get_cb_config respGetCbConfig;
-       const TcoreATResponse *atResp = data;
-       GSList *tokens=NULL;
-
-       int msgid_length = 0 , msgCount = 0;
-       int i = 0, mode =0 , result = 0;
-       char *mid = NULL, *dcs = NULL, *pResp = NULL, *line = NULL, *res = NULL;
-       char delim[] = ",";
-
-       memset(&respGetCbConfig, 0, sizeof(struct tresp_sms_get_cb_config));
-
-       ur = tcore_pending_ref_user_request(p);
-       if (!ur)
-       {
-               dbg("no user_request");
-               return;
-       }
-
-       if (atResp->success)
-       {
-               dbg("Response OK");
-               if(atResp->lines) 
-               {
-                       line = (const char*)atResp->lines->data;
-                       if (line != NULL)
-                       {
-                               dbg("line is %s",line); 
-                               tokens = tcore_at_tok_new(line);
-                               pResp = g_slist_nth_data(tokens, 0);
-                               if (pResp)
-                               {
-                                       mode = atoi(pResp);
-                                       respGetCbConfig.cbConfig.bCBEnabled = mode;
-                                       pResp = g_slist_nth_data(tokens, 1);
-                                       if (pResp)
-                                       {
-                                               mid = strtok(pResp, delim); i = 0;
-                                                       while( res != NULL ) 
-                                                       {
-                                                               res = strtok( NULL, delim );
-                                                               dbg("mid is %s%s\n", mid,res);
-                                                               if (result!= NULL)
-                                                               {
-                                                                       if (strlen(res) >0)
-                                                                               {
-                                                                                       respGetCbConfig.cbConfig.msgIDs[i] = atoi(res);
-                                                                                       i++;
-                                                                               }
-                                                               }
-                                                       }
-                                       }
-                                       else
-                                       {
-                                                       result = SMS_DEVICE_FAILURE;
-                                       }
-                                       respGetCbConfig.cbConfig.msgIdCount = i;
-
-                               }
-                               else
-                               {
-                                               result = SMS_DEVICE_FAILURE;
-                               }
-                               //dcs = g_slist_nth_data(tokens, 2); DCS not needed by telephony
-                       }
-                       else
-                       {
-                               dbg("line is NULL");
-                               result = SMS_DEVICE_FAILURE;
-                       }
-                       
-                       
-               }
-               else
-               {
-                               result = SMS_DEVICE_FAILURE;
-                               dbg("atresp->lines is NULL");
-               }
-       }
-       else
-       {
-                       result = SMS_DEVICE_FAILURE;
-                       dbg("RESPONSE NOK");
-       }
-
-       // Todo max list count and selectedid
-
-       tcore_user_request_send_response(ur, TRESP_SMS_GET_CB_CONFIG, sizeof(struct tresp_sms_get_cb_config), &respGetCbConfig);
-
-       return;
-}
-
-static void on_response_set_cb_config(TcorePending *pending, int data_len, const void *data, void *user_data)
-{
-       /*
-       Response is expected in this format 
-       OK
-               or
-       +CMS ERROR: <err>
-       */
-
-       CoreObject *obj = user_data;
-       UserRequest *ur;
-       const TcoreATResponse *resp = data;
-       
-       GQueue *queue;
-       int err;
-       int response;
-       const char *line = NULL;
-       GSList *tokens=NULL;
-       
-       struct tresp_sms_set_cb_config respSetCbConfig = {0,};
-
-       memset(&respSetCbConfig, 0, sizeof(struct tresp_sms_set_cb_config));
-
-       ur = tcore_pending_ref_user_request(pending);
-
-       if(resp->success > 0)
-       {
-               dbg("RESPONSE OK");
-               
-       }
-       else
-       {
-               dbg("RESPONSE NOK");
-               line = (const char*)resp->final_response;
-               tokens = tcore_at_tok_new(line);
-
-               if (g_slist_length(tokens) < 1) {
-                       dbg("err cause not specified or string corrupted");
-                       respSetCbConfig.result = TCORE_RETURN_3GPP_ERROR;
-               }
-               else
-               {
-                       response = atoi(g_slist_nth_data(tokens, 0));
-                       /* TODO: CMEE error mapping is required. */
-                       respSetCbConfig.result = TCORE_RETURN_3GPP_ERROR;
-               }
-       }
-       if (!ur)
-       {
-               dbg("no user_request");
-               return;
-       }
-
-       tcore_user_request_send_response(ur, TRESP_SMS_SET_CB_CONFIG, sizeof(struct tresp_sms_set_cb_config), &respSetCbConfig);
-
-       return;
-}
-
-static void on_response_set_mem_status(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       UserRequest *ur;
-       struct tresp_sms_set_mem_status respSetMemStatus = {0,};
-       const TcoreATResponse *resp = data;
-       int err = 0, response = 0;
-       const char *line = NULL;
-       GSList *tokens=NULL;
-       
-       struct tresp_sms_set_cb_config respSetCbConfig = {0,};
-
-       memset(&respSetMemStatus, 0, sizeof(struct tresp_sms_set_mem_status));
-
-       if(resp->success > 0)
-       {
-               dbg("RESPONSE OK");
-               respSetMemStatus.result = SMS_SENDSMS_SUCCESS;
-               
-       }
-       else
-       {
-               dbg("RESPONSE NOK");
-               respSetMemStatus.result = SMS_DEVICE_FAILURE;
-       }       
-
-       ur = tcore_pending_ref_user_request(p);
-       if (!ur)
-       {
-               dbg("no user_request");
-               return;
-       }
-
-       tcore_user_request_send_response(ur, TRESP_SMS_SET_MEM_STATUS, sizeof(struct tresp_sms_set_mem_status), &respSetMemStatus);
-
-       return;
-}
-
-
-static void on_response_set_msg_status(TcorePending *pending, int data_len, const void *data, void *user_data)
-{
-       UserRequest *ur;
-       struct tresp_sms_set_msg_status respMsgStatus = {0,};
-       const TcoreATResponse *atResp = data;
-        int err = 0, response = 0, sw1 =0 , sw2 = 0;
-        const char *line = NULL;
-        char *pResp = NULL;
-        GSList *tokens=NULL;
-
-       dbg("Entry");
-
-       memset(&respMsgStatus, 0, sizeof(struct tresp_sms_set_msg_status));
-        ur = tcore_pending_ref_user_request(pending);
-
-        if(atResp->success > 0)
-        {
-                dbg("RESPONSE OK");
-
-               if(atResp->lines)
-                {
-                        line = (const char*)atResp->lines->data;
-                        tokens = tcore_at_tok_new(line);
-                        pResp = g_slist_nth_data(tokens, 0);
-                        if (pResp != NULL)
-                        {
-                                sw1 = atoi(pResp);
-                        }
-                        else
-                        {
-                                respMsgStatus.result = SMS_DEVICE_FAILURE;
-                                dbg("sw1 is NULL");
-                        }
-                        pResp = g_slist_nth_data(tokens, 1);
-                        if (pResp != NULL)
-                        {
-                                sw2 = atoi(pResp);
-                                if ((sw1 == 144) && (sw2 == 0))
-                                {
-                                        respMsgStatus.result = SMS_SENDSMS_SUCCESS;
-                                }
-                                else
-                                {
-                                        //TODO Error Mapping
-                                        respMsgStatus.result = SMS_DEVICE_FAILURE;
-                                }
-                        }
-                        else
-                        {
-                                dbg("sw2 is NULL");
-                                respMsgStatus.result = SMS_DEVICE_FAILURE;
-
-                               }
-                        pResp = g_slist_nth_data(tokens, 3);
-
-                       if (pResp != NULL)
-                        {
-                                response = pResp;
-                                dbg("response is %s", response);
-                        }
-
-                }
-               else
-               {
-                       dbg("No lines");
-               }
-
-        }
-        else
-        {
-                dbg("RESPONSE NOK");
-                respMsgStatus.result = SMS_DEVICE_FAILURE;
-        }
-
-        tcore_user_request_send_response(ur, TRESP_SMS_SET_MSG_STATUS , sizeof(struct tresp_sms_set_msg_status), &respMsgStatus);
-
-
-
-       dbg("Exit");
-       return;
-}
-
-static void on_response_get_sms_params(TcorePending *pending, int data_len, const void *data, void *user_data)
-{
-       dbg("Entry");
-
-       UserRequest *ur;
-       struct tresp_sms_get_params respGetParams = {0,};
-       const TcoreATResponse *atResp = data;
-       int err = 0, response = 0, sw1 =0 , sw2 = 0;
-       const char *line = NULL;
-       char *pResp = NULL;
-       GSList *tokens=NULL;
-       
-       memset(&respGetParams, 0, sizeof(struct tresp_sms_set_params));
-       ur = tcore_pending_ref_user_request(pending);
-               
-       if(atResp->success > 0)
-       {
-               dbg("RESPONSE OK");
-
-               if(atResp->lines) 
-               {
-                       line = (const char*)atResp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       pResp = g_slist_nth_data(tokens, 0);
-                       if (pResp != NULL)
-                       {
-                               sw1 = atoi(pResp);
-                       }
-                       else
-                       {
-                               respGetParams.result = SMS_DEVICE_FAILURE;
-                               dbg("sw1 is NULL");
-                       }
-                       pResp = g_slist_nth_data(tokens, 1);
-                       if (pResp != NULL)
-                       {
-                               sw2 = atoi(pResp);
-                               if ((sw1 == 144) && (sw2 == 0))
-                               {
-                                       respGetParams.result = SMS_SENDSMS_SUCCESS;
-                               }
-                               else
-                               {
-                                       //TODO Error Mapping
-                                       respGetParams.result = SMS_DEVICE_FAILURE;
-                               }
-                       }
-                       else
-                       {
-                               dbg("sw2 is NULL");
-                               respGetParams.result = SMS_DEVICE_FAILURE;
-                               
-                       }
-                       pResp = g_slist_nth_data(tokens, 3);
-                       if (pResp != NULL)
-                       {
-                               response = pResp;
-                               dbg("response is %s", response);
-                       }
-                       
-               }
-       }
-       else
-       {
-               dbg("RESPONSE NOK");
-               respGetParams.result = SMS_DEVICE_FAILURE;
-       }
-
-       dbg("Exit");
-       return;
-}
-
-static void on_response_set_sms_params(TcorePending *pending, int data_len, const void *data, void *user_data)
-{
-       dbg("Entry");
-       
-       UserRequest *ur;
-       struct tresp_sms_set_params respSetParams = {0,};
-       const TcoreATResponse *atResp = data;
-       int err = 0, response = 0, sw1 =0 , sw2 = 0;
-       const char *line = NULL;
-       char *pResp = NULL;
-       GSList *tokens=NULL;
-       
-
-       memset(&respSetParams, 0, sizeof(struct tresp_sms_set_params));
-       ur = tcore_pending_ref_user_request(pending);
-               
-       if(atResp->success > 0)
-       {
-               dbg("RESPONSE OK");
-
-               if(atResp->lines) 
-               {
-                       line = (const char*)atResp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       pResp = g_slist_nth_data(tokens, 0);
-                       if (pResp != NULL)
-                       {
-                               sw1 = atoi(pResp);
-                       }
-                       else
-                       {
-                               respSetParams.result = SMS_DEVICE_FAILURE;
-                               dbg("sw1 is NULL");
-                       }
-                       pResp = g_slist_nth_data(tokens, 1);
-                       if (pResp != NULL)
-                       {
-                               sw2 = atoi(pResp);
-                               if ((sw1 == 144) && (sw2 == 0))
-                               {
-                                       respSetParams.result = SMS_SENDSMS_SUCCESS;
-                               }
-                               else
-                               {
-                                       //TODO Error Mapping
-                                       respSetParams.result = SMS_DEVICE_FAILURE;
-                               }
-                       }
-                       else
-                       {
-                               dbg("sw2 is NULL");
-                               respSetParams.result = SMS_DEVICE_FAILURE;
-                               
-                       }
-                       pResp = g_slist_nth_data(tokens, 3);
-                       if (pResp != NULL)
-                       {
-                               response = pResp;
-                               dbg("response is %s", response);
-                       }
-                       
-               }
-       }
-       else
-       {
-               dbg("RESPONSE NOK");
-               respSetParams.result = SMS_DEVICE_FAILURE;
-       }       
-
-       tcore_user_request_send_response(ur, TRESP_SMS_SET_PARAMS , sizeof(struct tresp_sms_set_params), &respSetParams);
-
-       dbg("Exit");
-       return;
-}
-
-static void on_response_get_paramcnt(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       dbg("Entry");
-
-       UserRequest *ur = NULL;
-       struct tresp_sms_get_paramcnt respGetParamCnt = {0,};
-       const TcoreATResponse *atResp = data;
-       dbg("Entry");
-       char *line = NULL , *pResp = NULL;
-       int ret = 0;
-       int sw1 = 0 , sw2 = 0;
-       int sim_type = SIM_TYPE_USIM; //TODO need to check how to handle this
-       GSList *tokens=NULL;
-
-       ur = tcore_pending_ref_user_request(p);
-
-       if(atResp->success > 0)
-       {
-               dbg("RESPONSE OK");
-
-               if(atResp->lines) 
-               {
-                       line = (const char*)atResp->lines->data;
-                       tokens = tcore_at_tok_new(line);
-                       pResp = g_slist_nth_data(tokens, 0);
-                       if (pResp != NULL)
-                       {
-                               sw1 = atoi(pResp);
-                       }
-                       else
-                       {
-                               respGetParamCnt.result = SMS_DEVICE_FAILURE;
-                               dbg("sw1 is NULL");
-                       }
-                       pResp = g_slist_nth_data(tokens, 1);
-                       if (pResp != NULL)
-                       {
-                               sw2 = atoi(pResp);
-                               if ((sw1 == 144) && (sw2 == 0))
-                               {
-                                       respGetParamCnt.result = SMS_SENDSMS_SUCCESS;
-                               }
-                               else
-                               {
-                                       //TODO Error Mapping
-                                       respGetParamCnt.result = SMS_DEVICE_FAILURE;
-                               }
-                       }
-                       else
-                       {
-                               dbg("sw2 is NULL");
-                               respGetParamCnt.result = SMS_DEVICE_FAILURE;
-                               
-                       }
-                       pResp = g_slist_nth_data(tokens, 3);
-                       if (pResp != NULL)
-                       {
-                               char *hexData;  
-                               char *recordData;
-                               
-                               hexData  = pResp;
-                               if (pResp)
-                               dbg("response is %s", pResp);
-                               
-                               /*1. SIM access success case*/
-                               if ((sw1 == 0x90 && sw2 == 0x00) || sw1 == 0x91) 
-                               {
-                                       unsigned char tag_len = 0; /*   1 or 2 bytes ??? */
-                                       unsigned short record_len = 0;
-                                       char num_of_records = 0;
-                                       unsigned char file_id_len = 0;
-                                       unsigned short file_id = 0;
-                                       unsigned short file_size = 0;
-                                       unsigned short file_type = 0;
-                                       unsigned short arr_file_id = 0;
-                                       int arr_file_id_rec_num = 0;
-
-                                       /*      handling only last 3 bits */
-                                       unsigned char file_type_tag = 0x07;
-                                       unsigned char *ptr_data;
-
-                                       recordData = util_hexStringToBytes(hexData);
-                                       util_hex_dump("    ", strlen(hexData)/2, recordData);
-               
-                                       ptr_data = (unsigned char *)recordData;
-
-                                       if (sim_type ==  SIM_TYPE_USIM) {
-                                               /*
-                                                ETSI TS 102 221 v7.9.0
-                                                       - Response Data
-                                                        '62'   FCP template tag
-                                                        - Response for an EF
-                                                        '82'   M       File Descriptor
-                                                        '83'   M       File Identifier
-                                                       'A5'    O       Proprietary information
-                                                        '8A'   M       Life Cycle Status Integer
-                                                        '8B', '8C' or 'AB'     C1      Security attributes
-                                                       '80'    M       File size
-                                                        '81'   O       Total file size
-                                                        '88'   O       Short File Identifier (SFI)
-                                               */
-
-                                               /* rsim.res_len  has complete data length received  */
-
-                                               /* FCP template tag - File Control Parameters tag*/
-                                               if (*ptr_data == 0x62) {
-                                                       /* parse complete FCP tag*/
-                                                       /* increment to next byte */
-                                                       ptr_data++;
-                                                       tag_len = *ptr_data++;
-                                                       /* FCP file descriptor - file type, accessibility, DF, ADF etc*/
-                                               if (*ptr_data == 0x82) {
-                                                               /* increment to next byte */
-                                                               ptr_data++;
-                                                               /*2 or 5 value*/
-                                                               ptr_data++;
-                                               /*      unsigned char file_desc_len = *ptr_data++;*/
-                                               /*      dbg("file descriptor length: [%d]", file_desc_len);*/
-                                               /* TBD:  currently capture only file type : ignore sharable, non sharable, working, internal etc*/
-                                               /* consider only last 3 bits*/
-                                               file_type_tag = file_type_tag & (*ptr_data);
-
-                                               switch (file_type_tag) {
-                                                       /* increment to next byte */
-                                                       ptr_data++;
-                                                       case 0x1:
-                                                               dbg("Getting FileType: [Transparent file type]");
-                                                               /* increment to next byte */
-                                                               ptr_data++;
-                                                               file_type = 0x01;       //SIM_FTYPE_TRANSPARENT
-                                                               /*      data coding byte - value 21 */
-                                                               ptr_data++;
-                                                               break;
-
-                                                       case 0x2:
-                                                               dbg("Getting FileType: [Linear fixed file type]");
-                                                               /* increment to next byte */
-                                                               ptr_data++;
-                                                               /*      data coding byte - value 21 */
-                                                               ptr_data++;
-                                                               /*      2bytes */
-                                                               memcpy(&record_len, ptr_data, 2);
-                                                               /* swap bytes */
-                                                               SMS_SWAPBYTES16(record_len);
-                                                               ptr_data = ptr_data + 2;
-                                                               num_of_records = *ptr_data++;
-                                                               /* Data lossy conversation from enum (int) to unsigned char */
-                                                               file_type = 0x02;       // SIM_FTYPE_LINEAR_FIXED
-                                                               break;
-
-                                                       case 0x6:
-                                                               dbg(" Cyclic fixed file type");
-                                                               /* increment to next byte */
-                                                               ptr_data++;
-                                                               /*      data coding byte - value 21 */
-                                                               ptr_data++;
-                                                               /*      2bytes */
-                                                               memcpy(&record_len, ptr_data, 2);
-                                                               /* swap bytes  */
-                                                               SMS_SWAPBYTES16(record_len);
-                                                               ptr_data = ptr_data + 2;
-                                                               num_of_records = *ptr_data++;
-                                                               file_type = 0x04;       //SIM_FTYPE_CYCLIC
-                                                               break;
-
-                                               default:
-                                                       dbg("not handled file type [0x%x]", *ptr_data);
-                                                       break;
-                                               }
-                                       }
-                                       else 
-                                       {
-                                               dbg("INVALID FCP received - DEbug!");
-                                               return;
-                                       }
-
-                                       /*File identifier - file id?? */ // 0x84,0x85,0x86 etc are currently ignored and not handled
-                                       if (*ptr_data == 0x83) {
-                                               /* increment to next byte */
-                                               ptr_data++;
-                                               file_id_len = *ptr_data++;
-                                               memcpy(&file_id, ptr_data, file_id_len);
-                                               /* swap bytes    */
-                                               SMS_SWAPBYTES16(file_id);
-                                               ptr_data = ptr_data + 2;
-                                               dbg("Getting FileID=[0x%x]", file_id);
-                                       } else {
-                                               dbg("INVALID FCP received - DEbug!");
-                                               free(recordData);
-                                               //ReleaseResponse();                                            
-                                               return;
-                                       }
-
-                                       /*      proprietary information  */
-                                       if (*ptr_data == 0xA5) {
-                                               unsigned short prop_len;
-                                               /* increment to next byte */
-                                               ptr_data++;
-                                               /* length */
-                                               prop_len = *ptr_data;
-                                               /* skip data */
-                                               ptr_data = ptr_data + prop_len + 1;
-                                       } else {
-                                               dbg("INVALID FCP received - DEbug!");
-                                       }
-
-                                       /* life cycle status integer [8A][length:0x01][status]*/
-                                       /*
-                                        status info b8~b1
-                                        00000000 : No information given
-                                        00000001 : creation state
-                                        00000011 : initialization state
-                                        000001-1 : operation state -activated
-                                        000001-0 : operation state -deactivated
-                                        000011-- : Termination state
-                                        b8~b5 !=0, b4~b1=X : Proprietary
-                                        Any other value : RFU
-                                        */
-                                       if (*ptr_data == 0x8A) {
-                                               /* increment to next byte */
-                                               ptr_data++;
-                                               /* length - value 1 */
-                                               ptr_data++;
-
-                                               switch (*ptr_data) {
-                                                       case 0x04:
-                                                       case 0x06:
-                                                               dbg("<IPC_RX> operation state -deactivated");
-                                                               ptr_data++;
-                                                               break;
-                                                       case 0x05:
-                                                       case 0x07:
-                                                               dbg("<IPC_RX> operation state -activated");
-                                                               ptr_data++;
-                                                               break;
-                                                       default:
-                                                               dbg("<IPC_RX> DEBUG! LIFE CYCLE STATUS =[0x%x]",*ptr_data);
-                                                               ptr_data++;
-                                                               break;
-                                               }
-                                       }
-
-                                       /* related to security attributes : currently not handled*/
-                                       if (*ptr_data == 0x86 || *ptr_data == 0x8B || *ptr_data == 0x8C || *ptr_data == 0xAB) {
-                                               /* increment to next byte */
-                                               ptr_data++;
-                                               /* if tag length is 3 */
-                                               if (*ptr_data == 0x03) {
-                                                       /* increment to next byte */
-                                                       ptr_data++;
-                                                       /* EFARR file id */
-                                                       memcpy(&arr_file_id, ptr_data, 2);
-                                                       /* swap byes */
-                                                       SMS_SWAPBYTES16(arr_file_id);
-                                                       ptr_data = ptr_data + 2;
-                                                       arr_file_id_rec_num = *ptr_data++;
-                                               } else {
-                                                       /* if tag length is not 3 */
-                                                       /* ignoring bytes       */
-                                                       //      ptr_data = ptr_data + 4;
-                                                       dbg("Useless security attributes, so jump to next tag");
-                                                       ptr_data = ptr_data + (*ptr_data + 1);
-                                               }
-                                       } else {
-                                               dbg("INVALID FCP received[0x%x] - DEbug!", *ptr_data);
-                                               free(recordData);
-                                                       
-                                               return;
-                                       }
-
-                                       dbg("Current ptr_data value is [%x]", *ptr_data);
-
-                                       /* file size excluding structural info*/
-                                       if (*ptr_data == 0x80) {
-                                               /* for EF file size is body of file and for Linear or cyclic it is
-                                                * number of recXsizeof(one record)
-                                                */
-                                               /* increment to next byte */
-                                               ptr_data++;
-                                               /* length is 1 byte - value is 2 bytes or more */
-                                               ptr_data++;
-                                               memcpy(&file_size, ptr_data, 2);
-                                               /* swap bytes */
-                                               SMS_SWAPBYTES16(file_size);
-                                               ptr_data = ptr_data + 2;
-                                       } else {
-                                               dbg("INVALID FCP received - DEbug!");
-                                               free(recordData);
-                                               return;
-                                       }
-
-                                       /* total file size including structural info*/
-                                       if (*ptr_data == 0x81) {
-                                               int len;
-                                               /* increment to next byte */
-                                               ptr_data++;
-                                               /* length */
-                                               len = *ptr_data;
-                                               /* ignored bytes */
-                                               ptr_data = ptr_data + 3;
-                                       } else {
-                                               dbg("INVALID FCP received - DEbug!");
-                                               /* 0x81 is optional tag?? check out! so do not return -1 from here! */
-                                               /* return -1; */
-                                       }
-                                       /*short file identifier ignored*/
-                                       if (*ptr_data == 0x88) {
-                                               dbg("0x88: Do Nothing");
-                                               /*DO NOTHING*/
-                                       }
-                               } else {
-                                       dbg("INVALID FCP received - DEbug!");
-                                       free(recordData);
-                                       return;
-                               }
-                       }
-                       else if (sim_type == SIM_TYPE_GSM) 
-                       {
-                               unsigned char gsm_specific_file_data_len = 0;
-                               /*      ignore RFU byte1 and byte2 */
-                               ptr_data++;
-                               ptr_data++;
-                               /*      file size */
-                               //file_size = p_info->response_len;
-                               memcpy(&file_size, ptr_data, 2);
-                               /* swap bytes */
-                               SMS_SWAPBYTES16(file_size);
-                               /*      parsed file size */
-                               ptr_data = ptr_data + 2;
-                               /*  file id  */
-                               memcpy(&file_id, ptr_data, 2);
-                               SMS_SWAPBYTES16(file_id);
-                               dbg(" FILE id --> [%x]", file_id);
-                               ptr_data = ptr_data + 2;
-                               /* save file type - transparent, linear fixed or cyclic */
-                               file_type_tag = (*(ptr_data + 7));
-
-                               switch (*ptr_data) {
-                                       case 0x0:
-                                               /* RFU file type */
-                                               dbg(" RFU file type- not handled - Debug!");
-                                               break;
-                                       case 0x1:
-                                               /* MF file type */
-                                               dbg(" MF file type - not handled - Debug!");
-                                               break;
-                                       case 0x2:
-                                               /* DF file type */
-                                               dbg(" DF file type - not handled - Debug!");
-                                               break;
-                                       case 0x4:
-                                               /* EF file type */
-                                               dbg(" EF file type [%d] ", file_type_tag);
-                                               /*      increment to next byte */
-                                               ptr_data++;
-
-                                               if (file_type_tag == 0x00 || file_type_tag == 0x01) {
-                                                       /* increament to next byte as this byte is RFU */
-                                                       ptr_data++;
-                                                       file_type =
-                                                                       (file_type_tag == 0x00) ? 0x01 : 0x02; // SIM_FTYPE_TRANSPARENT:SIM_FTYPE_LINEAR_FIXED;
-                                               } else {
-                                                       /* increment to next byte */
-                                                       ptr_data++;
-                                                       /*      For a cyclic EF all bits except bit 7 are RFU; b7=1 indicates that */
-                                                       /* the INCREASE command is allowed on the selected cyclic file. */
-                                                       file_type = 0x04;       // SIM_FTYPE_CYCLIC;
-                                               }
-                                               /* bytes 9 to 11 give SIM file access conditions */
-                                               ptr_data++;
-                                               /* byte 10 has one nibble that is RF U and another for INCREASE which is not used currently */
-                                               ptr_data++;
-                                               /* byte 11 is invalidate and rehabilate nibbles */
-                                               ptr_data++;
-                                               /* byte 12 - file status */
-                                               ptr_data++;
-                                               /* byte 13 - GSM specific data */
-                                               gsm_specific_file_data_len = *ptr_data;
-                                               ptr_data++;
-                                               /*      byte 14 - structure of EF - transparent or linear or cyclic , already saved above */
-                                               ptr_data++;
-                                               /* byte 15 - length of record for linear and cyclic , for transparent it is set to 0x00. */
-                                               record_len = *ptr_data;
-                                               dbg("record length[%d], file size[%d]", record_len, file_size);
-
-                                               if (record_len != 0)
-                                                       num_of_records = (file_size / record_len);
-
-                                               dbg("Number of records [%d]", num_of_records);
-                                               break;
-
-                                       default:
-                                               dbg(" not handled file type");
-                                               break;
-                               }
-                       } 
-                       else 
-                       {
-                               dbg(" Card Type - UNKNOWN  [%d]", sim_type);
-                       }
-
-                       dbg("EF[0x%x] size[%ld] Type[0x%x] NumOfRecords[%ld] RecordLen[%ld]", file_id, file_size, file_type, num_of_records, record_len);
-
-                       respGetParamCnt.recordCount = num_of_records;
-                       respGetParamCnt.result = SMS_SUCCESS;
-                       
-                       free(recordData);
-               }
-               else 
-               {
-                       /*2. SIM access fail case*/
-                       dbg("SIM access fail");
-                       respGetParamCnt.result = SMS_UNKNOWN;
-               }
-               }
-                       
-               }
-       }
-       else
-       {
-               dbg("RESPONSE NOK");
-               respGetParamCnt.result = SMS_DEVICE_FAILURE;
-       }
-
-       
-       tcore_user_request_send_response(ur, TRESP_SMS_GET_PARAMCNT, sizeof(struct tresp_sms_get_paramcnt), &respGetParamCnt);
-
-       dbg("Exit");
-       return;
-}
-/********************************************************/
-/******************** Str Utility Functions *******************/
-
-
-
-
-
-
-/********************************************************/
-/***********************  Requests ************************/
-/********************************************************/
-static TReturn send_umts_msg(CoreObject *obj, UserRequest *ur)
-{
-       TcorePlugin *plugin = NULL;
-       TcoreHal *hal = NULL;
-       TcoreATRequest *atreq = NULL;
-       char *cmd_str = NULL;
-       
-       TcorePending *pending = NULL;
-       const struct treq_sms_send_umts_msg *sendUmtsMsg = NULL;
-       GQueue *queue = NULL;
-
-       Storage *strg = NULL;
-       int mode = 0x00;
-       Server *s = NULL;
-
-       unsigned char optMask = 0;
-       TReturn api_err = TCORE_RETURN_SUCCESS;
-
-       hal = tcore_object_get_hal(obj);
-       pending = tcore_pending_new(obj, 0);
-
-       dbg("new pending(TIZEN_SMS_SEND_MSG)");
-       sendUmtsMsg = tcore_user_request_ref_data(ur, NULL);
-       
-       // AT command to select MoreMessagesToSend. In the response, actual send AT cmd will be sent
-       cmd_str = g_strdup_printf("AT+CMMS=%d\r", sendUmtsMsg->more);
-       atreq = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);
-
-       tcore_pending_set_request_data(pending,0,atreq);
-       tcore_pending_set_timeout(pending, 0);
-       tcore_pending_set_response_callback(pending, on_response_send_umts_msg, hal);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);
-
-
-       tcore_hal_send_request(hal, pending);
-       return TCORE_RETURN_SUCCESS;
-}
-
-
-static TReturn Send_SmsSubmitTpdu(CoreObject *o, UserRequest *ur)
-{
-       TcorePlugin *p = NULL;
-       TcoreHal *h = NULL;
-       TcorePending *pending = NULL;
-       const struct treq_sms_send_umts_msg *sendUmtsMsg = NULL;
-       
-       char *cmd_str = NULL;
-       char tpdu[2*MAX_GSM_SMS_TPDU_SIZE];
-       int ScLength = 0;
-       int tpduDataLen = 0;
-       int i = 0;
-
-       TcoreATRequest *atreq = NULL;
-       TReturn api_err = TCORE_RETURN_SUCCESS;
-
-       sendUmtsMsg = tcore_user_request_ref_data(ur, NULL);
-
-       h = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-
-       if (!sendUmtsMsg || !h)
-               return TCORE_RETURN_ENOSYS;
-
-       /* Populate data */
-       dbg("[tcore_SMS] MoreToSend[0x%x](1:Persist, 2:NotPersist) MsgLen[%d]",sendUmtsMsg->more, sendUmtsMsg->msgDataPackage.msgLength);
-       for(i=0; i<sendUmtsMsg->msgDataPackage.msgLength; i++)
-               dbg("[%02x]", sendUmtsMsg->msgDataPackage.tpduData[i]);
-
-       ScLength = sendUmtsMsg->msgDataPackage.sca[0];
-
-       if ((sendUmtsMsg->msgDataPackage.msgLength > 0)
-               && (SMS_SMDATA_SIZE_MAX > sendUmtsMsg->msgDataPackage.msgLength)
-               && (ScLength <= SMS_MAX_SMS_SERVICE_CENTER_ADDR))
-       {
-                       memset(tpdu, 0, sizeof(2*MAX_GSM_SMS_TPDU_SIZE));
-               
-                       if(ScLength == 0) /* ScAddress not specified */
-                       {
-                               tpduDataLen = 2;
-                               tpdu[0] = '0';
-                               tpdu[1] = '0';
-                       }
-                       else
-                       {
-                       #ifndef TAPI_CODE_SUBJECT_TO_CHANGE
-                               dbg("SC length in Tx is %d - before", ScLength);
-
-                               util_sms_get_length_of_sca(&ScLength);
-
-                               dbg(" SC length in Tx is %d - after", ScLength);
-
-                               tpdu[0] = ScLength + 1;
-                               memcpy(&(tpdu[1]), &(sendUmtsMsg->msgDataPackage.sca[1]), (ScLength + 1));
-
-                               tpduDataLen = 2 + ScLength;
-                       #else
-                               dbg("Specifying SCA in TPDU is currently not supported");
-
-                               tpduDataLen = 2;
-                               tpdu[0] = '0';
-                               tpdu[1] = '0';
-                       #endif
-                       }
-
-                       for(i=0; i<(sendUmtsMsg->msgDataPackage.msgLength*2); i+=2) 
-                       {
-                               char value = 0;
-
-                               value = (sendUmtsMsg->msgDataPackage.tpduData[i/2] & 0xf0 ) >> 4;
-                               if(value < 0xA)
-                                       tpdu[i+tpduDataLen] = ((sendUmtsMsg->msgDataPackage.tpduData[i/2] & 0xf0 ) >> 4) + '0';
-                               else tpdu[i+tpduDataLen] = ((sendUmtsMsg->msgDataPackage.tpduData[i/2] & 0xf0 ) >> 4) + 'A' -10;
-
-                               value = sendUmtsMsg->msgDataPackage.tpduData[i/2] & 0x0f;
-                               if(value < 0xA)
-                                       tpdu[i+1+tpduDataLen] = (sendUmtsMsg->msgDataPackage.tpduData[i/2] & 0x0f ) + '0';
-                               else tpdu[i+1+tpduDataLen] = (sendUmtsMsg->msgDataPackage.tpduData[i/2] & 0x0f ) + 'A' -10;
-
-                       }
-
-                       tpduDataLen = tpduDataLen + 2*sendUmtsMsg->msgDataPackage.msgLength;
-                       
-                       /* AT+CMGS=<length><CR>PDU is given<ctrl-Z/ESC> */
-                       cmd_str = g_strdup_printf("AT+CMGS=%d%s%s\x1A%s", sendUmtsMsg->msgDataPackage.msgLength, "\r", tpdu, "\r");
-                       dbg("cmd_str is %p", cmd_str);
-                       dbg("tpdu %s", tpdu);
-                       for(i=0; i<strlen(cmd_str); i++)
-                               dbg("cmd_str data: [%x]", cmd_str[i]);
-
-                       dbg("TPDU data_len: %d", tpduDataLen);
-                       
-                       for(i=0; i<tpduDataLen; i++)
-                               dbg("[%02x]", tpdu[i]);
-                       
-                       atreq = tcore_at_request_new(cmd_str, "+CMGS:", TCORE_AT_SINGLELINE);
-
-                       tcore_pending_set_request_data(pending, 0, atreq);
-                       tcore_pending_set_response_callback(pending, on_response_send_smsSubmitTpdu, NULL);
-                       tcore_pending_link_user_request(pending, ur);
-
-                       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);
-                       
-                       api_err = tcore_hal_send_request(h, pending);   
-                       
-       }
-       else
-       {
-               dbg("[tcore_SMS] Invalid Data Length");
-               api_err = TCORE_RETURN_SMS_INVALID_DATA_LEN;
-       }
-       
-       return api_err;
-
-}
-
-static TReturn read_msg(CoreObject *obj, UserRequest *ur)
-{
-       TcorePlugin *plugin = NULL;
-       TcoreATRequest *atreq = NULL;
-       TcoreHal *hal = NULL;
-       TcorePending *pending = NULL;
-       const struct treq_sms_read_msg *readMsg = NULL;
-       const char * cmd_str = NULL;
-
-       dbg("new pending(TIZEN_SMS_READ_MSG)");
-
-       readMsg = tcore_user_request_ref_data(ur, NULL);
-
-       hal = tcore_object_get_hal(obj);
-       pending = tcore_pending_new(obj, 0);
-
-       if (!readMsg || !hal)
-               return TCORE_RETURN_ENOSYS;
-
-       cmd_str = g_strdup_printf("AT+CMGR=%d\r", (readMsg->index + 1)); /* IMC index is one ahead of Samsung */
-               
-       dbg("cmd str is %s",cmd_str);
-
-       atreq = tcore_at_request_new((const char *)cmd_str, "\e+CMGR:", TCORE_AT_SINGLELINE);
-
-       g_free(cmd_str);
-
-       tcore_pending_set_request_data(pending, 0, atreq);
-       tcore_pending_set_response_callback(pending, on_response_read_msg, &(readMsg->index)); //storing index as user data
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);
-
-       return tcore_hal_send_request(hal, pending);
-
-}
-
-static TReturn save_msg(CoreObject *obj, UserRequest *ur)
-{      
-
-       TcorePlugin *plugin = NULL;
-       TcoreATRequest *atreq = NULL;
-       TcoreHal *hal = NULL;
-       TcorePending *pending = NULL;
-       const struct treq_sms_save_msg *saveMsg = NULL;
-       const char *cmd_str = NULL;
-       char pdu[MAX_GSM_SMS_TPDU_SIZE]; /* SCA + PDU */
-
-       TReturn api_err = TCORE_RETURN_SUCCESS;
-       int ScLength = 0, pduLength = 0, stat = 0;
-
-       dbg("new pending(TIZEN_SMS_SAVE_MSG)");
-
-       saveMsg = tcore_user_request_ref_data(ur, NULL);
-
-       hal = tcore_object_get_hal(obj);
-       pending = tcore_pending_new(obj, 0);
-
-       if (!saveMsg ||  !hal)
-               return TCORE_RETURN_ENOSYS;
-
-       dbg("Index value %x is not ensured. CP will allocate index automatically", saveMsg->simIndex);
-       dbg("msgStatus: %x", saveMsg->msgStatus);
-
-       switch (saveMsg->msgStatus) {
-               case SMS_STATUS_READ:
-                       stat = AT_REC_READ;
-                       break;
-               case SMS_STATUS_UNREAD:
-                       stat = AT_REC_UNREAD;
-                       break;
-               case SMS_STATUS_SENT:
-                       stat = AT_STO_SENT;
-                       break;
-               case SMS_STATUS_UNSENT:
-                       stat = AT_STO_UNSENT;
-                       break;
-               default:
-                       err("Invalid msgStatus");
-                       api_err = TCORE_RETURN_EINVAL;
-                       
-                       dbg("Exiting with api_err: %x", api_err);
-                       return api_err;
-       }
-
-       if ((saveMsg->msgDataPackage.msgLength > 0) && (SMS_SMDATA_SIZE_MAX > saveMsg->msgDataPackage.msgLength)) {
-
-               /* Initialize PDU */
-               memset(pdu, 0x00, MAX_GSM_SMS_TPDU_SIZE);
-               
-               ScLength = saveMsg->msgDataPackage.sca[0];
-
-               if(ScLength == 0) {
-                       dbg("ScLength is zero");
-                       pduLength = 1;
-               }
-               else {
-                       dbg("ScLength (Useful semi-octets) %d", ScLength);
-
-                       util_sms_get_length_of_sca(&ScLength); /* Convert useful semi-octets to useful octets */
-
-                       dbg("ScLength (Useful octets) %d", ScLength);
-
-                       pdu[0] = ScLength + 1; /* ScLength */
-                       memcpy(&(pdu[1]), &(saveMsg->msgDataPackage.sca[1]), ScLength+1); /* ScType + ScAddress */
-
-                       pduLength = 2 + ScLength;
-               }
-
-               /* SMS PDU */
-               memcpy(&(pdu[pduLength]), saveMsg->msgDataPackage.tpduData, saveMsg->msgDataPackage.msgLength);
-
-               pduLength = pduLength + saveMsg->msgDataPackage.msgLength;
-
-               dbg("pduLength: %d", pduLength);
-
-               {
-                       int i;
-                       for(i=0; i<pduLength; i++)
-                               dbg("SMS-PDU: [%x]", pdu[i]);
-               }
-
-               /* +CMGW=<length>[,<stat>]<CR>PDU is given<ctrl-Z/ESC> */
-               cmd_str = g_strdup_printf("AT+CMGW=%d,%d%s%s%x%s", pduLength, stat, "\r", pdu, 0x1A, "\r");
-
-               g_printf("cmd_str: %s", cmd_str);
-               
-               atreq = tcore_at_request_new((const char *)cmd_str, "+CMGW", TCORE_AT_SINGLELINE);
-
-               g_free(cmd_str);
-       
-               tcore_pending_set_request_data(pending, 0, atreq);
-               tcore_pending_set_response_callback(pending, on_response_sms_save_msg_cnf, NULL);
-               tcore_pending_link_user_request(pending, ur);
-               tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);
-
-               api_err = tcore_hal_send_request(hal, pending);
-       }
-       else {
-               dbg("Invalid Data Length for SaveMessage");
-               api_err = TCORE_RETURN_SMS_INVALID_DATA_LEN;
-       }
-
-       dbg("Exiting with api_err: %x", api_err);
-       return api_err;
-
-}
-
-static TReturn delete_msg(CoreObject *obj, UserRequest *ur)
-{
-
-       TcorePlugin *plugin= NULL;
-       TcoreHal *hal = NULL;
-       TcoreATRequest *atreq = NULL;
-       TcorePending *pending = NULL;
-       const struct treq_sms_delete_msg *deleteMsg = NULL;
-       GQueue *queue = NULL;
-       const char * cmd_str = NULL;
-       int index = 0;
-
-       dbg("new pending(TIZEN_SMS_DEL_MSG)");
-
-       deleteMsg = tcore_user_request_ref_data(ur, NULL);
-
-       hal = tcore_object_get_hal(obj);
-       pending = tcore_pending_new(obj, 0);
-
-       if (!deleteMsg || !hal)
-               return TCORE_RETURN_ENOSYS;
-
-       index = deleteMsg->index;
-       
-       cmd_str =g_strdup_printf("AT+CMGD=%d,0\r",deleteMsg->index);
-       atreq = tcore_at_request_new((const char*)cmd_str, NULL, TCORE_AT_NO_RESULT);
-
-       tcore_pending_set_request_data(pending, 0, atreq);
-       tcore_pending_set_response_callback(pending, on_response_sms_delete_msg_cnf, (void *)&index);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);
-
-       return tcore_hal_send_request(hal, pending);
-
-
-
-}
-
-static TReturn get_storedMsgCnt(CoreObject *obj, UserRequest *ur)
-{
-       TReturn ret_code = TCORE_RETURN_UNKNOWN;
-
-       TcorePlugin *plugin = NULL;
-       TcoreHal *hal = NULL;
-       TcorePending *pending = NULL;
-       TcoreATRequest *atreq = NULL;
-       
-       const struct treq_sms_get_msg_count *getStoredMsgCnt = NULL;
-       const char *cmd_str = NULL;
-
-       dbg("new pending(TIZEN_SMS_GET_STORED_MSG_COUNT)");
-
-       getStoredMsgCnt = tcore_user_request_ref_data(ur, NULL);
-
-       hal = tcore_object_get_hal(obj);
-       pending = tcore_pending_new(obj, 0);
-
-       cmd_str = g_strdup_printf("AT+CPMS=\"SM\",\"SM\",\"SM\"%c", CR);
-       atreq = tcore_at_request_new((const char *)cmd_str, "+CPMS", TCORE_AT_SINGLELINE);
-
-       /* NULL checkpoint */
-       if (!hal || !pending || !cmd_str || !atreq)
-       {
-               err("Pointer is NULL. hal:[%p], pending:[%p], cmd_str:[%p], atreq:[%p]", hal, pending, cmd_str, atreq);
-
-               if(pending)
-               {
-                       dbg("Freeing pending");
-                       free(pending);
-               }
-               if(cmd_str)
-               {
-                       dbg("Freeing cmd_str");
-                       g_free(cmd_str);
-               }
-               if(atreq)
-               {
-                       dbg("Freeing atreq");
-                       free(atreq);
-               }
-
-               ret_code = TCORE_RETURN_FAILURE;
-               dbg("Exiting Function with ret_code: [%x]", ret_code);
-               return ret_code;
-       }
-
-       if(cmd_str) /* Already copied in AT-Request */
-       {
-               dbg("Freeing cmd_str");
-               g_free(cmd_str);
-       }
-       
-       tcore_pending_set_request_data(pending, 0, atreq);
-       tcore_pending_set_response_callback(pending, on_response_get_storedMsgCnt, NULL);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);
-       ret_code = tcore_hal_send_request(hal, pending);
-       
-       dbg("Exiting Function with ret_code: [%x]", ret_code);
-       return ret_code;
-}
-
-static TReturn get_sca(CoreObject *obj, UserRequest *ur)
-{
-
-       //TODO - Need to make this a blocking call??
-       
-       TcorePlugin *plugin = NULL;
-       TcoreHal *hal = NULL;
-       TcorePending *pending = NULL;
-       TcoreATRequest *atreq = NULL;
-       struct tresp_sms_get_sca *respGetSca;
-       const char * cmd_str = NULL;
-
-       dbg("new pending(TIZEN_SMS_GET_SCA)");
-
-       //index is not supported as input param for GetSCA AT command.Hence ignoring
-       respGetSca = tcore_user_request_ref_data(ur, NULL);
-
-       hal = tcore_object_get_hal(obj);
-       pending = tcore_pending_new(obj, 0);
-
-       if (!respGetSca || !hal)
-               return TCORE_RETURN_ENOSYS;
-
-       cmd_str = g_strdup_printf("AT+CSCA?\r");;
-       atreq = tcore_at_request_new((const char*)cmd_str, "+CSCA", TCORE_AT_SINGLELINE);
-
-       tcore_pending_set_request_data(pending, 0,atreq);
-       tcore_pending_set_response_callback(pending, on_response_get_sca, NULL);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);
-
-
-       return tcore_hal_send_request(hal, pending);
-
-}
-
-static TReturn set_sca(CoreObject *object, UserRequest *ur)
-{
-
-       TcorePlugin *plugin = NULL;
-       TcoreHal *hal = NULL;
-       TcorePending *pending = NULL;
-       TcoreATRequest *atreq = NULL;
-
-       const struct treq_sms_set_sca *setSca = NULL;
-       char* cmd_str = NULL;
-       int addrType = 0;
-       
-
-       dbg("new pending(TIZEN_SMS_SET_SCA)");
-
-       setSca = tcore_user_request_ref_data(ur, NULL);
-
-       if(setSca->index != 0){
-               dbg("Index except 0 is supported");
-               return TCORE_RETURN_EINVAL;     // TAPI_API_NOT_SUPPORTED;
-       }
-
-       hal = tcore_object_get_hal(object);
-       pending = tcore_pending_new(object, 0);
-       
-       if (!setSca || !hal)
-               return TCORE_RETURN_ENOSYS;
-
-       addrType = ((setSca->scaInfo.typeOfNum << 4) | setSca->scaInfo.numPlanId) | 0x80;
-
-       //TODO Need to clarify about dialing NumLen
-       cmd_str = g_strdup_printf("AT+CSCA=%s,%d", setSca->scaInfo.diallingNum, addrType);
-       atreq = tcore_at_request_new((const char*)cmd_str, NULL, TCORE_AT_NO_RESULT);
-       
-       tcore_pending_set_request_data(pending, 0, atreq);
-       tcore_pending_set_response_callback(pending, on_response_set_sca, NULL);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);
-
-
-       return tcore_hal_send_request(hal, pending);
-
-
-}
-
-static TReturn get_cb_config(CoreObject *obj, UserRequest *ur)
-{
-       //Format of AT command is       AT+CSCB?
-       //Possible response is +CSCB : <mode>,<mids>,<dcss>
-       //OK
-
-       TcorePlugin *plugin = NULL;
-       TcoreHal *hal = NULL;
-       
-       TcoreATRequest *atreq;
-       TcorePending *pending = NULL;
-       
-       const struct treq_sms_get_cb_config *getCbConfig = NULL;
-
-       dbg("new pending(TIZEN_SMS_GET_CBS_CFG)");
-
-       getCbConfig = tcore_user_request_ref_data(ur, NULL);
-
-       hal = tcore_object_get_hal(obj);
-       pending = tcore_pending_new(obj, 0);
-
-       if (!hal) // request data is NULL, so do not NULL check for getCbConfig
-       {
-               dbg("[ERR]  pointer is NULL, getCbConfig=0x%x, h=0x%x", getCbConfig, hal);
-               return TCORE_RETURN_ENOSYS;
-       }
-
-       atreq = tcore_at_request_new("AT+CSCB?", "+CSCB", TCORE_AT_SINGLELINE);
-       tcore_pending_set_request_data(pending, 0, atreq);
-       tcore_pending_set_response_callback(pending, on_response_get_cb_config, NULL);
-       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);
-       tcore_pending_link_user_request(pending, ur);
-
-       return tcore_hal_send_request(hal, pending);
-
-}
-
-static TReturn set_cb_config(CoreObject *obj, UserRequest *ur)
-{
-       TcorePlugin *plugin = NULL;
-       TcoreHal *hal = NULL;
-       TcoreATRequest *atreq = NULL;
-       TcorePending *pending = NULL;
-
-       const struct treq_sms_set_cb_config *setCbConfig = NULL;
-       char *cmd_str = NULL;
-       gchar *mids_str = NULL;
-       GString *mids_GString = NULL;
-       int err = 0, response = 0, ctr = 0;
-
-       dbg("new pending(TIZEN_SMS_SET_CBS_CFG)");
-
-       setCbConfig = tcore_user_request_ref_data(ur, NULL);
-
-       hal = tcore_object_get_hal(obj);
-       pending = tcore_pending_new(obj, 0);
-
-       
-       if (!setCbConfig || !hal)
-               return TCORE_RETURN_ENOSYS;
-
-       if (setCbConfig->bCBEnabled == FALSE) /* AT+CSCB=0: Disable CBS */
-       {
-               cmd_str = g_strdup_printf("AT+CSCB=0\r");
-       }
-       else
-       {
-               if(setCbConfig->selectedId == SMS_CBMI_SELECTED_SOME) /* AT+CSCB=0,<mids>,<dcss>: Enable CBS for specified <mids> and <dcss> */
-               {
-                       dbg("Enabling specified CBMIs");
-                       mids_GString = g_string_new(g_strdup_printf("%d", setCbConfig->msgIDs[0]));
-                       
-                       for(ctr=1; ctr <setCbConfig->msgIdCount; ctr++)
-                       {
-                               mids_GString = g_string_append(mids_GString, ",");
-                               mids_GString = g_string_append(mids_GString, g_strdup_printf("%d", setCbConfig->msgIDs[ctr]));
-                       }
-
-                       mids_str = g_string_free(mids_GString, FALSE);
-                       //cmd_str = g_strdup_printf("AT+CSCB=0,\"%s\"\r", mids_str);
-
-                       //Temporary work around to test from UI. Enabling all - To be removed later
-                       cmd_str = g_strdup_printf("AT+CSCB=1\r");
-                       g_free(mids_str);
-               }
-               else if (setCbConfig->selectedId == SMS_CBMI_SELECTED_ALL) /* AT+CSCB=1: Enable CBS for all <mids> and <dcss> */
-               {
-                       dbg("Enabling all CBMIs");
-                       cmd_str = g_strdup_printf("AT+CSCB=1\r");
-               }
-       }
-       
-       dbg("cmd_str: %s", cmd_str);
-       
-       atreq = tcore_at_request_new((const char *)cmd_str, NULL, TCORE_AT_NO_RESULT);
-
-       g_free(cmd_str);
-       
-       tcore_pending_set_request_data(pending, 0, atreq);
-       tcore_pending_set_response_callback(pending, on_response_set_cb_config, NULL);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);
-       
-       tcore_hal_send_request(hal, pending);
-
-       return TCORE_RETURN_SUCCESS;
-       
-}
-
-static TReturn set_mem_status(CoreObject *obj, UserRequest *ur)
-{
-
-       TcorePlugin *plugin = NULL;
-       TcoreHal *hal = NULL;
-       TcoreATRequest *atreq;
-       TcorePending *pending = NULL;
-
-       const struct treq_sms_set_mem_status *setMemStatus = NULL;
-       char* cmd_str = NULL;
-       int memoryStatus = 0;
-
-       dbg("new pending(TIZEN_SMS_SET_MEM_STATUS)");
-
-       setMemStatus = tcore_user_request_ref_data(ur, NULL);
-
-       hal = tcore_object_get_hal(obj);
-       pending = tcore_pending_new(obj, 0);
-
-
-       if (!setMemStatus || !hal)
-               return TCORE_RETURN_ENOSYS;
-
-       if(setMemStatus->memory_status < SMS_PDA_MEMORY_STATUS_AVAILABLE ||
-               setMemStatus->memory_status > SMS_PDA_MEMORY_STATUS_FULL)
-               return TCORE_RETURN_EINVAL;
-
-       switch (setMemStatus->memory_status)
-       {
-               case SMS_PDA_MEMORY_STATUS_AVAILABLE:
-                       memoryStatus = AT_MEMORY_AVAILABLE;
-                       break;
-               case SMS_PDA_MEMORY_STATUS_FULL:
-                       memoryStatus = AT_MEMORY_FULL;
-                       break;
-               default:
-                       memoryStatus = -1;
-                       break;
-       }
-
-
-       cmd_str = g_strdup_printf("AT+XTESM=%d",memoryStatus);
-       atreq = tcore_at_request_new((const char *)cmd_str, NULL, TCORE_AT_NO_RESULT);
-
-       dbg("cmd str is %s",cmd_str);
-               
-
-       tcore_pending_set_request_data(pending, 0, atreq);
-       tcore_pending_set_response_callback(pending, on_response_set_mem_status, NULL);
-       tcore_pending_link_user_request(pending, ur);
-       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);
-
-
-       return tcore_hal_send_request(hal, pending);
-       
-}
-
-static TReturn get_pref_brearer(CoreObject *obj, UserRequest *ur)
-{
-       dbg("Entry");
-
-       dbg("Exit");
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn set_pref_brearer(CoreObject *obj, UserRequest *ur)
-{
-       dbg("Entry");
-
-       dbg("Exit");
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn set_delivery_report(CoreObject *obj, UserRequest *ur)
-{
-       TcorePlugin *plugin = NULL;
-       TcoreHal *hal = NULL;
-       TcoreATRequest *atreq;
-       TcorePending *pending = NULL;
-       const struct treq_sms_set_delivery_report *deliveryReport = NULL;
-       struct property_sms_info *property = NULL;
-       GQueue *queue = NULL;
-       char pdu[MAX_GSM_SMS_TPDU_SIZE];
-
-       TReturn api_err = TCORE_RETURN_SUCCESS;
-       int scaLen = 0 , length = 0;
-       unsigned short nRpCause = 0;
-       char *cmd_str = NULL ;
-
-       //Format  -     +CNMA[=<n>[,<length>[<CR>PDU is given<ctrl-Z/ESC>]]]
-       dbg("new pending(IPC_SMS_SET_DELIVER_REPORT)");
-
-       deliveryReport = tcore_user_request_ref_data(ur, NULL);
-
-       hal = tcore_object_get_hal(obj);
-       pending = tcore_pending_new(obj, 0);
-
-       if (!deliveryReport || !hal)
-               return TCORE_RETURN_ENOSYS;
-
-       //pdu = (treq_sms_set_delivery_report *) calloc (1,sizeof(treq_sms_set_delivery_report));
-
-       if ((deliveryReport->dataInfo.msgLength > 0) && (MAX_GSM_SMS_TPDU_SIZE > deliveryReport->dataInfo.msgLength)) 
-       {
-                       //pending = tcore_pending_new(obj, 0);
-                       //atreq = tcore_at_request_new("AT+CNMA", NULL, TCORE_AT_NO_RESULT);
-
-               scaLen = deliveryReport->dataInfo.sca[0];
-               if(scaLen == 0){
-                       memcpy(pdu, deliveryReport->dataInfo.sca, scaLen+2);
-               }
-               else{
-                       scaLen = deliveryReport->dataInfo.sca[0];
-
-                       dbg(" SC length in tx is %d - before", scaLen);
-
-                       util_sms_get_length_of_sca(&scaLen);
-
-                       dbg(" SC length in tx is %d - after", scaLen);
-
-                       //1Copy SCA to the pdu stream first
-                       pdu[0] = scaLen + 1;
-                       memcpy(&(pdu[1]), &(deliveryReport->dataInfo.sca[1]), scaLen+1);
-               }
-
-               length = (deliveryReport->dataInfo.msgLength) + (scaLen + 2);
-
-               nRpCause = (unsigned short) deliveryReport->rspType;
-
-               dbg(" data len is %d",length);
-
-               if ((deliveryReport->dataInfo.msgLength < SMS_SMDATA_SIZE_MAX)) {
-                       //2Copy rest of the SMS-DELIVER TPDU
-                       memcpy(&(pdu[scaLen + 2]), deliveryReport->dataInfo.tpduData,   deliveryReport->dataInfo.msgLength);
-               } else {
-                       dbg(" SCA len is %d", scaLen);
-                       api_err = TCORE_RETURN_SMS_INVALID_DATA_LEN;
-                       return api_err;
-               }
-
-
-                       if(deliveryReport->rspType == SMS_SENDSMS_SUCCESS)
-                       {
-                               //cmd_str = g_strdup_printf("AT+CNMA=1,%d\r%s\x1A\r", length,pdu);
-                               cmd_str = g_strdup_printf("AT+CNMA=1\r");
-                       }
-                       else
-                       {
-                               cmd_str = g_strdup_printf("AT+CNMA=2\r");
-                       }
-       
-                       atreq = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);
-
-                       tcore_pending_set_request_data(pending, 0, atreq);
-                       tcore_pending_set_timeout(pending, 0);
-                       tcore_pending_set_response_callback(pending, on_response_sms_deliver_rpt_cnf, NULL);
-                       tcore_pending_link_user_request(pending, ur);
-
-                       return tcore_hal_send_request(hal, pending);
-
-               }
-       else {
-               dbg(" Invalid Data Length for DeliverReportSet");
-               api_err = TCORE_RETURN_SMS_INVALID_DATA_LEN;
-       }
-
-       return api_err;
-}
-
-static TReturn set_msg_status(CoreObject *obj, UserRequest *ur)
-{
-       dbg("Entry");
-
-       TcorePlugin *plugin = NULL;
-       TcoreHal *hal = NULL;
-       TcoreATRequest *atreq;
-       TcorePending *pending = NULL;
-       const struct treq_sms_set_msg_status *msg_status = NULL;
-       char *cmd_str = NULL, *encoded_data = NULL;     
-
-       encoded_data = calloc(176,1);
-
-
-       msg_status = tcore_user_request_ref_data(ur, NULL);
-
-       dbg("msg status %d and index %d",msg_status->msgStatus, msg_status->index);
-
-       switch (msg_status->msgStatus)
-       {
-               case SMS_STATUS_READ:
-                       encoded_data[0] = encoded_data[0] | 0x01;
-                       break;
-               
-               case SMS_STATUS_UNREAD:
-                       encoded_data[0] = encoded_data[0] | 0x03;
-                       break;
-
-               case SMS_STATUS_UNSENT:
-                       encoded_data[0] = encoded_data[0] | 0x07;
-                       break;
-       
-               case SMS_STATUS_SENT:
-                       encoded_data[0] = encoded_data[0] | 0x05;
-                       break;
-
-               case SMS_STATUS_DELIVERED:
-                       encoded_data[0] = encoded_data[0] | 0x1D;
-                       break;
-               case SMS_STATUS_DELIVERY_UNCONFIRMED:
-                       encoded_data[0] = encoded_data[0] | 0xD;
-                       break;
-               case SMS_STATUS_MESSAGE_REPLACED:
-               case SMS_STATUS_RESERVED:
-                       encoded_data[0] = encoded_data[0] | 0x03;
-                       break;          
-       }
-
-       memset(&encoded_data[1] , 0xff, 175);
-       
-
-       hal = tcore_object_get_hal(obj);
-       pending = tcore_pending_new(obj, 0);
-
-       if (!hal)
-       {
-               dbg("[ERR]  pointer is NULL, h=0x%x", hal);
-               return TCORE_RETURN_ENOSYS;
-       }
-
-       // AT+CRSM=<command>,<fildid>,<p1>,<p2+C29,<p3> TODO
-       cmd_str = g_strdup_printf("AT+CRSM=220,0x6F3C,%d, 4, 176 %s\r", msg_status->index, encoded_data);
-       dbg("cmd str is %s",cmd_str);
-
-       atreq = tcore_at_request_new(cmd_str, "+CRSM:", TCORE_AT_SINGLELINE);
-       
-       tcore_pending_set_request_data(pending, 0,atreq);
-       tcore_pending_set_timeout(pending, 0);
-       tcore_pending_set_response_callback(pending, on_response_set_msg_status, NULL);
-       tcore_pending_link_user_request(pending, ur);
-
-       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);
-       
-       tcore_hal_send_request(hal, pending);
-       free(cmd_str);
-
-       dbg("Exit");
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn get_sms_params(CoreObject *obj, UserRequest *ur)
-{
-       dbg("Entry");
-
-       TcorePlugin *plugin = NULL;
-       TcoreHal *hal = NULL;
-       TcoreATRequest *atreq = NULL;
-       TcorePending *pending = NULL;
-       const struct treq_sms_get_params *getSmsParams = NULL;
-       char *cmd_str = NULL;
-       
-       getSmsParams = tcore_user_request_ref_data(ur, NULL);
-
-       hal = tcore_object_get_hal(obj);
-       pending = tcore_pending_new(obj, 0);
-
-       if (!getSmsParams || !hal)
-       {
-               dbg("[ERR]  pointer is NULL, getSmsParams=0x%x, h=0x%x", getSmsParams, hal);
-               return TCORE_RETURN_ENOSYS;
-       }
-
-       // AT+CRSM=<command>,<fildid>,<p1>,<p2+C29,<p3> 
-       
-       //cmd_str = g_strdup_printf("AT+CRSM=%d,%x,%d,4 40%s", 178, 0x6F42, getSmsParams->index + 1, "\r");
-       
-       cmd_str = g_strdup_printf("AT+CRSM=178,0x6F42,%d,4,0\r",getSmsParams->index);
-
-       
-       atreq = tcore_at_request_new(cmd_str, "+CRSM:", TCORE_AT_SINGLELINE);
-       dbg("cmd str is %s",cmd_str);
-       
-       tcore_pending_set_request_data(pending, 0,atreq);
-       tcore_pending_set_timeout(pending, 0);
-       tcore_pending_set_response_callback(pending, on_response_get_sms_params, NULL);
-       tcore_pending_link_user_request(pending, ur);
-
-       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);
-        
-       tcore_hal_send_request(hal, pending);
-       free(cmd_str);
-       
-
-       dbg("Exit");
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn set_sms_params(CoreObject *obj, UserRequest *ur)
-{
-       dbg("Entry");
-       
-       TcorePlugin *plugin = NULL;
-       TcoreHal *hal = NULL;
-       TcoreATRequest *atreq = NULL;
-       TcorePending *pending = NULL;
-       const struct treq_sms_set_params *setSmsParams = NULL;
-       char *cmd_str = NULL, *encoded_data = NULL ,*temp_data = NULL;
-       int len = 0, i = 0, iSize = sizeof(struct treq_sms_set_params);
-
-
-       setSmsParams = tcore_user_request_ref_data(ur, NULL);
-       
-       temp_data = calloc(iSize,1);
-
-       
-       memcpy(temp_data,(void *)(setSmsParams+6), (iSize-6));  
-       len = strlen(temp_data);
-
-       //EFsmsp file size is 28 +Y bytes (Y is alpha id size)
-        encoded_data = calloc((setSmsParams->params.alphaIdLen+28),1);
-
-       hal = tcore_object_get_hal(obj);
-       pending = tcore_pending_new(obj, 0);
-
-       if (!setSmsParams || !hal)
-       {
-               dbg("[ERR]  pointer is NULL, setSmsParams=0x%x, h=0x%x", setSmsParams, hal);
-               return TCORE_RETURN_ENOSYS;
-       }
-
-       // AT+CRSM=<command>,<fildid>,<p1>,<p2+C29,<p3> 
-
-       for(i=0; i<(len*2); i+=2)
-        {
-               char value = 0;
-
-                value = (temp_data[i/2] & 0xf0 ) >> 4;
-                                if(value < 0xA)
-                                        encoded_data[i+len] = ((temp_data[i/2] & 0xf0 ) >> 4) + '0';
-                                else encoded_data[i+len] = ((temp_data[i/2] & 0xf0 ) >> 4) + 'A' -10;
-
-                                value = temp_data[i/2] & 0x0f;
-                                if(value < 0xA)
-                                        encoded_data[i+1+len] = (temp_data[i/2] & 0x0f ) + '0';
-                                else encoded_data[i+1+len] = (temp_data[i/2] & 0x0f ) + 'A' -10;
-
-         }
-
-
-
-
-       cmd_str = g_strdup_printf("AT+CRSM=220,0x6F42,%x,4,0,%x%x%x%x%x%x%x", 220, 0x6F42, setSmsParams->params.recordIndex, setSmsParams->params.szAlphaId,setSmsParams->params.paramIndicator,setSmsParams->params.tpDestAddr,setSmsParams->params.tpSvcCntrAddr,setSmsParams->params.tpProtocolId,setSmsParams->params.tpDataCodingScheme,setSmsParams->params.tpValidityPeriod, "\r"); 
-
-       dbg("cmd str is %s",cmd_str);
-       atreq = tcore_at_request_new(cmd_str, "+CRSM:", TCORE_AT_SINGLELINE);
-       
-       tcore_pending_set_request_data(pending, 0,atreq);
-       tcore_pending_set_timeout(pending, 0);
-       tcore_pending_set_response_callback(pending, on_response_set_sms_params, NULL);
-       tcore_pending_link_user_request(pending, ur);
-
-       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);
-       
-       tcore_hal_send_request(hal, pending);
-       free(cmd_str);
-
-       
-
-       dbg("Exit");
-       return TCORE_RETURN_SUCCESS;
-}
-static TReturn get_paramcnt(CoreObject *obj, UserRequest *ur)
-{
-       dbg("Entry");
-
-       TcorePlugin *plugin = NULL;
-       TcoreHal *hal = NULL;
-       TcoreATRequest *atreq = NULL;
-       TcorePending *pending = NULL;
-       const struct treq_sms_get_paramcnt *getParamCnt = NULL;
-       char *cmd_str = NULL;
-       
-       getParamCnt = tcore_user_request_ref_data(ur, NULL);
-
-       hal = tcore_object_get_hal(obj);
-       pending = tcore_pending_new(obj, 0);
-
-       if (!hal)
-       {
-               dbg("[ERR]  pointer is NULL, h=0x%x", hal);
-               return TCORE_RETURN_ENOSYS;
-       }
-
-       // AT+CRSM=<command>,<fildid>,<p1>,<p2+C29,<p3>, EFsmsp: 0x6F42 
-       cmd_str = g_strdup_printf("AT+CRSM=192, %d%s", 0x6F42, "\r");
-
-       atreq = tcore_at_request_new(cmd_str, "+CRSM:", TCORE_AT_SINGLELINE);
-       dbg("cmd str is %s",cmd_str);
-
-       
-       tcore_pending_set_request_data(pending, 0,atreq);
-       tcore_pending_set_timeout(pending, 0);
-       tcore_pending_set_response_callback(pending, on_response_get_paramcnt, NULL);
-       tcore_pending_link_user_request(pending, ur);
-
-       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);
-       
-       tcore_hal_send_request(hal, pending);
-       free(cmd_str);
-
-       dbg("Exit");
-       return TCORE_RETURN_SUCCESS;
-}
-
-static struct tcore_sms_operations sms_ops =
-{
-       //.send_umts_msg = send_umts_msg,       
-       .send_umts_msg = Send_SmsSubmitTpdu,
-       .read_msg = read_msg,
-       .save_msg = save_msg,
-       .delete_msg = delete_msg,
-       .get_storedMsgCnt = get_storedMsgCnt,
-       .get_sca = get_sca,
-       .set_sca = set_sca,
-       .get_cb_config = get_cb_config,
-       .set_cb_config = set_cb_config,
-       .set_mem_status = set_mem_status,
-       .get_pref_brearer = get_pref_brearer,
-       .set_pref_brearer = set_pref_brearer,
-       .set_delivery_report = set_delivery_report,
-       .set_msg_status = set_msg_status,
-       .get_sms_params = get_sms_params,
-       .set_sms_params = set_sms_params,
-       .get_paramcnt = get_paramcnt,
-       //.send_cdma_msg = send_cdma_msg,
-};
-
-gboolean s_sms_init(TcorePlugin *plugin,  TcoreHal *hal)
-{
-       CoreObject *obj = NULL;
-       struct property_sms_info *data = NULL;
-       GQueue *work_queue = NULL;
-       dbg("Entry");
-       
-       obj = tcore_sms_new(plugin, "umts_sms", &sms_ops, hal);
-       if (!obj) {
-               return FALSE;
-       }
-
-       work_queue = g_queue_new();
-       tcore_object_link_user_data(obj, work_queue);
-
-       tcore_object_add_callback(obj, "\e+CMTI" , on_event_sms_incom_msg, NULL);
-       tcore_object_add_callback(obj, "\e+CMT" , on_event_sms_incom_msg, NULL);
-
-       tcore_object_add_callback(obj, "\e+CDS" , on_event_sms_incom_msg, NULL);
-       tcore_object_add_callback(obj, "\e+CDSI" , on_event_sms_incom_msg, NULL);
-
-       tcore_object_add_callback(obj, "+XTESM",  on_event_sms_memory_status, NULL);
-
-       tcore_object_add_callback(obj, "\e+CBMI" , on_event_sms_cb_incom_msg, NULL);    
-       tcore_object_add_callback(obj, "\e+CBM" , on_event_sms_cb_incom_msg, NULL);
-       tcore_object_add_callback(obj, "+XSIM", on_event_sms_ready_status, NULL);
-
-       //tcore_at_add_notification(&coreAt, "+XSIMSTATE", 0 , on_event_sms_incom_msg, NULL);
-
-       data = calloc(sizeof(struct property_sms_info), 1);
-       tcore_plugin_link_property(plugin, "SMS", data);
-
-       /* Make registration settings via AT commands necessary to recieve unsolicited noti */
-
-       dbg("Exit");
-       return TRUE;
-}
-
-
-void s_sms_exit(TcorePlugin *p)
-{
-       CoreObject *o;
-       struct property_sms_info *data;
-       dbg("Entry");
-
-       o = tcore_plugin_ref_core_object(p, "umts_sms");
-       if (!o) {
-               return;
-       }
-       tcore_sms_free(o);
-
-       data = tcore_plugin_ref_property(p, "SMS");
-       if (data) {
-               free(data);
-       }
-
-       dbg("Exit");
-       return;
-}
-
+/*\r
+ * tel-plugin-imc\r
+ *\r
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: Madhavi Akella <madhavi.a@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include <stdint.h>\r
+\r
+#include <glib.h>\r
+\r
+#include <tcore.h>\r
+#include <hal.h>\r
+#include <core_object.h>\r
+#include <plugin.h>\r
+#include <queue.h>\r
+#include <co_sms.h>\r
+#include <user_request.h>\r
+#include <storage.h>\r
+#include <server.h>\r
+#include <at.h>\r
+\r
+#include "common/TelErr.h"\r
+#include "s_common.h"\r
+#include "s_sms.h"\r
+\r
+/*=============================================================\r
+                                                       GSM-SMS Size\r
+==============================================================*/\r
+#define MAX_GSM_SMS_TPDU_SIZE                                          244\r
+#define MAX_GSM_SMS_MSG_NUM                                                    255\r
+#define MAX_GSM_SMS_SERVICE_CENTER_ADDR                                12              /* Maximum number of bytes of service center address */\r
+#define MAX_GSM_SMS_CBMI_LIST_SIZE                                     100             /* Maximum number of CBMI list size for CBS 30*2=60  */\r
+#define MAX_GSM_SMS_PARAM_RECORD_SIZE                          156             /* Maximum number of bytes SMSP Record size (Y + 28), y : 0 ~ 128 */\r
+#define MAX_GSM_SMS_STATUS_FILE_SIZE                                   2               /* Last Used TP-MR + SMS "Memory Cap. Exceeded" Noti Flag */\r
+#define TAPI_SIM_SMSP_ADDRESS_LEN                                      20\r
+\r
+/*=============================================================\r
+                                                       Device Ready\r
+==============================================================*/\r
+#define AT_SMS_DEVICE_READY                    12              /* AT device ready */\r
+#define SMS_DEVICE_READY                               1               /* Telephony device ready */\r
+#define SMS_DEVICE_NOT_READY                   0               /* Telephony device not ready */\r
+\r
+/*=============================================================\r
+                                                       CBMI Selection\r
+==============================================================*/\r
+#define SMS_CBMI_SELECTED_SOME         0x02    /* Some CBMIs are selected */\r
+#define SMS_CBMI_SELECTED_ALL                  0x01    /* All CBMIs are selected */\r
+\r
+/*=============================================================\r
+                                                       Message Status\r
+==============================================================*/\r
+#define AT_REC_UNREAD                                  0               /* Received and Unread */\r
+#define AT_REC_READ                                    1               /* Received and Read */\r
+#define AT_STO_UNSENT                                  2               /* Unsent */\r
+#define AT_STO_SENT                                    3               /* Sent */\r
+#define AT_ALL                                                         4               /* Unknown */\r
+\r
+/*=============================================================\r
+                                                       Memory Status\r
+==============================================================*/\r
+#define AT_MEMORY_AVAILABLE                    0               /* Memory Available */\r
+#define AT_MEMORY_FULL                                 1               /* Memory Full */\r
+\r
+/*=============================================================\r
+               SIM CRSM SW1 and Sw2 Error definitions */\r
+\r
+#define AT_SW1_SUCCESS 0x90\r
+#define AT_SW2_SUCCESS 0\r
+#define AT_SW1_LEN_RESP 0x9F\r
+\r
+/*=============================================================*/\r
+\r
+\r
+/*=========================================================\r
+                                                       Security\r
+==============================================================*/\r
+#define MAX_SEC_PIN_LEN                                                        8\r
+#define MAX_SEC_PUK_LEN                                                        8\r
+#define MAX_SEC_PHONE_LOCK_PW_LEN                              39              /* Maximum Phone Locking Password Length */\r
+#define MAX_SEC_SIM_DATA_STRING                                        256             /* Maximum Length of the DATA or RESPONSE. Restricted SIM Access, Generic SIM Access Message */\r
+#define MAX_SEC_NUM_LOCK_TYPE                                          8               /* Maximum number of Lock Type used in Lock Information Message */\r
+#define MAX_SEC_IMS_AUTH_LEN                                           512             /* Maximum Length of IMS Authentication Message */\r
+\r
+/*=============================================================\r
+                                                       String Preprocessor\r
+==============================================================*/\r
+#define CR             '\r'            /* Carriage Return */\r
+\r
+/*=============================================================\r
+                                                       Developer\r
+==============================================================*/\r
+#define TAPI_CODE_SUBJECT_TO_CHANGE                            /* For folding future features */\r
+\r
+#define SMS_SWAPBYTES16(x) \\r
+{ \\r
+    unsigned short int data = *(unsigned short int*)&(x); \\r
+    data = ((data & 0xff00) >> 8) |    \\r
+           ((data & 0x00ff) << 8);     \\r
+    *(unsigned short int*)&(x) = data ;      \\r
+}\r
+\r
+void print_glib_list_elem(gpointer data, gpointer user_data);\r
+\r
+gboolean util_byte_to_hex(const char *byte_pdu, char *hex_pdu, int num_bytes);\r
+\r
+/* gaurav.kalra: For test */\r
+void print_glib_list_elem(gpointer data, gpointer user_data)\r
+{\r
+       char *item = (char *)data;\r
+       dbg("item: [%s]", item);\r
+}\r
+\r
+/*=============================================================\r
+                                                       Send Callback\r
+==============================================================*/\r
+static void on_confirmation_sms_message_send(TcorePending *p, gboolean result, void *user_data)\r
+{\r
+       dbg("Entered Function. Request message out from queue");\r
+\r
+       dbg("TcorePending: [%p]", p);\r
+       dbg("result: [%02x]", result);\r
+       dbg("user_data: [%p]", user_data);\r
+\r
+       if(result == TRUE)\r
+       {\r
+               dbg("SEND OK");\r
+       }\r
+       else /* Failed */\r
+       {\r
+               dbg("SEND NOK");\r
+       }\r
+\r
+       dbg("Exiting Function. Nothing to return");\r
+}\r
+\r
+/*=============================================================\r
+                                                       Utilities\r
+==============================================================*/\r
+static void util_sms_free_memory(void *sms_ptr)\r
+{\r
+       dbg("Entry");\r
+\r
+       if(NULL != sms_ptr)\r
+       {\r
+               dbg("Freeing memory location: [%p]", sms_ptr);\r
+               free(sms_ptr);\r
+               sms_ptr = NULL;\r
+       }\r
+       else\r
+       {\r
+               err("Invalid memory location. Nothing to do.");\r
+       }\r
+\r
+       dbg("Exit");\r
+}\r
+\r
+#if 0\r
+static void util_sms_get_length_of_sca(int* nScLength) {\r
+       if (*nScLength % 2) {\r
+               *nScLength = (*nScLength / 2) + 1;\r
+       } else {\r
+               *nScLength = *nScLength / 2;\r
+       }\r
+\r
+       return;\r
+}\r
+\r
+static int util_sms_decode_smsParameters(unsigned char *incoming, unsigned int length, struct telephony_sms_Params *params)\r
+{\r
+       int alpha_id_len = 0;\r
+       int i = 0;\r
+       int nOffset = 0;\r
+\r
+       dbg(" RecordLen = %d", length);\r
+\r
+       if(incoming == NULL || params == NULL)\r
+               return FALSE;\r
+\r
+       alpha_id_len = length -SMS_SMSP_PARAMS_MAX_LEN;\r
+\r
+       if (alpha_id_len > 0)\r
+       {\r
+               if(alpha_id_len > SMS_SMSP_ALPHA_ID_LEN_MAX)\r
+               {\r
+                       alpha_id_len = SMS_SMSP_ALPHA_ID_LEN_MAX;\r
+               }\r
+\r
+               for(i=0 ; i < alpha_id_len ; i++)\r
+               {\r
+                       if(0xff == incoming[i])\r
+                       {\r
+                               dbg(" found");\r
+                               break;\r
+                       }\r
+               }\r
+\r
+               memcpy(params->szAlphaId, incoming, i);\r
+\r
+               params->alphaIdLen = i;\r
+\r
+               dbg(" Alpha id length = %d", i);\r
+\r
+       }\r
+       else\r
+       {\r
+               params->alphaIdLen = 0;\r
+               dbg(" Alpha id length is zero");\r
+       }\r
+\r
+       //dongil01.park - start parse from here.\r
+       params->paramIndicator = incoming[alpha_id_len];\r
+\r
+       dbg(" Param Indicator = %02x", params->paramIndicator);\r
+\r
+       //dongil01.park(2008/12/26) - DestAddr\r
+       if((params->paramIndicator & SMSPValidDestAddr) == 0)\r
+       {\r
+               nOffset = nDestAddrOffset;\r
+\r
+               if(0x00 == incoming[alpha_id_len + nOffset] || 0xff == incoming[alpha_id_len + nOffset])\r
+               {\r
+                       params->tpDestAddr.dialNumLen = 0;\r
+\r
+                       dbg("DestAddr Length is 0");\r
+               }\r
+               else\r
+               {\r
+                       if (0 < (int)incoming[alpha_id_len + nOffset])\r
+                       {\r
+                               params->tpDestAddr.dialNumLen = (int)(incoming[alpha_id_len + nOffset] - 1);\r
+\r
+                               if(params->tpDestAddr.dialNumLen > SMS_SMSP_ADDRESS_LEN)\r
+                                       params->tpDestAddr.dialNumLen = SMS_SMSP_ADDRESS_LEN;\r
+                       }\r
+                       else\r
+                       {\r
+                               params->tpDestAddr.dialNumLen = 0;\r
+                       }\r
+\r
+                       params->tpDestAddr.numPlanId= incoming[alpha_id_len + (++nOffset)] & 0x0f ;\r
+                       params->tpDestAddr.typeOfNum= (incoming[alpha_id_len + nOffset] & 0x70)>>4 ;\r
+\r
+                       memcpy(params->tpDestAddr.diallingNum, &incoming[alpha_id_len + (++nOffset)], (params->tpDestAddr.dialNumLen)) ;\r
+\r
+                       dbg("Dest TON is %d",params->tpDestAddr.typeOfNum);\r
+                       dbg("Dest NPI is %d",params->tpDestAddr.numPlanId);\r
+                       dbg("Dest Length = %d",params->tpDestAddr.dialNumLen);\r
+                       dbg("Dest Addr = %s",params->tpDestAddr.diallingNum);\r
+\r
+               }\r
+       }\r
+\r
+       //dongil01.park(2008/12/26) - SvcAddr\r
+       if((params->paramIndicator & SMSPValidSvcAddr) == 0)\r
+       {\r
+               nOffset = nSCAAddrOffset;\r
+\r
+               if(0x00 == (int)incoming[alpha_id_len + nOffset] || 0xff == (int)incoming[alpha_id_len + nOffset])\r
+               {\r
+                       params->tpSvcCntrAddr.dialNumLen = 0;\r
+\r
+                       dbg(" SCAddr Length is 0");\r
+               }\r
+               else\r
+               {\r
+                       if (0 < (int)incoming[alpha_id_len + nOffset] )\r
+                       {\r
+                               params->tpSvcCntrAddr.dialNumLen = (int)(incoming[alpha_id_len + nOffset] - 1);\r
+\r
+                               if(params->tpSvcCntrAddr.dialNumLen > SMS_SMSP_ADDRESS_LEN)\r
+                                       params->tpSvcCntrAddr.dialNumLen = SMS_SMSP_ADDRESS_LEN;\r
+\r
+                               params->tpSvcCntrAddr.numPlanId= incoming[alpha_id_len + (++nOffset)] & 0x0f ;\r
+                               params->tpSvcCntrAddr.typeOfNum= (incoming[alpha_id_len + nOffset] & 0x70) >>4 ;\r
+\r
+                               memcpy(params->tpSvcCntrAddr.diallingNum, &incoming[alpha_id_len + (++nOffset)], (params->tpSvcCntrAddr.dialNumLen));\r
+\r
+                               dbg("SCAddr Length = %d ",params->tpSvcCntrAddr.dialNumLen);\r
+                               dbg("SCAddr TON is %d",params->tpSvcCntrAddr.typeOfNum);\r
+                               dbg("SCAddr NPI is %d",params->tpSvcCntrAddr.numPlanId);\r
+\r
+                               for(i = 0 ; i < (int)params->tpSvcCntrAddr.dialNumLen ; i ++)\r
+                                       dbg("SCAddr = %d [%02x]",i,params->tpSvcCntrAddr.diallingNum[i]);\r
+                       }\r
+                       else\r
+                       {\r
+                               params->tpSvcCntrAddr.dialNumLen = 0;\r
+                       }\r
+               }\r
+       }\r
+       else if ((0x00 < (int)incoming[alpha_id_len +nSCAAddrOffset] && (int)incoming[alpha_id_len +nSCAAddrOffset] <= 12)\r
+                       || 0xff != (int)incoming[alpha_id_len +nSCAAddrOffset])\r
+       {\r
+               nOffset = nSCAAddrOffset;\r
+\r
+               if(0x00 == (int)incoming[alpha_id_len + nOffset] || 0xff == (int)incoming[alpha_id_len + nOffset])\r
+               {\r
+                       params->tpSvcCntrAddr.dialNumLen = 0;\r
+                       dbg("SCAddr Length is 0");\r
+               }\r
+               else\r
+               {\r
+\r
+                       if (0 < (int)incoming[alpha_id_len + nOffset] )\r
+                       {\r
+                               params->tpSvcCntrAddr.dialNumLen = (int)(incoming[alpha_id_len + nOffset] - 1);\r
+\r
+                               params->tpSvcCntrAddr.dialNumLen = incoming[alpha_id_len + nOffset] -1;\r
+\r
+                               if(params->tpSvcCntrAddr.dialNumLen > SMS_SMSP_ADDRESS_LEN)\r
+                                       params->tpSvcCntrAddr.dialNumLen = SMS_SMSP_ADDRESS_LEN;\r
+\r
+                               params->tpSvcCntrAddr.numPlanId= incoming[alpha_id_len + (++nOffset)] & 0x0f ;\r
+                               params->tpSvcCntrAddr.typeOfNum= (incoming[alpha_id_len + nOffset] & 0x70) >>4 ;\r
+\r
+                               memcpy(params->tpSvcCntrAddr.diallingNum, &incoming[alpha_id_len + (++nOffset)],\r
+                                               (params->tpSvcCntrAddr.dialNumLen)) ;\r
+\r
+                               dbg("SCAddr Length = %d ",params->tpSvcCntrAddr.dialNumLen);\r
+                               dbg("SCAddr TON is %d",params->tpSvcCntrAddr.typeOfNum);\r
+                               dbg("SCAddr NPI is %d",params->tpSvcCntrAddr.numPlanId);\r
+\r
+                               for(i = 0 ; i < (int)params->tpSvcCntrAddr.dialNumLen ; i ++)\r
+                                       dbg("SCAddr = %d [%02x]",i,params->tpSvcCntrAddr.diallingNum[i]);\r
+                       }\r
+                       else\r
+                       {\r
+                               params->tpSvcCntrAddr.dialNumLen = 0;\r
+                       }\r
+               }\r
+\r
+       }\r
+\r
+       if((params->paramIndicator & SMSPValidPID) == 0 &&      (alpha_id_len + nPIDOffset) < MAX_GSM_SMS_PARAM_RECORD_SIZE)\r
+       {\r
+               params->tpProtocolId = incoming[alpha_id_len + nPIDOffset];\r
+       }\r
+       if((params->paramIndicator & SMSPValidDCS) == 0 && (alpha_id_len + nDCSOffset) < MAX_GSM_SMS_PARAM_RECORD_SIZE)\r
+       {\r
+               params->tpDataCodingScheme = incoming[alpha_id_len + nDCSOffset];\r
+       }\r
+       if((params->paramIndicator & SMSPValidVP) == 0 && (alpha_id_len + nVPOffset) < MAX_GSM_SMS_PARAM_RECORD_SIZE)\r
+       {\r
+               params->tpValidityPeriod = incoming[alpha_id_len + nVPOffset];\r
+       }\r
+\r
+       dbg(" Alpha Id(Len) = %d",(int)params->alphaIdLen);\r
+\r
+       for (i=0; i< (int)params->alphaIdLen ; i++)\r
+       {\r
+               dbg(" Alpha Id = [%d] [%c]",i,params->szAlphaId[i]);\r
+       }\r
+       dbg(" PID = %d",params->tpProtocolId);\r
+       dbg(" DCS = %d",params->tpDataCodingScheme);\r
+       dbg(" VP = %d",params->tpValidityPeriod);\r
+\r
+       return TRUE;\r
+}\r
+#endif\r
+\r
+/*=============================================================\r
+                                                       Notifications\r
+==============================================================*/\r
+static gboolean on_event_sms_ready_status(CoreObject *o, const void *event_info, void *user_data)\r
+{\r
+       struct tnoti_sms_ready_status readyStatusInfo = {0,};\r
+       char *line = NULL;\r
+       GSList* tokens = NULL;\r
+       GSList* lines = NULL;\r
+       char *pResp = NULL;\r
+       //CoreObject *o = NULL;\r
+\r
+       int rtn = -1 , status = 0;\r
+\r
+       dbg(" Func Entrance");\r
+\r
+       lines = (GSList *)event_info;\r
+       if (1 != g_slist_length(lines))\r
+       {\r
+               dbg("unsolicited msg but multiple line");\r
+               goto OUT;\r
+       }\r
+       line = (char *)(lines->data);\r
+\r
+       dbg(" Func Entrance");\r
+\r
+       if(line!=NULL)\r
+       {\r
+               dbg("Response OK");\r
+                       dbg("noti line is %s", line);\r
+                       tokens = tcore_at_tok_new(line);\r
+                       pResp = g_slist_nth_data(tokens, 0);\r
+                       if (pResp !=NULL)\r
+                               status = atoi(pResp);\r
+\r
+       }\r
+       else\r
+       {\r
+               dbg("Response NOK");\r
+       }\r
+\r
+       if (status == AT_SMS_DEVICE_READY)\r
+       {\r
+               readyStatusInfo.status = SMS_DEVICE_READY;\r
+               tcore_sms_set_ready_status(o, readyStatusInfo.status);\r
+               dbg("SMS Ready status = [%s]", readyStatusInfo.status ? "TRUE" : "FALSE");\r
+               rtn = tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_SMS_DEVICE_READY, sizeof(struct tnoti_sms_ready_status), &readyStatusInfo);\r
+               dbg(" Return value [%d]",rtn);\r
+       }\r
+       else\r
+       {\r
+               readyStatusInfo.status = SMS_DEVICE_NOT_READY;\r
+       }\r
+\r
+OUT:\r
+       if(NULL!=tokens)\r
+               tcore_at_tok_free(tokens);\r
+       return TRUE;\r
+}\r
+\r
+static gboolean on_event_sms_incom_msg(CoreObject *o, const void *event_info, void *user_data)\r
+{\r
+       int rtn = -1;\r
+       GSList *tokens = NULL;\r
+       GSList *lines = NULL;\r
+       char *line = NULL;\r
+       int length = 0;\r
+       unsigned char *bytePDU = NULL;\r
+       struct tnoti_sms_umts_msg gsmMsgInfo;\r
+\r
+       dbg("Entered Function");\r
+\r
+       lines = (GSList *)event_info;\r
+       memset(&gsmMsgInfo, 0x00, sizeof(struct tnoti_sms_umts_msg));\r
+\r
+       if(2 != g_slist_length(lines))\r
+       {\r
+               err("Invalid number of lines for +CMT. Must be 2");\r
+               return FALSE;\r
+       }\r
+\r
+       line = (char *)g_slist_nth_data(lines, 0); /* Fetch Line 1 */\r
+\r
+       dbg("Line 1: [%s]", line);\r
+\r
+       if (!line)\r
+       {\r
+               err("Line 1 is invalid");\r
+               return FALSE;\r
+       }\r
+\r
+       tokens = tcore_at_tok_new(line); /* Split Line 1 into tokens */\r
+\r
+       dbg("Alpha ID: [%02x]", g_slist_nth_data(tokens, 0)); /* 0: Alpha ID */\r
+\r
+       length = atoi((char *)g_slist_nth_data(tokens, 1));\r
+\r
+       dbg("Length: [%d]", length);    /* 1: PDU Length */\r
+\r
+       gsmMsgInfo.msgInfo.msgLength = length;\r
+\r
+       line = (char *)g_slist_nth_data(lines, 1); /* Fetch Line 2 */\r
+\r
+       dbg("Line 2: [%s]", line);\r
+\r
+       if (!line)\r
+       {\r
+               err("Line 2 is invalid");\r
+               return FALSE;\r
+       }\r
+\r
+       /* Convert to Bytes */\r
+       bytePDU = (unsigned char *)util_hexStringToBytes(line);\r
+\r
+       if(NULL == bytePDU)\r
+       {\r
+               err("bytePDU is NULL");\r
+               return FALSE;\r
+       }\r
+\r
+       memcpy(gsmMsgInfo.msgInfo.sca, bytePDU, (strlen(line)/2 - length));\r
+       memcpy(gsmMsgInfo.msgInfo.tpduData, &bytePDU[(strlen(line)/2 - length)], length);\r
+\r
+       util_hex_dump("      ", strlen(line)/2, bytePDU);\r
+       util_hex_dump("      ", (strlen(line)/2 - length), gsmMsgInfo.msgInfo.sca);\r
+       util_hex_dump("      ", length, gsmMsgInfo.msgInfo.tpduData);\r
+\r
+       rtn = tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_SMS_INCOM_MSG, sizeof(struct tnoti_sms_umts_msg), &gsmMsgInfo);\r
+\r
+       return TRUE;\r
+}\r
+\r
+static gboolean on_event_sms_memory_status(CoreObject *o, const void *event_info, void *user_data)\r
+{\r
+       struct tnoti_sms_memory_status memStatusInfo = {0,};\r
+\r
+       int rtn = -1 ,memoryStatus = -1;\r
+       GSList *tokens=NULL;\r
+       GSList *lines=NULL;\r
+       char *line = NULL , *pResp = NULL;\r
+\r
+       lines = (GSList *)event_info;\r
+        if (1 != g_slist_length(lines))\r
+        {\r
+                dbg("unsolicited msg but multiple line");\r
+        }\r
+\r
+       line = (char*)(lines->data);\r
+\r
+\r
+       dbg(" Func Entrance");\r
+\r
+       if (line)\r
+       {\r
+               dbg("Response OK");\r
+               tokens = tcore_at_tok_new(line);\r
+               pResp = g_slist_nth_data(tokens, 0);\r
+\r
+               if(pResp)\r
+               {\r
+                       memoryStatus = atoi(pResp);\r
+                       dbg("memoryStatus is %d",memoryStatus);\r
+               }\r
+\r
+       }else\r
+       {\r
+               dbg("Response NOK");\r
+\r
+       }\r
+\r
+       if (memoryStatus == 0) //SIM Full condition\r
+       {\r
+               memStatusInfo.status = SMS_PHONE_MEMORY_STATUS_FULL;\r
+       }\r
+\r
+\r
+       dbg("memory status - %d",memStatusInfo.status);\r
+\r
+       rtn = tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_SMS_MEMORY_STATUS, sizeof(struct tnoti_sms_memory_status), &memStatusInfo);\r
+       dbg(" Return value [%d]",rtn);\r
+       return TRUE;\r
+\r
+}\r
+\r
+static gboolean on_event_sms_cb_incom_msg(CoreObject *o, const void *event_info, void *user_data)\r
+{\r
+       //+CBM: <length><CR><LF><pdu>\r
+\r
+       struct tnoti_sms_cellBroadcast_msg cbMsgInfo;\r
+\r
+       int rtn = -1 , length = 0;\r
+       char * line = NULL, *pdu = NULL, *pResp = NULL;\r
+       GSList *tokens = NULL;\r
+       GSList *lines = NULL;\r
+\r
+       dbg(" Func Entrance");\r
+\r
+       lines = (GSList *)event_info;\r
+\r
+       memset(&cbMsgInfo, 0, sizeof(struct tnoti_sms_cellBroadcast_msg));\r
+\r
+       line = (char *)(lines->data);\r
+\r
+       if (line != NULL)\r
+       {\r
+                       dbg("Response OK");\r
+                       dbg("Noti line is %s",line);\r
+                       pResp = g_slist_nth_data(tokens, 0);\r
+                       if (pResp)\r
+                       {\r
+                               length = atoi(pResp);\r
+                       }else\r
+                       {\r
+                               dbg("token 0 is null");\r
+                       }\r
+                       pdu = g_slist_nth_data(tokens, 3);\r
+                       if (pdu != NULL)\r
+                       {\r
+                               cbMsgInfo.cbMsg.length = length;\r
+                               cbMsgInfo.cbMsg.cbMsgType = SMS_CB_MSG_CBS ; //TODO - Need to check for other CB types\r
+\r
+                               dbg("CB Msg LENGTH [%2x](((( %d ))))", length, cbMsgInfo.cbMsg.length);\r
+\r
+                               if ( (cbMsgInfo.cbMsg.length >0) && ((SMS_CB_PAGE_SIZE_MAX +1)  > cbMsgInfo.cbMsg.length))\r
+                               {\r
+                                       memcpy(cbMsgInfo.cbMsg.msgData, (char*)pdu, cbMsgInfo.cbMsg.length);\r
+                                       rtn = tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(o)), o, TNOTI_SMS_CB_INCOM_MSG, sizeof(struct tnoti_sms_cellBroadcast_msg), &cbMsgInfo);\r
+                               }\r
+                               else\r
+                               {\r
+                                       dbg("Invalid Message Length");\r
+                               }\r
+\r
+                       }\r
+                       else\r
+                       {\r
+                               dbg("Recieved NULL pdu");\r
+                       }\r
+       }\r
+       else\r
+       {\r
+                       dbg("Response NOK");\r
+       }\r
+\r
+\r
+       dbg(" Return value [%d]",rtn);\r
+\r
+       return TRUE;\r
+}\r
+\r
+/*=============================================================\r
+                                                       Responses\r
+==============================================================*/\r
+static void on_response_sms_delete_msg_cnf(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       struct tresp_sms_delete_msg delMsgInfo = {0,};\r
+       UserRequest *ur = NULL;\r
+       const TcoreATResponse *atResp = data;\r
+\r
+       int rtn = -1;\r
+       int *index = (int *)user_data;\r
+\r
+       dbg(" Func Entrance");\r
+\r
+       ur = tcore_pending_ref_user_request(p);\r
+       if (atResp->success)\r
+       {\r
+               dbg("Response OK");\r
+               delMsgInfo.index = *index;\r
+               delMsgInfo.result = SMS_SENDSMS_SUCCESS;\r
+\r
+       }\r
+       else\r
+       {\r
+               dbg("Response NOK");\r
+               delMsgInfo.index = *index;\r
+               delMsgInfo.result = SMS_DEVICE_FAILURE;\r
+\r
+       }\r
+\r
+       rtn = tcore_user_request_send_response(ur, TRESP_SMS_DELETE_MSG, sizeof(struct tresp_sms_delete_msg), &delMsgInfo);\r
+\r
+       return;\r
+}\r
+\r
+static void on_response_sms_save_msg_cnf(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       struct tresp_sms_save_msg saveMsgInfo = {0,};\r
+       UserRequest *ur = NULL;\r
+       const TcoreATResponse *atResp = data;\r
+       GSList *tokens = NULL;\r
+       char *line = NULL;\r
+       char *pResp = NULL;\r
+       int rtn = -1;\r
+\r
+       ur = tcore_pending_ref_user_request(p);\r
+       if (atResp->success)\r
+       {\r
+               dbg("Response OK");\r
+               if(atResp->lines)\r
+               {\r
+                       line = (char *)atResp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       pResp = g_slist_nth_data(tokens, 0);\r
+                       if (pResp)\r
+                       {\r
+                               dbg("0: %s", pResp);\r
+                               saveMsgInfo.index = (atoi(pResp) - 1); /* IMC index starts from 1 */\r
+                               saveMsgInfo.result = SMS_SENDSMS_SUCCESS;\r
+                       }\r
+                       else\r
+                       {\r
+                               dbg("No Tokens");\r
+                               saveMsgInfo.index = -1;\r
+                               saveMsgInfo.result = SMS_DEVICE_FAILURE;\r
+                       }\r
+\r
+               }\r
+       }\r
+       else\r
+       {\r
+               dbg("Response NOK");\r
+               saveMsgInfo.index = -1;\r
+               saveMsgInfo.result = SMS_DEVICE_FAILURE;\r
+       }\r
+\r
+       rtn = tcore_user_request_send_response(ur, TRESP_SMS_SAVE_MSG, sizeof(struct tresp_sms_save_msg), &saveMsgInfo);\r
+       dbg("Return value [%d]", rtn);\r
+       return;\r
+}\r
+\r
+#if 0\r
+static void on_response_sms_deliver_rpt_cnf(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+\r
+       struct tresp_sms_set_delivery_report deliverReportInfo = {0,};\r
+       UserRequest *ur = NULL;\r
+       const TcoreATResponse *atResp = data;\r
+       GSList *tokens=NULL;\r
+       char *line = NULL , *pResp = NULL;\r
+       int rtn = -1;\r
+\r
+       dbg(" Func Entrance");\r
+\r
+\r
+       if (atResp->success)\r
+       {\r
+               dbg("Response OK");\r
+               if(atResp->lines)\r
+               {\r
+                       line = (char*)atResp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                        pResp = g_slist_nth_data(tokens, 0);\r
+                        if (pResp)\r
+                       {\r
+                               deliverReportInfo.result = SMS_SENDSMS_SUCCESS;\r
+                       }\r
+                       else\r
+                       {\r
+                               dbg("No tokens");\r
+                               deliverReportInfo.result = SMS_DEVICE_FAILURE;\r
+                       }\r
+               }else\r
+               {\r
+                       dbg("No lines");\r
+                       deliverReportInfo.result = SMS_DEVICE_FAILURE;\r
+               }\r
+       }else\r
+       {\r
+               dbg("Response NOK");\r
+       }\r
+\r
+\r
+       rtn = tcore_user_request_send_response(ur, TRESP_SMS_SET_DELIVERY_REPORT, sizeof(struct tresp_sms_set_delivery_report), &deliverReportInfo);\r
+\r
+       dbg(" Return value [%d]",rtn);\r
+\r
+       return;\r
+\r
+}\r
+#endif\r
+\r
+static void on_response_send_umts_msg(TcorePending *plugin, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *resp = data;\r
+       struct tresp_sms_send_umts_msg respUmtsInfo;\r
+       UserRequest *ur = NULL;\r
+\r
+       char *line = NULL , *pResp = NULL;\r
+       int msg_ref = 0;\r
+       GSList *tokens = NULL;\r
+\r
+       dbg("Entry");\r
+\r
+       ur = tcore_pending_ref_user_request(plugin);\r
+\r
+       if(NULL == ur)\r
+       {\r
+               err("No user request");\r
+\r
+               dbg("Exit");\r
+               return;\r
+       }\r
+\r
+       if(resp->success > 0)\r
+       {\r
+               dbg("Response OK");\r
+               if(resp->lines)\r
+               {\r
+                       line = (char *)resp->lines->data;\r
+                       dbg("line is %s",line);\r
+\r
+                       tokens = tcore_at_tok_new(line);\r
+\r
+                       pResp = g_slist_nth_data(tokens, 0);\r
+                       if (pResp != NULL)\r
+                       {\r
+                               msg_ref = atoi(pResp);\r
+                               dbg("Message Reference: %d", msg_ref);\r
+\r
+                               respUmtsInfo.result = SMS_SENDSMS_SUCCESS;\r
+                       }\r
+                       else\r
+                       {\r
+                               dbg("No Message Reference received");\r
+                               respUmtsInfo.result = SMS_DEVICE_FAILURE;\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       dbg("No lines");\r
+                       respUmtsInfo.result = SMS_DEVICE_FAILURE;\r
+               }\r
+       }\r
+       else\r
+       {\r
+               dbg("Response NOK");\r
+               respUmtsInfo.result = SMS_DEVICE_FAILURE;\r
+       }\r
+\r
+       tcore_user_request_send_response(ur, TRESP_SMS_SEND_UMTS_MSG, sizeof(struct tresp_sms_send_umts_msg), &respUmtsInfo);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void on_response_read_msg(TcorePending *plugin, int data_len, const void *data, void *user_data)\r
+{\r
+       const TcoreATResponse *atResp = data;\r
+       struct tresp_sms_read_msg respReadMsg;\r
+       UserRequest *ur = NULL;\r
+       GSList *tokens=NULL, *lines = NULL;\r
+       char * line = NULL, *pResp = NULL , *pdu = NULL, *temp_pdu = NULL;\r
+       int ScLength = 0;\r
+       int rtn = 0 , i = 0;\r
+       int stat = 0 , alpha = 0 , length = 0;\r
+       int index = (int)(uintptr_t)user_data;\r
+\r
+       dbg("Entry");\r
+       dbg("index: [%d]", index);\r
+       dbg("lines: [%p]", atResp->lines);\r
+\r
+       g_slist_foreach(atResp->lines, print_glib_list_elem, NULL); /* gaurav.kalra: For test */\r
+\r
+       ur = tcore_pending_ref_user_request(plugin);\r
+       if (NULL == ur)\r
+       {\r
+               err("No user request");\r
+\r
+               dbg("Exit");\r
+               return;\r
+       }\r
+\r
+       dbg("success: [%02x]", atResp->success);\r
+\r
+       if (atResp->success > 0)\r
+       {\r
+               if (atResp->lines)\r
+               {\r
+                       line = (char *)atResp->lines->data;\r
+\r
+                       dbg("response Ok line is %s",line);\r
+\r
+                       tokens = tcore_at_tok_new(line);\r
+                       g_slist_foreach(tokens, print_glib_list_elem, NULL); /* gaurav.kalra: For test */\r
+                       dbg(" length of tokens is %d\n", g_slist_length(tokens));\r
+\r
+                       pResp = g_slist_nth_data(tokens, 0);\r
+                       if (pResp != NULL)\r
+                       {\r
+                               //ToDO msg status mapping needs to be done\r
+                               stat = atoi(pResp);\r
+                               dbg("stat is %d",stat);\r
+                               switch (stat)\r
+                               {\r
+                                       case AT_REC_UNREAD:\r
+                                               respReadMsg.dataInfo.msgStatus = SMS_STATUS_UNREAD;\r
+                                               break;\r
+\r
+                                       case AT_REC_READ:\r
+                                               respReadMsg.dataInfo.msgStatus = SMS_STATUS_READ;\r
+                                               break;\r
+\r
+                                       case AT_STO_UNSENT:\r
+                                               respReadMsg.dataInfo.msgStatus = SMS_STATUS_UNSENT;\r
+                                               break;\r
+\r
+                                       case AT_STO_SENT:\r
+                                               respReadMsg.dataInfo.msgStatus = SMS_STATUS_SENT;\r
+                                               break;\r
+\r
+                                       case AT_ALL: //Fall Through\r
+                                       default: //Fall Through\r
+                                               respReadMsg.dataInfo.msgStatus = SMS_STATUS_RESERVED;\r
+                                               break;\r
+                               }\r
+                       }\r
+\r
+                       pResp = g_slist_nth_data(tokens, 1);\r
+                       if (pResp != NULL)\r
+                       {\r
+                               alpha = atoi(pResp);\r
+                               dbg("alpha is %d",alpha);\r
+                       }\r
+\r
+                       pResp = g_slist_nth_data(tokens, 2);\r
+                       if (pResp != NULL)\r
+                       {\r
+                               length = atoi(pResp);\r
+                               dbg("length is %d",length);\r
+                       }\r
+\r
+                       lines = atResp->lines;\r
+                       lines = lines->next;\r
+                       line = (char *)lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+\r
+                       temp_pdu = g_slist_nth_data(tokens, 0);\r
+                       if (temp_pdu != NULL)\r
+                       {\r
+                               dbg("temp pdu is %s",temp_pdu);\r
+                               pdu = util_hexStringToBytes(temp_pdu);\r
+                               ScLength = (int)pdu[0];\r
+\r
+                               respReadMsg.dataInfo.simIndex = index; //Retrieving index stored as part of req userdata\r
+\r
+\r
+                       if(0 == ScLength)\r
+                       {\r
+\r
+                               respReadMsg.dataInfo.smsData.msgLength =  length  - (ScLength+1) ;\r
+\r
+                               if ((respReadMsg.dataInfo.smsData.msgLength >0) && (0xff >= respReadMsg.dataInfo.smsData.msgLength))\r
+                               {\r
+                                       dbg("SCA Length is 0");\r
+\r
+                                       memset(respReadMsg.dataInfo.smsData.sca, 0, TAPI_SIM_SMSP_ADDRESS_LEN);\r
+\r
+                                       /*\r
+                                       if(read_data.SmsData.MsgLength > SMS_SMDATA_SIZE_MAX)\r
+                                       {\r
+                                               respReadMsg.dataInfo.smsData.msgLength = SMS_SMDATA_SIZE_MAX;\r
+                                       }\r
+                                       */\r
+\r
+                                       memcpy(respReadMsg.dataInfo.smsData.tpduData, &pdu[2], respReadMsg.dataInfo.smsData.msgLength);\r
+                                       respReadMsg.result = SMS_SUCCESS;\r
+\r
+                                       rtn = tcore_user_request_send_response(ur, TRESP_SMS_READ_MSG, sizeof(struct tresp_sms_read_msg), &respReadMsg);\r
+                               }\r
+                               else\r
+                               {\r
+                                       dbg("Invalid Message Length");\r
+                                       respReadMsg.result = SMS_INVALID_PARAMETER_FORMAT;\r
+                                       rtn = tcore_user_request_send_response(ur, TRESP_SMS_READ_MSG, sizeof(struct tresp_sms_read_msg), &respReadMsg);\r
+                               }\r
+\r
+                       }\r
+                       else            //SCLength is Not 0\r
+                       {\r
+                               respReadMsg.dataInfo.smsData.msgLength =  (length - (ScLength+1));\r
+                               dbg("data msg len is %d", respReadMsg.dataInfo.smsData.msgLength);\r
+\r
+                               if ((respReadMsg.dataInfo.smsData.msgLength >0) && (0xff >= respReadMsg.dataInfo.smsData.msgLength))\r
+                               {\r
+                                       memcpy(respReadMsg.dataInfo.smsData.sca, (char*)pdu,(ScLength+1));\r
+\r
+                                       /*LastSemiOctect = pdu[ScLength + 1] & 0xf0;\r
+                                       if(LastSemiOctect == 0xf0)\r
+                                       {\r
+                                               respReadMsg.dataInfo.smsData.sca[0] = (ScLength-1)*2 - 1;\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               respReadMsg.dataInfo.smsData.sca[0] = (ScLength-1)*2;\r
+                                       }\r
+                                       */\r
+                                       \r
+\r
+                                       //if(respReadMsg.dataInfo.smsData.msgLength > SMS_SMDATA_SIZE_MAX)\r
+                               //      {\r
+                                       //      respReadMsg.dataInfo.smsData.msgLength = SMS_SMDATA_SIZE_MAX;\r
+                               //      }\r
+\r
+                                       for(i=0;i<(ScLength+1);i++)\r
+                                       {\r
+                                               dbg("SCA is [%2x] ", respReadMsg.dataInfo.smsData.sca[i]);\r
+                                       }\r
+\r
+                                       memcpy(respReadMsg.dataInfo.smsData.tpduData, &pdu[ScLength+1], respReadMsg.dataInfo.smsData.msgLength);\r
+                                       respReadMsg.result = SMS_SUCCESS;\r
+\r
+                                       dbg("read tpdu is %s sca is %s pdu %s",respReadMsg.dataInfo.smsData.tpduData, respReadMsg.dataInfo.smsData.sca,pdu);\r
+\r
+                                       rtn = tcore_user_request_send_response(ur, TRESP_SMS_READ_MSG, sizeof(struct tresp_sms_read_msg), &respReadMsg);\r
+                               }\r
+                               else\r
+                               {\r
+                                       dbg("Invalid Message Length");\r
+                                       respReadMsg.result = SMS_INVALID_PARAMETER_FORMAT;\r
+                                       rtn = tcore_user_request_send_response(ur, TRESP_SMS_READ_MSG, sizeof(struct tresp_sms_read_msg), &respReadMsg);\r
+                               }\r
+\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       dbg("Read PDU Is NULL");\r
+               }\r
+               }\r
+               else\r
+               {\r
+                       dbg("No lines in AT response");\r
+               }\r
+       }\r
+       else\r
+       {\r
+               dbg("Response NOK");\r
+       }\r
+       return;\r
+}\r
+\r
+static void on_response_get_msg_indices(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest *ur = NULL;\r
+       struct tresp_sms_get_storedMsgCnt * respStoredMsgCnt_prev = NULL;\r
+       struct tresp_sms_get_storedMsgCnt respStoredMsgCnt;\r
+       const TcoreATResponse *atResp = data;\r
+       GSList *tokens = NULL;\r
+       char *line = NULL , *pResp = NULL;\r
+       int noOfLines = 0 , i = 0;\r
+\r
+       //memset(&respStoredMsgCnt, 0, sizeof(struct tresp_sms_get_storedMsgCnt));\r
+\r
+       respStoredMsgCnt_prev = (struct tresp_sms_get_storedMsgCnt *)user_data;\r
+       ur = tcore_pending_ref_user_request(p);\r
+\r
+       respStoredMsgCnt.result = SMS_SENDSMS_SUCCESS;\r
+\r
+       if (atResp->success)\r
+        {\r
+                dbg("Response OK");\r
+                if(atResp->lines)\r
+                {\r
+                       noOfLines = g_slist_length(atResp->lines);\r
+\r
+                       if (noOfLines > SMS_GSM_SMS_MSG_NUM_MAX)\r
+                               noOfLines = SMS_GSM_SMS_MSG_NUM_MAX;\r
+\r
+                        dbg("no of lines is %d", noOfLines);\r
+\r
+                       g_slist_foreach(atResp->lines, print_glib_list_elem, NULL); /* gaurav.kalra: For test */\r
+\r
+                       for (i = 0; i < noOfLines ; i++)\r
+                       {\r
+                               line = (char *)g_slist_nth_data(atResp->lines, i); /* Fetch Line i */\r
+\r
+                               dbg("line %d is %s", i, line);\r
+\r
+                               if (line != NULL)\r
+                               {\r
+                                       tokens = tcore_at_tok_new(line);\r
+\r
+                                       g_slist_foreach(tokens, print_glib_list_elem, NULL); /* gaurav.kalra: For test */\r
+\r
+                                       pResp = g_slist_nth_data(tokens, 0);\r
+                                       if (pResp != NULL)\r
+                                       {\r
+                                               respStoredMsgCnt.storedMsgCnt.indexList[i] = atoi(pResp);\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               respStoredMsgCnt.result = SMS_DEVICE_FAILURE;\r
+                                               dbg("pResp of line %d is NULL", i);\r
+\r
+                                       }\r
+                               }\r
+                               else\r
+                               {\r
+                                       respStoredMsgCnt.result = SMS_DEVICE_FAILURE;\r
+                                       dbg("line %d is NULL", i);\r
+                               }\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       dbg("No lines.");\r
+                       /* Check if used count is zero */\r
+                       if(respStoredMsgCnt_prev->storedMsgCnt.usedCount == 0)\r
+                               respStoredMsgCnt.result = SMS_SENDSMS_SUCCESS;\r
+                       else\r
+                               respStoredMsgCnt.result = SMS_DEVICE_FAILURE;\r
+               }\r
+       }\r
+       else\r
+       {\r
+               dbg("Respnose NOK");\r
+               respStoredMsgCnt.result = SMS_DEVICE_FAILURE;\r
+       }\r
+\r
+       for(i = 0; i < noOfLines ; i++)\r
+               dbg("index: [%d]", respStoredMsgCnt.storedMsgCnt.indexList[i]);\r
+\r
+       respStoredMsgCnt.storedMsgCnt.totalCount = respStoredMsgCnt_prev->storedMsgCnt.totalCount;\r
+       respStoredMsgCnt.storedMsgCnt.usedCount = respStoredMsgCnt_prev->storedMsgCnt.usedCount;\r
+\r
+       dbg("total: [%d]", respStoredMsgCnt.storedMsgCnt.totalCount);\r
+       dbg("used: [%d]", respStoredMsgCnt.storedMsgCnt.usedCount);\r
+       dbg("result: [%d]", respStoredMsgCnt.result);\r
+\r
+       util_sms_free_memory(respStoredMsgCnt_prev);\r
+\r
+       tcore_user_request_send_response(ur, TRESP_SMS_GET_STORED_MSG_COUNT, sizeof(struct tresp_sms_get_storedMsgCnt), &respStoredMsgCnt);\r
+\r
+\r
+}\r
+\r
+static void on_response_get_storedMsgCnt(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest *ur = NULL, *ur_dup = NULL;\r
+       struct tresp_sms_get_storedMsgCnt *respStoredMsgCnt = NULL;\r
+       const TcoreATResponse *atResp = data;\r
+       GSList *tokens=NULL;\r
+       char *line = NULL , *pResp = NULL , *cmd_str = NULL;\r
+       TcoreATRequest *atReq = NULL;\r
+       int usedCnt = 0, totalCnt = 0, result = 0;\r
+\r
+       TcorePending *pending_new = NULL;\r
+       CoreObject *o = NULL;\r
+\r
+       dbg("Entered");\r
+\r
+       respStoredMsgCnt = malloc(sizeof(struct tresp_sms_get_storedMsgCnt));\r
+\r
+       ur = tcore_pending_ref_user_request(p);\r
+       ur_dup = tcore_user_request_ref(ur);\r
+       o = tcore_pending_ref_core_object(p);\r
+\r
+       if (atResp->success > 0)\r
+       {\r
+               dbg("Response OK");\r
+               if(NULL != atResp->lines)\r
+               {\r
+                       line = (char *)atResp->lines->data;\r
+                       dbg("line is %s",line);\r
+\r
+                       tokens = tcore_at_tok_new(line);\r
+                       pResp = g_slist_nth_data(tokens, 0);\r
+\r
+                       if (pResp)\r
+                       {\r
+                               usedCnt =atoi(pResp);\r
+                               dbg("used cnt is %d",usedCnt);\r
+\r
+                       }\r
+\r
+                       pResp = g_slist_nth_data(tokens, 1);\r
+                       if (pResp)\r
+                       {\r
+                               totalCnt =atoi(pResp);\r
+                               result = SMS_SENDSMS_SUCCESS;\r
+\r
+                               respStoredMsgCnt->storedMsgCnt.usedCount = usedCnt;\r
+                               respStoredMsgCnt->storedMsgCnt.totalCount = totalCnt;\r
+                               respStoredMsgCnt->result = result;\r
+\r
+                               dbg("used %d, total %d, result %d",usedCnt, totalCnt,result);\r
+\r
+                               pending_new = tcore_pending_new(o, 0);\r
+                               cmd_str = g_strdup_printf("AT+CMGL=4\r");\r
+                               atReq = tcore_at_request_new((const char *)cmd_str, "+CMGL:", TCORE_AT_MULTILINE);\r
+\r
+                               dbg("cmd str is %s",cmd_str);\r
+\r
+                               tcore_pending_set_request_data(pending_new, 0,atReq);\r
+                               tcore_pending_set_response_callback(pending_new, on_response_get_msg_indices, (void *)respStoredMsgCnt);\r
+                               tcore_pending_link_user_request(pending_new, ur_dup);\r
+                               tcore_pending_set_send_callback(pending_new, on_confirmation_sms_message_send, NULL);\r
+                               tcore_hal_send_request(tcore_object_get_hal(o), pending_new);\r
+\r
+                               dbg("Exit");\r
+                               return;\r
+\r
+                       }\r
+               }else\r
+               {\r
+                               dbg("No data");\r
+                               result = SMS_DEVICE_FAILURE;\r
+               }\r
+       }\r
+\r
+       err("Response NOK");\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void on_response_get_sca(TcorePending *pending, int data_len, const void *data, void *user_data)\r
+{\r
+       //Response is expected in this format +CSCA: <sca>,<tosca>\r
+\r
+       UserRequest *ur;\r
+       struct tresp_sms_get_sca respGetSca;\r
+       GSList *tokens=NULL;\r
+\r
+       //copies the AT response data to resp\r
+       const TcoreATResponse *atResp = data;\r
+       char *line = NULL, *sca = NULL, *typeOfAddress = NULL;\r
+\r
+       // +CSCA: <sca number>,<sca type>\r
+\r
+       memset(&respGetSca, 0, sizeof(struct tresp_sms_get_sca));\r
+\r
+       ur = tcore_pending_ref_user_request(pending);\r
+       if (atResp->success)\r
+       {\r
+               dbg("Response OK");\r
+               if(atResp->lines)\r
+               {\r
+                       line = (char*)atResp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       sca = g_slist_nth_data(tokens, 0);\r
+                       typeOfAddress = g_slist_nth_data(tokens, 1);\r
+                       if ((sca) && (typeOfAddress))\r
+                       {\r
+                                       dbg("sca and address type are %s %s", sca, typeOfAddress);\r
+                                       respGetSca.scaAddress.dialNumLen = strlen(sca);\r
+                                       if(atoi(typeOfAddress) == 145)\r
+                                               {\r
+                                                       respGetSca.scaAddress.typeOfNum = SIM_TON_INTERNATIONAL;\r
+                                               }\r
+                                       else\r
+                                               {\r
+                                                       respGetSca.scaAddress.typeOfNum = SIM_TON_NATIONAL;\r
+                                               }\r
+                                       respGetSca.scaAddress.numPlanId = 0;\r
+\r
+                                       memcpy(respGetSca.scaAddress.diallingNum, sca, strlen(sca));\r
+\r
+                                       dbg("len %d, sca %s, TON %d, NPI %d",respGetSca.scaAddress.dialNumLen,respGetSca.scaAddress.diallingNum,respGetSca.scaAddress.typeOfNum,respGetSca.scaAddress.numPlanId);\r
+                                       respGetSca.result = SMS_SENDSMS_SUCCESS;\r
+                       }\r
+               }\r
+       }\r
+       else\r
+       {\r
+               dbg("Response NOK");\r
+               respGetSca.result = SMS_DEVICE_FAILURE;\r
+       }\r
+\r
+       tcore_user_request_send_response(ur, TRESP_SMS_GET_SCA, sizeof(struct tresp_sms_get_sca), &respGetSca);\r
+       return;\r
+\r
+}\r
+\r
+static void on_response_set_sca(TcorePending *pending, int data_len, const void *data, void *user_data)\r
+{\r
+       /*\r
+       Response is expected in this format\r
+       OK\r
+               or\r
+       +CMS ERROR: <err>\r
+       */\r
+\r
+       //CoreObject *obj = user_data;\r
+       UserRequest *ur;\r
+       //copies the AT response data to resp\r
+       const TcoreATResponse *atResp = data;\r
+       struct tresp_sms_set_sca respSetSca;\r
+\r
+       memset(&respSetSca, 0, sizeof(struct tresp_sms_set_sca));\r
+\r
+       ur = tcore_pending_ref_user_request(pending);\r
+       if (!ur)\r
+       {\r
+               dbg("no user_request");\r
+               return;\r
+       }\r
+\r
+       if (atResp->success >0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               respSetSca.result = SMS_SUCCESS;\r
+       }\r
+       else\r
+       {\r
+               dbg("RESPONSE NOK");\r
+               respSetSca.result = SMS_DEVICE_FAILURE;\r
+       }\r
+\r
+       tcore_user_request_send_response(ur, TRESP_SMS_SET_SCA, sizeof(struct tresp_sms_set_sca), &respSetSca);\r
+\r
+       return;\r
+}\r
+\r
+static void on_response_get_cb_config(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest *ur;\r
+       struct tresp_sms_get_cb_config respGetCbConfig;\r
+       const TcoreATResponse *atResp = data;\r
+       GSList *tokens=NULL;\r
+\r
+       int i = 0, mode =0 , result = 0;\r
+       char *mid = NULL, *pResp = NULL, *line = NULL, *res = NULL;\r
+       char delim[] = ",";\r
+\r
+       memset(&respGetCbConfig, 0, sizeof(struct tresp_sms_get_cb_config));\r
+\r
+       ur = tcore_pending_ref_user_request(p);\r
+       if (!ur)\r
+       {\r
+               dbg("no user_request");\r
+               return;\r
+       }\r
+\r
+       if (atResp->success)\r
+       {\r
+               dbg("Response OK");\r
+               if(atResp->lines)\r
+               {\r
+                       line = (char*)atResp->lines->data;\r
+                       if (line != NULL)\r
+                       {\r
+                               dbg("line is %s",line);\r
+                               tokens = tcore_at_tok_new(line);\r
+                               pResp = g_slist_nth_data(tokens, 0);\r
+                               if (pResp)\r
+                               {\r
+                                       mode = atoi(pResp);\r
+                                       respGetCbConfig.cbConfig.bCBEnabled = mode;\r
+                                       pResp = g_slist_nth_data(tokens, 1);\r
+                                       if (pResp)\r
+                                       {\r
+                                               mid = strtok(pResp, delim); i = 0;\r
+                                                       while( res != NULL )\r
+                                                       {\r
+                                                               res = strtok( NULL, delim );\r
+                                                               dbg("mid is %s%s\n", mid,res);\r
+                                                               if (res != NULL)\r
+                                                               {\r
+                                                                       if (strlen(res) >0)\r
+                                                                               {\r
+                                                                                       respGetCbConfig.cbConfig.msgIDs[i] = atoi(res);\r
+                                                                                       i++;\r
+                                                                               }\r
+                                                               }\r
+                                                       }\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                                       result = SMS_DEVICE_FAILURE;\r
+                                       }\r
+                                       respGetCbConfig.cbConfig.msgIdCount = i;\r
+\r
+                               }\r
+                               else\r
+                               {\r
+                                               result = SMS_DEVICE_FAILURE;\r
+                               }\r
+                               //dcs = g_slist_nth_data(tokens, 2); DCS not needed by telephony\r
+                       }\r
+                       else\r
+                       {\r
+                               dbg("line is NULL");\r
+                               result = SMS_DEVICE_FAILURE;\r
+                       }\r
+\r
+\r
+               }\r
+               else\r
+               {\r
+                               result = SMS_DEVICE_FAILURE;\r
+                               dbg("atresp->lines is NULL");\r
+               }\r
+       }\r
+       else\r
+       {\r
+                       result = SMS_DEVICE_FAILURE;\r
+                       dbg("RESPONSE NOK");\r
+       }\r
+\r
+       // Todo max list count and selectedid\r
+\r
+       tcore_user_request_send_response(ur, TRESP_SMS_GET_CB_CONFIG, sizeof(struct tresp_sms_get_cb_config), &respGetCbConfig);\r
+\r
+       return;\r
+}\r
+\r
+static void on_response_set_cb_config(TcorePending *pending, int data_len, const void *data, void *user_data)\r
+{\r
+       /*\r
+       Response is expected in this format\r
+       OK\r
+               or\r
+       +CMS ERROR: <err>\r
+       */\r
+\r
+       UserRequest *ur;\r
+       const TcoreATResponse *resp = data;\r
+       int response;\r
+       const char *line = NULL;\r
+       GSList *tokens=NULL;\r
+\r
+       struct tresp_sms_set_cb_config respSetCbConfig = {0,};\r
+\r
+       memset(&respSetCbConfig, 0, sizeof(struct tresp_sms_set_cb_config));\r
+\r
+       ur = tcore_pending_ref_user_request(pending);\r
+\r
+       if(resp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+\r
+       }\r
+       else\r
+       {\r
+               dbg("RESPONSE NOK");\r
+               line = (const char*)resp->final_response;\r
+               tokens = tcore_at_tok_new(line);\r
+\r
+               if (g_slist_length(tokens) < 1) {\r
+                       dbg("err cause not specified or string corrupted");\r
+                       respSetCbConfig.result = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               else\r
+               {\r
+                       response = atoi(g_slist_nth_data(tokens, 0));\r
+                       /* TODO: CMEE error mapping is required. */\r
+                       respSetCbConfig.result = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+       }\r
+       if (!ur)\r
+       {\r
+               dbg("no user_request");\r
+               return;\r
+       }\r
+\r
+       tcore_user_request_send_response(ur, TRESP_SMS_SET_CB_CONFIG, sizeof(struct tresp_sms_set_cb_config), &respSetCbConfig);\r
+\r
+       return;\r
+}\r
+\r
+static void on_response_set_mem_status(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest *ur;\r
+       struct tresp_sms_set_mem_status respSetMemStatus = {0,};\r
+       const TcoreATResponse *resp = data;\r
+\r
+       memset(&respSetMemStatus, 0, sizeof(struct tresp_sms_set_mem_status));\r
+\r
+       if(resp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+               respSetMemStatus.result = SMS_SENDSMS_SUCCESS;\r
+\r
+       }\r
+       else\r
+       {\r
+               dbg("RESPONSE NOK");\r
+               respSetMemStatus.result = SMS_DEVICE_FAILURE;\r
+       }\r
+\r
+       ur = tcore_pending_ref_user_request(p);\r
+       if (!ur)\r
+       {\r
+               dbg("no user_request");\r
+               return;\r
+       }\r
+\r
+       tcore_user_request_send_response(ur, TRESP_SMS_SET_MEM_STATUS, sizeof(struct tresp_sms_set_mem_status), &respSetMemStatus);\r
+\r
+       return;\r
+}\r
+\r
+static void on_response_set_msg_status(TcorePending *pending, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest *ur;\r
+       struct tresp_sms_set_msg_status respMsgStatus = {0,};\r
+       const TcoreATResponse *atResp = data;\r
+        int response = 0, sw1 =0 , sw2 = 0;\r
+        const char *line = NULL;\r
+        char *pResp = NULL;\r
+        GSList *tokens=NULL;\r
+\r
+       dbg("Entry");\r
+\r
+       memset(&respMsgStatus, 0, sizeof(struct tresp_sms_set_msg_status));\r
+        ur = tcore_pending_ref_user_request(pending);\r
+\r
+        if(atResp->success > 0)\r
+        {\r
+                dbg("RESPONSE OK");\r
+\r
+               if(atResp->lines)\r
+                {\r
+                        line = (const char*)atResp->lines->data;\r
+                        tokens = tcore_at_tok_new(line);\r
+                        pResp = g_slist_nth_data(tokens, 0);\r
+                        if (pResp != NULL)\r
+                        {\r
+                                sw1 = atoi(pResp);\r
+                        }\r
+                        else\r
+                        {\r
+                                respMsgStatus.result = SMS_DEVICE_FAILURE;\r
+                                dbg("sw1 is NULL");\r
+                        }\r
+                        pResp = g_slist_nth_data(tokens, 1);\r
+                        if (pResp != NULL)\r
+                        {\r
+                                sw2 = atoi(pResp);\r
+                                if ((sw1 == AT_SW1_SUCCESS) && (sw2 == 0))\r
+                                {\r
+                                        respMsgStatus.result = SMS_SENDSMS_SUCCESS;\r
+                                }\r
+                                else\r
+                                {\r
+                                        //TODO Error Mapping\r
+                                        respMsgStatus.result = SMS_DEVICE_FAILURE;\r
+                                }\r
+                        }\r
+                        else\r
+                        {\r
+                                dbg("sw2 is NULL");\r
+                                respMsgStatus.result = SMS_DEVICE_FAILURE;\r
+\r
+                               }\r
+                        pResp = g_slist_nth_data(tokens, 3);\r
+\r
+                       if (pResp != NULL)\r
+                        {\r
+                                response = atoi(pResp);\r
+                                dbg("response is %s", response);\r
+                        }\r
+\r
+                }\r
+               else\r
+               {\r
+                       dbg("No lines");\r
+               }\r
+\r
+        }\r
+        else\r
+        {\r
+                dbg("RESPONSE NOK");\r
+                respMsgStatus.result = SMS_DEVICE_FAILURE;\r
+        }\r
+\r
+        tcore_user_request_send_response(ur, TRESP_SMS_SET_MSG_STATUS , sizeof(struct tresp_sms_set_msg_status), &respMsgStatus);\r
+\r
+\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void on_response_get_sms_params(TcorePending *pending, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest *ur;\r
+       struct tresp_sms_get_params respGetParams;\r
+       const TcoreATResponse *atResp = data;\r
+       int response = 0, sw1 =0 , sw2 = 0;\r
+       const char *line = NULL;\r
+       char *pResp = NULL;\r
+       GSList *tokens=NULL;\r
+\r
+       memset(&respGetParams, 0, sizeof(struct tresp_sms_set_params));\r
+       ur = tcore_pending_ref_user_request(pending);\r
+\r
+       if(atResp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+\r
+               if(atResp->lines)\r
+               {\r
+                       line = (const char*)atResp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       pResp = g_slist_nth_data(tokens, 0);\r
+                       if (pResp != NULL)\r
+                       {\r
+                               sw1 = atoi(pResp);\r
+                               dbg("sw1 is %d",sw1);\r
+                       }\r
+                       else\r
+                       {\r
+                               respGetParams.result = SMS_DEVICE_FAILURE;\r
+                               dbg("sw1 is NULL");\r
+                       }\r
+                       pResp = g_slist_nth_data(tokens, 1);\r
+                       if (pResp != NULL)\r
+                       {\r
+                               sw2 = atoi(pResp);\r
+                               //if ((sw1 == 144) && (sw2 == 0))\r
+                               if (sw1 == AT_SW1_SUCCESS)\r
+                               {\r
+                                       respGetParams.result = SMS_SENDSMS_SUCCESS;\r
+                               }\r
+                               else\r
+                               {\r
+                                       //TODO Error Mapping\r
+                                       respGetParams.result = SMS_DEVICE_FAILURE;\r
+                               }\r
+                       }\r
+                       else\r
+                       {\r
+                               dbg("sw2 is NULL");\r
+                               respGetParams.result = SMS_DEVICE_FAILURE;\r
+\r
+                       }\r
+                       pResp = g_slist_nth_data(tokens, 3);\r
+                       if (pResp != NULL)\r
+                       {\r
+                               response = atoi(pResp);\r
+                               dbg("response is %s", response);\r
+                       }\r
+\r
+               }\r
+       }\r
+       else\r
+       {\r
+               dbg("RESPONSE NOK");\r
+               respGetParams.result = SMS_DEVICE_FAILURE;\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void on_response_set_sms_params(TcorePending *pending, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest *ur;\r
+       struct tresp_sms_set_params respSetParams = {0,};\r
+       const TcoreATResponse *atResp = data;\r
+       int response = 0, sw1 =0 , sw2 = 0;\r
+       const char *line = NULL;\r
+       char *pResp = NULL;\r
+       GSList *tokens=NULL;\r
+\r
+\r
+       memset(&respSetParams, 0, sizeof(struct tresp_sms_set_params));\r
+       ur = tcore_pending_ref_user_request(pending);\r
+\r
+       if(atResp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+\r
+               if(atResp->lines)\r
+               {\r
+                       line = (const char*)atResp->lines->data;\r
+                       tokens = tcore_at_tok_new(line);\r
+                       pResp = g_slist_nth_data(tokens, 0);\r
+                       if (pResp != NULL)\r
+                       {\r
+                               sw1 = atoi(pResp);\r
+                       }\r
+                       else\r
+                       {\r
+                               respSetParams.result = SMS_DEVICE_FAILURE;\r
+                               dbg("sw1 is NULL");\r
+                       }\r
+                       pResp = g_slist_nth_data(tokens, 1);\r
+                       if (pResp != NULL)\r
+                       {\r
+                               sw2 = atoi(pResp);\r
+                               if ((sw1 == AT_SW1_SUCCESS) && (sw2 == AT_SW2_SUCCESS))\r
+                               {\r
+                                       respSetParams.result = SMS_SENDSMS_SUCCESS;\r
+                               }\r
+                               else\r
+                               {\r
+                                       //TODO Error Mapping\r
+                                       respSetParams.result = SMS_DEVICE_FAILURE;\r
+                               }\r
+                       }\r
+                       else\r
+                       {\r
+                               dbg("sw2 is NULL");\r
+                               respSetParams.result = SMS_DEVICE_FAILURE;\r
+\r
+                       }\r
+                       pResp = g_slist_nth_data(tokens, 3);\r
+                       if (pResp != NULL)\r
+                       {\r
+                               response = atoi(pResp);\r
+                               dbg("response is %s", response);\r
+                       }\r
+\r
+               }\r
+       }\r
+       else\r
+       {\r
+               dbg("RESPONSE NOK");\r
+               respSetParams.result = SMS_DEVICE_FAILURE;\r
+       }\r
+\r
+       tcore_user_request_send_response(ur, TRESP_SMS_SET_PARAMS , sizeof(struct tresp_sms_set_params), &respSetParams);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void on_response_get_paramcnt(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+\r
+       UserRequest *ur = NULL;\r
+       struct tresp_sms_get_paramcnt respGetParamCnt = {0,};\r
+       const TcoreATResponse *atResp = data;\r
+       char *line = NULL , *pResp = NULL;\r
+       int sw1 = 0 , sw2 = 0;\r
+       int sim_type = SIM_TYPE_USIM; //TODO need to check how to handle this\r
+       GSList *tokens=NULL;\r
+\r
+       dbg("Entry");\r
+\r
+       ur = tcore_pending_ref_user_request(p);\r
+\r
+       if(atResp->success > 0)\r
+       {\r
+               dbg("RESPONSE OK");\r
+\r
+               if(atResp->lines)\r
+               {\r
+                       line = (char*)atResp->lines->data;\r
+\r
+                       dbg("line is %s",line);\r
+\r
+                       tokens = tcore_at_tok_new(line);\r
+                       pResp = g_slist_nth_data(tokens, 0);\r
+                       if (pResp != NULL)\r
+                       {\r
+                               sw1 = atoi(pResp);\r
+                       }\r
+                       else\r
+                       {\r
+                               respGetParamCnt.result = SMS_DEVICE_FAILURE;\r
+                               dbg("sw1 is NULL");\r
+                       }\r
+                       pResp = g_slist_nth_data(tokens, 1);\r
+                       if (pResp != NULL)\r
+                       {\r
+                               sw2 = atoi(pResp);\r
+                               if ((sw1 == 144) && (sw2 == 0))\r
+                               {\r
+                                       respGetParamCnt.result = SMS_SENDSMS_SUCCESS;\r
+                               }\r
+                               else\r
+                               {\r
+                                       //TODO Error Mapping\r
+                                       respGetParamCnt.result = SMS_DEVICE_FAILURE;\r
+                               }\r
+                       }\r
+                       else\r
+                       {\r
+                               dbg("sw2 is NULL");\r
+                               respGetParamCnt.result = SMS_DEVICE_FAILURE;\r
+\r
+                       }\r
+                       pResp = g_slist_nth_data(tokens, 3);\r
+                       if (pResp != NULL)\r
+                       {\r
+                               char *hexData;\r
+                               char *recordData;\r
+\r
+                               hexData  = pResp;\r
+                               if (pResp)\r
+                               dbg("response is %s", pResp);\r
+\r
+                               /*1. SIM access success case*/\r
+                               if ((sw1 == 0x90 && sw2 == 0x00) || sw1 == 0x91)\r
+                               {\r
+                                       unsigned char tag_len = 0; /*   1 or 2 bytes ??? */\r
+                                       unsigned short record_len = 0;\r
+                                       char num_of_records = 0;\r
+                                       unsigned char file_id_len = 0;\r
+                                       unsigned short file_id = 0;\r
+                                       unsigned short file_size = 0;\r
+                                       unsigned short file_type = 0;\r
+                                       unsigned short arr_file_id = 0;\r
+                                       int arr_file_id_rec_num = 0;\r
+\r
+                                       /*      handling only last 3 bits */\r
+                                       unsigned char file_type_tag = 0x07;\r
+                                       unsigned char *ptr_data;\r
+\r
+                                       recordData = util_hexStringToBytes(hexData);\r
+                                       util_hex_dump("    ", strlen(hexData)/2, recordData);\r
+\r
+                                       ptr_data = (unsigned char *)recordData;\r
+\r
+                                       if (sim_type ==  SIM_TYPE_USIM) {\r
+                                               /*\r
+                                                ETSI TS 102 221 v7.9.0\r
+                                                       - Response Data\r
+                                                        '62'   FCP template tag\r
+                                                        - Response for an EF\r
+                                                        '82'   M       File Descriptor\r
+                                                        '83'   M       File Identifier\r
+                                                       'A5'    O       Proprietary information\r
+                                                        '8A'   M       Life Cycle Status Integer\r
+                                                        '8B', '8C' or 'AB'     C1      Security attributes\r
+                                                       '80'    M       File size\r
+                                                        '81'   O       Total file size\r
+                                                        '88'   O       Short File Identifier (SFI)\r
+                                               */\r
+\r
+                                               /* rsim.res_len  has complete data length received  */\r
+\r
+                                               /* FCP template tag - File Control Parameters tag*/\r
+                                               if (*ptr_data == 0x62) {\r
+                                                       /* parse complete FCP tag*/\r
+                                                       /* increment to next byte */\r
+                                                       ptr_data++;\r
+                                                       tag_len = *ptr_data++;\r
+                                                       /* FCP file descriptor - file type, accessibility, DF, ADF etc*/\r
+                                               if (*ptr_data == 0x82) {\r
+                                                               /* increment to next byte */\r
+                                                               ptr_data++;\r
+                                                               /*2 or 5 value*/\r
+                                                               ptr_data++;\r
+                                               /*      unsigned char file_desc_len = *ptr_data++;*/\r
+                                               /*      dbg("file descriptor length: [%d]", file_desc_len);*/\r
+                                               /* TBD:  currently capture only file type : ignore sharable, non sharable, working, internal etc*/\r
+                                               /* consider only last 3 bits*/\r
+                                               file_type_tag = file_type_tag & (*ptr_data);\r
+\r
+                                               switch (file_type_tag) {\r
+                                                       /* increment to next byte */\r
+                                                       ptr_data++;\r
+                                                       case 0x1:\r
+                                                               dbg("Getting FileType: [Transparent file type]");\r
+                                                               /* increment to next byte */\r
+                                                               ptr_data++;\r
+                                                               file_type = 0x01;       //SIM_FTYPE_TRANSPARENT\r
+                                                               /*      data coding byte - value 21 */\r
+                                                               ptr_data++;\r
+                                                               break;\r
+\r
+                                                       case 0x2:\r
+                                                               dbg("Getting FileType: [Linear fixed file type]");\r
+                                                               /* increment to next byte */\r
+                                                               ptr_data++;\r
+                                                               /*      data coding byte - value 21 */\r
+                                                               ptr_data++;\r
+                                                               /*      2bytes */\r
+                                                               memcpy(&record_len, ptr_data, 2);\r
+                                                               /* swap bytes */\r
+                                                               SMS_SWAPBYTES16(record_len);\r
+                                                               ptr_data = ptr_data + 2;\r
+                                                               num_of_records = *ptr_data++;\r
+                                                               /* Data lossy conversation from enum (int) to unsigned char */\r
+                                                               file_type = 0x02;       // SIM_FTYPE_LINEAR_FIXED\r
+                                                               break;\r
+\r
+                                                       case 0x6:\r
+                                                               dbg(" Cyclic fixed file type");\r
+                                                               /* increment to next byte */\r
+                                                               ptr_data++;\r
+                                                               /*      data coding byte - value 21 */\r
+                                                               ptr_data++;\r
+                                                               /*      2bytes */\r
+                                                               memcpy(&record_len, ptr_data, 2);\r
+                                                               /* swap bytes  */\r
+                                                               SMS_SWAPBYTES16(record_len);\r
+                                                               ptr_data = ptr_data + 2;\r
+                                                               num_of_records = *ptr_data++;\r
+                                                               file_type = 0x04;       //SIM_FTYPE_CYCLIC\r
+                                                               break;\r
+\r
+                                               default:\r
+                                                       dbg("not handled file type [0x%x]", *ptr_data);\r
+                                                       break;\r
+                                               }\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               dbg("INVALID FCP received - DEbug!");\r
+                                               return;\r
+                                       }\r
+\r
+                                       /*File identifier - file id?? */ // 0x84,0x85,0x86 etc are currently ignored and not handled\r
+                                       if (*ptr_data == 0x83) {\r
+                                               /* increment to next byte */\r
+                                               ptr_data++;\r
+                                               file_id_len = *ptr_data++;\r
+                                               memcpy(&file_id, ptr_data, file_id_len);\r
+                                               /* swap bytes    */\r
+                                               SMS_SWAPBYTES16(file_id);\r
+                                               ptr_data = ptr_data + 2;\r
+                                               dbg("Getting FileID=[0x%x]", file_id);\r
+                                       } else {\r
+                                               dbg("INVALID FCP received - DEbug!");\r
+                                               free(recordData);\r
+                                               //ReleaseResponse();\r
+                                               return;\r
+                                       }\r
+\r
+                                       /*      proprietary information  */\r
+                                       if (*ptr_data == 0xA5) {\r
+                                               unsigned short prop_len;\r
+                                               /* increment to next byte */\r
+                                               ptr_data++;\r
+                                               /* length */\r
+                                               prop_len = *ptr_data;\r
+                                               /* skip data */\r
+                                               ptr_data = ptr_data + prop_len + 1;\r
+                                       } else {\r
+                                               dbg("INVALID FCP received - DEbug!");\r
+                                       }\r
+\r
+                                       /* life cycle status integer [8A][length:0x01][status]*/\r
+                                       /*\r
+                                        status info b8~b1\r
+                                        00000000 : No information given\r
+                                        00000001 : creation state\r
+                                        00000011 : initialization state\r
+                                        000001-1 : operation state -activated\r
+                                        000001-0 : operation state -deactivated\r
+                                        000011-- : Termination state\r
+                                        b8~b5 !=0, b4~b1=X : Proprietary\r
+                                        Any other value : RFU\r
+                                        */\r
+                                       if (*ptr_data == 0x8A) {\r
+                                               /* increment to next byte */\r
+                                               ptr_data++;\r
+                                               /* length - value 1 */\r
+                                               ptr_data++;\r
+\r
+                                               switch (*ptr_data) {\r
+                                                       case 0x04:\r
+                                                       case 0x06:\r
+                                                               dbg("<IPC_RX> operation state -deactivated");\r
+                                                               ptr_data++;\r
+                                                               break;\r
+                                                       case 0x05:\r
+                                                       case 0x07:\r
+                                                               dbg("<IPC_RX> operation state -activated");\r
+                                                               ptr_data++;\r
+                                                               break;\r
+                                                       default:\r
+                                                               dbg("<IPC_RX> DEBUG! LIFE CYCLE STATUS =[0x%x]",*ptr_data);\r
+                                                               ptr_data++;\r
+                                                               break;\r
+                                               }\r
+                                       }\r
+\r
+                                       /* related to security attributes : currently not handled*/\r
+                                       if (*ptr_data == 0x86 || *ptr_data == 0x8B || *ptr_data == 0x8C || *ptr_data == 0xAB) {\r
+                                               /* increment to next byte */\r
+                                               ptr_data++;\r
+                                               /* if tag length is 3 */\r
+                                               if (*ptr_data == 0x03) {\r
+                                                       /* increment to next byte */\r
+                                                       ptr_data++;\r
+                                                       /* EFARR file id */\r
+                                                       memcpy(&arr_file_id, ptr_data, 2);\r
+                                                       /* swap byes */\r
+                                                       SMS_SWAPBYTES16(arr_file_id);\r
+                                                       ptr_data = ptr_data + 2;\r
+                                                       arr_file_id_rec_num = *ptr_data++;\r
+                                               } else {\r
+                                                       /* if tag length is not 3 */\r
+                                                       /* ignoring bytes       */\r
+                                                       //      ptr_data = ptr_data + 4;\r
+                                                       dbg("Useless security attributes, so jump to next tag");\r
+                                                       ptr_data = ptr_data + (*ptr_data + 1);\r
+                                               }\r
+                                       } else {\r
+                                               dbg("INVALID FCP received[0x%x] - DEbug!", *ptr_data);\r
+                                               free(recordData);\r
+\r
+                                               return;\r
+                                       }\r
+\r
+                                       dbg("Current ptr_data value is [%x]", *ptr_data);\r
+\r
+                                       /* file size excluding structural info*/\r
+                                       if (*ptr_data == 0x80) {\r
+                                               /* for EF file size is body of file and for Linear or cyclic it is\r
+                                                * number of recXsizeof(one record)\r
+                                                */\r
+                                               /* increment to next byte */\r
+                                               ptr_data++;\r
+                                               /* length is 1 byte - value is 2 bytes or more */\r
+                                               ptr_data++;\r
+                                               memcpy(&file_size, ptr_data, 2);\r
+                                               /* swap bytes */\r
+                                               SMS_SWAPBYTES16(file_size);\r
+                                               ptr_data = ptr_data + 2;\r
+                                       } else {\r
+                                               dbg("INVALID FCP received - DEbug!");\r
+                                               free(recordData);\r
+                                               return;\r
+                                       }\r
+\r
+                                       /* total file size including structural info*/\r
+                                       if (*ptr_data == 0x81) {\r
+                                               int len;\r
+                                               /* increment to next byte */\r
+                                               ptr_data++;\r
+                                               /* length */\r
+                                               len = *ptr_data;\r
+                                               /* ignored bytes */\r
+                                               ptr_data = ptr_data + 3;\r
+                                       } else {\r
+                                               dbg("INVALID FCP received - DEbug!");\r
+                                               /* 0x81 is optional tag?? check out! so do not return -1 from here! */\r
+                                               /* return -1; */\r
+                                       }\r
+                                       /*short file identifier ignored*/\r
+                                       if (*ptr_data == 0x88) {\r
+                                               dbg("0x88: Do Nothing");\r
+                                               /*DO NOTHING*/\r
+                                       }\r
+                               } else {\r
+                                       dbg("INVALID FCP received - DEbug!");\r
+                                       free(recordData);\r
+                                       return;\r
+                               }\r
+                       }\r
+                       else if (sim_type == SIM_TYPE_GSM)\r
+                       {\r
+                               unsigned char gsm_specific_file_data_len = 0;\r
+                               /*      ignore RFU byte1 and byte2 */\r
+                               ptr_data++;\r
+                               ptr_data++;\r
+                               /*      file size */\r
+                               //file_size = p_info->response_len;\r
+                               memcpy(&file_size, ptr_data, 2);\r
+                               /* swap bytes */\r
+                               SMS_SWAPBYTES16(file_size);\r
+                               /*      parsed file size */\r
+                               ptr_data = ptr_data + 2;\r
+                               /*  file id  */\r
+                               memcpy(&file_id, ptr_data, 2);\r
+                               SMS_SWAPBYTES16(file_id);\r
+                               dbg(" FILE id --> [%x]", file_id);\r
+                               ptr_data = ptr_data + 2;\r
+                               /* save file type - transparent, linear fixed or cyclic */\r
+                               file_type_tag = (*(ptr_data + 7));\r
+\r
+                               switch (*ptr_data) {\r
+                                       case 0x0:\r
+                                               /* RFU file type */\r
+                                               dbg(" RFU file type- not handled - Debug!");\r
+                                               break;\r
+                                       case 0x1:\r
+                                               /* MF file type */\r
+                                               dbg(" MF file type - not handled - Debug!");\r
+                                               break;\r
+                                       case 0x2:\r
+                                               /* DF file type */\r
+                                               dbg(" DF file type - not handled - Debug!");\r
+                                               break;\r
+                                       case 0x4:\r
+                                               /* EF file type */\r
+                                               dbg(" EF file type [%d] ", file_type_tag);\r
+                                               /*      increment to next byte */\r
+                                               ptr_data++;\r
+\r
+                                               if (file_type_tag == 0x00 || file_type_tag == 0x01) {\r
+                                                       /* increament to next byte as this byte is RFU */\r
+                                                       ptr_data++;\r
+                                                       file_type =\r
+                                                                       (file_type_tag == 0x00) ? 0x01 : 0x02; // SIM_FTYPE_TRANSPARENT:SIM_FTYPE_LINEAR_FIXED;\r
+                                               } else {\r
+                                                       /* increment to next byte */\r
+                                                       ptr_data++;\r
+                                                       /*      For a cyclic EF all bits except bit 7 are RFU; b7=1 indicates that */\r
+                                                       /* the INCREASE command is allowed on the selected cyclic file. */\r
+                                                       file_type = 0x04;       // SIM_FTYPE_CYCLIC;\r
+                                               }\r
+                                               /* bytes 9 to 11 give SIM file access conditions */\r
+                                               ptr_data++;\r
+                                               /* byte 10 has one nibble that is RF U and another for INCREASE which is not used currently */\r
+                                               ptr_data++;\r
+                                               /* byte 11 is invalidate and rehabilate nibbles */\r
+                                               ptr_data++;\r
+                                               /* byte 12 - file status */\r
+                                               ptr_data++;\r
+                                               /* byte 13 - GSM specific data */\r
+                                               gsm_specific_file_data_len = *ptr_data;\r
+                                               ptr_data++;\r
+                                               /*      byte 14 - structure of EF - transparent or linear or cyclic , already saved above */\r
+                                               ptr_data++;\r
+                                               /* byte 15 - length of record for linear and cyclic , for transparent it is set to 0x00. */\r
+                                               record_len = *ptr_data;\r
+                                               dbg("record length[%d], file size[%d]", record_len, file_size);\r
+\r
+                                               if (record_len != 0)\r
+                                                       num_of_records = (file_size / record_len);\r
+\r
+                                               dbg("Number of records [%d]", num_of_records);\r
+                                               break;\r
+\r
+                                       default:\r
+                                               dbg(" not handled file type");\r
+                                               break;\r
+                               }\r
+                       }\r
+                       else\r
+                       {\r
+                               dbg(" Card Type - UNKNOWN  [%d]", sim_type);\r
+                       }\r
+\r
+                       dbg("EF[0x%x] size[%ld] Type[0x%x] NumOfRecords[%ld] RecordLen[%ld]", file_id, file_size, file_type, num_of_records, record_len);\r
+\r
+                       respGetParamCnt.recordCount = num_of_records;\r
+                       respGetParamCnt.result = SMS_SUCCESS;\r
+\r
+                       free(recordData);\r
+               }\r
+               else\r
+               {\r
+                       /*2. SIM access fail case*/\r
+                       dbg("SIM access fail");\r
+                       respGetParamCnt.result = SMS_UNKNOWN;\r
+               }\r
+               }else\r
+               {\r
+                       dbg("presp is NULL");\r
+               }\r
+\r
+               }else\r
+               {\r
+                       dbg("line is blank");\r
+               }\r
+       }\r
+       else\r
+       {\r
+               dbg("RESPONSE NOK");\r
+               respGetParamCnt.result = SMS_DEVICE_FAILURE;\r
+       }\r
+\r
+\r
+       tcore_user_request_send_response(ur, TRESP_SMS_GET_PARAMCNT, sizeof(struct tresp_sms_get_paramcnt), &respGetParamCnt);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+/*=============================================================\r
+                                                       Requests\r
+==============================================================*/\r
+static TReturn send_umts_msg(CoreObject *obj, UserRequest *ur)\r
+{\r
+       gchar *cmd_str = NULL;\r
+       TcoreHal *hal = NULL;\r
+       TcoreATRequest *atreq = NULL;\r
+       TcorePending *pending = NULL;\r
+       const struct treq_sms_send_umts_msg *sendUmtsMsg = NULL;\r
+\r
+       char buf[512];\r
+       int ScLength = 0;\r
+       int pdu_len = 0;\r
+\r
+       dbg("Entry");\r
+       dbg("CoreObject: [%p]", obj);\r
+       dbg("UserRequest: [%p]", ur);\r
+\r
+       sendUmtsMsg = tcore_user_request_ref_data(ur, NULL);\r
+       hal = tcore_object_get_hal(obj);\r
+       if(NULL == sendUmtsMsg || NULL == hal)\r
+       {\r
+               err("NULL input. Unable to proceed");\r
+               dbg("sendUmtsMsg: [%p], hal: [%p]", sendUmtsMsg, hal);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_EINVAL;\r
+       }\r
+\r
+       dbg("msgLength: [%d]", sendUmtsMsg->msgDataPackage.msgLength);\r
+       util_hex_dump("    ", (SMS_SMDATA_SIZE_MAX+1), (void *)sendUmtsMsg->msgDataPackage.tpduData);\r
+       util_hex_dump("    ", SMS_SMSP_ADDRESS_LEN, (void *)sendUmtsMsg->msgDataPackage.sca);\r
+\r
+       ScLength = (int)sendUmtsMsg->msgDataPackage.sca[0];\r
+\r
+       dbg("ScLength: [%d]", ScLength);\r
+\r
+       if ((sendUmtsMsg->msgDataPackage.msgLength > 0)\r
+               && (sendUmtsMsg->msgDataPackage.msgLength <= SMS_SMDATA_SIZE_MAX)\r
+               && (ScLength <= SMS_MAX_SMS_SERVICE_CENTER_ADDR))\r
+       {\r
+               if(ScLength == 0) //ScAddress not specified\r
+               {\r
+                       buf[0] = '0';\r
+                       buf[1] = '0';\r
+                       pdu_len = 2;\r
+               }\r
+               else\r
+               {\r
+               #ifndef TAPI_CODE_SUBJECT_TO_CHANGE\r
+                       dbg("SC length in Tx is %d - before", ScLength);\r
+\r
+                       util_sms_get_length_of_sca(&ScLength);\r
+\r
+                       dbg(" SC length in Tx is %d - after", ScLength);\r
+\r
+                       buf[0] = ScLength + 1;\r
+                       memcpy(&(buf[1]), &(sendUmtsMsg->msgDataPackage.sca[1]), (ScLength + 1));\r
+\r
+                       pdu_len = 2 + ScLength;\r
+               #else\r
+                       dbg("Specifying SCA in TPDU is currently not supported");\r
+\r
+                       buf[0] = '0';\r
+                       buf[1] = '0';\r
+                       pdu_len = 2;\r
+               #endif\r
+               }\r
+\r
+               util_byte_to_hex((const char *)sendUmtsMsg->msgDataPackage.tpduData, (char *)&buf[pdu_len], sendUmtsMsg->msgDataPackage.msgLength);\r
+\r
+               pdu_len = pdu_len + 2*sendUmtsMsg->msgDataPackage.msgLength;\r
+\r
+               buf[pdu_len] = '\0'; //Ensure termination\r
+\r
+               dbg("pdu_len: [%d]", pdu_len);\r
+               util_hex_dump("    ", sizeof(buf), (void *)buf);\r
+\r
+               //AT+CMGS=<length><CR>PDU is given<ctrl-Z/ESC>\r
+               cmd_str = g_strdup_printf("AT+CMGS=%d%s%s\x1A%s", sendUmtsMsg->msgDataPackage.msgLength, "\r", buf, "\r");\r
+               atreq = tcore_at_request_new((const char *)cmd_str, "+CMGS:", TCORE_AT_SINGLELINE);\r
+               pending = tcore_pending_new(obj, 0);\r
+\r
+               if(NULL == cmd_str || NULL == atreq || NULL == pending)\r
+               {\r
+                       err("Out of memory. Unable to proceed");\r
+                       dbg("cmd_str: [%p], atreq: [%p], pending: [%p]", cmd_str, atreq, pending);\r
+\r
+                       //free memory we own\r
+                       g_free(cmd_str);\r
+                       util_sms_free_memory(atreq);\r
+                       util_sms_free_memory(pending);\r
+\r
+                       dbg("Exit");\r
+                       return TCORE_RETURN_ENOMEM;\r
+               }\r
+\r
+               util_hex_dump("    ", strlen(cmd_str), (void *)cmd_str);\r
+\r
+               tcore_pending_set_request_data(pending, 0, atreq);\r
+               tcore_pending_set_response_callback(pending, on_response_send_umts_msg, NULL);\r
+               tcore_pending_link_user_request(pending, ur);\r
+               tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);\r
+               tcore_hal_send_request(hal, pending);\r
+\r
+               g_free(cmd_str);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_SUCCESS;\r
+       }\r
+\r
+       err("Invalid Data len");\r
+       dbg("Exit");\r
+       return TCORE_RETURN_SMS_INVALID_DATA_LEN;\r
+}\r
+\r
+static TReturn read_msg(CoreObject *obj, UserRequest *ur)\r
+{\r
+       gchar *cmd_str = NULL;\r
+       TcoreHal *hal = NULL;\r
+       TcoreATRequest *atreq = NULL;\r
+       TcorePending *pending = NULL;\r
+       const struct treq_sms_read_msg *readMsg = NULL;\r
+\r
+       dbg("Entry");\r
+       dbg("CoreObject: [%p]", obj);\r
+       dbg("UserRequest: [%p]", ur);\r
+\r
+       readMsg = tcore_user_request_ref_data(ur, NULL);\r
+       hal = tcore_object_get_hal(obj);\r
+       if(NULL == readMsg || NULL == hal)\r
+       {\r
+               err("NULL input. Unable to proceed");\r
+               dbg("readMsg: [%p], hal: [%p]", readMsg, hal);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_EINVAL;\r
+       }\r
+\r
+       dbg("index: [%d]", readMsg->index);\r
+\r
+       cmd_str = g_strdup_printf("AT+CMGR=%d\r", (readMsg->index + 1)); //IMC index is one ahead of TAPI\r
+       atreq = tcore_at_request_new((const char *)cmd_str, "\e+CMGR:", TCORE_AT_SINGLELINE);\r
+       pending = tcore_pending_new(obj, 0);\r
+\r
+       if(NULL == cmd_str || NULL == atreq || NULL == pending)\r
+       {\r
+               err("Out of memory. Unable to proceed");\r
+               dbg("cmd_str: [%p], atreq: [%p], pending: [%p]", cmd_str, atreq, pending);\r
+\r
+               //free memory we own\r
+               g_free(cmd_str);\r
+               util_sms_free_memory(atreq);\r
+               util_sms_free_memory(pending);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_ENOMEM;\r
+       }\r
+\r
+       util_hex_dump("    ", strlen(cmd_str), (void *)cmd_str);\r
+\r
+       tcore_pending_set_request_data(pending, 0, atreq);\r
+       tcore_pending_set_response_callback(pending, on_response_read_msg, (void *)(uintptr_t)(readMsg->index)); //storing index as user data for response\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       g_free(cmd_str);\r
+\r
+       dbg("Exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn save_msg(CoreObject *obj, UserRequest *ur)\r
+{\r
+       gchar *cmd_str = NULL;\r
+       TcoreHal *hal = NULL;\r
+       TcoreATRequest *atreq = NULL;\r
+       TcorePending *pending = NULL;\r
+       const struct treq_sms_save_msg *saveMsg = NULL;\r
+       int ScLength = 0, pdu_len = 0, stat = 0;\r
+       char buf[512];\r
+\r
+       dbg("Entry");\r
+       dbg("CoreObject: [%p]", obj);\r
+       dbg("UserRequest: [%p]", ur);\r
+\r
+       saveMsg = tcore_user_request_ref_data(ur, NULL);\r
+       hal = tcore_object_get_hal(obj);\r
+       if(NULL == saveMsg || NULL == hal)\r
+       {\r
+               err("NULL input. Unable to proceed");\r
+               dbg("saveMsg: [%p], hal: [%p]", saveMsg, hal);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_EINVAL;\r
+       }\r
+\r
+       dbg("Index value %d is not ensured. CP will allocate index automatically", saveMsg->simIndex);\r
+       dbg("msgStatus: %x", saveMsg->msgStatus);\r
+       dbg("msgLength: [%d]", saveMsg->msgDataPackage.msgLength);\r
+       util_hex_dump("    ", (SMS_SMDATA_SIZE_MAX+1), (void *)saveMsg->msgDataPackage.tpduData);\r
+       util_hex_dump("    ", SMS_SMSP_ADDRESS_LEN, (void *)saveMsg->msgDataPackage.sca);\r
+\r
+       switch (saveMsg->msgStatus) {\r
+               case SMS_STATUS_READ:\r
+                       stat = AT_REC_READ;\r
+                       break;\r
+\r
+               case SMS_STATUS_UNREAD:\r
+                       stat = AT_REC_UNREAD;\r
+                       break;\r
+\r
+               case SMS_STATUS_SENT:\r
+                       stat = AT_STO_SENT;\r
+                       break;\r
+\r
+               case SMS_STATUS_UNSENT:\r
+                       stat = AT_STO_UNSENT;\r
+                       break;\r
+\r
+               default:\r
+                       err("Invalid msgStatus");\r
+                       dbg("Exit");\r
+                       return TCORE_RETURN_EINVAL;\r
+       }\r
+\r
+       if ((saveMsg->msgDataPackage.msgLength > 0)\r
+               && (saveMsg->msgDataPackage.msgLength <= SMS_SMDATA_SIZE_MAX))\r
+       {\r
+               ScLength = (int)saveMsg->msgDataPackage.sca[0];\r
+\r
+               if(ScLength == 0)\r
+               {\r
+                       dbg("ScLength is zero");\r
+                       buf[0] = '0';\r
+                       buf[1] = '0';\r
+                       pdu_len = 2;\r
+               }\r
+               else {\r
+               #ifndef TAPI_CODE_SUBJECT_TO_CHANGE\r
+                       dbg("ScLength (Useful semi-octets) %d", ScLength);\r
+\r
+                       util_sms_get_length_of_sca(&ScLength); /* Convert useful semi-octets to useful octets */\r
+\r
+                       dbg("ScLength (Useful octets) %d", ScLength);\r
+\r
+                       buf[0] = ScLength + 1; /* ScLength */\r
+                       memcpy(&(buf[1]), &(saveMsg->msgDataPackage.sca[1]), ScLength+1); /* ScType + ScAddress */\r
+\r
+                       pdu_len = 2 + ScLength;\r
+               #endif\r
+                       dbg("Specifying SCA is currently not supported");\r
+                       buf[0] = '0';\r
+                       buf[1] = '0';\r
+                       pdu_len = 2;\r
+               }\r
+\r
+               util_byte_to_hex((const char *)saveMsg->msgDataPackage.tpduData, (char *)&(buf[pdu_len]), saveMsg->msgDataPackage.msgLength);\r
+\r
+               pdu_len = pdu_len + 2*saveMsg->msgDataPackage.msgLength;\r
+\r
+               buf[pdu_len] = '\0'; //Ensure termination\r
+\r
+               dbg("pdu_len: [%d]", pdu_len);\r
+               util_hex_dump("    ", sizeof(buf), (void *)buf);\r
+\r
+               //AT+CMGW=<length>[,<stat>]<CR>PDU is given<ctrl-Z/ESC>\r
+               cmd_str = g_strdup_printf("AT+CMGW=%d,%d%s%s\x1A%s", saveMsg->msgDataPackage.msgLength, stat, "\r", buf, "\r");\r
+               pending = tcore_pending_new(obj, 0);\r
+               atreq = tcore_at_request_new((const char *)cmd_str, "+CMGW", TCORE_AT_SINGLELINE);\r
+\r
+               if(NULL == cmd_str || NULL == atreq || NULL == pending)\r
+               {\r
+                       err("Out of memory. Unable to proceed");\r
+                       dbg("cmd_str: [%p], atreq: [%p], pending: [%p]", cmd_str, atreq, pending);\r
+\r
+                       //free memory we own\r
+                       g_free(cmd_str);\r
+                       util_sms_free_memory(atreq);\r
+                       util_sms_free_memory(pending);\r
+\r
+                       dbg("Exit");\r
+                       return TCORE_RETURN_ENOMEM;\r
+               }\r
+\r
+               util_hex_dump("    ", strlen(cmd_str), (void *)cmd_str);\r
+\r
+               tcore_pending_set_request_data(pending, 0, atreq);\r
+               tcore_pending_set_response_callback(pending, on_response_sms_save_msg_cnf, NULL);\r
+               tcore_pending_link_user_request(pending, ur);\r
+               tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);\r
+               tcore_hal_send_request(hal, pending);\r
+\r
+               g_free(cmd_str);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_SUCCESS;\r
+       }\r
+\r
+       err("Invalid Data len");\r
+       dbg("Exit");\r
+       return TCORE_RETURN_SMS_INVALID_DATA_LEN;\r
+}\r
+\r
+static TReturn delete_msg(CoreObject *obj, UserRequest *ur)\r
+{\r
+       gchar *cmd_str = NULL;\r
+       TcoreHal *hal = NULL;\r
+       TcoreATRequest *atreq = NULL;\r
+       TcorePending *pending = NULL;\r
+       const struct treq_sms_delete_msg *deleteMsg = NULL;\r
+\r
+       dbg("Entry");\r
+       dbg("CoreObject: [%p]", obj);\r
+       dbg("UserRequest: [%p]", ur);\r
+\r
+       deleteMsg = tcore_user_request_ref_data(ur, NULL);\r
+       hal = tcore_object_get_hal(obj);\r
+       if(NULL == deleteMsg || NULL == hal)\r
+       {\r
+               err("NULL input. Unable to proceed");\r
+               dbg("deleteMsg: [%p], hal: [%p]", deleteMsg, hal);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_EINVAL;\r
+       }\r
+\r
+       dbg("index: %d", deleteMsg->index);\r
+\r
+       cmd_str =g_strdup_printf("AT+CMGD=%d,0\r", deleteMsg->index);\r
+       pending = tcore_pending_new(obj, 0);\r
+       atreq = tcore_at_request_new((const char *)cmd_str, NULL, TCORE_AT_NO_RESULT);\r
+       if(NULL == cmd_str || NULL == atreq || NULL == pending)\r
+       {\r
+               err("Out of memory. Unable to proceed");\r
+               dbg("cmd_str: [%p], atreq: [%p], pending: [%p]", cmd_str, atreq, pending);\r
+\r
+               //free memory we own\r
+               g_free(cmd_str);\r
+               util_sms_free_memory(atreq);\r
+               util_sms_free_memory(pending);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_ENOMEM;\r
+       }\r
+\r
+       util_hex_dump("    ", strlen(cmd_str), (void *)cmd_str);\r
+\r
+       tcore_pending_set_request_data(pending, 0, atreq);\r
+       tcore_pending_set_response_callback(pending, on_response_sms_delete_msg_cnf, (void *)(uintptr_t)(deleteMsg->index)); //storing index as user data for response\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       g_free(cmd_str);\r
+\r
+       dbg("Exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn get_storedMsgCnt(CoreObject *obj, UserRequest *ur)\r
+{\r
+       gchar *cmd_str = NULL;\r
+       TcoreHal *hal = NULL;\r
+       TcoreATRequest *atreq = NULL;\r
+       TcorePending *pending = NULL;\r
+\r
+       dbg("Entry");\r
+       dbg("CoreObject: [%p]", obj);\r
+       dbg("UserRequest: [%p]", ur);\r
+\r
+       hal = tcore_object_get_hal(obj);\r
+       if(NULL == hal)\r
+       {\r
+               err("NULL HAL. Unable to proceed");\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_EINVAL;\r
+       }\r
+\r
+       cmd_str = g_strdup_printf("AT+CPMS=\"SM\",\"SM\",\"SM\"%c", CR);\r
+       pending = tcore_pending_new(obj, 0);\r
+       atreq = tcore_at_request_new((const char *)cmd_str, "+CPMS", TCORE_AT_SINGLELINE);\r
+\r
+       if(NULL == cmd_str || NULL == atreq || NULL == pending)\r
+       {\r
+               err("Out of memory. Unable to proceed");\r
+               dbg("cmd_str: [%p], atreq: [%p], pending: [%p]", cmd_str, atreq, pending);\r
+\r
+               //free memory we own\r
+               g_free(cmd_str);\r
+               util_sms_free_memory(atreq);\r
+               util_sms_free_memory(pending);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_ENOMEM;\r
+       }\r
+\r
+       util_hex_dump("    ", strlen(cmd_str), (void *)cmd_str);\r
+\r
+       tcore_pending_set_request_data(pending, 0, atreq);\r
+       tcore_pending_set_response_callback(pending, on_response_get_storedMsgCnt, NULL);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       g_free(cmd_str);\r
+\r
+       dbg("Exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn get_sca(CoreObject *obj, UserRequest *ur)\r
+{\r
+       gchar * cmd_str = NULL;\r
+       TcoreHal *hal = NULL;\r
+       TcoreATRequest *atreq = NULL;\r
+       TcorePending *pending = NULL;\r
+       const struct treq_sms_get_sca *getSca = NULL;\r
+\r
+       dbg("Entry");\r
+       dbg("CoreObject: [%p]", obj);\r
+       dbg("UserRequest: [%p]", ur);\r
+\r
+       getSca = tcore_user_request_ref_data(ur, NULL);\r
+       hal = tcore_object_get_hal(obj);\r
+       if(NULL == getSca || NULL == hal)\r
+       {\r
+               err("NULL input. Unable to proceed");\r
+               dbg("getSca: [%p], hal: [%p]", getSca, hal);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_EINVAL;\r
+       }\r
+\r
+       dbg("Index value %d is not ensured. CP doesn't support specifying index values for SCA", getSca->index);\r
+\r
+       cmd_str = g_strdup_printf("AT+CSCA?\r");\r
+       pending = tcore_pending_new(obj, 0);\r
+       atreq = tcore_at_request_new((const char *)cmd_str, "+CSCA", TCORE_AT_SINGLELINE);\r
+\r
+       if(NULL == cmd_str || NULL == atreq || NULL == pending)\r
+       {\r
+               err("Out of memory. Unable to proceed");\r
+               dbg("cmd_str: [%p], atreq: [%p], pending: [%p]", cmd_str, atreq, pending);\r
+\r
+               //free memory we own\r
+               g_free(cmd_str);\r
+               util_sms_free_memory(atreq);\r
+               util_sms_free_memory(pending);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_ENOMEM;\r
+       }\r
+\r
+       util_hex_dump("    ", strlen(cmd_str), (void *)cmd_str);\r
+\r
+       tcore_pending_set_request_data(pending, 0, atreq);\r
+       tcore_pending_set_response_callback(pending, on_response_get_sca, NULL);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       g_free(cmd_str);\r
+\r
+       dbg("Exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn set_sca(CoreObject *obj, UserRequest *ur)\r
+{\r
+       gchar *cmd_str = NULL;\r
+       TcoreHal *hal = NULL;\r
+       TcoreATRequest *atreq = NULL;\r
+       TcorePending *pending = NULL;\r
+       const struct treq_sms_set_sca *setSca = NULL;\r
+       int addrType = 0;\r
+\r
+       dbg("Entry");\r
+       dbg("CoreObject: [%p]", obj);\r
+       dbg("UserRequest: [%p]", ur);\r
+\r
+       setSca = tcore_user_request_ref_data(ur, NULL);\r
+       hal = tcore_object_get_hal(obj);\r
+       if(NULL == setSca || NULL == hal)\r
+       {\r
+               err("NULL input. Unable to proceed");\r
+               dbg("setSca: [%p], hal: [%p]", setSca, hal);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_EINVAL;\r
+       }\r
+\r
+       dbg("Index value %d is not ensured. CP will decide index automatically", setSca->index);\r
+       dbg("dialNumLen: %u", setSca->scaInfo.dialNumLen);\r
+       dbg("typeOfNum: %d", setSca->scaInfo.typeOfNum);\r
+       dbg("numPlanId: %d", setSca->scaInfo.numPlanId);\r
+       util_hex_dump("    ", (SMS_SMSP_ADDRESS_LEN+1), (void *)setSca->scaInfo.diallingNum);\r
+\r
+       addrType = ((setSca->scaInfo.typeOfNum << 4) | setSca->scaInfo.numPlanId) | 0x80;\r
+\r
+       cmd_str = g_strdup_printf("AT+CSCA=%s,%d", setSca->scaInfo.diallingNum, addrType);\r
+       pending = tcore_pending_new(obj, 0);\r
+       atreq = tcore_at_request_new((const char *)cmd_str, NULL, TCORE_AT_NO_RESULT);\r
+\r
+       if(NULL == cmd_str || NULL == atreq || NULL == pending)\r
+       {\r
+               err("Out of memory. Unable to proceed");\r
+               dbg("cmd_str: [%p], atreq: [%p], pending: [%p]", cmd_str, atreq, pending);\r
+\r
+               //free memory we own\r
+               g_free(cmd_str);\r
+               util_sms_free_memory(atreq);\r
+               util_sms_free_memory(pending);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_ENOMEM;\r
+       }\r
+\r
+       util_hex_dump("    ", strlen(cmd_str), (void *)cmd_str);\r
+\r
+       tcore_pending_set_request_data(pending, 0, atreq);\r
+       tcore_pending_set_response_callback(pending, on_response_set_sca, NULL);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       g_free(cmd_str);\r
+\r
+       dbg("Exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn get_cb_config(CoreObject *obj, UserRequest *ur)\r
+{\r
+       gchar *cmd_str = NULL;\r
+       TcoreHal *hal = NULL;\r
+       TcoreATRequest *atreq = NULL;\r
+       TcorePending *pending = NULL;\r
+\r
+       dbg("Entry");\r
+       dbg("CoreObject: [%p]", obj);\r
+       dbg("UserRequest: [%p]", ur);\r
+\r
+       hal = tcore_object_get_hal(obj);\r
+       if(NULL == hal)\r
+       {\r
+               err("NULL HAL. Unable to proceed");\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_EINVAL;\r
+       }\r
+\r
+       cmd_str = g_strdup_printf("AT+CSCB?");\r
+       pending = tcore_pending_new(obj, 0);\r
+       atreq = tcore_at_request_new((const char *)cmd_str, "+CSCB", TCORE_AT_SINGLELINE);\r
+       if(NULL == cmd_str || NULL == atreq || NULL == pending)\r
+       {\r
+               err("Out of memory. Unable to proceed");\r
+               dbg("cmd_str: [%p], atreq: [%p], pending: [%p]", cmd_str, atreq, pending);\r
+\r
+               //free memory we own\r
+               g_free(cmd_str);\r
+               util_sms_free_memory(atreq);\r
+               util_sms_free_memory(pending);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_ENOMEM;\r
+       }\r
+\r
+       util_hex_dump("    ", strlen(cmd_str), (void *)cmd_str);\r
+\r
+       tcore_pending_set_request_data(pending, 0, atreq);\r
+       tcore_pending_set_response_callback(pending, on_response_get_cb_config, NULL);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       g_free(cmd_str);\r
+\r
+       dbg("Exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn set_cb_config(CoreObject *obj, UserRequest *ur)\r
+{\r
+       gchar *cmd_str = NULL;\r
+       gchar *mids_str = NULL;\r
+       GString *mids_GString = NULL;\r
+\r
+       TcoreHal *hal = NULL;\r
+       TcoreATRequest *atreq = NULL;\r
+       TcorePending *pending = NULL;\r
+       const struct treq_sms_set_cb_config *setCbConfig = NULL;\r
+       int loop_ctr = 0;\r
+\r
+       dbg("Entry");\r
+       dbg("CoreObject: [%p]", obj);\r
+       dbg("UserRequest: [%p]", ur);\r
+\r
+       setCbConfig = tcore_user_request_ref_data(ur, NULL);\r
+       hal = tcore_object_get_hal(obj);\r
+       if(NULL == setCbConfig || NULL == hal)\r
+       {\r
+               err("NULL input. Unable to proceed");\r
+               dbg("setCbConfig: [%p], hal: [%p]", setCbConfig, hal);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_EINVAL;\r
+       }\r
+\r
+       dbg("bCBEnabled: %d", setCbConfig->bCBEnabled);\r
+       dbg("selectedId: %x", setCbConfig->selectedId);\r
+       dbg("msgIdMaxCount: %x", setCbConfig->msgIdMaxCount);\r
+       dbg("msgIdCount: %d", setCbConfig->msgIdCount);\r
+       util_hex_dump("    ", SMS_GSM_SMS_CBMI_LIST_SIZE_MAX, (void *)setCbConfig->msgIDs);\r
+\r
+       if (setCbConfig->bCBEnabled == FALSE) //AT+CSCB=0: Disable CBS\r
+       {\r
+               cmd_str = g_strdup_printf("AT+CSCB=0\r");\r
+       }\r
+       else\r
+       {\r
+               if(setCbConfig->selectedId == SMS_CBMI_SELECTED_SOME) //AT+CSCB=0,<mids>,<dcss>: Enable CBS for specified <mids> and <dcss>\r
+               {\r
+                       dbg("Enabling specified CBMIs");\r
+                       mids_GString = g_string_new(g_strdup_printf("%d", setCbConfig->msgIDs[0]));\r
+\r
+                       for(loop_ctr=1; loop_ctr <setCbConfig->msgIdCount; loop_ctr++)\r
+                       {\r
+                               mids_GString = g_string_append(mids_GString, ",");\r
+                               mids_GString = g_string_append(mids_GString, g_strdup_printf("%d", setCbConfig->msgIDs[loop_ctr]));\r
+                       }\r
+\r
+                       mids_str = g_string_free(mids_GString, FALSE);\r
+                       cmd_str = g_strdup_printf("AT+CSCB=0,\"%s\"\r", mids_str);\r
+\r
+                       g_free(mids_str);\r
+               }\r
+               else if (setCbConfig->selectedId == SMS_CBMI_SELECTED_ALL) //AT+CSCB=1: Enable CBS for all <mids> and <dcss>\r
+               {\r
+                       dbg("Enabling all CBMIs");\r
+                       cmd_str = g_strdup_printf("AT+CSCB=1\r");\r
+               }\r
+       }\r
+\r
+       pending = tcore_pending_new(obj, 0);\r
+       atreq = tcore_at_request_new((const char *)cmd_str, NULL, TCORE_AT_NO_RESULT);\r
+       if(NULL == cmd_str || NULL == atreq || NULL == pending)\r
+       {\r
+               err("Out of memory. Unable to proceed");\r
+               dbg("cmd_str: [%p], atreq: [%p], pending: [%p]", cmd_str, atreq, pending);\r
+\r
+               //free memory we own\r
+               g_free(cmd_str);\r
+               util_sms_free_memory(atreq);\r
+               util_sms_free_memory(pending);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_ENOMEM;\r
+       }\r
+\r
+       util_hex_dump("    ", strlen(cmd_str), (void *)cmd_str);\r
+\r
+       tcore_pending_set_request_data(pending, 0, atreq);\r
+       tcore_pending_set_response_callback(pending, on_response_set_cb_config, NULL);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       g_free(cmd_str);\r
+\r
+       dbg("Exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn set_mem_status(CoreObject *obj, UserRequest *ur)\r
+{\r
+       gchar *cmd_str = NULL;\r
+       TcoreHal *hal = NULL;\r
+       TcoreATRequest *atreq = NULL;\r
+       TcorePending *pending = NULL;\r
+       const struct treq_sms_set_mem_status *setMemStatus = NULL;\r
+       int memoryStatus = 0;\r
+\r
+       dbg("Entry");\r
+       dbg("CoreObject: [%p]", obj);\r
+       dbg("UserRequest: [%p]", ur);\r
+\r
+       setMemStatus = tcore_user_request_ref_data(ur, NULL);\r
+       hal = tcore_object_get_hal(obj);\r
+       if(NULL == setMemStatus || NULL == hal)\r
+       {\r
+               err("NULL input. Unable to proceed");\r
+               dbg("setMemStatus: [%p], hal: [%p]", setMemStatus, hal);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_EINVAL;\r
+       }\r
+\r
+       dbg("memory_status: %d", setMemStatus->memory_status);\r
+\r
+       if(setMemStatus->memory_status < SMS_PDA_MEMORY_STATUS_AVAILABLE\r
+               || setMemStatus->memory_status > SMS_PDA_MEMORY_STATUS_FULL)\r
+       {\r
+               err("Invalid memory_status");\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_EINVAL;\r
+       }\r
+\r
+       switch (setMemStatus->memory_status)\r
+       {\r
+               case SMS_PDA_MEMORY_STATUS_AVAILABLE:\r
+                       memoryStatus = AT_MEMORY_AVAILABLE;\r
+                       break;\r
+\r
+               case SMS_PDA_MEMORY_STATUS_FULL:\r
+                       memoryStatus = AT_MEMORY_FULL;\r
+                       break;\r
+\r
+               default:\r
+                       err("Invalid memory_status");\r
+                       dbg("Exit");\r
+                       return TCORE_RETURN_EINVAL;\r
+       }\r
+\r
+       cmd_str = g_strdup_printf("AT+XTESM=%d", memoryStatus);\r
+       pending = tcore_pending_new(obj, 0);\r
+       atreq = tcore_at_request_new((const char *)cmd_str, NULL, TCORE_AT_NO_RESULT);\r
+\r
+       if(NULL == cmd_str || NULL == atreq || NULL == pending)\r
+       {\r
+               err("Out of memory. Unable to proceed");\r
+               dbg("cmd_str: [%p], atreq: [%p], pending: [%p]", cmd_str, atreq, pending);\r
+\r
+               //free memory we own\r
+               g_free(cmd_str);\r
+               util_sms_free_memory(atreq);\r
+               util_sms_free_memory(pending);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_ENOMEM;\r
+       }\r
+\r
+       util_hex_dump("    ", strlen(cmd_str), (void *)cmd_str);\r
+\r
+       tcore_pending_set_request_data(pending, 0, atreq);\r
+       tcore_pending_set_response_callback(pending, on_response_set_mem_status, NULL);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       g_free(cmd_str);\r
+\r
+       dbg("Exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn get_pref_brearer(CoreObject *obj, UserRequest *ur)\r
+{\r
+       dbg("Entry");\r
+\r
+       err("Functionality not implemented");\r
+\r
+       dbg("Exit");\r
+       return TCORE_RETURN_ENOSYS;\r
+}\r
+\r
+static TReturn set_pref_brearer(CoreObject *obj, UserRequest *ur)\r
+{\r
+       dbg("Entry");\r
+\r
+       err("Functionality not implemented");\r
+\r
+       dbg("Exit");\r
+       return TCORE_RETURN_ENOSYS;\r
+}\r
+\r
+static TReturn set_delivery_report(CoreObject *obj, UserRequest *ur)\r
+{\r
+       dbg("Entry");\r
+\r
+       err("CP takes care of SMS ack to network automatically. AP doesn't need to invoke this API.");\r
+\r
+       dbg("Exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn set_msg_status(CoreObject *obj, UserRequest *ur)\r
+{\r
+       gchar *cmd_str = NULL;\r
+       char encoded_data[176];\r
+\r
+       TcoreHal *hal = NULL;\r
+       TcoreATRequest *atreq = NULL;\r
+       TcorePending *pending = NULL;\r
+       const struct treq_sms_set_msg_status *msg_status = NULL;\r
+\r
+       dbg("Entry");\r
+       dbg("CoreObject: [%p]", obj);\r
+       dbg("UserRequest: [%p]", ur);\r
+\r
+       msg_status = tcore_user_request_ref_data(ur, NULL);\r
+       hal = tcore_object_get_hal(obj);\r
+       if(NULL == msg_status || NULL == hal)\r
+       {\r
+               err("NULL input. Unable to proceed");\r
+               dbg("msg_status: [%p], hal: [%p]", msg_status, hal);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_EINVAL;\r
+       }\r
+\r
+       dbg("msgStatus: [%x], index [%x]", msg_status->msgStatus, msg_status->index);\r
+\r
+       switch (msg_status->msgStatus)\r
+       {\r
+               case SMS_STATUS_READ:\r
+                       encoded_data[0] = 0x01;\r
+                       break;\r
+\r
+               case SMS_STATUS_UNREAD:\r
+                       encoded_data[0] = 0x03;\r
+                       break;\r
+\r
+               case SMS_STATUS_UNSENT:\r
+                       encoded_data[0] = 0x07;\r
+                       break;\r
+\r
+               case SMS_STATUS_SENT:\r
+                       encoded_data[0] = 0x05;\r
+                       break;\r
+\r
+               case SMS_STATUS_DELIVERED:\r
+                       encoded_data[0] = 0x1D;\r
+                       break;\r
+\r
+               case SMS_STATUS_DELIVERY_UNCONFIRMED:\r
+                       encoded_data[0] = 0xD;\r
+                       break;\r
+\r
+               case SMS_STATUS_MESSAGE_REPLACED: //Fall Through\r
+               case SMS_STATUS_RESERVED: //Fall Through\r
+                       encoded_data[0] = 0x03;\r
+                       break;\r
+       }\r
+\r
+       memset(&encoded_data[1], 0xff, 175);\r
+\r
+       //AT+CRSM=command>[,<fileid>[,<P1>,<P2>,<P3>[,<data>[,<pathid>]]]]\r
+       cmd_str = g_strdup_printf("AT+CRSM=220,28476,%d, 4, 176 %s\r", (msg_status->index+1), encoded_data);\r
+       atreq = tcore_at_request_new((const char *)cmd_str, "+CRSM:", TCORE_AT_SINGLELINE);\r
+       pending = tcore_pending_new(obj, 0);\r
+       if(NULL == cmd_str || NULL == atreq || NULL == pending)\r
+       {\r
+               err("Out of memory. Unable to proceed");\r
+               dbg("cmd_str: [%p], atreq: [%p], pending: [%p]", cmd_str, atreq, pending);\r
+\r
+               //free memory we own\r
+               g_free(cmd_str);\r
+               util_sms_free_memory(atreq);\r
+               util_sms_free_memory(pending);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_ENOMEM;\r
+       }\r
+\r
+       util_hex_dump("    ", strlen(cmd_str), (void *)cmd_str);\r
+\r
+       tcore_pending_set_request_data(pending, 0, atreq);\r
+       tcore_pending_set_timeout(pending, 0);\r
+       tcore_pending_set_response_callback(pending, on_response_set_msg_status, NULL);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       g_free(cmd_str);\r
+\r
+       dbg("Exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn get_sms_params(CoreObject *obj, UserRequest *ur)\r
+{\r
+       gchar *cmd_str = NULL;\r
+       TcoreHal *hal = NULL;\r
+       TcoreATRequest *atreq = NULL;\r
+       TcorePending *pending = NULL;\r
+       const struct treq_sms_get_params *getSmsParams = NULL;\r
+\r
+       dbg("Entry");\r
+       dbg("CoreObject: [%p]", obj);\r
+       dbg("UserRequest: [%p]", ur);\r
+\r
+       getSmsParams = tcore_user_request_ref_data(ur, NULL);\r
+       hal = tcore_object_get_hal(obj);\r
+       if(NULL == getSmsParams || NULL == hal)\r
+       {\r
+               err("NULL input. Unable to proceed");\r
+               dbg("getSmsParams: [%p], hal: [%p]", getSmsParams, hal);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_EINVAL;\r
+       }\r
+\r
+       //AT+CRSM=command>[,<fileid>[,<P1>,<P2>,<P3>[,<data>[,<pathid>]]]]\r
+       cmd_str = g_strdup_printf("AT+CRSM=178,28482,%d,4,28\r", (getSmsParams->index + 1));\r
+       atreq = tcore_at_request_new((const char *)cmd_str, "+CRSM:", TCORE_AT_SINGLELINE);\r
+       pending = tcore_pending_new(obj, 0);\r
+       if(NULL == cmd_str || NULL == atreq || NULL == pending)\r
+       {\r
+               err("Out of memory. Unable to proceed");\r
+               dbg("cmd_str: [%p], atreq: [%p], pending: [%p]", cmd_str, atreq, pending);\r
+\r
+               //free memory we own\r
+               g_free(cmd_str);\r
+               util_sms_free_memory(atreq);\r
+               util_sms_free_memory(pending);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_ENOMEM;\r
+       }\r
+\r
+       util_hex_dump("    ", strlen(cmd_str), (void *)cmd_str);\r
+\r
+       tcore_pending_set_request_data(pending, 0, atreq);\r
+       tcore_pending_set_timeout(pending, 0);\r
+       tcore_pending_set_response_callback(pending, on_response_get_sms_params, NULL);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       g_free(cmd_str);\r
+\r
+       dbg("Exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn set_sms_params(CoreObject *obj, UserRequest *ur)\r
+{\r
+       gchar *cmd_str = NULL;\r
+       char *encoded_data = NULL;\r
+       char *temp_data = NULL, *dest_addr = NULL, *svc_addr = NULL;\r
+\r
+       TcoreHal *hal = NULL;\r
+       TcoreATRequest *atreq = NULL;\r
+       TcorePending *pending = NULL;\r
+       const struct treq_sms_set_params *setSmsParams = NULL;\r
+       int len = 0, alpha_id_len = 0,param_size = sizeof(struct treq_sms_set_params), encoded_data_len = 0;\r
+\r
+       dbg("Entry");\r
+       dbg("CoreObject: [%p]", obj);\r
+       dbg("UserRequest: [%p]", ur);\r
+\r
+       setSmsParams = tcore_user_request_ref_data(ur, NULL);\r
+       hal = tcore_object_get_hal(obj);\r
+       if(NULL == setSmsParams || NULL == hal)\r
+       {\r
+               err("NULL input. Unable to proceed");\r
+               dbg("setSmsParams: [%p], hal: [%p]", setSmsParams, hal);\r
+\r
+       temp_data = calloc(param_size,1);\r
+\r
+       alpha_id_len = setSmsParams->params.alphaIdLen;\r
+       dbg("alpha id len is %d", alpha_id_len);\r
+\r
+        memcpy(temp_data,&(setSmsParams->params.szAlphaId),alpha_id_len);\r
+       memcpy((temp_data+alpha_id_len), &(setSmsParams->params.paramIndicator), 1);    \r
+\r
+       dest_addr = calloc(sizeof(struct telephony_sms_AddressInfo),1);\r
+       svc_addr = calloc(sizeof(struct telephony_sms_AddressInfo),1);\r
+\r
+       if (setSmsParams->params.tpDestAddr.dialNumLen == 0)\r
+       {\r
+               dbg("dest_addr is not present");\r
+               dest_addr[0] = 0;\r
+               \r
+       }else\r
+       {\r
+               dest_addr[0] = setSmsParams->params.tpDestAddr.dialNumLen;\r
+               dest_addr[1] = (((setSmsParams->params.tpDestAddr.typeOfNum << 4) | setSmsParams->params.tpDestAddr.numPlanId) | 0x80);\r
+               memcpy(&(dest_addr[2]),setSmsParams->params.tpDestAddr.diallingNum,setSmsParams->params.tpDestAddr.dialNumLen);\r
+               dbg("dest_addr is %s",dest_addr);\r
\r
+       } \r
+\r
+       if (setSmsParams->params.tpSvcCntrAddr.dialNumLen == 0)\r
+        {\r
+                dbg("svc_addr is not present");\r
+                svc_addr[0] = 0;\r
+                \r
+        }else\r
+        {\r
+                svc_addr[0] = setSmsParams->params.tpSvcCntrAddr.dialNumLen;\r
+                svc_addr[1] = (((setSmsParams->params.tpSvcCntrAddr.typeOfNum << 4) | setSmsParams->params.tpSvcCntrAddr.numPlanId) | 0x80);\r
+                memcpy(&(svc_addr[2]),&(setSmsParams->params.tpSvcCntrAddr.diallingNum),setSmsParams->params.tpSvcCntrAddr.dialNumLen);\r
+                dbg("svc_addr is %s %s",svc_addr, setSmsParams->params.tpSvcCntrAddr.diallingNum);\r
\r
+        } \r
+\r
+       memcpy((temp_data+alpha_id_len+1), dest_addr, setSmsParams->params.tpDestAddr.dialNumLen);\r
+        memcpy((temp_data+alpha_id_len+setSmsParams->params.tpDestAddr.dialNumLen+1), svc_addr, setSmsParams->params.tpSvcCntrAddr.dialNumLen);\r
+\r
+        memcpy((temp_data+alpha_id_len+setSmsParams->params.tpDestAddr.dialNumLen+1+setSmsParams->params.tpSvcCntrAddr.dialNumLen), &(setSmsParams->params.tpProtocolId), 1);\r
+\r
+        memcpy((temp_data+alpha_id_len+setSmsParams->params.tpDestAddr.dialNumLen+2+setSmsParams->params.tpSvcCntrAddr.dialNumLen), &(setSmsParams->params.tpDataCodingScheme), 1);\r
+\r
+        memcpy((temp_data+alpha_id_len+setSmsParams->params.tpDestAddr.dialNumLen+3+setSmsParams->params.tpSvcCntrAddr.dialNumLen), &(setSmsParams->params.tpValidityPeriod), 1);\r
+        len = strlen(temp_data);\r
+\r
+       dbg("temp data and len %s %d",temp_data, len);\r
+\r
+       \r
+       //EFsmsp file size is 28 +Y bytes (Y is alpha id size)\r
+        encoded_data = calloc((setSmsParams->params.alphaIdLen+28),1);\r
+\r
+       util_byte_to_hex((const char *)temp_data, (char *)encoded_data,encoded_data_len);\r
+\r
+       hal = tcore_object_get_hal(obj);\r
+       pending = tcore_pending_new(obj, 0);\r
+\r
+       if(NULL == cmd_str || NULL == atreq || NULL == pending)\r
+       {\r
+               err("Out of memory. Unable to proceed");\r
+               dbg("cmd_str: [%p], atreq: [%p], pending: [%p]", cmd_str, atreq, pending);\r
+\r
+               //free memory we own\r
+               g_free(cmd_str);\r
+               util_sms_free_memory(atreq);\r
+               util_sms_free_memory(pending);\r
+\r
+               util_sms_free_memory(temp_data);\r
+               util_sms_free_memory(encoded_data);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_ENOMEM;\r
+       }\r
+\r
+       util_hex_dump("    ", strlen(cmd_str), (void *)cmd_str);\r
+\r
+       tcore_pending_set_request_data(pending, 0, atreq);\r
+       tcore_pending_set_timeout(pending, 0);\r
+       tcore_pending_set_response_callback(pending, on_response_set_sms_params, NULL);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       g_free(cmd_str);\r
+       util_sms_free_memory(temp_data);\r
+       util_sms_free_memory(encoded_data);\r
+\r
+       dbg("Exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+       }\r
+       return TRUE;    \r
+}\r
+\r
+static TReturn get_paramcnt(CoreObject *obj, UserRequest *ur)\r
+{\r
+       gchar *cmd_str = NULL;\r
+       TcoreHal *hal = NULL;\r
+       TcoreATRequest *atreq = NULL;\r
+       TcorePending *pending = NULL;\r
+\r
+       dbg("Entry");\r
+       dbg("CoreObject: [%p]", obj);\r
+       dbg("UserRequest: [%p]", ur);\r
+\r
+       hal = tcore_object_get_hal(obj);\r
+       if(NULL == hal)\r
+       {\r
+               err("NULL HAL. Unable to proceed");\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_EINVAL;\r
+       }\r
+\r
+       //AT+CRSM=command>[,<fileid>[,<P1>,<P2>,<P3>[,<data>[,<pathid>]]]]\r
+       cmd_str = g_strdup_printf("AT+CRSM=192, %d%s", 0x6F42, "\r");\r
+       atreq = tcore_at_request_new((const char *)cmd_str, "+CRSM:", TCORE_AT_SINGLELINE);\r
+       pending = tcore_pending_new(obj, 0);\r
+\r
+       if (NULL == cmd_str || NULL == atreq || NULL == pending)\r
+       {\r
+               err("NULL pointer. Unable to proceed");\r
+               dbg("cmd_str: [%p], atreq: [%p], pending: [%p]", cmd_str, atreq, pending);\r
+\r
+               //free memory we own\r
+               g_free(cmd_str);\r
+               util_sms_free_memory(atreq);\r
+               util_sms_free_memory(pending);\r
+\r
+               dbg("Exit");\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+       util_hex_dump("    ", strlen(cmd_str), (void *)cmd_str);\r
+\r
+       tcore_pending_set_request_data(pending, 0, atreq);\r
+       tcore_pending_set_timeout(pending, 0);\r
+       tcore_pending_set_response_callback(pending, on_response_get_paramcnt, NULL);\r
+       tcore_pending_link_user_request(pending, ur);\r
+       tcore_pending_set_send_callback(pending, on_confirmation_sms_message_send, NULL);\r
+       tcore_hal_send_request(hal, pending);\r
+\r
+       g_free(cmd_str);\r
+\r
+       dbg("Exit");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static struct tcore_sms_operations sms_ops =\r
+{\r
+       .send_umts_msg = send_umts_msg,\r
+       .read_msg = read_msg,\r
+       .save_msg = save_msg,\r
+       .delete_msg = delete_msg,\r
+       .get_storedMsgCnt = get_storedMsgCnt,\r
+       .get_sca = get_sca,\r
+       .set_sca = set_sca,\r
+       .get_cb_config = get_cb_config,\r
+       .set_cb_config = set_cb_config,\r
+       .set_mem_status = set_mem_status,\r
+       .get_pref_brearer = get_pref_brearer,\r
+       .set_pref_brearer = set_pref_brearer,\r
+       .set_delivery_report = set_delivery_report,\r
+       .set_msg_status = set_msg_status,\r
+       .get_sms_params = get_sms_params,\r
+       .set_sms_params = set_sms_params,\r
+       .get_paramcnt = get_paramcnt,\r
+};\r
+\r
+gboolean s_sms_init(TcorePlugin *plugin, TcoreHal *hal)\r
+{\r
+       CoreObject *obj = NULL;\r
+       struct property_sms_info *data = NULL;\r
+       GQueue *work_queue = NULL;\r
+\r
+       dbg("Entry");\r
+       dbg("plugin: [%p]", plugin);\r
+       dbg("hal: [%p]", hal);\r
+\r
+       obj = tcore_sms_new(plugin, "umts_sms", &sms_ops, hal);\r
+\r
+       data = calloc(sizeof(struct property_sms_info), 1);\r
+\r
+       if (NULL == obj || NULL == data)\r
+       {\r
+               err("Unable to initialize. Exiting");\r
+               s_sms_exit(plugin);\r
+\r
+               dbg("Exit");\r
+               return FALSE;\r
+       }\r
+\r
+       work_queue = g_queue_new();\r
+       tcore_object_link_user_data(obj, work_queue);\r
+\r
+       //Registering for SMS notifications\r
+       tcore_object_add_callback(obj, "\e+CMTI", on_event_sms_incom_msg, NULL);\r
+       tcore_object_add_callback(obj, "\e+CMT", on_event_sms_incom_msg, NULL);\r
+\r
+       tcore_object_add_callback(obj, "\e+CDS", on_event_sms_incom_msg, NULL);\r
+       tcore_object_add_callback(obj, "\e+CDSI", on_event_sms_incom_msg, NULL);\r
+\r
+       tcore_object_add_callback(obj, "+XSMSMMSTAT", on_event_sms_memory_status, NULL);\r
+\r
+       tcore_object_add_callback(obj, "\e+CBMI", on_event_sms_cb_incom_msg, NULL);\r
+       tcore_object_add_callback(obj, "\e+CBM", on_event_sms_cb_incom_msg, NULL);\r
+       tcore_object_add_callback(obj, "+XSIM", on_event_sms_ready_status, NULL);\r
+\r
+       tcore_plugin_link_property(plugin, "SMS", data);\r
+\r
+       dbg("Exit");\r
+       return TRUE;\r
+}\r
+\r
+void s_sms_exit(TcorePlugin *plugin)\r
+{\r
+       CoreObject *obj = NULL;\r
+       struct property_sms_info *data = NULL;\r
+\r
+       dbg("Entry");\r
+       dbg("plugin: [%p]", plugin);\r
+\r
+       obj = tcore_plugin_ref_core_object(plugin, "umts_sms");\r
+       if (NULL == obj)\r
+       {\r
+               err("NULL core object. Nothing to do.");\r
+               return;\r
+       }\r
+       tcore_sms_free(obj);\r
+\r
+       data = tcore_plugin_ref_property(plugin, "SMS");\r
+       util_sms_free_memory(data);\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
index 898489c..b1121a6 100755 (executable)
-/*
- * tel-plugin-imc
- *
- * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Hayoon Ko <hayoon.ko@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <glib.h>
-
-#include <tcore.h>
-#include <hal.h>
-#include <core_object.h>
-#include <plugin.h>
-#include <queue.h>
-#include <co_call.h>
-#include <co_ss.h>
-#include <user_request.h>
-#include <util.h>
-#include <server.h>
-#include <at.h>
-
-#include "s_common.h"
-#include "s_ss.h"
-
-#define TIZEN_NUM_TYPE_INTERNATIONAL           0x01
-#define TIZEN_NUM_PLAN_ISDN                                0x01
-
-//To avoid sending multiple response to application
-static gboolean UssdResp = FALSE;
-
-enum  telephony_ss_opcode
-{
-       TIZEN_SS_OPCO_REG=0x01,         /* 0x01 : Registration */
-       TIZEN_SS_OPCO_DEREG,            /* 0x02 : De-registration(erase) */
-       TIZEN_SS_OPCO_ACTIVATE,         /* 0x03 : Activation */
-       TIZEN_SS_OPCO_DEACTIVATE,       /* 0x04 : De-activation */
-       TIZEN_SS_OPCO_MAX
-};
-
-struct ss_confirm_info
-{
-       enum telephony_ss_class class;
-       int  flavor_type;
-       enum tcore_response_command resp;
-       void *data;
-       int  data_len;
-};
-
-static gboolean _ss_request_message(TcorePending *pending, CoreObject *o, UserRequest *ur, void* on_resp, void* user_data);
-
-static TReturn _ss_barring_get(CoreObject *o,
-                                                               UserRequest *ur,
-                                                               enum telephony_ss_class class,
-                                                               enum telephony_ss_barring_mode type,
-                                                               enum tcore_response_command resp);
-
-static TReturn _ss_forwarding_get(CoreObject *o,
-                                                                       UserRequest *ur,
-                                                                       enum telephony_ss_class class,
-                                                                       enum telephony_ss_forwarding_mode type,
-                                                                       enum tcore_response_command resp);
-
-static TReturn _ss_waiting_get(CoreObject *o,
-                                                               UserRequest *ur,
-                                                               enum telephony_ss_class class,
-                                                               enum tcore_response_command resp);
-
-
-static TReturn s_ss_barring_activate(CoreObject *o, UserRequest *ur);
-static TReturn s_ss_barring_deactivate(CoreObject *o, UserRequest *ur);
-static TReturn s_ss_barring_change_password(CoreObject *o, UserRequest *ur);
-static TReturn s_ss_barring_get_status(CoreObject *o, UserRequest *ur);
-
-static TReturn s_ss_forwarding_activate(CoreObject *o, UserRequest *ur);
-static TReturn s_ss_forwarding_deactivate(CoreObject *o, UserRequest *ur);
-static TReturn s_ss_forwarding_register(CoreObject *o, UserRequest *ur);
-static TReturn s_ss_forwarding_deregister(CoreObject *o, UserRequest *ur);
-static TReturn s_ss_forwarding_get_status(CoreObject *o, UserRequest *ur);
-
-static TReturn s_ss_waiting_activate(CoreObject *o, UserRequest *ur);
-static TReturn s_ss_waiting_deactivate(CoreObject *o, UserRequest *ur);
-static TReturn s_ss_waiting_get_status(CoreObject *o, UserRequest *ur);
-
-static TReturn s_ss_cli_activate(CoreObject *o, UserRequest *ur);
-static TReturn s_ss_cli_deactivate(CoreObject *o, UserRequest *ur);
-static TReturn s_ss_cli_get_status(CoreObject *o, UserRequest *ur);
-
-static TReturn s_ss_send_ussd(CoreObject *o, UserRequest *ur);
-
-static TReturn s_ss_set_aoc(CoreObject *o, UserRequest *ur);
-static TReturn s_ss_get_aoc(CoreObject *o, UserRequest *ur);
-
-static TReturn s_ss_manage_call_0_send(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data);
-static TReturn s_ss_manage_call_1_send(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data);
-static TReturn s_ss_manage_call_1x_send(CoreObject* o, UserRequest* ur, const int id, ConfirmCallback cb, void* user_data);
-static TReturn s_ss_manage_call_2_send(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data);
-static TReturn s_ss_manage_call_2x_send(CoreObject* o, UserRequest* ur, const int id, ConfirmCallback cb, void* user_data);
-static TReturn s_ss_manage_call_3_send(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data);
-static TReturn s_ss_manage_call_4_send(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data);
-static TReturn s_ss_manage_call_4dn_send(CoreObject* o, UserRequest* ur, const char* number, ConfirmCallback cb, void* user_data);
-
-static void on_confirmation_ss_message_send(TcorePending *p, gboolean result, void *user_data);
-
-static void _ss_ussd_response(UserRequest *ur, const char* ussd_str, enum telephony_ss_ussd_type type, enum telephony_ss_ussd_status status);
-static void _ss_ussd_notification(TcorePlugin *p, const char* ussd_str, enum telephony_ss_ussd_status status);
-
-static gboolean on_notification_ss_info(CoreObject *o, const void *data, void *user_data);
-static gboolean on_notification_ss_ussd(CoreObject *o, const void *data, void *user_data);
-
-static gboolean _ss_request_message(TcorePending *pending,
-                                                                               CoreObject *o,
-                                                                               UserRequest *ur,
-                                                                               void* on_resp,
-                                                                               void* user_data)
-{
-       TcoreHal *hal = NULL;
-       TReturn ret;
-       dbg("Entry");
-
-       if (on_resp) {
-               tcore_pending_set_response_callback(pending, on_resp, user_data);
-       }
-
-       tcore_pending_set_send_callback(pending, on_confirmation_ss_message_send, NULL);
-
-       if (ur) {
-               tcore_pending_link_user_request(pending, ur);
-       }
-       else {
-               err("User Request is NULL, is this internal request??");
-       }
-
-       /* HAL */
-       hal = tcore_object_get_hal(o);
-
-       /* Send request to HAL */
-       ret = tcore_hal_send_request(hal, pending);
-       if(TCORE_RETURN_SUCCESS != ret) {
-               err("Request send failed");
-               return FALSE;
-       }
-
-       dbg("Exit");
-       return TRUE;
-}
-
-static void _ss_ussd_response(UserRequest *ur, const char* ussd_str, enum telephony_ss_ussd_type type, enum telephony_ss_ussd_status status)
-{
-       struct tresp_ss_ussd resp;
-       dbg("Entry");
-
-       if (ur) {
-               memset (&resp, 0x0, sizeof(struct tresp_ss_ussd));
-
-               resp.type = type;
-               resp.status = status;
-               resp.err = FALSE;
-        dbg("ussd_str = %s resp.type - %d resp.status - %d",ussd_str ,resp.type,resp.status);
-
-               if (ussd_str) {
-                       int len = strlen(ussd_str);
-
-                       if (len < MAX_SS_USSD_LEN) {
-                               memcpy(resp.str, ussd_str, len);
-                               resp.str[len] = '\0';
-                       }
-                       else {
-                               memcpy(resp.str, ussd_str, MAX_SS_USSD_LEN);
-                               resp.str[MAX_SS_USSD_LEN - 1] = '\0';
-                       }
-                       dbg("Response string: %s", resp.str);
-               }
-               else {
-                       dbg("USSD string is not present");
-                       memset(resp.str, '\0', MAX_SS_USSD_LEN);
-               }
-
-         UssdResp = TRUE;
-               /* Send response to TAPI */
-               tcore_user_request_send_response(ur, TRESP_SS_SEND_USSD, sizeof(struct tresp_ss_ussd), &resp);
-       }
-       else {
-               err("User request is NULL");
-       }
-
-       dbg("Exit");
-       return;
-}
-
-static void _ss_ussd_notification(TcorePlugin *p, const char* ussd_str, enum telephony_ss_ussd_status status)
-{
-       CoreObject *o = 0;
-       struct tnoti_ss_ussd noti;
-
-       dbg("function enter");
-
-       if (!p)
-    {
-               dbg("[ error ] p : (NULL)");
-               return ;
-       }
-
-       noti.status = status;
-
-       if (ussd_str)
-    {
-
-               int len = strlen(ussd_str);
-
-               if (len < MAX_SS_USSD_LEN)
-        {
-                       memcpy(noti.str, ussd_str, len);
-                       noti.str[ len ] = '\0';
-               }
-        else
-        {
-                       memcpy(noti.str, ussd_str, MAX_SS_USSD_LEN);
-                       noti.str[ MAX_SS_USSD_LEN - 1 ] = '\0';
-               }
-
-       }
-    else
-    {
-               memset(noti.str, '\0', MAX_SS_USSD_LEN);
-
-       }
-    dbg("noti.str - %s", noti.str);
-
-       o = tcore_plugin_ref_core_object(p, "ss");
-
-       tcore_server_send_notification(tcore_plugin_ref_server(p),
-                       o,
-                       TNOTI_SS_USSD,
-                       sizeof(struct tnoti_ss_ussd),
-                       (void*)&noti    );
-
-}
-
-static gboolean        on_notification_ss_ussd(CoreObject *o, const void *data, void *user_data)
-{
-    enum telephony_ss_ussd_status status;
-       UssdSession *ussd_session = 0;
-       char *ussd_str = 0, *cmd = 0;
-       TcorePlugin *p = 0;
-       int m = -1, dcs = 0;
-    char *pUssdNoti= NULL, *pStr = NULL, *pDcs = NULL;
-    GSList *tokens = NULL;
-    GSList *lines = NULL;
-    char *Ussd_String = NULL;
-    unsigned int len;
-
-       p = tcore_object_ref_plugin(o);
-       ussd_session = tcore_ss_ussd_get_session(o);
-
-    dbg("function enter");
-       lines = (GSList*)data;
-       if (1 != g_slist_length(lines)) {
-               dbg("unsolicited msg but multiple line");
-               goto OUT;
-       }
-       cmd = (char*)(lines->data);
-
-       // parse ussd status
-    tokens = tcore_at_tok_new(cmd);
-
-    // parse <m>
-    pUssdNoti = g_slist_nth_data(tokens, 0);
-    if(!pUssdNoti)
-    {
-        dbg("+CUSD<m> is missing from %CUSD Notification");
-
-    }
-    else
-    {
-        m  = atoi(pUssdNoti);
-        dbg("USSD status  %d",m);
-        //parse [ <str>, <dcs>]
-        Ussd_String = g_slist_nth_data(tokens, 1);
-
-
-        if(Ussd_String)
-        {
-            /* Strike off starting & ending quotes. 1 extra character for NULL termination */
-            pStr = malloc(strlen(Ussd_String) - 1);
-            dbg("length of Ussd Stirng - %d", strlen(Ussd_String));
-            if(pStr)
-            {
-               memset(pStr, 0x00, strlen(Ussd_String) - 1);
-            }
-            else
-            {
-                dbg("malloc failed")
-                return FALSE;
-            }
-
-            len  = strlen(Ussd_String)-1;
-            ++Ussd_String;
-            strncpy(pStr, Ussd_String, len);
-       }
-       if((pDcs = g_slist_nth_data(tokens, 2)))
-       {
-            dcs = atoi(pDcs);
-       }
-        dbg("USSD String - %s len = %d",pStr,strlen(pStr));
-        dbg("USSD dcs %d",dcs);
-
-     }
-
-       switch(m)
-    {
-               case 0:
-                       status = SS_USSD_NO_ACTION_REQUIRE;
-               break;
-
-               case 1:
-                       status = SS_USSD_ACTION_REQUIRE;
-               break;
-
-               case 2:
-                       status = SS_USSD_TERMINATED_BY_NET;
-               break;
-
-               case 3:
-                       status = SS_USSD_OTHER_CLIENT;
-               break;
-
-               case 4:
-                       status = SS_USSD_NOT_SUPPORT;
-               break;
-
-               case 5:
-                       status = SS_USSD_TIME_OUT;
-               break;
-
-               default:
-                       dbg("unsupported m : %d", m);
-                       status = SS_USSD_MAX;
-               break;
-       }
-
-    switch (tcore_util_get_cbs_coding_scheme(dcs))
-    {
-        case TCORE_DCS_TYPE_7_BIT:
-        case TCORE_DCS_TYPE_UNSPECIFIED:
-               //ussd_str = tcore_util_unpack_gsm7bit(pStr, strlen(pStr));
-         //break;
-
-        case TCORE_DCS_TYPE_UCS2:
-        case TCORE_DCS_TYPE_8_BIT:
-            if (strlen(pStr)  > 0)
-            {
-                       ussd_str = g_new0(char, strlen(pStr)  + 1);
-                       memcpy(ussd_str,pStr, strlen(pStr));
-                       ussd_str[ strlen(pStr) ] = '\0';
-               }
-
-        break;
-        default:
-          dbg("[ error ] unknown dcs type. ussd_session : %x", ussd_session);
-          if (ussd_session)
-          {
-                UserRequest *ur = 0;
-                enum telephony_ss_ussd_type type;
-
-                tcore_ss_ussd_get_session_data(ussd_session, (void**)&ur);
-                if (!ur)
-                {
-                    dbg("[ error ] ur : (0)");
-                    return  FALSE;
-                }
-
-                type = (enum telephony_ss_ussd_type)tcore_ss_ussd_get_session_type(ussd_session);
-                dbg("ussd type  - %d", type);
-
-                _ss_ussd_response(ur, ussd_str, type, status);
-          }
-          return FALSE;
-    }
-
-    switch (status)
-    {
-       case SS_USSD_NO_ACTION_REQUIRE:
-       case SS_USSD_ACTION_REQUIRE:
-       case SS_USSD_OTHER_CLIENT:
-       case SS_USSD_NOT_SUPPORT:
-       case SS_USSD_TIME_OUT:
-        {
-               if (ussd_session)
-            {
-
-                       UserRequest *ur = 0;
-                       enum telephony_ss_ussd_type type;
-
-                       tcore_ss_ussd_get_session_data(ussd_session, (void**)&ur);
-                       if (!ur) {
-                               dbg("[ error ] ur : (0)");
-                               return FALSE;
-                       }
-
-                       type = (enum telephony_ss_ussd_type)tcore_ss_ussd_get_session_type(ussd_session);
-                dbg("ussd type  - %d", type);
-                       _ss_ussd_response(ur, (const char*)ussd_str, type, status);
-                if(ussd_str)
-                           g_free(ussd_str);
-
-               }
-            else
-            {
-                               tcore_ss_ussd_create_session(o, TCORE_SS_USSD_TYPE_NETWORK_INITIATED, 0, 0);
-                       _ss_ussd_notification(p, (const char*)ussd_str, status);
-                 if(ussd_str)
-                           g_free(ussd_str);
-
-                   }
-
-           }
-        break;
-           case SS_USSD_TERMINATED_BY_NET:
-        {
-
-               if (ussd_session)
-            {
-                       UserRequest *ur = 0;
-
-                       tcore_ss_ussd_get_session_data(ussd_session, (void**)&ur);
-
-                       if (ur)
-                               tcore_user_request_unref(ur);
-
-                       tcore_ss_ussd_destroy_session(ussd_session);
-               }
-
-           }
-        break;
-
-           default:
-           break;
-    }
-
-OUT:
-       if(NULL!=tokens)
-               tcore_at_tok_free(tokens);
-
-    if(NULL != pStr)
-        free(pStr);
-    dbg("Exit");
-       return TRUE;
-
-}
-static gboolean        on_notification_ss_info(CoreObject *o, const void *data, void *user_data)
-{
-
-       TcorePlugin *p  = 0;
-       CoreObject *co = 0;
-       char* cmd = 0, *number = 0, *pos;
-       int code1 = -1, code2 = -1, index = 0, ton = 0;
-    char *pCode1, *pCode2, *pTon ,*pIndex;
-    GSList *tokens = NULL;
-    char *buf;
-    gboolean cssu = FALSE,cssi = FALSE;
-    GSList *lines = NULL;
-    dbg("function enter");
-
-       p       = tcore_object_ref_plugin(o);
-       co      = tcore_plugin_ref_core_object(p, "call");
-       if (!co)
-    {
-               dbg("[ error ] plugin_ref_core_object : call");
-               return FALSE;
-       }
-
-       lines = (GSList*)data;
-       if (1 != g_slist_length(lines)) {
-               dbg("unsolicited msg but multiple line");
-               goto OUT;
-       }
-
-       cmd = (char*)(lines->data);
-
-    pos = strchr(cmd, ':');
-    if(!pos)
-    {
-        dbg("[ error ] not valid SS- notification ");
-               return TRUE;
-    }
-    buf = calloc(pos - cmd + 2, 1);
-       memcpy(buf, cmd, pos - cmd);
-    dbg("buf is %s", buf);
-
-    if(!strcmp(buf,"+CSSU"))
-    {
-        dbg("SS - +CSSU indication");
-        cssu = TRUE;
-    }
-    else if(!strcmp(buf,"+CSSI"))
-    {
-        dbg("SS - +CSSI indication");
-        cssi = TRUE;
-    }
-
-    free(buf);
-
-   //handle %CSSU notification
-    if(cssu)
-    {
-        tokens = tcore_at_tok_new(cmd);
-        // parse <code2>
-        pCode2 = g_slist_nth_data(tokens, 0);
-        if(!pCode2)
-        {
-            dbg("Code2 is missing from %CSSU indiaction");
-
-        }
-        else
-        {
-            code2  = atoi(pCode2);
-
-            //parse [ <index>, <number> <type>]
-            if ((pIndex = g_slist_nth_data(tokens, 1)))
-            {
-                index = atoi(pIndex);
-            }
-             if ((number = g_slist_nth_data(tokens, 2)))
-             {
-                pTon = g_slist_nth_data(tokens, 3);
-
-                if(pTon)
-                {
-                   ton = atoi(pTon);
-                }
-             }
-        }
-
-        dbg("CSSU - code2 = %d index = %d number = %s type = %d", code2, index,number, ton);
-       switch(code2)
-        {
-               case 0:  //this is a forwarded call (MT call setup)
-                       tcore_call_information_mt_forwarded_call(co, number);
-               break;
-
-               case 2: //call has been put on hold (during a voice call)
-                       tcore_call_information_held(co, number);
-               break;
-
-               case 3: //call has been retrieved (during a voice call)
-                       tcore_call_information_active(co, number);
-               break;
-
-               case 4: //multiparty call entered (during a voice call)
-                       tcore_call_information_joined(co, number);
-               break;
-
-               case 5: //call on hold has been released
-                       tcore_call_information_released_on_hold(co, number);
-               break;
-
-               case 6: //forward check SS message received (can be received whenever)
-                       tcore_call_information_cf_check_ss_message(co, number);
-               break;
-
-               case 7: //call is being connected (alerting) with the remote party in alerting state in explicit call transfer operation (during a voice call)
-                       tcore_call_information_transfer_alert(co, number);
-               break;
-
-               case 8: //call has been connected with the other remote party in explicit call transfer operation (also number and subaddress parameters may be present) (during a voice call or MT call setup)
-                       tcore_call_information_transfered(co, number);
-               break;
-
-               case 9: //this is a deflected call (MT call setup):
-                       tcore_call_information_mt_deflected_call(co, number);
-               break;
-
-               default:
-                       dbg("CSSU - unsupported code2 : %d",code2);
-               break;
-       }
-    }
-    //handle %CSSI notification
-
-    if(cssi)
-    {
-        tokens = tcore_at_tok_new(cmd);
-        // parse <code1>
-        pCode1 = g_slist_nth_data(tokens, 0);
-        if(!pCode1)
-        {
-            dbg("Code1 is missing from %CSSI indiaction");
-
-        }
-        else
-        {
-            code1  = atoi(pCode1);
-
-            //parse [ <index> ]
-            if ((pIndex = g_slist_nth_data(tokens, 1)))
-            {
-                index = atoi(pIndex);
-            }
-
-        }
-
-        dbg("CSSI - code1 - %d index - %d ", code1, index);
-
-       switch(code1)
-        {
-               case 0:  //Unconditional CF is active
-                       tcore_call_information_mo_cfu(co);
-               break;
-
-            case 1:     /*some of the conditional call forwarding are active */
-                tcore_call_information_mo_cfc(co);
-            break;
-
-               case 2:     /* outgoing call is forwarded */
-                           tcore_call_information_mo_forwarded(co);
-               break;
-
-               case 3:     /* this call is waiting */
-                           tcore_call_information_mo_waiting(co);
-               break;
-
-               case 5:     /*outgoing call is barred */
-                           tcore_call_information_mo_barred_outgoing(co);
-               break;
-
-               case 6:     /*incoming call is barred */
-                       tcore_call_information_mo_barred_incoming(co);
-               break;
-
-               case 7:     /* CLIR suppression rejected */
-                           tcore_call_information_mo_clir_suppression_reject(co);
-               break;
-
-               case 8:     /* outgoing call is deflected */
-                           tcore_call_information_mo_deflected(co);
-               break;
-
-               default:
-                       dbg("unsupported cmd : %d",code1);
-               break;
-       }
-
-    }
-OUT:
-       if(NULL!=tokens)
-               tcore_at_tok_free(tokens);
-       return TRUE;
-}
-
-static void on_confirmation_ss_message_send(TcorePending *p, gboolean result, void *user_data)
-{
-       dbg("");
-
-       if (result == FALSE) {
-               /* Fail */
-               dbg("FAIL");
-       }
-       else {
-               dbg("SEND OK");
-       }
-}
-
-static void on_response_ss_barring_set(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-
-       struct ss_confirm_info *info = 0;
-       enum telephony_ss_class class;
-       CoreObject* o = 0;
-       UserRequest *ur;
-       struct tresp_ss_general resp;
-       UserRequest *ur_dup=0;
-       GSList *tokens=NULL;
-       const char *line;
-    int err;
-    const TcoreATResponse* response;
-
-    dbg("function enter");
-
-    response = data;
-
-       o  = tcore_pending_ref_core_object(p);
-       ur = tcore_pending_ref_user_request(p);
-
-       info = (struct ss_confirm_info*)user_data;
-       class = info->class;
-
-    if (response->success > 0)
-    {
-        dbg("RESPONSE OK");
-        resp.err = TCORE_RETURN_SUCCESS;
-    }
-    else
-    {
-        dbg("RESPONSE NOT OK");
-        line = (const char*)response->final_response;
-               tokens = tcore_at_tok_new(line);
-
-               if (g_slist_length(tokens) < 1)
-        {
-                       dbg("err cause not specified or string corrupted");
-                   resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-               else
-               {
-                       err = atoi(g_slist_nth_data(tokens, 0));
-                       /* TODO: CMEE error mapping is required. */
-               resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-
-        tcore_at_tok_free(tokens);
-       }
-
-    dbg("on_response_ss_barring_set - rsp.err : %d, ur : %x flavor_type = %d", resp.err, ur , info->flavor_type);
-    dbg("[ check ] class : 0x%x", info->class);
-
-    if (response->success > 0)
-       {
-               if (info->class == SS_CLASS_VOICE)
-               {
-                   class = SS_CLASS_ALL_TELE_BEARER;
-               }
-
-               ur_dup = tcore_user_request_ref(ur);
-
-               if (info->flavor_type == SS_BARR_MODE_AB || info->flavor_type == SS_BARR_MODE_AOB)
-               {
-                       _ss_barring_get(o, ur_dup, class, SS_BARR_MODE_BAOC, info->resp);
-               }
-               else if (info->flavor_type == SS_BARR_MODE_AIB)
-               {
-                       _ss_barring_get(o, ur_dup, class, SS_BARR_MODE_BAIC, info->resp);
-               }
-               else
-               {
-                       _ss_barring_get(o, ur_dup, class, info->flavor_type, info->resp);
-               }
-
-       }
-       else
-       {
-               if (ur)
-               {
-                       tcore_user_request_send_response(ur, info->resp, sizeof(struct tresp_ss_general), &resp);
-               }
-               else
-               {
-                       dbg("[ error ] ur is 0");
-               }
-       }
-}
-
-static void on_response_ss_barring_change_pwd(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-
-    const TcoreATResponse* response = data;
-    struct ss_confirm_info *info = 0;
-       UserRequest *ur;
-       struct tresp_ss_general resp;
-    int err;
-       GSList *tokens=NULL;
-       const char *line;
-
-    dbg("function enter");
-
-       ur = tcore_pending_ref_user_request(p);
-
-       info = (struct ss_confirm_info*)user_data;
-
-    if (response->success > 0)
-    {
-        dbg("RESPONSE OK");
-        resp.err = TCORE_RETURN_SUCCESS;
-    }
-    else
-    {
-        dbg("RESPONSE NOT OK");
-
-        line = (const char*)response->final_response;
-               tokens = tcore_at_tok_new(line);
-
-               if (g_slist_length(tokens) < 1)
-        {
-                       dbg("err cause not specified or string corrupted");
-                   resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-               else
-               {
-                       err = atoi(g_slist_nth_data(tokens, 0));
-                       /* TODO: CMEE error mapping is required. */
-               resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-               tcore_at_tok_free(tokens);
-       }
-
-       dbg("on_response_ss_barring_change_pwd: rsp.err : %d, usr : %x", resp.err, ur);
-
-       if (ur)
-       {
-               tcore_user_request_send_response(ur, info->resp, sizeof(struct tresp_ss_general), &resp);
-       }
-       else
-       {
-               dbg("[ error ] ur is 0");
-       }
-
-       g_free(user_data);
-
-}
-
-
-static void on_response_ss_forwarding_set(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-       CoreObject* o = 0;
-       UserRequest* ur = 0, *dup_ur=0;
-       struct ss_confirm_info *info = 0;
-       struct tresp_ss_general resp;
-       GSList *tokens=NULL;
-       const char *line;
-    int err;
-    const TcoreATResponse* response;
-
-    dbg("function enter");
-
-    response  = data;
-
-       o  = tcore_pending_ref_core_object(p);
-       ur = tcore_pending_ref_user_request(p);
-
-       info = (struct ss_confirm_info*)user_data;
-
-    if (response->success > 0)
-    {
-        dbg("RESPONSE OK");
-        resp.err = TCORE_RETURN_SUCCESS;
-    }
-    else
-    {
-        dbg("RESPONSE NOT OK");
-
-        line = (const char*)response->final_response;
-               tokens = tcore_at_tok_new(line);
-
-               if (g_slist_length(tokens) < 1)
-        {
-                       dbg("err cause not specified or string corrupted");
-                   resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-               else
-               {
-                       err = atoi(g_slist_nth_data(tokens, 0));
-                       /* TODO: CMEE error mapping is required. */
-               resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-
-       tcore_at_tok_free(tokens);
-       }
-
-
-       dbg("[ check ] class : 0x%x", info->class);
-       dbg("[ check ] flavor_type : 0x%x", info->flavor_type);
-
-       dbg("on_response_ss_forwarding_set - rsp.err : %d, ur : %x", resp.err, ur);
-
-       if (response->success > 0)
-     {
-               if (info->flavor_type == SS_CF_MODE_CF_ALL ||
-                        info->flavor_type == SS_CF_MODE_CFC)
-               {
-                       if (ur)
-                       {
-                               tcore_user_request_send_response(ur, info->resp, sizeof(struct tresp_ss_general), &resp);
-                       }
-                       else
-                       {
-                               dbg("[ error ] ur is 0");
-                       }
-               }
-        else
-               {
-                       dup_ur = tcore_user_request_ref(ur);
-                       _ss_forwarding_get(o, dup_ur, info->class, info->flavor_type, info->resp);
-               }
-       }
-    else
-    {
-               if(ur)
-               {
-                       tcore_user_request_send_response(ur, info->resp, sizeof(struct tresp_ss_general), &resp);
-               }
-               else
-               {
-                       dbg("[ error ] ur is 0");
-               }
-
-       }
-       g_free(user_data);
-
-}
-
-static void on_response_ss_waiting_set(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-
-       CoreObject*     o = 0;
-       UserRequest* ur = 0;
-       UserRequest* ur_dup = 0;
-       struct ss_confirm_info *info = 0;
-       struct tresp_ss_general resp;
-       GSList *tokens = NULL;
-       const char *line;
-    int err;
-    const TcoreATResponse* response;
-
-    dbg("function enter");
-
-    response = data;
-       o  = tcore_pending_ref_core_object(p);
-       ur = tcore_pending_ref_user_request(p);
-
-       info = (struct ss_confirm_info*)user_data;
-
-       if(response->success > 0)
-    {
-        dbg("RESPONSE OK");
-        resp.err = TCORE_RETURN_SUCCESS;
-    }
-    else
-    {
-        dbg("RESPONSE NOT OK");
-
-        line = (const char*)response->final_response;
-               tokens = tcore_at_tok_new(line);
-
-               if (g_slist_length(tokens) < 1)
-        {
-                       dbg("err cause not specified or string corrupted");
-                   resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-               else
-               {
-                       err = atoi(g_slist_nth_data(tokens, 0));
-                       /* TODO: CMEE error mapping is required. */
-               resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-               tcore_at_tok_free(tokens);
-
-       }
-
-       dbg("on_response_ss_waiting_set - rsp.err : %d, ur : %x, class : %d", resp.err, ur, info->class);
-
-       if(resp.err == TCORE_RETURN_SUCCESS)
-    {
-                ur_dup = tcore_user_request_ref(ur);
-         dbg("Get waiting call status");
-               _ss_waiting_get(o, ur_dup, info->class, info->resp);
-       }
-    else
-    {
-               if (ur)
-               {
-                       tcore_user_request_send_response(ur, info->resp, sizeof(struct tresp_ss_general), &resp);
-               }
-               else
-               {
-                       dbg("[ error ] ur is 0");
-                }
-        }
-        g_free(user_data);
-}
-
-
-
-static void on_confirmation_ss_ussd(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-
-       struct ss_confirm_info *info = 0;
-       struct tresp_ss_ussd resp;
-       CoreObject*             o = NULL;
-       UserRequest*    ur = NULL , *ussd_ur= NULL;
-       GSList *tokens=NULL;
-       const char *line;
-       int err;
-    UssdSession *ussd_s = NULL;
-    enum tcore_ss_ussd_type type = TCORE_SS_USSD_TYPE_MAX;
-    const TcoreATResponse* response;
-
-    dbg("function enter");
-    response = data;
-
-       o  = tcore_pending_ref_core_object(p);
-       ur = tcore_pending_ref_user_request(p);
-
-       info = (struct ss_confirm_info*)user_data;
-
-    memset(resp.str, 0x00, MAX_SS_USSD_LEN);
-
-
-       ussd_s = tcore_ss_ussd_get_session(o);
-
-       if(ussd_s)
-               type = tcore_ss_ussd_get_session_type(ussd_s);
-       else
-               dbg("[ error ] ussd_s : (0)");
-
-       resp.type = (enum telephony_ss_ussd_type)type;
-    resp.status = SS_USSD_MAX; //hardcoded value.
-
-
-       if(response->success > 0)
-    {
-        dbg("RESPONSE OK");
-        resp.err = TCORE_RETURN_SUCCESS;
-    }
-    else
-    {
-        dbg("RESPONSE NOT OK");
-
-        line = (const char*)response->final_response;
-               tokens = tcore_at_tok_new(line);
-
-               if (g_slist_length(tokens) < 1)
-        {
-                       dbg("err cause not specified or string corrupted");
-                   resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-               else
-               {
-                       err = atoi(g_slist_nth_data(tokens, 0));
-                       /* TODO: CMEE error mapping is required. */
-               resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-
-       tcore_at_tok_free(tokens);
-     }
-
-       dbg("on_confirmation_ss_ussd - rsp.err : %d, ur : %x", resp.err, ur);
-
-       if(response->success > 0)
-       {
-
-           if(type == TCORE_SS_USSD_TYPE_USER_INITIATED)
-        {
-            dbg("ussd type %d",resp.type);
-
-            if(ussd_s)
-            {
-                           tcore_ss_ussd_get_session_data(ussd_s, (void**)&ussd_ur);
-                           if(ussd_ur)
-                    tcore_user_request_free(ussd_ur);
-            }
-               }
-        }
-
-    if(ussd_s)
-        tcore_ss_ussd_destroy_session(ussd_s);
-
-       if(ur)
-    {
-        if(UssdResp == FALSE) // to avoid sending multiple response to application.
-        {
-                   tcore_user_request_send_response(ur, info->resp, sizeof(struct tresp_ss_ussd), &resp);
-
-        }
-        UssdResp =  FALSE;
-       }
-       else
-               dbg("[ error ] ur : (0)");
-
-       g_free(user_data);
-
-}
-
-static void on_response_ss_barring_get(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-    CoreObject* o = 0;
-       UserRequest* ur = 0;
-       int status = 0, classx = 0, err = 0;
-    GSList *pRespData;
-
-       struct ss_confirm_info* info = 0;
-       struct tresp_ss_barring resp;
-       int countRecords = 0, countValidRecords = 0;
-       GSList *tokens = NULL;
-       const char *line;
-    char *pClassx;
-    char *pStat = NULL;
-    const TcoreATResponse *response;
-
-    dbg("function enter");
-
-    response = data;
-
-       o  = tcore_pending_ref_core_object(p);
-       ur = tcore_pending_ref_user_request(p);
-
-       info = (struct ss_confirm_info*)user_data;
-
-    if(response->lines)
-    {
-        pRespData = (GSList *)response->lines;
-        countRecords = g_slist_length(pRespData);
-       dbg("total records : %d",countRecords);
-
-    }
-    else
-    {
-        countRecords  = 0;
-        dbg("no active status - return to user")
-    }
-    resp.record_num = countRecords;
-
-    if(resp.record_num > 0)
-    {
-               resp.record = g_new0(struct barring_info, resp.record_num);
-
-               for (countValidRecords = 0; pRespData != NULL ; pRespData = pRespData->next)
-               {
-            line  = (const char*)(pRespData->data);
-            tokens = tcore_at_tok_new(line);
-
-           // parse <status>
-            pStat = g_slist_nth_data(tokens, 0);
-            if(!pStat)
-            {
-                dbg("Stat is missing");
-                               goto error;
-            }
-
-                   status = atoi(pStat);
-
-                       if(status == 1)
-            {
-                               resp.record[countValidRecords].status = SS_STATUS_ACTIVATE;
-                       }
-                       else
-            {
-                               resp.record[countValidRecords].status = SS_STATUS_DEACTIVATE;
-                       }
-            dbg("call barring status - %d",status);
-
-           //Parse <class>
-            pClassx = g_slist_nth_data(tokens, 1);
-
-               if (!pClassx)
-            {
-                               dbg("class error. classx not exist - set to requested one : %d", info->class);
-                               switch(info->class)
-                {
-                               case SS_CLASS_ALL_TELE:
-                                       classx = 7;
-                               break;
-                               case SS_CLASS_VOICE:
-                                       classx = 1;
-                               break;
-                               case SS_CLASS_ALL_DATA_TELE:
-                                       classx =2;
-                               break;
-                               case SS_CLASS_FAX:
-                                       classx = 4;
-                               break;
-                               case SS_CLASS_SMS:
-                                       classx = 8;
-                               break;
-                               case SS_CLASS_ALL_CS_SYNC:
-                                       classx = 16;
-                               break;
-
-                               default:
-                                       classx =7;
-                                       dbg("unsupported class %d. set to default : 7", info->class);
-                               break;
-                               }
-                       }
-            else
-            {
-                classx = atoi(pClassx);
-                dbg("call barring classx - %d",classx);
-            }
-
-                       switch(classx)
-                       {
-                               case 1:
-                                       resp.record[countValidRecords].class = SS_CLASS_VOICE;
-                               break;
-                               case 2:
-                                       resp.record[countValidRecords].class = SS_CLASS_ALL_DATA_TELE;
-                               break;
-                               case 4:
-                                       resp.record[countValidRecords].class = SS_CLASS_FAX;
-                               break;
-                               case 7:
-                                       resp.record[countValidRecords].class = SS_CLASS_ALL_TELE;
-                               break;
-                               case 8:
-                                       resp.record[countValidRecords].class = SS_CLASS_SMS;
-                               break;
-                               case 16:
-                                       resp.record[countValidRecords].class = SS_CLASS_ALL_CS_SYNC;
-                               break;
-                               case 32:
-                                       resp.record[countValidRecords].class = SS_CLASS_ALL_CS_ASYNC;
-                               break;
-                               default:
-                                       dbg("unspoorted class : [%d]\n", classx);
-                                       goto error;
-                               break;
-                       }
-
-                       resp.record[countValidRecords].mode = (enum telephony_ss_barring_mode)(info->flavor_type);
-                       countValidRecords++;
-            tcore_at_tok_free(tokens);
-                       continue;
-
-        error:
-                       dbg("invalid field found. coutinue");
-            tcore_at_tok_free(tokens);
-                       continue;
-               }
-
-               dbg("valid count :%d",countValidRecords);
-               resp.record_num = countValidRecords;
-               resp.err = TCORE_RETURN_SUCCESS;
-       }
-    else
-       {
-               dbg("no active status - return to user")
-       }
-
-    if(response->success > 0)
-    {
-        dbg("RESPONSE OK");
-        resp.err = TCORE_RETURN_SUCCESS;
-    }
-    else
-    {
-        dbg("RESPONSE NOT OK");
-        resp.err = TCORE_RETURN_FAILURE;
-
-        line = (const char*)response->final_response;
-               tokens = tcore_at_tok_new(line);
-
-               if (g_slist_length(tokens) < 1)
-        {
-                       dbg("err cause not specified or string corrupted");
-                   resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-               else
-               {
-                       err = atoi(g_slist_nth_data(tokens, 0));
-                       /* TODO: CMEE error mapping is required. */
-               resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-        tcore_at_tok_free(tokens);
-
-    }
-
-       dbg("on_response_ss_barring_get- rsp.err : %d, ur : %x", resp.err, ur);
-
-    if (ur)
-               tcore_user_request_send_response(ur, info->resp, sizeof(struct tresp_ss_barring), &resp);
-       else
-               dbg("[ error ] ur is 0");
-
-       if (resp.record)
-       {
-               g_free(resp.record);
-        resp.record = NULL;
-       }
-
-       g_free(user_data);
-
-}
-
-static void on_response_ss_forwarding_get(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-    CoreObject* o = 0;
-       UserRequest* ur = 0;
-    int classx = 0, err = 0, time = 0;
-       char* num;
-       struct ss_confirm_info* info = 0;
-       struct tresp_ss_forwarding resp;
-       int countRecords = 0, countValidRecords = 0;
-
-    GSList *pRespData = NULL ,*tokens = NULL ;
-       const char *line;
-    char *pClassx ,*pStatus, *pTon , *pTime;
-    const TcoreATResponse *response;
-
-    dbg("function enter");
-    response = data;
-
-       o  = tcore_pending_ref_core_object(p);
-       ur = tcore_pending_ref_user_request(p);
-
-    info = (struct ss_confirm_info*)user_data;
-
-    if(response->lines)
-    {
-        pRespData =  (GSList*)response->lines;
-        countRecords = g_slist_length(pRespData);
-       dbg("total records : %d",countRecords);
-
-    }
-    else
-    {
-        countRecords  = 0;
-        dbg("no active status - return to user")
-    }
-    resp.record_num = countRecords;
-
-    if (resp.record_num > 0)
-    {
-               resp.record = g_new0(struct forwarding_info, resp.record_num);
-
-               for (countValidRecords = 0; pRespData != NULL ; pRespData = pRespData->next)
-               {
-
-           line  = (const char*)(pRespData->data);
-           tokens = tcore_at_tok_new(line);
-
-           // parse <status>
-            pStatus = g_slist_nth_data(tokens, 0);
-            if(!pStatus)
-            {
-                dbg("start line error. skip this line");
-                               goto error;
-            }
-            else
-            {
-                       if(atoi(pStatus)== 1)
-                {
-                               resp.record[countValidRecords].status = SS_STATUS_ACTIVATE;
-                       }
-                       else
-                {
-                               resp.record[countValidRecords].status = SS_STATUS_DEACTIVATE;
-                       }
-             }
-
-                   //Parse <class>
-
-            pClassx = g_slist_nth_data(tokens, 1);
-               if (!pClassx)
-            {
-                               dbg("class error. skip this line");
-                               goto error;
-                       }
-            else
-            {
-               switch(atoi(pClassx))
-                {
-                               case 1:
-                                       resp.record[countValidRecords].class = SS_CLASS_VOICE;
-                               break;
-                               case 2:
-                                       resp.record[countValidRecords].class = SS_CLASS_ALL_DATA_TELE;
-                               break;
-                               case 4:
-                                       resp.record[countValidRecords].class = SS_CLASS_FAX;
-                               break;
-                               case 7:
-                                       resp.record[countValidRecords].class = SS_CLASS_ALL_TELE;
-                               break;
-                               case 8:
-                                       resp.record[countValidRecords].class = SS_CLASS_SMS;
-                               break;
-                               case 16:
-                                       resp.record[countValidRecords].class = SS_CLASS_ALL_CS_SYNC;
-                               break;
-                               case 32:
-                                       resp.record[countValidRecords].class = SS_CLASS_ALL_CS_ASYNC;
-                               break;
-                               default:
-                                       dbg("unspoorted class : [%d]\n", classx);
-                                       goto error;
-                               break;
-                       }
-             }
-
-            //parse  <numer> <type>
-            num = g_slist_nth_data(tokens, 2);
-            if (num)
-            {
-                dbg("number  - %s", num);
-                memcpy((resp.record[countValidRecords].number), num, strlen(num));
-                               resp.record[countValidRecords].number_present = TRUE;
-
-                pTon = g_slist_nth_data(tokens, 3);
-                if(pTon)
-                   resp.record[countValidRecords].number_type = atoi(pTon);
-                   dbg("number  type - %d", resp.record[countValidRecords].number_type);
-            }
-
-            //skip  <subaddr> <satype>
-            //parse  <time>
-            pTime = g_slist_nth_data(tokens, 6);
-            if(pTime)
-            {
-                time  =  atoi(pTime);
-                resp.record[countValidRecords].time = (enum telephony_ss_forwarding_no_reply_time)time;
-                dbg("time  - %d", time);
-            }
-
-                       resp.record[countValidRecords].mode = (enum telephony_ss_forwarding_mode)(info->flavor_type);
-            dbg("flavor_type  - %d", (enum telephony_ss_forwarding_mode)(info->flavor_type));
-
-                       countValidRecords++;
-            tcore_at_tok_free(tokens);
-                       continue;
-        error:
-                       dbg("invalid field found. coutinue");
-            tcore_at_tok_free(tokens);
-                       continue;
-               }
-
-               dbg("valid count :%d",countValidRecords);
-               resp.record_num = countValidRecords;
-               resp.err = TCORE_RETURN_SUCCESS;
-
-       }
-    else
-       {
-               dbg("no active status - return to user")
-       }
-
-    if(response->success > 0)
-    {
-        dbg("RESPONSE OK");
-        resp.err = TCORE_RETURN_SUCCESS;
-    }
-    else
-    {
-        dbg("RESPONSE NOT OK");
-
-        line = (const char*)response->final_response;
-               tokens = tcore_at_tok_new(line);
-
-               if (g_slist_length(tokens) < 1)
-        {
-                       dbg("err cause not specified or string corrupted");
-                   resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-               else
-               {
-                       err = atoi(g_slist_nth_data(tokens, 0));
-                       /* TODO: CMEE error mapping is required. */
-               resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-        tcore_at_tok_free(tokens);
-
-    }
-
-       dbg("on_response_ss_forwarding_get- rsp.err : %d, ur : %x", resp.err, ur);
-
-    if (ur)
-               tcore_user_request_send_response(ur, info->resp, sizeof(struct tresp_ss_forwarding), &resp);
-       else
-               dbg("[ error ] ur is 0");
-
-       if (resp.record)
-       {
-               g_free(resp.record);
-        resp.record = NULL;
-       }
-
-       g_free(user_data);
-
-}
-
-static void on_response_ss_waiting_get(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-    CoreObject* o = 0;
-       UserRequest* ur = 0;
-    GSList *pRespData, *tokens = NULL;
-       int classx = 0, err = 0;
-
-       struct ss_confirm_info* info = 0;
-       struct tresp_ss_waiting resp;
-       int countRecords = 0, countValidRecords = 0;
-    const char *line;
-    char *pClassx ,*pStatus;
-    const TcoreATResponse *response;
-
-    dbg("function enter")
-    response = data;
-       o  = tcore_pending_ref_core_object(p);
-       ur = tcore_pending_ref_user_request(p);
-
-       info = (struct ss_confirm_info*)user_data;
-
-    if(response->lines)
-    {
-        pRespData =  (GSList*)response->lines;
-        countRecords = g_slist_length(pRespData);
-       dbg("total records : %d",countRecords);
-
-    }
-    else
-    {
-        countRecords  = 0;
-        dbg("no active status - return to user")
-    }
-    resp.record_num = countRecords;
-
-       if (resp.record_num > 0)
-    {
-               resp.record = g_new0(struct waiting_info, resp.record_num);
-
-               for (countValidRecords = 0; pRespData != NULL ; pRespData = pRespData->next)
-               {
-
-           line  = (const char*)(pRespData->data);
-           tokens = tcore_at_tok_new(line);
-
-           // parse <status>
-            pStatus = g_slist_nth_data(tokens, 0);
-            if(!pStatus)
-            {
-                dbg("Missing stat  in responce ");
-                               goto error;
-            }
-            else
-            {
-                       if(atoi(pStatus) == 1)
-                {
-                               resp.record[countValidRecords].status = SS_STATUS_ACTIVATE;
-                       }
-                       else
-                {
-                               resp.record[countValidRecords].status = SS_STATUS_DEACTIVATE;
-                       }
-            }
-            dbg("status = %d", resp.record[countValidRecords].status);
-
-           //Parse <class>
-
-            pClassx = g_slist_nth_data(tokens, 1);
-               if (!pClassx)
-            {
-                               dbg("error - class is missing");
-                               goto error;
-                       }
-            else
-            {
-                switch(atoi(pClassx))
-                {
-                               case 1:
-                                       resp.record[countValidRecords].class = SS_CLASS_VOICE;
-                               break;
-                               case 2:
-                                       resp.record[countValidRecords].class = SS_CLASS_ALL_DATA_TELE;
-                               break;
-                               case 4:
-                                       resp.record[countValidRecords].class = SS_CLASS_FAX;
-                               break;
-                               case 7:
-                                       resp.record[countValidRecords].class = SS_CLASS_ALL_TELE;
-                               break;
-                               case 8:
-                                       resp.record[countValidRecords].class = SS_CLASS_SMS;
-                               break;
-                               case 16:
-                                       resp.record[countValidRecords].class = SS_CLASS_ALL_CS_SYNC;
-                               break;
-                               case 32:
-                                       resp.record[countValidRecords].class = SS_CLASS_ALL_CS_ASYNC;
-                               break;
-                               default:
-                                       dbg("unspoorted class : [%d]\n", classx);
-                                       goto error;
-                               break;
-                       }
-                dbg("class info %d",resp.record[countValidRecords].class);
-             }
-
-                           countValidRecords++;
-                tcore_at_tok_free(tokens);
-                           continue;
-        error:
-                           dbg("invalid field found. coutinue");
-                tcore_at_tok_free(tokens);
-                           continue;
-               }
-
-               dbg("valid count :%d",countValidRecords);
-               resp.record_num = countValidRecords;
-               resp.err = TCORE_RETURN_SUCCESS;
-       }
-       else
-       {
-               dbg("no active status - return to user")
-       }
-
-       if(response->success > 0)
-    {
-        dbg("RESPONSE OK");
-        resp.err = TCORE_RETURN_SUCCESS;
-    }
-    else
-    {
-        dbg("RESPONSE NOT OK");
-
-        line = (const char*)response->final_response;
-               tokens = tcore_at_tok_new(line);
-
-               if (g_slist_length(tokens) < 1)
-        {
-                       dbg("err cause not specified or string corrupted");
-                   resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-               else
-               {
-                       err = atoi(g_slist_nth_data(tokens, 0));
-                       /* TODO: CMEE error mapping is required. */
-               resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-        tcore_at_tok_free(tokens);
-
-    }
-
-       dbg("on_response_ss_waiting_get - rsp.err : %d, ur : %x", resp.err, ur);
-
-       if (ur)
-               tcore_user_request_send_response(ur, info->resp, sizeof(struct tresp_ss_waiting), &resp);
-       else
-               dbg("[ error ] ur is 0");
-
-    if (resp.record)
-       {
-               g_free(resp.record);
-        resp.record = NULL;
-       }
-
-       g_free(user_data);
-
-}
-
-
-static void on_response_ss_cli_get(TcorePending *p, int data_len, const void *data, void *user_data)
-{
-    CoreObject*        o = 0;
-       UserRequest* ur = 0;
-
-       struct tresp_ss_cli resp;
-       enum telephony_ss_cli_type *p_type = NULL;
-       char *line = NULL, *pStatus;
-       int err = FALSE;
-    int cli_adj,stat ;
-    GSList *tokens = NULL ;
-    const TcoreATResponse *response;
-
-    dbg("function enter")
-    response = data;
-
-       o  = tcore_pending_ref_core_object(p);
-       ur = tcore_pending_ref_user_request(p);
-
-       p_type = (enum telephony_ss_cli_type*)(user_data);
-
-    if (response->success  > 0)
-       {
-        line  = (char*) (((GSList*)response->lines)->data);
-        tokens = tcore_at_tok_new(line);
-
-        if(*p_type == SS_CLI_TYPE_CLIR)
-        {
-            //+CLIR: <n> <m>
-           dbg("CLI type is CLIR")
-
-            //parse <n>
-            pStatus = g_slist_nth_data(tokens, 0);
-
-            if(!pStatus)
-            {
-                dbg("Call line identification adjustment missing <n>");
-            }
-            else
-            {
-                cli_adj = atoi(pStatus);
-                dbg("CLIR response value of <n> - %d",cli_adj);
-
-                if(cli_adj == 0)
-                {
-                    //parse <m>
-                    pStatus = g_slist_nth_data(tokens, 1);
-                    if(!pStatus)
-                    {
-                        dbg("status is missing<m>");
-                    }
-
-                    stat  = atoi(pStatus);
-                    dbg("CLIR response value of <m> - %d",stat);
-
-                    if(stat == 1 || stat == 3)
-                    {
-                       resp.status = TRUE;
-                    }
-                    else
-                    {
-                        resp.status = FALSE;
-                    }
-               }
-               else if (cli_adj  == 1)
-               {
-                  resp.status = TRUE;
-               }
-               else
-               {
-                   resp.status = FALSE;
-               }
-               dbg("resp.status -  %d",resp.status);
-            }
-
-            tcore_at_tok_free(tokens);
-        }
-        else
-        {
-            //parse <n>
-            pStatus = g_slist_nth_data(tokens, 0);
-            if(!pStatus)
-            {
-                dbg("Stat is missing");
-            }
-            else
-            {
-                stat  = atoi(pStatus);
-
-                if(stat == 1)
-                    resp.status = TRUE;
-                else
-                    resp.status = FALSE ;
-
-                dbg("resp.status -  %d",resp.status);
-            }
-
-            tcore_at_tok_free(tokens);
-        }
-    }
-
-    if (response->success > 0)
-    {
-        dbg("RESPONSE OK");
-        resp.err = TCORE_RETURN_SUCCESS;
-    }
-
-    else
-    {
-        dbg("RESPONSE NOT OK");
-
-        line = (char*)response->final_response;
-               tokens = tcore_at_tok_new(line);
-
-               if (g_slist_length(tokens) < 1)
-        {
-                       dbg("err cause not specified or string corrupted");
-                   resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-               else
-               {
-                       err = atoi(g_slist_nth_data(tokens, 0));
-                       /* TODO: CMEE error mapping is required. */
-               resp.err = TCORE_RETURN_3GPP_ERROR;
-               }
-               tcore_at_tok_free(tokens);
-       }
-
-
-    resp.type = *p_type;
-    dbg("check - resp.type = %d ", resp.type);
-
-       if (ur)
-               tcore_user_request_send_response(ur, TRESP_SS_CLI_GET_STATUS, sizeof(struct tresp_ss_cli), &resp);
-       else
-               dbg("[ error ] ur : (0)");
-
-       g_free(user_data);
-
-}
-
-static struct tcore_ss_operations ss_ops = {
-       .barring_activate               = s_ss_barring_activate,
-       .barring_deactivate             = s_ss_barring_deactivate,
-       .barring_change_password= s_ss_barring_change_password,
-       .barring_get_status             = s_ss_barring_get_status,
-       .forwarding_activate    = s_ss_forwarding_activate,
-       .forwarding_deactivate  = s_ss_forwarding_deactivate,
-       .forwarding_register    = s_ss_forwarding_register,
-       .forwarding_deregister  = s_ss_forwarding_deregister,
-       .forwarding_get_status  = s_ss_forwarding_get_status,
-       .waiting_activate               = s_ss_waiting_activate,
-       .waiting_deactivate             = s_ss_waiting_deactivate,
-       .waiting_get_status             = s_ss_waiting_get_status,
-       .cli_activate                   = s_ss_cli_activate,
-       .cli_deactivate                 = s_ss_cli_deactivate,
-       .cli_get_status                 = s_ss_cli_get_status,
-       .send_ussd                              = s_ss_send_ussd,
-       .set_aoc                                = s_ss_set_aoc,
-       .get_aoc                                = s_ss_get_aoc,
-};
-
-
-static TReturn _ss_barring_set(CoreObject *o, UserRequest *ur, enum telephony_ss_opcode op)
-{
-       struct treq_ss_barring *barring = 0;
-       struct ss_confirm_info *user_data = 0;
-
-    char *cmd_str = NULL;
-       TcoreHal* hal;
-       TcorePending *pending = NULL;
-       TcoreATRequest *req;
-       char passwd[MAX_SS_BARRING_PASSWORD_LEN+1];
-       int opco;
-       int classx;
-       char* facility = NULL;
-
-    gboolean ret = FALSE;
-
-    dbg("function enter");
-    barring = (struct treq_ss_barring*)tcore_user_request_ref_data(ur, 0);
-
-    switch(op)
-    {
-               case TIZEN_SS_OPCO_ACTIVATE:
-                       opco = 1;
-               break;
-               case TIZEN_SS_OPCO_DEACTIVATE:
-                       opco = 0;
-               break;
-               default:
-                       dbg("unsupported opco : %d", op);
-               return TCORE_RETURN_FAILURE;
-       }
-    dbg("opco - %d",opco);
-
-       switch(barring->mode){
-               case SS_BARR_MODE_BAOC:
-                       facility = "AO";
-               break;
-               case SS_BARR_MODE_BOIC:
-                       facility = "OI";
-               break;
-               case SS_BARR_MODE_BOIC_NOT_HC:
-                       facility = "OX";
-               break;
-               case SS_BARR_MODE_BAIC:
-                       facility = "AI";
-               break;
-               case SS_BARR_MODE_BIC_ROAM:
-                       facility = "IR";
-               break;
-               case SS_BARR_MODE_AB:
-                       facility = "AB";
-               break;
-               case SS_BARR_MODE_AOB:
-                       facility = "AG";
-               break;
-               case SS_BARR_MODE_AIB:
-                       facility = "AC";
-               break;
-               case SS_BARR_MODE_BIC_NOT_SIM:
-               //      facility = "NS";
-               default:
-                       dbg("unspported mode %d", barring->mode);
-               return TCORE_RETURN_FAILURE;
-       }
-
-    dbg("facility - %s",facility);
-
-       switch(barring->class)
-       {
-               case SS_CLASS_ALL_TELE:
-                       classx =7;
-               break;
-               case SS_CLASS_VOICE:
-                       classx =1;
-               break;
-               case SS_CLASS_ALL_DATA_TELE:
-                       classx =2;
-               break;
-               case SS_CLASS_FAX:
-                       classx =4;
-               break;
-               case SS_CLASS_SMS:
-                       classx = 8;
-               break;
-               case SS_CLASS_ALL_CS_SYNC:
-                       classx = 16;
-               break;
-
-               default:
-                       classx =7;
-                       dbg("unsupported class %d. set to default : 7", barring->class);
-               break;
-       }
-
-    dbg("classx - %d",classx);
-
-       // null-ended pwd handling added - unexpected  0x11 value observed in req string
-       memcpy(passwd, barring->password, MAX_SS_BARRING_PASSWORD_LEN);
-       passwd[MAX_SS_BARRING_PASSWORD_LEN]='\0';
-    dbg("passwd - %s",passwd);
-
-       hal = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-
-    cmd_str = g_strdup_printf("AT+CLCK=\"%s\",%d,\"%s\",%d%s", facility, opco, passwd, classx,"\r");
-    dbg("request command : %s", cmd_str);
-
-
-       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-
-       user_data = g_new0(struct ss_confirm_info, 1);
-
-       if (op == TIZEN_SS_OPCO_ACTIVATE)
-    {
-               user_data->resp = TRESP_SS_BARRING_ACTIVATE;
-
-       }
-    else if (op == TIZEN_SS_OPCO_DEACTIVATE)
-    {
-               user_data->resp = TRESP_SS_BARRING_DEACTIVATE;
-
-       }
-    else
-    {
-               dbg("[ error ] wrong ss opco (0x%x)", op);
-               return TCORE_RETURN_FAILURE;
-       }
-
-       user_data->flavor_type = (int)(barring->mode);
-       user_data->class = barring->class;
-
-       ret = _ss_request_message(pending, o, ur, on_response_ss_barring_set, user_data);
-
-       g_free(cmd_str);
-
-       if (!ret)
-       {
-           dbg("AT request sent failed ")
-               return TCORE_RETURN_FAILURE;
-       }
-
-       return TCORE_RETURN_SUCCESS;
-
-}
-
-static TReturn _ss_barring_get(CoreObject *o,
-                                                               UserRequest *ur,
-                                                               enum telephony_ss_class class,
-                                                               enum telephony_ss_barring_mode mode,
-                                                               enum tcore_response_command resp)
-
-{
-
-    TcorePlugin *p = 0;
-       struct ss_confirm_info *user_data = 0;
-       gboolean ret = FALSE;
-       char* cmd_str = NULL;
-       int opco, classx;
-       char* facility = NULL;
-
-    TcoreHal* hal;
-       TcorePending *pending = NULL;
-       TcoreATRequest *req;
-
-    dbg("function enter");
-       p = tcore_object_ref_plugin(o);
-
-    //query status - opco is fixed to 2
-       opco = 2;
-
-       //barring mode
-       switch(mode)
-    {
-               case SS_BARR_MODE_BAOC:
-                       facility = "AO";
-               break;
-               case SS_BARR_MODE_BOIC:
-                       facility = "OI";
-               break;
-               case SS_BARR_MODE_BOIC_NOT_HC:
-                       facility = "OX";
-               break;
-               case SS_BARR_MODE_BAIC:
-                       facility = "AI";
-               break;
-               case SS_BARR_MODE_BIC_ROAM:
-                       facility = "IR";
-               break;
-               case SS_BARR_MODE_AB:
-                       facility = "AB";
-               break;
-               case SS_BARR_MODE_AOB:
-                       facility = "AG";
-               break;
-               case SS_BARR_MODE_AIB:
-                       facility = "AC";
-               break;
-               case SS_BARR_MODE_BIC_NOT_SIM:
-               default:
-                       dbg("unspported mode %d", mode);
-               return TCORE_RETURN_FAILURE;
-       }
-
-    dbg("facility - %s", facility);
-
-       switch(class)
-       {
-               case SS_CLASS_ALL_TELE:
-                       classx =7;
-               break;
-               case SS_CLASS_VOICE:
-                       classx =1;
-               break;
-               case SS_CLASS_ALL_DATA_TELE:
-                       classx =2;
-               break;
-               case SS_CLASS_FAX:
-                       classx =4;
-               break;
-               case SS_CLASS_SMS:
-                       classx = 8;
-               break;
-               case SS_CLASS_ALL_CS_SYNC:
-                       classx = 16;
-               break;
-
-               default:
-                       classx =7;
-                       dbg("unsupported class %d. set to default : 7", class);
-               break;
-       }
-    dbg("class - %d", classx);
-
-       if(classx ==7)
-           cmd_str = g_strdup_printf("AT+CLCK=\"%s\",%d%s", facility, opco,"\r");
-       else
-               cmd_str = g_strdup_printf("AT+CLCK=\"%s\",%d,,%d%s", facility, opco,classx,"\r");
-
-       dbg("request command : %s", cmd_str);
-
-
-    hal = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-
-    req = tcore_at_request_new(cmd_str, "+CLCK", TCORE_AT_MULTILINE);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-
-
-       user_data = g_new0(struct ss_confirm_info, 1);
-       user_data->resp = resp;
-
-       user_data->flavor_type = (int)(mode);
-       user_data->class = class;
-
-       ret = _ss_request_message(pending, o, ur, on_response_ss_barring_get, user_data);
-
-       g_free(cmd_str);
-
-       if (!ret)
-       {
-           dbg("AT request sent failed ")
-               return TCORE_RETURN_FAILURE;
-       }
-
-       return TCORE_RETURN_SUCCESS;
-
-}
-
-static TReturn s_ss_barring_activate(CoreObject *o, UserRequest *ur)
-{
-       return _ss_barring_set(o, ur, TIZEN_SS_OPCO_ACTIVATE);
-}
-
-static TReturn s_ss_barring_deactivate(CoreObject *o, UserRequest *ur)
-{
-       return _ss_barring_set(o, ur, TIZEN_SS_OPCO_DEACTIVATE);
-}
-
-static TReturn s_ss_barring_change_password(CoreObject *o, UserRequest *ur)
-{
-    TcoreHal* hal;
-       TcorePending *pending = NULL;
-       TcoreATRequest *req;
-       struct treq_ss_barring_change_password *barring = 0;
-       struct ss_confirm_info *user_data = 0;
-    char* cmd_str = NULL;
-       gboolean ret = FALSE;
-
-    dbg("function enter");
-       barring = (struct treq_ss_barring_change_password*)tcore_user_request_ref_data(ur, 0);
-
-       cmd_str = g_strdup_printf("AT+CPWD=\"%s\",\"%s\",\"%s\"%s", "AB", barring->password_old, barring->password_new,"\r");
-       dbg("request command : %s", cmd_str);
-
-
-    hal = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-
-       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-
-       user_data = g_new0(struct ss_confirm_info, 1);
-       user_data->resp = TRESP_SS_BARRING_CHANGE_PASSWORD;
-
-       ret = _ss_request_message(pending, o, ur, on_response_ss_barring_change_pwd, user_data);
-
-       g_free(cmd_str);
-       if (!ret)
-       {
-           dbg("AT request sent failed ")
-               return TCORE_RETURN_FAILURE;
-       }
-
-       return TCORE_RETURN_SUCCESS;
-
-}
-
-static TReturn s_ss_barring_get_status(CoreObject *o, UserRequest *ur)
-{
-       struct treq_ss_barring *barring = 0;
-       barring = (struct treq_ss_barring*)tcore_user_request_ref_data(ur, 0);
-
-       return _ss_barring_get(o, ur, barring->class, barring->mode, TRESP_SS_BARRING_GET_STATUS);
-}
-
-static TReturn _ss_forwarding_set(CoreObject *o, UserRequest *ur, enum telephony_ss_opcode op)
-{
-       struct treq_ss_forwarding *forwarding = 0;
-       struct ss_confirm_info *user_data = 0;
-
-       gboolean ret = FALSE;
-       int len = 0;
-
-       char* cmd_str = NULL;
-       char* tmp_str = NULL;
-       int reason=0, mode = 0, num_type = 0, classx = 0,time = 0;
-       gboolean valid_num = FALSE;
-    TcoreHal* hal;
-       TcorePending *pending = NULL;
-       TcoreATRequest *req;
-
-       dbg("_ss_forwarding_set with opco %d ", op);
-
-       forwarding = (struct treq_ss_forwarding*) tcore_user_request_ref_data(ur, 0);
-
-       switch(forwarding->mode)
-       {
-               case SS_CF_MODE_CFU:
-                       reason = 0;
-                       break;
-               case SS_CF_MODE_CFB:
-                       reason = 1;
-                       break;
-               case SS_CF_MODE_CFNRy:
-                       reason = 2;
-                       break;
-               case SS_CF_MODE_CFNRc:
-                       reason = 3;
-                       break;
-               case SS_CF_MODE_CF_ALL:
-                       reason = 4;
-               break;
-               case SS_CF_MODE_CFC:
-                       reason = 5;
-               break;
-
-               default:
-                       dbg("unsupported reason : %d");
-            return TCORE_RETURN_FAILURE;
-                       break;
-       }
-
-    dbg("reason = %d", reason);
-
-       switch(op){
-               case TIZEN_SS_OPCO_DEACTIVATE:
-                       mode = 0;
-               break;
-               case TIZEN_SS_OPCO_ACTIVATE:
-                       mode = 1;
-               break;
-               case TIZEN_SS_OPCO_REG:
-                       mode = 3;
-               break;
-               case TIZEN_SS_OPCO_DEREG:
-                       mode = 4;
-               break;
-
-               default:
-                       dbg("unsupported opco : %d", op);
-                       return TCORE_RETURN_FAILURE;
-       }
-
-    dbg("mode = %d", mode);
-
-// class
-       switch(forwarding->class)
-       {
-               case SS_CLASS_ALL_TELE:
-                       classx =7;
-               break;
-               case SS_CLASS_VOICE:
-                       classx =1;
-               break;
-               case SS_CLASS_ALL_DATA_TELE:
-                       classx =2;
-               break;
-               case SS_CLASS_FAX:
-                       classx =4;
-               break;
-               case SS_CLASS_SMS:
-                       classx = 8;
-               break;
-               case SS_CLASS_ALL_CS_SYNC:
-                       classx = 16;
-               break;
-
-               default:
-                       classx =7;
-                       dbg("unsupported class %d. set to default : 7", forwarding->class);
-               break;
-       }
-    dbg("classx = %d", classx);
-
-//number
-       len = strlen(forwarding->number);
-       if (len > 0){
-               valid_num = TRUE;
-               if (forwarding->number[0] == '+')
-                       num_type = ((TIZEN_NUM_TYPE_INTERNATIONAL << 4)|TIZEN_NUM_PLAN_ISDN);
-               else
-                       num_type = 0;
-       }
-
-    dbg("number = %s", forwarding->number);
-
-       user_data = g_new0(struct ss_confirm_info, 1);
-
-       switch (op) {
-               case TIZEN_SS_OPCO_REG:
-                       user_data->resp = TRESP_SS_FORWARDING_REGISTER;
-                       break;
-               case TIZEN_SS_OPCO_DEREG:
-                       user_data->resp = TRESP_SS_FORWARDING_DEREGISTER;
-                       break;
-               case TIZEN_SS_OPCO_ACTIVATE:
-                       user_data->resp = TRESP_SS_FORWARDING_ACTIVATE;
-                       break;
-               case TIZEN_SS_OPCO_DEACTIVATE:
-                       user_data->resp = TRESP_SS_FORWARDING_DEACTIVATE;
-                       break;
-               default:
-                       dbg("[ error ] unknown op (0x%x)", op);
-                       break;
-       }
-
-   if(forwarding->number[0] == '+')
-       num_type = 145;
-   else
-      num_type = 129;
-
-       if(op == TIZEN_SS_OPCO_REG)
-               tmp_str = g_strdup_printf("AT+CCFC=%d,%d,\"%s\",%d,%d", reason, mode, forwarding->number, num_type, classx);
-       else// other opcode does not need num field
-               tmp_str = g_strdup_printf("AT+CCFC=%d,%d,,,%d", reason, mode, classx);
-
-       if(forwarding->mode == SS_CF_MODE_CFNRy)
-    {
-               //add time info to 'no reply' case
-               time = (int)(forwarding->time);
-               cmd_str = g_strdup_printf("%s,,,%d%s", tmp_str,time,"\r");
-       }
-       else
-    {
-               cmd_str = g_strdup_printf("%s%s", tmp_str,"\r");
-       }
-
-       dbg("request command : %s", cmd_str);
-
-
-    hal = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-
-       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-
-
-       user_data->flavor_type = forwarding->mode;
-       user_data->class = forwarding->class;
-
-       ret = _ss_request_message(pending, o, ur, on_response_ss_forwarding_set, user_data);
-
-       g_free(tmp_str);
-       g_free(cmd_str);
-
-       if (!ret)
-       {
-           dbg("AT request sent failed ")
-               return TCORE_RETURN_FAILURE;
-       }
-
-       return TCORE_RETURN_SUCCESS;
-
-}
-
-
-static TReturn _ss_forwarding_get(CoreObject *o,
-                                                                       UserRequest *ur,
-                                                                       enum telephony_ss_class class,
-                                                                       enum telephony_ss_forwarding_mode type,
-                                                                       enum tcore_response_command resp)
-{
-
-       struct ss_confirm_info *user_data = 0;
-       gboolean ret = FALSE;
-
-       char* cmd_str = NULL;
-       int reason = 0, mode = 0, classx = 0;
-
-    TcoreHal* hal;
-       TcorePending *pending = NULL;
-       TcoreATRequest *req;
-
-    dbg("function enter");
-
-       switch(type)
-       {
-               case SS_CF_MODE_CFU:
-                       reason = 0;
-               break;
-               case SS_CF_MODE_CFB:
-                       reason = 1;
-               break;
-               case SS_CF_MODE_CFNRy:
-                       reason = 2;
-               break;
-               case SS_CF_MODE_CFNRc:
-                       reason = 3;
-               break;
-               case SS_CF_MODE_CF_ALL:
-                       reason = 4;
-               break;
-               case SS_CF_MODE_CFC:
-                       reason = 5;
-               break;
-
-               default:
-                       dbg("unsupported reason : %d");
-               break;
-       }
-    dbg("reason  = %d", reason);
-
-       switch(class)
-       {
-               case SS_CLASS_ALL_TELE:
-                       classx =7;
-               break;
-               case SS_CLASS_VOICE:
-                       classx =1;
-               break;
-               case SS_CLASS_ALL_DATA_TELE:
-                       classx =2;
-               break;
-               case SS_CLASS_FAX:
-                       classx =4;
-               break;
-               case SS_CLASS_SMS:
-                       classx = 8;
-               break;
-               case SS_CLASS_ALL_CS_SYNC:
-                       classx = 16;
-               break;
-               default:
-                       classx =7;
-                       dbg("unsupported class %d. set to default : 7", class);
-               break;
-       }
-
-    dbg("classx  = %d", classx);
-
-       //query status - mode set to 2
-       mode = 2;
-
-       user_data = g_new0(struct ss_confirm_info, 1);
-       user_data->resp = resp;
-
-       user_data->class = class;
-       user_data->flavor_type = type;
-
-       if(classx ==7)
-               cmd_str = g_strdup_printf("AT+CCFC=%d,%d%s", reason, mode,"\r");
-       else
-               cmd_str = g_strdup_printf("AT+CCFC=%d,%d,,,%d%s", reason, mode,classx,"\r");
-
-       dbg("request command : %s", cmd_str);
-
-    hal = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-
-       req = tcore_at_request_new(cmd_str, "+CCFC", TCORE_AT_MULTILINE);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-
-       ret = _ss_request_message(pending, o, ur, on_response_ss_forwarding_get, user_data);
-       g_free(cmd_str);
-
-       if (!ret)
-       {
-           dbg("AT request sent failed ")
-               return TCORE_RETURN_FAILURE;
-       }
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-
-static TReturn s_ss_forwarding_activate(CoreObject *o, UserRequest *ur)
-{
-       return _ss_forwarding_set(o, ur, TIZEN_SS_OPCO_ACTIVATE);
-}
-
-static TReturn s_ss_forwarding_deactivate(CoreObject *o, UserRequest *ur)
-{
-       return _ss_forwarding_set(o, ur, TIZEN_SS_OPCO_DEACTIVATE);
-}
-
-static TReturn s_ss_forwarding_register(CoreObject *o, UserRequest *ur)
-{
-       return _ss_forwarding_set(o, ur, TIZEN_SS_OPCO_REG);
-}
-
-static TReturn s_ss_forwarding_deregister(CoreObject *o, UserRequest *ur)
-{
-       return _ss_forwarding_set(o, ur, TIZEN_SS_OPCO_DEREG);
-}
-
-static TReturn s_ss_forwarding_get_status(CoreObject *o, UserRequest *ur)
-{
-       struct treq_ss_forwarding *forwarding = 0;
-       forwarding = (struct treq_ss_forwarding*)tcore_user_request_ref_data(ur, 0);
-
-       return _ss_forwarding_get(o, ur, forwarding->class, forwarding->mode, TRESP_SS_FORWARDING_GET_STATUS);
-}
-
-
-static TReturn _ss_waiting_set(CoreObject *o, UserRequest *ur, enum telephony_ss_opcode opco)
-{
-       struct treq_ss_waiting *waiting = 0;
-       struct ss_confirm_info *user_data = 0;
-
-       gboolean ret = FALSE;
-       int mode = 0, classx = 0;
-       char* cmd_str;
-    TcoreHal* hal;
-       TcorePending *pending = NULL;
-       TcoreATRequest *req;
-
-    dbg("function enter ");
-       waiting = (struct treq_ss_waiting*) tcore_user_request_ref_data(ur, 0);
-
-       user_data = g_new0(struct ss_confirm_info, 1);
-
-       if(opco == TIZEN_SS_OPCO_ACTIVATE)
-    {
-               user_data->resp = TRESP_SS_WAITING_ACTIVATE;
-               mode = 1;//enable
-       }
-       else if (opco == TIZEN_SS_OPCO_DEACTIVATE)
-    {
-               user_data->resp = TRESP_SS_WAITING_DEACTIVATE;
-               mode =0; //disable
-       }
-       else
-               dbg("[ error ] unknown ss mode (0x%x)", opco);
-
-    switch(waiting->class)
-       {
-               case SS_CLASS_ALL_TELE:
-                       classx =7;
-               break;
-               case SS_CLASS_VOICE:
-                       classx =1;
-               break;
-               case SS_CLASS_ALL_DATA_TELE:
-                       classx =2;
-               break;
-               case SS_CLASS_FAX:
-                       classx =4;
-               break;
-               case SS_CLASS_SMS:
-                       classx = 8;
-               break;
-
-               default:
-                       classx =1;
-                       dbg("unsupported class %d. set to default : 1", waiting->class);
-               break;
-       }
-     dbg("mode = %d classxx- %d", mode , classx);
-
-       user_data->class = waiting->class;
-       user_data->flavor_type = (int)opco;
-
-       cmd_str = g_strdup_printf("AT+CCWA=1,%d,%d%s", mode, classx,"\r"); //always enable +CCWA: unsolicited cmd
-       dbg("request command : %s",cmd_str);
-
-    hal = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-
-       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-
-       ret = _ss_request_message(pending, o, ur, on_response_ss_waiting_set, user_data);
-
-       g_free(cmd_str);
-
-       if (!ret)
-       {
-           dbg("AT request sent failed ")
-               return TCORE_RETURN_FAILURE;
-       }
-
-       return TCORE_RETURN_SUCCESS;
-
-}
-
-static TReturn _ss_waiting_get(CoreObject *o,
-                                                               UserRequest *ur,
-                                                               enum telephony_ss_class class,
-                                                               enum tcore_response_command resp)
-
-{
-
-       struct ss_confirm_info *user_data = 0;
-       gboolean ret = FALSE;
-       int classx; //mode,
-       char* cmd_str;
-
-    TcoreHal* hal;
-       TcorePending *pending = NULL;
-       TcoreATRequest *req;
-
-    dbg("function  enter")
-       switch(class)
-       {
-               case SS_CLASS_ALL_TELE:
-                       classx = 7;
-               break;
-               case SS_CLASS_VOICE:
-                       classx = 1;
-               break;
-               case SS_CLASS_ALL_DATA_TELE:
-                       classx = 2;
-               break;
-               case SS_CLASS_FAX:
-                       classx = 4;
-               break;
-               case SS_CLASS_SMS:
-                       classx = 8;
-               break;
-
-               default:
-                       classx =7;
-                       dbg("unsupported class %d. set to default : 7", class);
-               break;
-       }
-    dbg("classx - %d", classx);
-
-       dbg("allocating user data");
-       user_data = g_new0(struct ss_confirm_info, 1);
-       user_data->resp = resp;
-       user_data->class = class;
-
-       cmd_str = g_strdup_printf("AT+CCWA=1,2,%d%s", classx,"\r"); //always enable +CCWA: unsolicited cmd , mode is fixed to 2(query status)
-       dbg("request cmd : %s", cmd_str);
-
-    hal = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-
-       req = tcore_at_request_new(cmd_str, "+CCWA", TCORE_AT_MULTILINE);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-
-       ret = _ss_request_message(pending, o, ur, on_response_ss_waiting_get, user_data);
-
-       g_free(cmd_str);
-
-       if (!ret)
-       {
-           dbg("AT request sent failed ")
-               return TCORE_RETURN_FAILURE;
-       }
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_ss_waiting_activate(CoreObject *o, UserRequest *ur)
-{
-       return _ss_waiting_set(o, ur, TIZEN_SS_OPCO_ACTIVATE);
-}
-
-static TReturn s_ss_waiting_deactivate(CoreObject *o, UserRequest *ur)
-{
-       return _ss_waiting_set(o, ur, TIZEN_SS_OPCO_DEACTIVATE);
-}
-
-static TReturn s_ss_waiting_get_status(CoreObject *o, UserRequest *ur)
-{
-       struct treq_ss_waiting *waiting = 0;
-       waiting = (struct treq_ss_waiting*)tcore_user_request_ref_data(ur, 0);
-
-       return _ss_waiting_get(o, ur, waiting->class, TRESP_SS_WAITING_GET_STATUS);
-}
-
-static TReturn s_ss_cli_activate(CoreObject *o, UserRequest *ur)
-{
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_ss_cli_deactivate(CoreObject *o, UserRequest *ur)
-{
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_ss_cli_get_status(CoreObject *o, UserRequest *ur)
-{
-
-       struct treq_ss_cli *cli = 0;
-       gboolean ret = FALSE;
-       char *cmd_prefix = NULL, *rsp_prefix = NULL, *cmd_str = NULL;
-       enum  telephony_ss_cli_type *user_data = 0;
-
-    TcoreHal* hal;
-       TcorePending *pending = NULL;
-       TcoreATRequest *req;
-
-       cli = (struct treq_ss_cli*)tcore_user_request_ref_data(ur, 0);
-
-       switch(cli->type)
-     {
-               case SS_CLI_TYPE_CLIP:
-                       cmd_prefix = "+CLIP";
-                       rsp_prefix = "+CLIP";
-               break;
-
-               case SS_CLI_TYPE_CLIR:
-                       cmd_prefix = "+CLIR";
-                       rsp_prefix = "+CLIR";
-               break;
-
-               case SS_CLI_TYPE_COLP:
-                       cmd_prefix = "+COLP";
-                       rsp_prefix = "+COLP";
-               break;
-
-        case SS_CLI_TYPE_COLR:
-            cmd_prefix = "+COLR";
-                       rsp_prefix = "+COLR";
-         break;
-
-            case SS_CLI_TYPE_CNAP:
-             cmd_prefix = "+CNAP";
-                        rsp_prefix = "+CNAP";
-          break;
-
-               case SS_CLI_TYPE_CDIP:
-               default:
-                       dbg("unsupported cli_type : %d", cli->type);
-                       return TCORE_RETURN_FAILURE;
-               break;
-       }
-
-       dbg("cmd_prefix : %s",cmd_prefix);
-
-       cmd_str = g_strdup_printf("AT%s?%s", cmd_prefix, "\r");
-       dbg("request cmd : %s", cmd_str);
-
-       user_data = g_new0(enum telephony_ss_cli_type, 1);
-    *user_data = cli->type;
-
-    hal = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-
-       req = tcore_at_request_new(cmd_str, rsp_prefix, TCORE_AT_SINGLELINE);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-
-       ret = _ss_request_message(pending, o, ur, on_response_ss_cli_get, user_data);
-
-       g_free(cmd_str);
-
-    if (!ret)
-       {
-           dbg("AT request sent failed ")
-               return TCORE_RETURN_FAILURE;
-       }
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_ss_send_ussd(CoreObject *o, UserRequest *ur)
-{
-
-       UssdSession *ussd_s = 0;
-
-       struct treq_ss_ussd *ussd = 0;
-       struct ss_confirm_info *user_data = 0;
-       gboolean ret = FALSE;
-       char* cmd_str;
-    TcoreHal* hal;
-       TcorePending *pending = NULL;
-       TcoreATRequest *req;
-
-    dbg("function enter");
-       ussd = (struct treq_ss_ussd*)tcore_user_request_ref_data(ur, 0);
-
-       cmd_str = g_strdup_printf("AT+CUSD=1,\"%s\",%d%s", ussd->str, 0x0f,"\r"); //always enable +CUSD: unsolicited cmd. set to dcs to 0x0f. only supports HEX type
-       dbg("request command : %s",cmd_str);
-
-
-       user_data = g_new0(struct ss_confirm_info, 1);
-       user_data->resp = TRESP_SS_SEND_USSD;
-
-       ussd_s = tcore_ss_ussd_get_session(o);
-       if(!ussd_s)
-    {
-        dbg("USSD session does not  exist");
-               tcore_ss_ussd_create_session(o, (enum tcore_ss_ussd_type)ussd->type, (void*)tcore_user_request_ref(ur), 0);
-       }
-    else
-       {
-               if(ussd->type == SS_USSD_TYPE_USER_INITIATED)
-        {
-                   dbg("[ error ] ussd session is already exist");
-                       g_free(user_data);
-                       return TCORE_RETURN_FAILURE;
-               }
-
-               tcore_ss_ussd_set_session_type(ussd_s, (enum tcore_ss_ussd_type)ussd->type);
-       }
-
-    hal = tcore_object_get_hal(o);
-       pending = tcore_pending_new(o, 0);
-
-       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-
-       ret = _ss_request_message(pending, o, ur, on_confirmation_ss_ussd, user_data);
-
-       g_free(cmd_str);
-
-       if (!ret)
-       {
-           dbg("AT request sent failed ")
-               return TCORE_RETURN_FAILURE;
-       }
-
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_ss_set_aoc(CoreObject *o, UserRequest *ur)
-{
-       dbg("[ error ] unsupported function");
-       return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_ss_get_aoc(CoreObject *o, UserRequest *ur)
-{
-       dbg("[ error ] unsupported function");
-       return TCORE_RETURN_SUCCESS;
-}
-
-
-static struct tcore_call_control_operations call_ops = {
-       .answer_hold_and_accept = s_ss_manage_call_2_send,
-       .answer_replace                 = s_ss_manage_call_1_send,
-       .answer_reject                  = s_ss_manage_call_0_send,
-       .end_specific                   = s_ss_manage_call_1x_send,
-       .end_all_active                 = s_ss_manage_call_1_send,
-       .end_all_held                   = s_ss_manage_call_0_send,
-       .active                                 = s_ss_manage_call_2_send,
-       .hold                                   = s_ss_manage_call_2_send,
-       .swap                                   = s_ss_manage_call_2_send,
-       .join                                   = s_ss_manage_call_3_send,
-       .split                                  = s_ss_manage_call_2x_send,
-       .transfer                               = s_ss_manage_call_4_send,
-       .deflect                                = s_ss_manage_call_4dn_send,
-};
-
-static TReturn s_ss_manage_call_send(CoreObject* o, UserRequest* ur, const char* cmd, ConfirmCallback cb, void* user_data)
-{
-       TcorePending *pending = NULL;
-       TcoreATRequest *req;
-       gboolean ret = FALSE;
-
-       pending = tcore_pending_new(o, 0);
-
-       req = tcore_at_request_new(cmd, NULL, TCORE_AT_NO_RESULT);
-
-       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));
-
-       tcore_pending_set_request_data(pending, 0, req);
-
-    ret = _ss_request_message(pending, o, ur, (TcorePendingResponseCallback)cb, user_data);
-
-    if (!ret)
-       {
-           dbg("AT request sent failed ")
-               return TCORE_RETURN_FAILURE;
-       }
-
-    return TCORE_RETURN_SUCCESS;
-}
-
-static TReturn s_ss_manage_call_0_send(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
-{
-       char* cmd_str = NULL;
-       gboolean ret = FALSE;
-
-    dbg("function enter");
-
-       cmd_str = g_strdup_printf("%s%s", "AT+CHLD=0", "\r");
-       dbg("cmd : %s, prefix(if any) : %s, cmd_len : %d",cmd_str, "N/A", strlen(cmd_str));
-
-    ret =  s_ss_manage_call_send(o, ur, cmd_str, cb, user_data);
-       g_free(cmd_str);
-       return ret;
-}
-
-static TReturn s_ss_manage_call_1_send(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
-{
-       char* cmd_str = NULL;
-       gboolean ret = FALSE;
-
-    dbg("function enter");
-       cmd_str = g_strdup_printf("%s%s", "AT+CHLD=1", "\r");
-       dbg("cmd : %s, prefix(if any) : %s, cmd_len : %d",cmd_str, "N/A", strlen(cmd_str));
-
-    ret =  s_ss_manage_call_send(o, ur, cmd_str, cb, user_data);
-       g_free(cmd_str);
-       return ret;
-}
-
-static TReturn s_ss_manage_call_1x_send(CoreObject* o, UserRequest* ur, const int id, ConfirmCallback cb, void* user_data)
-{
-
-    char* cmd_str = NULL;
-       gboolean ret = FALSE;
-
-    dbg("function enter");
-       cmd_str = g_strdup_printf("%s%d%s", "AT+CHLD=1", id,"\r");
-       dbg("cmd : %s, prefix(if any) : %s, cmd_len : %d",cmd_str, "N/A", strlen(cmd_str));
-
-    ret =  s_ss_manage_call_send(o, ur, cmd_str, cb, user_data);
-       g_free(cmd_str);
-       return ret;
-}
-
-static TReturn s_ss_manage_call_2_send(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
-{
-    char* cmd_str = NULL;
-       gboolean ret = FALSE;
-
-    dbg("function enter");
-
-       cmd_str = g_strdup_printf("%s%s", "AT+CHLD=2", "\r");
-       dbg("cmd : %s, prefix(if any) : %s, cmd_len : %d",cmd_str, "N/A", strlen(cmd_str));
-
-    ret =  s_ss_manage_call_send(o, ur, cmd_str, cb,  user_data);
-       g_free(cmd_str);
-       return ret;
-
-}
-
-static TReturn s_ss_manage_call_2x_send(CoreObject* o, UserRequest* ur, const int id, ConfirmCallback cb, void* user_data)
-{
-    char* cmd_str = NULL;
-       gboolean ret = FALSE;
-
-    dbg("function enter");
-
-       cmd_str = g_strdup_printf("%s%d%s", "AT+CHLD=2", id,"\r");
-       dbg("cmd : %s, prefix(if any) : %s, cmd_len : %d",cmd_str, "N/A", strlen(cmd_str));
-
-    ret =  s_ss_manage_call_send(o, ur, cmd_str, cb,  user_data);
-       g_free(cmd_str);
-       return ret;
-}
-
-static TReturn s_ss_manage_call_3_send(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
-{
-       char* cmd_str = NULL;
-    gboolean ret = FALSE;
-
-    dbg("function enter");
-
-       cmd_str = g_strdup_printf("%s%s", "AT+CHLD=3","\r");
-
-    ret =  s_ss_manage_call_send(o, ur, cmd_str, cb, user_data);
-       g_free(cmd_str);
-       return ret;
-}
-
-
-static TReturn s_ss_manage_call_4_send(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
-{
-    char* cmd_str = NULL;
-    gboolean ret = FALSE;
-
-    dbg("function enter");
-       cmd_str = g_strdup_printf("%s%s", "AT+CHLD=4", "\r");
-
-    ret =  s_ss_manage_call_send(o, ur, cmd_str, cb, user_data);
-       g_free(cmd_str);
-       return ret;
-}
-
-static TReturn s_ss_manage_call_4dn_send(CoreObject* o, UserRequest* ur, const char* number, ConfirmCallback cb, void* user_data)
-{
-
-    char* cmd_str = NULL;
-    gboolean ret = FALSE;
-
-    dbg("function enter");
-       cmd_str = g_strdup_printf("%s%s%s", "AT+CHLD=4", number,"\r");
-
-    ret =  s_ss_manage_call_send(o, ur, cmd_str, cb, user_data);
-       g_free(cmd_str);
-
-       return ret;
-}
-
-gboolean s_ss_init(TcorePlugin *p, TcoreHal *h)
-{
-       CoreObject *so = 0, *co = 0;
-       struct property_call_info *data = 0;
-
-       so = tcore_ss_new(p, "ss", &ss_ops, h);
-       if (!so) {
-               dbg("[ error ] ss_new()");
-               return FALSE;
-       }
-
-       co = tcore_plugin_ref_core_object(p, "call");
-       if (!co) {
-               dbg("[ error ] plugin_ref_core_object");
-               return FALSE;
-       }
-
-       tcore_call_control_set_operations(co, &call_ops);
-
-       //tcore_object_add_callback(so, EVENT_NOTI_SS_INFO, on_notification_ss_info, 0);
-       //tcore_object_add_callback(so, EVENT_NOTI_SS_USSD, on_notification_ss_ussd, 0);
-
-    tcore_object_add_callback(so, "+CSSU", on_notification_ss_info, 0);
-    tcore_object_add_callback(so, "+CSSI", on_notification_ss_info, 0);
-       tcore_object_add_callback(so, "+CUSD", on_notification_ss_ussd, 0);
-
-       data = calloc(sizeof(struct property_call_info *), 1);
-       tcore_plugin_link_property(p, "SS", data);
-
-       return TRUE;
-}
-
-void s_ss_exit(TcorePlugin *p)
-{
-       CoreObject *o;
-       struct property_network_info *data;
-
-       o = tcore_plugin_ref_core_object(p, "ss");
-
-       data = tcore_plugin_ref_property(p, "SS");
-       if (data)
-               free(data);
-
-       tcore_ss_free(o);
-}
+/*\r
+ * tel-plugin-imc\r
+ *\r
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: sharanayya mathapati <sharan.m@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include <glib.h>\r
+\r
+#include <tcore.h>\r
+#include <hal.h>\r
+#include <core_object.h>\r
+#include <plugin.h>\r
+#include <queue.h>\r
+#include <co_call.h>\r
+#include <co_ss.h>\r
+#include <user_request.h>\r
+#include <util.h>\r
+#include <server.h>\r
+#include <at.h>\r
+\r
+#include "s_common.h"\r
+#include "s_ss.h"\r
+\r
+#define NUM_TYPE_INTERNATIONAL         0x01\r
+#define NUM_PLAN_ISDN                              0x01\r
+\r
+//To avoid sending multiple response to application\r
+static gboolean UssdResp = FALSE;\r
+\r
+enum  telephony_ss_opcode\r
+{\r
+       SS_OPCO_REG=0x01,         /* 0x01 : Registration */\r
+       SS_OPCO_DEREG,            /* 0x02 : De-registration(erase) */\r
+       SS_OPCO_ACTIVATE,         /* 0x03 : Activation */\r
+       SS_OPCO_DEACTIVATE,       /* 0x04 : De-activation */\r
+       SS_OPCO_MAX\r
+};\r
+\r
+struct ss_confirm_info\r
+{\r
+       enum telephony_ss_class class;\r
+       int  flavor_type;\r
+       enum tcore_response_command resp;\r
+       void *data;\r
+       int  data_len;\r
+};\r
+\r
+static gboolean _ss_request_message(TcorePending *pending,\r
+                                    CoreObject *o,\r
+                                    UserRequest *ur,\r
+                                    void* on_resp,\r
+                                    void* user_data);\r
+\r
+static TReturn _ss_barring_get(CoreObject *o,\r
+                                                               UserRequest *ur,\r
+                                                               enum telephony_ss_class class,\r
+                                                               enum telephony_ss_barring_mode type,\r
+                                                               enum tcore_response_command resp);\r
+\r
+static TReturn _ss_forwarding_get(CoreObject *o,\r
+                                                                       UserRequest *ur,\r
+                                                                       enum telephony_ss_class class,\r
+                                                                       enum telephony_ss_forwarding_mode type,\r
+                                                                       enum tcore_response_command resp);\r
+\r
+static TReturn _ss_waiting_get(CoreObject *o,\r
+                                                               UserRequest *ur,\r
+                                                               enum telephony_ss_class class,\r
+                                                               enum tcore_response_command resp);\r
+\r
+static TReturn s_ss_barring_activate(CoreObject *o, UserRequest *ur);\r
+static TReturn s_ss_barring_deactivate(CoreObject *o, UserRequest *ur);\r
+static TReturn s_ss_barring_change_password(CoreObject *o, UserRequest *ur);\r
+static TReturn s_ss_barring_get_status(CoreObject *o, UserRequest *ur);\r
+\r
+static TReturn s_ss_forwarding_activate(CoreObject *o, UserRequest *ur);\r
+static TReturn s_ss_forwarding_deactivate(CoreObject *o, UserRequest *ur);\r
+static TReturn s_ss_forwarding_register(CoreObject *o, UserRequest *ur);\r
+static TReturn s_ss_forwarding_deregister(CoreObject *o, UserRequest *ur);\r
+static TReturn s_ss_forwarding_get_status(CoreObject *o, UserRequest *ur);\r
+\r
+static TReturn s_ss_waiting_activate(CoreObject *o, UserRequest *ur);\r
+static TReturn s_ss_waiting_deactivate(CoreObject *o, UserRequest *ur);\r
+static TReturn s_ss_waiting_get_status(CoreObject *o, UserRequest *ur);\r
+\r
+static TReturn s_ss_cli_activate(CoreObject *o, UserRequest *ur);\r
+static TReturn s_ss_cli_deactivate(CoreObject *o, UserRequest *ur);\r
+static TReturn s_ss_cli_get_status(CoreObject *o, UserRequest *ur);\r
+\r
+static TReturn s_ss_send_ussd(CoreObject *o, UserRequest *ur);\r
+\r
+static TReturn s_ss_set_aoc(CoreObject *o, UserRequest *ur);\r
+static TReturn s_ss_get_aoc(CoreObject *o, UserRequest *ur);\r
+\r
+static TReturn s_ss_manage_call_0_send(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data);\r
+static TReturn s_ss_manage_call_1_send(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data);\r
+static TReturn s_ss_manage_call_1x_send(CoreObject* o, UserRequest* ur, const int id, ConfirmCallback cb, void* user_data);\r
+static TReturn s_ss_manage_call_2_send(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data);\r
+static TReturn s_ss_manage_call_2x_send(CoreObject* o, UserRequest* ur, const int id, ConfirmCallback cb, void* user_data);\r
+static TReturn s_ss_manage_call_3_send(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data);\r
+static TReturn s_ss_manage_call_4_send(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data);\r
+static TReturn s_ss_manage_call_4dn_send(CoreObject* o, UserRequest* ur, const char* number, ConfirmCallback cb, void* user_data);\r
+\r
+static void on_confirmation_ss_message_send(TcorePending *p, gboolean result, void *user_data);\r
+\r
+static void _ss_ussd_response(UserRequest *ur, const char* ussd_str, enum telephony_ss_ussd_type type, enum telephony_ss_ussd_status status);\r
+static void _ss_ussd_notification(TcorePlugin *p, const char* ussd_str, enum telephony_ss_ussd_status status);\r
+\r
+static gboolean on_notification_ss_info(CoreObject *o, const void *data, void *user_data);\r
+static gboolean on_notification_ss_ussd(CoreObject *o, const void *data, void *user_data);\r
+\r
+\r
+static gboolean _ss_request_message(TcorePending *pending,\r
+                                                                               CoreObject *o,\r
+                                                                               UserRequest *ur,\r
+                                                                               void* on_resp,\r
+                                                                               void* user_data)\r
+{\r
+       TcoreHal *hal = NULL;\r
+       TReturn ret;\r
+       dbg("Entry");\r
+\r
+       if (on_resp) {\r
+               tcore_pending_set_response_callback(pending, on_resp, user_data);\r
+       }\r
+       tcore_pending_set_send_callback(pending, on_confirmation_ss_message_send, NULL);\r
+       if (ur) {\r
+               tcore_pending_link_user_request(pending, ur);\r
+       }\r
+       else {\r
+               err("User Request is NULL, is this internal request??");\r
+       }\r
+       // HAL\r
+       hal = tcore_object_get_hal(o);\r
+\r
+       // Send request to HAL\r
+       ret = tcore_hal_send_request(hal, pending);\r
+       if(TCORE_RETURN_SUCCESS != ret) {\r
+               err("Request send failed");\r
+               return FALSE;\r
+       }\r
+\r
+       dbg("Exit");\r
+       return TRUE;\r
+}\r
+\r
+static void _ss_ussd_response(UserRequest *ur, const char* ussd_str, enum telephony_ss_ussd_type type, enum telephony_ss_ussd_status status)\r
+{\r
+       struct tresp_ss_ussd resp;\r
+       dbg("Entry");\r
+\r
+       if (ur) {\r
+               memset (&resp, 0x0, sizeof(struct tresp_ss_ussd));\r
+               resp.type = type;\r
+               resp.status = status;\r
+               resp.err = FALSE;\r
+        dbg("ussd_str = %s resp.type - %d resp.status - %d",ussd_str ,resp.type,resp.status);\r
+\r
+               if (ussd_str) {\r
+                       int len = strlen(ussd_str);\r
+               if (len < MAX_SS_USSD_LEN) {\r
+                               memcpy(resp.str, ussd_str, len);\r
+                               resp.str[len] = '\0';\r
+                       }\r
+                       else {\r
+                               memcpy(resp.str, ussd_str, MAX_SS_USSD_LEN);\r
+                               resp.str[MAX_SS_USSD_LEN - 1] = '\0';\r
+                       }\r
+                       dbg("Response string: %s", resp.str);\r
+               }\r
+               else {\r
+                       dbg("USSD string is not present");\r
+                       memset(resp.str, '\0', MAX_SS_USSD_LEN);\r
+               }\r
+         UssdResp = TRUE;\r
+               // Send response to TAPI\r
+               tcore_user_request_send_response(ur, TRESP_SS_SEND_USSD, sizeof(struct tresp_ss_ussd), &resp);\r
+       }\r
+       else {\r
+               err("User request is NULL");\r
+       }\r
+\r
+       dbg("Exit");\r
+       return;\r
+}\r
+\r
+static void _ss_ussd_notification(TcorePlugin *p, const char* ussd_str, enum telephony_ss_ussd_status status)\r
+{\r
+       CoreObject *core_obj = 0;\r
+       struct tnoti_ss_ussd noti;\r
+\r
+       dbg("function enter");\r
+       if (!p) {\r
+               dbg("[ error ] p : (NULL)");\r
+               return ;\r
+       }\r
+       noti.status = status;\r
+       if (ussd_str) {\r
+\r
+               int len = strlen(ussd_str);\r
+               if (len < MAX_SS_USSD_LEN) {\r
+                       memcpy(noti.str, ussd_str, len);\r
+                       noti.str[ len ] = '\0';\r
+               }\r
+        else {\r
+                       memcpy(noti.str, ussd_str, MAX_SS_USSD_LEN);\r
+                       noti.str[ MAX_SS_USSD_LEN - 1 ] = '\0';\r
+               }\r
+\r
+       }\r
+    else {\r
+               memset(noti.str, '\0', MAX_SS_USSD_LEN);\r
+       }\r
+    dbg("noti.str - %s", noti.str);\r
+\r
+       core_obj = tcore_plugin_ref_core_object(p, "ss");\r
+       tcore_server_send_notification(tcore_plugin_ref_server(p),\r
+                       core_obj,\r
+                       TNOTI_SS_USSD,\r
+                       sizeof(struct tnoti_ss_ussd),\r
+                       (void*)&noti);\r
+\r
+}\r
+\r
+static gboolean        on_notification_ss_ussd(CoreObject *o, const void *data, void *user_data)\r
+{\r
+    enum telephony_ss_ussd_status status;\r
+       UssdSession *ussd_session = 0;\r
+       char *ussd_str = 0, *cmd = 0;\r
+       TcorePlugin *plugin = 0;\r
+       int m = -1, dcs = 0;\r
+    char *ussdnoti= NULL, *str = NULL, *dcs_str = NULL;\r
+    GSList *tokens = NULL;\r
+    GSList *lines = NULL;\r
+    char *ussd_string = NULL;\r
+    unsigned int len;\r
+\r
+       plugin = tcore_object_ref_plugin(o);\r
+       ussd_session = tcore_ss_ussd_get_session(o);\r
+\r
+    dbg("function enter");\r
+       lines = (GSList*)data;\r
+       if (1 != g_slist_length(lines)) {\r
+               dbg("unsolicited msg but multiple line");\r
+               goto OUT;\r
+       }\r
+       cmd = (char*)(lines->data);\r
+       // parse ussd status\r
+    tokens = tcore_at_tok_new(cmd);\r
+\r
+    // parse <m>\r
+    ussdnoti = g_slist_nth_data(tokens, 0);\r
+    if(!ussdnoti) {\r
+        dbg("+CUSD<m> is missing from %CUSD Notification");\r
+\r
+    }\r
+    else {\r
+\r
+        m  = atoi(ussdnoti);\r
+        dbg("USSD status  %d",m);\r
+        //parse [ <str>, <dcs>]\r
+        ussd_string = g_slist_nth_data(tokens, 1);\r
+        if(ussd_string) {\r
+\r
+            /* Strike off starting & ending quotes. 1 extra character for NULL termination */\r
+            str = malloc(strlen(ussd_string) - 1);\r
+            dbg("length of Ussd Stirng - %d", strlen(ussd_string));\r
+            if(str) {\r
+               memset(str, 0x00, strlen(ussd_string) - 1);\r
+            }\r
+            else {\r
+                dbg("malloc failed")\r
+                return FALSE;\r
+            }\r
+            len  = strlen(ussd_string)-1;\r
+            ++ussd_string;\r
+            strncpy(str, ussd_string, len);\r
+\r
+            dbg("USSD String - %s len = %d",str,strlen(str));\r
+     }\r
+     if((dcs_str = g_slist_nth_data(tokens, 2))) {\r
+            dcs = atoi(dcs_str);\r
+            dbg("USSD dcs %d",dcs);\r
+      }\r
+   }\r
+\r
+       switch(m) {\r
+\r
+               case 0:\r
+                       status = SS_USSD_NO_ACTION_REQUIRE;\r
+               break;\r
+\r
+               case 1:\r
+                       status = SS_USSD_ACTION_REQUIRE;\r
+               break;\r
+\r
+               case 2:\r
+                       status = SS_USSD_TERMINATED_BY_NET;\r
+               break;\r
+\r
+               case 3:\r
+                       status = SS_USSD_OTHER_CLIENT;\r
+               break;\r
+\r
+               case 4:\r
+                       status = SS_USSD_NOT_SUPPORT;\r
+               break;\r
+\r
+               case 5:\r
+                       status = SS_USSD_TIME_OUT;\r
+               break;\r
+\r
+               default:\r
+                       dbg("unsupported m : %d", m);\r
+                       status = SS_USSD_MAX;\r
+               break;\r
+       }\r
+\r
+    switch (tcore_util_get_cbs_coding_scheme(dcs)) {\r
+\r
+        case TCORE_DCS_TYPE_7_BIT:\r
+        case TCORE_DCS_TYPE_UNSPECIFIED:\r
+               //ussd_str = tcore_util_unpack_gsm7bit(str, strlen(str));\r
+         //break;\r
+\r
+        case TCORE_DCS_TYPE_UCS2:\r
+        case TCORE_DCS_TYPE_8_BIT:\r
+            if ( (str != NULL ) && (strlen(str)  > 0))\r
+            {\r
+                       ussd_str = g_new0(char, strlen(str)  + 1);\r
+                       if(ussd_str != NULL){\r
+                                   memcpy(ussd_str,str, strlen(str));\r
+                                   ussd_str[ strlen(str) ] = '\0';\r
+                }\r
+               }\r
+        break;\r
+        default:\r
+          dbg("[ error ] unknown dcs type. ussd_session : %x", ussd_session);\r
+          if (ussd_session) {\r
+\r
+                UserRequest *ur = 0;\r
+                enum telephony_ss_ussd_type type;\r
+\r
+                tcore_ss_ussd_get_session_data(ussd_session, (void**)&ur);\r
+                if (!ur) {\r
+\r
+                    dbg("[ error ] ur : (0)");\r
+                    return  FALSE;\r
+                }\r
+\r
+                type = (enum telephony_ss_ussd_type)tcore_ss_ussd_get_session_type(ussd_session);\r
+                dbg("ussd type  - %d", type);\r
+\r
+                _ss_ussd_response(ur, ussd_str, type, status);\r
+          }\r
+          return FALSE;\r
+    }\r
+\r
+    switch (status) {\r
+\r
+       case SS_USSD_NO_ACTION_REQUIRE:\r
+       case SS_USSD_ACTION_REQUIRE:\r
+       case SS_USSD_OTHER_CLIENT:\r
+       case SS_USSD_NOT_SUPPORT:\r
+       case SS_USSD_TIME_OUT:\r
+        {\r
+               if (ussd_session) {\r
+\r
+                       UserRequest *ur = 0;\r
+                       enum telephony_ss_ussd_type type;\r
+\r
+                       tcore_ss_ussd_get_session_data(ussd_session, (void**)&ur);\r
+                       if (!ur) {\r
+                               dbg("[ error ] ur : (0)");\r
+                               return FALSE;\r
+                       }\r
+                       type = (enum telephony_ss_ussd_type)tcore_ss_ussd_get_session_type(ussd_session);\r
+                dbg("ussd type  - %d", type);\r
+                       _ss_ussd_response(ur, (const char*)ussd_str, type, status);\r
+                if(ussd_str)\r
+                           g_free(ussd_str);\r
+               }\r
+            else {\r
+                               tcore_ss_ussd_create_session(o, TCORE_SS_USSD_TYPE_NETWORK_INITIATED, 0, 0);\r
+                       _ss_ussd_notification(plugin, (const char*)ussd_str, status);\r
+\r
+                 if(ussd_str)\r
+                           g_free(ussd_str);\r
+                   }\r
+           }\r
+        break;\r
+           case SS_USSD_TERMINATED_BY_NET:\r
+        {\r
+                       if (ussd_session){\r
+                       UserRequest *ur = 0;\r
+                       tcore_ss_ussd_get_session_data(ussd_session, (void**)&ur);\r
+                       if (ur) {\r
+                    tcore_user_request_unref(ur);\r
+                       }\r
+                       tcore_ss_ussd_destroy_session(ussd_session);\r
+               }\r
+           }\r
+        break;\r
+\r
+           default:\r
+           break;\r
+    }\r
+\r
+OUT:\r
+       if(NULL!=tokens)\r
+               tcore_at_tok_free(tokens);\r
+\r
+    if(NULL != str)\r
+        free(str);\r
+    dbg("Exit");\r
+       return TRUE;\r
+\r
+}\r
+static gboolean        on_notification_ss_info(CoreObject *o, const void *data, void *user_data)\r
+{\r
+       TcorePlugin *plugin  = 0;\r
+       CoreObject *co = 0;\r
+       char* cmd = 0, *number = 0, *pos;\r
+       int code1 = -1, code2 = -1, index = 0, ton = 0;\r
+    char *str_code1, *str_code2, *str_ton ,*str_index;\r
+    GSList *tokens = NULL;\r
+    char *buf;\r
+    gboolean cssu = FALSE,cssi = FALSE;\r
+    GSList *lines = NULL;\r
+    dbg("function enter");\r
+\r
+       plugin  = tcore_object_ref_plugin(o);\r
+       co      = tcore_plugin_ref_core_object(plugin, "call");\r
+       if (!co) {\r
+\r
+               dbg("[ error ] plugin_ref_core_object : call");\r
+               return FALSE;\r
+       }\r
+\r
+       lines = (GSList*)data;\r
+       if (1 != g_slist_length(lines)) {\r
+               dbg("unsolicited msg but multiple line");\r
+               goto OUT;\r
+       }\r
+\r
+       cmd = (char*)(lines->data);\r
+    pos = strchr(cmd, ':');\r
+    if(!pos){\r
+        dbg("[ error ] not valid SS- notification ");\r
+               return TRUE;\r
+    }\r
+    buf = calloc(pos - cmd + 2, 1);\r
+       memcpy(buf, cmd, pos - cmd);\r
+    dbg("buf is %s", buf);\r
+\r
+    if(!strcmp(buf,"+CSSU")){\r
+\r
+        dbg("SS - +CSSU indication");\r
+        cssu = TRUE;\r
+    }\r
+    else if(!strcmp(buf,"+CSSI")) {\r
+\r
+        dbg("SS - +CSSI indication");\r
+        cssi = TRUE;\r
+    }\r
+    free(buf);\r
+\r
+   //handle %CSSU notification\r
+    if(cssu){\r
+\r
+        tokens = tcore_at_tok_new(cmd);\r
+        // parse <code2>\r
+        str_code2 = g_slist_nth_data(tokens, 0);\r
+        if(!str_code2) {\r
+            dbg("Code2 is missing from %CSSU indiaction");\r
+        }\r
+        else {\r
+\r
+            code2  = atoi(str_code2);\r
+            //parse [ <index>, <number> <type>]\r
+            if ((str_index = g_slist_nth_data(tokens, 1))) {\r
+                index = atoi(str_index);\r
+            }\r
+             if ((number = g_slist_nth_data(tokens, 2))) {\r
+                str_ton = g_slist_nth_data(tokens, 3);\r
+\r
+                if(str_ton) {\r
+                   ton = atoi(str_ton);\r
+                }\r
+             }\r
+        }\r
+\r
+        dbg("CSSU - code2 = %d index = %d number = %s type = %d", code2, index, number, ton);\r
+       switch(code2) {\r
+\r
+               case 0:  //this is a forwarded call (MT call setup)\r
+                       tcore_call_information_mt_forwarded_call(co, number);\r
+               break;\r
+\r
+               case 2: //call has been put on hold (during a voice call)\r
+                       tcore_call_information_held(co, number);\r
+               break;\r
+\r
+               case 3: //call has been retrieved (during a voice call)\r
+                       tcore_call_information_active(co, number);\r
+               break;\r
+\r
+               case 4: //multiparty call entered (during a voice call)\r
+                       tcore_call_information_joined(co, number);\r
+               break;\r
+\r
+               case 5: //call on hold has been released\r
+                       tcore_call_information_released_on_hold(co, number);\r
+               break;\r
+\r
+               case 6: //forward check SS message received (can be received whenever)\r
+                       tcore_call_information_cf_check_ss_message(co, number);\r
+               break;\r
+\r
+               case 7: //call is being connected (alerting) with the remote party in alerting state in explicit call transfer operation (during a voice call)\r
+                       tcore_call_information_transfer_alert(co, number);\r
+               break;\r
+\r
+               case 8: //call has been connected with the other remote party in explicit call transfer operation (also number and subaddress parameters may be present) (during a voice call or MT call setup)\r
+                       tcore_call_information_transfered(co, number);\r
+               break;\r
+\r
+               case 9: //this is a deflected call (MT call setup):\r
+                       tcore_call_information_mt_deflected_call(co, number);\r
+               break;\r
+\r
+               default:\r
+                       dbg("CSSU - unsupported code2 : %d",code2);\r
+               break;\r
+       }\r
+    }\r
+    //handle %CSSI notification\r
+\r
+    if(cssi) {\r
+\r
+        tokens = tcore_at_tok_new(cmd);\r
+        // parse <code1>\r
+        str_code1 = g_slist_nth_data(tokens, 0);\r
+        if(!str_code1){\r
+            dbg("Code1 is missing from %CSSI indiaction");\r
+        }\r
+        else {\r
+            code1  = atoi(str_code1);\r
+            //parse [ <index> ]\r
+            if ((str_index = g_slist_nth_data(tokens, 1))) {\r
+                index = atoi(str_index);\r
+            }\r
+\r
+        }\r
+\r
+        dbg("CSSI - code1 - %d index - %d ", code1, index);\r
+\r
+       switch(code1) {\r
+\r
+               case 0:  //Unconditional CF is active\r
+                       tcore_call_information_mo_cfu(co);\r
+               break;\r
+\r
+            case 1:     //some of the conditional call forwarding are active\r
+                tcore_call_information_mo_cfc(co);\r
+            break;\r
+\r
+               case 2:    // outgoing call is forwarded\r
+                           tcore_call_information_mo_forwarded(co);\r
+               break;\r
+\r
+               case 3:     // this call is waiting\r
+                           tcore_call_information_mo_waiting(co);\r
+               break;\r
+\r
+               case 5:     // outgoing call is barred\r
+                           tcore_call_information_mo_barred_outgoing(co);\r
+               break;\r
+\r
+               case 6:     // incoming call is barred\r
+                       tcore_call_information_mo_barred_incoming(co);\r
+               break;\r
+\r
+               case 7:     // CLIR suppression rejected\r
+                           tcore_call_information_mo_clir_suppression_reject(co);\r
+               break;\r
+\r
+               case 8:     // outgoing call is deflected\r
+                           tcore_call_information_mo_deflected(co);\r
+               break;\r
+\r
+               default:\r
+                       dbg("unsupported cmd : %d",code1);\r
+               break;\r
+       }\r
+    }\r
+OUT:\r
+       if(NULL!=tokens)\r
+               tcore_at_tok_free(tokens);\r
+       return TRUE;\r
+}\r
+\r
+static void on_confirmation_ss_message_send(TcorePending *p, gboolean result, void *user_data)\r
+{\r
+       dbg("");\r
+\r
+       if (result == FALSE) {\r
+               // Fail\r
+               dbg("FAIL");\r
+       }\r
+       else {\r
+               dbg("SEND OK");\r
+       }\r
+}\r
+\r
+static void on_response_ss_barring_set(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+\r
+       struct ss_confirm_info *info = 0;\r
+       enum telephony_ss_class class;\r
+       CoreObject* o = 0;\r
+       UserRequest *ur;\r
+       struct tresp_ss_general resp;\r
+       UserRequest *ur_dup=0;\r
+       GSList *tokens=NULL;\r
+       const char *line;\r
+    int err;\r
+    const TcoreATResponse* response;\r
+\r
+    dbg("function enter");\r
+    response = data;\r
+       o  = tcore_pending_ref_core_object(p);\r
+       ur = tcore_pending_ref_user_request(p);\r
+\r
+       info = (struct ss_confirm_info*)user_data;\r
+       class = info->class;\r
+\r
+    if (response->success > 0){\r
+        dbg("RESPONSE OK");\r
+        resp.err = TCORE_RETURN_SUCCESS;\r
+    }\r
+    else {\r
+\r
+        dbg("RESPONSE NOT OK");\r
+        line = (const char*)response->final_response;\r
+               tokens = tcore_at_tok_new(line);\r
+\r
+               if (g_slist_length(tokens) < 1) {\r
+\r
+                       dbg("err cause not specified or string corrupted");\r
+                   resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               else {\r
+                       err = atoi(g_slist_nth_data(tokens, 0));\r
+                       // TODO: CMEE error mapping is required.\r
+               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+        tcore_at_tok_free(tokens);\r
+       }\r
+\r
+    dbg("on_response_ss_barring_set - rsp.err : %d, ur : %x flavor_type = %d", resp.err, ur , info->flavor_type);\r
+    dbg("[ check ] class : 0x%x", info->class);\r
+\r
+    if (response->success > 0) {\r
+\r
+               if (info->class == SS_CLASS_VOICE) {\r
+\r
+                   class = SS_CLASS_ALL_TELE_BEARER;\r
+               }\r
+\r
+               ur_dup = tcore_user_request_ref(ur);\r
+\r
+               if (info->flavor_type == SS_BARR_MODE_AB || info->flavor_type == SS_BARR_MODE_AOB) {\r
+                       _ss_barring_get(o, ur_dup, class, SS_BARR_MODE_BAOC, info->resp);\r
+               }\r
+               else if (info->flavor_type == SS_BARR_MODE_AIB) {\r
+                       _ss_barring_get(o, ur_dup, class, SS_BARR_MODE_BAIC, info->resp);\r
+               }\r
+               else {\r
+                       _ss_barring_get(o, ur_dup, class, info->flavor_type, info->resp);\r
+               }\r
+       }\r
+       else {\r
+               if (ur) {\r
+                       tcore_user_request_send_response(ur, info->resp, sizeof(struct tresp_ss_general), &resp);\r
+               }\r
+               else  {\r
+                       dbg("[ error ] ur is 0");\r
+               }\r
+       }\r
+}\r
+\r
+static void on_response_ss_barring_change_pwd(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+    const TcoreATResponse* response = data;\r
+    struct ss_confirm_info *info = 0;\r
+       UserRequest *ur;\r
+       struct tresp_ss_general resp;\r
+    int err;\r
+       GSList *tokens=NULL;\r
+       const char *line;\r
+\r
+    dbg("function enter");\r
+       ur = tcore_pending_ref_user_request(p);\r
+       info = (struct ss_confirm_info*)user_data;\r
+\r
+    if (response->success > 0){\r
+        dbg("RESPONSE OK");\r
+        resp.err = TCORE_RETURN_SUCCESS;\r
+    }\r
+    else {\r
+        dbg("RESPONSE NOT OK");\r
+\r
+        line = (const char*)response->final_response;\r
+               tokens = tcore_at_tok_new(line);\r
+\r
+               if (g_slist_length(tokens) < 1) {\r
+\r
+                       dbg("err cause not specified or string corrupted");\r
+                   resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               else {\r
+\r
+                   err = atoi(g_slist_nth_data(tokens, 0));\r
+                       // TODO: CMEE error mapping is required.\r
+               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+\r
+       dbg("on_response_ss_barring_change_pwd: rsp.err : %d, usr : %x", resp.err, ur);\r
+       if (ur) {\r
+               tcore_user_request_send_response(ur, info->resp, sizeof(struct tresp_ss_general), &resp);\r
+       }\r
+       else {\r
+               dbg("[ error ] ur is 0");\r
+       }\r
+\r
+       g_free(user_data);\r
+}\r
+\r
+static void on_response_ss_forwarding_set(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       CoreObject* o = 0;\r
+       UserRequest* ur = 0, *dup_ur=0;\r
+       struct ss_confirm_info *info = 0;\r
+       struct tresp_ss_general resp;\r
+       GSList *tokens=NULL;\r
+       const char *line;\r
+    int err;\r
+    const TcoreATResponse* response;\r
+\r
+    dbg("function enter");\r
+\r
+    response  = data;\r
+       o  = tcore_pending_ref_core_object(p);\r
+       ur = tcore_pending_ref_user_request(p);\r
+\r
+       info = (struct ss_confirm_info*)user_data;\r
+\r
+    if (response->success > 0) {\r
+\r
+        dbg("RESPONSE OK");\r
+        resp.err = TCORE_RETURN_SUCCESS;\r
+    }\r
+    else {\r
+\r
+        dbg("RESPONSE NOT OK");\r
+\r
+        line = (const char*)response->final_response;\r
+               tokens = tcore_at_tok_new(line);\r
+\r
+               if (g_slist_length(tokens) < 1) {\r
+                       dbg("err cause not specified or string corrupted");\r
+                   resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               else {\r
+                       err = atoi(g_slist_nth_data(tokens, 0));\r
+                       /// TODO: CMEE error mapping is required.\r
+               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+\r
+       tcore_at_tok_free(tokens);\r
+       }\r
+\r
+       dbg("[ check ] class : 0x%x", info->class);\r
+       dbg("[ check ] flavor_type : 0x%x", info->flavor_type);\r
+\r
+       dbg("on_response_ss_forwarding_set - rsp.err : %d, ur : %x", resp.err, ur);\r
+\r
+       if (response->success > 0) {\r
+\r
+               if (info->flavor_type == SS_CF_MODE_CF_ALL ||\r
+                        info->flavor_type == SS_CF_MODE_CFC)  {\r
+\r
+                       if (ur) {\r
+\r
+                               tcore_user_request_send_response(ur, info->resp, sizeof(struct tresp_ss_general), &resp);\r
+                       }\r
+                       else {\r
+\r
+                               dbg("[ error ] ur is 0");\r
+                       }\r
+               }\r
+        else  {\r
+                       dup_ur = tcore_user_request_ref(ur);\r
+                       _ss_forwarding_get(o, dup_ur, info->class, info->flavor_type, info->resp);\r
+               }\r
+       }\r
+    else {\r
+\r
+               if(ur) {\r
+                       tcore_user_request_send_response(ur, info->resp, sizeof(struct tresp_ss_general), &resp);\r
+               }\r
+               else {\r
+                       dbg("[ error ] ur is 0");\r
+               }\r
+       }\r
+       g_free(user_data);\r
+\r
+}\r
+\r
+static void on_response_ss_waiting_set(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       CoreObject*     core_obj = 0;\r
+       UserRequest* ur = 0;\r
+       UserRequest* ur_dup = 0;\r
+       struct ss_confirm_info *info = 0;\r
+       struct tresp_ss_general resp;\r
+       GSList *tokens = NULL;\r
+       const char *line;\r
+    int err;\r
+    const TcoreATResponse* response;\r
+\r
+    dbg("function enter");\r
+    response = data;\r
+       core_obj  = tcore_pending_ref_core_object(p);\r
+       ur = tcore_pending_ref_user_request(p);\r
+\r
+       info = (struct ss_confirm_info*)user_data;\r
+\r
+       if(response->success > 0){\r
+        dbg("RESPONSE OK");\r
+        resp.err = TCORE_RETURN_SUCCESS;\r
+    }\r
+    else {\r
+\r
+        dbg("RESPONSE NOT OK");\r
+\r
+        line = (const char*)response->final_response;\r
+               tokens = tcore_at_tok_new(line);\r
+\r
+               if (g_slist_length(tokens) < 1) {\r
+\r
+                       dbg("err cause not specified or string corrupted");\r
+                   resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               else {\r
+\r
+                       err = atoi(g_slist_nth_data(tokens, 0));\r
+                       /// TODO: CMEE error mapping is required.\r
+               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+\r
+       dbg("on_response_ss_waiting_set - rsp.err : %d, ur : %x, class : %d", resp.err, ur, info->class);\r
+\r
+       if(resp.err == TCORE_RETURN_SUCCESS) {\r
+\r
+                ur_dup = tcore_user_request_ref(ur);\r
+         dbg("Get waiting call status");\r
+               _ss_waiting_get(core_obj, ur_dup, info->class, info->resp);\r
+       }\r
+    else {\r
+\r
+               if (ur) {\r
+\r
+                       tcore_user_request_send_response(ur, info->resp, sizeof(struct tresp_ss_general), &resp);\r
+               }\r
+               else {\r
+\r
+                       dbg("[ error ] ur is 0");\r
+                }\r
+        }\r
+        g_free(user_data);\r
+}\r
+\r
+\r
+static void on_confirmation_ss_ussd(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+    CoreObject*        core_obj = 0;\r
+       struct ss_confirm_info *info = 0;\r
+       struct tresp_ss_ussd resp;\r
+       UserRequest* ur = NULL , *ussd_ur= NULL;\r
+       GSList *tokens = NULL;\r
+       const char *line;\r
+       int err;\r
+    UssdSession *ussd_s = NULL;\r
+    enum tcore_ss_ussd_type type = TCORE_SS_USSD_TYPE_MAX;\r
+    const TcoreATResponse* response;\r
+\r
+    dbg("function enter");\r
+    response = data;\r
+       ur = tcore_pending_ref_user_request(p);\r
+       info = (struct ss_confirm_info*)user_data;\r
+\r
+    memset(resp.str, 0x00, MAX_SS_USSD_LEN);\r
+\r
+       core_obj  = tcore_pending_ref_core_object(p);\r
+       ussd_s = tcore_ss_ussd_get_session(core_obj);\r
+\r
+       if(ussd_s)\r
+               type = tcore_ss_ussd_get_session_type(ussd_s);\r
+       else\r
+               dbg("[ error ] ussd_s : (0)");\r
+\r
+       resp.type = (enum telephony_ss_ussd_type)type;\r
+    resp.status = SS_USSD_MAX; //hardcoded value.\r
+\r
+       if(response->success > 0) {\r
+\r
+        dbg("RESPONSE OK");\r
+        resp.err = TCORE_RETURN_SUCCESS;\r
+    }\r
+    else {\r
+\r
+        dbg("RESPONSE NOT OK");\r
+\r
+        line = (const char*)response->final_response;\r
+               tokens = tcore_at_tok_new(line);\r
+\r
+               if (g_slist_length(tokens) < 1) {\r
+\r
+                       dbg("err cause not specified or string corrupted");\r
+                   resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               else {\r
+\r
+                       err = atoi(g_slist_nth_data(tokens, 0));\r
+                       // TODO: CMEE error mapping is required.\r
+               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+       tcore_at_tok_free(tokens);\r
+     }\r
+\r
+       dbg("on_confirmation_ss_ussd - rsp.err : %d, ur : %x", resp.err, ur);\r
+\r
+       if(response->success > 0) {\r
+\r
+           if(type == TCORE_SS_USSD_TYPE_USER_INITIATED) {\r
+            dbg("ussd type %d",resp.type);\r
+\r
+            if(ussd_s) {\r
+                           tcore_ss_ussd_get_session_data(ussd_s, (void**)&ussd_ur);\r
+                           if(ussd_ur)\r
+                    tcore_user_request_free(ussd_ur);\r
+            }\r
+               }\r
+        }\r
+\r
+    if(ussd_s)\r
+        tcore_ss_ussd_destroy_session(ussd_s);\r
+\r
+       if(ur) {\r
+\r
+        if(UssdResp == FALSE){  // to avoid sending multiple response to application.\r
+                   tcore_user_request_send_response(ur, info->resp, sizeof(struct tresp_ss_ussd), &resp);\r
+        }\r
+        UssdResp =  FALSE;\r
+       }\r
+       else\r
+               dbg("[ error ] ur : (0)");\r
+\r
+       g_free(user_data);\r
+\r
+}\r
+\r
+static void on_response_ss_barring_get(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+\r
+       UserRequest* ur = 0;\r
+       int status = 0, classx = 0, err = 0;\r
+    GSList *respdata;\r
+       struct ss_confirm_info* info = 0;\r
+       struct tresp_ss_barring resp;\r
+       int countRecords = 0, countValidRecords = 0;\r
+       GSList *tokens = NULL;\r
+       const char *line;\r
+    char *classx_str;\r
+    char *stat = NULL;\r
+    const TcoreATResponse *response;\r
+\r
+    dbg("function enter");\r
+\r
+    response = data;\r
+       ur = tcore_pending_ref_user_request(p);\r
+       info = (struct ss_confirm_info*)user_data;\r
+\r
+    if(response->lines) {\r
+        respdata = (GSList *)response->lines;\r
+        countRecords = g_slist_length(respdata);\r
+       dbg("total records : %d",countRecords);\r
+\r
+    }\r
+    else {\r
+\r
+        countRecords  = 0;\r
+        dbg("no active status - return to user")\r
+    }\r
+    resp.record_num = countRecords;\r
+\r
+    if(resp.record_num > 0) {\r
+\r
+               resp.record = g_new0(struct barring_info, resp.record_num);\r
+               for (countValidRecords = 0; respdata != NULL ; respdata = respdata->next) {\r
+\r
+            line  = (const char*)(respdata->data);\r
+            tokens = tcore_at_tok_new(line);\r
+\r
+           // parse <status>\r
+            stat = g_slist_nth_data(tokens, 0);\r
+            if(!stat) {\r
+\r
+                dbg("Stat is missing");\r
+                               goto error;\r
+            }\r
+\r
+                   status = atoi(stat);\r
+                       if(status == 1) {\r
+\r
+                               resp.record[countValidRecords].status = SS_STATUS_ACTIVATE;\r
+                       }\r
+                       else {\r
+\r
+                               resp.record[countValidRecords].status = SS_STATUS_DEACTIVATE;\r
+                       }\r
+            dbg("call barring status - %d",status);\r
+\r
+           //Parse <class>\r
+            classx_str = g_slist_nth_data(tokens, 1);\r
+\r
+               if (!classx_str) {\r
+\r
+                               dbg("class error. classx not exist - set to requested one : %d", info->class);\r
+                               switch(info->class) {\r
+\r
+                               case SS_CLASS_ALL_TELE:\r
+                                       classx = 7;\r
+                               break;\r
+                               case SS_CLASS_VOICE:\r
+                                       classx = 1;\r
+                               break;\r
+                               case SS_CLASS_ALL_DATA_TELE:\r
+                                       classx =2;\r
+                               break;\r
+                               case SS_CLASS_FAX:\r
+                                       classx = 4;\r
+                               break;\r
+                               case SS_CLASS_SMS:\r
+                                       classx = 8;\r
+                               break;\r
+                               case SS_CLASS_ALL_CS_SYNC:\r
+                                       classx = 16;\r
+                               break;\r
+\r
+                               default:\r
+                                       classx =7;\r
+                                       dbg("unsupported class %d. set to default : 7", info->class);\r
+                               break;\r
+                               }\r
+                       }\r
+            else {\r
+                classx = atoi(classx_str);\r
+                dbg("call barring classx - %d",classx);\r
+            }\r
+\r
+                       switch(classx) {\r
+\r
+                               case 1:\r
+                                       resp.record[countValidRecords].class = SS_CLASS_VOICE;\r
+                               break;\r
+                               case 2:\r
+                                       resp.record[countValidRecords].class = SS_CLASS_ALL_DATA_TELE;\r
+                               break;\r
+                               case 4:\r
+                                       resp.record[countValidRecords].class = SS_CLASS_FAX;\r
+                               break;\r
+                               case 7:\r
+                                       resp.record[countValidRecords].class = SS_CLASS_ALL_TELE;\r
+                               break;\r
+                               case 8:\r
+                                       resp.record[countValidRecords].class = SS_CLASS_SMS;\r
+                               break;\r
+                               case 16:\r
+                                       resp.record[countValidRecords].class = SS_CLASS_ALL_CS_SYNC;\r
+                               break;\r
+                               case 32:\r
+                                       resp.record[countValidRecords].class = SS_CLASS_ALL_CS_ASYNC;\r
+                               break;\r
+                               default:\r
+                                       dbg("unspoorted class : [%d]\n", classx);\r
+                                       goto error;\r
+                               break;\r
+                       }\r
+                       resp.record[countValidRecords].mode = (enum telephony_ss_barring_mode)(info->flavor_type);\r
+                       countValidRecords++;\r
+            tcore_at_tok_free(tokens);\r
+                       continue;\r
+\r
+        error:\r
+                       dbg("invalid field found. coutinue");\r
+            tcore_at_tok_free(tokens);\r
+                       continue;\r
+               }\r
+\r
+               dbg("valid count :%d",countValidRecords);\r
+               resp.record_num = countValidRecords;\r
+               resp.err = TCORE_RETURN_SUCCESS;\r
+       }\r
+    else {\r
+\r
+               dbg("no active status - return to user")\r
+       }\r
+\r
+    if(response->success > 0) {\r
+\r
+        dbg("RESPONSE OK");\r
+        resp.err = TCORE_RETURN_SUCCESS;\r
+    }\r
+    else {\r
+\r
+        dbg("RESPONSE NOT OK");\r
+        resp.err = TCORE_RETURN_FAILURE;\r
+\r
+        line = (const char*)response->final_response;\r
+               tokens = tcore_at_tok_new(line);\r
+\r
+               if (g_slist_length(tokens) < 1) {\r
+\r
+                       dbg("err cause not specified or string corrupted");\r
+                   resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               else {\r
+\r
+                       err = atoi(g_slist_nth_data(tokens, 0));\r
+                       // TODO: CMEE error mapping is required.\r
+               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+        tcore_at_tok_free(tokens);\r
+    }\r
+\r
+       dbg("on_response_ss_barring_get- rsp.err : %d, ur : %x", resp.err, ur);\r
+\r
+    if (ur)\r
+               tcore_user_request_send_response(ur, info->resp, sizeof(struct tresp_ss_barring), &resp);\r
+       else\r
+               dbg("[ error ] ur is 0");\r
+\r
+       if (resp.record) {\r
+\r
+               g_free(resp.record);\r
+        resp.record = NULL;\r
+       }\r
+\r
+       g_free(user_data);\r
+\r
+}\r
+\r
+static void on_response_ss_forwarding_get(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest* ur = 0;\r
+    int classx = 0, err = 0, time = 0;\r
+       char* num;\r
+       struct ss_confirm_info* info = 0;\r
+       struct tresp_ss_forwarding resp;\r
+       int countRecords = 0, countValidRecords = 0;\r
+\r
+    GSList *respdata = NULL ,*tokens = NULL ;\r
+       const char *line;\r
+    char *classx_str ,*status, *ton, *time_str;\r
+    const TcoreATResponse *response;\r
+\r
+    dbg("function enter");\r
+    response = data;\r
+\r
+       ur = tcore_pending_ref_user_request(p);\r
+    info = (struct ss_confirm_info*)user_data;\r
+    if(response->lines) {\r
+\r
+        respdata =  (GSList*)response->lines;\r
+        countRecords = g_slist_length(respdata);\r
+       dbg("total records : %d",countRecords);\r
+\r
+    }\r
+    else {\r
+        countRecords  = 0;\r
+        dbg("no active status - return to user")\r
+    }\r
+    resp.record_num = countRecords;\r
+\r
+    if (resp.record_num > 0) {\r
+\r
+               resp.record = g_new0(struct forwarding_info, resp.record_num);\r
+\r
+               for (countValidRecords = 0; respdata != NULL ; respdata = respdata->next) {\r
+\r
+           line  = (const char*)(respdata->data);\r
+           tokens = tcore_at_tok_new(line);\r
+\r
+           // parse <status>\r
+            status = g_slist_nth_data(tokens, 0);\r
+            if(!status) {\r
+\r
+                dbg("start line error. skip this line");\r
+                               goto error;\r
+            }\r
+            else {\r
+\r
+                       if(atoi(status)== 1) {\r
+                               resp.record[countValidRecords].status = SS_STATUS_ACTIVATE;\r
+                       }\r
+                       else {\r
+                               resp.record[countValidRecords].status = SS_STATUS_DEACTIVATE;\r
+                       }\r
+             }\r
+\r
+                   //Parse <class>\r
+            classx_str = g_slist_nth_data(tokens, 1);\r
+               if (!classx_str) {\r
+                               dbg("class error. skip this line");\r
+                               goto error;\r
+                       }\r
+            else {\r
+\r
+               switch(atoi(classx_str)) {\r
+                               case 1:\r
+                                       resp.record[countValidRecords].class = SS_CLASS_VOICE;\r
+                               break;\r
+                               case 2:\r
+                                       resp.record[countValidRecords].class = SS_CLASS_ALL_DATA_TELE;\r
+                               break;\r
+                               case 4:\r
+                                       resp.record[countValidRecords].class = SS_CLASS_FAX;\r
+                               break;\r
+                               case 7:\r
+                                       resp.record[countValidRecords].class = SS_CLASS_ALL_TELE;\r
+                               break;\r
+                               case 8:\r
+                                       resp.record[countValidRecords].class = SS_CLASS_SMS;\r
+                               break;\r
+                               case 16:\r
+                                       resp.record[countValidRecords].class = SS_CLASS_ALL_CS_SYNC;\r
+                               break;\r
+                               case 32:\r
+                                       resp.record[countValidRecords].class = SS_CLASS_ALL_CS_ASYNC;\r
+                               break;\r
+                               default:\r
+                                       dbg("unspoorted class : [%d]\n", classx);\r
+                                       goto error;\r
+                               break;\r
+                       }\r
+             }\r
+\r
+            //parse  <numer> <type>\r
+            num = g_slist_nth_data(tokens, 2);\r
+            if (num) {\r
+\r
+                dbg("number  - %s", num);\r
+                memcpy((resp.record[countValidRecords].number), num, strlen(num));\r
+                               resp.record[countValidRecords].number_present = TRUE;\r
+\r
+                ton = g_slist_nth_data(tokens, 3);\r
+                if(ton) {\r
+                   resp.record[countValidRecords].number_type = atoi(ton);\r
+                   dbg("number  type - %d", resp.record[countValidRecords].number_type);\r
+                 }\r
+            }\r
+\r
+            //skip  <subaddr> <satype>\r
+            //parse  <time>\r
+            time_str = g_slist_nth_data(tokens, 6);\r
+            if(time_str) {\r
+\r
+                time  =  atoi(time_str);\r
+                resp.record[countValidRecords].time = (enum telephony_ss_forwarding_no_reply_time)time;\r
+                dbg("time  - %d", time);\r
+            }\r
+\r
+                       resp.record[countValidRecords].mode = (enum telephony_ss_forwarding_mode)(info->flavor_type);\r
+            dbg("flavor_type  - %d", (enum telephony_ss_forwarding_mode)(info->flavor_type));\r
+\r
+                       countValidRecords++;\r
+            tcore_at_tok_free(tokens);\r
+                       continue;\r
+        error:\r
+                       dbg("invalid field found. coutinue");\r
+            tcore_at_tok_free(tokens);\r
+                       continue;\r
+               }\r
+               dbg("valid count :%d",countValidRecords);\r
+               resp.record_num = countValidRecords;\r
+               resp.err = TCORE_RETURN_SUCCESS;\r
+       }\r
+    else {\r
+\r
+               dbg("no active status - return to user")\r
+       }\r
+\r
+    if(response->success > 0) {\r
+\r
+        dbg("RESPONSE OK");\r
+        resp.err = TCORE_RETURN_SUCCESS;\r
+    }\r
+    else {\r
+\r
+        dbg("RESPONSE NOT OK");\r
+        line = (const char*)response->final_response;\r
+               tokens = tcore_at_tok_new(line);\r
+\r
+               if (g_slist_length(tokens) < 1) {\r
+\r
+                       dbg("err cause not specified or string corrupted");\r
+                   resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               else {\r
+\r
+                       err = atoi(g_slist_nth_data(tokens, 0));\r
+                       /* TODO: CMEE error mapping is required. */\r
+               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+        tcore_at_tok_free(tokens);\r
+    }\r
+\r
+       dbg("on_response_ss_forwarding_get- rsp.err : %d, ur : %x", resp.err, ur);\r
+    if (ur)\r
+               tcore_user_request_send_response(ur, info->resp, sizeof(struct tresp_ss_forwarding), &resp);\r
+       else\r
+               dbg("[ error ] ur is 0");\r
+\r
+       if (resp.record) {\r
+               g_free(resp.record);\r
+        resp.record = NULL;\r
+       }\r
+       g_free(user_data);\r
+\r
+}\r
+\r
+static void on_response_ss_waiting_get(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+\r
+       UserRequest* ur = 0;\r
+    GSList *respdata, *tokens = NULL;\r
+       int classx = 0, err = 0;\r
+       struct ss_confirm_info* info = 0;\r
+       struct tresp_ss_waiting resp;\r
+       int countRecords = 0, countValidRecords = 0;\r
+    const char *line;\r
+    char *classx_str ,*status;\r
+    const TcoreATResponse *response;\r
+\r
+    dbg("function enter")\r
+    response = data;\r
+       ur = tcore_pending_ref_user_request(p);\r
+       info = (struct ss_confirm_info*)user_data;\r
+\r
+    if(response->lines) {\r
+\r
+        respdata =  (GSList*)response->lines;\r
+        countRecords = g_slist_length(respdata);\r
+       dbg("total records : %d",countRecords);\r
+\r
+    }\r
+    else {\r
+        countRecords  = 0;\r
+        dbg("no active status - return to user")\r
+    }\r
+    resp.record_num = countRecords;\r
+\r
+       if (resp.record_num > 0) {\r
+\r
+               resp.record = g_new0(struct waiting_info, resp.record_num);\r
+\r
+               for (countValidRecords = 0; respdata != NULL ; respdata = respdata->next) {\r
+\r
+           line  = (const char*)(respdata->data);\r
+           tokens = tcore_at_tok_new(line);\r
+\r
+           // parse <status>\r
+            status = g_slist_nth_data(tokens, 0);\r
+            if(!status) {\r
+                dbg("Missing stat  in responce ");\r
+                               goto error;\r
+            }\r
+            else {\r
+\r
+                       if(atoi(status) == 1) {\r
+                               resp.record[countValidRecords].status = SS_STATUS_ACTIVATE;\r
+                       }\r
+                       else {\r
+                               resp.record[countValidRecords].status = SS_STATUS_DEACTIVATE;\r
+                       }\r
+            }\r
+            dbg("status = %d", resp.record[countValidRecords].status);\r
+\r
+           //Parse <class>\r
+            classx_str = g_slist_nth_data(tokens, 1);\r
+               if (!classx_str) {\r
+                               dbg("error - class is missing");\r
+                               goto error;\r
+                       }\r
+            else\r
+            {\r
+                switch(atoi(classx_str)) {\r
+                               case 1:\r
+                                       resp.record[countValidRecords].class = SS_CLASS_VOICE;\r
+                               break;\r
+                               case 2:\r
+                                       resp.record[countValidRecords].class = SS_CLASS_ALL_DATA_TELE;\r
+                               break;\r
+                               case 4:\r
+                                       resp.record[countValidRecords].class = SS_CLASS_FAX;\r
+                               break;\r
+                               case 7:\r
+                                       resp.record[countValidRecords].class = SS_CLASS_ALL_TELE;\r
+                               break;\r
+                               case 8:\r
+                                       resp.record[countValidRecords].class = SS_CLASS_SMS;\r
+                               break;\r
+                               case 16:\r
+                                       resp.record[countValidRecords].class = SS_CLASS_ALL_CS_SYNC;\r
+                               break;\r
+                               case 32:\r
+                                       resp.record[countValidRecords].class = SS_CLASS_ALL_CS_ASYNC;\r
+                               break;\r
+                               default:\r
+                                       dbg("unspoorted class : [%d]\n", classx);\r
+                                       goto error;\r
+                               break;\r
+                       }\r
+                dbg("class info %d",resp.record[countValidRecords].class);\r
+             }\r
+\r
+                           countValidRecords++;\r
+                tcore_at_tok_free(tokens);\r
+                           continue;\r
+        error:\r
+                           dbg("invalid field found. coutinue");\r
+                tcore_at_tok_free(tokens);\r
+                           continue;\r
+               }\r
+\r
+               dbg("valid count :%d",countValidRecords);\r
+               resp.record_num = countValidRecords;\r
+               resp.err = TCORE_RETURN_SUCCESS;\r
+       }\r
+       else {\r
+               dbg("no active status - return to user")\r
+       }\r
+\r
+       if(response->success > 0) {\r
+        dbg("RESPONSE OK");\r
+        resp.err = TCORE_RETURN_SUCCESS;\r
+    }\r
+    else {\r
+\r
+        dbg("RESPONSE NOT OK");\r
+        line = (const char*)response->final_response;\r
+               tokens = tcore_at_tok_new(line);\r
+\r
+               if (g_slist_length(tokens) < 1) {\r
+\r
+                       dbg("err cause not specified or string corrupted");\r
+                   resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               else {\r
+\r
+                       err = atoi(g_slist_nth_data(tokens, 0));\r
+                       // TODO: CMEE error mapping is required.\r
+               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+        tcore_at_tok_free(tokens);\r
+    }\r
+\r
+       dbg("on_response_ss_waiting_get - rsp.err : %d, ur : %x", resp.err, ur);\r
+       if (ur)\r
+               tcore_user_request_send_response(ur, info->resp, sizeof(struct tresp_ss_waiting), &resp);\r
+       else\r
+               dbg("[ error ] ur is 0");\r
+\r
+    if (resp.record) {\r
+               g_free(resp.record);\r
+        resp.record = NULL;\r
+       }\r
+       g_free(user_data);\r
+}\r
+\r
+\r
+static void on_response_ss_cli_get(TcorePending *p, int data_len, const void *data, void *user_data)\r
+{\r
+       UserRequest* ur = 0;\r
+       struct tresp_ss_cli resp;\r
+       enum telephony_ss_cli_type *p_type = NULL;\r
+       char *line = NULL, *status;\r
+       int err = FALSE;\r
+    int cli_adj,stat ;\r
+    GSList *tokens = NULL ;\r
+    const TcoreATResponse *response;\r
+\r
+    dbg("function enter")\r
+    response = data;\r
+       ur = tcore_pending_ref_user_request(p);\r
+       p_type = (enum telephony_ss_cli_type*)(user_data);\r
+\r
+    if (response->success  > 0) {\r
+\r
+        line  = (char*) (((GSList*)response->lines)->data);\r
+        tokens = tcore_at_tok_new(line);\r
+\r
+        if(*p_type == SS_CLI_TYPE_CLIR){\r
+\r
+            //+CLIR: <n> <m>\r
+           dbg("CLI type is CLIR")\r
+            //parse <n>\r
+            status = g_slist_nth_data(tokens, 0);\r
+\r
+            if(!status) {\r
+                dbg("Call line identification adjustment missing <n>");\r
+            }\r
+            else {\r
+\r
+                cli_adj = atoi(status);\r
+                dbg("CLIR response value of <n> - %d",cli_adj);\r
+\r
+                if(cli_adj == 0) {\r
+\r
+                    //parse <m>\r
+                    status = g_slist_nth_data(tokens, 1);\r
+                    if(!status) {\r
+                        dbg("status is missing<m>");\r
+                    }\r
+                    stat  = atoi(status);\r
+                    dbg("CLIR response value of <m> - %d",stat);\r
+\r
+                    if(stat == 1 || stat == 3) {\r
+                       resp.status = TRUE;\r
+                    }\r
+                    else {\r
+                        resp.status = FALSE;\r
+                    }\r
+               }\r
+               else if (cli_adj  == 1) {\r
+                  resp.status = TRUE;\r
+               }\r
+               else {\r
+                   resp.status = FALSE;\r
+               }\r
+               dbg("resp.status -  %d",resp.status);\r
+            }\r
+            tcore_at_tok_free(tokens);\r
+        }\r
+        else  {\r
+            //parse <n>\r
+            status = g_slist_nth_data(tokens, 0);\r
+            if(!status) {\r
+                dbg("Stat is missing");\r
+            }\r
+            else {\r
+                stat  = atoi(status);\r
+                if(stat == 1)\r
+                    resp.status = TRUE;\r
+                else\r
+                    resp.status = FALSE ;\r
+\r
+                dbg("resp.status -  %d",resp.status);\r
+            }\r
+            tcore_at_tok_free(tokens);\r
+        }\r
+    }\r
+\r
+    if (response->success > 0) {\r
+        dbg("RESPONSE OK");\r
+        resp.err = TCORE_RETURN_SUCCESS;\r
+    }\r
+\r
+    else {\r
+        dbg("RESPONSE NOT OK");\r
+\r
+        line = (char*)response->final_response;\r
+               tokens = tcore_at_tok_new(line);\r
+\r
+               if (g_slist_length(tokens) < 1) {\r
+                       dbg("err cause not specified or string corrupted");\r
+                   resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               else {\r
+                       err = atoi(g_slist_nth_data(tokens, 0));\r
+                       // TODO: CMEE error mapping is required.\r
+               resp.err = TCORE_RETURN_3GPP_ERROR;\r
+               }\r
+               tcore_at_tok_free(tokens);\r
+       }\r
+\r
+    resp.type = *p_type;\r
+    dbg("check - resp.type = %d ", resp.type);\r
+       if (ur)\r
+               tcore_user_request_send_response(ur, TRESP_SS_CLI_GET_STATUS, sizeof(struct tresp_ss_cli), &resp);\r
+       else\r
+               dbg("[ error ] ur : (0)");\r
+\r
+       g_free(user_data);\r
+}\r
+\r
+static struct tcore_ss_operations ss_ops = {\r
+       .barring_activate               = s_ss_barring_activate,\r
+       .barring_deactivate             = s_ss_barring_deactivate,\r
+       .barring_change_password= s_ss_barring_change_password,\r
+       .barring_get_status             = s_ss_barring_get_status,\r
+       .forwarding_activate    = s_ss_forwarding_activate,\r
+       .forwarding_deactivate  = s_ss_forwarding_deactivate,\r
+       .forwarding_register    = s_ss_forwarding_register,\r
+       .forwarding_deregister  = s_ss_forwarding_deregister,\r
+       .forwarding_get_status  = s_ss_forwarding_get_status,\r
+       .waiting_activate               = s_ss_waiting_activate,\r
+       .waiting_deactivate             = s_ss_waiting_deactivate,\r
+       .waiting_get_status             = s_ss_waiting_get_status,\r
+       .cli_activate                   = s_ss_cli_activate,\r
+       .cli_deactivate                 = s_ss_cli_deactivate,\r
+       .cli_get_status                 = s_ss_cli_get_status,\r
+       .send_ussd                              = s_ss_send_ussd,\r
+       .set_aoc                                = s_ss_set_aoc,\r
+       .get_aoc                                = s_ss_get_aoc,\r
+};\r
+\r
+\r
+static TReturn _ss_barring_set(CoreObject *o, UserRequest *ur, enum telephony_ss_opcode op)\r
+{\r
+       struct treq_ss_barring *barring = 0;\r
+       struct ss_confirm_info *user_data = 0;\r
+    char *cmd_str = NULL;\r
+       TcoreHal* hal;\r
+       TcorePending *pending = NULL;\r
+       TcoreATRequest *req;\r
+       char passwd[MAX_SS_BARRING_PASSWORD_LEN+1];\r
+       int opco;\r
+       int classx;\r
+       char* facility = NULL;\r
+    gboolean ret = FALSE;\r
+\r
+    dbg("function enter");\r
+    barring = (struct treq_ss_barring*)tcore_user_request_ref_data(ur, 0);\r
+\r
+    switch(op) {\r
+               case SS_OPCO_ACTIVATE:\r
+                        opco = 1;\r
+               break;\r
+               case SS_OPCO_DEACTIVATE:\r
+                        opco = 0;\r
+               break;\r
+               default:\r
+                       dbg("unsupported opco : %d", op);\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+    dbg("opco - %d",opco);\r
+\r
+       switch(barring->mode){\r
+               case SS_BARR_MODE_BAOC:\r
+                       facility = "AO";\r
+               break;\r
+               case SS_BARR_MODE_BOIC:\r
+                       facility = "OI";\r
+               break;\r
+               case SS_BARR_MODE_BOIC_NOT_HC:\r
+                       facility = "OX";\r
+               break;\r
+               case SS_BARR_MODE_BAIC:\r
+                       facility = "AI";\r
+               break;\r
+               case SS_BARR_MODE_BIC_ROAM:\r
+                       facility = "IR";\r
+               break;\r
+               case SS_BARR_MODE_AB:\r
+                       facility = "AB";\r
+               break;\r
+               case SS_BARR_MODE_AOB:\r
+                       facility = "AG";\r
+               break;\r
+               case SS_BARR_MODE_AIB:\r
+                       facility = "AC";\r
+               break;\r
+               case SS_BARR_MODE_BIC_NOT_SIM:\r
+               //      facility = "NS";\r
+               default:\r
+                       dbg("unspported mode %d", barring->mode);\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+    dbg("facility - %s",facility);\r
+\r
+       switch(barring->class) {\r
+               case SS_CLASS_ALL_TELE:\r
+                       classx =7;\r
+               break;\r
+               case SS_CLASS_VOICE:\r
+                       classx =1;\r
+               break;\r
+               case SS_CLASS_ALL_DATA_TELE:\r
+                       classx =2;\r
+               break;\r
+               case SS_CLASS_FAX:\r
+                       classx =4;\r
+               break;\r
+               case SS_CLASS_SMS:\r
+                       classx = 8;\r
+               break;\r
+               case SS_CLASS_ALL_CS_SYNC:\r
+                       classx = 16;\r
+               break;\r
+\r
+               default:\r
+                       classx =7;\r
+                       dbg("unsupported class %d. set to default : 7", barring->class);\r
+               break;\r
+       }\r
+\r
+    dbg("classx - %d",classx);\r
+\r
+       // null-ended pwd handling added - unexpected  0x11 value observed in req string\r
+       memcpy(passwd, barring->password, MAX_SS_BARRING_PASSWORD_LEN);\r
+       passwd[MAX_SS_BARRING_PASSWORD_LEN]='\0';\r
+    dbg("passwd - %s",passwd);\r
+\r
+       hal = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+\r
+    cmd_str = g_strdup_printf("AT+CLCK=\"%s\",%d,\"%s\",%d", facility, opco, passwd, classx);\r
+    dbg("request command : %s", cmd_str);\r
+\r
+       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+\r
+       user_data = g_new0(struct ss_confirm_info, 1);\r
+       if (op == SS_OPCO_ACTIVATE) {\r
+               user_data->resp = TRESP_SS_BARRING_ACTIVATE;\r
+\r
+       }\r
+    else if (op == SS_OPCO_DEACTIVATE){\r
+               user_data->resp = TRESP_SS_BARRING_DEACTIVATE;\r
+\r
+       }\r
+    else {\r
+               dbg("[ error ] wrong ss opco (0x%x)", op);\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+       user_data->flavor_type = (int)(barring->mode);\r
+       user_data->class = barring->class;\r
+\r
+       ret = _ss_request_message(pending, o, ur, on_response_ss_barring_set, user_data);\r
+       g_free(cmd_str);\r
+\r
+       if (!ret) {\r
+\r
+           dbg("AT request sent failed ")\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn _ss_barring_get(CoreObject *o,\r
+                                                               UserRequest *ur,\r
+                                                               enum telephony_ss_class class,\r
+                                                               enum telephony_ss_barring_mode mode,\r
+                                                               enum tcore_response_command resp)\r
+\r
+{\r
+       struct ss_confirm_info *user_data = 0;\r
+       gboolean ret = FALSE;\r
+       char* cmd_str = NULL;\r
+       int opco, classx;\r
+       char* facility = NULL;\r
+    TcoreHal* hal;\r
+       TcorePending *pending = NULL;\r
+       TcoreATRequest *req;\r
+\r
+    dbg("function enter");\r
+\r
+    //query status - opco is fixed to 2\r
+       opco = 2;\r
+       //barring mode\r
+       switch(mode){\r
+\r
+               case SS_BARR_MODE_BAOC:\r
+                       facility = "AO";\r
+               break;\r
+               case SS_BARR_MODE_BOIC:\r
+                       facility = "OI";\r
+               break;\r
+               case SS_BARR_MODE_BOIC_NOT_HC:\r
+                       facility = "OX";\r
+               break;\r
+               case SS_BARR_MODE_BAIC:\r
+                       facility = "AI";\r
+               break;\r
+               case SS_BARR_MODE_BIC_ROAM:\r
+                       facility = "IR";\r
+               break;\r
+               case SS_BARR_MODE_AB:\r
+                       facility = "AB";\r
+               break;\r
+               case SS_BARR_MODE_AOB:\r
+                       facility = "AG";\r
+               break;\r
+               case SS_BARR_MODE_AIB:\r
+                       facility = "AC";\r
+               break;\r
+               case SS_BARR_MODE_BIC_NOT_SIM:\r
+               default:\r
+                       dbg("unspported mode %d", mode);\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+    dbg("facility - %s", facility);\r
+\r
+       switch(class) {\r
+\r
+               case SS_CLASS_ALL_TELE:\r
+                       classx =7;\r
+               break;\r
+               case SS_CLASS_VOICE:\r
+                       classx =1;\r
+               break;\r
+               case SS_CLASS_ALL_DATA_TELE:\r
+                       classx =2;\r
+               break;\r
+               case SS_CLASS_FAX:\r
+                       classx =4;\r
+               break;\r
+               case SS_CLASS_SMS:\r
+                       classx = 8;\r
+               break;\r
+               case SS_CLASS_ALL_CS_SYNC:\r
+                       classx = 16;\r
+               break;\r
+\r
+               default:\r
+                       classx =7;\r
+                       dbg("unsupported class %d. set to default : 7", class);\r
+               break;\r
+       }\r
+    dbg("class - %d", classx);\r
+\r
+       if(classx ==7)\r
+           cmd_str = g_strdup_printf("AT+CLCK=\"%s\",%d", facility, opco);\r
+       else\r
+               cmd_str = g_strdup_printf("AT+CLCK=\"%s\",%d,,%d", facility, opco,classx);\r
+\r
+       dbg("request command : %s", cmd_str);\r
+\r
+    hal = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+    req = tcore_at_request_new(cmd_str, "+CLCK", TCORE_AT_MULTILINE);\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+\r
+       user_data = g_new0(struct ss_confirm_info, 1);\r
+       user_data->resp = resp;\r
+       user_data->flavor_type = (int)(mode);\r
+       user_data->class = class;\r
+\r
+       ret = _ss_request_message(pending, o, ur, on_response_ss_barring_get, user_data);\r
+       g_free(cmd_str);\r
+\r
+       if (!ret) {\r
+           dbg("AT request sent failed ")\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_ss_barring_activate(CoreObject *o, UserRequest *ur)\r
+{\r
+       return _ss_barring_set(o, ur, SS_OPCO_ACTIVATE);\r
+}\r
+\r
+static TReturn s_ss_barring_deactivate(CoreObject *o, UserRequest *ur)\r
+{\r
+       return _ss_barring_set(o, ur, SS_OPCO_DEACTIVATE);\r
+}\r
+\r
+static TReturn s_ss_barring_change_password(CoreObject *o, UserRequest *ur)\r
+{\r
+    TcoreHal* hal;\r
+       TcorePending *pending = NULL;\r
+       TcoreATRequest *req;\r
+       struct treq_ss_barring_change_password *barring = 0;\r
+       struct ss_confirm_info *user_data = 0;\r
+    char* cmd_str = NULL;\r
+       gboolean ret = FALSE;\r
+\r
+    dbg("function enter");\r
+       barring = (struct treq_ss_barring_change_password*)tcore_user_request_ref_data(ur, 0);\r
+\r
+       cmd_str = g_strdup_printf("AT+CPWD=\"%s\",\"%s\",\"%s\"", "AB", barring->password_old, barring->password_new);\r
+       dbg("request command : %s", cmd_str);\r
+\r
+    hal = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+\r
+       user_data = g_new0(struct ss_confirm_info, 1);\r
+       user_data->resp = TRESP_SS_BARRING_CHANGE_PASSWORD;\r
+\r
+       ret = _ss_request_message(pending, o, ur, on_response_ss_barring_change_pwd, user_data);\r
+       g_free(cmd_str);\r
+    if (!ret) {\r
+        dbg("AT request sent failed ")\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_ss_barring_get_status(CoreObject *o, UserRequest *ur)\r
+{\r
+       struct treq_ss_barring *barring = 0;\r
+       barring = (struct treq_ss_barring*)tcore_user_request_ref_data(ur, 0);\r
+\r
+       return _ss_barring_get(o, ur, barring->class, barring->mode, TRESP_SS_BARRING_GET_STATUS);\r
+}\r
+\r
+static TReturn _ss_forwarding_set(CoreObject *o, UserRequest *ur, enum telephony_ss_opcode op)\r
+{\r
+       struct treq_ss_forwarding *forwarding = 0;\r
+       struct ss_confirm_info *user_data = 0;\r
+       gboolean ret = FALSE;\r
+       int len = 0;\r
+       char* cmd_str = NULL;\r
+       char* tmp_str = NULL;\r
+       int reason=0, mode = 0, num_type = 0, classx = 0,time = 0;\r
+       gboolean valid_num = FALSE;\r
+    TcoreHal* hal;\r
+       TcorePending *pending = NULL;\r
+       TcoreATRequest *req;\r
+\r
+       dbg("_ss_forwarding_set with opco %d ", op);\r
+\r
+       forwarding = (struct treq_ss_forwarding*) tcore_user_request_ref_data(ur, 0);\r
+       switch(forwarding->mode) {\r
+\r
+               case SS_CF_MODE_CFU:\r
+                       reason = 0;\r
+                       break;\r
+               case SS_CF_MODE_CFB:\r
+                       reason = 1;\r
+                       break;\r
+               case SS_CF_MODE_CFNRy:\r
+                       reason = 2;\r
+                       break;\r
+               case SS_CF_MODE_CFNRc:\r
+                       reason = 3;\r
+                       break;\r
+               case SS_CF_MODE_CF_ALL:\r
+                       reason = 4;\r
+               break;\r
+               case SS_CF_MODE_CFC:\r
+                       reason = 5;\r
+               break;\r
+\r
+               default:\r
+                       dbg("unsupported reason : %d");\r
+            return TCORE_RETURN_FAILURE;\r
+                       break;\r
+       }\r
+\r
+    dbg("reason = %d", reason);\r
+       switch(op){\r
+               case SS_OPCO_DEACTIVATE:\r
+                       mode = 0;\r
+               break;\r
+               case SS_OPCO_ACTIVATE:\r
+                       mode = 1;\r
+               break;\r
+               case SS_OPCO_REG:\r
+                       mode = 3;\r
+               break;\r
+               case SS_OPCO_DEREG:\r
+                       mode = 4;\r
+               break;\r
+\r
+               default:\r
+                       dbg("unsupported opco : %d", op);\r
+                       return TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+    dbg("mode = %d", mode);\r
+\r
+    // class\r
+       switch(forwarding->class) {\r
+               case SS_CLASS_ALL_TELE:\r
+                       classx =7;\r
+               break;\r
+               case SS_CLASS_VOICE:\r
+                       classx =1;\r
+               break;\r
+               case SS_CLASS_ALL_DATA_TELE:\r
+                       classx =2;\r
+               break;\r
+               case SS_CLASS_FAX:\r
+                       classx =4;\r
+               break;\r
+               case SS_CLASS_SMS:\r
+                       classx = 8;\r
+               break;\r
+               case SS_CLASS_ALL_CS_SYNC:\r
+                       classx = 16;\r
+               break;\r
+\r
+               default:\r
+                       classx =7;\r
+                       dbg("unsupported class %d. set to default : 7", forwarding->class);\r
+               break;\r
+       }\r
+    dbg("classx = %d", classx);\r
+\r
+    //number\r
+       len = strlen(forwarding->number);\r
+       if (len > 0){\r
+               valid_num = TRUE;\r
+               if (forwarding->number[0] == '+')\r
+                       num_type = ((NUM_TYPE_INTERNATIONAL << 4)| NUM_PLAN_ISDN);\r
+               else\r
+                       num_type = 0;\r
+       }\r
+    dbg("number = %s", forwarding->number);\r
+\r
+       user_data = g_new0(struct ss_confirm_info, 1);\r
+\r
+       switch (op) {\r
+               case SS_OPCO_REG:\r
+                       user_data->resp = TRESP_SS_FORWARDING_REGISTER;\r
+                       break;\r
+               case SS_OPCO_DEREG:\r
+                       user_data->resp = TRESP_SS_FORWARDING_DEREGISTER;\r
+                       break;\r
+               case SS_OPCO_ACTIVATE:\r
+                       user_data->resp = TRESP_SS_FORWARDING_ACTIVATE;\r
+                       break;\r
+               case SS_OPCO_DEACTIVATE:\r
+                       user_data->resp = TRESP_SS_FORWARDING_DEACTIVATE;\r
+                       break;\r
+               default:\r
+                       dbg("[ error ] unknown op (0x%x)", op);\r
+                       break;\r
+       }\r
+\r
+   if(forwarding->number[0] == '+')\r
+       num_type = 145;\r
+   else\r
+      num_type = 129;\r
+\r
+       if(op == SS_OPCO_REG)\r
+               tmp_str = g_strdup_printf("AT+CCFC=%d,%d,\"%s\",%d,%d", reason, mode, forwarding->number, num_type, classx);\r
+       else// other opcode does not need num field\r
+               tmp_str = g_strdup_printf("AT+CCFC=%d,%d,,,%d", reason, mode, classx);\r
+\r
+       if(forwarding->mode == SS_CF_MODE_CFNRy) {\r
+               //add time info to 'no reply' case\r
+               time = (int)(forwarding->time);\r
+               cmd_str = g_strdup_printf("%s,,,%d", tmp_str,time);\r
+       }\r
+       else {\r
+               cmd_str = g_strdup_printf("%s", tmp_str);\r
+       }\r
+\r
+       dbg("request command : %s", cmd_str);\r
+    hal = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+\r
+       user_data->flavor_type = forwarding->mode;\r
+       user_data->class = forwarding->class;\r
+\r
+       ret = _ss_request_message(pending, o, ur, on_response_ss_forwarding_set, user_data);\r
+\r
+       g_free(tmp_str);\r
+       g_free(cmd_str);\r
+\r
+       if (!ret) {\r
+           dbg("AT request sent failed ")\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn _ss_forwarding_get(CoreObject *o,\r
+                                                                       UserRequest *ur,\r
+                                                                       enum telephony_ss_class class,\r
+                                                                       enum telephony_ss_forwarding_mode type,\r
+                                                                       enum tcore_response_command resp)\r
+{\r
+\r
+       struct ss_confirm_info *user_data = 0;\r
+       gboolean ret = FALSE;\r
+       char* cmd_str = NULL;\r
+       int reason = 0, mode = 0, classx = 0;\r
+    TcoreHal* hal;\r
+       TcorePending *pending = NULL;\r
+       TcoreATRequest *req;\r
+\r
+    dbg("function enter");\r
+\r
+       switch(type) {\r
+               case SS_CF_MODE_CFU:\r
+                       reason = 0;\r
+               break;\r
+               case SS_CF_MODE_CFB:\r
+                       reason = 1;\r
+               break;\r
+               case SS_CF_MODE_CFNRy:\r
+                       reason = 2;\r
+               break;\r
+               case SS_CF_MODE_CFNRc:\r
+                       reason = 3;\r
+               break;\r
+               case SS_CF_MODE_CF_ALL:\r
+                       reason = 4;\r
+               break;\r
+               case SS_CF_MODE_CFC:\r
+                       reason = 5;\r
+               break;\r
+\r
+               default:\r
+                       dbg("unsupported reason : %d");\r
+               break;\r
+       }\r
+    dbg("reason  = %d", reason);\r
+\r
+       switch(class) {\r
+               case SS_CLASS_ALL_TELE:\r
+                       classx =7;\r
+               break;\r
+               case SS_CLASS_VOICE:\r
+                       classx =1;\r
+               break;\r
+               case SS_CLASS_ALL_DATA_TELE:\r
+                       classx =2;\r
+               break;\r
+               case SS_CLASS_FAX:\r
+                       classx =4;\r
+               break;\r
+               case SS_CLASS_SMS:\r
+                       classx = 8;\r
+               break;\r
+               case SS_CLASS_ALL_CS_SYNC:\r
+                       classx = 16;\r
+               break;\r
+               default:\r
+                       classx =7;\r
+                       dbg("unsupported class %d. set to default : 7", class);\r
+               break;\r
+       }\r
+\r
+    dbg("classx  = %d", classx);\r
+\r
+       //query status - mode set to 2\r
+       mode = 2;\r
+       user_data = g_new0(struct ss_confirm_info, 1);\r
+       user_data->resp = resp;\r
+       user_data->class = class;\r
+       user_data->flavor_type = type;\r
+\r
+       if(classx ==7)\r
+               cmd_str = g_strdup_printf("AT+CCFC=%d,%d", reason, mode);\r
+       else\r
+               cmd_str = g_strdup_printf("AT+CCFC=%d,%d,,,%d", reason, mode,classx);\r
+\r
+       dbg("request command : %s", cmd_str);\r
+\r
+    hal = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+       req = tcore_at_request_new(cmd_str, "+CCFC", TCORE_AT_MULTILINE);\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+\r
+       ret = _ss_request_message(pending, o, ur, on_response_ss_forwarding_get, user_data);\r
+       g_free(cmd_str);\r
+\r
+       if (!ret) {\r
+           dbg("AT request sent failed ")\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_ss_forwarding_activate(CoreObject *o, UserRequest *ur)\r
+{\r
+       return _ss_forwarding_set(o, ur, SS_OPCO_ACTIVATE);\r
+}\r
+\r
+static TReturn s_ss_forwarding_deactivate(CoreObject *o, UserRequest *ur)\r
+{\r
+       return _ss_forwarding_set(o, ur, SS_OPCO_DEACTIVATE);\r
+}\r
+\r
+static TReturn s_ss_forwarding_register(CoreObject *o, UserRequest *ur)\r
+{\r
+       return _ss_forwarding_set(o, ur, SS_OPCO_REG);\r
+}\r
+\r
+static TReturn s_ss_forwarding_deregister(CoreObject *o, UserRequest *ur)\r
+{\r
+       return _ss_forwarding_set(o, ur, SS_OPCO_DEREG);\r
+}\r
+\r
+static TReturn s_ss_forwarding_get_status(CoreObject *o, UserRequest *ur)\r
+{\r
+       struct treq_ss_forwarding *forwarding = 0;\r
+       forwarding = (struct treq_ss_forwarding*)tcore_user_request_ref_data(ur, 0);\r
+\r
+       return _ss_forwarding_get(o, ur, forwarding->class, forwarding->mode, TRESP_SS_FORWARDING_GET_STATUS);\r
+}\r
+\r
+\r
+static TReturn _ss_waiting_set(CoreObject *o, UserRequest *ur, enum telephony_ss_opcode opco)\r
+{\r
+       struct treq_ss_waiting *waiting = 0;\r
+       struct ss_confirm_info *user_data = 0;\r
+       gboolean ret = FALSE;\r
+       int mode = 0, classx = 0;\r
+       char* cmd_str;\r
+    TcoreHal* hal;\r
+       TcorePending *pending = NULL;\r
+       TcoreATRequest *req;\r
+\r
+    dbg("function enter ");\r
+       waiting = (struct treq_ss_waiting*) tcore_user_request_ref_data(ur, 0);\r
+       user_data = g_new0(struct ss_confirm_info, 1);\r
+\r
+       if(opco == SS_OPCO_ACTIVATE) {\r
+               user_data->resp = TRESP_SS_WAITING_ACTIVATE;\r
+               mode = 1;//enable\r
+       }\r
+       else if (opco == SS_OPCO_DEACTIVATE) {\r
+               user_data->resp = TRESP_SS_WAITING_DEACTIVATE;\r
+               mode =0; //disable\r
+       }\r
+       else\r
+               dbg("[ error ] unknown ss mode (0x%x)", opco);\r
+\r
+    switch(waiting->class) {\r
+               case SS_CLASS_ALL_TELE:\r
+                       classx =7;\r
+               break;\r
+               case SS_CLASS_VOICE:\r
+                       classx =1;\r
+               break;\r
+               case SS_CLASS_ALL_DATA_TELE:\r
+                       classx =2;\r
+               break;\r
+               case SS_CLASS_FAX:\r
+                       classx =4;\r
+               break;\r
+               case SS_CLASS_SMS:\r
+                       classx = 8;\r
+               break;\r
+\r
+               default:\r
+                       classx =1;\r
+                       dbg("unsupported class %d. set to default : 1", waiting->class);\r
+               break;\r
+       }\r
+    dbg("mode = %d classxx- %d", mode , classx);\r
+\r
+       user_data->class = waiting->class;\r
+       user_data->flavor_type = (int)opco;\r
+\r
+       cmd_str = g_strdup_printf("AT+CCWA=1,%d,%d", mode, classx); //always enable +CCWA: unsolicited cmd\r
+       dbg("request command : %s",cmd_str);\r
+\r
+    hal = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+\r
+       ret = _ss_request_message(pending, o, ur, on_response_ss_waiting_set, user_data);\r
+       g_free(cmd_str);\r
+       if (!ret) {\r
+           dbg("AT request sent failed ")\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn _ss_waiting_get(CoreObject *o,\r
+                                                               UserRequest *ur,\r
+                                                               enum telephony_ss_class class,\r
+                                                               enum tcore_response_command resp)\r
+\r
+{\r
+\r
+    struct ss_confirm_info *user_data = 0;\r
+       gboolean ret = FALSE;\r
+       int classx; //mode,\r
+       char* cmd_str;\r
+    TcoreHal* hal;\r
+       TcorePending *pending = NULL;\r
+       TcoreATRequest *req;\r
+\r
+    dbg("function  enter")\r
+       switch(class) {\r
+               case SS_CLASS_ALL_TELE:\r
+                       classx = 7;\r
+               break;\r
+               case SS_CLASS_VOICE:\r
+                       classx = 1;\r
+               break;\r
+               case SS_CLASS_ALL_DATA_TELE:\r
+                       classx = 2;\r
+               break;\r
+               case SS_CLASS_FAX:\r
+                       classx = 4;\r
+               break;\r
+               case SS_CLASS_SMS:\r
+                       classx = 8;\r
+               break;\r
+\r
+               default:\r
+                       classx =7;\r
+                       dbg("unsupported class %d. set to default : 7", class);\r
+               break;\r
+       }\r
+    dbg("classx - %d", classx);\r
+\r
+       dbg("allocating user data");\r
+       user_data = g_new0(struct ss_confirm_info, 1);\r
+       user_data->resp = resp;\r
+       user_data->class = class;\r
+\r
+       cmd_str = g_strdup_printf("AT+CCWA=1,2,%d", classx); //always enable +CCWA: unsolicited cmd , mode is fixed to 2(query status)\r
+       dbg("request cmd : %s", cmd_str);\r
+\r
+    hal = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+       req = tcore_at_request_new(cmd_str, "+CCWA", TCORE_AT_MULTILINE);\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+\r
+       ret = _ss_request_message(pending, o, ur, on_response_ss_waiting_get, user_data);\r
+       g_free(cmd_str);\r
+       if (!ret) {\r
+           dbg("AT request sent failed ")\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_ss_waiting_activate(CoreObject *o, UserRequest *ur)\r
+{\r
+       return _ss_waiting_set(o, ur, SS_OPCO_ACTIVATE);\r
+}\r
+\r
+static TReturn s_ss_waiting_deactivate(CoreObject *o, UserRequest *ur)\r
+{\r
+       return _ss_waiting_set(o, ur, SS_OPCO_DEACTIVATE);\r
+}\r
+\r
+static TReturn s_ss_waiting_get_status(CoreObject *o, UserRequest *ur)\r
+{\r
+       struct treq_ss_waiting *waiting = 0;\r
+       waiting = (struct treq_ss_waiting*)tcore_user_request_ref_data(ur, 0);\r
+\r
+       return _ss_waiting_get(o, ur, waiting->class, TRESP_SS_WAITING_GET_STATUS);\r
+}\r
+\r
+static TReturn s_ss_cli_activate(CoreObject *o, UserRequest *ur)\r
+{\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_ss_cli_deactivate(CoreObject *o, UserRequest *ur)\r
+{\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_ss_cli_get_status(CoreObject *o, UserRequest *ur)\r
+{\r
+\r
+       struct treq_ss_cli *cli = 0;\r
+       gboolean ret = FALSE;\r
+       char *cmd_prefix = NULL, *rsp_prefix = NULL, *cmd_str = NULL;\r
+       enum  telephony_ss_cli_type *user_data = 0;\r
+    TcoreHal* hal;\r
+       TcorePending *pending = NULL;\r
+       TcoreATRequest *req;\r
+\r
+       cli = (struct treq_ss_cli*)tcore_user_request_ref_data(ur, 0);\r
+       switch(cli->type) {\r
+               case SS_CLI_TYPE_CLIP:\r
+                       cmd_prefix = "+CLIP";\r
+                       rsp_prefix = "+CLIP";\r
+               break;\r
+\r
+               case SS_CLI_TYPE_CLIR:\r
+                       cmd_prefix = "+CLIR";\r
+                       rsp_prefix = "+CLIR";\r
+               break;\r
+\r
+               case SS_CLI_TYPE_COLP:\r
+                       cmd_prefix = "+COLP";\r
+                       rsp_prefix = "+COLP";\r
+               break;\r
+\r
+        case SS_CLI_TYPE_COLR:\r
+            cmd_prefix = "+COLR";\r
+                       rsp_prefix = "+COLR";\r
+         break;\r
+\r
+            case SS_CLI_TYPE_CNAP:\r
+             cmd_prefix = "+CNAP";\r
+                        rsp_prefix = "+CNAP";\r
+          break;\r
+\r
+               case SS_CLI_TYPE_CDIP:\r
+               default:\r
+                       dbg("unsupported cli_type : %d", cli->type);\r
+                       return TCORE_RETURN_FAILURE;\r
+               break;\r
+       }\r
+       dbg("cmd_prefix : %s",cmd_prefix);\r
+\r
+       cmd_str = g_strdup_printf("AT%s?", cmd_prefix);\r
+       dbg("request cmd : %s", cmd_str);\r
+\r
+       user_data = g_new0(enum telephony_ss_cli_type, 1);\r
+    *user_data = cli->type;\r
+\r
+    hal = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+\r
+       req = tcore_at_request_new(cmd_str, rsp_prefix, TCORE_AT_SINGLELINE);\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+\r
+       ret = _ss_request_message(pending, o, ur, on_response_ss_cli_get, user_data);\r
+       g_free(cmd_str);\r
+    if (!ret) {\r
+           dbg("AT request sent failed ")\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_ss_send_ussd(CoreObject *o, UserRequest *ur)\r
+{\r
+       UssdSession *ussd_s = 0;\r
+       struct treq_ss_ussd *ussd = 0;\r
+       struct ss_confirm_info *user_data = 0;\r
+       gboolean ret = FALSE;\r
+       char* cmd_str;\r
+    TcoreHal* hal;\r
+       TcorePending *pending = NULL;\r
+       TcoreATRequest *req;\r
+\r
+    dbg("function enter");\r
+       ussd = (struct treq_ss_ussd*)tcore_user_request_ref_data(ur, 0);\r
+       cmd_str = g_strdup_printf("AT+CUSD=1,\"%s\",%d", ussd->str, 0x0f); //always enable +CUSD: unsolicited cmd. set to dcs to 0x0f. only supports HEX type\r
+       dbg("request command : %s",cmd_str);\r
+\r
+       user_data = g_new0(struct ss_confirm_info, 1);\r
+       user_data->resp = TRESP_SS_SEND_USSD;\r
+       ussd_s = tcore_ss_ussd_get_session(o);\r
+       if(!ussd_s) {\r
+        dbg("USSD session does not  exist");\r
+               tcore_ss_ussd_create_session(o, (enum tcore_ss_ussd_type)ussd->type, (void*)tcore_user_request_ref(ur), 0);\r
+       }\r
+    else {\r
+\r
+               if(ussd->type == SS_USSD_TYPE_USER_INITIATED) {\r
+\r
+                   dbg("[ error ] ussd session is already exist");\r
+                       g_free(user_data);\r
+                       return TCORE_RETURN_FAILURE;\r
+               }\r
+\r
+               tcore_ss_ussd_set_session_type(ussd_s, (enum tcore_ss_ussd_type)ussd->type);\r
+       }\r
+\r
+    hal = tcore_object_get_hal(o);\r
+       pending = tcore_pending_new(o, 0);\r
+       req = tcore_at_request_new(cmd_str, NULL, TCORE_AT_NO_RESULT);\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+\r
+       ret = _ss_request_message(pending, o, ur, on_confirmation_ss_ussd, user_data);\r
+       g_free(cmd_str);\r
+\r
+       if (!ret) {\r
+\r
+           dbg("AT request sent failed ")\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_ss_set_aoc(CoreObject *o, UserRequest *ur)\r
+{\r
+       dbg("[ error ] unsupported function");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_ss_get_aoc(CoreObject *o, UserRequest *ur)\r
+{\r
+       dbg("[ error ] unsupported function");\r
+       return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+\r
+static struct tcore_call_control_operations call_ops = {\r
+       .answer_hold_and_accept = s_ss_manage_call_2_send,\r
+       .answer_replace                 = s_ss_manage_call_1_send,\r
+       .answer_reject                  = s_ss_manage_call_0_send,\r
+       .end_specific                   = s_ss_manage_call_1x_send,\r
+       .end_all_active                 = s_ss_manage_call_1_send,\r
+       .end_all_held                   = s_ss_manage_call_0_send,\r
+       .active                                 = s_ss_manage_call_2_send,\r
+       .hold                                   = s_ss_manage_call_2_send,\r
+       .swap                                   = s_ss_manage_call_2_send,\r
+       .join                                   = s_ss_manage_call_3_send,\r
+       .split                                  = s_ss_manage_call_2x_send,\r
+       .transfer                               = s_ss_manage_call_4_send,\r
+       .deflect                                = s_ss_manage_call_4dn_send,\r
+};\r
+\r
+static TReturn s_ss_manage_call_send(CoreObject* o, UserRequest* ur, const char* cmd, ConfirmCallback cb, void* user_data)\r
+{\r
+       TcorePending *pending = NULL;\r
+       TcoreATRequest *req;\r
+       gboolean ret = FALSE;\r
+\r
+       pending = tcore_pending_new(o, 0);\r
+       req = tcore_at_request_new(cmd, NULL, TCORE_AT_NO_RESULT);\r
+       dbg("cmd : %s, prefix(if any) :%s, cmd_len : %d", req->cmd, req->prefix, strlen(req->cmd));\r
+       tcore_pending_set_request_data(pending, 0, req);\r
+\r
+    ret = _ss_request_message(pending, o, ur, (TcorePendingResponseCallback)cb, user_data);\r
+    if (!ret) {\r
+           dbg("AT request sent failed ")\r
+               return TCORE_RETURN_FAILURE;\r
+       }\r
+    return TCORE_RETURN_SUCCESS;\r
+}\r
+\r
+static TReturn s_ss_manage_call_0_send(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)\r
+{\r
+       char* cmd_str = NULL;\r
+       gboolean ret = FALSE;\r
+\r
+    dbg("function enter");\r
+       cmd_str = g_strdup_printf("%s", "AT+CHLD=0");\r
+       dbg("cmd : %s, prefix(if any) : %s, cmd_len : %d",cmd_str, "N/A", strlen(cmd_str));\r
+\r
+    ret =  s_ss_manage_call_send(o, ur, cmd_str, cb, user_data);\r
+       g_free(cmd_str);\r
+       return ret;\r
+}\r
+\r
+static TReturn s_ss_manage_call_1_send(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)\r
+{\r
+       char* cmd_str = NULL;\r
+       gboolean ret = FALSE;\r
+\r
+    dbg("function enter");\r
+       cmd_str = g_strdup_printf("%s", "AT+CHLD=1");\r
+       dbg("cmd : %s, prefix(if any) : %s, cmd_len : %d",cmd_str, "N/A", strlen(cmd_str));\r
+\r
+    ret =  s_ss_manage_call_send(o, ur, cmd_str, cb, user_data);\r
+       g_free(cmd_str);\r
+       return ret;\r
+}\r
+\r
+static TReturn s_ss_manage_call_1x_send(CoreObject* o, UserRequest* ur, const int id, ConfirmCallback cb, void* user_data)\r
+{\r
+    char* cmd_str = NULL;\r
+       gboolean ret = FALSE;\r
+\r
+    dbg("function enter");\r
+       cmd_str = g_strdup_printf("%s%d", "AT+CHLD=1", id);\r
+       dbg("cmd : %s, prefix(if any) : %s, cmd_len : %d",cmd_str, "N/A", strlen(cmd_str));\r
+\r
+    ret =  s_ss_manage_call_send(o, ur, cmd_str, cb, user_data);\r
+       g_free(cmd_str);\r
+       return ret;\r
+}\r
+\r
+static TReturn s_ss_manage_call_2_send(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)\r
+{\r
+    char* cmd_str = NULL;\r
+       gboolean ret = FALSE;\r
+\r
+    dbg("function enter");\r
+       cmd_str = g_strdup_printf("%s", "AT+CHLD=2");\r
+       dbg("cmd : %s, prefix(if any) : %s, cmd_len : %d",cmd_str, "N/A", strlen(cmd_str));\r
+\r
+    ret =  s_ss_manage_call_send(o, ur, cmd_str, cb,  user_data);\r
+       g_free(cmd_str);\r
+       return ret;\r
+\r
+}\r
+\r
+static TReturn s_ss_manage_call_2x_send(CoreObject* o, UserRequest* ur, const int id, ConfirmCallback cb, void* user_data)\r
+{\r
+    char* cmd_str = NULL;\r
+       gboolean ret = FALSE;\r
+\r
+    dbg("function enter");\r
+       cmd_str = g_strdup_printf("%s%d", "AT+CHLD=2", id);\r
+       dbg("cmd : %s, prefix(if any) : %s, cmd_len : %d",cmd_str, "N/A", strlen(cmd_str));\r
+\r
+    ret =  s_ss_manage_call_send(o, ur, cmd_str, cb,  user_data);\r
+       g_free(cmd_str);\r
+       return ret;\r
+}\r
+\r
+static TReturn s_ss_manage_call_3_send(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)\r
+{\r
+       char* cmd_str = NULL;\r
+    gboolean ret = FALSE;\r
+\r
+    dbg("function enter");\r
+       cmd_str = g_strdup_printf("%s", "AT+CHLD=3");\r
+\r
+    ret =  s_ss_manage_call_send(o, ur, cmd_str, cb, user_data);\r
+       g_free(cmd_str);\r
+       return ret;\r
+}\r
+\r
+\r
+static TReturn s_ss_manage_call_4_send(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)\r
+{\r
+    char* cmd_str = NULL;\r
+    gboolean ret = FALSE;\r
+\r
+    dbg("function enter");\r
+       cmd_str = g_strdup_printf("%s", "AT+CHLD=4");\r
+\r
+    ret =  s_ss_manage_call_send(o, ur, cmd_str, cb, user_data);\r
+       g_free(cmd_str);\r
+       return ret;\r
+}\r
+\r
+static TReturn s_ss_manage_call_4dn_send(CoreObject* o, UserRequest* ur, const char* number, ConfirmCallback cb, void* user_data)\r
+{\r
+\r
+    char* cmd_str = NULL;\r
+    gboolean ret = FALSE;\r
+\r
+    dbg("function enter");\r
+       cmd_str = g_strdup_printf("%s%s", "AT+CHLD=4", number);\r
+\r
+    ret =  s_ss_manage_call_send(o, ur, cmd_str, cb, user_data);\r
+       g_free(cmd_str);\r
+\r
+       return ret;\r
+}\r
+\r
+gboolean s_ss_init(TcorePlugin *p, TcoreHal *h)\r
+{\r
+       CoreObject *so = 0, *co = 0;\r
+       struct property_call_info *data = 0;\r
+\r
+       so = tcore_ss_new(p, "ss", &ss_ops, h);\r
+       if (!so) {\r
+               dbg("[ error ] ss_new()");\r
+               return FALSE;\r
+       }\r
+\r
+       co = tcore_plugin_ref_core_object(p, "call");\r
+       if (!co) {\r
+               dbg("[ error ] plugin_ref_core_object");\r
+               return FALSE;\r
+       }\r
+\r
+       tcore_call_control_set_operations(co, &call_ops);\r
+\r
+       tcore_object_add_callback(so, "+CSSU", on_notification_ss_info, 0);\r
+    tcore_object_add_callback(so, "+CSSI", on_notification_ss_info, 0);\r
+       tcore_object_add_callback(so, "+CUSD", on_notification_ss_ussd, 0);\r
+\r
+       data = calloc(sizeof(struct property_call_info *), 1);\r
+       tcore_plugin_link_property(p, "SS", data);\r
+\r
+       return TRUE;\r
+}\r
+\r
+void s_ss_exit(TcorePlugin *p)\r
+{\r
+       CoreObject *o;\r
+       struct property_network_info *data;\r
+\r
+       o = tcore_plugin_ref_core_object(p, "ss");\r
+\r
+       data = tcore_plugin_ref_property(p, "SS");\r
+       if (data)\r
+               free(data);\r
+\r
+       tcore_ss_free(o);\r
+}\r