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 _check_null( name, value, err ) { \
36 dbg("[error] %s : NULL", name ); \
41 struct call_cli_info {
42 enum tcore_call_cli_mode mode;
43 char number[MAX_CALL_NUMBER_LEN];
47 struct call_cna_info {
48 enum tcore_call_cna_mode mode;
50 char name[MAX_CALL_NAME_LEN];
55 enum tcore_call_type type;
57 enum tcore_call_direction direction;
58 enum tcore_call_status status;
60 struct call_cli_info cli;
61 struct call_cna_info cna;
63 unsigned int active_line;
64 struct call_time { // second
70 struct private_object_data {
72 struct tcore_call_operations *ops;
73 struct tcore_call_control_operations *cops;
74 struct tcore_call_information_operations *iops;
77 static void _clone_hook(CoreObject *src, CoreObject *dest)
79 struct private_object_data *src_po = NULL;
80 struct private_object_data *dest_po = NULL;
85 dest_po = calloc(sizeof(struct private_object_data), 1);
87 tcore_object_link_object(dest, NULL);
91 src_po = tcore_object_ref_object(src);
92 dest_po->ops = src_po->ops;
94 tcore_object_link_object(dest, dest_po);
97 static TReturn _dispatcher(CoreObject *o, UserRequest *ur)
99 enum tcore_request_command command;
101 struct private_object_data *po = NULL;
102 po = tcore_object_ref_object(o);
104 _check_null( "po", po, TCORE_RETURN_FAILURE);
105 _check_null( "po->ops", po->ops, TCORE_RETURN_FAILURE);
106 _check_null( "ur", ur, TCORE_RETURN_FAILURE);
108 command = tcore_user_request_get_command(ur);
111 _check_null( "po->ops->dial", po->ops->dial, TCORE_RETURN_FAILURE);
112 return po->ops->dial(o, ur);
114 case TREQ_CALL_ANSWER:
115 _check_null( "po->ops->answer", po->ops->answer, TCORE_RETURN_FAILURE);
116 return po->ops->answer(o, ur);
119 _check_null( "po->ops->end", po->ops->end, TCORE_RETURN_FAILURE);
120 return po->ops->end(o, ur);
123 return po->ops->hold(o, ur);
125 case TREQ_CALL_ACTIVE:
126 return po->ops->active(o, ur);
129 return po->ops->swap(o, ur);
132 return po->ops->join(o, ur);
134 case TREQ_CALL_SPLIT:
135 return po->ops->split(o, ur);
137 case TREQ_CALL_DEFLECT:
138 return po->ops->deflect(o, ur);
140 case TREQ_CALL_TRANSFER:
141 return po->ops->transfer(o, ur);
143 case TREQ_CALL_SEND_DTMF:
144 return po->ops->send_dtmf(o, ur);
146 case TREQ_CALL_SET_SOUND_PATH:
147 return po->ops->set_sound_path(o, ur);
149 case TREQ_CALL_GET_SOUND_VOLUME_LEVEL:
150 return po->ops->get_sound_volume_level(o, ur);
152 case TREQ_CALL_SET_SOUND_VOLUME_LEVEL:
153 return po->ops->set_sound_volume_level(o, ur);
156 return po->ops->mute(o, ur);
158 case TREQ_CALL_UNMUTE:
159 return po->ops->unmute(o, ur);
161 case TREQ_CALL_GET_MUTE_STATUS:
162 return po->ops->get_mute_status(o, ur);
164 case TREQ_CALL_SET_SOUND_RECORDING:
165 return po->ops->set_sound_recording(o, ur);
167 case TREQ_CALL_SET_SOUND_EQUALIZATION:
168 return po->ops->set_sound_equalization(o, ur);
170 case TREQ_CALL_SET_SOUND_NOISE_REDUCTION:
171 return po->ops->set_sound_noise_reduction(o, ur);
177 return TCORE_RETURN_SUCCESS;
180 static void _free_hook(CoreObject *o)
182 struct private_object_data *po = NULL;
185 po = tcore_object_ref_object(o);
190 for (list = po->cobjs; list; list = list->next) {
200 g_slist_free(po->cobjs);
205 tcore_object_link_object(o, NULL);
208 typedef gboolean(*func)(struct call_object* co, void *data);
209 static struct call_object *_find_object(GSList *objs, void* data, func compare)
211 struct call_object *co = 0;
214 _check_null( "objs", objs, 0);
215 _check_null( "compare", compare, 0);
219 co = (struct call_object*) l->data;
221 if (compare(co, data))
224 l = g_slist_next( l );
230 static GSList* _find_object_all(GSList *objs, void* data, func compare)
232 struct call_object *co = 0;
236 _check_null( "objs", objs, 0);
237 _check_null( "compare", compare, 0);
241 co = (struct call_object*) l->data;
243 if (compare(co, data))
244 ret = g_slist_append(ret, co);
246 l = g_slist_next( l );
252 static gboolean _compare_by_id(struct call_object* co, void *data)
254 unsigned int *id = (unsigned int*) data;
256 _check_null( "co", co, FALSE);
257 _check_null( "data", data, FALSE);
265 static gboolean _compare_by_status(struct call_object* co, void *data)
267 enum tcore_call_status *ct = (enum tcore_call_status*) data;
269 _check_null( "co", co, FALSE);
270 _check_null( "data", data, FALSE);
272 if (co->status == *ct)
278 static gboolean _compare_by_number(struct call_object* co, void *data)
280 char *number = (char*) data;
282 _check_null( "co", co, FALSE);
283 _check_null( "data", data, FALSE);
285 if (!strcmp(co->cli.number, number))
291 static enum tcore_call_cli_mode _check_cli_mode_by_number(char *num)
293 _check_null( "num", num, TCORE_CALL_CLI_MODE_DEFAULT);
295 if (!strncmp(num, "*31#", 4))
296 return TCORE_CALL_CLI_MODE_PRESENT;
298 if (!strncmp(num, "#31#", 4))
299 return TCORE_CALL_CLI_MODE_RESTRICT;
301 return TCORE_CALL_CLI_MODE_DEFAULT;
307 struct call_object *tcore_call_object_new(CoreObject *o, int id)
309 struct private_object_data *po = 0;
310 struct call_object *co = 0;
312 po = tcore_object_ref_object(o);
314 _check_null( "po", po, 0);
316 co = g_new0( struct call_object, 1 );
319 if (!_find_object(po->cobjs, (void*) &id, (void*) _compare_by_id))
322 dbg("[ error ] call object exist already. [ %d ]", id);
330 for (i = 1; i < 6; i++) {
331 // 6 is MAX call count
332 if (!_find_object(po->cobjs, (void*) &i, (void*) _compare_by_id)) {
339 po->cobjs = g_slist_append(po->cobjs, co);
341 dbg("new call object id : [%d]", co->id);
346 gboolean tcore_call_object_free(CoreObject *o, struct call_object *co)
348 struct private_object_data *po = NULL;
349 po = tcore_object_ref_object(o);
351 _check_null( "po", po, FALSE);
352 _check_null( "po->cobjs", po->cobjs, FALSE);
353 _check_null( "co", co, FALSE);
355 po->cobjs = g_slist_remove(po->cobjs, co);
358 dbg("co is not free");
362 dbg("co is also free");
367 struct call_object *tcore_call_object_current_on_mt_processing(CoreObject *o)
369 struct private_object_data *po = NULL;
372 enum tcore_call_status cs = CALL_STATUS_INCOMING;
374 po = tcore_object_ref_object(o);
376 _check_null( "po", po, 0);
377 _check_null( "po->cobjs", po->cobjs, 0);
379 l = _find_object_all(po->cobjs, (void*) &cs, (void*) _compare_by_status);
381 cs = CALL_STATUS_WAITING;
382 l = _find_object_all(po->cobjs, (void*) &cs, (void*) _compare_by_status);
387 return (struct call_object*) l->data;
390 struct call_object *tcore_call_object_current_on_mo_processing(CoreObject *o)
392 struct private_object_data *po = NULL;
395 enum tcore_call_status cs = CALL_STATUS_DIALING;
397 po = tcore_object_ref_object(o);
399 _check_null( "po", po, 0);
400 _check_null( "po->cobjs", po->cobjs, 0);
402 l = _find_object_all(po->cobjs, (void*) &cs, (void*) _compare_by_status);
404 cs = CALL_STATUS_ALERT;
405 l = _find_object_all(po->cobjs, (void*) &cs, (void*) _compare_by_status);
410 return (struct call_object*) l->data;
413 struct call_object *tcore_call_object_find_by_id(CoreObject *o, int id)
415 struct private_object_data *po = NULL;
417 po = tcore_object_ref_object(o);
419 _check_null( "po", po, 0);
420 _check_null( "po->cobjs", po->cobjs, 0);
422 return _find_object(po->cobjs, (void*) &id, (void*) _compare_by_id);
425 struct call_object *tcore_call_object_find_by_number(CoreObject *o, char *num)
427 struct private_object_data *po = NULL;
429 po = tcore_object_ref_object(o);
431 _check_null( "po", po, 0);
432 _check_null( "po->cobjs", po->cobjs, 0);
433 _check_null( "num", num, 0);
435 return _find_object(po->cobjs, (void*) num, (void*) _compare_by_number);
438 GSList* tcore_call_object_find_by_status(CoreObject *o, enum tcore_call_status cs)
440 struct private_object_data *po = NULL;
442 po = tcore_object_ref_object(o);
444 _check_null( "po", po, 0);
445 _check_null( "po->cobjs", po->cobjs, 0);
447 return _find_object_all(po->cobjs, (void*) &cs, (void*) _compare_by_status);
450 int tcore_call_object_get_id(struct call_object *co)
452 _check_null( "co", co, -1);
457 gboolean tcore_call_object_set_type(struct call_object *co, enum tcore_call_type ct)
459 _check_null( "co", co, FALSE);
465 enum tcore_call_type tcore_call_object_get_type(struct call_object *co)
467 _check_null( "co", co, -1);
472 gboolean tcore_call_object_set_direction(struct call_object *co, enum tcore_call_direction cd)
474 _check_null( "co", co, FALSE);
480 enum tcore_call_direction tcore_call_object_get_direction(struct call_object *co)
482 _check_null( "co", co, -1);
484 return co->direction;
487 gboolean tcore_call_object_set_status(struct call_object *co, enum tcore_call_status cs)
489 _check_null( "co", co, FALSE);
495 enum tcore_call_status tcore_call_object_get_status(struct call_object *co)
497 _check_null( "co", co, -1);
502 gboolean tcore_call_object_set_cli_info(struct call_object *co, enum tcore_call_cli_mode mode, char *num)
506 _check_null( "co", co, FALSE);
513 dbg("num : %s", num);
514 dbg("mode : 0x%x", mode);
519 co->cli.mode = _check_cli_mode_by_number(num);
528 strncpy(co->cli.number, pos, (strlen(pos) + 1));
529 co->cli.number_len = strlen(co->cli.number);
531 dbg("co->cli.mode : 0x%x", co->cli.mode);
532 dbg("co->cli.number : %s", co->cli.number);
533 dbg("co->cli.number_len : %d", co->cli.number_len);
538 int tcore_call_object_get_number(struct call_object *co, char *num)
540 _check_null( "co", co, -1);
541 _check_null( "num", num, -1);
543 strncpy(num, co->cli.number, MAX_CALL_NUMBER_LEN);
544 return co->cli.number_len;
547 enum tcore_call_cli_mode tcore_call_object_get_cli_mode(struct call_object *co)
549 _check_null( "co", co, -1);
553 gboolean tcore_call_object_set_cna_info(struct call_object *co, enum tcore_call_cna_mode mode, char *name, int dcs)
555 _check_null( "co", co, FALSE);
556 _check_null( "name", name, FALSE);
559 strncpy(co->cna.name, name, MAX_CALL_NAME_LEN);
563 int tcore_call_object_get_name(struct call_object *co, char *name)
565 _check_null( "co", co, -1);
566 _check_null( "name", name, -1);
568 strncpy(name, co->cna.name, MAX_CALL_NAME_LEN);
569 return co->cna.name_len;
572 enum tcore_call_cna_mode tcore_call_object_get_cna_mode(struct call_object *co)
574 _check_null( "co", co, -1);
579 gboolean tcore_call_object_set_multiparty_state(struct call_object *co, gboolean is)
581 _check_null( "co", co, FALSE);
587 gboolean tcore_call_object_get_multiparty_state(struct call_object *co)
589 _check_null( "co", co, FALSE);
594 gboolean tcore_call_object_set_active_line(struct call_object *co, unsigned int line)
596 _check_null( "co", co, FALSE);
598 co->active_line = line;
602 int tcore_call_object_get_active_line(struct call_object *co)
604 _check_null( "co", co, -1);
606 return co->active_line;
609 TReturn tcore_call_control_answer_hold_and_accept(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
611 struct private_object_data *po = NULL;
612 po = tcore_object_ref_object(o);
614 if (!po && !po->cops)
615 return TCORE_RETURN_FAILURE;
617 return po->cops->answer_hold_and_accept(o, ur, cb, user_data);
620 TReturn tcore_call_control_answer_replace(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
622 struct private_object_data *po = NULL;
623 po = tcore_object_ref_object(o);
625 if (!po && !po->cops)
626 return TCORE_RETURN_FAILURE;
628 return po->cops->answer_replace(o, ur, cb, user_data);
631 TReturn tcore_call_control_answer_reject(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
633 struct private_object_data *po = NULL;
634 po = tcore_object_ref_object(o);
636 if (!po && !po->cops)
637 return TCORE_RETURN_FAILURE;
639 return po->cops->answer_reject(o, ur, cb, user_data);
642 TReturn tcore_call_control_end_specific(CoreObject* o, UserRequest* ur, const int id, ConfirmCallback cb,
645 struct private_object_data *po = NULL;
646 po = tcore_object_ref_object(o);
648 if (!po && !po->cops)
649 return TCORE_RETURN_FAILURE;
651 return po->cops->end_specific(o, ur, id, cb, user_data);
654 TReturn tcore_call_control_end_all_active(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
656 struct private_object_data *po = NULL;
657 po = tcore_object_ref_object(o);
659 if (!po && !po->cops)
660 return TCORE_RETURN_FAILURE;
662 return po->cops->end_all_active(o, ur, cb, user_data);
665 TReturn tcore_call_control_end_all_held(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
667 struct private_object_data *po = NULL;
668 po = tcore_object_ref_object(o);
670 if (!po && !po->cops)
671 return TCORE_RETURN_FAILURE;
673 return po->cops->end_all_held(o, ur, cb, user_data);
676 TReturn tcore_call_control_active(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
678 struct private_object_data *po = NULL;
679 po = tcore_object_ref_object(o);
681 if (!po && !po->cops)
682 return TCORE_RETURN_FAILURE;
684 return po->cops->active(o, ur, cb, user_data);
687 TReturn tcore_call_control_hold(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
689 struct private_object_data *po = NULL;
690 po = tcore_object_ref_object(o);
692 if (!po && !po->cops)
693 return TCORE_RETURN_FAILURE;
695 return po->cops->hold(o, ur, cb, user_data);
698 TReturn tcore_call_control_swap(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
700 struct private_object_data *po = NULL;
701 po = tcore_object_ref_object(o);
703 if (!po && !po->cops)
704 return TCORE_RETURN_FAILURE;
706 return po->cops->swap(o, ur, cb, user_data);
709 TReturn tcore_call_control_join(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
711 struct private_object_data *po = NULL;
712 po = tcore_object_ref_object(o);
714 if (!po && !po->cops)
715 return TCORE_RETURN_FAILURE;
717 return po->cops->join(o, ur, cb, user_data);
720 TReturn tcore_call_control_split(CoreObject* o, UserRequest* ur, const int id, ConfirmCallback cb, void* user_data)
722 struct private_object_data *po = NULL;
723 po = tcore_object_ref_object(o);
725 if (!po && !po->cops)
726 return TCORE_RETURN_FAILURE;
728 return po->cops->split(o, ur, id, cb, user_data);
731 TReturn tcore_call_control_transfer(CoreObject* o, UserRequest* ur, ConfirmCallback cb, void* user_data)
733 struct private_object_data *po = NULL;
734 po = tcore_object_ref_object(o);
736 if (!po && !po->cops)
737 return TCORE_RETURN_FAILURE;
739 return po->cops->transfer(o, ur, cb, user_data);
742 TReturn tcore_call_control_deflect(CoreObject* o, UserRequest* ur, const char* number, ConfirmCallback cb,
745 struct private_object_data *po = NULL;
746 po = tcore_object_ref_object(o);
748 if (!po && !po->cops)
749 return TCORE_RETURN_FAILURE;
751 return po->cops->deflect(o, ur, number, cb, user_data);
754 void tcore_call_control_set_operations(CoreObject *o, struct tcore_call_control_operations *ops)
756 struct private_object_data *po = NULL;
758 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
760 po = tcore_object_ref_object(o);
767 void tcore_call_information_mo_col(CoreObject *o, char* number)
769 struct private_object_data *po = NULL;
771 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
773 po = tcore_object_ref_object(o);
775 if (!po && !po->iops)
778 po->iops->mo_call_col(o, number);
781 void tcore_call_information_mo_waiting(CoreObject *o)
783 struct private_object_data *po = NULL;
785 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
787 po = tcore_object_ref_object(o);
789 if (!po && !po->iops)
792 po->iops->mo_call_waiting(o);
795 void tcore_call_information_mo_cug(CoreObject *o, int cug_index)
797 struct private_object_data *po = NULL;
799 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
801 po = tcore_object_ref_object(o);
803 if (!po && !po->iops)
806 po->iops->mo_call_cug(o, cug_index);
809 void tcore_call_information_mo_forwarded(CoreObject *o)
811 struct private_object_data *po = NULL;
813 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
815 po = tcore_object_ref_object(o);
817 if (!po && !po->iops)
820 po->iops->mo_call_forwarded(o);
823 void tcore_call_information_mo_barred_incoming(CoreObject *o)
825 struct private_object_data *po = NULL;
827 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
829 po = tcore_object_ref_object(o);
831 if (!po && !po->iops)
834 po->iops->mo_call_barred_incoming(o);
837 void tcore_call_information_mo_barred_outgoing(CoreObject *o)
839 struct private_object_data *po = NULL;
841 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
843 po = tcore_object_ref_object(o);
845 if (!po && !po->iops)
848 po->iops->mo_call_barred_outgoing(o);
851 void tcore_call_information_mo_deflected(CoreObject *o)
853 struct private_object_data *po = NULL;
855 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
857 po = tcore_object_ref_object(o);
859 if (!po && !po->iops)
862 po->iops->mo_call_deflected(o);
865 void tcore_call_information_mo_clir_suppression_reject(CoreObject *o)
867 struct private_object_data *po = NULL;
869 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
871 po = tcore_object_ref_object(o);
873 if (!po && !po->iops)
876 po->iops->mo_call_clir_suppression_reject(o);
879 void tcore_call_information_mo_cfu(CoreObject *o)
881 struct private_object_data *po = NULL;
883 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
885 po = tcore_object_ref_object(o);
887 if (!po && !po->iops)
890 po->iops->mo_call_cfu(o);
893 void tcore_call_information_mo_cfc(CoreObject *o)
895 struct private_object_data *po = NULL;
897 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
899 po = tcore_object_ref_object(o);
901 if (!po && !po->iops)
904 po->iops->mo_call_cfc(o);
907 void tcore_call_information_mt_cli(CoreObject *o, enum tcore_call_cli_mode mode, char* number)
909 struct private_object_data *po = NULL;
911 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
913 po = tcore_object_ref_object(o);
915 if (!po && !po->iops)
918 po->iops->mt_call_cli(o, mode, number);
921 void tcore_call_information_mt_cna(CoreObject *o, enum tcore_call_cna_mode mode, char* name, int dcs)
923 struct private_object_data *po = NULL;
925 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
927 po = tcore_object_ref_object(o);
929 if (!po && !po->iops)
932 po->iops->mt_call_cna(o, mode, name, dcs);
935 void tcore_call_information_mt_forwarded_call(CoreObject *o, char* number)
937 struct private_object_data *po = NULL;
939 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
941 po = tcore_object_ref_object(o);
943 if (!po && !po->iops)
946 po->iops->mt_call_forwarded_call(o, number);
949 void tcore_call_information_mt_cug_call(CoreObject *o, int cug_index, char* number)
951 struct private_object_data *po = NULL;
953 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
955 po = tcore_object_ref_object(o);
957 if (!po && !po->iops)
960 po->iops->mt_call_cug_call(o, cug_index, number);
963 void tcore_call_information_mt_deflected_call(CoreObject *o, char* number)
965 struct private_object_data *po = NULL;
967 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
969 po = tcore_object_ref_object(o);
971 if (!po && !po->iops)
974 po->iops->mt_call_deflected_call(o, number);
977 void tcore_call_information_mt_transfered(CoreObject *o, char* number)
979 struct private_object_data *po = NULL;
981 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
983 po = tcore_object_ref_object(o);
985 if (!po && !po->iops)
988 po->iops->mt_call_transfered(o, number);
991 void tcore_call_information_held(CoreObject *o, char* number)
993 struct private_object_data *po = NULL;
995 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
997 po = tcore_object_ref_object(o);
999 if (!po && !po->iops)
1002 po->iops->call_held(o, number);
1005 void tcore_call_information_active(CoreObject *o, char* number)
1007 struct private_object_data *po = NULL;
1009 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
1011 po = tcore_object_ref_object(o);
1013 if (!po && !po->iops)
1016 po->iops->call_active(o, number);
1019 void tcore_call_information_joined(CoreObject *o, char* number)
1021 struct private_object_data *po = NULL;
1023 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
1025 po = tcore_object_ref_object(o);
1027 if (!po && !po->iops)
1030 po->iops->call_joined(o, number);
1033 void tcore_call_information_released_on_hold(CoreObject *o, char* number)
1035 struct private_object_data *po = NULL;
1037 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
1039 po = tcore_object_ref_object(o);
1041 if (!po && !po->iops)
1044 po->iops->call_released_on_hold(o, number);
1047 void tcore_call_information_transfer_alert(CoreObject *o, char* number)
1049 struct private_object_data *po = NULL;
1051 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
1053 po = tcore_object_ref_object(o);
1055 if (!po && !po->iops)
1058 po->iops->call_transfer_alert(o, number);
1061 void tcore_call_information_transfered(CoreObject *o, char* number)
1063 struct private_object_data *po = NULL;
1065 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
1067 po = tcore_object_ref_object(o);
1069 if (!po && !po->iops)
1072 po->iops->call_transfered(o, number);
1075 void tcore_call_information_cf_check_ss_message(CoreObject *o, char* number)
1077 struct private_object_data *po = NULL;
1079 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
1081 po = tcore_object_ref_object(o);
1083 if (!po && !po->iops)
1086 po->iops->call_cf_check_message(o, number);
1089 void tcore_call_information_set_operations(CoreObject *o, struct tcore_call_information_operations *ops)
1091 struct private_object_data *po = NULL;
1093 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
1095 po = tcore_object_ref_object(o);
1102 CoreObject *tcore_call_new(TcorePlugin *p, const char *name, struct tcore_call_operations *ops, TcoreHal *hal)
1104 CoreObject *o = NULL;
1105 struct private_object_data *po = NULL;
1110 o = tcore_object_new(p, name, hal);
1114 po = calloc(sizeof(struct private_object_data), 1);
1116 tcore_object_free(o);
1122 tcore_object_set_type(o, CORE_OBJECT_TYPE_CALL);
1123 tcore_object_link_object(o, po);
1124 tcore_object_set_free_hook(o, _free_hook);
1125 tcore_object_set_clone_hook(o, _clone_hook);
1126 tcore_object_set_dispatcher(o, _dispatcher);
1131 void tcore_call_free(CoreObject *o)
1133 struct private_object_data *po = NULL;
1135 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_CALL);
1137 po = tcore_object_ref_object(o);
1142 tcore_object_free(o);