Rearrange code to stop all client
[platform/core/uifw/tts.git] / server / ttsd_ipc.c
1 /*
2 *  Copyright (c) 2021 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.
12 */
13 #include "ttsd_main.h"
14 #include "ttsd_ipc.h"
15 #include "ttsd_dbus.h"
16 #include "ttsd_tidl.h"
17 #include "ttsd_data.h"
18
19
20 int(*ttsd_dbus_vtable[])() = {&ttsd_dbus_open_connection, &ttsd_dbus_close_connection, &ttsdc_dbus_send_utt_start_message,
21                                         &ttsdc_dbus_send_utt_finish_message, &ttsdc_dbus_send_set_state_message, &ttsdc_dbus_send_error_message};
22 int(*ttsd_tidl_vtable[])() = {&ttsd_tidl_open_connection, &ttsd_tidl_close_connection, &ttsdc_tidl_send_utt_start_message,
23                                         &ttsdc_tidl_send_utt_finish_message, &ttsdc_tidl_send_set_state_message, &ttsdc_tidl_send_error_message};
24
25 int ttsd_ipc_open_connection()
26 {
27         SLOG(LOG_INFO, tts_tag(), "[IPC] ttsd_ipc_open_connection");
28
29         int return_for_tidl = TTSD_ERROR_OPERATION_FAILED;
30         int return_for_dbus = TTSD_ERROR_OPERATION_FAILED;
31
32         return_for_tidl = ttsd_tidl_vtable[OPEN_CONNECTION]();
33         return_for_dbus = ttsd_dbus_vtable[OPEN_CONNECTION]();
34
35         if (return_for_tidl != TTSE_ERROR_NONE || return_for_dbus != TTSE_ERROR_NONE) {
36                 return TTSD_ERROR_OPERATION_FAILED;
37         }
38
39         return TTSD_ERROR_NONE;
40 }
41
42 int ttsd_ipc_close_connection()
43 {
44         SLOG(LOG_INFO, tts_tag(), "[IPC] ttsd_ipc_close_connection");
45
46         int return_for_tidl = TTSD_ERROR_OPERATION_FAILED;
47         int return_for_dbus = TTSD_ERROR_OPERATION_FAILED;
48
49         return_for_tidl = ttsd_tidl_vtable[CLOSE_CONNECTION]();
50         return_for_dbus = ttsd_dbus_vtable[CLOSE_CONNECTION]();
51
52         if (return_for_tidl != TTSE_ERROR_NONE || return_for_dbus != TTSE_ERROR_NONE) {
53                 return TTSD_ERROR_OPERATION_FAILED;
54         }
55
56         return TTSD_ERROR_NONE;
57 }
58
59 int ttsdc_ipc_send_utt_start_message(int pid, unsigned int uid, int uttid)
60 {
61         SLOG(LOG_INFO, tts_tag(), "[IPC] ttsdc_ipc_send_utt_start_message");
62
63         if (0 > ttsd_data_is_client(uid)) {
64                 SLOG(LOG_ERROR, tts_tag(), "[ERROR] uid is not valid (%u)", uid);
65                 return TTSD_ERROR_INVALID_PARAMETER;
66         }
67
68         switch (ttsd_data_get_ipc_method(uid))
69         {
70         case TTS_IPC_METHOD_DBUS:
71                 SLOG(LOG_DEBUG, tts_tag(), "[IPC] ipc method : dbus");
72                 return ttsd_dbus_vtable[SEND_UTTERANCE_START](pid, uid, uttid);
73
74         case TTS_IPC_METHOD_TIDL:
75                 SLOG(LOG_DEBUG, tts_tag(), "[IPC] ipc method : tidl");
76                 return ttsd_tidl_vtable[SEND_UTTERANCE_START](pid, uid, uttid);
77
78         default:
79                 SLOG(LOG_ERROR, tts_tag(), "[ERROR] method is not valid");
80         }
81
82         return TTSD_ERROR_OPERATION_FAILED;
83 }
84
85 int ttsdc_ipc_send_utt_finish_message(int pid, unsigned int uid, int uttid)
86 {
87         SLOG(LOG_INFO, tts_tag(), "[IPC] ttsdc_ipc_send_utt_finish_message");
88
89         if (0 > ttsd_data_is_client(uid)) {
90                 SLOG(LOG_ERROR, tts_tag(), "[ERROR] uid is not valid (%u)", uid);
91                 return TTSD_ERROR_INVALID_PARAMETER;
92         }
93
94         switch (ttsd_data_get_ipc_method(uid))
95         {
96         case TTS_IPC_METHOD_DBUS:
97                 SLOG(LOG_DEBUG, tts_tag(), "[IPC] ipc method : dbus");
98                 return ttsd_dbus_vtable[SEND_UTTERANCE_FINISH](pid, uid, uttid);
99
100         case TTS_IPC_METHOD_TIDL:
101                 SLOG(LOG_DEBUG, tts_tag(), "[IPC] ipc method : tidl");
102                 return ttsd_tidl_vtable[SEND_UTTERANCE_FINISH](pid, uid, uttid);
103
104         default:
105                 SLOG(LOG_ERROR, tts_tag(), "[ERROR] method is not valid");
106         }
107
108         return TTSD_ERROR_OPERATION_FAILED;
109 }
110
111 int ttsdc_ipc_send_set_state_message(int pid, unsigned int uid, int state)
112 {
113         SLOG(LOG_INFO, tts_tag(), "[IPC] ttsdc_ipc_send_set_state_message");
114
115         if (0 > ttsd_data_is_client(uid)) {
116                 SLOG(LOG_ERROR, tts_tag(), "[ERROR] uid is not valid (%u)", uid);
117                 return TTSD_ERROR_INVALID_PARAMETER;
118         }
119
120         switch (ttsd_data_get_ipc_method(uid))
121         {
122         case TTS_IPC_METHOD_DBUS:
123                 SLOG(LOG_DEBUG, tts_tag(), "[IPC] ipc method : dbus");
124                 return ttsd_dbus_vtable[SEND_SET_STATE](pid, uid, state);
125
126         case TTS_IPC_METHOD_TIDL:
127                 SLOG(LOG_DEBUG, tts_tag(), "[IPC] ipc method : tidl");
128                 return ttsd_tidl_vtable[SEND_SET_STATE] (pid, uid, state);
129
130         default:
131                 SLOG(LOG_ERROR, tts_tag(), "[ERROR] method is not valid");
132         }
133
134         return TTSD_ERROR_OPERATION_FAILED;
135 }
136
137 int ttsdc_ipc_send_error_message(int pid, unsigned int uid, int uttid, int reason, char* err_msg)
138 {
139         SLOG(LOG_INFO, tts_tag(), "[IPC] ttsdc_ipc_send_error_message");
140
141         if (0 > ttsd_data_is_client(uid)) {
142                 SLOG(LOG_ERROR, tts_tag(), "[ERROR] uid is not valid (%u)", uid);
143                 return TTSD_ERROR_INVALID_PARAMETER;
144         }
145
146         switch (ttsd_data_get_ipc_method(uid))
147         {
148         case TTS_IPC_METHOD_DBUS:
149                 SLOG(LOG_DEBUG, tts_tag(), "[IPC] ipc method : dbus");
150                 return ttsd_dbus_vtable[SEND_ERROR](pid, uid, uttid, reason, err_msg);
151
152         case TTS_IPC_METHOD_TIDL:
153                 SLOG(LOG_DEBUG, tts_tag(), "[IPC] ipc method : tidl");
154                 return ttsd_tidl_vtable[SEND_ERROR](pid, uid, uttid, reason, err_msg);
155
156         default:
157                 SLOG(LOG_ERROR, tts_tag(), "[ERROR] method is not valid");
158         }
159
160         return TTSD_ERROR_OPERATION_FAILED;
161 }