4 * Copyright (c) 2011 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.
26 #include "tapi_common.h"
27 #include "TapiUtility.h"
34 static void on_response_get_ss_barring_status(GObject *source_object, GAsyncResult *res, gpointer user_data)
37 GDBusConnection *conn = 0;
38 struct tapi_resp_data *evt_cb_data = user_data;
39 int result = -1, i = 0;
40 TelSsBarringResp_t resp;
42 GVariant *dbus_result = 0, *value = 0;
43 GVariantIter *iter = 0;
44 GVariantIter *iter_row = 0;
47 memset(&resp, '\0', sizeof(TelSsBarringResp_t));
49 conn = G_DBUS_CONNECTION (source_object);
50 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
54 if (evt_cb_data->cb_fn) {
55 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
65 g_variant_get (dbus_result, "(aa{sv}i)", &iter, &result);
67 resp.record_num = g_variant_iter_n_children(iter);
69 while ( g_variant_iter_next(iter, "a{sv}", &iter_row ) ) {
70 while ( g_variant_iter_loop( iter_row, "{sv}", &key, &value ) ) {
72 if ( !g_strcmp0(key, "ss_class") ) {
73 resp.record[i].Class = g_variant_get_int32(value);
76 if ( !g_strcmp0(key, "ss_status") ) {
77 resp.record[i].Status = g_variant_get_int32(value);
80 if ( !g_strcmp0(key, "barring_mode") ) {
81 resp.record[i].Flavour = g_variant_get_int32(value);
86 g_variant_iter_free(iter_row);
88 g_variant_iter_free(iter);
90 if (evt_cb_data->cb_fn) {
91 evt_cb_data->cb_fn(evt_cb_data->handle, result, &resp, evt_cb_data->user_data);
97 static void on_response_change_ss_barring_password(GObject *source_object, GAsyncResult *res, gpointer user_data)
100 GDBusConnection *conn = 0;
101 struct tapi_resp_data *evt_cb_data = user_data;
104 GVariant *dbus_result = 0;
106 conn = G_DBUS_CONNECTION (source_object);
107 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
111 if (evt_cb_data->cb_fn) {
112 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
122 g_variant_get (dbus_result, "(i)", &result);
124 if (evt_cb_data->cb_fn) {
125 evt_cb_data->cb_fn(evt_cb_data->handle, result, NULL, evt_cb_data->user_data);
131 static void on_response_get_ss_forward_status(GObject *source_object, GAsyncResult *res, gpointer user_data)
134 GDBusConnection *conn = 0;
135 struct tapi_resp_data *evt_cb_data = user_data;
136 int result = -1, i = 0;
137 TelSsForwardResp_t resp;
139 GVariant *dbus_result = 0, *value = 0;
140 GVariantIter *iter = 0;
141 GVariantIter *iter_row = 0;
142 const gchar *key = 0;
145 memset(&resp, '\0', sizeof(TelSsForwardResp_t));
147 conn = G_DBUS_CONNECTION (source_object);
148 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
152 if (evt_cb_data->cb_fn) {
153 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
163 g_variant_get (dbus_result, "(aa{sv}i)", &iter, &result);
165 resp.record_num = g_variant_iter_n_children(iter);
167 while ( g_variant_iter_next(iter, "a{sv}", &iter_row ) ) {
168 while ( g_variant_iter_loop( iter_row, "{sv}", &key, &value ) ) {
170 if ( !g_strcmp0(key, "ss_class") ) {
171 resp.record[i].Class = g_variant_get_int32(value);
174 if ( !g_strcmp0(key, "ss_status") ) {
175 resp.record[i].Status = g_variant_get_int32(value);
178 if ( !g_strcmp0(key, "forwarding_mode") ) {
179 resp.record[i].ForwardCondition = g_variant_get_int32(value);
182 if ( !g_strcmp0(key, "no_reply_time") ) {
183 resp.record[i].NoReplyWaitTime = g_variant_get_int32(value);
186 if ( !g_strcmp0(key, "number_present") ) {
187 resp.record[i].bCallForwardingNumberPresent = g_variant_get_int32(value);
190 if ( !g_strcmp0(key, "forwarding_number") ) {
191 strncpy((char *)resp.record[i].szCallForwardingNumber, g_variant_get_string(value, 0), TAPI_CALL_DIALDIGIT_LEN_MAX );
196 g_variant_iter_free(iter_row);
198 g_variant_iter_free(iter);
200 if (evt_cb_data->cb_fn) {
201 evt_cb_data->cb_fn(evt_cb_data->handle, result, &resp, evt_cb_data->user_data);
207 static void on_response_get_ss_waiting_status(GObject *source_object, GAsyncResult *res, gpointer user_data)
210 GDBusConnection *conn = 0;
211 struct tapi_resp_data *evt_cb_data = user_data;
212 int result = -1, i = 0;
213 TelSsWaitingResp_t resp;
215 GVariant *dbus_result = 0, *value = 0;
216 GVariantIter *iter = 0;
217 GVariantIter *iter_row = 0;
218 const gchar *key = 0;
221 memset(&resp, '\0', sizeof(TelSsWaitingResp_t));
223 conn = G_DBUS_CONNECTION (source_object);
224 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
228 if (evt_cb_data->cb_fn) {
229 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
239 g_variant_get (dbus_result, "(aa{sv}i)", &iter, &result);
241 resp.record_num = g_variant_iter_n_children(iter);
243 while ( g_variant_iter_next(iter, "a{sv}", &iter_row ) ) {
244 while ( g_variant_iter_loop( iter_row, "{sv}", &key, &value ) ) {
246 if ( !g_strcmp0(key, "ss_class") ) {
247 resp.record[i].Class = g_variant_get_int32(value);
250 if ( !g_strcmp0(key, "ss_status") ) {
251 resp.record[i].Status = g_variant_get_int32(value);
255 g_variant_iter_free(iter_row);
257 g_variant_iter_free(iter);
259 if (evt_cb_data->cb_fn) {
260 evt_cb_data->cb_fn(evt_cb_data->handle, result, &resp, evt_cb_data->user_data);
267 static void on_response_get_ss_cli_status(GObject *source_object, GAsyncResult *res, gpointer user_data)
270 GDBusConnection *conn = 0;
271 struct tapi_resp_data *evt_cb_data = user_data;
275 GVariant *dbus_result = 0;
277 memset(&resp, '\0', sizeof(TelSsCliResp_t));
279 conn = G_DBUS_CONNECTION (source_object);
280 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
284 if (evt_cb_data->cb_fn) {
285 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
295 g_variant_get (dbus_result, "(iii)", &result, &resp.Type, &resp.Status);
297 if (evt_cb_data->cb_fn) {
298 evt_cb_data->cb_fn(evt_cb_data->handle, result, &resp, evt_cb_data->user_data);
304 static void on_response_send_ss_ussd_request(GObject *source_object, GAsyncResult *res, gpointer user_data)
307 GDBusConnection *conn = 0;
308 struct tapi_resp_data *evt_cb_data = user_data;
311 TelSsUssdResp_t resp;
313 GVariant *dbus_result = 0;
315 memset(&resp, '\0', sizeof(TelSsUssdResp_t));
317 conn = G_DBUS_CONNECTION (source_object);
318 dbus_result = g_dbus_connection_call_finish(conn, res, &error);
322 if (evt_cb_data->cb_fn) {
323 evt_cb_data->cb_fn(evt_cb_data->handle, -1, NULL, evt_cb_data->user_data);
333 g_variant_get (dbus_result, "(iiiis)", &result, &resp.Type, &resp.Status, &resp.Length, &tmp_str);
336 memcpy( resp.szString, tmp_str, resp.Length );
340 if (evt_cb_data->cb_fn) {
341 evt_cb_data->cb_fn(evt_cb_data->handle, result, &resp, evt_cb_data->user_data);
347 EXPORT_API int tel_set_ss_barring(TapiHandle *handle, TelSsBarringInfo_t *info, tapi_response_cb callback, void *user_data)
349 struct tapi_resp_data *evt_cb_data = 0;
353 dbg("Func Entrance ");
355 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
357 param = g_variant_new("(iis)", info->Class, info->Type, info->szPassword);
359 if ( info->Mode == TAPI_SS_CB_MODE_ACTIVATE ) {
360 dbg("[ check ] barring activate");
361 method = "ActivateBarring";
364 dbg("[ check ] barring deactivate");
365 method = "DeactivateBarring";
369 g_dbus_connection_call(handle->dbus_connection,
370 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_SS_INTERFACE,
372 G_DBUS_CALL_FLAGS_NONE, -1, handle->ca,
373 on_response_get_ss_barring_status, evt_cb_data );
375 return TAPI_API_SUCCESS;
378 EXPORT_API int tel_get_ss_barring_status(TapiHandle *handle, TelSsClass_t class, TelSsBarringType_t type, tapi_response_cb callback, void *user_data)
380 struct tapi_resp_data *evt_cb_data = 0;
383 dbg("Func Entrance ");
385 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
387 param = g_variant_new("(ii)", class, type);
389 g_dbus_connection_call(handle->dbus_connection,
390 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_SS_INTERFACE,
391 "GetBarringStatus", param, 0,
392 G_DBUS_CALL_FLAGS_NONE, -1, handle->ca,
393 on_response_get_ss_barring_status, evt_cb_data );
395 return TAPI_API_SUCCESS;
398 /**********************************************************************************************
400 * This function is used to change call barring password.
402 * @param pOldPassword[IN] of type char* Specifies the Old Call Barring Password.
403 * @param pNewPassword[IN] of type char* Specifies the New Call Barring Password.
404 * @param pNewPasswordAgain[IN] of type char* Specifies the New Call Barring Password for Confirm.
405 * @return enum type TapiResult_t Specifies the API's Return result.
408 ***********************************************************************************************/
409 EXPORT_API int tel_change_ss_barring_password(TapiHandle *handle,
410 const char *old_password,
411 const char *new_password,
412 const char *new_password_again,
413 tapi_response_cb callback, void *user_data)
415 struct tapi_resp_data *evt_cb_data = 0;
418 dbg("Func Entrance ");
420 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
422 param = g_variant_new("(sss)", old_password, new_password, new_password_again);
424 g_dbus_connection_call(handle->dbus_connection,
425 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_SS_INTERFACE,
426 "ChangeBarringPassword", param, 0,
427 G_DBUS_CALL_FLAGS_NONE, -1, handle->ca,
428 on_response_change_ss_barring_password, evt_cb_data );
430 return TAPI_API_SUCCESS;
433 /**********************************************************************************************
435 * This function is used to Activate or Deactivate the call forwarding feature.
437 * @param forwardInfo[IN] of type TelSsForwardInfo_t which specifies the Teleservice and CF flavour, Forwarded to number.
438 * @return enum type TapiResult_t Specifies the API's Return result.
441 ***********************************************************************************************/
442 EXPORT_API int tel_set_ss_forward(TapiHandle *handle, const TelSsForwardInfo_t *info, tapi_response_cb callback, void *user_data)
444 struct tapi_resp_data *evt_cb_data = 0;
448 dbg("Func Entrance ");
450 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
452 param = g_variant_new("(iiis)", info->Class, info->Condition, info->NoReplyConditionTimer, info->szPhoneNumber);
454 switch ( info->Mode ) {
455 case TAPI_SS_CF_MODE_DISABLE_EV: {
456 dbg("[ check ] forwarding deactivate");
457 method = "DeactivateForwarding";
460 case TAPI_SS_CF_MODE_ENABLE_EV: {
461 dbg("[ check ] forwarding activate");
462 method = "ActivateForwarding";
465 case TAPI_SS_CF_MODE_REGISTRATION_EV: {
466 dbg("[ check ] forwarding registration");
467 method = "RegisterForwarding";
470 case TAPI_SS_CF_MODE_ERASURE_EV: {
471 dbg("[ check ] forwarding deregistration");
472 method = "DeregisterForwarding";
476 dbg("[ error ] invalid input : (0x%x)", info->Mode);
477 return TAPI_API_INVALID_INPUT;
480 g_dbus_connection_call(handle->dbus_connection,
481 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_SS_INTERFACE,
483 G_DBUS_CALL_FLAGS_NONE, -1, handle->ca,
484 on_response_get_ss_forward_status, evt_cb_data );
486 return TAPI_API_SUCCESS;
489 /**********************************************************************************************
491 * This function is used to interrogate the status of call forwarding feature.
493 * @param forwardType[IN] of type TelSsForwardType_t which specifies the telecommunication service.
494 * @param condition[IN] is of type TelSsForwardWhen_t specified the CF flavour
495 * @return enum type TapiResult_t Specifies the API's Return result.
498 ***********************************************************************************************/
499 EXPORT_API int tel_get_ss_forward_status(TapiHandle *handle, TelSsClass_t class, TelSsForwardWhen_t condition, tapi_response_cb callback, void *user_data)
501 struct tapi_resp_data *evt_cb_data = 0;
504 dbg("Func Entrance ");
506 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
508 param = g_variant_new("(ii)", class, condition);
510 g_dbus_connection_call(handle->dbus_connection,
511 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_SS_INTERFACE,
512 "GetForwardingStatus", param, 0,
513 G_DBUS_CALL_FLAGS_NONE, -1, handle->ca,
514 on_response_get_ss_forward_status, evt_cb_data );
516 return TAPI_API_SUCCESS;
519 /**********************************************************************************************
521 * This function is used to Activate or dectivate call waiting feature.
523 * @param waitInfo[IN] of type TelSsWaitingInfo_t which specifies the telecommunication service and mode.
524 * @return enum type TapiResult_t Specifies the API's Return result.
527 ***********************************************************************************************/
528 EXPORT_API int tel_set_ss_waiting(TapiHandle *handle, const TelSsWaitingInfo_t *info, tapi_response_cb callback, void *user_data)
530 struct tapi_resp_data *evt_cb_data = 0;
534 dbg("Func Entrance ");
536 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
538 param = g_variant_new("(i)", info->Class);
540 if ( info->Mode == TAPI_SS_CW_MODE_ACTIVATE ) {
541 dbg("[ check ] waiting activate");
542 method = "ActivateWaiting";
545 dbg("[ check ] waiting deactivate");
546 method = "DeactivateWaiting";
550 g_dbus_connection_call(handle->dbus_connection,
551 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_SS_INTERFACE,
553 G_DBUS_CALL_FLAGS_NONE, -1, handle->ca,
554 on_response_get_ss_waiting_status, evt_cb_data );
556 return TAPI_API_SUCCESS;
559 /**********************************************************************************************
561 * This function is used to interrogate the status of call waiting feature.
563 * @param CallType[IN] of type TelSsCallType_t which specifies the telecommunication service .
564 * @return enum type TapiResult_t Specifies the API's Return result.
567 ***********************************************************************************************/
569 EXPORT_API int tel_get_ss_waiting_status(TapiHandle *handle, const TelSsClass_t class, tapi_response_cb callback, void *user_data)
571 struct tapi_resp_data *evt_cb_data = 0;
574 dbg("Func Entrance ");
576 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
578 param = g_variant_new("(i)", class);
580 g_dbus_connection_call(handle->dbus_connection,
581 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_SS_INTERFACE,
582 "GetWaitingStatus", param, 0,
583 G_DBUS_CALL_FLAGS_NONE, -1, handle->ca,
584 on_response_get_ss_waiting_status, evt_cb_data );
586 return TAPI_API_SUCCESS;
589 /**********************************************************************************************
591 * This function is used to interrogate the status of CLI services feature.
593 * @param CliType[IN] of type TelSsCliType_t which specifies the CLI service .
594 * @return enum type TapiResult_t Specifies the API's Return result.
597 ***********************************************************************************************/
598 EXPORT_API int tel_get_ss_cli_status(TapiHandle *handle, TelSsCliType_t type, tapi_response_cb callback, void *user_data)
600 struct tapi_resp_data *evt_cb_data = 0;
603 dbg("Func Entrance ");
605 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
607 param = g_variant_new("(i)", type);
609 g_dbus_connection_call(handle->dbus_connection,
610 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_SS_INTERFACE,
611 "GetCLIStatus", param, 0,
612 G_DBUS_CALL_FLAGS_NONE, -1, handle->ca,
613 on_response_get_ss_cli_status, evt_cb_data );
615 return TAPI_API_SUCCESS;
618 /**********************************************************************************************
620 * This function is used to send a USSD string and also the User response for a NW intiated USSD.
622 * @param pAppMsg[IN] of type TelSsUssdMsgInfo_t which specifies the USSD String,length of the string, format of the string.
623 * @return enum type TapiResult_t Specifies the API's Return result.
624 * @remark TelSsUssdMsgInfo_t ->IndType is not used while calling this function, This is used for sending the response.
625 * Limo standard defines only one structure for Request and response.
627 ***********************************************************************************************/
628 EXPORT_API int tel_send_ss_ussd_request(TapiHandle *handle, const TelSsUssdMsgInfo_t *info, tapi_response_cb callback, void *user_data)
630 struct tapi_resp_data *evt_cb_data = 0;
633 dbg("Func Entrance ");
635 MAKE_RESP_CB_DATA(evt_cb_data, handle, callback, user_data);
637 param = g_variant_new("(iis)", info->Type, info->Length, info->szString);
639 g_dbus_connection_call(handle->dbus_connection,
640 DBUS_TELEPHONY_SERVICE, handle->path, DBUS_TELEPHONY_SS_INTERFACE,
641 "SendUSSD", param, 0,
642 G_DBUS_CALL_FLAGS_NONE, -1, handle->ca,
643 on_response_send_ss_ussd_request, evt_cb_data );
645 return TAPI_API_SUCCESS;
648 /**********************************************************************************************
650 * This function is used to Sets AOC information.
652 * @param AocType[IN] of type TelSsAocType_t which specifies the which AOC type to read.
653 * @return enum type TapiResult_t Specifies the API's Return result.
656 ***********************************************************************************************/
657 EXPORT_API int tel_get_ss_aoc_info(TapiHandle *handle, TelSsAocType_t AocType, tapi_response_cb callback, void *user_data)
662 /**********************************************************************************************
664 * This function is used to Sets AOC information.
666 * @param AocSetInfo[IN] of type TelCallAocInfo_t which specifies the AOC info parameters .
667 * @return enum type TapiResult_t Specifies the API's Return result.
670 ***********************************************************************************************/
671 EXPORT_API int tel_set_ss_aoc_info(TapiHandle *handle, TelCallAocInfo_t *AocSetInfo, tapi_response_cb callback, void *user_data)