8 #include <glib-object.h>
15 #include <communicator.h>
18 #include <user_request.h>
23 #include "generated-code.h"
29 on_ss_activate_barring (TelephonySs *ss,
30 GDBusMethodInvocation *invocation,
33 const gchar *barring_password,
37 struct treq_ss_barring req;
38 struct custom_data *ctx = user_data;
39 UserRequest *ur = NULL;
41 memset(&req, 0, sizeof(struct treq_ss_barring));
44 req.mode = barring_mode;
46 memcpy(req.password, barring_password, MAX_SS_BARRING_PASSWORD_LEN);
47 memcpy(buf, barring_password, MAX_SS_BARRING_PASSWORD_LEN);
50 dbg("req.password = [%s]", buf);
52 dbg("class = %d, mode = %d", req.class, req.mode);
54 ur = MAKE_UR(ctx, ss, invocation);
56 tcore_user_request_set_data(ur, sizeof(struct treq_ss_barring), &req);
57 tcore_user_request_set_command(ur, TREQ_SS_BARRING_ACTIVATE);
58 tcore_communicator_dispatch_request(ctx->comm, ur);
64 on_ss_deactivate_barring (TelephonySs *ss,
65 GDBusMethodInvocation *invocation,
68 const gchar *barring_password,
72 struct treq_ss_barring req;
73 struct custom_data *ctx = user_data;
74 UserRequest *ur = NULL;
76 memset(&req, 0, sizeof(struct treq_ss_barring));
79 req.mode = barring_mode;
81 memcpy(req.password, barring_password, MAX_SS_BARRING_PASSWORD_LEN);
82 memcpy(buf, barring_password, MAX_SS_BARRING_PASSWORD_LEN);
85 dbg("req.password = [%s]", buf);
86 dbg("class = %d, mode = %d", req.class, req.mode);
88 ur = MAKE_UR(ctx, ss, invocation);
90 tcore_user_request_set_data(ur, sizeof(struct treq_ss_barring), &req);
91 tcore_user_request_set_command(ur, TREQ_SS_BARRING_DEACTIVATE);
92 tcore_communicator_dispatch_request(ctx->comm, ur);
98 on_ss_change_barring_password (TelephonySs *ss,
99 GDBusMethodInvocation *invocation,
100 const gchar *barring_password,
101 const gchar *barring_password_new,
102 const gchar *barring_password_confirm,
106 struct treq_ss_barring_change_password req;
107 struct custom_data *ctx = user_data;
108 UserRequest *ur = NULL;
110 memset(&req, 0, sizeof(struct treq_ss_barring_change_password));
112 memcpy(req.password_old, barring_password, MAX_SS_BARRING_PASSWORD_LEN);
113 memcpy(req.password_new, barring_password_new, MAX_SS_BARRING_PASSWORD_LEN);
114 memcpy(req.password_confirm, barring_password_confirm, MAX_SS_BARRING_PASSWORD_LEN);
116 memcpy(buf, barring_password, MAX_SS_BARRING_PASSWORD_LEN);
118 dbg("req.password_old = [%s]", buf);
120 memcpy(buf, barring_password_new, MAX_SS_BARRING_PASSWORD_LEN);
121 dbg("req.password_new = [%s]", buf);
124 memcpy(buf, barring_password_confirm, MAX_SS_BARRING_PASSWORD_LEN);
125 dbg("req.password_confirm = [%s]", buf);
127 ur = MAKE_UR(ctx, ss, invocation);
129 tcore_user_request_set_data(ur, sizeof(struct treq_ss_barring_change_password), &req);
130 tcore_user_request_set_command(ur, TREQ_SS_BARRING_CHANGE_PASSWORD);
131 tcore_communicator_dispatch_request(ctx->comm, ur);
137 on_ss_get_barring_status (TelephonySs *ss,
138 GDBusMethodInvocation *invocation,
143 struct treq_ss_barring req;
144 struct custom_data *ctx = user_data;
145 UserRequest *ur = NULL;
147 memset(&req, 0, sizeof(struct treq_ss_barring));
149 req.class = ss_class;
150 req.mode = barring_mode;
152 dbg("class = %d, mode = %d", req.class, req.mode);
154 ur = MAKE_UR(ctx, ss, invocation);
156 tcore_user_request_set_data(ur, sizeof(struct treq_ss_barring), &req);
157 tcore_user_request_set_command(ur, TREQ_SS_BARRING_GET_STATUS);
158 tcore_communicator_dispatch_request(ctx->comm, ur);
165 on_ss_register_forwarding (TelephonySs *ss,
166 GDBusMethodInvocation *invocation,
169 gint forward_no_reply_time,
170 const gchar *forward_number,
173 struct treq_ss_forwarding req;
174 struct custom_data *ctx = user_data;
175 UserRequest *ur = NULL;
177 memset(&req, 0, sizeof(struct treq_ss_forwarding));
179 req.class = ss_class;
180 req.mode = forward_mode;
181 req.time = forward_no_reply_time;
182 snprintf(req.number, MAX_SS_FORWARDING_NUMBER_LEN, "%s", forward_number);
184 dbg("class = %d, mode = %d, time = %d, number = %s",
185 req.class, req.mode, req.time, req.number);
187 ur = MAKE_UR(ctx, ss, invocation);
189 tcore_user_request_set_data(ur, sizeof(struct treq_ss_forwarding), &req);
190 tcore_user_request_set_command(ur, TREQ_SS_FORWARDING_REGISTER);
191 tcore_communicator_dispatch_request(ctx->comm, ur);
197 on_ss_deregister_forwarding (TelephonySs *ss,
198 GDBusMethodInvocation *invocation,
201 gint forward_no_reply_time,
202 const gchar *forward_number,
205 struct treq_ss_forwarding req;
206 struct custom_data *ctx = user_data;
207 UserRequest *ur = NULL;
209 memset(&req, 0, sizeof(struct treq_ss_forwarding));
211 req.class = ss_class;
212 req.mode = forward_mode;
213 req.time = forward_no_reply_time;
214 snprintf(req.number, MAX_SS_FORWARDING_NUMBER_LEN, "%s", forward_number);
216 dbg("class = %d, mode = %d, time = %d, number = %s",
217 req.class, req.mode, req.time, req.number);
219 ur = MAKE_UR(ctx, ss, invocation);
221 tcore_user_request_set_data(ur, sizeof(struct treq_ss_forwarding), &req);
222 tcore_user_request_set_command(ur, TREQ_SS_FORWARDING_DEREGISTER);
223 tcore_communicator_dispatch_request(ctx->comm, ur);
229 on_ss_activate_forwarding (TelephonySs *ss,
230 GDBusMethodInvocation *invocation,
233 gint forward_no_reply_time,
234 const gchar *forward_number,
237 struct treq_ss_forwarding req;
238 struct custom_data *ctx = user_data;
239 UserRequest *ur = NULL;
241 memset(&req, 0, sizeof(struct treq_ss_forwarding));
243 req.class = ss_class;
244 req.mode = forward_mode;
245 req.time = forward_no_reply_time;
246 snprintf(req.number, MAX_SS_FORWARDING_NUMBER_LEN, "%s", forward_number);
248 dbg("class = %d, mode = %d, time = %d, number = %s",
249 req.class, req.mode, req.time, req.number);
251 ur = MAKE_UR(ctx, ss, invocation);
253 tcore_user_request_set_data(ur, sizeof(struct treq_ss_forwarding), &req);
254 tcore_user_request_set_command(ur, TREQ_SS_FORWARDING_ACTIVATE);
255 tcore_communicator_dispatch_request(ctx->comm, ur);
261 on_ss_deactivate_forwarding (TelephonySs *ss,
262 GDBusMethodInvocation *invocation,
265 gint forward_no_reply_time,
266 const gchar *forward_number,
269 struct treq_ss_forwarding req;
270 struct custom_data *ctx = user_data;
271 UserRequest *ur = NULL;
273 memset(&req, 0, sizeof(struct treq_ss_forwarding));
275 req.class = ss_class;
276 req.mode = forward_mode;
277 req.time = forward_no_reply_time;
278 snprintf(req.number, MAX_SS_FORWARDING_NUMBER_LEN, "%s", forward_number);
280 dbg("class = %d, mode = %d, time = %d, number = %s",
281 req.class, req.mode, req.time, req.number);
283 ur = MAKE_UR(ctx, ss, invocation);
285 tcore_user_request_set_data(ur, sizeof(struct treq_ss_forwarding), &req);
286 tcore_user_request_set_command(ur, TREQ_SS_FORWARDING_DEACTIVATE);
287 tcore_communicator_dispatch_request(ctx->comm, ur);
293 on_ss_get_forwarding_status (TelephonySs *ss,
294 GDBusMethodInvocation *invocation,
299 struct treq_ss_forwarding req;
300 struct custom_data *ctx = user_data;
301 UserRequest *ur = NULL;
303 memset(&req, 0, sizeof(struct treq_ss_forwarding));
305 req.class = ss_class;
306 req.mode = forward_mode;
308 dbg("class = %d, mode = %d, time = %d, number = %s",
309 req.class, req.mode, req.time, req.number);
311 ur = MAKE_UR(ctx, ss, invocation);
313 tcore_user_request_set_data(ur, sizeof(struct treq_ss_forwarding), &req);
314 tcore_user_request_set_command(ur, TREQ_SS_FORWARDING_GET_STATUS);
315 tcore_communicator_dispatch_request(ctx->comm, ur);
321 on_ss_activate_waiting (TelephonySs *ss,
322 GDBusMethodInvocation *invocation,
326 struct treq_ss_waiting req;
327 struct custom_data *ctx = user_data;
328 UserRequest *ur = NULL;
330 memset(&req, 0, sizeof(struct treq_ss_waiting));
332 req.class = ss_class;
334 dbg("class = %d", req.class);
336 ur = MAKE_UR(ctx, ss, invocation);
338 tcore_user_request_set_data(ur, sizeof(struct treq_ss_waiting), &req);
339 tcore_user_request_set_command(ur, TREQ_SS_WAITING_ACTIVATE);
340 tcore_communicator_dispatch_request(ctx->comm, ur);
346 on_ss_deactivate_waiting (TelephonySs *ss,
347 GDBusMethodInvocation *invocation,
351 struct treq_ss_waiting req;
352 struct custom_data *ctx = user_data;
353 UserRequest *ur = NULL;
355 memset(&req, 0, sizeof(struct treq_ss_waiting));
357 req.class = ss_class;
359 dbg("class = %d", req.class);
361 ur = MAKE_UR(ctx, ss, invocation);
363 tcore_user_request_set_data(ur, sizeof(struct treq_ss_waiting), &req);
364 tcore_user_request_set_command(ur, TREQ_SS_WAITING_DEACTIVATE);
365 tcore_communicator_dispatch_request(ctx->comm, ur);
371 on_ss_get_waiting_status (TelephonySs *ss,
372 GDBusMethodInvocation *invocation,
376 struct treq_ss_waiting req;
377 struct custom_data *ctx = user_data;
378 UserRequest *ur = NULL;
380 memset(&req, 0, sizeof(struct treq_ss_waiting));
382 req.class = ss_class;
384 dbg("class = %d", req.class);
386 ur = MAKE_UR(ctx, ss, invocation);
388 tcore_user_request_set_data(ur, sizeof(struct treq_ss_waiting), &req);
389 tcore_user_request_set_command(ur, TREQ_SS_WAITING_GET_STATUS);
390 tcore_communicator_dispatch_request(ctx->comm, ur);
396 on_ss_get_cli_status (TelephonySs *ss,
397 GDBusMethodInvocation *invocation,
401 struct treq_ss_cli req;
402 struct custom_data *ctx = user_data;
403 UserRequest *ur = NULL;
405 memset(&req, 0, sizeof(struct treq_ss_cli));
409 dbg("type = %d", req.type);
411 ur = MAKE_UR(ctx, ss, invocation);
413 tcore_user_request_set_data(ur, sizeof(struct treq_ss_cli), &req);
414 tcore_user_request_set_command(ur, TREQ_SS_CLI_GET_STATUS);
415 tcore_communicator_dispatch_request(ctx->comm, ur);
421 on_ss_send_ussd (TelephonySs *ss,
422 GDBusMethodInvocation *invocation,
425 const gchar *ussd_string,
428 struct treq_ss_ussd req;
429 struct custom_data *ctx = user_data;
430 UserRequest *ur = NULL;
432 memset(&req, 0, sizeof(struct treq_ss_ussd));
434 req.type = SS_USSD_TYPE_USER_INITIATED;
435 snprintf(req.str, MAX_SS_USSD_LEN, "%s", ussd_string);
437 dbg("type = %d, string = %s", req.type, req.str);
439 ur = MAKE_UR(ctx, ss, invocation);
441 tcore_user_request_set_data(ur, sizeof(struct treq_ss_ussd), &req);
442 tcore_user_request_set_command(ur, TREQ_SS_SEND_USSD);
443 tcore_communicator_dispatch_request(ctx->comm, ur);
448 gboolean dbus_plugin_setup_ss_interface(TelephonyObjectSkeleton *object, struct custom_data *ctx)
452 ss = telephony_ss_skeleton_new();
453 telephony_object_skeleton_set_ss(object, ss);
456 g_signal_connect (ss,
457 "handle-activate-barring",
458 G_CALLBACK (on_ss_activate_barring),
461 g_signal_connect (ss,
462 "handle-deactivate-barring",
463 G_CALLBACK (on_ss_deactivate_barring),
466 g_signal_connect (ss,
467 "handle-change-barring-password",
468 G_CALLBACK (on_ss_change_barring_password),
471 g_signal_connect (ss,
472 "handle-get-barring-status",
473 G_CALLBACK (on_ss_get_barring_status),
476 g_signal_connect (ss,
477 "handle-register-forwarding",
478 G_CALLBACK (on_ss_register_forwarding),
481 g_signal_connect (ss,
482 "handle-deregister-forwarding",
483 G_CALLBACK (on_ss_deregister_forwarding),
486 g_signal_connect (ss,
487 "handle-activate-forwarding",
488 G_CALLBACK (on_ss_activate_forwarding),
491 g_signal_connect (ss,
492 "handle-deactivate-forwarding",
493 G_CALLBACK (on_ss_deactivate_forwarding),
496 g_signal_connect (ss,
497 "handle-get-forwarding-status",
498 G_CALLBACK (on_ss_get_forwarding_status),
501 g_signal_connect (ss,
502 "handle-activate-waiting",
503 G_CALLBACK (on_ss_activate_waiting),
506 g_signal_connect (ss,
507 "handle-deactivate-waiting",
508 G_CALLBACK (on_ss_deactivate_waiting),
511 g_signal_connect (ss,
512 "handle-get-waiting-status",
513 G_CALLBACK (on_ss_get_waiting_status),
516 g_signal_connect (ss,
517 "handle-get-clistatus",
518 G_CALLBACK (on_ss_get_cli_status),
521 g_signal_connect (ss,
523 G_CALLBACK (on_ss_send_ussd),
529 gboolean dbus_plugin_ss_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)
531 GVariant *result = 0;
536 case TRESP_SS_BARRING_ACTIVATE: {
538 const struct tresp_ss_barring *resp = data;
540 dbg("receive TRESP_SS_BARRING_ACTIVATE");
541 dbg("resp->err = 0x%x", resp->err);
543 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
545 for (i=0; i<resp->record_num; i++) {
546 g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
547 g_variant_builder_add(&b, "{sv}", "ss_class", g_variant_new_int32( resp->record[i].class ));
548 g_variant_builder_add(&b, "{sv}", "ss_status", g_variant_new_int32( resp->record[i].status ));
549 g_variant_builder_add(&b, "{sv}", "barring_mode", g_variant_new_int32( resp->record[i].mode ));
550 g_variant_builder_close(&b);
553 result = g_variant_builder_end(&b);
555 telephony_ss_complete_activate_barring(dbus_info->interface_object, dbus_info->invocation, result, resp->err);
557 g_variant_unref(result);
561 case TRESP_SS_BARRING_DEACTIVATE: {
563 const struct tresp_ss_barring *resp = data;
565 dbg("receive TRESP_SS_BARRING_DEACTIVATE");
566 dbg("resp->err = 0x%x", resp->err);
568 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
570 for (i=0; i<resp->record_num; i++) {
571 g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
572 g_variant_builder_add(&b, "{sv}", "ss_class", g_variant_new_int32( resp->record[i].class ));
573 g_variant_builder_add(&b, "{sv}", "ss_status", g_variant_new_int32( resp->record[i].status ));
574 g_variant_builder_add(&b, "{sv}", "barring_mode", g_variant_new_int32( resp->record[i].mode ));
575 g_variant_builder_close(&b);
578 result = g_variant_builder_end(&b);
580 telephony_ss_complete_deactivate_barring(dbus_info->interface_object, dbus_info->invocation, result, resp->err);
582 g_variant_unref(result);
586 case TRESP_SS_BARRING_CHANGE_PASSWORD: {
588 const struct tresp_ss_general *resp = data;
590 dbg("receive TRESP_SS_BARRING_CHANGE_PASSWORD");
591 dbg("resp->err = 0x%x", resp->err);
593 telephony_ss_complete_change_barring_password(dbus_info->interface_object, dbus_info->invocation, resp->err);
597 case TRESP_SS_BARRING_GET_STATUS: {
599 const struct tresp_ss_barring *resp = data;
601 dbg("receive TRESP_SS_BARRING_GET_STATUS");
602 dbg("resp->err = 0x%x", resp->err);
604 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
606 for (i=0; i<resp->record_num; i++) {
607 g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
608 g_variant_builder_add(&b, "{sv}", "ss_class", g_variant_new_int32( resp->record[i].class ));
609 g_variant_builder_add(&b, "{sv}", "ss_status", g_variant_new_int32( resp->record[i].status ));
610 g_variant_builder_add(&b, "{sv}", "barring_mode", g_variant_new_int32( resp->record[i].mode ));
611 g_variant_builder_close(&b);
614 result = g_variant_builder_end(&b);
616 telephony_ss_complete_get_barring_status(dbus_info->interface_object, dbus_info->invocation, result, resp->err);
618 g_variant_unref(result);
622 case TRESP_SS_FORWARDING_ACTIVATE: {
623 const struct tresp_ss_forwarding *resp = data;
625 dbg("receive TRESP_SS_FORWARDING_ACTIVATE");
626 dbg("resp->err = 0x%x", resp->err);
628 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
630 for (i=0; i<resp->record_num; i++) {
631 g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
632 g_variant_builder_add(&b, "{sv}", "ss_class", g_variant_new_int32( resp->record[i].class ));
633 g_variant_builder_add(&b, "{sv}", "ss_status", g_variant_new_int32( resp->record[i].status ));
634 g_variant_builder_add(&b, "{sv}", "forwarding_mode", g_variant_new_int32( resp->record[i].mode ));
635 g_variant_builder_add(&b, "{sv}", "no_reply_time", g_variant_new_int32( resp->record[i].time ));
636 g_variant_builder_add(&b, "{sv}", "number_present", g_variant_new_int32( resp->record[i].number_present ));
637 g_variant_builder_add(&b, "{sv}", "forwarding_number", g_variant_new_string( resp->record[i].number ));
638 g_variant_builder_close(&b);
641 result = g_variant_builder_end(&b);
643 telephony_ss_complete_activate_forwarding(dbus_info->interface_object, dbus_info->invocation, result, resp->err);
645 g_variant_unref(result);
649 case TRESP_SS_FORWARDING_DEACTIVATE: {
651 const struct tresp_ss_forwarding *resp = data;
653 dbg("receive TRESP_SS_FORWARDING_DEACTIVATE");
654 dbg("resp->err = 0x%x", resp->err);
656 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
658 for (i=0; i<resp->record_num; i++) {
659 g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
660 g_variant_builder_add(&b, "{sv}", "ss_class", g_variant_new_int32( resp->record[i].class ));
661 g_variant_builder_add(&b, "{sv}", "ss_status", g_variant_new_int32( resp->record[i].status ));
662 g_variant_builder_add(&b, "{sv}", "forwarding_mode", g_variant_new_int32( resp->record[i].mode ));
663 g_variant_builder_add(&b, "{sv}", "no_reply_time", g_variant_new_int32( resp->record[i].time ));
664 g_variant_builder_add(&b, "{sv}", "number_present", g_variant_new_int32( resp->record[i].number_present ));
665 g_variant_builder_add(&b, "{sv}", "forwarding_number", g_variant_new_string( resp->record[i].number ));
666 g_variant_builder_close(&b);
669 result = g_variant_builder_end(&b);
671 telephony_ss_complete_deactivate_forwarding(dbus_info->interface_object, dbus_info->invocation, result, resp->err);
673 g_variant_unref(result);
677 case TRESP_SS_FORWARDING_REGISTER: {
679 const struct tresp_ss_forwarding *resp = data;
681 dbg("receive TRESP_SS_FORWARDING_REGISTER");
682 dbg("resp->err = 0x%x", resp->err);
684 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
686 for (i=0; i<resp->record_num; i++) {
687 g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
688 g_variant_builder_add(&b, "{sv}", "ss_class", g_variant_new_int32( resp->record[i].class ));
689 g_variant_builder_add(&b, "{sv}", "ss_status", g_variant_new_int32( resp->record[i].status ));
690 g_variant_builder_add(&b, "{sv}", "forwarding_mode", g_variant_new_int32( resp->record[i].mode ));
691 g_variant_builder_add(&b, "{sv}", "no_reply_time", g_variant_new_int32( resp->record[i].time ));
692 g_variant_builder_add(&b, "{sv}", "number_present", g_variant_new_int32( resp->record[i].number_present ));
693 g_variant_builder_add(&b, "{sv}", "forwarding_number", g_variant_new_string( resp->record[i].number ));
694 g_variant_builder_close(&b);
697 result = g_variant_builder_end(&b);
699 telephony_ss_complete_register_forwarding(dbus_info->interface_object, dbus_info->invocation, result, resp->err);
701 g_variant_unref(result);
705 case TRESP_SS_FORWARDING_DEREGISTER: {
707 const struct tresp_ss_forwarding *resp = data;
709 dbg("receive TRESP_SS_FORWARDING_DEREGISTER");
710 dbg("resp->err = 0x%x", resp->err);
712 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
714 for (i=0; i<resp->record_num; i++) {
715 g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
716 g_variant_builder_add(&b, "{sv}", "ss_class", g_variant_new_int32( resp->record[i].class ));
717 g_variant_builder_add(&b, "{sv}", "ss_status", g_variant_new_int32( resp->record[i].status ));
718 g_variant_builder_add(&b, "{sv}", "forwarding_mode", g_variant_new_int32( resp->record[i].mode ));
719 g_variant_builder_add(&b, "{sv}", "no_reply_time", g_variant_new_int32( resp->record[i].time ));
720 g_variant_builder_add(&b, "{sv}", "number_present", g_variant_new_int32( resp->record[i].number_present ));
721 g_variant_builder_add(&b, "{sv}", "forwarding_number", g_variant_new_string( resp->record[i].number ));
722 g_variant_builder_close(&b);
725 result = g_variant_builder_end(&b);
727 telephony_ss_complete_deregister_forwarding(dbus_info->interface_object, dbus_info->invocation, result, resp->err);
729 g_variant_unref(result);
733 case TRESP_SS_FORWARDING_GET_STATUS: {
735 const struct tresp_ss_forwarding *resp = data;
737 dbg("receive TRESP_SS_FORWARDING_GET_STATUS");
738 dbg("resp->err = 0x%x", resp->err);
740 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
742 for (i=0; i<resp->record_num; i++) {
743 g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
744 g_variant_builder_add(&b, "{sv}", "ss_class", g_variant_new_int32( resp->record[i].class ));
745 g_variant_builder_add(&b, "{sv}", "ss_status", g_variant_new_int32( resp->record[i].status ));
746 g_variant_builder_add(&b, "{sv}", "forwarding_mode", g_variant_new_int32( resp->record[i].mode ));
747 g_variant_builder_add(&b, "{sv}", "no_reply_time", g_variant_new_int32( resp->record[i].time ));
748 g_variant_builder_add(&b, "{sv}", "number_present", g_variant_new_int32( resp->record[i].number_present ));
749 g_variant_builder_add(&b, "{sv}", "forwarding_number", g_variant_new_string( resp->record[i].number ));
750 g_variant_builder_close(&b);
753 result = g_variant_builder_end(&b);
755 telephony_ss_complete_get_forwarding_status(dbus_info->interface_object, dbus_info->invocation, result, resp->err);
757 g_variant_unref(result);
761 case TRESP_SS_WAITING_ACTIVATE: {
763 const struct tresp_ss_waiting *resp = data;
765 dbg("receive TRESP_SS_WAITING_ACTIVATE");
766 dbg("resp->err = 0x%x", resp->err);
768 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
770 for (i=0; i<resp->record_num; i++) {
771 g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
772 g_variant_builder_add(&b, "{sv}", "ss_class", g_variant_new_int32( resp->record[i].class ));
773 g_variant_builder_add(&b, "{sv}", "ss_status", g_variant_new_int32( resp->record[i].status ));
774 g_variant_builder_close(&b);
777 result = g_variant_builder_end(&b);
779 telephony_ss_complete_activate_waiting(dbus_info->interface_object, dbus_info->invocation, result, resp->err);
781 g_variant_unref(result);
785 case TRESP_SS_WAITING_DEACTIVATE: {
787 const struct tresp_ss_waiting *resp = data;
789 dbg("receive TRESP_SS_WAITING_DEACTIVATE");
790 dbg("resp->err = 0x%x", resp->err);
792 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
794 for (i=0; i<resp->record_num; i++) {
795 g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
796 g_variant_builder_add(&b, "{sv}", "ss_class", g_variant_new_int32( resp->record[i].class ));
797 g_variant_builder_add(&b, "{sv}", "ss_status", g_variant_new_int32( resp->record[i].status ));
798 g_variant_builder_close(&b);
801 result = g_variant_builder_end(&b);
803 telephony_ss_complete_deactivate_waiting(dbus_info->interface_object, dbus_info->invocation, result, resp->err);
805 g_variant_unref(result);
809 case TRESP_SS_WAITING_GET_STATUS: {
811 const struct tresp_ss_waiting *resp = data;
813 dbg("receive TRESP_SS_WAITING_GET_STATUS");
814 dbg("resp->err = 0x%x", resp->err);
816 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
818 for (i=0; i<resp->record_num; i++) {
819 g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
820 g_variant_builder_add(&b, "{sv}", "ss_class", g_variant_new_int32( resp->record[i].class ));
821 g_variant_builder_add(&b, "{sv}", "ss_status", g_variant_new_int32( resp->record[i].status ));
822 g_variant_builder_close(&b);
825 result = g_variant_builder_end(&b);
827 telephony_ss_complete_get_waiting_status(dbus_info->interface_object, dbus_info->invocation, result, resp->err);
829 g_variant_unref(result);
833 case TRESP_SS_CLI_GET_STATUS: {
835 const struct tresp_ss_cli *resp = data;
837 dbg("receive TRESP_SS_CLI_GET_STATUS");
838 dbg("resp->err = 0x%x", resp->err);
840 telephony_ss_complete_get_clistatus(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->type, resp->status);
844 case TRESP_SS_SEND_USSD: {
846 const struct tresp_ss_ussd *resp = data;
848 dbg("receive TRESP_SS_SEND_USSD");
849 dbg("resp->err = 0x%x", resp->err);
852 dbg("USSD Request is failed");
853 telephony_ss_complete_send_ussd(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->type, resp->status, -1, 0);
856 int ussd_len = strlen(resp->str);
857 dbg("USSD Request is Success");
858 dbg("USSD : %s (%d)", resp->str, ussd_len);
859 telephony_ss_complete_send_ussd(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->type, resp->status, ussd_len, resp->str);
866 dbg("not handled command[%d]", command);
873 gboolean dbus_plugin_ss_notification(struct custom_data *ctx, const char *plugin_name, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data)
876 const struct tnoti_ss_ussd *ussd = data;
879 dbg("object is NULL");
883 ss = telephony_object_peek_ss(TELEPHONY_OBJECT(object));
888 telephony_ss_emit_notify_ussd(ss,
895 dbg("not handled command[%d]", command);