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"
31 #include "co_context.h"
33 struct private_object_data {
34 enum co_context_state state;
36 enum co_context_role role;
37 gboolean default_profile;
42 enum co_context_type type;
43 enum co_context_d_comp d_comp;
44 enum co_context_h_comp h_comp;
45 enum co_context_tech tech_pref;
50 enum co_context_auth auth;
52 union tcore_ip4_type ip_v4;
53 union tcore_ip4_type gateway_v4;
54 union tcore_ip4_type dns_primary_v4;
55 union tcore_ip4_type dns_secondary_v4;
57 /*IPv6 will be supported*/
61 char* dns_secondary_v6;
63 pcscf_addr *pcscf_ipv4;
64 pcscf_addr *pcscf_ipv6;
71 /* Dedicated bearer information */
72 unsigned char dedicated_bearer_cnt;
73 struct dedicated_bearer_info dedicated_bearer[MAX_NUM_DEDICATED_BEARER];
76 static void _free_hook(CoreObject *o)
78 struct private_object_data *po = NULL;
80 po = tcore_object_ref_object(o);
83 tcore_object_link_object(o, NULL);
87 CoreObject *tcore_context_new(TcorePlugin *p, const char *name, TcoreHal *hal)
90 struct private_object_data *po = NULL;
95 o = tcore_object_new(p, name, hal);
99 po = calloc(1, sizeof(struct private_object_data));
101 tcore_object_free(o);
105 po->type = CONTEXT_TYPE_IP;
106 po->d_comp = CONTEXT_D_COMP_OFF;
107 po->h_comp = CONTEXT_H_COMP_OFF;
108 po->role = CONTEXT_ROLE_UNKNOWN;
109 po->auth = CONTEXT_AUTH_NONE;
110 po->tech_pref = CONTEXT_TECH_3GPP;
112 tcore_object_set_type(o, CORE_OBJECT_TYPE_PS_CONTEXT);
113 tcore_object_link_object(o, po);
114 tcore_object_set_free_hook(o, _free_hook);
119 void tcore_context_free(CoreObject *o)
121 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_PS_CONTEXT);
122 tcore_object_free(o);
125 TReturn tcore_context_set_state(CoreObject *o, enum co_context_state state)
127 struct private_object_data *po = NULL;
129 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
131 po = tcore_object_ref_object(o);
133 return TCORE_RETURN_EINVAL;
137 return TCORE_RETURN_SUCCESS;
140 enum co_context_state tcore_context_get_state(CoreObject *o)
142 struct private_object_data *po = NULL;
144 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
146 po = tcore_object_ref_object(o);
153 TReturn tcore_context_set_id(CoreObject *o, unsigned char id)
155 struct private_object_data *po = NULL;
157 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
159 po = tcore_object_ref_object(o);
161 return TCORE_RETURN_EINVAL;
165 return TCORE_RETURN_SUCCESS;
168 unsigned char tcore_context_get_id(CoreObject *o)
170 struct private_object_data *po = NULL;
172 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
174 po = tcore_object_ref_object(o);
181 TReturn tcore_context_set_apn(CoreObject *o, const char *apn)
183 struct private_object_data *po = NULL;
185 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
187 po = tcore_object_ref_object(o);
197 po->apn = g_strdup(apn);
200 return TCORE_RETURN_SUCCESS;
203 char *tcore_context_get_apn(CoreObject *o)
205 struct private_object_data *po = NULL;
207 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
209 po = tcore_object_ref_object(o);
216 return g_strdup(po->apn);
219 TReturn tcore_context_set_address(CoreObject *o, const char *addr)
221 struct private_object_data *po = NULL;
223 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
225 po = tcore_object_ref_object(o);
227 return TCORE_RETURN_EINVAL;
235 po->addr = g_strdup(addr);
238 return TCORE_RETURN_SUCCESS;
241 char *tcore_context_get_address(CoreObject *o)
243 struct private_object_data *po = NULL;
245 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
247 po = tcore_object_ref_object(o);
254 return g_strdup(po->addr);
257 TReturn tcore_context_set_role(CoreObject *o, enum co_context_role role)
259 struct private_object_data *po = NULL;
261 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
263 po = tcore_object_ref_object(o);
265 return TCORE_RETURN_EINVAL;
269 return TCORE_RETURN_SUCCESS;
272 enum co_context_role tcore_context_get_role(CoreObject *o)
274 struct private_object_data *po = NULL;
276 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
278 po = tcore_object_ref_object(o);
285 TReturn tcore_context_set_type(CoreObject *o, enum co_context_type type)
287 struct private_object_data *po = NULL;
289 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
291 po = tcore_object_ref_object(o);
293 return TCORE_RETURN_EINVAL;
297 return TCORE_RETURN_SUCCESS;
300 enum co_context_type tcore_context_get_type(CoreObject *o)
302 struct private_object_data *po = NULL;
304 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
306 po = tcore_object_ref_object(o);
313 TReturn tcore_context_set_data_compression(CoreObject *o, enum co_context_d_comp comp)
315 struct private_object_data *po = NULL;
317 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
319 po = tcore_object_ref_object(o);
321 return TCORE_RETURN_EINVAL;
325 return TCORE_RETURN_SUCCESS;
328 enum co_context_d_comp tcore_context_get_data_compression(CoreObject *o)
330 struct private_object_data *po = NULL;
332 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
334 po = tcore_object_ref_object(o);
341 TReturn tcore_context_set_header_compression(CoreObject *o, enum co_context_h_comp comp)
343 struct private_object_data *po = NULL;
345 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
347 po = tcore_object_ref_object(o);
349 return TCORE_RETURN_EINVAL;
353 return TCORE_RETURN_SUCCESS;
356 enum co_context_h_comp tcore_context_get_header_compression(CoreObject *o)
358 struct private_object_data *po = NULL;
360 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
362 po = tcore_object_ref_object(o);
369 TReturn tcore_context_set_tech_preference(CoreObject *o, enum co_context_tech tech)
371 struct private_object_data *po = NULL;
373 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
375 po = tcore_object_ref_object(o);
377 return TCORE_RETURN_EINVAL;
379 po->tech_pref = tech;
381 return TCORE_RETURN_SUCCESS;
384 enum co_context_tech tcore_context_get_tech_preference(CoreObject *o)
386 struct private_object_data *po = NULL;
388 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
390 po = tcore_object_ref_object(o);
392 return CONTEXT_TECH_INVALID;
394 return po->tech_pref;
397 TReturn tcore_context_set_username(CoreObject *o, const char *username)
399 struct private_object_data *po = NULL;
401 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
403 po = tcore_object_ref_object(o);
405 return TCORE_RETURN_EINVAL;
413 po->username = g_strdup(username);
416 return TCORE_RETURN_SUCCESS;
419 char *tcore_context_get_username(CoreObject *o)
421 struct private_object_data *po = NULL;
423 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
425 po = tcore_object_ref_object(o);
432 return g_strdup(po->username);
435 TReturn tcore_context_set_password(CoreObject *o, const char *password)
437 struct private_object_data *po = NULL;
439 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
441 po = tcore_object_ref_object(o);
443 return TCORE_RETURN_EINVAL;
451 po->password = g_strdup(password);
454 return TCORE_RETURN_SUCCESS;
457 char *tcore_context_get_password(CoreObject *o)
459 struct private_object_data *po = NULL;
461 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
463 po = tcore_object_ref_object(o);
470 return g_strdup(po->password);
473 TReturn tcore_context_set_dns1(CoreObject *o, const char *dns)
475 struct private_object_data *po = NULL;
477 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
479 po = tcore_object_ref_object(o);
481 return TCORE_RETURN_EINVAL;
489 po->dns1 = g_strdup(dns);
492 return TCORE_RETURN_SUCCESS;
495 TReturn tcore_context_set_ipv6_dns1(CoreObject *o, const char *dns)
497 struct private_object_data *po = NULL;
499 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
501 po = tcore_object_ref_object(o);
503 return TCORE_RETURN_EINVAL;
505 if (po->dns_primary_v6) {
506 free(po->dns_primary_v6);
507 po->dns_primary_v6 = NULL;
511 po->dns_primary_v6 = g_strdup(dns);
514 return TCORE_RETURN_SUCCESS;
517 char *tcore_context_get_dns1(CoreObject *o)
519 struct private_object_data *po = NULL;
521 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
523 po = tcore_object_ref_object(o);
530 return g_strdup(po->dns1);
533 TReturn tcore_context_set_dns2(CoreObject *o, const char *dns)
535 struct private_object_data *po = NULL;
537 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
539 po = tcore_object_ref_object(o);
541 return TCORE_RETURN_EINVAL;
549 po->dns2 = g_strdup(dns);
552 return TCORE_RETURN_SUCCESS;
555 TReturn tcore_context_set_ipv6_dns2(CoreObject *o, const char *dns)
557 struct private_object_data *po = NULL;
559 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
561 po = tcore_object_ref_object(o);
563 return TCORE_RETURN_EINVAL;
565 if (po->dns_secondary_v6) {
566 free(po->dns_secondary_v6);
567 po->dns_secondary_v6 = NULL;
571 po->dns_secondary_v6 = g_strdup(dns);
574 return TCORE_RETURN_SUCCESS;
577 char *tcore_context_get_dns2(CoreObject *o)
579 struct private_object_data *po = NULL;
581 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
583 po = tcore_object_ref_object(o);
590 return g_strdup(po->dns2);
593 TReturn tcore_context_set_auth(CoreObject *o, enum co_context_auth auth)
595 struct private_object_data *po = NULL;
597 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
599 po = tcore_object_ref_object(o);
601 return TCORE_RETURN_EINVAL;
605 return TCORE_RETURN_SUCCESS;
608 enum co_context_auth tcore_context_get_auth(CoreObject *o)
610 struct private_object_data *po = NULL;
612 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
614 po = tcore_object_ref_object(o);
621 TReturn tcore_context_set_proxy(CoreObject *o, const char *proxy)
623 struct private_object_data *po = NULL;
625 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
627 po = tcore_object_ref_object(o);
637 po->proxy = g_strdup(proxy);
640 return TCORE_RETURN_SUCCESS;
643 char *tcore_context_get_proxy(CoreObject *o)
645 struct private_object_data *po = NULL;
647 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
649 po = tcore_object_ref_object(o);
656 return g_strdup(po->proxy);
659 TReturn tcore_context_set_mmsurl(CoreObject *o, const char *mmsurl)
661 struct private_object_data *po = NULL;
663 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
665 po = tcore_object_ref_object(o);
675 po->mmsurl = g_strdup(mmsurl);
678 return TCORE_RETURN_SUCCESS;
681 char *tcore_context_get_mmsurl(CoreObject *o)
683 struct private_object_data *po = NULL;
685 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
687 po = tcore_object_ref_object(o);
694 return g_strdup(po->mmsurl);
697 TReturn tcore_context_set_profile_name(CoreObject *o, const char *profile_name)
699 struct private_object_data *po = NULL;
701 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
703 po = tcore_object_ref_object(o);
707 if (po->profile_name) {
708 free(po->profile_name);
709 po->profile_name = NULL;
713 po->profile_name = g_strdup(profile_name);
716 return TCORE_RETURN_SUCCESS;
719 char *tcore_context_get_profile_name(CoreObject *o)
721 struct private_object_data *po = NULL;
723 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
725 po = tcore_object_ref_object(o);
729 if (!po->profile_name)
732 return g_strdup(po->profile_name);
735 TReturn tcore_context_set_default_profile(CoreObject *o, gboolean default_conn)
737 struct private_object_data *po = NULL;
739 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
741 po = tcore_object_ref_object(o);
743 return TCORE_RETURN_EINVAL;
745 po->default_profile = default_conn;
747 return TCORE_RETURN_SUCCESS;
750 gboolean tcore_context_get_default_profile(CoreObject *o)
752 struct private_object_data *po = NULL;
754 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
756 po = tcore_object_ref_object(o);
760 return po->default_profile;
763 TReturn tcore_context_set_devinfo(CoreObject *o, struct tnoti_ps_pdp_ipconfiguration *devinfo)
765 struct private_object_data *po = NULL;
767 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
769 po = tcore_object_ref_object(o);
771 return TCORE_RETURN_EINVAL;
773 return TCORE_RETURN_EINVAL;
775 /* Free context resource if it was already allocated */
776 tcore_context_reset_devinfo(o);
778 po->ip_v6 = g_strdup((gchar *)devinfo->ipv6_address);
779 po->dns_primary_v6 = g_strdup((gchar *)devinfo->ipv6_primary_dns);
780 po->dns_secondary_v6 = g_strdup((gchar *)devinfo->ipv6_secondary_dns);
781 po->gateway_v6 = g_strdup((gchar *)devinfo->ipv6_gateway);
782 memcpy(&(po->ip_v4), devinfo->ip_address, sizeof(union tcore_ip4_type));
783 memcpy(&(po->dns_primary_v4), devinfo->primary_dns, sizeof(union tcore_ip4_type));
784 memcpy(&(po->dns_secondary_v4), devinfo->secondary_dns, sizeof(union tcore_ip4_type));
785 memcpy(&(po->gateway_v4), devinfo->gateway, sizeof(union tcore_ip4_type));
786 memcpy(po->devname, devinfo->devname, sizeof(char) * 16);
788 po->pcscf_ipv4 = g_malloc0(sizeof(pcscf_addr));
789 po->pcscf_ipv4->count = devinfo->pcscf_ipv4_count;
790 if (po->pcscf_ipv4->count > 0) {
792 po->pcscf_ipv4->addr = g_malloc0(sizeof(char *) * po->pcscf_ipv4->count);
793 for (i = 0; i < po->pcscf_ipv4->count; i++) {
794 po->pcscf_ipv4->addr[i] = g_strdup(devinfo->pcscf_ipv4[i]);
798 po->pcscf_ipv6 = g_malloc0(sizeof(pcscf_addr));
799 po->pcscf_ipv6->count = devinfo->pcscf_ipv6_count;
800 if (po->pcscf_ipv6->count > 0) {
802 po->pcscf_ipv6->addr = g_malloc0(sizeof(char *) * po->pcscf_ipv6->count);
803 for (i = 0; i < po->pcscf_ipv6->count; i++) {
804 po->pcscf_ipv6->addr[i] = g_strdup(devinfo->pcscf_ipv6[i]);
808 return TCORE_RETURN_SUCCESS;
811 TReturn tcore_context_reset_devinfo(CoreObject *o)
813 struct private_object_data *po = NULL;
816 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
818 po = tcore_object_ref_object(o);
820 return TCORE_RETURN_EINVAL;
822 if(po->ip_v6) g_free(po->ip_v6);
825 if(po->dns_primary_v6) g_free(po->dns_primary_v6);
826 po->dns_primary_v6 = NULL;
828 if(po->dns_secondary_v6) g_free(po->dns_secondary_v6);
829 po->dns_secondary_v6 = NULL;
831 if(po->gateway_v6) g_free(po->gateway_v6);
832 po->gateway_v6 = NULL;
834 if (po->pcscf_ipv4) {
835 for (i = 0; i < po->pcscf_ipv4->count; i++)
836 g_free(po->pcscf_ipv4->addr[i]);
837 g_free(po->pcscf_ipv4);
838 po->pcscf_ipv4 = NULL;
841 if (po->pcscf_ipv6) {
842 for (i = 0; i < po->pcscf_ipv6->count; i++)
843 g_free(po->pcscf_ipv6->addr[i]);
844 g_free(po->pcscf_ipv6);
845 po->pcscf_ipv6 = NULL;
848 memset(&(po->ip_v4), 0, sizeof(union tcore_ip4_type));
849 memset(&(po->dns_primary_v4), 0, sizeof(union tcore_ip4_type));
850 memset(&(po->dns_secondary_v4), 0, sizeof(union tcore_ip4_type));
851 memset(&(po->gateway_v4), 0, sizeof(union tcore_ip4_type));
852 memset(po->devname, 0, sizeof(char) * 16);
854 return TCORE_RETURN_SUCCESS;
857 void tcore_context_cp_service_info(CoreObject *dest, CoreObject *src)
859 struct private_object_data *d_po = NULL;
860 struct private_object_data *s_po = NULL;
862 CORE_OBJECT_CHECK(dest, CORE_OBJECT_TYPE_PS_CONTEXT);
863 CORE_OBJECT_CHECK(src, CORE_OBJECT_TYPE_PS_CONTEXT);
865 d_po = tcore_object_ref_object(dest);
866 s_po = tcore_object_ref_object(src);
868 d_po->state = s_po->state;
871 d_po->ip_v6 = g_strdup(s_po->ip_v6);
872 d_po->dns_primary_v6 = g_strdup(s_po->dns_primary_v6);
873 d_po->dns_secondary_v6 = g_strdup(s_po->dns_secondary_v6);
874 d_po->gateway_v6 = g_strdup(s_po->gateway_v6);
876 memcpy(&(d_po->ip_v4), &(s_po->ip_v4), sizeof(union tcore_ip4_type));
877 memcpy(&(d_po->dns_primary_v4), &(s_po->dns_primary_v4), sizeof(union tcore_ip4_type));
878 memcpy(&(d_po->dns_secondary_v4), &(s_po->dns_secondary_v4), sizeof(union tcore_ip4_type));
879 memcpy(&(d_po->gateway_v4), &(s_po->gateway_v4), sizeof(union tcore_ip4_type));
880 memcpy(d_po->devname, s_po->devname, sizeof(char) * 16);
883 char* tcore_context_get_ipv4_addr(CoreObject *o)
885 struct private_object_data *po = NULL;
887 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
889 po = tcore_object_ref_object(o);
893 return tcore_util_get_string_by_ip4type(po->ip_v4);
896 char* tcore_context_get_ipv4_dns1(CoreObject *o)
898 struct private_object_data *po = NULL;
900 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
902 po = tcore_object_ref_object(o);
906 return tcore_util_get_string_by_ip4type(po->dns_primary_v4);
909 char* tcore_context_get_ipv4_dns2(CoreObject *o)
911 struct private_object_data *po = NULL;
913 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
915 po = tcore_object_ref_object(o);
919 return tcore_util_get_string_by_ip4type(po->dns_secondary_v4);
922 char* tcore_context_get_ipv4_gw(CoreObject *o)
924 struct private_object_data *po = NULL;
926 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
928 po = tcore_object_ref_object(o);
932 return tcore_util_get_string_by_ip4type(po->gateway_v4);
935 char* tcore_context_get_ipv4_devname(CoreObject *o)
937 struct private_object_data *po = NULL;
939 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
941 po = tcore_object_ref_object(o);
945 if (po->devname[0] == 0)
948 return g_strdup(po->devname);
951 char* tcore_context_get_ipv6_addr(CoreObject *o)
953 struct private_object_data *po = NULL;
955 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
957 po = tcore_object_ref_object(o);
961 return g_strdup(po->ip_v6);
964 char* tcore_context_get_ipv6_dns1(CoreObject *o)
966 struct private_object_data *po = NULL;
968 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
970 po = tcore_object_ref_object(o);
974 return g_strdup(po->dns_primary_v6);
977 char* tcore_context_get_ipv6_dns2(CoreObject *o)
979 struct private_object_data *po = NULL;
981 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
983 po = tcore_object_ref_object(o);
987 return g_strdup(po->dns_secondary_v6);
990 char* tcore_context_get_ipv6_gw(CoreObject *o)
992 struct private_object_data *po = NULL;
994 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
996 po = tcore_object_ref_object(o);
1000 return g_strdup(po->gateway_v6);
1003 pcscf_addr *tcore_context_get_pcscf_ipv4_addr(CoreObject *o)
1005 struct private_object_data *po = NULL;
1006 pcscf_addr *pcscf_tmp;
1008 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
1010 po = tcore_object_ref_object(o);
1014 if (!po->pcscf_ipv4)
1017 pcscf_tmp = g_malloc0(sizeof(pcscf_addr));
1018 pcscf_tmp->count = po->pcscf_ipv4->count;
1019 if (pcscf_tmp->count > 0) {
1021 pcscf_tmp->addr = g_malloc0(sizeof(char *) * po->pcscf_ipv4->count);
1022 for (i = 0; i < po->pcscf_ipv4->count; i++) {
1023 pcscf_tmp->addr[i] = g_strdup(po->pcscf_ipv4->addr[i]);
1030 pcscf_addr *tcore_context_get_pcscf_ipv6_addr(CoreObject *o)
1032 struct private_object_data *po = NULL;
1033 pcscf_addr *pcscf_tmp;
1035 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
1037 po = tcore_object_ref_object(o);
1041 if (!po->pcscf_ipv6)
1044 pcscf_tmp = g_malloc0(sizeof(pcscf_addr));
1045 pcscf_tmp->count = po->pcscf_ipv6->count;
1046 if (pcscf_tmp->count > 0) {
1048 pcscf_tmp->addr = g_malloc0(sizeof(char *) * po->pcscf_ipv6->count);
1049 for (i = 0; i < po->pcscf_ipv6->count; i++) {
1050 pcscf_tmp->addr[i] = g_strdup(po->pcscf_ipv6->addr[i]);
1057 TReturn tcore_context_set_attach_apn(CoreObject *o, gboolean flag)
1059 struct private_object_data *po = NULL;
1061 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
1063 po = tcore_object_ref_object(o);
1065 return TCORE_RETURN_EINVAL;
1067 po->attach_apn = flag;
1069 return TCORE_RETURN_SUCCESS;
1072 gboolean tcore_context_get_attach_apn(CoreObject *o)
1074 struct private_object_data *po = NULL;
1076 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
1078 po = tcore_object_ref_object(o);
1082 return po->attach_apn;