a2a105d8e55bcddc23e115b0b56c901d6e9b5c7d
[framework/telephony/tel-plugin-socket_communicator.git] / plugin / src / socket_sms.c
1 /*
2  * tel-plugin-socket-communicator
3  *
4  * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: Ja-young Gu <jygu@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  */
20
21 #include <stdio.h>
22 #include <string.h>
23 #include <stdlib.h>
24 #include <errno.h>
25 #include <glib-object.h>
26
27 #include <aul.h>
28 #include <bundle.h>
29 #include <tcore.h>
30 #include <server.h>
31 #include <plugin.h>
32 #include <hal.h>
33 #include <communicator.h>
34 #include <core_object.h>
35 #include <queue.h>
36 #include <user_request.h>
37 #include <util.h>
38 #include <co_call.h>
39
40 #include "sipc.h"
41 #include "tapi_common.h"
42 #include "module_req.h"
43
44 gboolean scomm_service_request_sms(unsigned int ch_id, Communicator *comm, TcorePlugin *plugin,  tapi_service_command_e cmd, gchar *data, void **outparam)
45 {
46         struct _sipc_marshal_object *reqObj;
47         GSList *co_smslist = NULL;
48         CoreObject *co_sms = NULL;
49         UserRequest *ur = NULL;
50         struct tcore_user_info ui = { 0, 0, 0, NULL, 0, 0, NULL };
51         TReturn ret = TCORE_RETURN_SUCCESS;
52         int request_id = 0;
53
54         struct treq_sms_send_umts_msg sendUmtsMsg = {0,};
55         struct treq_sms_send_cdma_msg cdmaMsg = {0,};
56         struct treq_sms_read_msg readMsg = {0,};
57         struct treq_sms_save_msg saveMsg = {0,};
58         struct treq_sms_delete_msg deleteMsg = {0,};
59         struct treq_sms_get_msg_count getMsgCnt;
60         struct treq_sms_get_sca getSca = {0,};
61         struct treq_sms_set_sca setSca = {0,};
62         struct treq_sms_get_cb_config getCbConfig;
63         struct treq_sms_set_cb_config setCbConfig = {0,};
64         struct treq_sms_set_mem_status memStatus = {0,};
65         struct treq_sms_get_pref_brearer getPrefBrearer;
66         struct treq_sms_set_pref_brearer setPrefBrearer = {0,};
67         struct treq_sms_set_delivery_report deliveryReport = {0,};
68         struct treq_sms_set_msg_status msgStatus = {0,};
69         struct treq_sms_get_params getParams = {0,};
70         struct treq_sms_set_params setParams = {0,};
71         struct treq_sms_get_paramcnt getParamCnt;
72
73         co_smslist = tcore_plugin_get_core_objects_bytype(plugin, CORE_OBJECT_TYPE_SMS);
74         if (!co_smslist) {
75                 err("[tcore_SMS] plugin_get_core_objects_bytype is NULL");
76                 return FALSE;
77         }
78
79         co_sms = (CoreObject *)co_smslist->data;
80         g_slist_free(co_smslist);
81
82         if (!co_sms) {
83                 err("[tcore_SMS] co_sms is NULL !!!");
84                 return FALSE;
85         }
86
87         ur = tcore_user_request_new(comm, tcore_plugin_get_description(plugin)->name);
88         ui.channel_id = ch_id;
89         ui.client_cmd = (unsigned int)cmd;
90
91         tcore_user_request_set_user_info(ur, &ui);
92
93         reqObj = sipc_util_marshal_object_deserializer(data);
94
95         switch (cmd) {
96                 case TAPI_SERVICE_SMS_SEND_UMTS_MSG: {
97                         gchar *sca;
98                         gchar *szData;
99
100                         sca = sipc_util_marshal_object_get_string(reqObj, "Sca");
101                         memcpy(&(sendUmtsMsg.msgDataPackage.sca[0]), sca, SMS_SMSP_ADDRESS_LEN);
102                         sendUmtsMsg.msgDataPackage.msgLength = sipc_util_marshal_object_get_int(reqObj, "MsgLength");
103                         szData = sipc_util_marshal_object_get_string(reqObj, "szData");
104                         memcpy(&(sendUmtsMsg.msgDataPackage.tpduData[0]), szData, SMS_SMDATA_SIZE_MAX + 1);
105                         sendUmtsMsg.more = sipc_util_marshal_object_get_int(reqObj, "More");
106                         
107                         tcore_user_request_set_data(ur, sizeof(struct treq_sms_send_umts_msg), &sendUmtsMsg);
108                         tcore_user_request_set_command(ur, TREQ_SMS_SEND_UMTS_MSG);
109
110                         ret = tcore_communicator_dispatch_request(comm, ur);
111                         if (ret != TCORE_RETURN_SUCCESS) {
112                                 // api_err = TAPI_API_OPERATION_FAILED;
113                                 err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
114                         }
115                         
116                         }
117                         break;
118
119                 case TAPI_SERVICE_SMS_SEND_CDMA_MSG: {
120                         
121                         cdmaMsg.more = sipc_util_marshal_object_get_int(reqObj, "More");
122                         cdmaMsg.cdmaMsgInfo.ParamMask = sipc_util_marshal_object_get_int(reqObj, "ParamMask");
123                         cdmaMsg.cdmaMsgInfo.MsgType = sipc_util_marshal_object_get_int(reqObj, "MsgType");
124                         
125                         switch(cdmaMsg.cdmaMsgInfo.MsgType)
126                         {
127                                 case SMS_MESSAGETYPE_SUBMIT: {
128                                         gchar *dstAddr_szAddress;
129                                         gchar *dstSubAddr_szAddress;
130                                         gchar *szData;
131                                         gchar *callBackNumer_szAddress;
132                                         
133                                         /* Origination address */
134                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DstAddr.Digit = sipc_util_marshal_object_get_int(reqObj, "DstAddr.Digit");
135                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DstAddr.NumberMode = sipc_util_marshal_object_get_int(reqObj, "DstAddr.NumberMode"); 
136                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DstAddr.NumberType = sipc_util_marshal_object_get_int(reqObj, "DstAddr.NumberType"); 
137                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DstAddr.NumberPlan = sipc_util_marshal_object_get_int(reqObj, "DstAddr.NumberPlan"); 
138                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DstAddr.szAddrLength = sipc_util_marshal_object_get_char(reqObj, "DstAddr.szAddrLength"); 
139                                         dstAddr_szAddress = sipc_util_marshal_object_get_string(reqObj, "DstAddr.szAddress"); 
140                                         memcpy(&(cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DstAddr.szAddress[0]), dstAddr_szAddress, SMS_MAXLENGTH_SMS_ADDRESS);
141                                         
142                                         /* Origination subaddress */
143                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DstSubAddr.SubType = sipc_util_marshal_object_get_int(reqObj, "DstSubAddr.SubType");
144                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DstSubAddr.Odd = sipc_util_marshal_object_get_char(reqObj, "DstSubAddr.Odd"); 
145                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DstSubAddr.szAddrLength = sipc_util_marshal_object_get_char(reqObj, "DstSubAddr.szAddrLength"); 
146                                         dstSubAddr_szAddress = sipc_util_marshal_object_get_string(reqObj, "DstSubAddr.szAddress");
147                                         memcpy(&(cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DstSubAddr.szAddress[0]), dstSubAddr_szAddress, SMS_MAXLENGTH_SMS_ADDRESS);
148                                         
149                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.TeleService = sipc_util_marshal_object_get_int(reqObj, "TeleService");
150                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.bBearerReplySeqRequest = sipc_util_marshal_object_get_int(reqObj, "bBearerReplySeqRequest");
151                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.ReplySeqNumber = sipc_util_marshal_object_get_char(reqObj, "ReplySeqNumber");
152                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.MsgId = sipc_util_marshal_object_get_int(reqObj, "MsgId");
153                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.MsgEncoding = sipc_util_marshal_object_get_int(reqObj, "MsgEncoding");
154                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.MsgLength = sipc_util_marshal_object_get_int(reqObj, "MsgLength");
155                                         szData = sipc_util_marshal_object_get_string(reqObj, "szData");
156                                         memcpy(&(cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.szData[0]), szData, SMS_MAXLENGTH_SMS_MO_USER_DATA);
157
158                                         /* Validity period - Absolute */
159                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.ValidityPeriodAbs.year = sipc_util_marshal_object_get_int(reqObj, "ValidityPeriodAbs.year");
160                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.ValidityPeriodAbs.month = sipc_util_marshal_object_get_int(reqObj, "ValidityPeriodAbs.month");
161                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.ValidityPeriodAbs.day = sipc_util_marshal_object_get_int(reqObj, "ValidityPeriodAbs.day");
162                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.ValidityPeriodAbs.hours = sipc_util_marshal_object_get_int(reqObj, "ValidityPeriodAbs.hours");
163                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.ValidityPeriodAbs.minutes = sipc_util_marshal_object_get_int(reqObj, "ValidityPeriodAbs.minutes");
164                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.ValidityPeriodAbs.seconds = sipc_util_marshal_object_get_int(reqObj, "ValidityPeriodAbs.seconds");
165
166                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.ValidityPeriodRel = sipc_util_marshal_object_get_char(reqObj, "ValidityPeriodRel");
167
168                                         /* Deferred delivery time - Absolute (not supported) */
169                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DeferredDelTimeAbs.year = sipc_util_marshal_object_get_int(reqObj, "DeferredDelTimeAbs.year");
170                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DeferredDelTimeAbs.month = sipc_util_marshal_object_get_int(reqObj, "DeferredDelTimeAbs.month");
171                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DeferredDelTimeAbs.day = sipc_util_marshal_object_get_int(reqObj, "DeferredDelTimeAbs.day");
172                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DeferredDelTimeAbs.hours = sipc_util_marshal_object_get_int(reqObj, "DeferredDelTimeAbs.hours");
173                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DeferredDelTimeAbs.minutes = sipc_util_marshal_object_get_int(reqObj, "DeferredDelTimeAbs.minutes");
174                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DeferredDelTimeAbs.seconds = sipc_util_marshal_object_get_int(reqObj, "DeferredDelTimeAbs.seconds");
175
176                                         /* Deferred delivery time - Relative (not supported) */
177                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DeferredDelTimeRel = sipc_util_marshal_object_get_char(reqObj, "DeferredDelTimeRel");
178                                         
179                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.Priority = sipc_util_marshal_object_get_int(reqObj, "Priority");
180                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.Privacy = sipc_util_marshal_object_get_int(reqObj, "Privacy");
181                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.bUserAckRequest = sipc_util_marshal_object_get_int(reqObj, "bUserAckRequest");
182                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.bDeliveryAckRequest = sipc_util_marshal_object_get_int(reqObj, "bDeliveryAckRequest");
183                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.AlertPriority= sipc_util_marshal_object_get_int(reqObj, "AlertPriority");
184                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.MsgLang= sipc_util_marshal_object_get_int(reqObj, "MsgLang");
185
186                                         /* Callback number address */
187                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.CallBackNumber.Digit = sipc_util_marshal_object_get_int(reqObj, "CallBackNumer.Digit");
188                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.CallBackNumber.NumberMode = sipc_util_marshal_object_get_int(reqObj, "CallBackNumer.NumberMode");
189                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.CallBackNumber.NumberType = sipc_util_marshal_object_get_int(reqObj, "CallBackNumer.NumberType");
190                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.CallBackNumber.NumberPlan = sipc_util_marshal_object_get_int(reqObj, "CallBackNumer.NumberPlan");
191                                         cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.CallBackNumber.szAddrLength = sipc_util_marshal_object_get_char(reqObj, "CallBackNumer.szAddrLength");
192                                         callBackNumer_szAddress = sipc_util_marshal_object_get_string(reqObj, "CallBackNumer.szAddress");
193                                         memcpy(&(cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.CallBackNumber.szAddress[0]), callBackNumer_szAddress, SMS_MAXLENGTH_SMS_ADDRESS);
194
195                                         }
196                                         break;
197                                         
198                                 case SMS_MESSAGETYPE_CANCEL: {
199                                         gchar *dstAddr_szAddress;
200                                         gchar *dstSubAddr_szAddress;
201                                         
202                                         /* Origination address */
203                                         cdmaMsg.cdmaMsgInfo.MsgData.outCancel.DstAddr.Digit = sipc_util_marshal_object_get_int(reqObj, "DstAddr.Digit");
204                                         cdmaMsg.cdmaMsgInfo.MsgData.outCancel.DstAddr.NumberMode = sipc_util_marshal_object_get_int(reqObj, "DstAddr.NumberMode"); 
205                                         cdmaMsg.cdmaMsgInfo.MsgData.outCancel.DstAddr.NumberType = sipc_util_marshal_object_get_int(reqObj, "DstAddr.NumberType"); 
206                                         cdmaMsg.cdmaMsgInfo.MsgData.outCancel.DstAddr.NumberPlan = sipc_util_marshal_object_get_int(reqObj, "DstAddr.NumberPlan"); 
207                                         cdmaMsg.cdmaMsgInfo.MsgData.outCancel.DstAddr.szAddrLength = sipc_util_marshal_object_get_char(reqObj, "DstAddr.szAddrLength"); 
208                                         dstAddr_szAddress = sipc_util_marshal_object_get_string(reqObj, "DstAddr.szAddress"); 
209                                         memcpy(&(cdmaMsg.cdmaMsgInfo.MsgData.outCancel.DstAddr.szAddress[0]), dstAddr_szAddress, SMS_MAXLENGTH_SMS_ADDRESS);
210                                         
211                                         /* Origination subaddress */
212                                         cdmaMsg.cdmaMsgInfo.MsgData.outCancel.DstSubAddr.SubType = sipc_util_marshal_object_get_int(reqObj, "DstSubAddr.SubType");
213                                         cdmaMsg.cdmaMsgInfo.MsgData.outCancel.DstSubAddr.Odd = sipc_util_marshal_object_get_char(reqObj, "DstSubAddr.Odd"); 
214                                         cdmaMsg.cdmaMsgInfo.MsgData.outCancel.DstSubAddr.szAddrLength = sipc_util_marshal_object_get_char(reqObj, "DstSubAddr.szAddrLength"); 
215                                         dstSubAddr_szAddress = sipc_util_marshal_object_get_string(reqObj, "DstSubAddr.szAddress");
216                                         memcpy(&(cdmaMsg.cdmaMsgInfo.MsgData.outCancel.DstSubAddr.szAddress[0]), dstSubAddr_szAddress, SMS_MAXLENGTH_SMS_ADDRESS);
217                                         
218                                         cdmaMsg.cdmaMsgInfo.MsgData.outCancel.TeleService = sipc_util_marshal_object_get_int(reqObj, "TeleService");
219                                         cdmaMsg.cdmaMsgInfo.MsgData.outCancel.bBearerReplySeqRequest = sipc_util_marshal_object_get_int(reqObj, "bBearerReplySeqRequest");
220                                         cdmaMsg.cdmaMsgInfo.MsgData.outCancel.ReplySeqNumber = sipc_util_marshal_object_get_char(reqObj, "ReplySeqNumber");
221                                         cdmaMsg.cdmaMsgInfo.MsgData.outCancel.MsgId = sipc_util_marshal_object_get_int(reqObj, "MsgId");
222
223                                         }
224                                         break;
225                                         
226                                 case SMS_MESSAGETYPE_USER_ACK: {
227                                         gchar *dstAddr_szAddress;
228                                         gchar *dstSubAddr_szAddress;
229                                         gchar *szData;
230                                         
231                                         /* Origination address */
232                                         cdmaMsg.cdmaMsgInfo.MsgData.outAck.DstAddr.Digit = sipc_util_marshal_object_get_int(reqObj, "DstAddr.Digit");
233                                         cdmaMsg.cdmaMsgInfo.MsgData.outAck.DstAddr.NumberMode = sipc_util_marshal_object_get_int(reqObj, "DstAddr.NumberMode"); 
234                                         cdmaMsg.cdmaMsgInfo.MsgData.outAck.DstAddr.NumberType = sipc_util_marshal_object_get_int(reqObj, "DstAddr.NumberType"); 
235                                         cdmaMsg.cdmaMsgInfo.MsgData.outAck.DstAddr.NumberPlan = sipc_util_marshal_object_get_int(reqObj, "DstAddr.NumberPlan"); 
236                                         cdmaMsg.cdmaMsgInfo.MsgData.outAck.DstAddr.szAddrLength = sipc_util_marshal_object_get_char(reqObj, "DstAddr.szAddrLength"); 
237                                         dstAddr_szAddress = sipc_util_marshal_object_get_string(reqObj, "DstAddr.szAddress"); 
238                                         memcpy(&(cdmaMsg.cdmaMsgInfo.MsgData.outAck.DstAddr.szAddress[0]), dstAddr_szAddress, SMS_MAXLENGTH_SMS_ADDRESS);
239                                         
240                                         /* Origination subaddress */
241                                         cdmaMsg.cdmaMsgInfo.MsgData.outAck.DstSubAddr.SubType = sipc_util_marshal_object_get_int(reqObj, "DstSubAddr.SubType");
242                                         cdmaMsg.cdmaMsgInfo.MsgData.outAck.DstSubAddr.Odd = sipc_util_marshal_object_get_char(reqObj, "DstSubAddr.Odd"); 
243                                         cdmaMsg.cdmaMsgInfo.MsgData.outAck.DstSubAddr.szAddrLength = sipc_util_marshal_object_get_char(reqObj, "DstSubAddr.szAddrLength"); 
244                                         dstSubAddr_szAddress = sipc_util_marshal_object_get_string(reqObj, "DstSubAddr.szAddress");
245                                         memcpy(&(cdmaMsg.cdmaMsgInfo.MsgData.outAck.DstSubAddr.szAddress[0]), dstSubAddr_szAddress, SMS_MAXLENGTH_SMS_ADDRESS);
246                                         
247                                         cdmaMsg.cdmaMsgInfo.MsgData.outAck.TeleService = sipc_util_marshal_object_get_int(reqObj, "TeleService");
248                                         cdmaMsg.cdmaMsgInfo.MsgData.outAck.bBearerReplySeqRequest = sipc_util_marshal_object_get_int(reqObj, "bBearerReplySeqRequest");
249                                         cdmaMsg.cdmaMsgInfo.MsgData.outAck.ReplySeqNumber = sipc_util_marshal_object_get_char(reqObj, "ReplySeqNumber");
250                                         cdmaMsg.cdmaMsgInfo.MsgData.outAck.MsgId = sipc_util_marshal_object_get_int(reqObj, "MsgId");
251                                         cdmaMsg.cdmaMsgInfo.MsgData.outAck.MsgEncoding = sipc_util_marshal_object_get_int(reqObj, "MsgEncoding");
252                                         cdmaMsg.cdmaMsgInfo.MsgData.outAck.MsgLength = sipc_util_marshal_object_get_int(reqObj, "MsgLength");
253                                         szData = sipc_util_marshal_object_get_string(reqObj, "szData");
254                                         memcpy(&(cdmaMsg.cdmaMsgInfo.MsgData.outAck.szData[0]), szData, SMS_MAXLENGTH_SMS_MO_USER_DATA);
255                                         cdmaMsg.cdmaMsgInfo.MsgData.outAck.UserResponseCode = sipc_util_marshal_object_get_char(reqObj, "UserResponseCode");
256
257                                         }
258                                         break;
259                                 default:
260                                         break;
261                         }
262                         
263                         tcore_user_request_set_data(ur, sizeof(struct treq_sms_send_cdma_msg), &cdmaMsg);
264                         tcore_user_request_set_command(ur, TREQ_SMS_SEND_CDMA_MSG);
265
266                         ret = tcore_communicator_dispatch_request(comm, ur);
267                         if (ret != TCORE_RETURN_SUCCESS) {
268                                 // api_err = TAPI_API_OPERATION_FAILED;
269                                 err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);                               
270                         }
271                         
272                         }
273                         break;
274
275                 case TAPI_SERVICE_SMS_READ_MSG: {
276                         
277                         readMsg.index = sipc_util_marshal_object_get_int(reqObj, "Index");
278
279                         tcore_user_request_set_data(ur, sizeof(struct treq_sms_read_msg), &readMsg);
280                         tcore_user_request_set_command(ur, TREQ_SMS_READ_MSG);
281
282                         ret = tcore_communicator_dispatch_request(comm, ur);
283                         if (ret != TCORE_RETURN_SUCCESS) {
284                                 // api_err = TAPI_API_OPERATION_FAILED;
285                                 err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);                               
286                         }
287
288                         }
289                         break;
290
291                 case TAPI_SERVICE_SMS_SAVE_MSG: {
292                         gchar *sca;
293                         gchar *szData;
294
295                         saveMsg.simIndex = sipc_util_marshal_object_get_int(reqObj, "Index");
296                         saveMsg.msgStatus = sipc_util_marshal_object_get_int(reqObj, "MsgStatus");
297                         sca = sipc_util_marshal_object_get_string(reqObj, "Sca");
298                         memcpy(&(saveMsg.msgDataPackage.sca[0]), sca, SMS_SMSP_ADDRESS_LEN);
299                         saveMsg.msgDataPackage.msgLength = sipc_util_marshal_object_get_int(reqObj, "MsgLength");
300                         szData = sipc_util_marshal_object_get_string(reqObj, "szData");
301                         memcpy(saveMsg.msgDataPackage.tpduData, szData, SMS_SMDATA_SIZE_MAX + 1);
302
303                         tcore_user_request_set_data(ur, sizeof(struct treq_sms_save_msg), &saveMsg);
304                         tcore_user_request_set_command(ur, TREQ_SMS_SAVE_MSG);
305
306                         ret = tcore_communicator_dispatch_request(comm, ur);
307                         if (ret != TCORE_RETURN_SUCCESS) {
308                                 // api_err = TAPI_API_OPERATION_FAILED;
309                                 err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);                               
310                         }
311
312                         }
313                         break;
314
315                 case TAPI_SERVICE_SMS_DELETE_MSG: {
316
317                         deleteMsg.index = sipc_util_marshal_object_get_int(reqObj, "Index");
318                                 
319                         tcore_user_request_set_data(ur, sizeof(struct treq_sms_delete_msg), &deleteMsg);
320                         tcore_user_request_set_command(ur, TREQ_SMS_DELETE_MSG);
321
322                         ret = tcore_communicator_dispatch_request(comm, ur);
323                         if (ret != TCORE_RETURN_SUCCESS) {
324                                 // api_err = TAPI_API_OPERATION_FAILED;
325                                 err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);                               
326                         }
327
328                         }
329                         break;
330
331                 case TAPI_SERVICE_SMS_GET_COUNT:
332                         tcore_user_request_set_data(ur, sizeof(struct treq_sms_get_msg_count), &getMsgCnt);
333                         tcore_user_request_set_command(ur, TREQ_SMS_GET_COUNT);
334
335                         ret = tcore_communicator_dispatch_request(comm, ur);
336                         if (ret != TCORE_RETURN_SUCCESS) {
337                                 // api_err = TAPI_API_OPERATION_FAILED;
338                                 err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);                               
339                         }
340
341                         break;
342
343                 case TAPI_SERVICE_SMS_GET_SCA: {
344                         
345                         getSca.index = sipc_util_marshal_object_get_int(reqObj, "Index");                       
346
347                         tcore_user_request_set_data(ur, sizeof(struct treq_sms_get_sca), &getSca);
348                         tcore_user_request_set_command(ur, TREQ_SMS_GET_SCA);
349
350                         ret = tcore_communicator_dispatch_request(comm, ur);
351                         if (ret != TCORE_RETURN_SUCCESS) {
352                                 // api_err = TAPI_API_OPERATION_FAILED;
353                                 err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);                               
354                         }
355
356                         }
357                         break;
358
359                 case TAPI_SERVICE_SMS_SET_SCA: {
360                         gchar *szDiallingNum;                   
361
362                         setSca.index = sipc_util_marshal_object_get_int(reqObj, "Index");
363                         setSca.scaInfo.dialNumLen = sipc_util_marshal_object_get_int(reqObj, "DialNumLen");
364                         setSca.scaInfo.typeOfNum = sipc_util_marshal_object_get_int(reqObj, "Ton");
365                         setSca.scaInfo.numPlanId = sipc_util_marshal_object_get_int(reqObj, "Npi");
366                         szDiallingNum = sipc_util_marshal_object_get_string(reqObj, "szDiallingNum");
367                         memcpy(&(setSca.scaInfo.diallingNum[0]), szDiallingNum, SMS_SMSP_ADDRESS_LEN + 1);
368
369                         if ((setSca.scaInfo.dialNumLen <= 0) || (setSca.scaInfo.dialNumLen > (SMS_MAX_SMS_SERVICE_CENTER_ADDR + 1)))
370                         {
371                                 err("[tcore_SMS] TAPI_API_INVALID_INPUT !!!");
372                         }
373                         else if(setSca.index != 0)
374                         {
375                                 err("[tcore_SMS] Index except 0 is supported");
376                                 // api_err = TAPI_API_NOT_SUPPORTED;
377                         }
378                         else
379                         {
380                                 tcore_user_request_set_data(ur, sizeof(struct treq_sms_set_sca), &setSca);
381                                 tcore_user_request_set_command(ur, TREQ_SMS_SET_SCA);
382
383                                 ret = tcore_communicator_dispatch_request(comm, ur);
384                                 if (ret != TCORE_RETURN_SUCCESS) {
385                                         //api_err = TAPI_API_OPERATION_FAILED;
386                                         err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
387                                 }
388                         }
389
390                         }
391                         break;
392
393                 case TAPI_SERVICE_SMS_GET_CB_CONFIG:
394                         tcore_user_request_set_data(ur, sizeof(struct treq_sms_get_cb_config), &getCbConfig);
395                         tcore_user_request_set_command(ur, TREQ_SMS_GET_CB_CONFIG);
396
397                         ret = tcore_communicator_dispatch_request(comm, ur);
398                         if (ret != TCORE_RETURN_SUCCESS) {
399                                 //api_err = TAPI_API_OPERATION_FAILED;
400                                 err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
401                         }
402
403                         break;
404
405                 case TAPI_SERVICE_SMS_SET_CB_CONFIG: {
406                         gchar *msgIDs;                  
407
408                         setCbConfig.bCBEnabled = sipc_util_marshal_object_get_int(reqObj, "bCBEnabled");
409                         setCbConfig.selectedId = sipc_util_marshal_object_get_char(reqObj, "SelectedId");
410                         setCbConfig.msgIdMaxCount = sipc_util_marshal_object_get_char(reqObj, "MsgIdMaxCount");
411                         setCbConfig.msgIdCount = sipc_util_marshal_object_get_int(reqObj, "MsgIdCount");
412                         msgIDs = sipc_util_marshal_object_get_string(reqObj, "MsgIDs");
413                         memcpy(&(setCbConfig.msgIDs[0]), msgIDs, SMS_GSM_SMS_CBMI_LIST_SIZE_MAX);
414
415                         tcore_user_request_set_data(ur, sizeof(struct treq_sms_set_cb_config), &setCbConfig);
416                         tcore_user_request_set_command(ur, TREQ_SMS_SET_CB_CONFIG);
417
418                         ret = tcore_communicator_dispatch_request(comm, ur);
419                         if (ret != TCORE_RETURN_SUCCESS) {
420                                 //api_err = TAPI_API_OPERATION_FAILED;
421                                 err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
422                         }
423
424                         }
425                         break;
426
427                 case TAPI_SERVICE_SMS_SET_MEM_STATUS: {
428
429                         memStatus.memory_status = sipc_util_marshal_object_get_int(reqObj, "memoryStatus");
430
431                         tcore_user_request_set_data(ur, sizeof(struct treq_sms_set_mem_status), &memStatus);
432                         tcore_user_request_set_command(ur, TREQ_SMS_SET_MEM_STATUS);
433
434                         ret = tcore_communicator_dispatch_request(comm, ur);
435                         if (ret != TCORE_RETURN_SUCCESS) {
436                                 //api_err = TAPI_API_OPERATION_FAILED;
437                                 err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
438                         }
439
440                         }
441                         break;
442
443                 case TAPI_SERVICE_SMS_GET_PREF_BEARER:
444                         tcore_user_request_set_data(ur, sizeof(struct treq_sms_get_pref_brearer), &getPrefBrearer);
445                         tcore_user_request_set_command(ur, TREQ_SMS_GET_PREF_BEARER);
446
447                         ret = tcore_communicator_dispatch_request(comm, ur);
448                         if (ret != TCORE_RETURN_SUCCESS) {
449                                 //api_err = TAPI_API_OPERATION_FAILED;
450                                 err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
451                         }
452
453                         break;
454
455                 case TAPI_SERVICE_SMS_SET_PREF_BEARER: {
456
457                         setPrefBrearer.svc = sipc_util_marshal_object_get_int(reqObj, "BearerType");            
458
459                         tcore_user_request_set_data(ur, sizeof(struct treq_sms_set_pref_brearer), &setPrefBrearer);
460                         tcore_user_request_set_command(ur, TREQ_SMS_SET_PREF_BEARER);
461
462                         ret = tcore_communicator_dispatch_request(comm, ur);
463                         if (ret != TCORE_RETURN_SUCCESS) {
464                                 //api_err = TAPI_API_OPERATION_FAILED;
465                                 err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
466                         }
467
468                         }
469                         break;
470
471                 case TAPI_SERVICE_SMS_SET_DELIVERY_REPORT: {
472                         gchar *sca;
473                         gchar *szData;
474                         
475                         sca = sipc_util_marshal_object_get_string(reqObj, "Sca");
476                         memcpy(&(deliveryReport.dataInfo.sca[0]), sca, SMS_SMSP_ADDRESS_LEN);
477                         deliveryReport.dataInfo.msgLength = sipc_util_marshal_object_get_int(reqObj, "MsgLength");
478                         szData = sipc_util_marshal_object_get_string(reqObj, "szData");
479                         memcpy(&(deliveryReport.dataInfo.tpduData[0]), szData, SMS_SMDATA_SIZE_MAX + 1);
480                         deliveryReport.rspType = sipc_util_marshal_object_get_int(reqObj, "RPCause");
481
482                         tcore_user_request_set_data(ur, sizeof(struct treq_sms_set_delivery_report), &deliveryReport);
483                         tcore_user_request_set_command(ur, TREQ_SMS_SET_DELIVERY_REPORT);
484
485                         ret = tcore_communicator_dispatch_request(comm, ur);
486                         if (ret != TCORE_RETURN_SUCCESS) {
487                                 //api_err = TAPI_API_OPERATION_FAILED;
488                                 err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
489                         }
490                         
491                         }
492                         break;
493
494                 case TAPI_SERVICE_SMS_SET_MSG_STATUS: {
495
496                         msgStatus.index = sipc_util_marshal_object_get_int(reqObj, "Index");
497                         msgStatus.msgStatus = sipc_util_marshal_object_get_int(reqObj, "MsgStatus");
498                         
499                         tcore_user_request_set_data(ur, sizeof(struct treq_sms_set_msg_status), &msgStatus);
500                         tcore_user_request_set_command(ur, TREQ_SMS_SET_MSG_STATUS);
501
502                         ret = tcore_communicator_dispatch_request(comm, ur);
503                         if (ret != TCORE_RETURN_SUCCESS) {
504                                 //api_err = TAPI_API_OPERATION_FAILED;
505                                 err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
506                         }
507
508                         }
509                         break;
510
511                 case TAPI_SERVICE_SMS_GET_PARAMS: {
512
513                         getParams.index = sipc_util_marshal_object_get_int(reqObj, "Index");
514
515                         tcore_user_request_set_data(ur, sizeof(struct treq_sms_get_params), &getParams);
516                         tcore_user_request_set_command(ur, TREQ_SMS_GET_PARAMS);
517
518                         ret = tcore_communicator_dispatch_request(comm, ur);
519                         if (ret != TCORE_RETURN_SUCCESS) {
520                                 //api_err = TAPI_API_OPERATION_FAILED;
521                                 err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
522                         }
523
524                         }
525                         break;
526
527                 case TAPI_SERVICE_SMS_SET_PARAMS: {
528                         gchar   *szAlphaId;
529                         gchar   *destAddr_szDiallingNum;
530                         gchar   *svcCntrAddr_szDiallingNum;
531
532                         setParams.params.recordIndex = sipc_util_marshal_object_get_char(reqObj, "RecordIndex");
533                         setParams.params.recordLen = sipc_util_marshal_object_get_char(reqObj, "RecordLen");
534                         setParams.params.alphaIdLen = sipc_util_marshal_object_get_int(reqObj, "AlphaIdLen");
535                         szAlphaId = sipc_util_marshal_object_get_string(reqObj, "szAlphaId");
536                         memcpy(&(setParams.params.szAlphaId[0]), szAlphaId, SMS_SMSP_ALPHA_ID_LEN_MAX + 1);
537                         setParams.params.paramIndicator = sipc_util_marshal_object_get_char(reqObj, "ParamIndicator");
538                         
539                         setParams.params.tpDestAddr.dialNumLen = sipc_util_marshal_object_get_int(reqObj, "DestAddr.DialNumLen");
540                         setParams.params.tpDestAddr.typeOfNum = sipc_util_marshal_object_get_int(reqObj, "DestAddr.Ton");
541                         setParams.params.tpDestAddr.numPlanId = sipc_util_marshal_object_get_int(reqObj, "DestAddr.Npi");
542                         destAddr_szDiallingNum = sipc_util_marshal_object_get_string(reqObj, "DestAddr.szDiallingNum");
543                         memcpy(&(setParams.params.tpDestAddr.diallingNum[0]), destAddr_szDiallingNum, SMS_SMSP_ADDRESS_LEN + 1);
544                         
545                         setParams.params.tpSvcCntrAddr.dialNumLen = sipc_util_marshal_object_get_int(reqObj, "SvcCntrAddr.DialNumLen");
546                         setParams.params.tpSvcCntrAddr.typeOfNum = sipc_util_marshal_object_get_int(reqObj, "SvcCntrAddr.Ton");
547                         setParams.params.tpSvcCntrAddr.numPlanId = sipc_util_marshal_object_get_int(reqObj, "SvcCntrAddr.Npi");
548                         svcCntrAddr_szDiallingNum = sipc_util_marshal_object_get_string(reqObj, "SvcCntrAddr.szDiallingNum");
549                         memcpy(&(setParams.params.tpSvcCntrAddr.diallingNum[0]), svcCntrAddr_szDiallingNum, SMS_SMSP_ADDRESS_LEN + 1);
550
551                         setParams.params.tpProtocolId = sipc_util_marshal_object_get_int(reqObj, "ProtocolId");
552                         setParams.params.tpDataCodingScheme = sipc_util_marshal_object_get_int(reqObj, "DataCodingScheme");
553                         setParams.params.tpValidityPeriod = sipc_util_marshal_object_get_int(reqObj, "ValidityPeriod");
554                         
555                         tcore_user_request_set_data(ur, sizeof(struct treq_sms_set_params), &setParams);
556                         tcore_user_request_set_command(ur, TREQ_SMS_SET_PARAMS);
557
558                         ret = tcore_communicator_dispatch_request(comm, ur);
559                         if (ret != TCORE_RETURN_SUCCESS) {
560                                 //api_err = TAPI_API_OPERATION_FAILED;
561                                 err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
562                         }
563
564                         }
565                         break;
566
567                 case TAPI_SERVICE_SMS_GET_PARAMCNT:
568                         tcore_user_request_set_data(ur, sizeof(struct treq_sms_get_paramcnt), &getParamCnt);
569                         tcore_user_request_set_command(ur, TREQ_SMS_GET_PARAMCNT);
570
571                         ret = tcore_communicator_dispatch_request(comm, ur);
572                         if (ret != TCORE_RETURN_SUCCESS) {
573                                 //api_err = TAPI_API_OPERATION_FAILED;
574                                 err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
575                         }
576
577                         break;
578 #if 0   // JYGU need to check TAPI_CS_NETTEXT_DEVICEREADY, TAPI_CS_NETTEXT_DEVICESTATUS with MMFW
579                 case TAPI_CS_NETTEXT_DEVICEREADY:
580                         dbg("[tcore_SMS] internal operation, please check TAPI_CS_NETTEXT_DEVICEREADY with MMFW !!!");
581                         api_err = TAPI_API_OPERATION_FAILED;
582                         break;
583
584                 case TAPI_CS_NETTEXT_DEVICESTATUS:
585                         {
586                                 int device_status = 0x01;
587                                 dbg("[tcore_SMS] internal operation, please check TAPI_CS_NETTEXT_DEVICESTATUS with MMFW !!!");
588                                 // JYGU g_array_append_vals(*out_param3, &device_status, sizeof(int));
589                         }
590                         break;
591 #endif
592                 default:
593                         //api_err = TAPI_API_NOT_SUPPORTED;
594                         err("[tcore_SMS] NOT support command  [0x%x] !!!", cmd);
595                         break;
596         }
597
598         dbg("[tcore_SMS] request command[0x%x], ret = 0x%x", cmd, ret);
599
600         return TRUE;
601 }
602
603 gboolean scomm_service_response_sms(Communicator *comm, UserRequest *ur, enum tcore_response_command command, unsigned int data_len, const void *data)
604 {
605         int ret = 0;
606
607         gboolean result = TRUE; int err_cause = 0;
608         gchar *out_d= NULL, *serial_d = NULL;
609         struct custom_data *ctx = NULL;
610         const struct tcore_user_info *ui;
611
612         sipc_server_t *s = NULL;
613         struct _tapi_header hdr;
614         struct _sipc_marshal_object* respObj = NULL;
615
616         memset(&hdr, 0, sizeof(struct _tapi_header));
617
618         ctx = tcore_communicator_ref_user_data(comm);
619         if (!ctx) {
620                 dbg("user_data is NULL");
621                 return FALSE;
622         }
623
624         ui = tcore_user_request_ref_user_info(ur);
625         s = ctx->sk_server;
626
627         dbg("[tcore_SMS] application channel id(%d), Command = [0x%x], data_len = %d", ui->channel_id, command, data_len);
628         hdr.cmd = (tapi_service_command_e)ui->client_cmd;
629         
630         respObj = sipc_util_marshal_object_create();
631
632         switch (command) {
633                 case TRESP_SMS_SEND_UMTS_MSG: {
634                         const struct tresp_sms_send_umts_msg *resp = data;
635
636                         dbg("resp->result = 0x%x", resp->result);
637
638                         sipc_util_marshal_object_add_data(respObj, "Result", (void *)&(resp->result), SIPC_MARSHAL_DATA_INT_TYPE);
639                         sipc_util_marshal_object_add_data(respObj, "Sca", (void *)&(resp->dataInfo.sca[0]), TAPI_OBJECT_DATA_TYPE_STRING);
640                         sipc_util_marshal_object_add_data(respObj, "MsgLength", (void *)&(resp->dataInfo.msgLength), TAPI_OBJECT_DATA_TYPE_INT);
641                         sipc_util_marshal_object_add_data(respObj, "szData", (void *)&(resp->dataInfo.tpduData[0]), TAPI_OBJECT_DATA_TYPE_STRING);
642                         }
643                         break;
644
645                 case TRESP_SMS_SEND_CDMA_MSG: {
646                         const struct tresp_sms_send_cdma_msg *resp = data;
647
648                         dbg("resp->result = 0x%x", resp->result);
649
650                         sipc_util_marshal_object_add_data(respObj, "Result", (void *)&(resp->result), TAPI_OBJECT_DATA_TYPE_INT);
651                         sipc_util_marshal_object_add_data(respObj, "ReplySeqNumber", (void *)&(resp->causeCode.ReplySeqNumber), TAPI_OBJECT_DATA_TYPE_CHAR);
652                         sipc_util_marshal_object_add_data(respObj, "ErrClass", (void *)&(resp->causeCode.ErrClass), TAPI_OBJECT_DATA_TYPE_INT);
653                         sipc_util_marshal_object_add_data(respObj, "Cause", (void *)&(resp->causeCode.Cause), TAPI_OBJECT_DATA_TYPE_CHAR);                                      
654                         }
655                         break;
656
657                 case TRESP_SMS_READ_MSG: {
658                         const struct tresp_sms_read_msg *resp = data;
659
660                         dbg("resp->result = 0x%x", resp->result);
661
662                         sipc_util_marshal_object_add_data(respObj, "Result", (void *)&(resp->result), SIPC_MARSHAL_DATA_INT_TYPE);
663                         sipc_util_marshal_object_add_data(respObj, "Index", (void *)&(resp->dataInfo.simIndex), SIPC_MARSHAL_DATA_INT_TYPE);
664                         sipc_util_marshal_object_add_data(respObj, "MsgStatus", (void *)&(resp->dataInfo.msgStatus), SIPC_MARSHAL_DATA_INT_TYPE);
665                         sipc_util_marshal_object_add_data(respObj, "Sca", (void *)&(resp->dataInfo.smsData.sca[0]), TAPI_OBJECT_DATA_TYPE_STRING);
666                         sipc_util_marshal_object_add_data(respObj, "MsgLength", (void *)&(resp->dataInfo.smsData.msgLength), TAPI_OBJECT_DATA_TYPE_INT);
667                         sipc_util_marshal_object_add_data(respObj, "szData", (void *)&(resp->dataInfo.smsData.tpduData[0]), TAPI_OBJECT_DATA_TYPE_STRING);
668                         }
669                         break;
670
671                 case TRESP_SMS_SAVE_MSG: {
672                         const struct tresp_sms_save_msg *resp = data;
673
674                         dbg("resp->result = 0x%x", resp->result);
675
676                         sipc_util_marshal_object_add_data(respObj, "Result", (void *)&(resp->result), SIPC_MARSHAL_DATA_INT_TYPE);
677                         sipc_util_marshal_object_add_data(respObj, "Index", (void *)&(resp->index), SIPC_MARSHAL_DATA_INT_TYPE);
678                         }
679                         break;
680
681                 case TRESP_SMS_DELETE_MSG: {
682                         const struct tresp_sms_delete_msg *resp = data;
683
684                         dbg("resp->result = 0x%x", resp->result);
685
686                         sipc_util_marshal_object_add_data(respObj, "Result", (void *)&(resp->result), SIPC_MARSHAL_DATA_INT_TYPE);
687                         sipc_util_marshal_object_add_data(respObj, "Index", (void *)&(resp->index), SIPC_MARSHAL_DATA_INT_TYPE);
688                         }
689                         break;
690
691                 case TRESP_SMS_GET_STORED_MSG_COUNT: {
692                         const struct tresp_sms_get_storedMsgCnt *resp = data;
693
694                         dbg("resp->result = 0x%x", resp->result);
695
696                         sipc_util_marshal_object_add_data(respObj, "Result", (void *)&(resp->result), SIPC_MARSHAL_DATA_INT_TYPE);
697                         sipc_util_marshal_object_add_data(respObj, "TotalCount", (void *)&(resp->storedMsgCnt.totalCount), SIPC_MARSHAL_DATA_INT_TYPE);
698                         sipc_util_marshal_object_add_data(respObj, "UsedCount", (void *)&(resp->storedMsgCnt.usedCount), SIPC_MARSHAL_DATA_INT_TYPE);
699                         sipc_util_marshal_object_add_data(respObj, "IndexList", (void *)&(resp->storedMsgCnt.indexList[0]), TAPI_OBJECT_DATA_TYPE_STRING);
700                         }
701                         break;
702
703                 case TRESP_SMS_GET_SCA: {
704                         const struct tresp_sms_get_sca *resp = data;
705
706                         dbg("resp->result = 0x%x", resp->result);
707
708                         sipc_util_marshal_object_add_data(respObj, "Result", (void *)&(resp->result), TAPI_OBJECT_DATA_TYPE_INT);
709                         sipc_util_marshal_object_add_data(respObj, "DialNumLen", (void *)&(resp->scaAddress.dialNumLen), TAPI_OBJECT_DATA_TYPE_INT);
710                         sipc_util_marshal_object_add_data(respObj, "Ton", (void *)&(resp->scaAddress.typeOfNum), TAPI_OBJECT_DATA_TYPE_INT);
711                         sipc_util_marshal_object_add_data(respObj, "Npi", (void *)&(resp->scaAddress.numPlanId), TAPI_OBJECT_DATA_TYPE_INT);
712                         sipc_util_marshal_object_add_data(respObj, "szDiallingNum", (void *)&(resp->scaAddress.diallingNum[0]), TAPI_OBJECT_DATA_TYPE_STRING);                          
713                         }
714                         break;
715
716                 case TRESP_SMS_SET_SCA: {
717                         const struct tresp_sms_set_sca *resp = data;
718
719                         dbg("resp->result = 0x%x", resp->result);
720
721                         sipc_util_marshal_object_add_data(respObj, "Result", (void *)&(resp->result), TAPI_OBJECT_DATA_TYPE_INT);
722                         }
723                         break;
724
725                 case TRESP_SMS_GET_CB_CONFIG: {
726                         const struct tresp_sms_get_cb_config *resp = data;
727
728                         dbg("resp->result = 0x%x", resp->result);
729
730                         sipc_util_marshal_object_add_data(respObj, "Result", (void *)&(resp->result), TAPI_OBJECT_DATA_TYPE_INT);
731                         sipc_util_marshal_object_add_data(respObj, "bCBEnabled", (void *)&(resp->cbConfig.bCBEnabled), TAPI_OBJECT_DATA_TYPE_INT);
732                         sipc_util_marshal_object_add_data(respObj, "SelectedId", (void *)&(resp->cbConfig.selectedId), TAPI_OBJECT_DATA_TYPE_CHAR);
733                         sipc_util_marshal_object_add_data(respObj, "MsgIdMaxCount", (void *)&(resp->cbConfig.msgIdMaxCount), TAPI_OBJECT_DATA_TYPE_CHAR);
734                         sipc_util_marshal_object_add_data(respObj, "MsgIdCount", (void *)&(resp->cbConfig.msgIdCount), TAPI_OBJECT_DATA_TYPE_INT);
735                         sipc_util_marshal_object_add_data(respObj, "MsgIDs", (void *)&(resp->cbConfig.msgIDs[0]), TAPI_OBJECT_DATA_TYPE_STRING);
736                         }
737                         break;
738
739                 case TRESP_SMS_SET_CB_CONFIG: {
740                         const struct tresp_sms_set_cb_config *resp = data;
741
742                         dbg("resp->result = 0x%x", resp->result);
743
744                         sipc_util_marshal_object_add_data(respObj, "Result", (void *)&(resp->result), TAPI_OBJECT_DATA_TYPE_INT);
745                         }
746                         break;
747
748                 case TRESP_SMS_SET_MEM_STATUS: {
749                         const struct tresp_sms_set_mem_status *resp = data;
750
751                         dbg("resp->result = 0x%x", resp->result);
752
753                         sipc_util_marshal_object_add_data(respObj, "Result", (void *)&(resp->result), TAPI_OBJECT_DATA_TYPE_INT);
754                         }
755                         break;
756 #if 0
757                 case TRESP_SMS_GET_PREF_BEARER:
758                         ts_delivery_event(ctx->EvtDeliveryHandle, TAPI_EVENT_CLASS_NETTEXT, TAPI_EVENT_NETTEXT_GET_SMSBEARER_CNF,
759                                         appname, RequestId, status, sizeof(TelSmsBearerType_t), (void *) bearer);
760                         break;
761
762                 case TRESP_SMS_SET_PREF_BEARER:
763                         ts_delivery_event(ctx->EvtDeliveryHandle, TAPI_EVENT_CLASS_NETTEXT, TAPI_EVENT_NETTEXT_SET_REQUEST_CNF,
764                                         appname, RequestId, Status, sizeof(TelSmsCause_t), (void *) &RequestType);
765                         break;
766 #endif
767                 case TRESP_SMS_SET_DELIVERY_REPORT: {
768                         const struct tresp_sms_set_delivery_report *resp = data;
769
770                         dbg("resp->result = 0x%x", resp->result);
771
772                         sipc_util_marshal_object_add_data(respObj, "Result", (void *)&(resp->result), TAPI_OBJECT_DATA_TYPE_INT);
773                         }
774                         break;
775
776                 case TRESP_SMS_SET_MSG_STATUS: {
777                         const struct tresp_sms_set_mem_status *resp = data;
778
779                         dbg("resp->result = 0x%x", resp->result);
780
781                         sipc_util_marshal_object_add_data(respObj, "Result", (void *)&(resp->result), TAPI_OBJECT_DATA_TYPE_INT);
782                         }
783                         break;
784
785                 case TRESP_SMS_GET_PARAMS: {
786                         const struct tresp_sms_get_params *resp = data;
787
788                         dbg("resp->result = 0x%x", resp->result);
789
790                         sipc_util_marshal_object_add_data(respObj, "Result", (void *)&(resp->result), TAPI_OBJECT_DATA_TYPE_INT);
791                         sipc_util_marshal_object_add_data(respObj, "RecordIndex", (void *)&(resp->paramsInfo.recordIndex), TAPI_OBJECT_DATA_TYPE_CHAR);
792                         sipc_util_marshal_object_add_data(respObj, "RecordLen", (void *)&(resp->paramsInfo.recordLen), TAPI_OBJECT_DATA_TYPE_CHAR);
793                         sipc_util_marshal_object_add_data(respObj, "AlphaIdLen", (void *)&(resp->paramsInfo.alphaIdLen), TAPI_OBJECT_DATA_TYPE_INT);
794                         sipc_util_marshal_object_add_data(respObj, "szAlphaId", (void *)&(resp->paramsInfo.szAlphaId), TAPI_OBJECT_DATA_TYPE_STRING);
795                         sipc_util_marshal_object_add_data(respObj, "ParamIndicator", (void *)&(resp->paramsInfo.paramIndicator), TAPI_OBJECT_DATA_TYPE_CHAR);
796                         
797                         sipc_util_marshal_object_add_data(respObj, "DestAddr.DialNumLen", (void *)&(resp->paramsInfo.tpDestAddr.dialNumLen), TAPI_OBJECT_DATA_TYPE_INT);
798                         sipc_util_marshal_object_add_data(respObj, "DestAddr.Ton", (void *)&(resp->paramsInfo.tpDestAddr.typeOfNum), TAPI_OBJECT_DATA_TYPE_INT);
799                         sipc_util_marshal_object_add_data(respObj, "DestAddr.Npi", (void *)&(resp->paramsInfo.tpDestAddr.numPlanId), TAPI_OBJECT_DATA_TYPE_INT);
800                         sipc_util_marshal_object_add_data(respObj, "DestAddr.szDiallingNum", (void *)&(resp->paramsInfo.tpDestAddr.diallingNum), TAPI_OBJECT_DATA_TYPE_STRING);
801                         
802                         sipc_util_marshal_object_add_data(respObj, "SvcCntrAddr.DialNumLen", (void *)&(resp->paramsInfo.tpSvcCntrAddr.dialNumLen), TAPI_OBJECT_DATA_TYPE_INT);
803                         sipc_util_marshal_object_add_data(respObj, "SvcCntrAddr.Ton", (void *)&(resp->paramsInfo.tpSvcCntrAddr.typeOfNum), TAPI_OBJECT_DATA_TYPE_INT);
804                         sipc_util_marshal_object_add_data(respObj, "SvcCntrAddr.Npi", (void *)&(resp->paramsInfo.tpSvcCntrAddr.numPlanId), TAPI_OBJECT_DATA_TYPE_INT);
805                         sipc_util_marshal_object_add_data(respObj, "SvcCntrAddr.szDiallingNum", (void *)&(resp->paramsInfo.tpSvcCntrAddr.diallingNum), TAPI_OBJECT_DATA_TYPE_STRING);
806
807                         sipc_util_marshal_object_add_data(respObj, "ProtocolId", (void *)&(resp->paramsInfo.tpProtocolId), TAPI_OBJECT_DATA_TYPE_INT);
808                         sipc_util_marshal_object_add_data(respObj, "DataCodingScheme", (void *)&(resp->paramsInfo.tpDataCodingScheme), TAPI_OBJECT_DATA_TYPE_INT);
809                         sipc_util_marshal_object_add_data(respObj, "ValidityPeriod", (void *)&(resp->paramsInfo.tpValidityPeriod), TAPI_OBJECT_DATA_TYPE_INT);                          
810                         }
811                         break;
812
813                 case TRESP_SMS_SET_PARAMS:{
814                         const struct tresp_sms_set_params *resp = data;
815
816                         dbg("resp->result = 0x%x", resp->result);
817
818                         sipc_util_marshal_object_add_data(respObj, "Result", (void *)&(resp->result), TAPI_OBJECT_DATA_TYPE_INT);
819                         }
820                         break;
821
822                 case TRESP_SMS_GET_PARAMCNT: {
823                         const struct tresp_sms_get_paramcnt *resp = data;
824
825                         dbg("resp->result = 0x%x", resp->result);
826
827                         sipc_util_marshal_object_add_data(respObj, "Result", (void *)&(resp->result), TAPI_OBJECT_DATA_TYPE_INT);
828                         sipc_util_marshal_object_add_data(respObj, "RecordCount", (void *)&(resp->recordCount), TAPI_OBJECT_DATA_TYPE_INT);
829                         }
830                         break;
831
832                 default:
833                         break;
834         }
835
836         if(respObj){
837                 serial_d = sipc_util_marshal_object_serializer(respObj);
838                 hdr.data_len = strlen(serial_d);
839                 sipc_util_marshal_object_destory(respObj);
840         }
841
842         out_d = g_new0(char, sizeof(struct _tapi_header)+hdr.data_len);
843         memcpy(out_d, &hdr, sizeof(struct _tapi_header));
844         if(serial_d){
845                 memcpy(out_d+sizeof(struct _tapi_header), serial_d, hdr.data_len);
846                 g_free(serial_d);
847         }
848
849         ret = sipc_server_send(s, ui->channel_id, out_d, sizeof(struct _tapi_header)+hdr.data_len, SIPC_SEND_DATA_ASYNC);
850         g_free(out_d);
851
852         if(ret < 0){
853                 return FALSE;
854         }
855
856         return TRUE;
857 }
858
859 gboolean scomm_service_notification_sms(Communicator *comm, CoreObject *source, enum tcore_notification_command command, unsigned int data_len, const void *data)
860 {
861         int ret = 0;
862         gboolean result = TRUE; int err_cause = 0;
863         gchar *out_d= NULL, *serial_d = NULL;
864
865         struct custom_data *ctx = NULL;
866         sipc_server_t *s = NULL;
867
868         struct _tapi_header hdr;
869         struct _sipc_marshal_object* notiObj = NULL;
870
871         memset(&hdr, 0, sizeof(struct _tapi_header));
872
873         ctx = tcore_communicator_ref_user_data(comm);
874         if (!ctx) {
875                 dbg("user_data is NULL");
876                 return FALSE;
877         }
878
879         s = ctx->sk_server;
880         dbg("[tcore_SMS]notification !!! (command = 0x%x, data_len = %d)", command, data_len);
881
882         notiObj = sipc_util_marshal_object_create();
883         
884         switch (command) {
885                 case TNOTI_SMS_INCOM_MSG: {
886                         const struct tnoti_sms_umts_msg *noti = data;
887
888                         sipc_util_marshal_object_add_data(notiObj, "Sca", (void *)&(noti->msgInfo.sca[0]), TAPI_OBJECT_DATA_TYPE_STRING);
889                         sipc_util_marshal_object_add_data(notiObj, "MsgLength", (void *)&(noti->msgInfo.msgLength), TAPI_OBJECT_DATA_TYPE_INT);
890                         sipc_util_marshal_object_add_data(notiObj, "szData", (void *)&(noti->msgInfo.tpduData[0]), TAPI_OBJECT_DATA_TYPE_STRING);                                               
891                         }
892                         break;
893                 case TNOTI_SMS_CB_INCOM_MSG: {
894                         const struct tnoti_sms_cellBroadcast_msg *noti = data;
895
896                         sipc_util_marshal_object_add_data(notiObj, "CbMsgType", (void *)&(noti->cbMsg.cbMsgType), TAPI_OBJECT_DATA_TYPE_INT);
897                         sipc_util_marshal_object_add_data(notiObj, "Length", (void *)&(noti->cbMsg.length), TAPI_OBJECT_DATA_TYPE_INT);
898                         sipc_util_marshal_object_add_data(notiObj, "szMsgData", (void *)&(noti->cbMsg.msgData[0]), TAPI_OBJECT_DATA_TYPE_STRING);                       
899                         }
900                         break;
901                 case TNOTI_SMS_INCOM_EX_MSG: {
902                          const struct tnoti_sms_cdma_msg *noti = data;
903
904                         sipc_util_marshal_object_add_data(notiObj, "ParamMask", (void *)&(noti->cdmaMsg.ParamMask), TAPI_OBJECT_DATA_TYPE_INT);
905                         sipc_util_marshal_object_add_data(notiObj, "MsgType", (void *)&(noti->cdmaMsg.MsgType), TAPI_OBJECT_DATA_TYPE_INT);
906
907                         switch(noti->cdmaMsg.MsgType)
908                         {
909                                 case SMS_MESSAGETYPE_DELIVER:
910                                         /* Origination address */
911                                         sipc_util_marshal_object_add_data(notiObj, "OrigAddr.Digit", (void *)&(noti->cdmaMsg.MsgData.inDeliver.OrigAddr.Digit), TAPI_OBJECT_DATA_TYPE_INT);
912                                         sipc_util_marshal_object_add_data(notiObj, "OrigAddr.NumberMode", (void *)&(noti->cdmaMsg.MsgData.inDeliver.OrigAddr.NumberMode), TAPI_OBJECT_DATA_TYPE_INT); 
913                                         sipc_util_marshal_object_add_data(notiObj, "OrigAddr.NumberType", (void *)&(noti->cdmaMsg.MsgData.inDeliver.OrigAddr.NumberType), TAPI_OBJECT_DATA_TYPE_INT); 
914                                         sipc_util_marshal_object_add_data(notiObj, "OrigAddr.NumberPlan", (void *)&(noti->cdmaMsg.MsgData.inDeliver.OrigAddr.NumberPlan), TAPI_OBJECT_DATA_TYPE_INT); 
915                                         sipc_util_marshal_object_add_data(notiObj, "OrigAddr.szAddrLength", (void *)&(noti->cdmaMsg.MsgData.inDeliver.OrigAddr.szAddrLength), TAPI_OBJECT_DATA_TYPE_CHAR); 
916                                         sipc_util_marshal_object_add_data(notiObj, "OrigAddr.szAddress", (void *)&(noti->cdmaMsg.MsgData.inDeliver.OrigAddr.szAddress[0]), TAPI_OBJECT_DATA_TYPE_STRING); 
917
918                                         /* Origination subaddress */
919                                         sipc_util_marshal_object_add_data(notiObj, "OrigSubAddr.SubType", (void *)&(noti->cdmaMsg.MsgData.inDeliver.OrigSubAddr.SubType), TAPI_OBJECT_DATA_TYPE_INT);
920                                         sipc_util_marshal_object_add_data(notiObj, "OrigSubAddr.Odd", (void *)&(noti->cdmaMsg.MsgData.inDeliver.OrigSubAddr.Odd), TAPI_OBJECT_DATA_TYPE_CHAR); 
921                                         sipc_util_marshal_object_add_data(notiObj, "OrigSubAddr.szAddrLength", (void *)&(noti->cdmaMsg.MsgData.inDeliver.OrigSubAddr.szAddrLength), TAPI_OBJECT_DATA_TYPE_CHAR); 
922                                         sipc_util_marshal_object_add_data(notiObj, "OrigSubAddr.szAddress", (void *)&(noti->cdmaMsg.MsgData.inDeliver.OrigSubAddr.szAddress[0]), TAPI_OBJECT_DATA_TYPE_STRING);
923
924                                         sipc_util_marshal_object_add_data(notiObj, "TeleService", (void *)&(noti->cdmaMsg.MsgData.inDeliver.TeleService), TAPI_OBJECT_DATA_TYPE_INT);
925                                         sipc_util_marshal_object_add_data(notiObj, "bBearerReplySeqRequest", (void *)&(noti->cdmaMsg.MsgData.inDeliver.bBearerReplySeqRequest), TAPI_OBJECT_DATA_TYPE_INT);
926                                         sipc_util_marshal_object_add_data(notiObj, "ReplySeqNumber", (void *)&(noti->cdmaMsg.MsgData.inDeliver.ReplySeqNumber), TAPI_OBJECT_DATA_TYPE_CHAR);
927                                         sipc_util_marshal_object_add_data(notiObj, "MsgId", (void *)&(noti->cdmaMsg.MsgData.inDeliver.MsgId), TAPI_OBJECT_DATA_TYPE_INT);
928                                         sipc_util_marshal_object_add_data(notiObj, "MsgEncoding", (void *)&(noti->cdmaMsg.MsgData.inDeliver.MsgEncoding), TAPI_OBJECT_DATA_TYPE_INT);
929                                         sipc_util_marshal_object_add_data(notiObj, "MsgLength", (void *)&(noti->cdmaMsg.MsgData.inDeliver.MsgLength), TAPI_OBJECT_DATA_TYPE_INT);
930                                         sipc_util_marshal_object_add_data(notiObj, "szData", (void *)&(noti->cdmaMsg.MsgData.inDeliver.szData[0]), TAPI_OBJECT_DATA_TYPE_STRING);
931
932                                         /* Message center time stamp */
933                                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.year", (void *)&(noti->cdmaMsg.MsgData.inDeliver.MessageCenterTimeStamp.year), TAPI_OBJECT_DATA_TYPE_INT);
934                                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.month", (void *)&(noti->cdmaMsg.MsgData.inDeliver.MessageCenterTimeStamp.month), TAPI_OBJECT_DATA_TYPE_INT);
935                                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.day", (void *)&(noti->cdmaMsg.MsgData.inDeliver.MessageCenterTimeStamp.day), TAPI_OBJECT_DATA_TYPE_INT);
936                                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.hours", (void *)&(noti->cdmaMsg.MsgData.inDeliver.MessageCenterTimeStamp.hours), TAPI_OBJECT_DATA_TYPE_INT);
937                                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.minutes", (void *)&(noti->cdmaMsg.MsgData.inDeliver.MessageCenterTimeStamp.minutes), TAPI_OBJECT_DATA_TYPE_INT);
938                                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.seconds", (void *)&(noti->cdmaMsg.MsgData.inDeliver.MessageCenterTimeStamp.seconds), TAPI_OBJECT_DATA_TYPE_INT);
939
940                                         /* Validity period - Absolute */
941                                         sipc_util_marshal_object_add_data(notiObj, "ValidityPeriodAbs.year", (void *)&(noti->cdmaMsg.MsgData.inDeliver.ValidityPeriodAbs.year), TAPI_OBJECT_DATA_TYPE_INT);
942                                         sipc_util_marshal_object_add_data(notiObj, "ValidityPeriodAbs.month", (void *)&(noti->cdmaMsg.MsgData.inDeliver.ValidityPeriodAbs.month), TAPI_OBJECT_DATA_TYPE_INT);
943                                         sipc_util_marshal_object_add_data(notiObj, "ValidityPeriodAbs.day", (void *)&(noti->cdmaMsg.MsgData.inDeliver.ValidityPeriodAbs.day), TAPI_OBJECT_DATA_TYPE_INT);
944                                         sipc_util_marshal_object_add_data(notiObj, "ValidityPeriodAbs.hours", (void *)&(noti->cdmaMsg.MsgData.inDeliver.ValidityPeriodAbs.hours), TAPI_OBJECT_DATA_TYPE_INT);
945                                         sipc_util_marshal_object_add_data(notiObj, "ValidityPeriodAbs.minutes", (void *)&(noti->cdmaMsg.MsgData.inDeliver.ValidityPeriodAbs.minutes), TAPI_OBJECT_DATA_TYPE_INT);
946                                         sipc_util_marshal_object_add_data(notiObj, "ValidityPeriodAbs.seconds", (void *)&(noti->cdmaMsg.MsgData.inDeliver.ValidityPeriodAbs.seconds), TAPI_OBJECT_DATA_TYPE_INT);
947
948                                         sipc_util_marshal_object_add_data(notiObj, "ValidityPeriodRel", (void *)&(noti->cdmaMsg.MsgData.inDeliver.ValidityPeriodRel), TAPI_OBJECT_DATA_TYPE_CHAR);
949
950                                         /* Deferred delivery time - Absolute (not supported) */
951                                         sipc_util_marshal_object_add_data(notiObj, "DeferredDelTimeAbs.year", (void *)&(noti->cdmaMsg.MsgData.inDeliver.DeferredDelTimeAbs.year), TAPI_OBJECT_DATA_TYPE_INT);
952                                         sipc_util_marshal_object_add_data(notiObj, "DeferredDelTimeAbs.month", (void *)&(noti->cdmaMsg.MsgData.inDeliver.DeferredDelTimeAbs.month), TAPI_OBJECT_DATA_TYPE_INT);
953                                         sipc_util_marshal_object_add_data(notiObj, "DeferredDelTimeAbs.day", (void *)&(noti->cdmaMsg.MsgData.inDeliver.DeferredDelTimeAbs.day), TAPI_OBJECT_DATA_TYPE_INT);
954                                         sipc_util_marshal_object_add_data(notiObj, "DeferredDelTimeAbs.hours", (void *)&(noti->cdmaMsg.MsgData.inDeliver.DeferredDelTimeAbs.hours), TAPI_OBJECT_DATA_TYPE_INT);
955                                         sipc_util_marshal_object_add_data(notiObj, "DeferredDelTimeAbs.minutes", (void *)&(noti->cdmaMsg.MsgData.inDeliver.DeferredDelTimeAbs.minutes), TAPI_OBJECT_DATA_TYPE_INT);
956                                         sipc_util_marshal_object_add_data(notiObj, "DeferredDelTimeAbs.seconds", (void *)&(noti->cdmaMsg.MsgData.inDeliver.DeferredDelTimeAbs.seconds), TAPI_OBJECT_DATA_TYPE_INT);
957
958                                         /* Deferred delivery time - Relative (not supported) */
959                                         sipc_util_marshal_object_add_data(notiObj, "DeferredDelTimeRel", (void *)&(noti->cdmaMsg.MsgData.inDeliver.DeferredDelTimeRel), TAPI_OBJECT_DATA_TYPE_CHAR);
960                                         
961                                         sipc_util_marshal_object_add_data(notiObj, "Priority", (void *)&(noti->cdmaMsg.MsgData.inDeliver.Priority), TAPI_OBJECT_DATA_TYPE_INT);
962                                         sipc_util_marshal_object_add_data(notiObj, "Privacy", (void *)&(noti->cdmaMsg.MsgData.inDeliver.Privacy), TAPI_OBJECT_DATA_TYPE_INT);
963                                         sipc_util_marshal_object_add_data(notiObj, "NumMsg", (void *)&(noti->cdmaMsg.MsgData.inDeliver.NumMsg), TAPI_OBJECT_DATA_TYPE_CHAR);
964                                         sipc_util_marshal_object_add_data(notiObj, "bUserAckRequest", (void *)&(noti->cdmaMsg.MsgData.inDeliver.bUserAckRequest), TAPI_OBJECT_DATA_TYPE_INT);
965                                         sipc_util_marshal_object_add_data(notiObj, "bDeliveryAckRequest", (void *)&(noti->cdmaMsg.MsgData.inDeliver.bDeliveryAckRequest), TAPI_OBJECT_DATA_TYPE_INT);
966                                         sipc_util_marshal_object_add_data(notiObj, "AlertPriority", (void *)&(noti->cdmaMsg.MsgData.inDeliver.AlertPriority), TAPI_OBJECT_DATA_TYPE_INT);
967                                         sipc_util_marshal_object_add_data(notiObj, "MsgLang", (void *)&(noti->cdmaMsg.MsgData.inDeliver.MsgLang), TAPI_OBJECT_DATA_TYPE_INT);
968
969                                         /* Callback number address */
970                                         sipc_util_marshal_object_add_data(notiObj, "CallBackNumer.Digit", (void *)&(noti->cdmaMsg.MsgData.inDeliver.CallBackNumer.Digit), TAPI_OBJECT_DATA_TYPE_INT);
971                                         sipc_util_marshal_object_add_data(notiObj, "CallBackNumer.NumberMode", (void *)&(noti->cdmaMsg.MsgData.inDeliver.CallBackNumer.NumberMode), TAPI_OBJECT_DATA_TYPE_INT); 
972                                         sipc_util_marshal_object_add_data(notiObj, "CallBackNumer.NumberType", (void *)&(noti->cdmaMsg.MsgData.inDeliver.CallBackNumer.NumberType), TAPI_OBJECT_DATA_TYPE_INT); 
973                                         sipc_util_marshal_object_add_data(notiObj, "CallBackNumer.NumberPlan", (void *)&(noti->cdmaMsg.MsgData.inDeliver.CallBackNumer.NumberPlan), TAPI_OBJECT_DATA_TYPE_INT); 
974                                         sipc_util_marshal_object_add_data(notiObj, "CallBackNumer.szAddrLength", (void *)&(noti->cdmaMsg.MsgData.inDeliver.CallBackNumer.szAddrLength), TAPI_OBJECT_DATA_TYPE_CHAR); 
975                                         sipc_util_marshal_object_add_data(notiObj, "CallBackNumer.szAddress", (void *)&(noti->cdmaMsg.MsgData.inDeliver.CallBackNumer.szAddress[0]), TAPI_OBJECT_DATA_TYPE_STRING);
976
977                                         sipc_util_marshal_object_add_data(notiObj, "Display", (void *)&(noti->cdmaMsg.MsgData.inDeliver.Display), TAPI_OBJECT_DATA_TYPE_INT);
978         
979                                         break;
980                                         
981                                 case SMS_MESSAGETYPE_DELIVERY_ACK:
982                                         /* Origination address */
983                                         sipc_util_marshal_object_add_data(notiObj, "OrigAddr.Digit", (void *)&(noti->cdmaMsg.MsgData.inAck.OrigAddr.Digit), TAPI_OBJECT_DATA_TYPE_INT);
984                                         sipc_util_marshal_object_add_data(notiObj, "OrigAddr.NumberMode", (void *)&(noti->cdmaMsg.MsgData.inAck.OrigAddr.NumberMode), TAPI_OBJECT_DATA_TYPE_INT); 
985                                         sipc_util_marshal_object_add_data(notiObj, "OrigAddr.NumberType", (void *)&(noti->cdmaMsg.MsgData.inAck.OrigAddr.NumberType), TAPI_OBJECT_DATA_TYPE_INT); 
986                                         sipc_util_marshal_object_add_data(notiObj, "OrigAddr.NumberPlan", (void *)&(noti->cdmaMsg.MsgData.inAck.OrigAddr.NumberPlan), TAPI_OBJECT_DATA_TYPE_INT); 
987                                         sipc_util_marshal_object_add_data(notiObj, "OrigAddr.szAddrLength", (void *)&(noti->cdmaMsg.MsgData.inAck.OrigAddr.szAddrLength), TAPI_OBJECT_DATA_TYPE_CHAR); 
988                                         sipc_util_marshal_object_add_data(notiObj, "OrigAddr.szAddress", (void *)&(noti->cdmaMsg.MsgData.inAck.OrigAddr.szAddress[0]), TAPI_OBJECT_DATA_TYPE_STRING); 
989
990                                         /* Origination subaddress */
991                                         sipc_util_marshal_object_add_data(notiObj, "OrigSubAddr.SubType", (void *)&(noti->cdmaMsg.MsgData.inAck.OrigSubAddr.SubType), TAPI_OBJECT_DATA_TYPE_INT);
992                                         sipc_util_marshal_object_add_data(notiObj, "OrigSubAddr.Odd", (void *)&(noti->cdmaMsg.MsgData.inAck.OrigSubAddr.Odd), TAPI_OBJECT_DATA_TYPE_CHAR); 
993                                         sipc_util_marshal_object_add_data(notiObj, "OrigSubAddr.szAddrLength", (void *)&(noti->cdmaMsg.MsgData.inAck.OrigSubAddr.szAddrLength), TAPI_OBJECT_DATA_TYPE_CHAR); 
994                                         sipc_util_marshal_object_add_data(notiObj, "OrigSubAddr.szAddress", (void *)&(noti->cdmaMsg.MsgData.inAck.OrigSubAddr.szAddress), TAPI_OBJECT_DATA_TYPE_CHAR);
995
996                                         sipc_util_marshal_object_add_data(notiObj, "TeleService", (void *)&(noti->cdmaMsg.MsgData.inAck.TeleService), TAPI_OBJECT_DATA_TYPE_INT);
997                                         sipc_util_marshal_object_add_data(notiObj, "bBearerReplySeqRequest", (void *)&(noti->cdmaMsg.MsgData.inAck.bBearerReplySeqRequest), TAPI_OBJECT_DATA_TYPE_INT);
998                                         sipc_util_marshal_object_add_data(notiObj, "ReplySeqNumber", (void *)&(noti->cdmaMsg.MsgData.inAck.ReplySeqNumber), TAPI_OBJECT_DATA_TYPE_CHAR);
999                                         sipc_util_marshal_object_add_data(notiObj, "MsgId", (void *)&(noti->cdmaMsg.MsgData.inAck.MsgId), TAPI_OBJECT_DATA_TYPE_INT);
1000                                         sipc_util_marshal_object_add_data(notiObj, "MsgEncoding", (void *)&(noti->cdmaMsg.MsgData.inAck.MsgEncoding), TAPI_OBJECT_DATA_TYPE_INT);
1001                                         sipc_util_marshal_object_add_data(notiObj, "MsgLength", (void *)&(noti->cdmaMsg.MsgData.inAck.MsgLength), TAPI_OBJECT_DATA_TYPE_INT);
1002                                         sipc_util_marshal_object_add_data(notiObj, "szData", (void *)&(noti->cdmaMsg.MsgData.inAck.szData[0]), TAPI_OBJECT_DATA_TYPE_STRING);
1003
1004                                         sipc_util_marshal_object_add_data(notiObj, "UserResponseCode", (void *)&(noti->cdmaMsg.MsgData.inAck.UserResponseCode), TAPI_OBJECT_DATA_TYPE_CHAR);
1005
1006                                         /* Message center time stamp */
1007                                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.year", (void *)&(noti->cdmaMsg.MsgData.inAck.MessageCenterTimeStamp.year), TAPI_OBJECT_DATA_TYPE_INT);
1008                                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.month", (void *)&(noti->cdmaMsg.MsgData.inAck.MessageCenterTimeStamp.month), TAPI_OBJECT_DATA_TYPE_INT);
1009                                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.day", (void *)&(noti->cdmaMsg.MsgData.inAck.MessageCenterTimeStamp.day), TAPI_OBJECT_DATA_TYPE_INT);
1010                                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.hours", (void *)&(noti->cdmaMsg.MsgData.inAck.MessageCenterTimeStamp.hours), TAPI_OBJECT_DATA_TYPE_INT);
1011                                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.minutes", (void *)&(noti->cdmaMsg.MsgData.inAck.MessageCenterTimeStamp.minutes), TAPI_OBJECT_DATA_TYPE_INT);
1012                                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.seconds", (void *)&(noti->cdmaMsg.MsgData.inAck.MessageCenterTimeStamp.seconds), TAPI_OBJECT_DATA_TYPE_INT);
1013
1014                                         break;
1015                                         
1016                                 case SMS_MESSAGETYPE_USER_ACK:
1017                                         /* Origination address */
1018                                         sipc_util_marshal_object_add_data(notiObj, "OrigAddr.Digit", (void *)&(noti->cdmaMsg.MsgData.inDeliverAck.OrigAddr.Digit), TAPI_OBJECT_DATA_TYPE_INT);
1019                                         sipc_util_marshal_object_add_data(notiObj, "OrigAddr.NumberMode", (void *)&(noti->cdmaMsg.MsgData.inDeliverAck.OrigAddr.NumberMode), TAPI_OBJECT_DATA_TYPE_INT); 
1020                                         sipc_util_marshal_object_add_data(notiObj, "OrigAddr.NumberType", (void *)&(noti->cdmaMsg.MsgData.inDeliverAck.OrigAddr.NumberType), TAPI_OBJECT_DATA_TYPE_INT); 
1021                                         sipc_util_marshal_object_add_data(notiObj, "OrigAddr.NumberPlan", (void *)&(noti->cdmaMsg.MsgData.inDeliverAck.OrigAddr.NumberPlan), TAPI_OBJECT_DATA_TYPE_INT); 
1022                                         sipc_util_marshal_object_add_data(notiObj, "OrigAddr.szAddrLength", (void *)&(noti->cdmaMsg.MsgData.inDeliverAck.OrigAddr.szAddrLength), TAPI_OBJECT_DATA_TYPE_CHAR); 
1023                                         sipc_util_marshal_object_add_data(notiObj, "OrigAddr.szAddress", (void *)&(noti->cdmaMsg.MsgData.inDeliverAck.OrigAddr.szAddress[0]), TAPI_OBJECT_DATA_TYPE_STRING); 
1024
1025                                         /* Origination subaddress */
1026                                         sipc_util_marshal_object_add_data(notiObj, "OrigSubAddr.SubType", (void *)&(noti->cdmaMsg.MsgData.inDeliverAck.OrigSubAddr.SubType), TAPI_OBJECT_DATA_TYPE_INT);
1027                                         sipc_util_marshal_object_add_data(notiObj, "OrigSubAddr.Odd", (void *)&(noti->cdmaMsg.MsgData.inDeliverAck.OrigSubAddr.Odd), TAPI_OBJECT_DATA_TYPE_CHAR); 
1028                                         sipc_util_marshal_object_add_data(notiObj, "OrigSubAddr.szAddrLength", (void *)&(noti->cdmaMsg.MsgData.inDeliverAck.OrigSubAddr.szAddrLength), TAPI_OBJECT_DATA_TYPE_CHAR); 
1029                                         sipc_util_marshal_object_add_data(notiObj, "OrigSubAddr.szAddress", (void *)&(noti->cdmaMsg.MsgData.inDeliverAck.OrigSubAddr.szAddress), TAPI_OBJECT_DATA_TYPE_CHAR);
1030
1031                                         sipc_util_marshal_object_add_data(notiObj, "TeleService", (void *)&(noti->cdmaMsg.MsgData.inDeliverAck.TeleService), TAPI_OBJECT_DATA_TYPE_INT);
1032                                         sipc_util_marshal_object_add_data(notiObj, "bBearerReplySeqRequest", (void *)&(noti->cdmaMsg.MsgData.inDeliverAck.bBearerReplySeqRequest), TAPI_OBJECT_DATA_TYPE_INT);
1033                                         sipc_util_marshal_object_add_data(notiObj, "ReplySeqNumber", (void *)&(noti->cdmaMsg.MsgData.inDeliverAck.ReplySeqNumber), TAPI_OBJECT_DATA_TYPE_CHAR);
1034                                         sipc_util_marshal_object_add_data(notiObj, "MsgId", (void *)&(noti->cdmaMsg.MsgData.inDeliverAck.MsgId), TAPI_OBJECT_DATA_TYPE_INT);
1035                                         sipc_util_marshal_object_add_data(notiObj, "MsgEncoding", (void *)&(noti->cdmaMsg.MsgData.inDeliverAck.MsgEncoding), TAPI_OBJECT_DATA_TYPE_INT);
1036                                         sipc_util_marshal_object_add_data(notiObj, "MsgLength", (void *)&(noti->cdmaMsg.MsgData.inDeliverAck.MsgLength), TAPI_OBJECT_DATA_TYPE_INT);
1037                                         sipc_util_marshal_object_add_data(notiObj, "szData", (void *)&(noti->cdmaMsg.MsgData.inDeliverAck.szData[0]), TAPI_OBJECT_DATA_TYPE_STRING);
1038
1039                                         /* Message center time stamp */
1040                                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.year", (void *)&(noti->cdmaMsg.MsgData.inDeliverAck.MessageCenterTimeStamp.year), TAPI_OBJECT_DATA_TYPE_INT);
1041                                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.month", (void *)&(noti->cdmaMsg.MsgData.inDeliverAck.MessageCenterTimeStamp.month), TAPI_OBJECT_DATA_TYPE_INT);
1042                                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.day", (void *)&(noti->cdmaMsg.MsgData.inDeliverAck.MessageCenterTimeStamp.day), TAPI_OBJECT_DATA_TYPE_INT);
1043                                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.hours", (void *)&(noti->cdmaMsg.MsgData.inDeliverAck.MessageCenterTimeStamp.hours), TAPI_OBJECT_DATA_TYPE_INT);
1044                                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.minutes", (void *)&(noti->cdmaMsg.MsgData.inDeliverAck.MessageCenterTimeStamp.minutes), TAPI_OBJECT_DATA_TYPE_INT);
1045                                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.seconds", (void *)&(noti->cdmaMsg.MsgData.inDeliverAck.MessageCenterTimeStamp.seconds), TAPI_OBJECT_DATA_TYPE_INT);  
1046                                         
1047                                         break;
1048                                 default:
1049                                         break;
1050                         }
1051                         }
1052                         break;
1053                 case TNOTI_SMS_CB_INCOM_EX_MSG: {
1054                          const struct tnoti_sms_cdma_msg *noti = data;
1055
1056                         sipc_util_marshal_object_add_data(notiObj, "ServiceCategory", (void *)&(noti->cdmaMsg.MsgData.inBc.ServiceCategory), TAPI_OBJECT_DATA_TYPE_INT);
1057
1058                         sipc_util_marshal_object_add_data(notiObj, "MsgId", (void *)&(noti->cdmaMsg.MsgData.inBc.MsgId), TAPI_OBJECT_DATA_TYPE_INT);
1059                         sipc_util_marshal_object_add_data(notiObj, "bBearerReplySeqRequest", (void *)&(noti->cdmaMsg.MsgData.inBc.bBearerReplySeqRequest), TAPI_OBJECT_DATA_TYPE_INT);
1060                         sipc_util_marshal_object_add_data(notiObj, "ReplySeqNumber", (void *)&(noti->cdmaMsg.MsgData.inBc.ReplySeqNumber), TAPI_OBJECT_DATA_TYPE_CHAR);
1061                         sipc_util_marshal_object_add_data(notiObj, "MsgEncoding", (void *)&(noti->cdmaMsg.MsgData.inBc.MsgEncoding), TAPI_OBJECT_DATA_TYPE_INT);
1062                         sipc_util_marshal_object_add_data(notiObj, "MsgLength", (void *)&(noti->cdmaMsg.MsgData.inBc.MsgLength), TAPI_OBJECT_DATA_TYPE_INT);
1063                         sipc_util_marshal_object_add_data(notiObj, "szData", (void *)&(noti->cdmaMsg.MsgData.inBc.szData[0]), TAPI_OBJECT_DATA_TYPE_STRING);
1064
1065                         /* Message center time stamp */
1066                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.year", (void *)&(noti->cdmaMsg.MsgData.inBc.MessageCenterTimeStamp.year), TAPI_OBJECT_DATA_TYPE_INT);
1067                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.month", (void *)&(noti->cdmaMsg.MsgData.inBc.MessageCenterTimeStamp.month), TAPI_OBJECT_DATA_TYPE_INT);
1068                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.day", (void *)&(noti->cdmaMsg.MsgData.inBc.MessageCenterTimeStamp.day), TAPI_OBJECT_DATA_TYPE_INT);
1069                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.hours", (void *)&(noti->cdmaMsg.MsgData.inBc.MessageCenterTimeStamp.hours), TAPI_OBJECT_DATA_TYPE_INT);
1070                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.minutes", (void *)&(noti->cdmaMsg.MsgData.inBc.MessageCenterTimeStamp.minutes), TAPI_OBJECT_DATA_TYPE_INT);
1071                         sipc_util_marshal_object_add_data(notiObj, "MessageCenterTimeStamp.seconds", (void *)&(noti->cdmaMsg.MsgData.inBc.MessageCenterTimeStamp.seconds), TAPI_OBJECT_DATA_TYPE_INT);
1072
1073                         /* Validity period - Absolute */
1074                         sipc_util_marshal_object_add_data(notiObj, "ValidityPeriodAbs.year", (void *)&(noti->cdmaMsg.MsgData.inBc.ValidityPeriodAbs.year), TAPI_OBJECT_DATA_TYPE_INT);
1075                         sipc_util_marshal_object_add_data(notiObj, "ValidityPeriodAbs.month", (void *)&(noti->cdmaMsg.MsgData.inBc.ValidityPeriodAbs.month), TAPI_OBJECT_DATA_TYPE_INT);
1076                         sipc_util_marshal_object_add_data(notiObj, "ValidityPeriodAbs.day", (void *)&(noti->cdmaMsg.MsgData.inBc.ValidityPeriodAbs.day), TAPI_OBJECT_DATA_TYPE_INT);
1077                         sipc_util_marshal_object_add_data(notiObj, "ValidityPeriodAbs.hours", (void *)&(noti->cdmaMsg.MsgData.inBc.ValidityPeriodAbs.hours), TAPI_OBJECT_DATA_TYPE_INT);
1078                         sipc_util_marshal_object_add_data(notiObj, "ValidityPeriodAbs.minutes", (void *)&(noti->cdmaMsg.MsgData.inBc.ValidityPeriodAbs.minutes), TAPI_OBJECT_DATA_TYPE_INT);
1079                         sipc_util_marshal_object_add_data(notiObj, "ValidityPeriodAbs.seconds", (void *)&(noti->cdmaMsg.MsgData.inBc.ValidityPeriodAbs.seconds), TAPI_OBJECT_DATA_TYPE_INT);
1080
1081                         sipc_util_marshal_object_add_data(notiObj, "ValidityPeriodRel", (void *)&(noti->cdmaMsg.MsgData.inBc.ValidityPeriodRel), TAPI_OBJECT_DATA_TYPE_CHAR);
1082                         
1083                         sipc_util_marshal_object_add_data(notiObj, "Priority", (void *)&(noti->cdmaMsg.MsgData.inBc.Priority), TAPI_OBJECT_DATA_TYPE_INT);
1084                         sipc_util_marshal_object_add_data(notiObj, "AlertPriority", (void *)&(noti->cdmaMsg.MsgData.inBc.AlertPriority), TAPI_OBJECT_DATA_TYPE_INT);
1085                         sipc_util_marshal_object_add_data(notiObj, "MsgLang", (void *)&(noti->cdmaMsg.MsgData.inBc.MsgLang), TAPI_OBJECT_DATA_TYPE_INT);
1086                         sipc_util_marshal_object_add_data(notiObj, "Display", (void *)&(noti->cdmaMsg.MsgData.inBc.Display), TAPI_OBJECT_DATA_TYPE_INT);
1087                         
1088                         }
1089                         break;
1090                 case TNOTI_SMS_MEMORY_STATUS: {
1091                         const struct tnoti_sms_memory_status *noti = data;
1092
1093                         sipc_util_marshal_object_add_data(notiObj, "MemStatus", (void *)&(noti->status), TAPI_OBJECT_DATA_TYPE_INT);
1094                         }
1095                         break;
1096                 case TNOTI_SMS_DEVICE_READY: {
1097                         const struct tnoti_sms_device_ready_status *noti = data;
1098
1099                         sipc_util_marshal_object_add_data(notiObj, "DeviceStatus", (void *)&(noti->status), TAPI_OBJECT_DATA_TYPE_INT);
1100                         }
1101                         break;
1102                 default:
1103                         break;
1104         }
1105         
1106         if(notiObj){
1107                 serial_d = sipc_util_marshal_object_serializer(notiObj);
1108                 hdr.data_len = strlen(serial_d);
1109                 sipc_util_marshal_object_destory(notiObj);
1110         }
1111
1112         out_d = g_new0(char, sizeof(struct _tapi_header)+hdr.data_len);
1113         memcpy(out_d, &hdr, sizeof(struct _tapi_header));
1114         if(serial_d){
1115                 memcpy(out_d+sizeof(struct _tapi_header), serial_d, hdr.data_len);
1116                 g_free(serial_d);
1117         }
1118
1119         ret = sipc_server_broadcast(s, out_d, sizeof(struct _tapi_header)+hdr.data_len);
1120         g_free(out_d);
1121
1122         if(ret < 0){
1123                 return FALSE;
1124         }
1125
1126         return TRUE;
1127 }