2 * tel-plugin-socket-communicator
4 * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Ja-young Gu <jygu@samsung.com>
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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.
34 #include <communicator.h>
37 #include <user_request.h>
40 #include "generated-code.h"
43 TReturn ret = TCORE_RETURN_SUCCESS;
46 on_sms_send_msg(TelephonySms *sms, GDBusMethodInvocation *invocation,
53 struct treq_sms_send_umts_msg sendUmtsMsg;
54 struct custom_data *ctx = user_data;
55 UserRequest *ur = NULL;
58 GVariantIter *iter = 0;
59 GVariant *inner_gv = 0;
61 if (!check_access_control (invocation, AC_SMS, "x"))
64 memset(&sendUmtsMsg, 0 , sizeof(struct treq_sms_send_umts_msg));
66 inner_gv = g_variant_get_variant( sca );
67 g_variant_get(inner_gv, "ay", &iter);
68 while( g_variant_iter_loop(iter, "y", &sendUmtsMsg.msgDataPackage.sca[i] ) ) {
70 if( i >= SMS_SMSP_ADDRESS_LEN )
74 sendUmtsMsg.msgDataPackage.msgLength = tpdu_length;
77 inner_gv = g_variant_get_variant( tpdu_data );
78 g_variant_get(inner_gv, "ay", &iter);
79 while( g_variant_iter_loop(iter, "y", &sendUmtsMsg.msgDataPackage.tpduData[i] ) ) {
81 if( i >= SMS_SMDATA_SIZE_MAX + 1 )
84 g_variant_iter_free(iter);
85 g_variant_unref(inner_gv);
87 sendUmtsMsg.more = moreMsg;
89 ur = MAKE_UR(ctx, sms, invocation);
90 tcore_user_request_set_data(ur, sizeof(struct treq_sms_send_umts_msg), &sendUmtsMsg);
91 tcore_user_request_set_command(ur, TREQ_SMS_SEND_UMTS_MSG);
93 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
94 if (ret != TCORE_RETURN_SUCCESS) {
95 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
96 tcore_user_request_unref(ur);
104 on_sms_send_cdma_msg(TelephonySms *sms, GDBusMethodInvocation *invocation,
107 const gchar *tpdu_data,
112 cdmaMsg.more = sipc_util_marshal_object_get_int(in_obj, "More");
113 cdmaMsg.cdmaMsgInfo.ParamMask = sipc_util_marshal_object_get_int(in_obj, "ParamMask");
114 cdmaMsg.cdmaMsgInfo.MsgType = sipc_util_marshal_object_get_int(in_obj, "MsgType");
116 switch(cdmaMsg.cdmaMsgInfo.MsgType)
118 case SMS_MESSAGETYPE_SUBMIT: {
119 gchar *dstAddr_szAddress;
120 gchar *dstSubAddr_szAddress;
122 gchar *callBackNumer_szAddress;
125 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DstAddr.Digit = sipc_util_marshal_object_get_int(in_obj, "DstAddr.Digit");
126 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DstAddr.NumberMode = sipc_util_marshal_object_get_int(in_obj, "DstAddr.NumberMode");
127 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DstAddr.NumberType = sipc_util_marshal_object_get_int(in_obj, "DstAddr.NumberType");
128 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DstAddr.NumberPlan = sipc_util_marshal_object_get_int(in_obj, "DstAddr.NumberPlan");
129 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DstAddr.szAddrLength = sipc_util_marshal_object_get_char(in_obj, "DstAddr.szAddrLength");
130 dstAddr_szAddress = sipc_util_marshal_object_get_string(in_obj, "DstAddr.szAddress");
131 memcpy(&(cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DstAddr.szAddress[0]), dstAddr_szAddress, SMS_MAXLENGTH_SMS_ADDRESS);
133 Origination subaddress
134 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DstSubAddr.SubType = sipc_util_marshal_object_get_int(in_obj, "DstSubAddr.SubType");
135 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DstSubAddr.Odd = sipc_util_marshal_object_get_char(in_obj, "DstSubAddr.Odd");
136 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DstSubAddr.szAddrLength = sipc_util_marshal_object_get_char(in_obj, "DstSubAddr.szAddrLength");
137 dstSubAddr_szAddress = sipc_util_marshal_object_get_string(in_obj, "DstSubAddr.szAddress");
138 memcpy(&(cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DstSubAddr.szAddress[0]), dstSubAddr_szAddress, SMS_MAXLENGTH_SMS_ADDRESS);
140 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.TeleService = sipc_util_marshal_object_get_int(in_obj, "TeleService");
141 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.bBearerReplySeqRequest = sipc_util_marshal_object_get_int(in_obj, "bBearerReplySeqRequest");
142 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.ReplySeqNumber = sipc_util_marshal_object_get_char(in_obj, "ReplySeqNumber");
143 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.MsgId = sipc_util_marshal_object_get_int(in_obj, "MsgId");
144 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.MsgEncoding = sipc_util_marshal_object_get_int(in_obj, "MsgEncoding");
145 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.MsgLength = sipc_util_marshal_object_get_int(in_obj, "MsgLength");
146 szData = sipc_util_marshal_object_get_string(in_obj, "szData");
147 memcpy(&(cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.szData[0]), szData, SMS_MAXLENGTH_SMS_MO_USER_DATA);
149 Validity period - Absolute
150 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.ValidityPeriodAbs.year = sipc_util_marshal_object_get_int(in_obj, "ValidityPeriodAbs.year");
151 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.ValidityPeriodAbs.month = sipc_util_marshal_object_get_int(in_obj, "ValidityPeriodAbs.month");
152 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.ValidityPeriodAbs.day = sipc_util_marshal_object_get_int(in_obj, "ValidityPeriodAbs.day");
153 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.ValidityPeriodAbs.hours = sipc_util_marshal_object_get_int(in_obj, "ValidityPeriodAbs.hours");
154 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.ValidityPeriodAbs.minutes = sipc_util_marshal_object_get_int(in_obj, "ValidityPeriodAbs.minutes");
155 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.ValidityPeriodAbs.seconds = sipc_util_marshal_object_get_int(in_obj, "ValidityPeriodAbs.seconds");
157 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.ValidityPeriodRel = sipc_util_marshal_object_get_char(in_obj, "ValidityPeriodRel");
159 Deferred delivery time - Absolute (not supported)
160 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DeferredDelTimeAbs.year = sipc_util_marshal_object_get_int(in_obj, "DeferredDelTimeAbs.year");
161 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DeferredDelTimeAbs.month = sipc_util_marshal_object_get_int(in_obj, "DeferredDelTimeAbs.month");
162 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DeferredDelTimeAbs.day = sipc_util_marshal_object_get_int(in_obj, "DeferredDelTimeAbs.day");
163 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DeferredDelTimeAbs.hours = sipc_util_marshal_object_get_int(in_obj, "DeferredDelTimeAbs.hours");
164 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DeferredDelTimeAbs.minutes = sipc_util_marshal_object_get_int(in_obj, "DeferredDelTimeAbs.minutes");
165 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DeferredDelTimeAbs.seconds = sipc_util_marshal_object_get_int(in_obj, "DeferredDelTimeAbs.seconds");
167 Deferred delivery time - Relative (not supported)
168 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.DeferredDelTimeRel = sipc_util_marshal_object_get_char(in_obj, "DeferredDelTimeRel");
170 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.Priority = sipc_util_marshal_object_get_int(in_obj, "Priority");
171 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.Privacy = sipc_util_marshal_object_get_int(in_obj, "Privacy");
172 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.bUserAckRequest = sipc_util_marshal_object_get_int(in_obj, "bUserAckRequest");
173 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.bDeliveryAckRequest = sipc_util_marshal_object_get_int(in_obj, "bDeliveryAckRequest");
174 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.AlertPriority= sipc_util_marshal_object_get_int(in_obj, "AlertPriority");
175 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.MsgLang= sipc_util_marshal_object_get_int(in_obj, "MsgLang");
177 Callback number address
178 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.CallBackNumber.Digit = sipc_util_marshal_object_get_int(in_obj, "CallBackNumer.Digit");
179 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.CallBackNumber.NumberMode = sipc_util_marshal_object_get_int(in_obj, "CallBackNumer.NumberMode");
180 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.CallBackNumber.NumberType = sipc_util_marshal_object_get_int(in_obj, "CallBackNumer.NumberType");
181 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.CallBackNumber.NumberPlan = sipc_util_marshal_object_get_int(in_obj, "CallBackNumer.NumberPlan");
182 cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.CallBackNumber.szAddrLength = sipc_util_marshal_object_get_char(in_obj, "CallBackNumer.szAddrLength");
183 callBackNumer_szAddress = sipc_util_marshal_object_get_string(in_obj, "CallBackNumer.szAddress");
184 memcpy(&(cdmaMsg.cdmaMsgInfo.MsgData.outSubmit.CallBackNumber.szAddress[0]), callBackNumer_szAddress, SMS_MAXLENGTH_SMS_ADDRESS);
189 case SMS_MESSAGETYPE_CANCEL: {
190 gchar *dstAddr_szAddress;
191 gchar *dstSubAddr_szAddress;
194 cdmaMsg.cdmaMsgInfo.MsgData.outCancel.DstAddr.Digit = sipc_util_marshal_object_get_int(in_obj, "DstAddr.Digit");
195 cdmaMsg.cdmaMsgInfo.MsgData.outCancel.DstAddr.NumberMode = sipc_util_marshal_object_get_int(in_obj, "DstAddr.NumberMode");
196 cdmaMsg.cdmaMsgInfo.MsgData.outCancel.DstAddr.NumberType = sipc_util_marshal_object_get_int(in_obj, "DstAddr.NumberType");
197 cdmaMsg.cdmaMsgInfo.MsgData.outCancel.DstAddr.NumberPlan = sipc_util_marshal_object_get_int(in_obj, "DstAddr.NumberPlan");
198 cdmaMsg.cdmaMsgInfo.MsgData.outCancel.DstAddr.szAddrLength = sipc_util_marshal_object_get_char(in_obj, "DstAddr.szAddrLength");
199 dstAddr_szAddress = sipc_util_marshal_object_get_string(in_obj, "DstAddr.szAddress");
200 memcpy(&(cdmaMsg.cdmaMsgInfo.MsgData.outCancel.DstAddr.szAddress[0]), dstAddr_szAddress, SMS_MAXLENGTH_SMS_ADDRESS);
202 Origination subaddress
203 cdmaMsg.cdmaMsgInfo.MsgData.outCancel.DstSubAddr.SubType = sipc_util_marshal_object_get_int(in_obj, "DstSubAddr.SubType");
204 cdmaMsg.cdmaMsgInfo.MsgData.outCancel.DstSubAddr.Odd = sipc_util_marshal_object_get_char(in_obj, "DstSubAddr.Odd");
205 cdmaMsg.cdmaMsgInfo.MsgData.outCancel.DstSubAddr.szAddrLength = sipc_util_marshal_object_get_char(in_obj, "DstSubAddr.szAddrLength");
206 dstSubAddr_szAddress = sipc_util_marshal_object_get_string(in_obj, "DstSubAddr.szAddress");
207 memcpy(&(cdmaMsg.cdmaMsgInfo.MsgData.outCancel.DstSubAddr.szAddress[0]), dstSubAddr_szAddress, SMS_MAXLENGTH_SMS_ADDRESS);
209 cdmaMsg.cdmaMsgInfo.MsgData.outCancel.TeleService = sipc_util_marshal_object_get_int(in_obj, "TeleService");
210 cdmaMsg.cdmaMsgInfo.MsgData.outCancel.bBearerReplySeqRequest = sipc_util_marshal_object_get_int(in_obj, "bBearerReplySeqRequest");
211 cdmaMsg.cdmaMsgInfo.MsgData.outCancel.ReplySeqNumber = sipc_util_marshal_object_get_char(in_obj, "ReplySeqNumber");
212 cdmaMsg.cdmaMsgInfo.MsgData.outCancel.MsgId = sipc_util_marshal_object_get_int(in_obj, "MsgId");
217 case SMS_MESSAGETYPE_USER_ACK: {
218 gchar *dstAddr_szAddress;
219 gchar *dstSubAddr_szAddress;
223 cdmaMsg.cdmaMsgInfo.MsgData.outAck.DstAddr.Digit = sipc_util_marshal_object_get_int(in_obj, "DstAddr.Digit");
224 cdmaMsg.cdmaMsgInfo.MsgData.outAck.DstAddr.NumberMode = sipc_util_marshal_object_get_int(in_obj, "DstAddr.NumberMode");
225 cdmaMsg.cdmaMsgInfo.MsgData.outAck.DstAddr.NumberType = sipc_util_marshal_object_get_int(in_obj, "DstAddr.NumberType");
226 cdmaMsg.cdmaMsgInfo.MsgData.outAck.DstAddr.NumberPlan = sipc_util_marshal_object_get_int(in_obj, "DstAddr.NumberPlan");
227 cdmaMsg.cdmaMsgInfo.MsgData.outAck.DstAddr.szAddrLength = sipc_util_marshal_object_get_char(in_obj, "DstAddr.szAddrLength");
228 dstAddr_szAddress = sipc_util_marshal_object_get_string(in_obj, "DstAddr.szAddress");
229 memcpy(&(cdmaMsg.cdmaMsgInfo.MsgData.outAck.DstAddr.szAddress[0]), dstAddr_szAddress, SMS_MAXLENGTH_SMS_ADDRESS);
231 Origination subaddress
232 cdmaMsg.cdmaMsgInfo.MsgData.outAck.DstSubAddr.SubType = sipc_util_marshal_object_get_int(in_obj, "DstSubAddr.SubType");
233 cdmaMsg.cdmaMsgInfo.MsgData.outAck.DstSubAddr.Odd = sipc_util_marshal_object_get_char(in_obj, "DstSubAddr.Odd");
234 cdmaMsg.cdmaMsgInfo.MsgData.outAck.DstSubAddr.szAddrLength = sipc_util_marshal_object_get_char(in_obj, "DstSubAddr.szAddrLength");
235 dstSubAddr_szAddress = sipc_util_marshal_object_get_string(in_obj, "DstSubAddr.szAddress");
236 memcpy(&(cdmaMsg.cdmaMsgInfo.MsgData.outAck.DstSubAddr.szAddress[0]), dstSubAddr_szAddress, SMS_MAXLENGTH_SMS_ADDRESS);
238 cdmaMsg.cdmaMsgInfo.MsgData.outAck.TeleService = sipc_util_marshal_object_get_int(in_obj, "TeleService");
239 cdmaMsg.cdmaMsgInfo.MsgData.outAck.bBearerReplySeqRequest = sipc_util_marshal_object_get_int(in_obj, "bBearerReplySeqRequest");
240 cdmaMsg.cdmaMsgInfo.MsgData.outAck.ReplySeqNumber = sipc_util_marshal_object_get_char(in_obj, "ReplySeqNumber");
241 cdmaMsg.cdmaMsgInfo.MsgData.outAck.MsgId = sipc_util_marshal_object_get_int(in_obj, "MsgId");
242 cdmaMsg.cdmaMsgInfo.MsgData.outAck.MsgEncoding = sipc_util_marshal_object_get_int(in_obj, "MsgEncoding");
243 cdmaMsg.cdmaMsgInfo.MsgData.outAck.MsgLength = sipc_util_marshal_object_get_int(in_obj, "MsgLength");
244 szData = sipc_util_marshal_object_get_string(in_obj, "szData");
245 memcpy(&(cdmaMsg.cdmaMsgInfo.MsgData.outAck.szData[0]), szData, SMS_MAXLENGTH_SMS_MO_USER_DATA);
246 cdmaMsg.cdmaMsgInfo.MsgData.outAck.UserResponseCode = sipc_util_marshal_object_get_char(in_obj, "UserResponseCode");
254 tcore_user_request_set_data(ur, sizeof(struct treq_sms_send_cdma_msg), &cdmaMsg);
255 tcore_user_request_set_command(ur, TREQ_SMS_SEND_CDMA_MSG);
257 ret = tcore_communicator_dispatch_request(comm, ur);
258 if (ret != TCORE_RETURN_SUCCESS) {
259 // api_err = TAPI_API_OPERATION_FAILED;
260 err("[tcore_SMS] communicator_dispatch_request is fail [0x%x] !!!", ret);
270 on_sms_read_msg(TelephonySms *sms, GDBusMethodInvocation *invocation,
274 struct treq_sms_read_msg readMsg = {0,};
275 struct custom_data *ctx = user_data;
276 UserRequest *ur = NULL;
278 if (!check_access_control (invocation, AC_SMS, "r"))
281 readMsg.index = arg_index;
283 ur = MAKE_UR(ctx, sms, invocation);
284 tcore_user_request_set_data(ur, sizeof(struct treq_sms_read_msg), &readMsg);
285 tcore_user_request_set_command(ur, TREQ_SMS_READ_MSG);
287 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
288 if (ret != TCORE_RETURN_SUCCESS) {
289 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
290 tcore_user_request_unref(ur);
297 on_sms_save_msg(TelephonySms *sms, GDBusMethodInvocation *invocation,
300 gint arg_tpdu_length,
301 GVariant * arg_tpdu_data,
304 struct treq_sms_save_msg saveMsg = {0,};
305 struct custom_data *ctx = user_data;
306 UserRequest *ur = NULL;
309 GVariantIter *iter = 0;
310 GVariant *inner_gv = 0;
312 if (!check_access_control (invocation, AC_SMS, "w"))
315 saveMsg.simIndex = 0xffff;
316 saveMsg.msgStatus = arg_msg_status;
318 inner_gv = g_variant_get_variant( arg_sca );
319 g_variant_get(inner_gv, "ay", &iter);
320 while( g_variant_iter_loop(iter, "y", &saveMsg.msgDataPackage.sca[i] ) ) {
322 if( i >= SMS_SMSP_ADDRESS_LEN )
327 inner_gv = g_variant_get_variant( arg_tpdu_data );
328 g_variant_get(inner_gv, "ay", &iter);
329 while( g_variant_iter_loop(iter, "y", &saveMsg.msgDataPackage.tpduData[i] ) ) {
331 if( i >= SMS_SMDATA_SIZE_MAX + 1 )
334 g_variant_iter_free(iter);
335 g_variant_unref(inner_gv);
337 saveMsg.msgDataPackage.msgLength = arg_tpdu_length;
339 ur = MAKE_UR(ctx, sms, invocation);
340 tcore_user_request_set_data(ur, sizeof(struct treq_sms_save_msg), &saveMsg);
341 tcore_user_request_set_command(ur, TREQ_SMS_SAVE_MSG);
343 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
344 if (ret != TCORE_RETURN_SUCCESS) {
345 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
346 tcore_user_request_unref(ur);
353 on_sms_delete_msg(TelephonySms *sms, GDBusMethodInvocation *invocation,
357 struct treq_sms_delete_msg deleteMsg = {0,};
358 struct custom_data *ctx = user_data;
359 UserRequest *ur = NULL;
361 if (!check_access_control (invocation, AC_SMS, "x"))
364 deleteMsg.index = arg_index;
366 ur = MAKE_UR(ctx, sms, invocation);
367 tcore_user_request_set_data(ur, sizeof(struct treq_sms_delete_msg), &deleteMsg);
368 tcore_user_request_set_command(ur, TREQ_SMS_DELETE_MSG);
370 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
371 if (ret != TCORE_RETURN_SUCCESS) {
372 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
373 tcore_user_request_unref(ur);
380 on_sms_get_msg_count(TelephonySms *sms, GDBusMethodInvocation *invocation,
383 struct custom_data *ctx = user_data;
384 UserRequest *ur = NULL;
386 if (!check_access_control (invocation, AC_SMS, "r"))
389 ur = MAKE_UR(ctx, sms, invocation);
390 tcore_user_request_set_data(ur, 0, NULL);
391 tcore_user_request_set_command(ur, TREQ_SMS_GET_COUNT);
393 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
394 if (ret != TCORE_RETURN_SUCCESS) {
395 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
396 tcore_user_request_unref(ur);
403 on_sms_get_sca(TelephonySms *sms, GDBusMethodInvocation *invocation,
407 struct treq_sms_get_sca getSca = {0,};
408 struct custom_data *ctx = user_data;
409 UserRequest *ur = NULL;
411 if (!check_access_control (invocation, AC_SMS, "r"))
414 getSca.index = arg_index;
416 ur = MAKE_UR(ctx, sms, invocation);
417 tcore_user_request_set_data(ur, sizeof(struct treq_sms_get_sca), &getSca);
418 tcore_user_request_set_command(ur, TREQ_SMS_GET_SCA);
420 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
421 if (ret != TCORE_RETURN_SUCCESS) {
422 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
423 tcore_user_request_unref(ur);
430 on_sms_set_sca(TelephonySms *sms, GDBusMethodInvocation *invocation,
434 gint arg_dialNumberLength,
435 GVariant *arg_dialNumber,
438 struct treq_sms_set_sca setSca;
439 struct custom_data *ctx = user_data;
440 UserRequest *ur = NULL;
443 GVariantIter *iter = 0;
444 GVariant *inner_gv = 0;
446 if (!check_access_control (invocation, AC_SMS, "w"))
449 memset(&setSca, 0, sizeof(struct treq_sms_set_sca));
451 setSca.index = arg_index;
452 setSca.scaInfo.dialNumLen = arg_dialNumberLength;
453 setSca.scaInfo.typeOfNum = arg_ton;
454 setSca.scaInfo.numPlanId = arg_npi;
456 if ((setSca.scaInfo.dialNumLen <= 0) || (setSca.scaInfo.dialNumLen > (SMS_MAX_SMS_SERVICE_CENTER_ADDR + 1)))
458 err("[tcore_SMS] TAPI_API_INVALID_INPUT !!!");
459 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
462 else if(setSca.index != 0)
464 err("[tcore_SMS] Index except 0 is supported");
465 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
470 inner_gv = g_variant_get_variant( arg_dialNumber );
471 g_variant_get(inner_gv, "ay", &iter);
472 while( g_variant_iter_loop(iter, "y", &setSca.scaInfo.diallingNum[i] ) ) {
474 if( i >= SMS_SMSP_ADDRESS_LEN + 1 )
478 ur = MAKE_UR(ctx, sms, invocation);
479 tcore_user_request_set_data(ur, sizeof(struct treq_sms_set_sca), &setSca);
480 tcore_user_request_set_command(ur, TREQ_SMS_SET_SCA);
482 g_variant_iter_free(iter);
483 g_variant_unref(inner_gv);
485 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
486 if (ret != TCORE_RETURN_SUCCESS) {
487 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
488 tcore_user_request_unref(ur);
496 on_sms_get_cb_config(TelephonySms *sms, GDBusMethodInvocation *invocation,
499 struct custom_data *ctx = user_data;
500 UserRequest *ur = NULL;
502 if (!check_access_control (invocation, AC_SMS, "r"))
505 ur = MAKE_UR(ctx, sms, invocation);
506 tcore_user_request_set_data(ur, 0, NULL);
507 tcore_user_request_set_command(ur, TREQ_SMS_GET_CB_CONFIG);
509 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
510 if (ret != TCORE_RETURN_SUCCESS) {
511 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
512 tcore_user_request_unref(ur);
519 on_sms_set_cb_config(TelephonySms *sms, GDBusMethodInvocation *invocation,
520 gint arg_net3gppType,
521 gboolean arg_cbEnable,
522 gint arg_msgIdMaxCount,
523 gint arg_msgIdRangeCount,
527 struct treq_sms_set_cb_config setCbConfig = {0,};
528 struct custom_data *ctx = user_data;
529 UserRequest *ur = NULL;
531 GVariant *value = NULL;
532 GVariant *inner_gv = 0;
533 GVariantIter *iter = NULL;
534 GVariantIter *iter_row = NULL;
535 const gchar *key = NULL;
538 if (!check_access_control (invocation, AC_SMS, "w"))
541 setCbConfig.net3gppType = arg_net3gppType;
542 setCbConfig.cbEnabled = arg_cbEnable;
543 setCbConfig.msgIdMaxCount = arg_msgIdMaxCount;
544 setCbConfig.msgIdRangeCount = arg_msgIdRangeCount;
546 inner_gv = g_variant_get_variant( arg_mdgId );
547 g_variant_get(inner_gv, "aa{sv}", &iter);
549 while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
550 while (g_variant_iter_loop(iter_row, "{sv}", &key, &value)) {
551 if (!g_strcmp0(key, "FromMsgId")) {
552 setCbConfig.msgIDs[i].net3gpp.fromMsgId = g_variant_get_uint16(value);
554 if (!g_strcmp0(key, "ToMsgId")) {
555 setCbConfig.msgIDs[i].net3gpp.toMsgId = g_variant_get_uint16(value);
557 if (!g_strcmp0(key, "CBCategory")) {
558 setCbConfig.msgIDs[i].net3gpp2.cbCategory = g_variant_get_uint16(value);
560 if (!g_strcmp0(key, "CBLanguage")) {
561 setCbConfig.msgIDs[i].net3gpp2.cbLanguage = g_variant_get_uint16(value);
563 if (!g_strcmp0(key, "Selected")) {
564 setCbConfig.msgIDs[i].net3gpp2.selected = g_variant_get_byte(value);
568 g_variant_iter_free(iter_row);
569 if ( i >= SMS_GSM_SMS_CBMI_LIST_SIZE_MAX )
572 g_variant_iter_free(iter);
574 ur = MAKE_UR(ctx, sms, invocation);
575 tcore_user_request_set_data(ur, sizeof(struct treq_sms_set_cb_config), &setCbConfig);
576 tcore_user_request_set_command(ur, TREQ_SMS_SET_CB_CONFIG);
578 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
579 if (ret != TCORE_RETURN_SUCCESS) {
580 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
581 tcore_user_request_unref(ur);
588 on_sms_set_mem_status(TelephonySms *sms, GDBusMethodInvocation *invocation,
589 gint arg_memoryStatus,
592 struct treq_sms_set_mem_status memStatus = {0,};
593 struct custom_data *ctx = user_data;
594 UserRequest *ur = NULL;
596 if (!check_access_control (invocation, AC_SMS, "w"))
599 memStatus.memory_status = arg_memoryStatus;
601 ur = MAKE_UR(ctx, sms, invocation);
602 tcore_user_request_set_data(ur, sizeof(struct treq_sms_set_mem_status), &memStatus);
603 tcore_user_request_set_command(ur, TREQ_SMS_SET_MEM_STATUS);
605 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
606 if (ret != TCORE_RETURN_SUCCESS) {
607 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
608 tcore_user_request_unref(ur);
615 on_sms_get_pref_bearer(TelephonySms *sms, GDBusMethodInvocation *invocation,
618 struct treq_sms_get_pref_bearer getPrefBearer;
619 struct custom_data *ctx = user_data;
620 UserRequest *ur = NULL;
622 if (!check_access_control (invocation, AC_SMS, "r"))
625 ur = MAKE_UR(ctx, sms, invocation);
626 tcore_user_request_set_data(ur, sizeof(struct treq_sms_get_pref_bearer), &getPrefBearer);
627 tcore_user_request_set_command(ur, TREQ_SMS_GET_PREF_BEARER);
629 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
630 if (ret != TCORE_RETURN_SUCCESS) {
631 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
632 tcore_user_request_unref(ur);
639 on_sms_set_pref_bearer(TelephonySms *sms, GDBusMethodInvocation *invocation,
643 struct treq_sms_set_pref_bearer setPrefBearer = {0,};
644 struct custom_data *ctx = user_data;
645 UserRequest *ur = NULL;
647 if (!check_access_control (invocation, AC_SMS, "w"))
650 setPrefBearer.svc = arg_bearerType;
652 ur = MAKE_UR(ctx, sms, invocation);
653 tcore_user_request_set_data(ur, sizeof(struct treq_sms_set_pref_bearer), &setPrefBearer);
654 tcore_user_request_set_command(ur, TREQ_SMS_SET_PREF_BEARER);
656 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
657 if (ret != TCORE_RETURN_SUCCESS) {
658 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
659 tcore_user_request_unref(ur);
666 on_sms_set_delivery_report(TelephonySms *sms, GDBusMethodInvocation *invocation,
668 gint arg_tpdu_length,
669 GVariant *arg_tpdu_data,
673 struct treq_sms_set_delivery_report deliveryReport;
674 struct custom_data *ctx = user_data;
675 UserRequest *ur = NULL;
678 GVariantIter *iter = 0;
679 GVariant *inner_gv = 0;
681 if (!check_access_control (invocation, AC_SMS, "w"))
684 memset(&deliveryReport, 0, sizeof(struct treq_sms_set_delivery_report));
686 inner_gv = g_variant_get_variant( arg_sca );
687 g_variant_get(inner_gv, "ay", &iter);
688 while( g_variant_iter_loop(iter, "y", &deliveryReport.dataInfo.sca[i] ) ) {
690 if( i >= SMS_SMSP_ADDRESS_LEN )
695 inner_gv = g_variant_get_variant( arg_tpdu_data );
696 g_variant_get(inner_gv, "ay", &iter);
697 while( g_variant_iter_loop(iter, "y", &deliveryReport.dataInfo.tpduData[i] ) ) {
699 if( i >= SMS_SMDATA_SIZE_MAX + 1 )
703 deliveryReport.dataInfo.msgLength = arg_tpdu_length;
705 deliveryReport.rspType = arg_rpCause;
707 ur = MAKE_UR(ctx, sms, invocation);
708 tcore_user_request_set_data(ur, sizeof(struct treq_sms_set_delivery_report), &deliveryReport);
709 tcore_user_request_set_command(ur, TREQ_SMS_SET_DELIVERY_REPORT);
711 g_variant_iter_free(iter);
712 g_variant_unref(inner_gv);
714 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
715 if (ret != TCORE_RETURN_SUCCESS) {
716 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
717 tcore_user_request_unref(ur);
724 on_sms_set_msg_status(TelephonySms *sms, GDBusMethodInvocation *invocation,
729 struct treq_sms_set_msg_status msgStatus = {0,};
730 struct custom_data *ctx = user_data;
731 UserRequest *ur = NULL;
733 if (!check_access_control (invocation, AC_SMS, "w"))
736 msgStatus.index = arg_index;
737 msgStatus.msgStatus = arg_msgStatus;
739 ur = MAKE_UR(ctx, sms, invocation);
740 tcore_user_request_set_data(ur, sizeof(struct treq_sms_set_msg_status), &msgStatus);
741 tcore_user_request_set_command(ur, TREQ_SMS_SET_MSG_STATUS);
743 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
744 if (ret != TCORE_RETURN_SUCCESS) {
745 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
746 tcore_user_request_unref(ur);
753 on_sms_get_sms_params(TelephonySms *sms, GDBusMethodInvocation *invocation,
757 struct treq_sms_get_params getParams = {0,};
758 struct custom_data *ctx = user_data;
759 UserRequest *ur = NULL;
761 if (!check_access_control (invocation, AC_SMS, "r"))
764 getParams.index = arg_index;
766 ur = MAKE_UR(ctx, sms, invocation);
767 tcore_user_request_set_data(ur, sizeof(struct treq_sms_get_params), &getParams);
768 tcore_user_request_set_command(ur, TREQ_SMS_GET_PARAMS);
770 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
771 if (ret != TCORE_RETURN_SUCCESS) {
772 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
773 tcore_user_request_unref(ur);
780 on_sms_set_sms_params(TelephonySms *sms, GDBusMethodInvocation *invocation,
781 gint arg_recordIndex,
784 GVariant *arg_alphaId,
785 gint arg_paramIndicator,
786 gint arg_destAddr_DialNumLen,
787 gint arg_destAddr_Ton,
788 gint arg_destAddr_Npi,
789 GVariant *arg_destAddr_DiallingNum,
790 gint arg_svcCntrAddr_DialNumLen,
791 gint arg_SvcCntrAddr_Ton,
792 gint arg_svcCntrAddr_Npi,
793 GVariant *arg_svcCntrAddr_DialNum,
795 gint arg_dataCodingScheme,
796 gint arg_validityPeriod,
799 struct treq_sms_set_params setParams;
800 struct custom_data *ctx = user_data;
801 UserRequest *ur = NULL;
804 GVariantIter *iter = 0;
805 GVariant *inner_gv = 0;
807 if (!check_access_control (invocation, AC_SMS, "w"))
810 memset(&setParams, 0, sizeof(struct treq_sms_set_params));
812 setParams.params.recordIndex = arg_recordIndex;
813 setParams.params.recordLen = arg_recordLen;
814 setParams.params.alphaIdLen = arg_alphaIdLen;
816 inner_gv = g_variant_get_variant( arg_alphaId );
817 g_variant_get(inner_gv, "ay", &iter);
818 while( g_variant_iter_loop(iter, "y", &setParams.params.szAlphaId[i] ) ) {
820 if( i >= SMS_SMSP_ALPHA_ID_LEN_MAX + 1 )
824 setParams.params.paramIndicator = arg_paramIndicator;
826 setParams.params.tpDestAddr.dialNumLen = arg_destAddr_DialNumLen;
827 setParams.params.tpDestAddr.typeOfNum = arg_destAddr_Ton;
828 setParams.params.tpDestAddr.numPlanId = arg_destAddr_Npi;
831 inner_gv = g_variant_get_variant( arg_destAddr_DiallingNum );
832 g_variant_get(inner_gv, "ay", &iter);
833 while( g_variant_iter_loop(iter, "y", &setParams.params.tpDestAddr.diallingNum[i] ) ) {
835 if( i >= SMS_SMSP_ADDRESS_LEN + 1 )
839 setParams.params.tpSvcCntrAddr.dialNumLen = arg_svcCntrAddr_DialNumLen;
840 setParams.params.tpSvcCntrAddr.typeOfNum = arg_SvcCntrAddr_Ton;
841 setParams.params.tpSvcCntrAddr.numPlanId = arg_svcCntrAddr_Npi;
844 inner_gv = g_variant_get_variant( arg_svcCntrAddr_DialNum );
845 g_variant_get(inner_gv, "ay", &iter);
846 while( g_variant_iter_loop(iter, "y", &setParams.params.tpSvcCntrAddr.diallingNum[i] ) ) {
848 if( i >= SMS_SMSP_ADDRESS_LEN + 1 )
852 setParams.params.tpProtocolId = arg_protocolId;
853 setParams.params.tpDataCodingScheme = arg_dataCodingScheme;
854 setParams.params.tpValidityPeriod = arg_validityPeriod;
856 ur = MAKE_UR(ctx, sms, invocation);
857 tcore_user_request_set_data(ur, sizeof(struct treq_sms_set_params), &setParams);
858 tcore_user_request_set_command(ur, TREQ_SMS_SET_PARAMS);
860 g_variant_iter_free(iter);
861 g_variant_unref(inner_gv);
863 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
864 if (ret != TCORE_RETURN_SUCCESS) {
865 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
866 tcore_user_request_unref(ur);
873 on_sms_get_sms_param_cnt(TelephonySms *sms, GDBusMethodInvocation *invocation,
876 struct custom_data *ctx = user_data;
877 UserRequest *ur = NULL;
879 if (!check_access_control (invocation, AC_SMS, "r"))
882 ur = MAKE_UR(ctx, sms, invocation);
883 tcore_user_request_set_data(ur, 0, NULL);
884 tcore_user_request_set_command(ur, TREQ_SMS_GET_PARAMCNT);
886 ret = tcore_communicator_dispatch_request(ctx->comm, ur);
887 if (ret != TCORE_RETURN_SUCCESS) {
888 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
889 tcore_user_request_unref(ur);
896 on_sms_get_sms_ready_status(TelephonySms *sms, GDBusMethodInvocation *invocation,
899 struct custom_data *ctx = user_data;
900 GSList *co_list = NULL;
901 CoreObject *co_sms = NULL;
902 TcorePlugin *plugin = NULL;
903 gboolean ready_status = FALSE;
905 plugin = tcore_server_find_plugin(ctx->server, GET_CP_NAME(invocation));
906 co_list = tcore_plugin_get_core_objects_bytype(plugin, CORE_OBJECT_TYPE_SMS);
908 dbg("error- co_list is NULL");
909 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
913 co_sms = (CoreObject *)co_list->data;
914 g_slist_free(co_list);
917 dbg("error- co_sms is NULL");
918 FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
922 ready_status = tcore_sms_get_ready_status(co_sms);
923 dbg("ready_status = %d", ready_status);
924 telephony_sms_complete_get_sms_ready_status(sms, invocation, ready_status);
929 gboolean dbus_plugin_setup_sms_interface(TelephonyObjectSkeleton *object, struct custom_data *ctx)
933 sms = telephony_sms_skeleton_new();
934 telephony_object_skeleton_set_sms(object, sms);
937 g_signal_connect(sms,
939 G_CALLBACK (on_sms_send_msg),
942 g_signal_connect(sms,
944 G_CALLBACK (on_sms_read_msg),
947 g_signal_connect(sms,
949 G_CALLBACK (on_sms_save_msg),
952 g_signal_connect(sms,
954 G_CALLBACK (on_sms_delete_msg),
957 g_signal_connect(sms,
958 "handle-get-msg-count",
959 G_CALLBACK (on_sms_get_msg_count),
962 g_signal_connect(sms,
964 G_CALLBACK (on_sms_get_sca),
967 g_signal_connect(sms,
969 G_CALLBACK (on_sms_set_sca),
972 g_signal_connect(sms,
973 "handle-get-cb-config",
974 G_CALLBACK (on_sms_get_cb_config),
977 g_signal_connect(sms,
978 "handle-set-cb-config",
979 G_CALLBACK (on_sms_set_cb_config),
982 g_signal_connect(sms,
983 "handle-set-mem-status",
984 G_CALLBACK (on_sms_set_mem_status),
987 g_signal_connect(sms,
988 "handle-get-pref-bearer",
989 G_CALLBACK (on_sms_get_pref_bearer),
992 g_signal_connect(sms,
993 "handle-set-pref-bearer",
994 G_CALLBACK (on_sms_set_pref_bearer),
997 g_signal_connect(sms,
998 "handle-set-delivery-report",
999 G_CALLBACK (on_sms_set_delivery_report),
1002 g_signal_connect(sms,
1003 "handle-set-msg-status",
1004 G_CALLBACK (on_sms_set_msg_status),
1007 g_signal_connect(sms,
1008 "handle-get-sms-params",
1009 G_CALLBACK (on_sms_get_sms_params),
1012 g_signal_connect(sms,
1013 "handle-set-sms-params",
1014 G_CALLBACK (on_sms_set_sms_params),
1017 g_signal_connect(sms,
1018 "handle-get-sms-param-cnt",
1019 G_CALLBACK (on_sms_get_sms_param_cnt),
1022 g_signal_connect(sms,
1023 "handle-get-sms-ready-status",
1024 G_CALLBACK (on_sms_get_sms_ready_status),
1030 gboolean dbus_plugin_sms_response(struct custom_data *ctx, UserRequest *ur, struct dbus_request_info *dbus_info, enum tcore_response_command command, unsigned int data_len, const void *data)
1034 char *modem_name = NULL;
1035 TcorePlugin *p = NULL;
1038 modem_name = tcore_user_request_get_modem_name(ur);
1042 p = tcore_server_find_plugin(ctx->server, modem_name);
1047 co_list = tcore_plugin_get_core_objects_bytype(p, CORE_OBJECT_TYPE_SMS);
1052 co_sms = (CoreObject *)co_list->data;
1053 g_slist_free(co_list);
1060 case TRESP_SMS_SEND_UMTS_MSG: {
1061 const struct tresp_sms_send_umts_msg *resp = data;
1063 dbg("receive TRESP_SMS_SEND_UMTS_MSG (result:[0x%x])", resp->result);
1064 telephony_sms_complete_send_msg(dbus_info->interface_object, dbus_info->invocation, resp->result);
1069 case TRESP_SMS_SEND_CDMA_MSG: {
1070 const struct tresp_sms_send_cdma_msg *resp = data;
1072 dbg("receive TRESP_SMS_SEND_CDMA_MSG (result:[0x%x])", resp->result);
1076 case TRESP_SMS_READ_MSG: {
1077 const struct tresp_sms_read_msg *resp = data;
1078 GVariant *sca = 0, *packet_sca = 0;
1079 GVariant *tpdu = 0, *packet_tpdu = 0;
1082 dbg("receive TRESP_SMS_READ_MSG (result:[0x%x])", resp->result);
1083 g_variant_builder_init (&b, G_VARIANT_TYPE("ay"));
1085 for( i=0; i<SMS_SMSP_ADDRESS_LEN; i++) {
1086 g_variant_builder_add(&b, "y", resp->dataInfo.smsData.sca[i] );
1088 sca = g_variant_builder_end(&b);
1090 g_variant_builder_init (&b, G_VARIANT_TYPE("ay"));
1092 for( i=0; i<SMS_SMDATA_SIZE_MAX + 1; i++) {
1093 g_variant_builder_add(&b, "y", resp->dataInfo.smsData.tpduData[i] );
1095 tpdu = g_variant_builder_end(&b);
1097 packet_sca = g_variant_new("v", sca);
1098 packet_tpdu = g_variant_new("v", tpdu);
1100 telephony_sms_complete_read_msg(dbus_info->interface_object, dbus_info->invocation,
1102 resp->dataInfo.simIndex,
1103 resp->dataInfo.msgStatus,
1105 resp->dataInfo.smsData.msgLength,
1110 case TRESP_SMS_SAVE_MSG: {
1111 const struct tresp_sms_save_msg *resp = data;
1113 dbg("receive TRESP_SMS_SAVE_MSG (result:[0x%x])", resp->result);
1114 telephony_sms_complete_save_msg (dbus_info->interface_object, dbus_info->invocation,
1120 case TRESP_SMS_DELETE_MSG: {
1121 const struct tresp_sms_delete_msg *resp = data;
1123 dbg("receive TRESP_SMS_DELETE_MSG (result:[0x%x])", resp->result);
1124 telephony_sms_complete_delete_msg(dbus_info->interface_object, dbus_info->invocation,
1125 resp->result, resp->index);
1130 case TRESP_SMS_GET_STORED_MSG_COUNT: {
1131 const struct tresp_sms_get_storedMsgCnt *resp = data;
1134 unsigned int loop_var;
1136 dbg("receive TRESP_SMS_GET_STORED_MSG_COUNT (result:[0x%x])", resp->result);
1137 g_variant_builder_init (&b, G_VARIANT_TYPE("ai"));
1139 for (loop_var=0; loop_var<resp->storedMsgCnt.totalCount; loop_var++) {
1140 g_variant_builder_add(&b, "i", resp->storedMsgCnt.indexList[loop_var]);
1142 list = g_variant_builder_end(&b);
1144 telephony_sms_complete_get_msg_count(dbus_info->interface_object, dbus_info->invocation,
1146 resp->storedMsgCnt.totalCount,
1147 resp->storedMsgCnt.usedCount,
1152 case TRESP_SMS_GET_SCA: {
1153 const struct tresp_sms_get_sca *resp = data;
1154 GVariant *sca = 0, *packet_sca = 0;
1157 dbg("receive TRESP_SMS_GET_SCA (result:[0x%x])", resp->result);
1158 g_variant_builder_init (&b, G_VARIANT_TYPE("ay"));
1160 for( i=0; i<SMS_SMSP_ADDRESS_LEN + 1; i++) {
1161 g_variant_builder_add(&b, "y", resp->scaAddress.diallingNum[i] );
1163 sca = g_variant_builder_end(&b);
1165 packet_sca = g_variant_new("v", sca);
1167 telephony_sms_complete_get_sca(dbus_info->interface_object, dbus_info->invocation,
1169 resp->scaAddress.typeOfNum,
1170 resp->scaAddress.numPlanId,
1171 resp->scaAddress.dialNumLen,
1176 case TRESP_SMS_SET_SCA: {
1177 const struct tresp_sms_set_sca *resp = data;
1179 dbg("receive TRESP_SMS_SET_SCA (result:[0x%x])", resp->result);
1180 telephony_sms_complete_set_sca(dbus_info->interface_object, dbus_info->invocation,
1186 case TRESP_SMS_GET_CB_CONFIG: {
1187 const struct tresp_sms_get_cb_config *resp = data;
1188 GVariant *result = NULL;
1191 dbg("receive TRESP_SMS_GET_CB_CONFIG (result:[0x%x])", resp->result);
1192 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
1194 for (i = 0; i < resp->cbConfig.msgIdRangeCount; i++) {
1195 g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
1197 if( resp->cbConfig.net3gppType == SMS_NETTYPE_3GPP ) {
1198 g_variant_builder_add(&b, "{sv}", "FromMsgId", g_variant_new_uint16(resp->cbConfig.msgIDs[i].net3gpp.fromMsgId));
1199 g_variant_builder_add(&b, "{sv}", "ToMsgId", g_variant_new_uint16(resp->cbConfig.msgIDs[i].net3gpp.toMsgId));
1200 } else if( resp->cbConfig.net3gppType == SMS_NETTYPE_3GPP2) {
1201 g_variant_builder_add(&b, "{sv}", "CBCategory", g_variant_new_uint16(resp->cbConfig.msgIDs[i].net3gpp2.cbCategory));
1202 g_variant_builder_add(&b, "{sv}", "CBLanguage", g_variant_new_uint16(resp->cbConfig.msgIDs[i].net3gpp2.cbLanguage));
1204 dbg("Unknown 3gpp type");
1208 g_variant_builder_add(&b, "{sv}", "Selected", g_variant_new_byte(resp->cbConfig.msgIDs[i].net3gpp.selected));
1210 g_variant_builder_close(&b);
1213 result = g_variant_builder_end(&b);
1215 telephony_sms_complete_get_cb_config(dbus_info->interface_object, dbus_info->invocation,
1217 resp->cbConfig.net3gppType,
1218 resp->cbConfig.cbEnabled,
1219 resp->cbConfig.msgIdMaxCount,
1220 resp->cbConfig.msgIdRangeCount,
1225 case TRESP_SMS_SET_CB_CONFIG: {
1226 const struct tresp_sms_set_cb_config *resp = data;
1228 dbg("receive TRESP_SMS_SET_CB_CONFIG (result:[0x%x])", resp->result);
1229 telephony_sms_complete_set_cb_config(dbus_info->interface_object, dbus_info->invocation,
1235 case TRESP_SMS_SET_MEM_STATUS: {
1236 const struct tresp_sms_set_mem_status *resp = data;
1238 dbg("receive TRESP_SMS_SET_MEM_STATUS (result:[0x%x])", resp->result);
1239 telephony_sms_complete_set_mem_status(dbus_info->interface_object, dbus_info->invocation,
1244 case TRESP_SMS_GET_PREF_BEARER: {
1245 const struct tresp_sms_get_pref_bearer *resp = data;
1247 dbg("receive TRESP_SMS_GET_PREF_BEARER (result:[0x%x])", resp->result);
1248 telephony_sms_complete_get_pref_bearer(dbus_info->interface_object, dbus_info->invocation,
1254 case TRESP_SMS_SET_PREF_BEARER: {
1255 const struct tresp_sms_set_pref_bearer *resp = data;
1257 dbg("receive TRESP_SMS_SET_PREF_BEARER (result:[0x%x])", resp->result);
1258 telephony_sms_complete_set_pref_bearer(dbus_info->interface_object, dbus_info->invocation,
1264 case TRESP_SMS_SET_DELIVERY_REPORT: {
1265 const struct tresp_sms_set_delivery_report *resp = data;
1267 dbg("receive TRESP_SMS_SET_DELIVERY_REPORT (result:[0x%x])", resp->result);
1268 telephony_sms_complete_set_delivery_report(dbus_info->interface_object, dbus_info->invocation,
1274 case TRESP_SMS_SET_MSG_STATUS: {
1275 const struct tresp_sms_set_mem_status *resp = data;
1277 dbg("receive TRESP_SMS_SET_MSG_STATUS (result:[0x%x])", resp->result);
1278 telephony_sms_complete_set_msg_status(dbus_info->interface_object, dbus_info->invocation,
1284 case TRESP_SMS_GET_PARAMS: {
1285 const struct tresp_sms_get_params *resp = data;
1286 GVariant *alphaId = 0, *packet_alphaId = 0;
1287 GVariant *destDialNum = 0, *packet_destDialNum = 0;
1288 GVariant *scaDialNum = 0, *packet_scaDialNum = 0;
1291 dbg("receive TRESP_SMS_GET_PARAMS (result:[0x%x])", resp->result);
1292 g_variant_builder_init(&b, G_VARIANT_TYPE("ay"));
1293 for( i=0; i<SMS_SMSP_ALPHA_ID_LEN_MAX + 1; i++) {
1294 g_variant_builder_add(&b, "y", resp->paramsInfo.szAlphaId[i] );
1296 alphaId = g_variant_builder_end(&b);
1298 g_variant_builder_init(&b, G_VARIANT_TYPE("ay"));
1299 for( i=0; i<SMS_SMSP_ADDRESS_LEN + 1; i++) {
1300 g_variant_builder_add(&b, "y", resp->paramsInfo.tpDestAddr.diallingNum[i] );
1302 destDialNum = g_variant_builder_end(&b);
1304 g_variant_builder_init(&b, G_VARIANT_TYPE("ay"));
1305 for( i=0; i<SMS_SMSP_ADDRESS_LEN + 1; i++) {
1306 g_variant_builder_add(&b, "y", resp->paramsInfo.tpSvcCntrAddr.diallingNum[i] );
1308 scaDialNum = g_variant_builder_end(&b);
1310 packet_alphaId = g_variant_new("v", alphaId);
1311 packet_destDialNum = g_variant_new("v", destDialNum);
1312 packet_scaDialNum = g_variant_new("v", scaDialNum);
1314 telephony_sms_complete_get_sms_params(dbus_info->interface_object, dbus_info->invocation,
1316 resp->paramsInfo.recordIndex,
1317 resp->paramsInfo.recordLen,
1318 resp->paramsInfo.alphaIdLen,
1320 resp->paramsInfo.paramIndicator,
1321 resp->paramsInfo.tpDestAddr.dialNumLen,
1322 resp->paramsInfo.tpDestAddr.typeOfNum,
1323 resp->paramsInfo.tpDestAddr.numPlanId,
1325 resp->paramsInfo.tpSvcCntrAddr.dialNumLen,
1326 resp->paramsInfo.tpSvcCntrAddr.typeOfNum,
1327 resp->paramsInfo.tpSvcCntrAddr.numPlanId,
1329 resp->paramsInfo.tpProtocolId,
1330 resp->paramsInfo.tpDataCodingScheme,
1331 resp->paramsInfo.tpValidityPeriod);
1335 case TRESP_SMS_SET_PARAMS:{
1336 const struct tresp_sms_set_params *resp = data;
1338 dbg("receive TRESP_SMS_SET_PARAMS (result:[0x%x])", resp->result);
1339 telephony_sms_complete_set_sms_params(dbus_info->interface_object, dbus_info->invocation,
1345 case TRESP_SMS_GET_PARAMCNT: {
1346 const struct tresp_sms_get_paramcnt *resp = data;
1348 dbg("receive TRESP_SMS_GET_PARAMCNT (result:[0x%x])", resp->result);
1349 telephony_sms_complete_get_sms_param_cnt(dbus_info->interface_object, dbus_info->invocation,
1363 gboolean dbus_plugin_sms_notification(struct custom_data *ctx, CoreObject *source, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data)
1366 const char *cp_name;
1368 cp_name = tcore_server_get_cp_name_by_plugin(tcore_object_ref_plugin(source));
1370 sms = telephony_object_peek_sms(TELEPHONY_OBJECT(object));
1373 case TNOTI_SMS_INCOM_MSG: {
1374 const struct tnoti_sms_umts_msg *noti = data;
1376 GVariant *sca = 0, *packet_sca = 0;
1377 GVariant *tpdu = 0, *packet_tpdu = 0;
1381 info("[DBUSINFO][%s] SMS_INCOM_MSG (len[%d])", cp_name, data_len);
1383 g_variant_builder_init (&b, G_VARIANT_TYPE("ay"));
1384 for( i=0; i<SMS_SMSP_ADDRESS_LEN; i++) {
1385 g_variant_builder_add(&b, "y", noti->msgInfo.sca[i] );
1387 sca = g_variant_builder_end(&b);
1389 g_variant_builder_init (&b, G_VARIANT_TYPE("ay"));
1390 for( i=0; i<SMS_SMDATA_SIZE_MAX + 1; i++) {
1391 g_variant_builder_add(&b, "y", noti->msgInfo.tpduData[i] );
1393 tpdu = g_variant_builder_end(&b);
1395 packet_sca = g_variant_new("v", sca);
1396 packet_tpdu = g_variant_new("v", tpdu);
1398 telephony_sms_emit_incomming_msg(sms,
1400 noti->msgInfo.msgLength,
1405 case TNOTI_SMS_CB_INCOM_MSG: {
1406 const struct tnoti_sms_cellBroadcast_msg *noti = data;
1407 GVariant *msgData = 0, *packet_msgData = 0;
1411 info("[DBUSINFO][%s] SMS_CB_INCOM_MSG (len[%d])", cp_name, data_len);
1413 g_variant_builder_init (&b, G_VARIANT_TYPE("ay"));
1415 for( i=0; i < (int)noti->cbMsg.length + 1; i++) {
1416 g_variant_builder_add(&b, "y", noti->cbMsg.msgData[i] );
1418 msgData = g_variant_builder_end(&b);
1419 packet_msgData = g_variant_new("v", msgData);
1421 telephony_sms_emit_incomming_cb_msg(sms,
1422 noti->cbMsg.cbMsgType,
1428 case TNOTI_SMS_ETWS_INCOM_MSG: {
1429 const struct tnoti_sms_etws_msg *noti = data;
1430 GVariant *msgData = 0, *packet_msgData = 0;
1434 info("[DBUSINFO][%s] ETWS_INCOM_MSG (len[%d])", cp_name, data_len);
1436 g_variant_builder_init (&b, G_VARIANT_TYPE("ay"));
1438 for( i=0; i<SMS_ETWS_SIZE_MAX + 1; i++) {
1439 g_variant_builder_add(&b, "y", noti->etwsMsg.msgData[i] );
1441 msgData = g_variant_builder_end(&b);
1442 packet_msgData = g_variant_new("v", msgData);
1444 telephony_sms_emit_incomming_etws_msg(sms,
1445 noti->etwsMsg.etwsMsgType,
1446 noti->etwsMsg.length,
1451 case TNOTI_SMS_INCOM_EX_MSG: {
1452 info("[DBUSINFO][%s] SMS_INCOM_EX_MSG (len[%d])", cp_name, data_len);
1456 case TNOTI_SMS_CB_INCOM_EX_MSG: {
1457 info("[DBUSINFO][%s] CB_INCOM_EX_MSG (len[%d])", cp_name, data_len);
1461 case TNOTI_SMS_MEMORY_STATUS: {
1462 const struct tnoti_sms_memory_status *noti = data;
1463 info("[DBUSINFO][%s] SMS_MEMORY_STATUS (%d)", cp_name, noti->status);
1464 telephony_sms_emit_memory_status(sms, noti->status);
1468 case TNOTI_SMS_DEVICE_READY: {
1469 const struct tnoti_sms_ready_status *noti = data;
1470 info("[DBUSINFO][%s] SMS_DEVICE_READY (%d)", cp_name, noti->status);
1471 #ifdef ENABLE_KPI_LOGS
1472 if (noti->status == TRUE)
1473 TIME_CHECK("[%s] SMS Service Ready", cp_name);
1475 telephony_sms_emit_sms_ready(sms, noti->status);
1481 dbg("unknown notification");