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 struct dedicated_bearer_info dedicated_bearer;
75 static void _free_hook(CoreObject *o)
77 struct private_object_data *po = NULL;
79 po = tcore_object_ref_object(o);
82 tcore_object_link_object(o, NULL);
86 CoreObject *tcore_context_new(TcorePlugin *p, const char *name, TcoreHal *hal)
89 struct private_object_data *po = NULL;
94 o = tcore_object_new(p, name, hal);
98 po = calloc(1, sizeof(struct private_object_data));
100 tcore_object_free(o);
104 po->type = CONTEXT_TYPE_IP;
105 po->d_comp = CONTEXT_D_COMP_OFF;
106 po->h_comp = CONTEXT_H_COMP_OFF;
107 po->role = CONTEXT_ROLE_UNKNOWN;
108 po->auth = CONTEXT_AUTH_NONE;
109 po->tech_pref = CONTEXT_TECH_3GPP;
111 tcore_object_set_type(o, CORE_OBJECT_TYPE_PS_CONTEXT);
112 tcore_object_link_object(o, po);
113 tcore_object_set_free_hook(o, _free_hook);
118 void tcore_context_free(CoreObject *o)
120 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_PS_CONTEXT);
121 tcore_object_free(o);
124 TReturn tcore_context_set_state(CoreObject *o, enum co_context_state state)
126 struct private_object_data *po = NULL;
128 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
130 po = tcore_object_ref_object(o);
132 return TCORE_RETURN_EINVAL;
136 return TCORE_RETURN_SUCCESS;
139 enum co_context_state tcore_context_get_state(CoreObject *o)
141 struct private_object_data *po = NULL;
143 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
145 po = tcore_object_ref_object(o);
152 TReturn tcore_context_set_id(CoreObject *o, unsigned char id)
154 struct private_object_data *po = NULL;
156 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
158 po = tcore_object_ref_object(o);
160 return TCORE_RETURN_EINVAL;
164 return TCORE_RETURN_SUCCESS;
167 unsigned char tcore_context_get_id(CoreObject *o)
169 struct private_object_data *po = NULL;
171 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
173 po = tcore_object_ref_object(o);
180 TReturn tcore_context_set_apn(CoreObject *o, const char *apn)
182 struct private_object_data *po = NULL;
184 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
186 po = tcore_object_ref_object(o);
196 po->apn = g_strdup(apn);
198 return TCORE_RETURN_SUCCESS;
201 char *tcore_context_get_apn(CoreObject *o)
203 struct private_object_data *po = NULL;
205 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
207 po = tcore_object_ref_object(o);
214 return g_strdup(po->apn);
217 TReturn tcore_context_set_address(CoreObject *o, const char *addr)
219 struct private_object_data *po = NULL;
221 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
223 po = tcore_object_ref_object(o);
225 return TCORE_RETURN_EINVAL;
233 po->addr = g_strdup(addr);
235 return TCORE_RETURN_SUCCESS;
238 char *tcore_context_get_address(CoreObject *o)
240 struct private_object_data *po = NULL;
242 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
244 po = tcore_object_ref_object(o);
251 return g_strdup(po->addr);
254 TReturn tcore_context_set_role(CoreObject *o, enum co_context_role role)
256 struct private_object_data *po = NULL;
258 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
260 po = tcore_object_ref_object(o);
262 return TCORE_RETURN_EINVAL;
266 return TCORE_RETURN_SUCCESS;
269 enum co_context_role tcore_context_get_role(CoreObject *o)
271 struct private_object_data *po = NULL;
273 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
275 po = tcore_object_ref_object(o);
282 TReturn tcore_context_set_type(CoreObject *o, enum co_context_type type)
284 struct private_object_data *po = NULL;
286 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
288 po = tcore_object_ref_object(o);
290 return TCORE_RETURN_EINVAL;
294 return TCORE_RETURN_SUCCESS;
297 enum co_context_type tcore_context_get_type(CoreObject *o)
299 struct private_object_data *po = NULL;
301 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
303 po = tcore_object_ref_object(o);
310 TReturn tcore_context_set_data_compression(CoreObject *o, enum co_context_d_comp comp)
312 struct private_object_data *po = NULL;
314 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
316 po = tcore_object_ref_object(o);
318 return TCORE_RETURN_EINVAL;
322 return TCORE_RETURN_SUCCESS;
325 enum co_context_d_comp tcore_context_get_data_compression(CoreObject *o)
327 struct private_object_data *po = NULL;
329 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
331 po = tcore_object_ref_object(o);
338 TReturn tcore_context_set_header_compression(CoreObject *o, enum co_context_h_comp comp)
340 struct private_object_data *po = NULL;
342 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
344 po = tcore_object_ref_object(o);
346 return TCORE_RETURN_EINVAL;
350 return TCORE_RETURN_SUCCESS;
353 enum co_context_h_comp tcore_context_get_header_compression(CoreObject *o)
355 struct private_object_data *po = NULL;
357 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
359 po = tcore_object_ref_object(o);
366 TReturn tcore_context_set_tech_preference(CoreObject *o, enum co_context_tech tech)
368 struct private_object_data *po = NULL;
370 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
372 po = tcore_object_ref_object(o);
374 return TCORE_RETURN_EINVAL;
376 po->tech_pref = tech;
378 return TCORE_RETURN_SUCCESS;
381 enum co_context_tech tcore_context_get_tech_preference(CoreObject *o)
383 struct private_object_data *po = NULL;
385 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
387 po = tcore_object_ref_object(o);
389 return CONTEXT_TECH_INVALID;
391 return po->tech_pref;
394 TReturn tcore_context_set_username(CoreObject *o, const char *username)
396 struct private_object_data *po = NULL;
398 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
400 po = tcore_object_ref_object(o);
402 return TCORE_RETURN_EINVAL;
410 po->username = g_strdup(username);
412 return TCORE_RETURN_SUCCESS;
415 char *tcore_context_get_username(CoreObject *o)
417 struct private_object_data *po = NULL;
419 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
421 po = tcore_object_ref_object(o);
428 return g_strdup(po->username);
431 TReturn tcore_context_set_password(CoreObject *o, const char *password)
433 struct private_object_data *po = NULL;
435 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
437 po = tcore_object_ref_object(o);
439 return TCORE_RETURN_EINVAL;
447 po->password = g_strdup(password);
449 return TCORE_RETURN_SUCCESS;
452 char *tcore_context_get_password(CoreObject *o)
454 struct private_object_data *po = NULL;
456 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
458 po = tcore_object_ref_object(o);
465 return g_strdup(po->password);
468 TReturn tcore_context_set_dns1(CoreObject *o, const char *dns)
470 struct private_object_data *po = NULL;
472 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
474 po = tcore_object_ref_object(o);
476 return TCORE_RETURN_EINVAL;
484 po->dns1 = g_strdup(dns);
486 return TCORE_RETURN_SUCCESS;
489 TReturn tcore_context_set_ipv6_dns1(CoreObject *o, const char *dns)
491 struct private_object_data *po = NULL;
493 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
495 po = tcore_object_ref_object(o);
497 return TCORE_RETURN_EINVAL;
499 if (po->dns_primary_v6) {
500 free(po->dns_primary_v6);
501 po->dns_primary_v6 = NULL;
505 po->dns_primary_v6 = g_strdup(dns);
507 return TCORE_RETURN_SUCCESS;
510 char *tcore_context_get_dns1(CoreObject *o)
512 struct private_object_data *po = NULL;
514 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
516 po = tcore_object_ref_object(o);
523 return g_strdup(po->dns1);
526 TReturn tcore_context_set_dns2(CoreObject *o, const char *dns)
528 struct private_object_data *po = NULL;
530 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
532 po = tcore_object_ref_object(o);
534 return TCORE_RETURN_EINVAL;
542 po->dns2 = g_strdup(dns);
544 return TCORE_RETURN_SUCCESS;
547 TReturn tcore_context_set_ipv6_dns2(CoreObject *o, const char *dns)
549 struct private_object_data *po = NULL;
551 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
553 po = tcore_object_ref_object(o);
555 return TCORE_RETURN_EINVAL;
557 if (po->dns_secondary_v6) {
558 free(po->dns_secondary_v6);
559 po->dns_secondary_v6 = NULL;
563 po->dns_secondary_v6 = g_strdup(dns);
565 return TCORE_RETURN_SUCCESS;
568 char *tcore_context_get_dns2(CoreObject *o)
570 struct private_object_data *po = NULL;
572 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
574 po = tcore_object_ref_object(o);
581 return g_strdup(po->dns2);
584 TReturn tcore_context_set_auth(CoreObject *o, enum co_context_auth auth)
586 struct private_object_data *po = NULL;
588 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
590 po = tcore_object_ref_object(o);
592 return TCORE_RETURN_EINVAL;
596 return TCORE_RETURN_SUCCESS;
599 enum co_context_auth tcore_context_get_auth(CoreObject *o)
601 struct private_object_data *po = NULL;
603 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
605 po = tcore_object_ref_object(o);
612 TReturn tcore_context_set_proxy(CoreObject *o, const char *proxy)
614 struct private_object_data *po = NULL;
616 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
618 po = tcore_object_ref_object(o);
628 po->proxy = g_strdup(proxy);
630 return TCORE_RETURN_SUCCESS;
633 char *tcore_context_get_proxy(CoreObject *o)
635 struct private_object_data *po = NULL;
637 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
639 po = tcore_object_ref_object(o);
646 return g_strdup(po->proxy);
649 TReturn tcore_context_set_mmsurl(CoreObject *o, const char *mmsurl)
651 struct private_object_data *po = NULL;
653 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
655 po = tcore_object_ref_object(o);
665 po->mmsurl = g_strdup(mmsurl);
667 return TCORE_RETURN_SUCCESS;
670 char *tcore_context_get_mmsurl(CoreObject *o)
672 struct private_object_data *po = NULL;
674 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
676 po = tcore_object_ref_object(o);
683 return g_strdup(po->mmsurl);
686 TReturn tcore_context_set_profile_name(CoreObject *o, const char *profile_name)
688 struct private_object_data *po = NULL;
690 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
692 po = tcore_object_ref_object(o);
696 if (po->profile_name) {
697 free(po->profile_name);
698 po->profile_name = NULL;
702 po->profile_name = g_strdup(profile_name);
704 return TCORE_RETURN_SUCCESS;
707 char *tcore_context_get_profile_name(CoreObject *o)
709 struct private_object_data *po = NULL;
711 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
713 po = tcore_object_ref_object(o);
717 if (!po->profile_name)
720 return g_strdup(po->profile_name);
723 TReturn tcore_context_set_default_profile(CoreObject *o, gboolean default_conn)
725 struct private_object_data *po = NULL;
727 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
729 po = tcore_object_ref_object(o);
731 return TCORE_RETURN_EINVAL;
733 po->default_profile = default_conn;
735 return TCORE_RETURN_SUCCESS;
738 gboolean tcore_context_get_default_profile(CoreObject *o)
740 struct private_object_data *po = NULL;
742 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
744 po = tcore_object_ref_object(o);
748 return po->default_profile;
751 TReturn tcore_context_set_devinfo(CoreObject *o, struct tnoti_ps_pdp_ipconfiguration *devinfo)
753 struct private_object_data *po = NULL;
755 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
757 po = tcore_object_ref_object(o);
760 return TCORE_RETURN_EINVAL;
762 /* Free context resource if it was already allocated */
763 tcore_context_reset_devinfo(o);
765 po->ip_v6 = g_strdup((gchar *)devinfo->ipv6_address);
766 po->dns_primary_v6 = g_strdup((gchar *)devinfo->ipv6_primary_dns);
767 po->dns_secondary_v6 = g_strdup((gchar *)devinfo->ipv6_secondary_dns);
768 po->gateway_v6 = g_strdup((gchar *)devinfo->ipv6_gateway);
769 memcpy(&(po->ip_v4), devinfo->ip_address, sizeof(union tcore_ip4_type));
770 memcpy(&(po->dns_primary_v4), devinfo->primary_dns, sizeof(union tcore_ip4_type));
771 memcpy(&(po->dns_secondary_v4), devinfo->secondary_dns, sizeof(union tcore_ip4_type));
772 memcpy(&(po->gateway_v4), devinfo->gateway, sizeof(union tcore_ip4_type));
773 memcpy(po->devname, devinfo->devname, sizeof(char) * 16);
775 po->pcscf_ipv4 = g_try_malloc0(sizeof(pcscf_addr));
776 if (po->pcscf_ipv4) {
777 po->pcscf_ipv4->count = devinfo->pcscf_ipv4_count;
778 if (po->pcscf_ipv4->count > 0) {
780 po->pcscf_ipv4->addr = g_try_malloc0(sizeof(char *) * po->pcscf_ipv4->count);
781 if ((po->pcscf_ipv4->addr) && (devinfo->pcscf_ipv4))
782 for (i = 0; i < po->pcscf_ipv4->count; i++)
783 po->pcscf_ipv4->addr[i] = g_strdup(devinfo->pcscf_ipv4[i]);
787 po->pcscf_ipv6 = g_try_malloc0(sizeof(pcscf_addr));
788 if (po->pcscf_ipv6) {
789 po->pcscf_ipv6->count = devinfo->pcscf_ipv6_count;
790 if (po->pcscf_ipv6->count > 0) {
792 po->pcscf_ipv6->addr = g_try_malloc0(sizeof(char *) * po->pcscf_ipv6->count);
793 if ((po->pcscf_ipv6->addr) && (devinfo->pcscf_ipv6))
794 for (i = 0; i < po->pcscf_ipv6->count; i++)
795 po->pcscf_ipv6->addr[i] = g_strdup(devinfo->pcscf_ipv6[i]);
799 return TCORE_RETURN_SUCCESS;
802 TReturn tcore_context_reset_devinfo(CoreObject *o)
804 struct private_object_data *po = NULL;
807 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
809 po = tcore_object_ref_object(o);
811 return TCORE_RETURN_EINVAL;
818 if (po->dns_primary_v6) {
819 g_free(po->dns_primary_v6);
820 po->dns_primary_v6 = NULL;
823 if (po->dns_secondary_v6) {
824 g_free(po->dns_secondary_v6);
825 po->dns_secondary_v6 = NULL;
828 if (po->gateway_v6) {
829 g_free(po->gateway_v6);
830 po->gateway_v6 = NULL;
833 if (po->pcscf_ipv4) {
834 for (i = 0; i < po->pcscf_ipv4->count; i++)
835 g_free(po->pcscf_ipv4->addr[i]);
836 g_free(po->pcscf_ipv4);
837 po->pcscf_ipv4 = NULL;
840 if (po->pcscf_ipv6) {
841 for (i = 0; i < po->pcscf_ipv6->count; i++)
842 g_free(po->pcscf_ipv6->addr[i]);
843 g_free(po->pcscf_ipv6);
844 po->pcscf_ipv6 = NULL;
847 memset(&(po->ip_v4), 0, sizeof(union tcore_ip4_type));
848 memset(&(po->dns_primary_v4), 0, sizeof(union tcore_ip4_type));
849 memset(&(po->dns_secondary_v4), 0, sizeof(union tcore_ip4_type));
850 memset(&(po->gateway_v4), 0, sizeof(union tcore_ip4_type));
851 memset(po->devname, 0, sizeof(char) * 16);
853 return TCORE_RETURN_SUCCESS;
856 TReturn tcore_context_set_bearer_info(CoreObject *o, struct tnoti_ps_dedicated_bearer_info *bearer_info)
858 struct private_object_data *po = NULL;
860 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
862 po = tcore_object_ref_object(o);
864 return TCORE_RETURN_EINVAL;
867 return TCORE_RETURN_EINVAL;
869 if (bearer_info->dedicated_bearer.num_dedicated_bearer > 0)
870 memcpy(&(po->dedicated_bearer), &(bearer_info->dedicated_bearer), sizeof(struct dedicated_bearer_info));
872 return TCORE_RETURN_SUCCESS;
875 TReturn tcore_context_get_bearer_info(CoreObject *o, struct dedicated_bearer_info *bearer_info)
877 struct private_object_data *po = NULL;
880 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
882 po = tcore_object_ref_object(o);
884 return TCORE_RETURN_EINVAL;
887 return TCORE_RETURN_EINVAL;
889 count = po->dedicated_bearer.num_dedicated_bearer;
890 if (count > MAX_NUM_DEDICATED_BEARER)
891 return TCORE_RETURN_EINVAL;
894 bearer_info->num_dedicated_bearer = count;
895 bearer_info->secondary_context_id = po->dedicated_bearer.secondary_context_id;
896 memcpy(bearer_info->qos, po->dedicated_bearer.qos, count*sizeof(struct qos_parameter));
899 return TCORE_RETURN_SUCCESS;
902 TReturn tcore_context_reset_bearer_info(CoreObject *o)
904 struct private_object_data *po = NULL;
906 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
908 po = tcore_object_ref_object(o);
910 return TCORE_RETURN_EINVAL;
912 if (po->dedicated_bearer.num_dedicated_bearer > 0)
913 memset(&(po->dedicated_bearer), 0, sizeof(struct dedicated_bearer_info));
915 return TCORE_RETURN_SUCCESS;
918 void tcore_context_cp_service_info(CoreObject *dest, CoreObject *src)
920 struct private_object_data *d_po = NULL;
921 struct private_object_data *s_po = NULL;
923 CORE_OBJECT_CHECK(dest, CORE_OBJECT_TYPE_PS_CONTEXT);
924 CORE_OBJECT_CHECK(src, CORE_OBJECT_TYPE_PS_CONTEXT);
926 d_po = tcore_object_ref_object(dest);
927 s_po = tcore_object_ref_object(src);
929 d_po->state = s_po->state;
932 d_po->ip_v6 = g_strdup(s_po->ip_v6);
933 d_po->dns_primary_v6 = g_strdup(s_po->dns_primary_v6);
934 d_po->dns_secondary_v6 = g_strdup(s_po->dns_secondary_v6);
935 d_po->gateway_v6 = g_strdup(s_po->gateway_v6);
937 memcpy(&(d_po->ip_v4), &(s_po->ip_v4), sizeof(union tcore_ip4_type));
938 memcpy(&(d_po->dns_primary_v4), &(s_po->dns_primary_v4), sizeof(union tcore_ip4_type));
939 memcpy(&(d_po->dns_secondary_v4), &(s_po->dns_secondary_v4), sizeof(union tcore_ip4_type));
940 memcpy(&(d_po->gateway_v4), &(s_po->gateway_v4), sizeof(union tcore_ip4_type));
941 memcpy(d_po->devname, s_po->devname, sizeof(char) * 16);
944 char *tcore_context_get_ipv4_addr(CoreObject *o)
946 struct private_object_data *po = NULL;
948 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
950 po = tcore_object_ref_object(o);
954 return tcore_util_get_string_by_ip4type(po->ip_v4);
957 char *tcore_context_get_ipv4_dns1(CoreObject *o)
959 struct private_object_data *po = NULL;
961 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
963 po = tcore_object_ref_object(o);
967 return tcore_util_get_string_by_ip4type(po->dns_primary_v4);
970 char *tcore_context_get_ipv4_dns2(CoreObject *o)
972 struct private_object_data *po = NULL;
974 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
976 po = tcore_object_ref_object(o);
980 return tcore_util_get_string_by_ip4type(po->dns_secondary_v4);
983 char *tcore_context_get_ipv4_gw(CoreObject *o)
985 struct private_object_data *po = NULL;
987 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
989 po = tcore_object_ref_object(o);
993 return tcore_util_get_string_by_ip4type(po->gateway_v4);
996 char *tcore_context_get_ipv4_devname(CoreObject *o)
998 struct private_object_data *po = NULL;
1000 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
1002 po = tcore_object_ref_object(o);
1006 if (po->devname[0] == 0)
1009 return g_strdup(po->devname);
1012 char *tcore_context_get_ipv6_addr(CoreObject *o)
1014 struct private_object_data *po = NULL;
1016 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
1018 po = tcore_object_ref_object(o);
1022 return g_strdup(po->ip_v6);
1025 char *tcore_context_get_ipv6_dns1(CoreObject *o)
1027 struct private_object_data *po = NULL;
1029 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
1031 po = tcore_object_ref_object(o);
1035 return g_strdup(po->dns_primary_v6);
1038 char *tcore_context_get_ipv6_dns2(CoreObject *o)
1040 struct private_object_data *po = NULL;
1042 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
1044 po = tcore_object_ref_object(o);
1048 return g_strdup(po->dns_secondary_v6);
1051 char *tcore_context_get_ipv6_gw(CoreObject *o)
1053 struct private_object_data *po = NULL;
1055 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
1057 po = tcore_object_ref_object(o);
1061 return g_strdup(po->gateway_v6);
1064 pcscf_addr *tcore_context_get_pcscf_ipv4_addr(CoreObject *o)
1066 struct private_object_data *po = NULL;
1067 pcscf_addr *pcscf_tmp;
1069 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
1071 po = tcore_object_ref_object(o);
1075 if (!po->pcscf_ipv4)
1078 pcscf_tmp = g_try_malloc0(sizeof(pcscf_addr));
1082 pcscf_tmp->count = po->pcscf_ipv4->count;
1083 if (pcscf_tmp->count > 0) {
1085 pcscf_tmp->addr = g_try_malloc0(sizeof(char *) * po->pcscf_ipv4->count);
1086 if (!pcscf_tmp->addr) {
1091 for (i = 0; i < po->pcscf_ipv4->count; i++)
1092 pcscf_tmp->addr[i] = g_strdup(po->pcscf_ipv4->addr[i]);
1098 pcscf_addr *tcore_context_get_pcscf_ipv6_addr(CoreObject *o)
1100 struct private_object_data *po = NULL;
1101 pcscf_addr *pcscf_tmp;
1103 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
1105 po = tcore_object_ref_object(o);
1109 if (!po->pcscf_ipv6)
1112 pcscf_tmp = g_try_malloc0(sizeof(pcscf_addr));
1116 pcscf_tmp->count = po->pcscf_ipv6->count;
1117 if (pcscf_tmp->count > 0) {
1119 pcscf_tmp->addr = g_try_malloc0(sizeof(char *) * po->pcscf_ipv6->count);
1120 if (!pcscf_tmp->addr) {
1125 for (i = 0; i < po->pcscf_ipv6->count; i++)
1126 pcscf_tmp->addr[i] = g_strdup(po->pcscf_ipv6->addr[i]);
1132 TReturn tcore_context_set_attach_apn(CoreObject *o, gboolean flag)
1134 struct private_object_data *po = NULL;
1136 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
1138 po = tcore_object_ref_object(o);
1140 return TCORE_RETURN_EINVAL;
1142 po->attach_apn = flag;
1144 return TCORE_RETURN_SUCCESS;
1147 gboolean tcore_context_get_attach_apn(CoreObject *o)
1149 struct private_object_data *po = NULL;
1151 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
1153 po = tcore_object_ref_object(o);
1157 return po->attach_apn;