2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.tizenopensource.org/license
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 /* Call Module File Includes */
19 #include "vc-core-engine.h"
20 #include "vc-core-callagent.h"
21 #include "vc-core-callmanager.h"
22 #include "vc-core-util.h"
23 #include "vc-core-tapi-evnt.h"
24 #include "vc-core-tapi-rqst.h"
25 #include "vc-core-svcall.h"
26 #include "vc-core-engine-status.h"
29 * This function checks whether the given incoming call is a restricted call or not
31 * @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure
32 * @param[in] pvoicecall_agent Handle to voicecall engine
33 * @param[in] call_handle Call handle of the call to be checked
34 * @param[out] pbrestricted Pointer to the restricted name mode
35 * @remarks pvoicecall_agent and prestricted cannot be NULL.
36 * This API shall only be used with the incoming call handle before it is connected
38 voicecall_error_t _vc_core_engine_status_isrestricted_call(voicecall_engine_t *pvoicecall_agent, int call_handle, gboolean *pbrestricted)
40 call_vc_callagent_state_t *pagent = (call_vc_callagent_state_t *)pvoicecall_agent;
41 call_vc_call_objectinfo_t call_object;
43 VOICECALL_RETURN_VALUE_IF_FAIL(pagent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
44 VOICECALL_RETURN_VALUE_IF_FAIL(call_handle >= 0, ERROR_VOICECALL_INVALID_ARGUMENTS);
45 VOICECALL_RETURN_VALUE_IF_FAIL(pbrestricted != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
47 _vc_core_cm_clear_call_object(&call_object);
48 if (TRUE == _vc_core_cm_get_call_object(&pagent->call_manager, call_handle, &call_object)) {
49 *pbrestricted = call_object.brestricted_namemode;
50 return ERROR_VOICECALL_NONE;
53 *pbrestricted = FALSE;
54 return ERROR_VOICECALL_CALL_INFO_NOT_AVAILABLE;
58 * This function checks whether the given incoming call is a restricted call or not
60 * @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure
61 * @param[in] pvoicecall_agent Handle to voicecall engine
62 * @param[in] call_handle Call handle of the call to be checked
63 * @param[out] pbrestricted Pointer to the restricted name mode
64 * @remarks pvoicecall_agent and prestricted cannot be NULL.
65 * This API shall only be used with the incoming call handle before it is connected
67 voicecall_error_t _vc_core_engine_status_get_calling_namemode(voicecall_engine_t *pvoicecall_agent, int call_handle, gboolean *bcalling_namemode)
69 call_vc_callagent_state_t *pagent = (call_vc_callagent_state_t *)pvoicecall_agent;
70 call_vc_call_objectinfo_t call_object;
72 VOICECALL_RETURN_VALUE_IF_FAIL(pagent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
73 VOICECALL_RETURN_VALUE_IF_FAIL(call_handle >= 0, ERROR_VOICECALL_INVALID_ARGUMENTS);
74 VOICECALL_RETURN_VALUE_IF_FAIL(bcalling_namemode != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
76 _vc_core_cm_clear_call_object(&call_object);
77 if (TRUE == _vc_core_cm_get_call_object(&pagent->call_manager, call_handle, &call_object)) {
78 if (call_object.bcalling_namemode == CALL_VC_CALLING_NAME_MODE_AVAILABLE) {
79 *bcalling_namemode = TRUE;
81 *bcalling_namemode = FALSE;
83 return ERROR_VOICECALL_NONE;
86 *bcalling_namemode = FALSE;
87 return ERROR_VOICECALL_CALL_INFO_NOT_AVAILABLE;
91 * This function retrieves the call object belongs to the given call handle
93 * @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure
94 * @param[in] pvoicecall_agent Handle to voicecall engine
95 * @param[in] call_handle Call handle of the call for which the call object is retrieved
96 * @param[out] pcall_object Pointer to the retrived call object info
97 * @remarks pvoicecall_agent and pcall_object cannot be NULL.
99 voicecall_error_t _vc_core_engine_status_get_call_object(voicecall_engine_t *pvoicecall_agent, int call_handle, call_vc_call_objectinfo_t *pcall_object)
101 call_vc_callagent_state_t *pagent = (call_vc_callagent_state_t *)pvoicecall_agent;
102 VOICECALL_RETURN_VALUE_IF_FAIL(pagent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
103 VOICECALL_RETURN_VALUE_IF_FAIL(call_handle >= 0, ERROR_VOICECALL_INVALID_ARGUMENTS);
104 VOICECALL_RETURN_VALUE_IF_FAIL(pcall_object != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
106 /*Clear the call object */
107 _vc_core_cm_clear_call_object(pcall_object);
109 if (TRUE == _vc_core_cm_get_call_object(&pagent->call_manager, call_handle, pcall_object)) {
110 return ERROR_VOICECALL_NONE;
114 return ERROR_VOICECALL_CALL_INFO_NOT_AVAILABLE;
118 * This function retrieves the inout state of the engine
120 * @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure
121 * @param[in] pvoicecall_agent Handle to voicecall engine
122 * @param[out] pio_state Contains the Engine InOut state on return
123 * @remarks pvoicecall_agent and pio_state cannot be NULL.
124 * @see _vc_core_engine_change_engine_iostate
126 voicecall_error_t _vc_core_engine_status_get_engine_iostate(voicecall_engine_t *pvoicecall_agent, int *pio_state)
128 call_vc_callagent_state_t *pagent = (call_vc_callagent_state_t *)pvoicecall_agent;
129 VOICECALL_RETURN_VALUE_IF_FAIL(pagent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
130 VOICECALL_RETURN_VALUE_IF_FAIL(pio_state != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
132 *pio_state = pagent->io_state;
133 CALL_ENG_DEBUG(ENG_DEBUG, "io_state = [%d]", pagent->io_state);
134 return ERROR_VOICECALL_NONE;
138 * This function checks whether connected call exists or not
140 * @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure
141 * @param[in] pvoicecall_agent Handle to voicecall engine
142 * @param[in] call_type call type
143 * @param[out] bcall_exists TRUE - if call exists of given given type, FALSE otherwise
144 * @remarks pvoicecall_agent and bcall_exists cannot be NULL.
146 voicecall_error_t _vc_core_engine_status_isexists_call_bytype(voicecall_engine_t *pvoicecall_agent, voicecall_call_type_t call_type, gboolean *bcall_exists)
148 call_vc_callagent_state_t *pagent = (call_vc_callagent_state_t *)pvoicecall_agent;
149 VOICECALL_RETURN_VALUE_IF_FAIL(pagent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
150 VOICECALL_RETURN_VALUE_IF_FAIL(bcall_exists != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
152 /*CALL_ENG_DEBUG(ENG_DEBUG,"call_type = %d", call_type);*/
153 *bcall_exists = FALSE;
155 case VC_INCOMING_CALL:
157 if (VC_INVALID_CALL_INDEX != pagent->call_manager.mtcall_index) {
158 CALL_ENG_DEBUG(ENG_DEBUG, "incoming call exits...");
160 *bcall_exists = TRUE;
161 return ERROR_VOICECALL_NONE;
165 case VC_OUTGOING_CALL:
167 if (VC_INVALID_CALL_INDEX != pagent->call_manager.setupcall_info.mocall_index) {
168 CALL_ENG_DEBUG(ENG_DEBUG, "outgoing call exits...");
170 *bcall_exists = TRUE;
171 return ERROR_VOICECALL_NONE;
175 case VC_CONNECTED_CALL:
177 *bcall_exists = _vc_core_cm_isexists_connected_call(&pagent->call_manager);
178 if (*bcall_exists == TRUE) {
179 CALL_ENG_DEBUG(ENG_DEBUG, "connected call exits...");
181 return ERROR_VOICECALL_NONE;
186 CALL_ENG_DEBUG(ENG_DEBUG, "Invalid call type..");
187 return ERROR_VOICECALL_INVALID_CALL_TYPE;
191 return ERROR_VOICECALL_CALL_INFO_NOT_AVAILABLE;
195 * This function retrieves the total number of call members currently available with the engine
197 * @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure
198 * @param[in] pvoicecall_agent Handle to voicecall engine
199 * @param[out] ptotal_call_member Contains the total call member availalbe in engine on return
200 * @remarks pvoicecall_agent and ptotal_call_member cannot be NULL
202 voicecall_error_t _vc_core_engine_status_get_call_member_count(voicecall_engine_t *pvoicecall_agent, int *ptotal_call_member)
204 call_vc_callagent_state_t *pagent = (call_vc_callagent_state_t *)pvoicecall_agent;
205 VOICECALL_RETURN_VALUE_IF_FAIL(pagent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
206 VOICECALL_RETURN_VALUE_IF_FAIL(ptotal_call_member != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
208 *ptotal_call_member = _vc_core_cm_get_call_member_count(&pagent->call_manager);
210 return ERROR_VOICECALL_NONE;
214 * This function retrieves the total number of call members with the given connected call type
216 * @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure
217 * @param[in] pvoicecall_agent Handle to voicecall engine
218 * @param[in] connected_call_type connected call type
219 * @param[out] pmember_num Contains the number of call members available with the given connected call type on return
220 * @remarks pvoicecall_agent and pmember_num cannot be NULL
222 voicecall_error_t _vc_core_engine_status_get_call_member_info(voicecall_engine_t *pvoicecall_agent, voicecall_connected_call_type_t connected_call_type, int *pmember_num)
224 call_vc_callagent_state_t *pagent = (call_vc_callagent_state_t *)pvoicecall_agent;
225 VOICECALL_RETURN_VALUE_IF_FAIL(pagent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
226 VOICECALL_RETURN_VALUE_IF_FAIL(pmember_num != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
228 switch (connected_call_type) {
231 *pmember_num = _vc_core_cm_get_active_call_count(&pagent->call_manager);
236 *pmember_num = _vc_core_cm_get_held_call_count(&pagent->call_manager);
241 return ERROR_VOICECALL_INVALID_CALL_TYPE;
244 return ERROR_VOICECALL_NONE;
248 * This function retrieves the call handle according to the given call type
250 * @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure
251 * @param[in] pvoicecall_agent Handle to voicecall engine
252 * @param[in] call_type call type
253 * @param[out] pcall_handle Contains the call handle on success
254 * @remarks pvoicecall_agent and pcall_handle cannot be NULL
255 * In case of multiple connected calls available, it will retreive the first connected call
257 voicecall_error_t _vc_core_engine_status_get_call_handle_bytype(voicecall_engine_t *pvoicecall_agent, voicecall_call_type_t call_type, int *pcall_handle)
259 call_vc_callagent_state_t *pagent = (call_vc_callagent_state_t *)pvoicecall_agent;
260 call_vc_manager_t *pcall_manager = NULL;
261 call_vc_handle call_handle = -1;
263 VOICECALL_RETURN_VALUE_IF_FAIL(pagent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
264 VOICECALL_RETURN_VALUE_IF_FAIL(pcall_handle != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
266 pcall_manager = (call_vc_manager_t *) &pagent->call_manager;
269 case VC_INCOMING_CALL:
271 call_handle = _vc_core_cm_get_incoming_call_handle(pcall_manager);
274 case VC_OUTGOING_CALL:
276 call_handle = _vc_core_cm_get_outgoing_call_handle(pcall_manager);
279 case VC_CONNECTED_CALL:
281 _vc_core_cm_get_first_active_call_handle(pcall_manager, &call_handle);
282 if (-1 == call_handle) {
283 _vc_core_cm_get_first_held_call_handle(pcall_manager, &call_handle);
288 return ERROR_VOICECALL_INVALID_CALL_TYPE;
291 if (-1 == call_handle) {
292 return ERROR_VOICECALL_CALL_INFO_NOT_AVAILABLE;
295 *pcall_handle = call_handle;
296 return ERROR_VOICECALL_NONE;
300 * This function checks if active calls and/or held call exists or not
302 * @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure
303 * @param[in] pvoicecall_agent Handle to voicecall engine
304 * @param[out] pactive_calls Set to TRUE if active calls exist
305 * @param[out] pheld_calls Set to TRUE if held calls exist
306 * @remarks pvoicecall_agent,pactive_calls and pheld_calls cannot be NULL
308 voicecall_error_t _vc_core_engine_status_isexists_any_call(voicecall_engine_t *pvoicecall_agent, gboolean *pactive_calls, gboolean *pheld_calls)
310 call_vc_callagent_state_t *pagent = (call_vc_callagent_state_t *)pvoicecall_agent;
311 call_vc_manager_t *pcall_manager = NULL;
313 VOICECALL_RETURN_VALUE_IF_FAIL(pagent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
314 VOICECALL_RETURN_VALUE_IF_FAIL(pactive_calls != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
315 VOICECALL_RETURN_VALUE_IF_FAIL(pheld_calls != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
317 pcall_manager = &pagent->call_manager;
319 *pactive_calls = _vc_core_cm_isexists_active_call(pcall_manager);
320 *pheld_calls = _vc_core_cm_isexists_held_call(pcall_manager);
322 return ERROR_VOICECALL_NONE;
326 * This function retreives the cphs csp status
328 * @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure
329 * @param[in] pvoicecall_agent Handle to Voicecall Engine
330 * @param[in] csp_service csp name
331 * @param[out] pbcsp_status Contains TRUE if given csp service is enabled,FALSE otherwise
332 * @remarks pvoicecall_agent and pbcsp_status cannot be NULL
334 voicecall_error_t _vc_core_engine_status_get_cphs_csp_status(voicecall_engine_t *pvoicecall_agent, voicecall_cphs_csp_service csp_service, gboolean *pbcsp_status)
336 call_vc_callagent_state_t *pcall_agent = (call_vc_callagent_state_t *)pvoicecall_agent;
337 VOICECALL_RETURN_VALUE_IF_FAIL(pcall_agent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
338 VOICECALL_RETURN_VALUE_IF_FAIL(pbcsp_status != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
339 #ifdef _CPHS_DEFINED_
340 *pbcsp_status = _vc_core_svcall_cphs_csp_get_status(pcall_agent, csp_service);
342 *pbcsp_status = (VC_CPHS_CSP_ALS == csp_service) ? FALSE : TRUE;
344 return ERROR_VOICECALL_NONE;
348 * This function checks if the call is emergency call for the given outgoing call index
350 * @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure
351 * @param[in] pvoicecall_agent Handle to Voicecall Engine
352 * @param[in] mo_call_index Index of the outgoing call
353 * @param[out] pbemergency_call Contains TRUE if the call is emergency call,FALSE otherwise
354 * @remarks pvoicecall_agent and pbemergency_call cannot be NULL
356 voicecall_error_t _vc_core_engine_status_check_emergency_byindex(voicecall_engine_t *pvoicecall_agent, int mo_call_index, gboolean *pbemergency_call)
358 call_vc_callagent_state_t *pagent = (call_vc_callagent_state_t *)pvoicecall_agent;
359 call_vc_manager_t *pcall_manager = NULL;
361 VOICECALL_RETURN_VALUE_IF_FAIL(pagent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
362 VOICECALL_RETURN_VALUE_IF_FAIL(pbemergency_call != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
363 VOICECALL_RETURN_VALUE_IF_NOT_IN_RANGE(mo_call_index, 0, 7, ERROR_VOICECALL_INVALID_ARGUMENTS);
365 /*Assign Default Value */
366 *pbemergency_call = FALSE;
368 pcall_manager = (call_vc_manager_t *) &pagent->call_manager;
370 CALL_VC_DUMP_CALLDETAILS(pcall_manager);
371 CALL_ENG_DEBUG(ENG_DEBUG, "call_index = %d, bemergency_number = %d", mo_call_index, pcall_manager->callobject_info[mo_call_index].bemergency_number);
373 *pbemergency_call = pcall_manager->callobject_info[mo_call_index].bemergency_number;
374 return ERROR_VOICECALL_NONE;
378 * This function checks the possiblity of transfering calls
380 * @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure
381 * @param[in] pvoicecall_agent Handle to Voicecall Engine
382 * @param[out] pbtransfer_calls Contains TRUE if call transfer is possible, FALSE otherwise
383 * @remarks pvoicecall_agent and pbtransfer_calls cannot be NULL
385 voicecall_error_t _vc_core_engine_status_is_transfer_call_possible(voicecall_engine_t *pvoicecall_agent, gboolean *pbtransfer_calls)
387 call_vc_callagent_state_t *pcall_agent = (call_vc_callagent_state_t *)pvoicecall_agent;
389 VOICECALL_RETURN_VALUE_IF_FAIL(pcall_agent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
390 VOICECALL_RETURN_VALUE_IF_FAIL(pbtransfer_calls != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
392 *pbtransfer_calls = _vc_core_ca_is_transfer_call_possible(pcall_agent);
394 return ERROR_VOICECALL_NONE;
398 * This function checks the possiblity of making conference calls
400 * @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure
401 * @param[in] pvoicecall_agent Handle to Voicecall Engine
402 * @param[out] pbconf_call Contains TRUE if conference call is possible , FALSE otherwise
403 * @remarks pvoicecall_agent and pbconf_call cannot be NULL
405 voicecall_error_t _vc_core_engine_status_is_conf_call_possible(voicecall_engine_t *pvoicecall_agent, gboolean *pbconf_call)
407 call_vc_callagent_state_t *pcall_agent = (call_vc_callagent_state_t *)pvoicecall_agent;
408 gboolean active_calls = FALSE;
409 gboolean held_calls = FALSE;
410 int total_call_member = 0;
411 gboolean bconf = FALSE;
413 VOICECALL_RETURN_VALUE_IF_FAIL(pcall_agent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
414 VOICECALL_RETURN_VALUE_IF_FAIL(pbconf_call != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
416 #ifdef _CPHS_DEFINED_
417 if (_vc_core_svcall_cphs_csp_get_status(pcall_agent, VC_CPHS_CSP_MPTY)) {
418 CALL_ENG_DEBUG(ENG_DEBUG, "_vc_core_svcall_cphs_csp_get_status returned TRUE");
421 *pbconf_call = FALSE;
422 return ERROR_VOICECALL_NONE;
426 _vc_core_cm_isexists_call_ingroup(&pcall_agent->call_manager, &active_calls, &held_calls);
427 total_call_member = _vc_core_cm_get_call_member_count(&pcall_agent->call_manager);
429 /* Joining call is impossile when !active or !hold call exist */
430 if (!active_calls || !held_calls) {
431 CALL_ENG_DEBUG(ENG_DEBUG, "Join Impossible...");
434 /* Joining call is impossile when member is more than max
435 Max Number in Group + Another Call*/
436 if (total_call_member >= (VC_MAX_CALL_GROUP_MEMBER + 1)) {
437 CALL_ENG_DEBUG(ENG_DEBUG, "Ended with FALSE...");
440 CALL_ENG_DEBUG(ENG_DEBUG, "Ended with TRUE...");
445 *pbconf_call = bconf;
446 return ERROR_VOICECALL_NONE;
451 * This function retreives the call state of the given call
453 * @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure
454 * @param[in] pvoicecall_agent Handle to voicecall engine
455 * @param[in] call_handle Call handle of particular call
456 * @param[out] pcall_state Contains the call state of the given call handle
457 * @remarks pvoicecall_agent and pcall_state cannot be NULL
459 voicecall_error_t _vc_core_engine_status_get_call_state_byhandle(voicecall_engine_t *pvoicecall_agent, int call_handle, voicecall_call_state_t *pcall_state)
461 call_vc_callagent_state_t *pagent = (call_vc_callagent_state_t *)pvoicecall_agent;
462 call_vc_call_objectinfo_t call_object = { 0 };
464 VOICECALL_RETURN_VALUE_IF_FAIL(pagent != NULL, ERROR_VOICECALL_INVALID_CALL_HANDLE);
465 VOICECALL_RETURN_VALUE_IF_FAIL(pcall_state != NULL, ERROR_VOICECALL_INVALID_CALL_HANDLE);
466 VOICECALL_RETURN_VALUE_IF_FAIL(call_handle >= 0, ERROR_VOICECALL_INVALID_CALL_HANDLE);
468 _vc_core_cm_clear_call_object(&call_object);
469 if (TRUE == _vc_core_cm_get_call_object(&pagent->call_manager, call_handle, &call_object)) {
470 *pcall_state = call_object.state;
471 return ERROR_VOICECALL_NONE;
474 *pcall_state = VC_CALL_STATE_NONE;
475 return ERROR_VOICECALL_CALL_INFO_NOT_AVAILABLE;
480 * This function retrieves call handle of the any one of the calls of given type
482 * @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure
483 * @param[in] pvoicecall_agent Handle to voicecall engine
484 * @param[in] connected_call_type Connected call type
485 * @param[out] pcall_handle Contains the Call handle on return
486 * @remarks pvoicecall_agent and pcall_handle cannot be NULL
488 voicecall_error_t voicecall_get_any_call_handle(voicecall_engine_t *pvoicecall_agent, voicecall_connected_call_type_t connected_call_type, int *pcall_handle)
490 call_vc_callagent_state_t *pagent = (call_vc_callagent_state_t *)pvoicecall_agent;
491 call_vc_handle callhandle = -1;
493 VOICECALL_RETURN_VALUE_IF_FAIL(pagent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
494 VOICECALL_RETURN_VALUE_IF_FAIL(pcall_handle != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
496 switch (connected_call_type) {
499 _vc_core_cm_get_first_active_call_handle(&pagent->call_manager, &callhandle);
504 _vc_core_cm_get_first_held_call_handle(&pagent->call_manager, &callhandle);
508 return ERROR_VOICECALL_INVALID_CALL_TYPE;
511 if (-1 != callhandle) {
512 *pcall_handle = (int)callhandle;
513 return ERROR_VOICECALL_NONE;
516 return ERROR_VOICECALL_CALL_INFO_NOT_AVAILABLE;
521 * This function checks if any call is ending and retrieves its call number if it is ending
523 * @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure
524 * @param[in] pvoicecall_agent Handle to voicecall engine
525 * @param[out] bcall_ending TRUE if any call is being ended, FALSE otherwise
526 * @remarks pvoicecall_agent and bcall_ending cannot be NULL
528 voicecall_error_t _vc_core_engine_status_is_any_call_ending(voicecall_engine_t *pvoicecall_agent, gboolean *bcall_ending)
530 call_vc_callagent_state_t *pagent = (call_vc_callagent_state_t *)pvoicecall_agent;
532 VOICECALL_RETURN_VALUE_IF_FAIL(pagent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
533 VOICECALL_RETURN_VALUE_IF_FAIL(bcall_ending != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
535 *bcall_ending = FALSE;
536 *bcall_ending = _vc_core_cm_get_ending_call_info(&pagent->call_manager);
538 return ERROR_VOICECALL_NONE;
542 * This function checks whther engine is busy in processing any events or waiting for any events to process
544 * @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure
545 * @param[in] pvoicecall_agent Handle to voicecall engine
546 * @param[out] bbusy TRUE - if engine is busy in processing any events or waiting for any events, FALSE - otherwise
547 * @remarks pvoicecall_agent and bbusy cannot be NULL
549 voicecall_error_t _vc_core_engine_status_is_engine_busy(voicecall_engine_t *pvoicecall_agent, gboolean *bbusy)
551 call_vc_callagent_state_t *pagent = (call_vc_callagent_state_t *)pvoicecall_agent;
552 VOICECALL_RETURN_VALUE_IF_FAIL(pagent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
553 VOICECALL_RETURN_VALUE_IF_FAIL(bbusy != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
555 CALL_ENG_DEBUG(ENG_DEBUG, "Current Call Agent State:%d", pagent->callagent_state);
556 if (CALL_VC_CA_STATE_NORMAL == pagent->callagent_state) {
562 return ERROR_VOICECALL_NONE;
566 * This function sets the given flag to engine for processing during call end.
567 * This function has to be used after calling the end call API
569 * @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure
570 * @param[in] pvoicecall_agent Handle to voicecall engine
571 * @param[in] end_flag End Flag to be set
572 * @remarks pvoicecall_agent and bsscode cannot be NULL
574 voicecall_error_t _vc_core_engine_status_set_end_flag(voicecall_engine_t *pvoicecall_agent, voicecall_end_flag_t end_flag)
576 call_vc_callagent_state_t *pagent = (call_vc_callagent_state_t *)pvoicecall_agent;
578 VOICECALL_RETURN_VALUE_IF_FAIL(pagent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
581 case VC_RETREIVE_CALL_ON_MOCALL_END:
583 pagent->callagent_state = CALL_VC_CA_STATE_SS_WAIT_RELEASE_ALL_ACTIVECALL;
587 return ERROR_VOICECALL_INVALID_ARGUMENTS;
590 return ERROR_VOICECALL_NONE;
594 * This function checks whether the given string is MMI string or not
596 * @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure
597 * @param[in] pvoicecall_agent Handle to voicecall engine
598 * @param[in] pinput_number Input string to be verified
599 * @param[out] bsscode TRUE - if the given string is a valid ss code, FALSE otherwise
600 * @remarks pvoicecall_agent and bsscode cannot be NULL
602 voicecall_error_t _vc_core_engine_status_isvalid_ss_code(voicecall_engine_t *pvoicecall_agent, const char *pinput_number, gboolean *bsscode)
605 call_vc_ss_si_format si_format = SS_SI_FORMAT_INVALID;
607 VOICECALL_RETURN_VALUE_IF_FAIL(pvoicecall_agent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
608 VOICECALL_RETURN_VALUE_IF_FAIL(pinput_number != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
609 VOICECALL_RETURN_VALUE_IF_FAIL(bsscode != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
611 si_format = SS_SI_FORMAT_VALID;
612 strLen = strlen(pinput_number);
614 CALL_ENG_DEBUG(ENG_DEBUG, "strLen = %d", strLen);
617 /* Deactivate : "#...#" */
618 /* Erase : "##...#" */
619 if (((pinput_number[0] == '#') && (pinput_number[strLen - 1] == '#')) || ((pinput_number[0] == '+') && (pinput_number[1] == '#') && (pinput_number[strLen - 1] == '#'))) {
620 si_format = _vc_core_util_check_si_format(pinput_number);
622 return ERROR_VOICECALL_NONE;
625 /* Activate : "*...#" */
626 /* Interrogate : "*#...#" */
627 /* Register : "**...#" */
628 if ((('*' == pinput_number[0]) && ('#' == pinput_number[strLen - 1])) || (('+' == pinput_number[0]) && ('*' == pinput_number[1]) && ('#' == pinput_number[strLen - 1]))) {
629 si_format = _vc_core_util_check_si_format(pinput_number);
631 return ERROR_VOICECALL_NONE;
633 } else if (2 == strLen) {
634 /*This will be covered, once the operator requirements are clear*/
635 #ifdef MCC_USA_SS_CODE
636 unsigned long mcc = 0;
637 tapi_network_info_t networkInfo;
639 memset(&networkInfo, 0x00, sizeof(tapi_network_info_t));
641 tapi_get_network_info(&networkInfo);
643 networkInfo.sysid.sysid = (networkInfo.sysid.sysid >> 16);
644 mcc = (networkInfo.sysid.sysid & 0x0000ffff);
645 CALL_ENG_DEBUG(ENG_DEBUG, "mcc (%d)!!", mcc);
647 /*CALL_NETWORK_MCC_USA */
649 if (strncmp(pinput_number, "08", 2) == 0 || strncmp(pinput_number, "00", 2) == 0)
653 /*08 is not a ss string.*/
654 if (strncmp(pinput_number, "08", 2) == 0) {
657 /*All two digit number should be handled as ss string during call.*/
658 CALL_ENG_DEBUG(ENG_DEBUG, "two digit number... returns TRUE");
662 return ERROR_VOICECALL_NONE;
663 } else if (1 == strLen) {
664 if (('#' == pinput_number[0]) || ('+' == pinput_number[0]) || ('*' == pinput_number[0]) || ('7' == pinput_number[0])) {
666 return ERROR_VOICECALL_NONE;
670 CALL_ENG_DEBUG(ENG_DEBUG, "invalid sscode... returns FALSE");
673 return ERROR_VOICECALL_NONE;
676 voicecall_error_t _vc_core_engine_status_dump_call_details(voicecall_engine_t *pvoicecall_agent)
678 call_vc_callagent_state_t *pagent = (call_vc_callagent_state_t *)pvoicecall_agent;
679 CALL_ENG_DEBUG(ENG_DEBUG, "");
680 _vc_core_cm_test_dump(&pagent->call_manager);
681 return ERROR_VOICECALL_NONE;
685 * This function checks the possiblity of making private calls
687 * @return ERROR_VOICECALL_NONE on success or return value contains appropriate error code on failure
688 * @param[in] pvoicecall_agent Handle to Voicecall Engine
689 * @param[out] bzuhause Contains TRUE if zuhause area, FALSE otherwise
690 * @remarks pvoicecall_agent and pbprivate_call cannot be NULL
692 voicecall_error_t _vc_core_engine_status_is_zuhause_area(voicecall_engine_t *pvoicecall_agent, gboolean *bzuhause)
694 call_vc_callagent_state_t *pcall_agent = (call_vc_callagent_state_t *)pvoicecall_agent;
696 VOICECALL_RETURN_VALUE_IF_FAIL(pcall_agent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
697 VOICECALL_RETURN_VALUE_IF_FAIL(bzuhause != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
699 *bzuhause = _vc_core_util_check_zuhause_status();
700 return ERROR_VOICECALL_NONE;
704 * This function checks the possiblity of making private calls
706 * @param[in] pvoicecall_agent Handle to Voicecall Engine
707 * @param[out] b_download_call Contains TRUE if zuhause area, FALSE otherwise
708 * @remarks pvoicecall_agent and pbprivate_call cannot be NULL
710 void _vc_core_engine_status_set_download_call(voicecall_engine_t *pvoicecall_agent, gboolean b_download_call)
712 call_vc_callagent_state_t *pagent = (call_vc_callagent_state_t *)pvoicecall_agent;
714 if (pagent == NULL) {
715 CALL_ENG_DEBUG(ENG_ERR, "pagent is NULL! [PROBLEM] !!!");
719 pagent->bdownload_call = b_download_call;
723 gboolean _vc_core_engine_status_get_download_call(voicecall_engine_t *pvoicecall_agent)
725 call_vc_callagent_state_t *pcall_agent = (call_vc_callagent_state_t *)pvoicecall_agent;
727 VOICECALL_RETURN_VALUE_IF_FAIL(pcall_agent != NULL, ERROR_VOICECALL_INVALID_ARGUMENTS);
729 return pcall_agent->bdownload_call;