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 CoreObject *tcore_context_clone(TcorePlugin *p, const char *name, TcoreHal *hal)
107 CoreObject *o = NULL;
112 o = tcore_object_clone_template_object(p, name, CORE_OBJECT_TYPE_PS_CONTEXT);
116 tcore_object_set_hal(o, hal);
121 void tcore_context_free(CoreObject *o)
123 struct private_object_data *po = NULL;
125 CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_PS_CONTEXT);
127 po = tcore_object_ref_object(o);
132 tcore_object_link_object(o, NULL);
133 tcore_object_free(o);
136 TReturn tcore_context_set_state(CoreObject *o, enum co_context_state state)
138 struct private_object_data *po = NULL;
140 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
142 po = tcore_object_ref_object(o);
144 return TCORE_RETURN_EINVAL;
148 return TCORE_RETURN_SUCCESS;
151 enum co_context_state tcore_context_get_state(CoreObject *o)
153 struct private_object_data *po = NULL;
155 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
157 po = tcore_object_ref_object(o);
164 TReturn tcore_context_set_id(CoreObject *o, unsigned int id)
166 struct private_object_data *po = NULL;
168 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
170 po = tcore_object_ref_object(o);
172 return TCORE_RETURN_EINVAL;
176 return TCORE_RETURN_SUCCESS;
179 unsigned int tcore_context_get_id(CoreObject *o)
181 struct private_object_data *po = NULL;
183 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
185 po = tcore_object_ref_object(o);
192 TReturn tcore_context_set_apn(CoreObject *o, const char *apn)
194 struct private_object_data *po = NULL;
196 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
198 po = tcore_object_ref_object(o);
208 po->apn = g_strdup(apn);
211 return TCORE_RETURN_SUCCESS;
214 char *tcore_context_get_apn(CoreObject *o)
216 struct private_object_data *po = NULL;
218 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
220 po = tcore_object_ref_object(o);
227 return g_strdup(po->apn);
230 TReturn tcore_context_set_address(CoreObject *o, const char *addr)
232 struct private_object_data *po = NULL;
234 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
236 po = tcore_object_ref_object(o);
238 return TCORE_RETURN_EINVAL;
246 po->addr = g_strdup(addr);
249 return TCORE_RETURN_SUCCESS;
252 char *tcore_context_get_address(CoreObject *o)
254 struct private_object_data *po = NULL;
256 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
258 po = tcore_object_ref_object(o);
265 return g_strdup(po->addr);
268 TReturn tcore_context_set_role(CoreObject *o, enum co_context_role role)
270 struct private_object_data *po = NULL;
272 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
274 po = tcore_object_ref_object(o);
276 return TCORE_RETURN_EINVAL;
280 return TCORE_RETURN_SUCCESS;
283 enum co_context_role tcore_context_get_role(CoreObject *o)
285 struct private_object_data *po = NULL;
287 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
289 po = tcore_object_ref_object(o);
296 TReturn tcore_context_set_type(CoreObject *o, enum co_context_type type)
298 struct private_object_data *po = NULL;
300 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
302 po = tcore_object_ref_object(o);
304 return TCORE_RETURN_EINVAL;
308 return TCORE_RETURN_SUCCESS;
311 enum co_context_type tcore_context_get_type(CoreObject *o)
313 struct private_object_data *po = NULL;
315 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
317 po = tcore_object_ref_object(o);
324 TReturn tcore_context_set_data_compression(CoreObject *o, enum co_context_d_comp comp)
326 struct private_object_data *po = NULL;
328 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
330 po = tcore_object_ref_object(o);
332 return TCORE_RETURN_EINVAL;
336 return TCORE_RETURN_SUCCESS;
339 enum co_context_d_comp tcore_context_get_data_compression(CoreObject *o)
341 struct private_object_data *po = NULL;
343 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
345 po = tcore_object_ref_object(o);
352 TReturn tcore_context_set_header_compression(CoreObject *o, enum co_context_h_comp comp)
354 struct private_object_data *po = NULL;
356 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
358 po = tcore_object_ref_object(o);
360 return TCORE_RETURN_EINVAL;
364 return TCORE_RETURN_SUCCESS;
367 enum co_context_h_comp tcore_context_get_header_compression(CoreObject *o)
369 struct private_object_data *po = NULL;
371 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
373 po = tcore_object_ref_object(o);
380 TReturn tcore_context_set_username(CoreObject *o, const char *username)
382 struct private_object_data *po = NULL;
384 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
386 po = tcore_object_ref_object(o);
388 return TCORE_RETURN_EINVAL;
396 po->username = g_strdup(username);
399 return TCORE_RETURN_SUCCESS;
402 char *tcore_context_get_username(CoreObject *o)
404 struct private_object_data *po = NULL;
406 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
408 po = tcore_object_ref_object(o);
415 return g_strdup(po->username);
418 TReturn tcore_context_set_password(CoreObject *o, const char *password)
420 struct private_object_data *po = NULL;
422 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
424 po = tcore_object_ref_object(o);
426 return TCORE_RETURN_EINVAL;
434 po->password = g_strdup(password);
437 return TCORE_RETURN_SUCCESS;
440 char *tcore_context_get_password(CoreObject *o)
442 struct private_object_data *po = NULL;
444 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
446 po = tcore_object_ref_object(o);
453 return g_strdup(po->password);
456 TReturn tcore_context_set_dns1(CoreObject *o, const char *dns)
458 struct private_object_data *po = NULL;
460 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
462 po = tcore_object_ref_object(o);
464 return TCORE_RETURN_EINVAL;
472 po->dns1 = g_strdup(dns);
475 return TCORE_RETURN_SUCCESS;
478 char *tcore_context_get_dns1(CoreObject *o)
480 struct private_object_data *po = NULL;
482 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
484 po = tcore_object_ref_object(o);
491 return g_strdup(po->dns1);
494 TReturn tcore_context_set_dns2(CoreObject *o, const char *dns)
496 struct private_object_data *po = NULL;
498 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
500 po = tcore_object_ref_object(o);
502 return TCORE_RETURN_EINVAL;
510 po->dns2 = g_strdup(dns);
513 return TCORE_RETURN_SUCCESS;
516 char *tcore_context_get_dns2(CoreObject *o)
518 struct private_object_data *po = NULL;
520 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
522 po = tcore_object_ref_object(o);
529 return g_strdup(po->dns2);
532 TReturn tcore_context_set_auth(CoreObject *o, enum co_context_auth auth)
534 struct private_object_data *po = NULL;
536 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
538 po = tcore_object_ref_object(o);
540 return TCORE_RETURN_EINVAL;
544 return TCORE_RETURN_SUCCESS;
547 enum co_context_auth tcore_context_get_auth(CoreObject *o)
549 struct private_object_data *po = NULL;
551 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
553 po = tcore_object_ref_object(o);
560 TReturn tcore_context_set_proxy(CoreObject *o, const char *proxy)
562 struct private_object_data *po = NULL;
564 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
566 po = tcore_object_ref_object(o);
576 po->proxy = g_strdup(proxy);
579 return TCORE_RETURN_SUCCESS;
582 char *tcore_context_get_proxy(CoreObject *o)
584 struct private_object_data *po = NULL;
586 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
588 po = tcore_object_ref_object(o);
595 return g_strdup(po->proxy);
598 TReturn tcore_context_set_mmsurl(CoreObject *o, const char *mmsurl)
600 struct private_object_data *po = NULL;
602 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
604 po = tcore_object_ref_object(o);
614 po->mmsurl = g_strdup(mmsurl);
617 return TCORE_RETURN_SUCCESS;
620 char *tcore_context_get_mmsurl(CoreObject *o)
622 struct private_object_data *po = NULL;
624 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
626 po = tcore_object_ref_object(o);
633 return g_strdup(po->mmsurl);
636 TReturn tcore_context_set_profile_name(CoreObject *o, const char *profile_name)
638 struct private_object_data *po = NULL;
640 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
642 po = tcore_object_ref_object(o);
646 if (po->profile_name) {
647 free(po->profile_name);
648 po->profile_name = NULL;
652 po->profile_name = g_strdup(profile_name);
655 return TCORE_RETURN_SUCCESS;
658 char *tcore_context_get_profile_name(CoreObject *o)
660 struct private_object_data *po = NULL;
662 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
664 po = tcore_object_ref_object(o);
668 if (!po->profile_name)
671 return g_strdup(po->profile_name);
674 TReturn tcore_context_set_devinfo(CoreObject *o, struct tnoti_ps_pdp_ipconfiguration *devinfo)
676 struct private_object_data *po = NULL;
678 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
680 po = tcore_object_ref_object(o);
686 memcpy(&(po->ip_v4), devinfo->ip_address, sizeof(union tcore_ip4_type));
687 memcpy(&(po->dns_primary_v4), devinfo->primary_dns, sizeof(union tcore_ip4_type));
688 memcpy(&(po->dns_secondary_v4), devinfo->secondary_dns, sizeof(union tcore_ip4_type));
689 memcpy(&(po->gateway_v4), devinfo->gateway, sizeof(union tcore_ip4_type));
690 memcpy(po->devname, devinfo->devname, sizeof(char) * 16);
692 return TCORE_RETURN_SUCCESS;
695 TReturn tcore_context_reset_devinfo(CoreObject *o)
697 struct private_object_data *po = NULL;
699 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
701 po = tcore_object_ref_object(o);
705 memset(&(po->ip_v4), 0, sizeof(union tcore_ip4_type));
706 memset(&(po->dns_primary_v4), 0, sizeof(union tcore_ip4_type));
707 memset(&(po->dns_secondary_v4), 0, sizeof(union tcore_ip4_type));
708 memset(&(po->gateway_v4), 0, sizeof(union tcore_ip4_type));
709 memset(po->devname, 0, sizeof(char) * 16);
711 return TCORE_RETURN_SUCCESS;
714 void tcore_context_cp_service_info(CoreObject *dest, CoreObject *src)
716 struct private_object_data *d_po = NULL;
717 struct private_object_data *s_po = NULL;
719 CORE_OBJECT_CHECK(dest, CORE_OBJECT_TYPE_PS_CONTEXT);
720 CORE_OBJECT_CHECK(src, CORE_OBJECT_TYPE_PS_CONTEXT);
722 d_po = tcore_object_ref_object(dest);
723 s_po = tcore_object_ref_object(src);
725 d_po->state = s_po->state;
727 memcpy(&(d_po->ip_v4), &(s_po->ip_v4), sizeof(union tcore_ip4_type));
728 memcpy(&(d_po->dns_primary_v4), &(s_po->dns_primary_v4), sizeof(union tcore_ip4_type));
729 memcpy(&(d_po->dns_secondary_v4), &(s_po->dns_secondary_v4), sizeof(union tcore_ip4_type));
730 memcpy(&(d_po->gateway_v4), &(s_po->gateway_v4), sizeof(union tcore_ip4_type));
731 memcpy(d_po->devname, s_po->devname, sizeof(char) * 16);
736 char* tcore_context_get_ipv4_addr(CoreObject *o)
738 struct private_object_data *po = NULL;
740 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
742 po = tcore_object_ref_object(o);
746 return tcore_util_get_string_by_ip4type(po->ip_v4);
749 char* tcore_context_get_ipv4_dns1(CoreObject *o)
751 struct private_object_data *po = NULL;
753 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
755 po = tcore_object_ref_object(o);
759 return tcore_util_get_string_by_ip4type(po->dns_primary_v4);
762 char* tcore_context_get_ipv4_dns2(CoreObject *o)
764 struct private_object_data *po = NULL;
766 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
768 po = tcore_object_ref_object(o);
772 return tcore_util_get_string_by_ip4type(po->dns_secondary_v4);
775 char* tcore_context_get_ipv4_gw(CoreObject *o)
777 struct private_object_data *po = NULL;
779 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
781 po = tcore_object_ref_object(o);
785 return tcore_util_get_string_by_ip4type(po->gateway_v4);
788 char* tcore_context_get_ipv4_devname(CoreObject *o)
790 struct private_object_data *po = NULL;
792 CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
794 po = tcore_object_ref_object(o);
798 if (po->devname[0] == 0)
801 return g_strdup(po->devname);