2 * Copyright (c) 2011-2016 Samsung Electronics Co., Ltd All Rights Reserved
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 * http://www.apache.org/licenses/LICENSE-2.0
7 * Unless required by applicable law or agreed to in writing, software
8 * distributed under the License is distributed on an "AS IS" BASIS,
9 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10 * See the License for the specific language governing permissions and
11 * limitations under the License.
17 #include <sys/inotify.h>
19 #include "tts_client.h"
20 #include "tts_config_mgr.h"
26 #define HELLO_WAITING_TIME 500
27 #define WAITING_TIME 5000
29 static DBusConnection* g_conn_sender = NULL;
30 static DBusConnection* g_conn_listener = NULL;
32 static Ecore_Fd_Handler* g_dbus_fd_handler = NULL;
35 extern int __tts_cb_error(int uid, tts_error_e reason, int utt_id, char *err_msg);
37 extern int __tts_cb_set_state(int uid, int state);
39 extern int __tts_cb_utt_started(int uid, int utt_id);
41 extern int __tts_cb_utt_completed(int uid, int utt_id);
44 static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handler)
46 if (NULL == g_conn_listener) return ECORE_CALLBACK_RENEW;
48 dbus_connection_read_write_dispatch(g_conn_listener, 50);
51 DBusMessage* msg = NULL;
52 msg = dbus_connection_pop_message(g_conn_listener);
54 if (true != dbus_connection_get_is_connected(g_conn_listener)) {
55 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Connection is disconnected");
59 /* loop again if we haven't read a message */
65 dbus_error_init(&err);
67 char if_name[64] = {0, };
68 snprintf(if_name, 64, "%s", TTS_CLIENT_SERVICE_INTERFACE);
70 if (dbus_message_is_signal(msg, if_name, TTSD_METHOD_UTTERANCE_STARTED)) {
74 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INT32, &uttid, DBUS_TYPE_INVALID);
75 if (dbus_error_is_set(&err)) {
76 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Get arguments error (%s)", err.message);
77 dbus_error_free(&err);
80 if (0 == __tts_cb_utt_started(uid, uttid)) {
81 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts utterance started : uid(%d) uttid(%d)", uid, uttid);
83 } /* TTSD_METHOD_UTTERANCE_STARTED */
85 else if (dbus_message_is_signal(msg, if_name, TTSD_METHOD_UTTERANCE_COMPLETED)) {
89 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INT32, &uttid, DBUS_TYPE_INVALID);
90 if (dbus_error_is_set(&err)) {
91 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Get arguments error (%s)", err.message);
92 dbus_error_free(&err);
95 if (0 == __tts_cb_utt_completed(uid, uttid)) {
96 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts utterance completed : uid(%d) uttid(%d)", uid, uttid);
98 } /* TTS_SIGNAL_UTTERANCE_STARTED */
100 else if (dbus_message_is_signal(msg, if_name, TTSD_METHOD_SET_STATE)) {
104 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INT32, &state, DBUS_TYPE_INVALID);
105 if (dbus_error_is_set(&err)) {
106 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Get arguments error (%s)", err.message);
107 dbus_error_free(&err);
110 if (0 == __tts_cb_set_state(uid, state)) {
111 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts state changed : uid(%d) state(%d)", uid, state);
113 } /* TTSD_SIGNAL_SET_STATE */
115 else if (dbus_message_is_signal(msg, if_name, TTSD_METHOD_ERROR)) {
121 dbus_message_get_args(msg, &err,
122 DBUS_TYPE_INT32, &uid,
123 DBUS_TYPE_INT32, &uttid,
124 DBUS_TYPE_INT32, &reason,
125 DBUS_TYPE_STRING, &err_msg,
128 if (dbus_error_is_set(&err)) {
129 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Get Error message - Get arguments error (%s)", err.message);
130 dbus_error_free(&err);
132 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Get Error message : uid(%d), error(%d), uttid(%d), err_msg(%s)", uid, reason, uttid, (NULL == err_msg) ? "NULL" : err_msg);
133 __tts_cb_error(uid, reason, uttid, err_msg);
136 } /* TTSD_SIGNAL_ERROR */
139 SLOG(LOG_DEBUG, TAG_TTSC, "Message is NOT valid");
140 dbus_message_unref(msg);
144 /* free the message */
145 dbus_message_unref(msg);
147 return ECORE_CALLBACK_PASS_ON;
150 int tts_dbus_open_connection()
152 if (NULL != g_conn_sender && NULL != g_conn_listener) {
153 SLOG(LOG_WARN, TAG_TTSC, "already existed connection ");
159 /* initialise the error value */
160 dbus_error_init(&err);
162 /* connect to the DBUS system bus, and check for errors */
163 g_conn_sender = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
164 if (dbus_error_is_set(&err)) {
165 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Dbus Connection Error (%s)", err.message);
166 dbus_error_free(&err);
169 if (NULL == g_conn_sender) {
170 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] fail to get dbus connection");
171 return TTS_ERROR_OPERATION_FAILED;
174 dbus_connection_set_exit_on_disconnect(g_conn_sender, false);
176 g_conn_listener = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
177 if (dbus_error_is_set(&err)) {
178 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Dbus Connection Error (%s)", err.message);
179 dbus_error_free(&err);
182 if (NULL == g_conn_listener) {
183 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] fail to get dbus connection for listener");
184 return TTS_ERROR_OPERATION_FAILED;
187 char rule[128] = {0, };
188 snprintf(rule, 128, "type='signal',interface='%s'", TTS_CLIENT_SERVICE_INTERFACE);
190 /* add a rule for which messages we want to see */
191 dbus_bus_add_match(g_conn_listener, rule, &err);
192 dbus_connection_flush(g_conn_listener);
195 if (true != dbus_connection_get_unix_fd(g_conn_listener, &fd)) {
196 SLOG(LOG_ERROR, TAG_TTSC, "Fail to get fd from dbus");
197 return TTS_ERROR_OPERATION_FAILED;
199 SLOG(LOG_DEBUG, TAG_TTSC, "Get fd from dbus : %d", fd);
202 g_dbus_fd_handler = ecore_main_fd_handler_add(fd, ECORE_FD_READ, (Ecore_Fd_Cb)listener_event_callback, NULL, NULL, NULL);
203 if (NULL == g_dbus_fd_handler) {
204 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to get fd handler from ecore");
205 return TTS_ERROR_OPERATION_FAILED;
211 int tts_dbus_close_connection()
214 dbus_error_init(&err);
216 if (NULL != g_dbus_fd_handler) {
217 ecore_main_fd_handler_del(g_dbus_fd_handler);
218 g_dbus_fd_handler = NULL;
221 dbus_connection_close(g_conn_sender);
222 dbus_connection_close(g_conn_listener);
224 dbus_connection_unref(g_conn_sender);
225 dbus_connection_unref(g_conn_listener);
227 g_conn_sender = NULL;
228 g_conn_listener = NULL;
233 int tts_dbus_reconnect()
235 bool sender_connected = dbus_connection_get_is_connected(g_conn_sender);
236 bool listener_connected = dbus_connection_get_is_connected(g_conn_listener);
237 SLOG(LOG_DEBUG, TAG_TTSC, "[DBUS] Sender(%s) Listener(%s)",
238 sender_connected ? "Connected" : "Not connected", listener_connected ? "Connected" : "Not connected");
240 if (false == sender_connected || false == listener_connected) {
241 tts_dbus_close_connection();
243 if (0 != tts_dbus_open_connection()) {
244 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to reconnect");
248 SLOG(LOG_DEBUG, TAG_TTSC, "[DBUS] Reconnect");
254 DBusMessage* __tts_dbus_make_message(int uid, const char* method)
256 if (NULL == method) {
257 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input method is NULL");
261 tts_client_s* client = tts_client_get_by_uid(uid);
264 if (NULL == client) {
265 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] uid is not available");
271 if (TTS_MODE_DEFAULT == client->mode) {
272 msg = dbus_message_new_method_call(
273 TTS_SERVER_SERVICE_NAME,
274 TTS_SERVER_SERVICE_OBJECT_PATH,
275 TTS_SERVER_SERVICE_INTERFACE,
277 } else if (TTS_MODE_NOTIFICATION == client->mode) {
278 msg = dbus_message_new_method_call(
279 TTS_NOTI_SERVER_SERVICE_NAME,
280 TTS_NOTI_SERVER_SERVICE_OBJECT_PATH,
281 TTS_NOTI_SERVER_SERVICE_INTERFACE,
283 } else if (TTS_MODE_SCREEN_READER == client->mode) {
284 msg = dbus_message_new_method_call(
285 TTS_SR_SERVER_SERVICE_NAME,
286 TTS_SR_SERVER_SERVICE_OBJECT_PATH,
287 TTS_SR_SERVER_SERVICE_INTERFACE,
290 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input mode is not available");
297 int tts_dbus_request_hello(int uid)
300 dbus_error_init(&err);
303 msg = __tts_dbus_make_message(uid, TTS_METHOD_HELLO);
305 if (dbus_error_is_set(&err)) {
306 // SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts dbus log : %s", err);
307 dbus_error_free(&err);
311 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts hello : Fail to make message");
312 return TTS_ERROR_OPERATION_FAILED;
315 DBusMessage* result_msg = NULL;
318 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, HELLO_WAITING_TIME, &err);
319 dbus_message_unref(msg);
320 if (dbus_error_is_set(&err)) {
321 // SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts dbus log : %s", err);
322 dbus_error_free(&err);
325 if (NULL != result_msg) {
326 dbus_message_unref(result_msg);
328 // SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts hello");
331 result = TTS_ERROR_TIMED_OUT;
337 int tts_dbus_request_initialize(int uid, bool* credential_needed)
341 dbus_error_init(&err);
343 msg = __tts_dbus_make_message(uid, TTS_METHOD_INITIALIZE);
346 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts initialize : Fail to make message");
347 return TTS_ERROR_OPERATION_FAILED;
349 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts initialize : uid(%d)", uid);
353 if (true != dbus_message_append_args(msg, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
354 dbus_message_unref(msg);
355 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
357 return TTS_ERROR_OPERATION_FAILED;
360 DBusMessage* result_msg;
361 int result = TTS_ERROR_OPERATION_FAILED;
363 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
364 dbus_message_unref(msg);
365 if (dbus_error_is_set(&err)) {
366 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
367 dbus_error_free(&err);
371 if (NULL != result_msg) {
372 dbus_message_get_args(result_msg, &err,
373 DBUS_TYPE_INT32, &result,
374 DBUS_TYPE_INT32, &temp,
377 if (dbus_error_is_set(&err)) {
378 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Get arguments error (%s)", err.message);
379 dbus_error_free(&err);
380 result = TTS_ERROR_OPERATION_FAILED;
383 dbus_message_unref(result_msg);
386 *credential_needed = (bool)temp;
387 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts initialize : result = %d, credential_needed(%d)", result, *credential_needed);
389 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts initialize : result = %d", result);
392 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
393 tts_dbus_reconnect();
394 result = TTS_ERROR_TIMED_OUT;
401 int tts_dbus_request_finalize(int uid)
405 dbus_error_init(&err);
407 msg = __tts_dbus_make_message(uid, TTS_METHOD_FINALIZE);
410 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts finalize : Fail to make message");
411 return TTS_ERROR_OPERATION_FAILED;
413 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts finalize : uid(%d)", uid);
416 if (true != dbus_message_append_args(msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
417 dbus_message_unref(msg);
418 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
420 return TTS_ERROR_OPERATION_FAILED;
423 DBusMessage* result_msg;
424 int result = TTS_ERROR_OPERATION_FAILED;
426 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
427 dbus_message_unref(msg);
428 if (dbus_error_is_set(&err)) {
429 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error %s", err.message);
430 dbus_error_free(&err);
433 if (NULL != result_msg) {
434 dbus_message_get_args(result_msg, &err, DBUS_TYPE_INT32, &result, DBUS_TYPE_INVALID);
436 if (dbus_error_is_set(&err)) {
437 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Get arguments error (%s)", err.message);
438 dbus_error_free(&err);
439 result = TTS_ERROR_OPERATION_FAILED;
442 dbus_message_unref(result_msg);
445 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts finalize : result = %d", result);
447 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts finalize : result = %d", result);
450 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
451 tts_dbus_reconnect();
452 result = TTS_ERROR_TIMED_OUT;
458 int tts_dbus_request_add_text(int uid, const char* text, const char* lang, int vctype, int speed, int uttid, const char* credential)
460 if (NULL == text || NULL == lang) {
461 SLOG(LOG_ERROR, TAG_TTSC, "Input parameter is NULL");
462 return TTS_ERROR_INVALID_PARAMETER;
467 dbus_error_init(&err);
469 msg = __tts_dbus_make_message(uid, TTS_METHOD_ADD_QUEUE);
472 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts add text : Fail to make message");
473 return TTS_ERROR_OPERATION_FAILED;
475 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts add text : uid(%d), text(%s), lang(%s), type(%d), speed(%d), id(%d), credential(%s)",
476 uid, text, lang, vctype, speed, uttid, (NULL == credential) ? "NULL" : credential);
480 if (NULL == credential) {
481 temp = strdup("NULL");
483 temp = strdup(credential);
486 if (true != dbus_message_append_args(msg,
487 DBUS_TYPE_INT32, &uid,
488 DBUS_TYPE_STRING, &text,
489 DBUS_TYPE_STRING, &lang,
490 DBUS_TYPE_INT32, &vctype,
491 DBUS_TYPE_INT32, &speed,
492 DBUS_TYPE_INT32, &uttid,
493 DBUS_TYPE_STRING, &temp,
494 DBUS_TYPE_INVALID)) {
495 dbus_message_unref(msg);
496 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
502 return TTS_ERROR_OPERATION_FAILED;
505 DBusMessage* result_msg;
506 int result = TTS_ERROR_OPERATION_FAILED;
508 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
509 dbus_message_unref(msg);
510 if (dbus_error_is_set(&err)) {
511 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
512 dbus_error_free(&err);
515 if (NULL != result_msg) {
516 dbus_message_get_args(result_msg, &err,
517 DBUS_TYPE_INT32, &result,
520 if (dbus_error_is_set(&err)) {
521 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts add text : Get arguments error (%s)", err.message);
522 dbus_error_free(&err);
523 result = TTS_ERROR_OPERATION_FAILED;
525 dbus_message_unref(result_msg);
528 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts add text : result(%d)", result);
530 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts add text : result(%d)", result);
533 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
534 tts_dbus_reconnect();
535 result = TTS_ERROR_TIMED_OUT;
545 int tts_dbus_request_set_private_data(int uid, const char* key, const char* data)
547 if (NULL == key || NULL == data) {
548 SLOG(LOG_ERROR, TAG_TTSC, "Input parameter is NULL");
549 return TTS_ERROR_INVALID_PARAMETER;
554 dbus_error_init(&err);
556 msg = __tts_dbus_make_message(uid, TTS_METHOD_SET_PRIVATE_DATA);
559 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts set private data : Fail to make message");
560 return TTS_ERROR_OPERATION_FAILED;
562 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts set private data : uid(%d)", uid);
565 if (true != dbus_message_append_args(msg,
566 DBUS_TYPE_INT32, &uid,
567 DBUS_TYPE_STRING, &key,
568 DBUS_TYPE_STRING, &data,
569 DBUS_TYPE_INVALID)) {
570 dbus_message_unref(msg);
571 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
573 return TTS_ERROR_OPERATION_FAILED;
576 DBusMessage* result_msg;
577 int result = TTS_ERROR_OPERATION_FAILED;
579 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
580 dbus_message_unref(msg);
581 if (dbus_error_is_set(&err)) {
582 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
583 dbus_error_free(&err);
586 if (NULL != result_msg) {
587 dbus_message_get_args(result_msg, &err,
588 DBUS_TYPE_INT32, &result,
591 if (dbus_error_is_set(&err)) {
592 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts set private data : Get arguments error (%s)", err.message);
593 dbus_error_free(&err);
594 result = TTS_ERROR_OPERATION_FAILED;
596 dbus_message_unref(result_msg);
599 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts set private data : result(%d)", result);
601 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts set private data : result(%d)", result);
604 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
605 tts_dbus_reconnect();
606 result = TTS_ERROR_TIMED_OUT;
612 int tts_dbus_request_get_private_data(int uid, const char* key, char** data)
614 if (NULL == key || NULL == data) {
615 SLOG(LOG_ERROR, TAG_TTSC, "Input parameter is NULL");
616 return TTS_ERROR_INVALID_PARAMETER;
621 dbus_error_init(&err);
623 msg = __tts_dbus_make_message(uid, TTS_METHOD_GET_PRIVATE_DATA);
626 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts get private data : Fail to make message");
627 return TTS_ERROR_OPERATION_FAILED;
629 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts get private data : uid(%d)", uid);
632 if (true != dbus_message_append_args(msg,
633 DBUS_TYPE_INT32, &uid,
634 DBUS_TYPE_STRING, &key,
635 DBUS_TYPE_INVALID)) {
636 dbus_message_unref(msg);
637 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
639 return TTS_ERROR_OPERATION_FAILED;
642 DBusMessage* result_msg;
643 int result = TTS_ERROR_OPERATION_FAILED;
645 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
646 dbus_message_unref(msg);
647 if (dbus_error_is_set(&err)) {
648 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
649 dbus_error_free(&err);
653 if (NULL != result_msg) {
654 dbus_message_get_args(result_msg, &err,
655 DBUS_TYPE_INT32, &result,
656 DBUS_TYPE_STRING, &temp,
659 if (dbus_error_is_set(&err)) {
660 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts get private data : Get arguments error (%s)", err.message);
661 dbus_error_free(&err);
662 result = TTS_ERROR_OPERATION_FAILED;
664 dbus_message_unref(result_msg);
667 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts get private data : result(%d)", result);
669 *data = strdup(temp);
672 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts get private data : result(%d)", result);
675 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
676 tts_dbus_reconnect();
677 result = TTS_ERROR_TIMED_OUT;
683 int tts_dbus_request_play(int uid, const char* credential)
687 dbus_error_init(&err);
689 msg = __tts_dbus_make_message(uid, TTS_METHOD_PLAY);
692 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts play : Fail to make message");
693 return TTS_ERROR_OPERATION_FAILED;
695 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts play : uid(%d)", uid);
699 if (NULL == credential) {
700 temp = strdup("NULL");
702 temp = strdup(credential);
705 if (true != dbus_message_append_args(msg,
706 DBUS_TYPE_INT32, &uid,
707 DBUS_TYPE_STRING, &temp,
708 DBUS_TYPE_INVALID)) {
709 dbus_message_unref(msg);
710 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
716 return TTS_ERROR_OPERATION_FAILED;
719 DBusMessage* result_msg;
720 int result = TTS_ERROR_OPERATION_FAILED;
722 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
723 dbus_message_unref(msg);
724 if (dbus_error_is_set(&err)) {
725 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
726 dbus_error_free(&err);
729 if (NULL != result_msg) {
730 dbus_message_get_args(result_msg, &err,
731 DBUS_TYPE_INT32, &result,
734 if (dbus_error_is_set(&err)) {
735 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts play : Get arguments error (%s)", err.message);
736 dbus_error_free(&err);
737 result = TTS_ERROR_OPERATION_FAILED;
739 dbus_message_unref(result_msg);
742 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts play : result(%d)", result);
744 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts play : result(%d)", result);
747 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
748 tts_dbus_reconnect();
749 result = TTS_ERROR_TIMED_OUT;
759 int tts_dbus_request_stop(int uid)
763 dbus_error_init(&err);
765 msg = __tts_dbus_make_message(uid, TTS_METHOD_STOP);
768 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts stop : Fail to make message");
769 return TTS_ERROR_OPERATION_FAILED;
771 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts stop : uid(%d)", uid);
774 DBusMessage* result_msg;
775 int result = TTS_ERROR_OPERATION_FAILED;
777 if (true != dbus_message_append_args(msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
778 dbus_message_unref(msg);
779 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
781 return TTS_ERROR_OPERATION_FAILED;
784 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
785 dbus_message_unref(msg);
786 if (dbus_error_is_set(&err)) {
787 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
788 dbus_error_free(&err);
791 if (NULL != result_msg) {
792 dbus_message_get_args(result_msg, &err,
793 DBUS_TYPE_INT32, &result,
796 if (dbus_error_is_set(&err)) {
797 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts stop : Get arguments error (%s)", err.message);
798 dbus_error_free(&err);
799 result = TTS_ERROR_OPERATION_FAILED;
801 dbus_message_unref(result_msg);
804 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts stop : result(%d)", result);
806 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts stop : result(%d)", result);
809 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
810 tts_dbus_reconnect();
811 result = TTS_ERROR_TIMED_OUT;
817 int tts_dbus_request_pause(int uid)
821 dbus_error_init(&err);
823 msg = __tts_dbus_make_message(uid, TTS_METHOD_PAUSE);
826 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts pause : Fail to make message");
827 return TTS_ERROR_OPERATION_FAILED;
829 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts pause : uid(%d)", uid);
832 DBusMessage* result_msg;
833 int result = TTS_ERROR_OPERATION_FAILED;
835 if (true != dbus_message_append_args(msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
836 dbus_message_unref(msg);
837 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
839 return TTS_ERROR_OPERATION_FAILED;
842 result_msg = dbus_connection_send_with_reply_and_block(g_conn_sender, msg, WAITING_TIME, &err);
843 dbus_message_unref(msg);
844 if (dbus_error_is_set(&err)) {
845 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Send error (%s)", err.message);
846 dbus_error_free(&err);
849 if (NULL != result_msg) {
850 dbus_message_get_args(result_msg, &err,
851 DBUS_TYPE_INT32, &result,
854 if (dbus_error_is_set(&err)) {
855 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts pause : Get arguments error (%s)", err.message);
856 dbus_error_free(&err);
857 result = TTS_ERROR_OPERATION_FAILED;
859 dbus_message_unref(result_msg);
862 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts pause : result(%d)", result);
864 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts pause : result(%d)", result);
867 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
868 tts_dbus_reconnect();
869 result = TTS_ERROR_TIMED_OUT;