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;
40 enum co_context_type type;
41 enum co_context_d_comp d_comp;
42 enum co_context_h_comp h_comp;
48 enum co_context_auth auth;
50 union tcore_ip4_type ip_v4;
51 union tcore_ip4_type gateway_v4;
52 union tcore_ip4_type dns_primary_v4;
53 union tcore_ip4_type dns_secondary_v4;
55 /*IPv6 will be supported*/
63 static void _free_hook(CoreObject *o)
65 struct private_object_data *po = NULL;
67 po = tcore_object_ref_object(o);
70 tcore_object_link_object(o, NULL);
74 CoreObject *tcore_context_new(TcorePlugin *p, const char *name, TcoreHal *hal)
77 struct private_object_data *po = NULL;
82 o = tcore_object_new(p, name, hal);
86 po = calloc(sizeof(struct private_object_data), 1);
92 po->type = CONTEXT_TYPE_IP;
93 po->d_comp = CONTEXT_D_COMP_OFF;
94 po->h_comp = CONTEXT_H_COMP_OFF;
95 po->role = CONTEXT_ROLE_UNKNOWN;
96 po->auth = CONTEXT_AUTH_NONE;
98 tcore_object_set_type(o, CORE_OBJECT_TYPE_PS_CONTEXT);
99 tcore_object_link_object(o, po);
100 tcore_object_set_free_hook(o, _free_hook);
105 void tcore_context_free(CoreObject *o)
107 struct private_object_data *po = NULL;
109 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_PS_CONTEXT);
111 po = tcore_object_ref_object(o);
116 tcore_object_link_object(o, NULL);
117 tcore_object_free(o);
120 TReturn tcore_context_set_state(CoreObject *o, enum co_context_state state)
122 struct private_object_data *po = NULL;
124 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
126 po = tcore_object_ref_object(o);
128 return TCORE_RETURN_EINVAL;
132 return TCORE_RETURN_SUCCESS;
135 enum co_context_state tcore_context_get_state(CoreObject *o)
137 struct private_object_data *po = NULL;
139 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
141 po = tcore_object_ref_object(o);
148 TReturn tcore_context_set_id(CoreObject *o, unsigned int id)
150 struct private_object_data *po = NULL;
152 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
154 po = tcore_object_ref_object(o);
156 return TCORE_RETURN_EINVAL;
160 return TCORE_RETURN_SUCCESS;
163 unsigned int tcore_context_get_id(CoreObject *o)
165 struct private_object_data *po = NULL;
167 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
169 po = tcore_object_ref_object(o);
176 TReturn tcore_context_set_apn(CoreObject *o, const char *apn)
178 struct private_object_data *po = NULL;
180 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
182 po = tcore_object_ref_object(o);
192 po->apn = g_strdup(apn);
195 return TCORE_RETURN_SUCCESS;
198 char *tcore_context_get_apn(CoreObject *o)
200 struct private_object_data *po = NULL;
202 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
204 po = tcore_object_ref_object(o);
211 return g_strdup(po->apn);
214 TReturn tcore_context_set_address(CoreObject *o, const char *addr)
216 struct private_object_data *po = NULL;
218 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
220 po = tcore_object_ref_object(o);
222 return TCORE_RETURN_EINVAL;
230 po->addr = g_strdup(addr);
233 return TCORE_RETURN_SUCCESS;
236 char *tcore_context_get_address(CoreObject *o)
238 struct private_object_data *po = NULL;
240 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
242 po = tcore_object_ref_object(o);
249 return g_strdup(po->addr);
252 TReturn tcore_context_set_role(CoreObject *o, enum co_context_role role)
254 struct private_object_data *po = NULL;
256 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
258 po = tcore_object_ref_object(o);
260 return TCORE_RETURN_EINVAL;
264 return TCORE_RETURN_SUCCESS;
267 enum co_context_role tcore_context_get_role(CoreObject *o)
269 struct private_object_data *po = NULL;
271 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
273 po = tcore_object_ref_object(o);
280 TReturn tcore_context_set_type(CoreObject *o, enum co_context_type type)
282 struct private_object_data *po = NULL;
284 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
286 po = tcore_object_ref_object(o);
288 return TCORE_RETURN_EINVAL;
292 return TCORE_RETURN_SUCCESS;
295 enum co_context_type tcore_context_get_type(CoreObject *o)
297 struct private_object_data *po = NULL;
299 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
301 po = tcore_object_ref_object(o);
308 TReturn tcore_context_set_data_compression(CoreObject *o, enum co_context_d_comp comp)
310 struct private_object_data *po = NULL;
312 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
314 po = tcore_object_ref_object(o);
316 return TCORE_RETURN_EINVAL;
320 return TCORE_RETURN_SUCCESS;
323 enum co_context_d_comp tcore_context_get_data_compression(CoreObject *o)
325 struct private_object_data *po = NULL;
327 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
329 po = tcore_object_ref_object(o);
336 TReturn tcore_context_set_header_compression(CoreObject *o, enum co_context_h_comp comp)
338 struct private_object_data *po = NULL;
340 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
342 po = tcore_object_ref_object(o);
344 return TCORE_RETURN_EINVAL;
348 return TCORE_RETURN_SUCCESS;
351 enum co_context_h_comp tcore_context_get_header_compression(CoreObject *o)
353 struct private_object_data *po = NULL;
355 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
357 po = tcore_object_ref_object(o);
364 TReturn tcore_context_set_username(CoreObject *o, const char *username)
366 struct private_object_data *po = NULL;
368 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
370 po = tcore_object_ref_object(o);
372 return TCORE_RETURN_EINVAL;
380 po->username = g_strdup(username);
383 return TCORE_RETURN_SUCCESS;
386 char *tcore_context_get_username(CoreObject *o)
388 struct private_object_data *po = NULL;
390 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
392 po = tcore_object_ref_object(o);
399 return g_strdup(po->username);
402 TReturn tcore_context_set_password(CoreObject *o, const char *password)
404 struct private_object_data *po = NULL;
406 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
408 po = tcore_object_ref_object(o);
410 return TCORE_RETURN_EINVAL;
418 po->password = g_strdup(password);
421 return TCORE_RETURN_SUCCESS;
424 char *tcore_context_get_password(CoreObject *o)
426 struct private_object_data *po = NULL;
428 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
430 po = tcore_object_ref_object(o);
437 return g_strdup(po->password);
440 TReturn tcore_context_set_dns1(CoreObject *o, const char *dns)
442 struct private_object_data *po = NULL;
444 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
446 po = tcore_object_ref_object(o);
448 return TCORE_RETURN_EINVAL;
456 po->dns1 = g_strdup(dns);
459 return TCORE_RETURN_SUCCESS;
462 char *tcore_context_get_dns1(CoreObject *o)
464 struct private_object_data *po = NULL;
466 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
468 po = tcore_object_ref_object(o);
475 return g_strdup(po->dns1);
478 TReturn tcore_context_set_dns2(CoreObject *o, const char *dns)
480 struct private_object_data *po = NULL;
482 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
484 po = tcore_object_ref_object(o);
486 return TCORE_RETURN_EINVAL;
494 po->dns2 = g_strdup(dns);
497 return TCORE_RETURN_SUCCESS;
500 char *tcore_context_get_dns2(CoreObject *o)
502 struct private_object_data *po = NULL;
504 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
506 po = tcore_object_ref_object(o);
513 return g_strdup(po->dns2);
516 TReturn tcore_context_set_auth(CoreObject *o, enum co_context_auth auth)
518 struct private_object_data *po = NULL;
520 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
522 po = tcore_object_ref_object(o);
524 return TCORE_RETURN_EINVAL;
528 return TCORE_RETURN_SUCCESS;
531 enum co_context_auth tcore_context_get_auth(CoreObject *o)
533 struct private_object_data *po = NULL;
535 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
537 po = tcore_object_ref_object(o);
544 TReturn tcore_context_set_proxy(CoreObject *o, const char *proxy)
546 struct private_object_data *po = NULL;
548 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
550 po = tcore_object_ref_object(o);
560 po->proxy = g_strdup(proxy);
563 return TCORE_RETURN_SUCCESS;
566 char *tcore_context_get_proxy(CoreObject *o)
568 struct private_object_data *po = NULL;
570 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
572 po = tcore_object_ref_object(o);
579 return g_strdup(po->proxy);
582 TReturn tcore_context_set_mmsurl(CoreObject *o, const char *mmsurl)
584 struct private_object_data *po = NULL;
586 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
588 po = tcore_object_ref_object(o);
598 po->mmsurl = g_strdup(mmsurl);
601 return TCORE_RETURN_SUCCESS;
604 char *tcore_context_get_mmsurl(CoreObject *o)
606 struct private_object_data *po = NULL;
608 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
610 po = tcore_object_ref_object(o);
617 return g_strdup(po->mmsurl);
620 TReturn tcore_context_set_profile_name(CoreObject *o, const char *profile_name)
622 struct private_object_data *po = NULL;
624 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
626 po = tcore_object_ref_object(o);
630 if (po->profile_name) {
631 free(po->profile_name);
632 po->profile_name = NULL;
636 po->profile_name = g_strdup(profile_name);
639 return TCORE_RETURN_SUCCESS;
642 char *tcore_context_get_profile_name(CoreObject *o)
644 struct private_object_data *po = NULL;
646 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
648 po = tcore_object_ref_object(o);
652 if (!po->profile_name)
655 return g_strdup(po->profile_name);
658 TReturn tcore_context_set_devinfo(CoreObject *o, struct tnoti_ps_pdp_ipconfiguration *devinfo)
660 struct private_object_data *po = NULL;
662 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
664 po = tcore_object_ref_object(o);
670 memcpy(&(po->ip_v4), devinfo->ip_address, sizeof(union tcore_ip4_type));
671 memcpy(&(po->dns_primary_v4), devinfo->primary_dns, sizeof(union tcore_ip4_type));
672 memcpy(&(po->dns_secondary_v4), devinfo->secondary_dns, sizeof(union tcore_ip4_type));
673 memcpy(&(po->gateway_v4), devinfo->gateway, sizeof(union tcore_ip4_type));
674 memcpy(po->devname, devinfo->devname, sizeof(char) * 16);
676 return TCORE_RETURN_SUCCESS;
679 TReturn tcore_context_reset_devinfo(CoreObject *o)
681 struct private_object_data *po = NULL;
683 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
685 po = tcore_object_ref_object(o);
689 memset(&(po->ip_v4), 0, sizeof(union tcore_ip4_type));
690 memset(&(po->dns_primary_v4), 0, sizeof(union tcore_ip4_type));
691 memset(&(po->dns_secondary_v4), 0, sizeof(union tcore_ip4_type));
692 memset(&(po->gateway_v4), 0, sizeof(union tcore_ip4_type));
693 memset(po->devname, 0, sizeof(char) * 16);
695 return TCORE_RETURN_SUCCESS;
698 void tcore_context_cp_service_info(CoreObject *dest, CoreObject *src)
700 struct private_object_data *d_po = NULL;
701 struct private_object_data *s_po = NULL;
703 CORE_OBJECT_CHECK(dest, CORE_OBJECT_TYPE_PS_CONTEXT);
704 CORE_OBJECT_CHECK(src, CORE_OBJECT_TYPE_PS_CONTEXT);
706 d_po = tcore_object_ref_object(dest);
707 s_po = tcore_object_ref_object(src);
709 d_po->state = s_po->state;
711 memcpy(&(d_po->ip_v4), &(s_po->ip_v4), sizeof(union tcore_ip4_type));
712 memcpy(&(d_po->dns_primary_v4), &(s_po->dns_primary_v4), sizeof(union tcore_ip4_type));
713 memcpy(&(d_po->dns_secondary_v4), &(s_po->dns_secondary_v4), sizeof(union tcore_ip4_type));
714 memcpy(&(d_po->gateway_v4), &(s_po->gateway_v4), sizeof(union tcore_ip4_type));
715 memcpy(d_po->devname, s_po->devname, sizeof(char) * 16);
720 char* tcore_context_get_ipv4_addr(CoreObject *o)
722 struct private_object_data *po = NULL;
724 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
726 po = tcore_object_ref_object(o);
730 return tcore_util_get_string_by_ip4type(po->ip_v4);
733 char* tcore_context_get_ipv4_dns1(CoreObject *o)
735 struct private_object_data *po = NULL;
737 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
739 po = tcore_object_ref_object(o);
743 return tcore_util_get_string_by_ip4type(po->dns_primary_v4);
746 char* tcore_context_get_ipv4_dns2(CoreObject *o)
748 struct private_object_data *po = NULL;
750 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
752 po = tcore_object_ref_object(o);
756 return tcore_util_get_string_by_ip4type(po->dns_secondary_v4);
759 char* tcore_context_get_ipv4_gw(CoreObject *o)
761 struct private_object_data *po = NULL;
763 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
765 po = tcore_object_ref_object(o);
769 return tcore_util_get_string_by_ip4type(po->gateway_v4);
772 char* tcore_context_get_ipv4_devname(CoreObject *o)
774 struct private_object_data *po = NULL;
776 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
778 po = tcore_object_ref_object(o);
782 if (po->devname[0] == 0)
785 return g_strdup(po->devname);