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