4 * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Ja-young Gu <jygu@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
30 #include "user_request.h"
34 #define MAX_CALL_OBJECTS 6
36 #define _check_null( name, value, err ) { \
38 dbg("[error] %s : NULL", name ); \
43 struct call_cli_info {
44 enum tcore_call_cli_mode mode;
45 enum tcore_call_no_cli_cause no_cli_cause;
46 char number[MAX_CALL_NUMBER_LEN];
50 struct call_cna_info {
51 enum tcore_call_cna_mode mode;
53 char name[MAX_CALL_NAME_LEN];
58 enum tcore_call_type type;
60 enum tcore_call_direction direction;
61 enum tcore_call_status status;
63 struct call_cli_info cli;
64 struct call_cna_info cna;
66 unsigned int active_line;
67 struct call_time { // second
73 struct private_object_data {
75 struct tcore_call_operations *ops;
76 struct tcore_call_control_operations *cops;
77 struct tcore_call_information_operations *iops;
80 static void _clone_hook(CoreObject *src, CoreObject *dest)
82 struct private_object_data *src_po = NULL;
83 struct private_object_data *dest_po = NULL;
88 dest_po = g_try_new0(struct private_object_data, 1);
90 tcore_object_link_object(dest, NULL);
94 src_po = tcore_object_ref_object(src);
95 dest_po->ops = src_po->ops;
97 tcore_object_link_object(dest, dest_po);
100 static TReturn _dispatcher(CoreObject *o, UserRequest *ur)
102 enum tcore_request_command command;
104 struct private_object_data *po = NULL;
105 po = tcore_object_ref_object(o);
107 _check_null( "po", po, TCORE_RETURN_FAILURE);
108 _check_null( "po->ops", po->ops, TCORE_RETURN_FAILURE);
109 _check_null( "ur", ur, TCORE_RETURN_FAILURE);
111 command = tcore_user_request_get_command(ur);
114 _check_null( "po->ops->dial", po->ops->dial, TCORE_RETURN_FAILURE);
115 return po->ops->dial(o, ur);
117 case TREQ_CALL_ANSWER:
118 _check_null( "po->ops->answer", po->ops->answer, TCORE_RETURN_FAILURE);
119 return po->ops->answer(o, ur);
122 _check_null( "po->ops->end", po->ops->end, TCORE_RETURN_FAILURE);
123 return po->ops->end(o, ur);
126 _check_null( "po->ops->hold", po->ops->hold, TCORE_RETURN_FAILURE);
127 return po->ops->hold(o, ur);
129 case TREQ_CALL_ACTIVE:
130 _check_null( "po->ops->active", po->ops->active, TCORE_RETURN_FAILURE);
131 return po->ops->active(o, ur);
134 _check_null( "po->ops->swap", po->ops->swap, TCORE_RETURN_FAILURE);
135 return po->ops->swap(o, ur);
138 _check_null( "po->ops->join", po->ops->join, TCORE_RETURN_FAILURE);
139 return po->ops->join(o, ur);
141 case TREQ_CALL_SPLIT:
142 _check_null( "po->ops->split", po->ops->split, TCORE_RETURN_FAILURE);
143 return po->ops->split(o, ur);
145 case TREQ_CALL_DEFLECT:
146 _check_null( "po->ops->deflect", po->ops->deflect, TCORE_RETURN_FAILURE);
147 return po->ops->deflect(o, ur);
149 case TREQ_CALL_TRANSFER:
150 _check_null( "po->ops->transfer", po->ops->transfer, TCORE_RETURN_FAILURE);
151 return po->ops->transfer(o, ur);
153 case TREQ_CALL_START_CONT_DTMF:
154 _check_null( "po->ops->start_cont_dtmf", po->ops->start_cont_dtmf, TCORE_RETURN_FAILURE);
155 return po->ops->start_cont_dtmf(o, ur);
157 case TREQ_CALL_STOP_CONT_DTMF:
158 _check_null( "po->ops->stop_cont_dtmf", po->ops->stop_cont_dtmf, TCORE_RETURN_FAILURE);
159 return po->ops->stop_cont_dtmf(o, ur);
161 case TREQ_CALL_SEND_BURST_DTMF:
162 _check_null( "po->ops->send_burst_dtmf", po->ops->send_burst_dtmf, TCORE_RETURN_FAILURE);
163 return po->ops->send_burst_dtmf(o, ur);
165 case TREQ_CALL_GET_PRIVACY_MODE:
166 _check_null( "po->ops->get_privacy_mode", po->ops->get_privacy_mode, TCORE_RETURN_FAILURE);
167 return po->ops->get_privacy_mode(o, ur);
169 case TREQ_CALL_SET_PRIVACY_MODE:
170 _check_null( "po->ops->set_privacy_mode", po->ops->set_privacy_mode, TCORE_RETURN_FAILURE);
171 return po->ops->set_privacy_mode(o, ur);
173 case TREQ_CALL_SET_SOUND_PATH:
174 _check_null( "po->ops->set_sound_path", po->ops->set_sound_path, TCORE_RETURN_FAILURE);
175 return po->ops->set_sound_path(o, ur);
177 case TREQ_CALL_GET_SOUND_VOLUME_LEVEL:
178 _check_null( "po->ops->get_sound_volume_level", po->ops->get_sound_volume_level, TCORE_RETURN_FAILURE);
179 return po->ops->get_sound_volume_level(o, ur);
181 case TREQ_CALL_SET_SOUND_VOLUME_LEVEL:
182 _check_null( "po->ops->set_sound_volume_level", po->ops->set_sound_volume_level, TCORE_RETURN_FAILURE);
183 return po->ops->set_sound_volume_level(o, ur);
185 case TREQ_CALL_SET_SOUND_MUTE_STATUS:
186 _check_null( "po->ops->set_sound_mute_status", po->ops->set_sound_mute_status, TCORE_RETURN_FAILURE);
187 return po->ops->set_sound_mute_status(o, ur);
189 case TREQ_CALL_GET_SOUND_MUTE_STATUS:
190 _check_null( "po->ops->get_sound_mute_status", po->ops->get_sound_mute_status, TCORE_RETURN_FAILURE);
191 return po->ops->get_sound_mute_status(o, ur);
193 case TREQ_CALL_SET_SOUND_RECORDING:
194 _check_null( "po->ops->set_sound_recording", po->ops->set_sound_recording, TCORE_RETURN_FAILURE);
195 return po->ops->set_sound_recording(o, ur);
197 case TREQ_CALL_SET_SOUND_EQUALIZATION:
198 _check_null( "po->ops->set_sound_equalization", po->ops->set_sound_equalization, TCORE_RETURN_FAILURE);
199 return po->ops->set_sound_equalization(o, ur);
201 case TREQ_CALL_SET_SOUND_NOISE_REDUCTION:
202 _check_null( "po->ops->set_sound_noise_reduction", po->ops->set_sound_noise_reduction, TCORE_RETURN_FAILURE);
203 return po->ops->set_sound_noise_reduction(o, ur);
205 case TREQ_CALL_SET_SOUND_CLOCK_STATUS:
206 _check_null( "po->ops->set_sound_clock_status", po->ops->set_sound_clock_status, TCORE_RETURN_FAILURE);
207 return po->ops->set_sound_clock_status(o, ur);
209 case TREQ_CALL_SET_PREFERRED_VOICE_SUBSCRIPTION:
210 _check_null( "po->ops->set_preferred_voice_subscription", po->ops->set_preferred_voice_subscription, TCORE_RETURN_FAILURE);
211 return po->ops->set_preferred_voice_subscription(o, ur);
213 case TREQ_CALL_GET_PREFERRED_VOICE_SUBSCRIPTION:
214 _check_null( "po->ops->get_preferred_voice_subscription", po->ops->get_preferred_voice_subscription, TCORE_RETURN_FAILURE);
215 return po->ops->get_preferred_voice_subscription(o, ur);
221 return TCORE_RETURN_SUCCESS;
224 static void _free_hook(CoreObject *o)
226 struct private_object_data *po = NULL;
228 po = tcore_object_ref_object(o);
232 g_slist_free_full(po->cobjs, g_free);
235 tcore_object_link_object(o, NULL);
238 typedef gboolean(*func)(struct call_object* co, void *data);
239 static struct call_object *_find_object(GSList *objs, void* data, func compare)
241 struct call_object *co = 0;
244 _check_null( "objs", objs, 0);
245 _check_null( "compare", compare, 0);
249 co = (struct call_object*) l->data;
251 if (compare(co, data))
254 l = g_slist_next( l );
260 static GSList* _find_object_all(GSList *objs, void* data, func compare)
262 struct call_object *co = 0;
266 _check_null( "objs", objs, 0);
267 _check_null( "compare", compare, 0);
271 co = (struct call_object*) l->data;
273 if (compare(co, data))
274 ret = g_slist_append(ret, co);
276 l = g_slist_next( l );
282 static gboolean _compare_by_id(struct call_object* co, void *data)
284 unsigned int *id = (unsigned int*) data;
286 _check_null( "co", co, FALSE);
287 _check_null( "data", data, FALSE);
295 static gboolean _compare_by_status(struct call_object* co, void *data)
297 enum tcore_call_status *ct = (enum tcore_call_status*) data;
299 _check_null( "co", co, FALSE);
300 _check_null( "data", data, FALSE);
302 if (co->status == *ct)
308 static gboolean _compare_by_number(struct call_object* co, void *data)
310 char *number = (char*) data;
312 _check_null( "co", co, FALSE);
313 _check_null( "data", data, FALSE);
315 if (!strcmp(co->cli.number, number))
321 static enum tcore_call_cli_mode _check_cli_mode_by_number(char *num)
323 _check_null( "num", num, TCORE_CALL_CLI_MODE_DEFAULT);
325 if (!strncmp(num, "*31#", 4))
326 return TCORE_CALL_CLI_MODE_PRESENT;
328 if (!strncmp(num, "#31#", 4))
329 return TCORE_CALL_CLI_MODE_RESTRICT;
331 return TCORE_CALL_CLI_MODE_DEFAULT;
337 struct call_object *tcore_call_object_new(CoreObject *o, int id)
339 struct private_object_data *po = 0;
340 struct call_object *co = 0;
342 po = tcore_object_ref_object(o);
344 _check_null( "po", po, 0);
346 co = g_new0( struct call_object, 1 );
349 if (!_find_object(po->cobjs, (void*) &id, (void*) _compare_by_id))
352 dbg("[ error ] call object exist already. [ %d ]", id);
360 for (i = 1; i <= MAX_CALL_OBJECTS; i++) { /* 6 is MAX call count */
361 if (!_find_object(po->cobjs, (void*) &i, (void*) _compare_by_id)) {
367 /* Free the allocated Core Object if ID is not allocated */
368 if (i > MAX_CALL_OBJECTS) {
369 err("[ error ] failed to assign call id");
375 po->cobjs = g_slist_append(po->cobjs, co);
377 dbg("new call object id : [%d]", co->id);
382 gboolean tcore_call_object_free(CoreObject *o, struct call_object *co)
384 struct private_object_data *po = NULL;
385 po = tcore_object_ref_object(o);
387 _check_null( "po", po, FALSE);
388 _check_null( "po->cobjs", po->cobjs, FALSE);
389 _check_null( "co", co, FALSE);
391 po->cobjs = g_slist_remove(po->cobjs, co);
397 int tcore_call_object_total_length( CoreObject *o )
399 struct private_object_data *po = NULL;
400 po = tcore_object_ref_object(o);
402 _check_null( "po", po, FALSE);
403 _check_null( "po->cobjs", po->cobjs, FALSE);
405 return (int)g_slist_length(po->cobjs);
408 struct call_object *tcore_call_object_current_on_mt_processing(CoreObject *o)
410 struct private_object_data *po = NULL;
411 struct call_object *call_obj = NULL;
414 enum tcore_call_status cs = CALL_STATUS_INCOMING;
415 po = tcore_object_ref_object(o);
417 _check_null( "po", po, 0);
418 _check_null( "po->cobjs", po->cobjs, 0);
420 l = _find_object_all(po->cobjs, (void*) &cs, (void*) _compare_by_status);
422 cs = CALL_STATUS_WAITING;
423 l = _find_object_all(po->cobjs, (void*) &cs, (void*) _compare_by_status);
428 call_obj = (struct call_object*) l ->data;
433 struct call_object *tcore_call_object_current_on_mo_processing(CoreObject *o)
435 struct private_object_data *po = NULL;
436 struct call_object *call_obj = NULL;
439 enum tcore_call_status cs = CALL_STATUS_DIALING;
440 po = tcore_object_ref_object(o);
442 _check_null( "po", po, 0);
443 _check_null( "po->cobjs", po->cobjs, 0);
445 l = _find_object_all(po->cobjs, (void*) &cs, (void*) _compare_by_status);
447 cs = CALL_STATUS_ALERT;
448 l = _find_object_all(po->cobjs, (void*) &cs, (void*) _compare_by_status);
453 call_obj = (struct call_object*) l ->data;
458 struct call_object *tcore_call_object_find_by_id(CoreObject *o, int id)
460 struct private_object_data *po = NULL;
462 po = tcore_object_ref_object(o);
464 _check_null( "po", po, 0);
465 _check_null( "po->cobjs", po->cobjs, 0);
467 return _find_object(po->cobjs, (void*) &id, (void*) _compare_by_id);
470 struct call_object *tcore_call_object_find_by_number(CoreObject *o, char *num)
472 struct private_object_data *po = NULL;
474 po = tcore_object_ref_object(o);
476 _check_null( "po", po, 0);
477 _check_null( "po->cobjs", po->cobjs, 0);
478 _check_null( "num", num, 0);
480 return _find_object(po->cobjs, (void*) num, (void*) _compare_by_number);
483 GSList* tcore_call_object_find_by_status(CoreObject *o, enum tcore_call_status cs)
485 struct private_object_data *po = NULL;
487 po = tcore_object_ref_object(o);
489 _check_null( "po", po, 0);
490 _check_null( "po->cobjs", po->cobjs, 0);
492 return _find_object_all(po->cobjs, (void*) &cs, (void*) _compare_by_status);
495 int tcore_call_object_get_id(struct call_object *co)
497 _check_null( "co", co, -1);
502 gboolean tcore_call_object_set_type(struct call_object *co, enum tcore_call_type ct)
504 _check_null( "co", co, FALSE);
510 enum tcore_call_type tcore_call_object_get_type(struct call_object *co)
512 _check_null( "co", co, -1);
517 gboolean tcore_call_object_set_direction(struct call_object *co, enum tcore_call_direction cd)
519 _check_null( "co", co, FALSE);
525 enum tcore_call_direction tcore_call_object_get_direction(struct call_object *co)
527 _check_null( "co", co, -1);
529 return co->direction;
532 gboolean tcore_call_object_set_status(struct call_object *co, enum tcore_call_status cs)
534 _check_null( "co", co, FALSE);
540 enum tcore_call_status tcore_call_object_get_status(struct call_object *co)
542 _check_null( "co", co, -1);
547 gboolean tcore_call_object_set_cli_info(struct call_object *co,
548 enum tcore_call_cli_mode mode, enum tcore_call_no_cli_cause cause,
549 char *num, int num_len)
553 _check_null( "co", co, FALSE);
555 dbg("num : %s", num);
556 dbg("mode : 0x%x", mode);
560 if (mode == TCORE_CALL_CLI_MODE_RESTRICT)
561 co->cli.no_cli_cause = cause;
563 co->cli.no_cli_cause = TCORE_CALL_NO_CLI_CAUSE_NONE;
565 co->cli.number_len = num_len ;
566 co->cli.number [0] = '\0';
573 if (mode == TCORE_CALL_CLI_MODE_DEFAULT) {
574 co->cli.mode = _check_cli_mode_by_number(num);
576 if (co->cli.mode != TCORE_CALL_CLI_MODE_DEFAULT)
581 if (mode == TCORE_CALL_CLI_MODE_RESTRICT)
582 co->cli.no_cli_cause = cause;
584 co->cli.no_cli_cause = TCORE_CALL_NO_CLI_CAUSE_NONE;
587 strncpy(co->cli.number, pos, ((num_len - (pos - num)) + 1));
588 co->cli.number_len = strlen(co->cli.number);
590 dbg("co->cli.mode: [0x%x]", co->cli.mode);
591 dbg("co->cli.no_cli_cause: [0x%x]", co->cli.no_cli_cause);
592 dbg("co->cli.number: [%s]", co->cli.number);
593 dbg("co->cli.number_len: [%d]", co->cli.number_len);
598 int tcore_call_object_get_number(struct call_object *co, char *num)
600 _check_null( "co", co, -1);
601 _check_null( "num", num, -1);
603 strncpy(num, co->cli.number, MAX_CALL_NUMBER_LEN);
604 return co->cli.number_len;
607 enum tcore_call_cli_mode tcore_call_object_get_cli_mode(struct call_object *co)
609 _check_null( "co", co, -1);
613 enum tcore_call_no_cli_cause tcore_call_object_get_no_cli_cause(struct call_object *co)
615 _check_null( "co", co, -1);
616 return co->cli.no_cli_cause;
620 gboolean tcore_call_object_set_cna_info(struct call_object *co, enum tcore_call_cna_mode mode, char *name, int dcs)
623 _check_null( "co", co, FALSE);
624 _check_null( "name", name, FALSE);
627 if (len >= MAX_CALL_NAME_LEN)
630 strncpy(co->cna.name, name, len);
631 co->cna.name[len] = '\0';
638 int tcore_call_object_get_name(struct call_object *co, char *name)
640 _check_null( "co", co, -1);
641 _check_null( "name", name, -1);
643 strncpy(name, co->cna.name, MAX_CALL_NAME_LEN);
644 return co->cna.name_len;
647 enum tcore_call_cna_mode tcore_call_object_get_cna_mode(struct call_object *co)
649 _check_null( "co", co, -1);
654 gboolean tcore_call_object_set_multiparty_state(struct call_object *co, gboolean is)
656 _check_null( "co", co, FALSE);
662 gboolean tcore_call_object_get_multiparty_state(struct call_object *co)
664 _check_null( "co", co, FALSE);
669 gboolean tcore_call_object_set_active_line(struct call_object *co, unsigned int line)
671 _check_null( "co", co, FALSE);
673 co->active_line = line;
677 int tcore_call_object_get_active_line(struct call_object *co)
679 _check_null( "co", co, -1);
681 return co->active_line;
684 TReturn tcore_call_control_answer_hold_and_accept(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
686 struct private_object_data *po = NULL;
687 po = tcore_object_ref_object(o);
689 _check_null( "po", po, TCORE_RETURN_FAILURE);
690 _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
692 return po->cops->answer_hold_and_accept(o, ur, cb, user_data);
695 TReturn tcore_call_control_answer_replace(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
697 struct private_object_data *po = NULL;
698 po = tcore_object_ref_object(o);
700 _check_null( "po", po, TCORE_RETURN_FAILURE);
701 _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
703 return po->cops->answer_replace(o, ur, cb, user_data);
706 TReturn tcore_call_control_answer_reject(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
708 struct private_object_data *po = NULL;
709 po = tcore_object_ref_object(o);
711 _check_null( "po", po, TCORE_RETURN_FAILURE);
712 _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
714 return po->cops->answer_reject(o, ur, cb, user_data);
717 TReturn tcore_call_control_end_specific(CoreObject* o, UserRequest* ur, const int id, ConfirmCallback cb,
720 struct private_object_data *po = NULL;
721 po = tcore_object_ref_object(o);
723 _check_null( "po", po, TCORE_RETURN_FAILURE);
724 _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
726 return po->cops->end_specific(o, ur, id, cb, user_data);
729 TReturn tcore_call_control_end_all_active(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
731 struct private_object_data *po = NULL;
732 po = tcore_object_ref_object(o);
734 _check_null( "po", po, TCORE_RETURN_FAILURE);
735 _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
737 return po->cops->end_all_active(o, ur, cb, user_data);
740 TReturn tcore_call_control_end_all_held(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
742 struct private_object_data *po = NULL;
743 po = tcore_object_ref_object(o);
745 _check_null( "po", po, TCORE_RETURN_FAILURE);
746 _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
748 return po->cops->end_all_held(o, ur, cb, user_data);
751 TReturn tcore_call_control_active(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
753 struct private_object_data *po = NULL;
754 po = tcore_object_ref_object(o);
756 _check_null( "po", po, TCORE_RETURN_FAILURE);
757 _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
759 return po->cops->active(o, ur, cb, user_data);
762 TReturn tcore_call_control_hold(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
764 struct private_object_data *po = NULL;
765 po = tcore_object_ref_object(o);
767 _check_null( "po", po, TCORE_RETURN_FAILURE);
768 _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
770 return po->cops->hold(o, ur, cb, user_data);
773 TReturn tcore_call_control_swap(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
775 struct private_object_data *po = NULL;
776 po = tcore_object_ref_object(o);
778 _check_null( "po", po, TCORE_RETURN_FAILURE);
779 _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
781 return po->cops->swap(o, ur, cb, user_data);
784 TReturn tcore_call_control_join(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
786 struct private_object_data *po = NULL;
787 po = tcore_object_ref_object(o);
789 _check_null( "po", po, TCORE_RETURN_FAILURE);
790 _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
792 return po->cops->join(o, ur, cb, user_data);
795 TReturn tcore_call_control_split(CoreObject* o, UserRequest* ur, const int id, ConfirmCallback cb, void* user_data)
797 struct private_object_data *po = NULL;
798 po = tcore_object_ref_object(o);
800 _check_null( "po", po, TCORE_RETURN_FAILURE);
801 _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
803 return po->cops->split(o, ur, id, cb, user_data);
806 TReturn tcore_call_control_transfer(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
808 struct private_object_data *po = NULL;
809 po = tcore_object_ref_object(o);
811 _check_null( "po", po, TCORE_RETURN_FAILURE);
812 _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
814 return po->cops->transfer(o, ur, cb, user_data);
817 TReturn tcore_call_control_deflect(CoreObject* o, UserRequest* ur, const char* number, ConfirmCallback cb,
820 struct private_object_data *po = NULL;
821 po = tcore_object_ref_object(o);
823 _check_null( "po", po, TCORE_RETURN_FAILURE);
824 _check_null( "po->cops", po->cops, TCORE_RETURN_FAILURE);
826 return po->cops->deflect(o, ur, number, cb, user_data);
829 void tcore_call_control_set_operations(CoreObject *o, struct tcore_call_control_operations *ops)
831 struct private_object_data *po = NULL;
833 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
835 po = tcore_object_ref_object(o);
842 void tcore_call_information_mo_col(CoreObject *o, char* number)
844 struct private_object_data *po = NULL;
846 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
848 po = tcore_object_ref_object(o);
850 _check_null( "po", po, );
851 _check_null( "po->iops", po->iops,);
853 po->iops->mo_call_col(o, number);
856 void tcore_call_information_mo_waiting(CoreObject *o)
858 struct private_object_data *po = NULL;
860 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
862 po = tcore_object_ref_object(o);
864 _check_null( "po", po, );
865 _check_null( "po->iops", po->iops,);
867 po->iops->mo_call_waiting(o);
870 void tcore_call_information_mo_cug(CoreObject *o, int cug_index)
872 struct private_object_data *po = NULL;
874 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
876 po = tcore_object_ref_object(o);
878 _check_null( "po", po, );
879 _check_null( "po->iops", po->iops,);
881 po->iops->mo_call_cug(o, cug_index);
884 void tcore_call_information_mo_forwarded(CoreObject *o)
886 struct private_object_data *po = NULL;
888 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
890 po = tcore_object_ref_object(o);
892 _check_null( "po", po,);
893 _check_null( "po->iops", po->iops,);
895 po->iops->mo_call_forwarded(o);
898 void tcore_call_information_mo_barred_incoming(CoreObject *o)
900 struct private_object_data *po = NULL;
902 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
904 po = tcore_object_ref_object(o);
906 _check_null( "po", po,);
907 _check_null( "po->iops", po->iops,);
909 po->iops->mo_call_barred_incoming(o);
912 void tcore_call_information_mo_barred_outgoing(CoreObject *o)
914 struct private_object_data *po = NULL;
916 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
918 po = tcore_object_ref_object(o);
920 _check_null( "po", po,);
921 _check_null( "po->iops", po->iops,);
923 po->iops->mo_call_barred_outgoing(o);
926 void tcore_call_information_mo_deflected(CoreObject *o)
928 struct private_object_data *po = NULL;
930 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
932 po = tcore_object_ref_object(o);
934 _check_null( "po", po,);
935 _check_null( "po->iops", po->iops,);
937 po->iops->mo_call_deflected(o);
940 void tcore_call_information_mo_clir_suppression_reject(CoreObject *o)
942 struct private_object_data *po = NULL;
944 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
946 po = tcore_object_ref_object(o);
948 _check_null( "po", po,);
949 _check_null( "po->iops", po->iops,);
951 po->iops->mo_call_clir_suppression_reject(o);
954 void tcore_call_information_mo_cfu(CoreObject *o)
956 struct private_object_data *po = NULL;
958 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
960 po = tcore_object_ref_object(o);
962 _check_null( "po", po,);
963 _check_null( "po->iops", po->iops,);
965 po->iops->mo_call_cfu(o);
968 void tcore_call_information_mo_cfc(CoreObject *o)
970 struct private_object_data *po = NULL;
972 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
974 po = tcore_object_ref_object(o);
976 _check_null( "po", po,);
977 _check_null( "po->iops", po->iops,);
979 po->iops->mo_call_cfc(o);
982 void tcore_call_information_mt_cli(CoreObject *o, enum tcore_call_cli_mode mode, char* number)
984 struct private_object_data *po = NULL;
986 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
988 po = tcore_object_ref_object(o);
990 _check_null( "po", po, );
991 _check_null( "po->iops", po->iops,);
993 po->iops->mt_call_cli(o, mode, number);
996 void tcore_call_information_mt_cna(CoreObject *o, enum tcore_call_cna_mode mode, char* name, int dcs)
998 struct private_object_data *po = NULL;
1000 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
1002 po = tcore_object_ref_object(o);
1004 _check_null( "po", po,);
1005 _check_null( "po->iops", po->iops,);
1007 po->iops->mt_call_cna(o, mode, name, dcs);
1010 void tcore_call_information_mt_forwarded_call(CoreObject *o, char* number)
1012 struct private_object_data *po = NULL;
1014 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
1016 po = tcore_object_ref_object(o);
1018 _check_null( "po", po,);
1019 _check_null( "po->iops", po->iops,);
1021 po->iops->mt_call_forwarded_call(o, number);
1024 void tcore_call_information_mt_cug_call(CoreObject *o, int cug_index, char* number)
1026 struct private_object_data *po = NULL;
1028 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
1030 po = tcore_object_ref_object(o);
1032 _check_null( "po", po,);
1033 _check_null( "po->iops", po->iops,);
1035 po->iops->mt_call_cug_call(o, cug_index, number);
1038 void tcore_call_information_mt_deflected_call(CoreObject *o, char* number)
1040 struct private_object_data *po = NULL;
1042 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
1044 po = tcore_object_ref_object(o);
1046 _check_null( "po", po,);
1047 _check_null( "po->iops", po->iops,);
1049 po->iops->mt_call_deflected_call(o, number);
1052 void tcore_call_information_mt_transfered(CoreObject *o, char* number)
1054 struct private_object_data *po = NULL;
1056 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
1058 po = tcore_object_ref_object(o);
1060 _check_null( "po", po,);
1061 _check_null( "po->iops", po->iops,);
1063 po->iops->mt_call_transfered(o, number);
1066 void tcore_call_information_held(CoreObject *o, char* number)
1068 struct private_object_data *po = NULL;
1070 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
1072 po = tcore_object_ref_object(o);
1074 _check_null( "po", po,);
1075 _check_null( "po->iops", po->iops,);
1077 po->iops->call_held(o, number);
1080 void tcore_call_information_active(CoreObject *o, char* number)
1082 struct private_object_data *po = NULL;
1084 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
1086 po = tcore_object_ref_object(o);
1088 _check_null( "po", po,);
1089 _check_null( "po->iops", po->iops,);
1091 po->iops->call_active(o, number);
1094 void tcore_call_information_joined(CoreObject *o, char* number)
1096 struct private_object_data *po = NULL;
1098 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
1100 po = tcore_object_ref_object(o);
1102 _check_null( "po", po,);
1103 _check_null( "po->iops", po->iops,);
1105 po->iops->call_joined(o, number);
1108 void tcore_call_information_released_on_hold(CoreObject *o, char* number)
1110 struct private_object_data *po = NULL;
1112 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
1114 po = tcore_object_ref_object(o);
1116 _check_null( "po", po,);
1117 _check_null( "po->iops", po->iops,);
1119 po->iops->call_released_on_hold(o, number);
1122 void tcore_call_information_transfer_alert(CoreObject *o, char* number)
1124 struct private_object_data *po = NULL;
1126 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
1128 po = tcore_object_ref_object(o);
1130 _check_null( "po", po,);
1131 _check_null( "po->iops", po->iops,);
1133 po->iops->call_transfer_alert(o, number);
1136 void tcore_call_information_transfered(CoreObject *o, char* number)
1138 struct private_object_data *po = NULL;
1140 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
1142 po = tcore_object_ref_object(o);
1144 _check_null( "po", po,);
1145 _check_null( "po->iops", po->iops,);
1147 po->iops->call_transfered(o, number);
1150 void tcore_call_information_cf_check_ss_message(CoreObject *o, char* number)
1152 struct private_object_data *po = NULL;
1154 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
1156 po = tcore_object_ref_object(o);
1158 _check_null( "po", po,);
1159 _check_null( "po->iops", po->iops,);
1161 po->iops->call_cf_check_message(o, number);
1164 void tcore_call_information_set_operations(CoreObject *o, struct tcore_call_information_operations *ops)
1166 struct private_object_data *po = NULL;
1168 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
1170 po = tcore_object_ref_object(o);
1177 CoreObject *tcore_call_new(TcorePlugin *p, const char *name, struct tcore_call_operations *ops, TcoreHal *hal)
1179 CoreObject *o = NULL;
1180 struct private_object_data *po = NULL;
1185 o = tcore_object_new(p, name, hal);
1189 po = g_try_new0(struct private_object_data, 1);
1191 tcore_object_free(o);
1197 tcore_object_set_type(o, CORE_OBJECT_TYPE_CALL);
1198 tcore_object_link_object(o, po);
1199 tcore_object_set_free_hook(o, _free_hook);
1200 tcore_object_set_clone_hook(o, _clone_hook);
1201 tcore_object_set_dispatcher(o, _dispatcher);
1206 void tcore_call_free(CoreObject *o)
1208 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
1209 tcore_object_free(o);
1212 void tcore_call_set_ops(CoreObject *o, struct tcore_call_operations *ops)
1214 struct private_object_data *po = NULL;
1216 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
1218 po = (struct private_object_data *)tcore_object_ref_object(o);