8 #include <glib-object.h>
17 #include <user_request.h>
18 #include <core_object.h>
20 #include <communicator.h>
22 #include "generated-code.h"
26 static void _launch_voice_call( struct tnoti_call_status_incoming* incoming )
30 char forward[2] = {0, };
31 char active_line[2] = {0, };
33 char number[83] = {0, };
34 char name[83] = {0, };
39 snprintf( id, 2, "%d", incoming->id );
40 dbg("id : [%s]", id );
41 snprintf( cli, 2, "%d", incoming->cli.mode );
42 dbg("cli : [%s]", id );
43 snprintf( number, 83, "%s", incoming->cli.number );
44 dbg("number : [%s]", number );
45 snprintf( forward, 2, "%d", incoming->forward );
46 dbg("forward : [%s]", forward );
47 snprintf( active_line, 2, "%d", incoming->active_line );
48 dbg("active_line : [%s]", active_line );
50 if ( incoming->cna.mode == CALL_CNA_MODE_PRESENT )
51 snprintf( cna, 2, "%d", 0 );
53 snprintf( cna, 2, "%d", 1 );
55 dbg("cna : [%s]", cna );
56 snprintf( name, 83, "%s", incoming->cna.name );
57 dbg("name : [%s]", name );
60 bundle_add(kb, "launch-type", "MT");
61 bundle_add(kb, "handle", id);
62 bundle_add(kb, "number", number);
63 bundle_add(kb, "name_mode", cna);
64 bundle_add(kb, "name", name);
65 bundle_add(kb, "clicause", cli);
66 bundle_add(kb, "fwded", forward);
67 bundle_add(kb, "activeline", active_line);
69 ret = aul_launch_app("com.samsung.call", kb);
72 dbg("aul_launch_app [ voice call ] : %d", ret );
75 static void _launch_video_call( struct tnoti_call_status_incoming* incoming )
79 char forward[2] = {0, };
80 char number[83] = {0, };
87 snprintf( id, 2, "%d", incoming->id );
88 dbg("id : [%s]", id );
89 snprintf( number, 83, "%s", incoming->cli.number );
90 dbg("number : [%s]", number );
91 snprintf( cli, 2, "%d", incoming->cli.mode );
92 dbg("cli : [%s]", id );
93 snprintf( forward, 2, "%d", incoming->forward );
94 dbg("forward : [%s]", forward );
97 bundle_add(kb, "KEY_CALL_TYPE", "mt");
98 bundle_add(kb, "KEY_CALL_HANDLE", id);
99 bundle_add(kb, "KEY_CALLING_PARTY_NUMBER", number);
100 bundle_add(kb, "KEY_CLI_CAUSE", cli);
101 bundle_add(kb, "KEY_FORWARDED", forward);
103 ret = aul_launch_app("com.samsung.vtmain", kb);
106 dbg("VT AUL return %d",ret);
109 static gboolean on_call_dial(TelephonyCall *call, GDBusMethodInvocation *invocation, gint call_type, gchar* call_number, gpointer user_data)
111 struct treq_call_dial req;
112 struct custom_data *ctx = user_data;
113 UserRequest *ur = MAKE_UR(ctx, call, invocation);
118 dbg("[ error ] ur : 0");
122 req.type = call_type;
125 memcpy( req.number, call_number, MAX_CALL_DIAL_NUM_LEN );
127 tcore_user_request_set_data( ur, sizeof( struct treq_call_dial ), &req );
128 tcore_user_request_set_command( ur, TREQ_CALL_DIAL );
130 ret = tcore_communicator_dispatch_request( ctx->comm, ur );
131 if ( ret != TCORE_RETURN_SUCCESS ) {
132 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
139 static gboolean on_call_answer(TelephonyCall *call, GDBusMethodInvocation *invocation, gint call_id, gint answer_type, gpointer user_data)
141 struct treq_call_answer req;
142 struct custom_data *ctx = user_data;
143 UserRequest *ur = MAKE_UR(ctx, call, invocation);
148 dbg("[ error ] ur : 0");
153 req.type = answer_type;
155 tcore_user_request_set_data( ur, sizeof( struct treq_call_answer ), &req );
156 tcore_user_request_set_command( ur, TREQ_CALL_ANSWER );
158 ret = tcore_communicator_dispatch_request( ctx->comm, ur );
159 if ( ret != TCORE_RETURN_SUCCESS ) {
160 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
167 static gboolean on_call_end(TelephonyCall *call, GDBusMethodInvocation *invocation, gint call_id, gint end_type, gpointer user_data)
169 struct treq_call_end req;
170 struct custom_data *ctx = user_data;
171 UserRequest *ur = MAKE_UR(ctx, call, invocation);
176 dbg("[ error ] ur : 0");
183 tcore_user_request_set_data( ur, sizeof( struct treq_call_end ), &req );
184 tcore_user_request_set_command( ur, TREQ_CALL_END );
186 ret = tcore_communicator_dispatch_request( ctx->comm, ur );
187 if ( ret != TCORE_RETURN_SUCCESS ) {
188 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
195 static gboolean on_call_dtmf(TelephonyCall *call, GDBusMethodInvocation *invocation, gchar *dtmf_string, gpointer user_data)
197 struct treq_call_dtmf req;
198 struct custom_data *ctx = user_data;
199 UserRequest *ur = MAKE_UR(ctx, call, invocation);
204 dbg("[ error ] ur : 0");
209 memcpy( req.digits, dtmf_string, MAX_CALL_DTMF_DIGITS_LEN );
211 tcore_user_request_set_data( ur, sizeof( struct treq_call_dtmf ), &req );
212 tcore_user_request_set_command( ur, TREQ_CALL_SEND_DTMF );
214 ret = tcore_communicator_dispatch_request( ctx->comm, ur );
215 if ( ret != TCORE_RETURN_SUCCESS ) {
216 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
223 static gboolean on_call_active(TelephonyCall *call, GDBusMethodInvocation *invocation, gint call_id, gpointer user_data)
225 struct treq_call_active req;
226 struct custom_data *ctx = user_data;
227 UserRequest *ur = MAKE_UR(ctx, call, invocation);
232 dbg("[ error ] ur : 0");
238 tcore_user_request_set_data( ur, sizeof( struct treq_call_active ), &req );
239 tcore_user_request_set_command( ur, TREQ_CALL_ACTIVE );
241 ret = tcore_communicator_dispatch_request( ctx->comm, ur );
242 if ( ret != TCORE_RETURN_SUCCESS ) {
243 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
250 static gboolean on_call_hold(TelephonyCall *call, GDBusMethodInvocation *invocation, gint call_id, gpointer user_data)
252 struct treq_call_hold req;
253 struct custom_data *ctx = user_data;
254 UserRequest *ur = MAKE_UR(ctx, call, invocation);
259 dbg("[ error ] ur : 0");
265 tcore_user_request_set_data( ur, sizeof( struct treq_call_hold ), &req );
266 tcore_user_request_set_command( ur, TREQ_CALL_HOLD );
268 ret = tcore_communicator_dispatch_request( ctx->comm, ur );
269 if ( ret != TCORE_RETURN_SUCCESS ) {
270 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
277 static gboolean on_call_swap(TelephonyCall *call, GDBusMethodInvocation *invocation, gint call_id, gpointer user_data)
279 struct treq_call_swap req;
280 struct custom_data *ctx = user_data;
281 UserRequest *ur = MAKE_UR(ctx, call, invocation);
286 dbg("[ error ] ur : 0");
292 tcore_user_request_set_data( ur, sizeof( struct treq_call_swap ), &req );
293 tcore_user_request_set_command( ur, TREQ_CALL_SWAP );
295 ret = tcore_communicator_dispatch_request( ctx->comm, ur );
296 if ( ret != TCORE_RETURN_SUCCESS ) {
297 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
304 static gboolean on_call_join(TelephonyCall *call, GDBusMethodInvocation *invocation, gint call_id, gpointer user_data)
306 struct treq_call_join req;
307 struct custom_data *ctx = user_data;
308 UserRequest *ur = MAKE_UR(ctx, call, invocation);
313 dbg("[ error ] ur : 0");
319 tcore_user_request_set_data( ur, sizeof( struct treq_call_join ), &req );
320 tcore_user_request_set_command( ur, TREQ_CALL_JOIN );
322 ret = tcore_communicator_dispatch_request( ctx->comm, ur );
323 if ( ret != TCORE_RETURN_SUCCESS ) {
324 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
331 static gboolean on_call_split(TelephonyCall *call, GDBusMethodInvocation *invocation, gint call_id, gpointer user_data)
333 struct treq_call_split req;
334 struct custom_data *ctx = user_data;
335 UserRequest *ur = MAKE_UR(ctx, call, invocation);
340 dbg("[ error ] ur : 0");
346 tcore_user_request_set_data( ur, sizeof( struct treq_call_split ), &req );
347 tcore_user_request_set_command( ur, TREQ_CALL_SPLIT );
349 ret = tcore_communicator_dispatch_request( ctx->comm, ur );
350 if ( ret != TCORE_RETURN_SUCCESS ) {
351 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
358 static gboolean on_call_transfer(TelephonyCall *call, GDBusMethodInvocation *invocation, gint call_id, gpointer user_data)
360 struct treq_call_transfer req;
361 struct custom_data *ctx = user_data;
362 UserRequest *ur = MAKE_UR(ctx, call, invocation);
367 dbg("[ error ] ur : 0");
373 tcore_user_request_set_data( ur, sizeof( struct treq_call_transfer ), &req );
374 tcore_user_request_set_command( ur, TREQ_CALL_TRANSFER );
376 ret = tcore_communicator_dispatch_request( ctx->comm, ur );
377 if ( ret != TCORE_RETURN_SUCCESS ) {
378 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
385 static gboolean on_call_deflect(TelephonyCall *call, GDBusMethodInvocation *invocation, gchar *call_number, gpointer user_data)
387 struct treq_call_deflect req;
388 struct custom_data *ctx = user_data;
389 UserRequest *ur = MAKE_UR(ctx, call, invocation);
394 dbg("[ error ] ur : 0");
399 memcpy( req.number, call_number, MAX_CALL_NUMBER_LEN );
401 tcore_user_request_set_data( ur, sizeof( struct treq_call_deflect ), &req );
402 tcore_user_request_set_command( ur, TREQ_CALL_DEFLECT );
404 ret = tcore_communicator_dispatch_request( ctx->comm, ur );
405 if ( ret != TCORE_RETURN_SUCCESS ) {
406 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
413 static gboolean on_call_get_status(TelephonyCall *call, GDBusMethodInvocation *invocation, gint call_id, gpointer user_data )
415 struct custom_data *ctx = user_data;
416 TcorePlugin *plugin = 0;
421 gchar call_number[MAX_CALL_NUMBER_LEN];
423 gboolean call_direction;
425 gboolean call_multiparty_state;
427 plugin = tcore_server_find_plugin(ctx->server, TCORE_PLUGIN_DEFAULT);
429 dbg("[ error ] plugin : 0");
433 o_list = tcore_plugin_get_core_objects_bytype(plugin, CORE_OBJECT_TYPE_CALL);
435 dbg("[ error ] co_list : 0");
439 o = (CoreObject *)o_list->data;
440 g_slist_free(o_list);
442 co = tcore_call_object_find_by_id( o, call_id );
444 dbg("[ error ] co : 0");
448 tcore_call_object_get_number( co, call_number );
450 call_type = tcore_call_object_get_type( co );
451 call_direction = tcore_call_object_get_direction( co );
453 if ( call_direction == TCORE_CALL_DIRECTION_OUTGOING ) {
454 call_direction = TRUE;
456 call_direction = FALSE;
459 call_status = tcore_call_object_get_status( co );
460 call_multiparty_state = tcore_call_object_get_multiparty_state( co );
463 telephony_call_complete_get_status(call, invocation,
464 call_id, call_number, call_type, call_direction, call_status, call_multiparty_state );
469 static gboolean on_call_get_status_all(TelephonyCall *call, GDBusMethodInvocation *invocation, gpointer user_data )
471 struct custom_data *ctx = user_data;
472 TcorePlugin *plugin = 0;
481 gchar call_number[MAX_CALL_NUMBER_LEN];
483 gboolean call_direction;
485 gboolean call_multiparty_state;
489 plugin = tcore_server_find_plugin(ctx->server, TCORE_PLUGIN_DEFAULT);
491 dbg("[ error ] plugin : 0");
495 list = tcore_plugin_get_core_objects_bytype(plugin, CORE_OBJECT_TYPE_CALL);
497 dbg("[ error ] co_list : 0");
501 o = (CoreObject *)list->data;
504 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
506 #define MAX_CALL_STATUS_NUM 7
507 for ( i=0; i<MAX_CALL_STATUS_NUM; i++ ) {
508 list = tcore_call_object_find_by_status( o, i );
515 dbg("[ check ] there is a call on state (0x%x)", i);
519 co = (CallObject*)list->data;
521 dbg("[ error ] call object : 0");
526 call_id = tcore_call_object_get_id( co );
527 len = tcore_call_object_get_number( co, call_number );
529 dbg("[ check ] no number : (0x%d)", call_id);
532 call_type = tcore_call_object_get_type( co );
533 call_direction = tcore_call_object_get_direction( co );
535 if ( call_direction == TCORE_CALL_DIRECTION_OUTGOING ) {
536 call_direction = TRUE;
538 call_direction = FALSE;
541 call_status = tcore_call_object_get_status( co );
542 call_multiparty_state = tcore_call_object_get_multiparty_state( co );
544 g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
545 g_variant_builder_add(&b, "{sv}", "call_id", g_variant_new_int32( call_id ));
546 g_variant_builder_add(&b, "{sv}", "call_number", g_variant_new_string( call_number ));
547 g_variant_builder_add(&b, "{sv}", "call_type", g_variant_new_int32( call_type ));
548 g_variant_builder_add(&b, "{sv}", "call_direction", g_variant_new_boolean( call_direction ));
549 g_variant_builder_add(&b, "{sv}", "call_state", g_variant_new_int32( call_status ));
550 g_variant_builder_add(&b, "{sv}", "call_multiparty_state", g_variant_new_boolean( call_multiparty_state ));
551 g_variant_builder_close(&b);
553 tmp = g_slist_next( tmp );
557 dbg("[ check ] there is no call on state (0x%x)", i);
563 gv = g_variant_builder_end(&b);
565 telephony_call_complete_get_status_all(call, invocation, gv);
572 static gboolean on_call_set_sound_path(TelephonyCall *call, GDBusMethodInvocation *invocation, gint sound_path, gboolean extra_volume_on, gpointer user_data)
574 struct treq_call_sound_set_path req;
575 struct custom_data *ctx = user_data;
576 UserRequest *ur = MAKE_UR(ctx, call, invocation);
581 dbg("[ error ] ur : 0");
585 req.path = sound_path;
586 req.extra_volume_on = extra_volume_on;
588 tcore_user_request_set_data( ur, sizeof( struct treq_call_sound_set_path ), &req );
589 tcore_user_request_set_command( ur, TREQ_CALL_SET_SOUND_PATH );
591 ret = tcore_communicator_dispatch_request( ctx->comm, ur );
592 if ( ret != TCORE_RETURN_SUCCESS ) {
593 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
600 static gboolean on_call_get_volume(TelephonyCall *call, GDBusMethodInvocation *invocation, gint sound_device, gint sound_type, gpointer user_data)
602 struct treq_call_sound_get_volume_level req;
603 struct custom_data *ctx = user_data;
604 UserRequest *ur = MAKE_UR(ctx, call, invocation);
609 dbg("[ error ] ur : 0");
613 req.device = sound_device;
614 req.sound = sound_type;
616 tcore_user_request_set_data( ur, sizeof( struct treq_call_sound_get_volume_level ), &req );
617 tcore_user_request_set_command( ur, TREQ_CALL_GET_SOUND_VOLUME_LEVEL );
619 ret = tcore_communicator_dispatch_request( ctx->comm, ur );
620 if ( ret != TCORE_RETURN_SUCCESS ) {
621 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
628 static gboolean on_call_set_volume(TelephonyCall *call, GDBusMethodInvocation *invocation, gint sound_device, gint sound_type, gint sound_volume, gpointer user_data)
630 struct treq_call_sound_set_volume_level req;
631 struct custom_data *ctx = user_data;
632 UserRequest *ur = MAKE_UR(ctx, call, invocation);
637 dbg("[ error ] ur : 0");
641 req.device = sound_device;
642 req.sound = sound_type;
643 req.volume = sound_volume;
645 tcore_user_request_set_data( ur, sizeof( struct treq_call_sound_set_volume_level ), &req );
646 tcore_user_request_set_command( ur, TREQ_CALL_SET_SOUND_VOLUME_LEVEL );
648 ret = tcore_communicator_dispatch_request( ctx->comm, ur );
649 if ( ret != TCORE_RETURN_SUCCESS ) {
650 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
657 static gboolean on_call_get_mute_status(TelephonyCall *call, GDBusMethodInvocation *invocation, gpointer user_data)
659 struct custom_data *ctx = user_data;
660 UserRequest *ur = MAKE_UR(ctx, call, invocation);
665 dbg("[ error ] ur : 0");
669 tcore_user_request_set_command( ur, TREQ_CALL_GET_MUTE_STATUS );
671 ret = tcore_communicator_dispatch_request( ctx->comm, ur );
672 if ( ret != TCORE_RETURN_SUCCESS ) {
673 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
680 static gboolean on_call_mute(TelephonyCall *call, GDBusMethodInvocation *invocation, gpointer user_data)
682 struct custom_data *ctx = user_data;
683 UserRequest *ur = MAKE_UR(ctx, call, invocation);
688 dbg("[ error ] ur : 0");
692 tcore_user_request_set_command( ur, TREQ_CALL_MUTE );
694 ret = tcore_communicator_dispatch_request( ctx->comm, ur );
695 if ( ret != TCORE_RETURN_SUCCESS ) {
696 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
703 static gboolean on_call_unmute(TelephonyCall *call, GDBusMethodInvocation *invocation, gpointer user_data)
705 struct custom_data *ctx = user_data;
706 UserRequest *ur = MAKE_UR(ctx, call, invocation);
711 dbg("[ error ] ur : 0");
715 tcore_user_request_set_command( ur, TREQ_CALL_UNMUTE );
717 ret = tcore_communicator_dispatch_request( ctx->comm, ur );
718 if ( ret != TCORE_RETURN_SUCCESS ) {
719 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
726 static gboolean on_call_set_sound_recording(TelephonyCall *call, GDBusMethodInvocation *invocation, gint recording_state, gpointer user_data)
728 struct custom_data *ctx = user_data;
729 struct treq_call_sound_set_recording req;
731 UserRequest *ur = MAKE_UR(ctx, call, invocation);
736 dbg("[ error ] ur : 0");
740 req.state = (gboolean)recording_state;
742 tcore_user_request_set_data( ur, sizeof( struct treq_call_sound_set_recording ), &req );
743 tcore_user_request_set_command( ur, TREQ_CALL_SET_SOUND_RECORDING );
745 ret = tcore_communicator_dispatch_request( ctx->comm, ur );
746 if ( ret != TCORE_RETURN_SUCCESS ) {
747 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
754 static gboolean on_call_set_sound_equalization(TelephonyCall *call, GDBusMethodInvocation *invocation, gint eq_mode, gint eq_direction, gchar* eq_parameter, gpointer user_data)
756 struct custom_data *ctx = user_data;
757 struct treq_call_sound_set_equalization req;
759 UserRequest *ur = MAKE_UR(ctx, call, invocation);
764 dbg("[ error ] ur : 0");
768 req.mode = (gboolean)eq_mode;
769 req.direction = (enum telephony_call_sound_direction)eq_direction;
770 memcpy( (char*)req.parameter, (const char*)eq_parameter, (MAX_CALL_EQ_PARAMETER_SIZE*2) );
772 tcore_user_request_set_data( ur, sizeof( struct treq_call_sound_set_equalization ), &req );
773 tcore_user_request_set_command( ur, TREQ_CALL_SET_SOUND_EQUALIZATION );
775 ret = tcore_communicator_dispatch_request( ctx->comm, ur );
776 if ( ret != TCORE_RETURN_SUCCESS ) {
777 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
784 static gboolean on_call_set_sound_noise_reduction(TelephonyCall *call, GDBusMethodInvocation *invocation, gint nr_state, gpointer user_data)
786 struct custom_data *ctx = user_data;
787 struct treq_call_sound_set_noise_reduction req;
789 UserRequest *ur = MAKE_UR(ctx, call, invocation);
794 dbg("[ error ] ur : 0");
798 req.status = (gboolean)nr_state;
800 tcore_user_request_set_data( ur, sizeof( struct treq_call_sound_set_noise_reduction ), &req );
801 tcore_user_request_set_command( ur, TREQ_CALL_SET_SOUND_NOISE_REDUCTION );
803 ret = tcore_communicator_dispatch_request( ctx->comm, ur );
804 if ( ret != TCORE_RETURN_SUCCESS ) {
805 dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
813 gboolean dbus_plugin_setup_call_interface(TelephonyObjectSkeleton *object, struct custom_data *ctx)
817 call = telephony_call_skeleton_new();
818 telephony_object_skeleton_set_call(object, call);
819 g_object_unref(call);
821 g_signal_connect (call,
823 G_CALLBACK (on_call_dial),
826 g_signal_connect (call,
828 G_CALLBACK (on_call_answer),
831 g_signal_connect (call,
833 G_CALLBACK (on_call_end),
836 g_signal_connect (call,
838 G_CALLBACK (on_call_dtmf),
841 g_signal_connect (call,
843 G_CALLBACK (on_call_active),
846 g_signal_connect (call,
848 G_CALLBACK (on_call_hold),
851 g_signal_connect (call,
853 G_CALLBACK (on_call_swap),
856 g_signal_connect (call,
858 G_CALLBACK (on_call_join),
861 g_signal_connect (call,
863 G_CALLBACK (on_call_split),
866 g_signal_connect (call,
868 G_CALLBACK (on_call_transfer),
871 g_signal_connect (call,
873 G_CALLBACK (on_call_deflect),
876 g_signal_connect (call,
878 G_CALLBACK (on_call_get_status),
881 g_signal_connect (call,
882 "handle-get-status-all",
883 G_CALLBACK (on_call_get_status_all),
887 g_signal_connect (call,
888 "handle-set-sound-path",
889 G_CALLBACK (on_call_set_sound_path),
892 g_signal_connect (call,
894 G_CALLBACK (on_call_get_volume),
897 g_signal_connect (call,
899 G_CALLBACK (on_call_set_volume),
902 g_signal_connect (call,
903 "handle-get-mute-status",
904 G_CALLBACK (on_call_get_mute_status),
907 g_signal_connect (call,
909 G_CALLBACK (on_call_mute),
912 g_signal_connect (call,
914 G_CALLBACK (on_call_unmute),
917 g_signal_connect (call,
918 "handle-set-sound-recording",
919 G_CALLBACK (on_call_set_sound_recording),
922 g_signal_connect (call,
923 "handle-set-sound-equalization",
924 G_CALLBACK (on_call_set_sound_equalization),
927 g_signal_connect (call,
928 "handle-set-sound-noise-reduction",
929 G_CALLBACK (on_call_set_sound_noise_reduction),
936 gboolean dbus_plugin_call_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)
941 char *modem_name = NULL;
942 TcorePlugin *p = NULL;
944 modem_name = tcore_user_request_get_modem_name(ur);
948 p = tcore_server_find_plugin(ctx->server, modem_name);
953 co_list = tcore_plugin_get_core_objects_bytype(p, CORE_OBJECT_TYPE_NETWORK);
958 co_call = (CoreObject *)co_list->data;
959 g_slist_free(co_list);
966 case TRESP_CALL_DIAL: {
967 struct tresp_call_dial *resp = (struct tresp_call_dial*)data;
969 dbg("receive TRESP_CALL_DIAL");
970 dbg("resp->err : [%d]", resp->err);
972 telephony_call_complete_dial(dbus_info->interface_object, dbus_info->invocation, resp->err);
975 case TRESP_CALL_ANSWER: {
976 struct tresp_call_answer *resp = (struct tresp_call_answer*)data;
978 dbg("receive TRESP_CALL_ANSWER");
979 dbg("resp->err : [%d]", resp->err);
980 dbg("resp->id : [%d]", resp->id);
982 telephony_call_complete_answer(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->id );
986 case TRESP_CALL_END: {
987 struct tresp_call_end *resp = (struct tresp_call_end*)data;
989 dbg("receive TRESP_CALL_END");
990 dbg("resp->err : [%d]", resp->err);
991 dbg("resp->id : [%d]", resp->err);
992 dbg("resp->type : [%d]", resp->type);
994 telephony_call_complete_end(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->id, resp->type );
998 case TRESP_CALL_HOLD: {
999 struct tresp_call_hold *resp = (struct tresp_call_hold*)data;
1001 dbg("receive TRESP_CALL_HOLD");
1002 dbg("resp->err : [%d]", resp->err);
1003 dbg("resp->id : [%d]", resp->id);
1005 telephony_call_complete_hold(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->id );
1009 case TRESP_CALL_ACTIVE: {
1010 struct tresp_call_active *resp = (struct tresp_call_active*)data;
1012 dbg("receive TRESP_CALL_ACTIVE");
1013 dbg("resp->err : [%d]", resp->err);
1014 dbg("resp->id : [%d]", resp->id);
1016 telephony_call_complete_active(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->id );
1020 case TRESP_CALL_SWAP: {
1021 struct tresp_call_swap *resp = (struct tresp_call_swap*)data;
1023 dbg("receive TRESP_CALL_SWAP");
1024 dbg("resp->err : [%d]", resp->err);
1025 dbg("resp->id : [%d]", resp->id);
1027 telephony_call_complete_swap(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->id );
1031 case TRESP_CALL_JOIN: {
1032 struct tresp_call_join *resp = (struct tresp_call_join*)data;
1034 dbg("receive TRESP_CALL_JOIN");
1035 dbg("resp->err : [%d]", resp->err);
1036 dbg("resp->id : [%d]", resp->id);
1038 telephony_call_complete_join(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->id );
1043 case TRESP_CALL_SPLIT: {
1044 struct tresp_call_split *resp = (struct tresp_call_split*)data;
1046 dbg("receive TRESP_CALL_SPLIT");
1047 dbg("resp->err : [%d]", resp->err);
1048 dbg("resp->id : [%d]", resp->id);
1050 telephony_call_complete_split(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->id );
1054 case TRESP_CALL_DEFLECT: {
1055 struct tresp_call_deflect *resp = (struct tresp_call_deflect*)data;
1057 dbg("receive TRESP_CALL_DEFLECT");
1058 dbg("resp->err : [%d]", resp->err);
1059 dbg("resp->id : [%d]", resp->id);
1061 telephony_call_complete_deflect(dbus_info->interface_object, dbus_info->invocation, resp->err );
1065 case TRESP_CALL_TRANSFER: {
1066 struct tresp_call_transfer *resp = (struct tresp_call_transfer*)data;
1068 dbg("receive TRESP_CALL_TRANSFER");
1069 dbg("resp->err : [%d]", resp->err);
1070 dbg("resp->id : [%d]", resp->id);
1072 telephony_call_complete_transfer(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->id );
1076 case TRESP_CALL_SEND_DTMF: {
1077 struct tresp_call_dtmf *resp = (struct tresp_call_dtmf*)data;
1079 dbg("receive TRESP_CALL_SEND_DTMF");
1080 dbg("resp->err : [%d]", resp->err);
1082 telephony_call_complete_dtmf(dbus_info->interface_object, dbus_info->invocation, resp->err);
1085 case TRESP_CALL_SET_SOUND_PATH: {
1086 struct tresp_call_sound_set_path *resp = (struct tresp_call_sound_set_path*)data;
1088 dbg("receive TRESP_CALL_SET_SOUND_PATH");
1089 dbg("resp->err : [%d]", resp->err);
1091 telephony_call_complete_set_sound_path(dbus_info->interface_object, dbus_info->invocation, resp->err);
1094 case TRESP_CALL_SET_SOUND_VOLUME_LEVEL: {
1095 struct tresp_call_sound_set_volume_level *resp = (struct tresp_call_sound_set_volume_level*)data;
1097 dbg("receive TRESP_CALL_SET_SOUND_VOLUME_LEVEL");
1098 dbg("resp->err : [%d]", resp->err);
1100 telephony_call_complete_set_volume(dbus_info->interface_object, dbus_info->invocation, resp->err);
1103 case TRESP_CALL_GET_SOUND_VOLUME_LEVEL: {
1104 struct tresp_call_sound_get_volume_level *resp = (struct tresp_call_sound_get_volume_level*)data;
1105 GVariant *result = 0;
1108 dbg("receive TRESP_CALL_GET_SOUND_VOLUME_LEVEL");
1110 g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
1112 g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
1114 dbg("resp->err : [%d]", resp->err);
1116 g_variant_builder_add(&b, "{sv}", "err", g_variant_new_int32(resp->err));
1120 dbg("resp->record_num : [%d]", resp->record_num);
1122 for ( i=0; i<resp->record_num; i++ ) {
1123 dbg("resp->type : [%d]", resp->record[i].sound);
1124 dbg("resp->level : [%d]", resp->record[i].volume);
1126 g_variant_builder_add(&b, "{sv}", "type", g_variant_new_int32(resp->record[i].sound));
1127 g_variant_builder_add(&b, "{sv}", "level", g_variant_new_int32(resp->record[i].volume));
1132 g_variant_builder_close(&b);
1134 result = g_variant_builder_end(&b);
1136 telephony_call_complete_get_volume(dbus_info->interface_object, dbus_info->invocation, resp->err, result );
1138 g_variant_unref(result);
1142 case TRESP_CALL_MUTE: {
1143 struct tresp_call_mute *resp = (struct tresp_call_mute*)data;
1145 dbg("receive TRESP_CALL_MUTE");
1146 dbg("resp->err : [%d]", resp->err);
1148 telephony_call_complete_mute(dbus_info->interface_object, dbus_info->invocation, resp->err);
1151 case TRESP_CALL_UNMUTE: {
1152 struct tresp_call_unmute *resp = (struct tresp_call_unmute*)data;
1154 dbg("receive TRESP_CALL_UNMUTE");
1155 dbg("resp->err : [%d]", resp->err);
1157 telephony_call_complete_unmute(dbus_info->interface_object, dbus_info->invocation, resp->err);
1160 case TRESP_CALL_GET_MUTE_STATUS: {
1161 struct tresp_call_get_mute_status *resp = (struct tresp_call_get_mute_status*)data;
1163 dbg("receive TRESP_CALL_GET_MUTE_STATUS");
1164 dbg("resp->err : [%d]", resp->err);
1165 dbg("resp->status : [%d]", resp->status);
1167 telephony_call_complete_get_mute_status(dbus_info->interface_object, dbus_info->invocation, resp->err, resp->status );
1171 case TRESP_CALL_SET_SOUND_RECORDING: {
1172 struct tresp_call_sound_set_recording *resp = (struct tresp_call_sound_set_recording*)data;
1173 telephony_call_complete_set_sound_recording(dbus_info->interface_object, dbus_info->invocation, resp->err );
1177 case TRESP_CALL_SET_SOUND_EQUALIZATION: {
1178 struct tresp_call_sound_set_equalization *resp = (struct tresp_call_sound_set_equalization*)data;
1179 telephony_call_complete_set_sound_equalization(dbus_info->interface_object, dbus_info->invocation, resp->err );
1183 case TRESP_CALL_SET_SOUND_NOISE_REDUCTION: {
1184 struct tresp_call_sound_set_noise_reduction *resp = (struct tresp_call_sound_set_noise_reduction*)data;
1185 telephony_call_complete_set_sound_noise_reduction(dbus_info->interface_object, dbus_info->invocation, resp->err );
1190 dbg("not handled command[%d]", command);
1198 gboolean dbus_plugin_call_notification(struct custom_data *ctx, const char *plugin_name, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data)
1200 TelephonyCall *call;
1207 call = telephony_object_peek_call(TELEPHONY_OBJECT(object));
1208 dbg("call = %p", call);
1211 case TNOTI_CALL_STATUS_IDLE: {
1212 struct tnoti_call_status_idle *idle = (struct tnoti_call_status_idle*)data;
1214 dbg("[ check ] call status : idle");
1216 if ( idle->type != CALL_TYPE_VIDEO ) {
1217 dbg("[ check ] this is voice call");
1218 telephony_call_emit_voice_call_status_idle( call, idle->id, idle->cause, 0, 0 );
1220 dbg("[ check ] this is video call");
1221 telephony_call_emit_video_call_status_idle( call, idle->id, idle->cause, 0, 0 );
1226 case TNOTI_CALL_STATUS_DIALING: {
1227 struct tnoti_call_status_dialing *dialing = (struct tnoti_call_status_dialing*)data;
1229 dbg("[ check ] call status : dialing");
1230 dbg("[ check ] call type : (%d)", dialing->type);
1231 dbg("[ check ] call id : (%d)", dialing->id);
1233 if ( dialing->type != CALL_TYPE_VIDEO ) {
1234 dbg("[ check ] this is voice call");
1235 telephony_call_emit_voice_call_status_dialing( call, dialing->id );
1237 dbg("[ check ] this is video call");
1238 telephony_call_emit_video_call_status_dialing( call, dialing->id );
1242 case TNOTI_CALL_STATUS_ALERT: {
1243 struct tnoti_call_status_alert *alert = (struct tnoti_call_status_alert*)data;
1245 dbg("[ check ] call status : alert");
1247 if ( alert->type != CALL_TYPE_VIDEO ) {
1248 dbg("[ check ] this is voice call");
1249 telephony_call_emit_voice_call_status_alert( call, alert->id );
1251 dbg("[ check ] this is video call");
1252 telephony_call_emit_video_call_status_alert( call, alert->id );
1256 case TNOTI_CALL_STATUS_ACTIVE: {
1257 struct tnoti_call_status_active *active = (struct tnoti_call_status_active*)data;
1259 dbg("[ check ] call status : active");
1261 if ( active->type != CALL_TYPE_VIDEO ) {
1262 dbg("[ check ] this is voice call");
1263 telephony_call_emit_voice_call_status_active( call, active->id );
1265 dbg("[ check ] this is video call");
1266 telephony_call_emit_video_call_status_active( call, active->id );
1270 case TNOTI_CALL_STATUS_HELD: {
1271 struct tnoti_call_status_held *held = (struct tnoti_call_status_held*)data;
1273 dbg("[ check ] call status : held");
1275 telephony_call_emit_voice_call_status_held( call, held->id );
1278 case TNOTI_CALL_STATUS_INCOMING: {
1279 struct tnoti_call_status_incoming *incoming = (struct tnoti_call_status_incoming*)data;
1281 dbg("[ check ] call status : incoming");
1283 if ( incoming->type != CALL_TYPE_VIDEO ) {
1284 dbg("[ check ] this is voice call");
1286 telephony_call_emit_voice_call_status_incoming( call, incoming->id );
1288 _launch_voice_call( incoming );
1291 dbg("[ check ] this is video call");
1292 telephony_call_emit_video_call_status_incoming( call, incoming->id );
1294 _launch_video_call( incoming );
1299 case TNOTI_CALL_SOUND_PATH: {
1301 struct tnoti_call_sound_path *noti = (struct tnoti_call_sound_path*)data;
1302 telephony_call_emit_call_sound_path( call, noti->path );
1307 case TNOTI_CALL_SOUND_RINGBACK_TONE: {
1308 struct tnoti_call_sound_ringback_tone *noti = (struct tnoti_call_sound_ringback_tone*)data;
1309 telephony_call_emit_call_sound_ringback_tone( call, (gint)noti->status );
1313 case TNOTI_CALL_SOUND_WBAMR: {
1314 struct tnoti_call_sound_wbamr *noti = (struct tnoti_call_sound_wbamr*)data;
1315 telephony_call_emit_call_sound_wbamr( call, (gint)noti->status );
1319 case TNOTI_CALL_SOUND_EQUALIZATION: {
1320 struct tnoti_call_sound_equalization *noti = (struct tnoti_call_sound_equalization*)data;
1321 telephony_call_emit_call_sound_equalization( call, (gint)noti->mode, (gint)noti->direction );
1325 case TNOTI_CALL_SOUND_NOISE_REDUCTION: {
1326 struct tnoti_call_sound_noise_reduction *noti = (struct tnoti_call_sound_noise_reduction*)data;
1327 telephony_call_emit_call_sound_noise_reduction( call, (gint)noti->status );
1332 dbg("not handled command[%d]", command);