4 * Copyright (c) 2013 Samsung Electronics Co. Ltd. All rights reserved.
5 * Copyright (c) 2013 Intel Corporation. All rights reserved.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
29 #include "co_context.h"
31 #define DEVNAME_LEN_MAX 16
34 TcoreContextState state;
36 TcoreContextRole role;
40 TcoreContextType type;
41 TcoreContextDComp d_comp;
42 TcoreContextHComp h_comp;
48 TcoreContextAuth auth;
51 TcoreIp4Type gateway_v4;
52 TcoreIp4Type dns_primary_v4;
53 TcoreIp4Type dns_secondary_v4;
55 /* IPv6 will be supported */
60 gchar devname[DEVNAME_LEN_MAX];
63 static void __context_set_ipv4_atoi(guchar *ip4, const gchar *str)
69 temp = tcore_strdup(str);
70 token = strtok(temp, ".");
71 while (token != NULL) {
72 ip4[index++] = atoi(token);
73 msg(" [%c]", ip4[index-1]);
74 token = strtok(NULL, ".");
79 static void __po_free_hook(CoreObject *co)
81 PrivateObject *po = NULL;
83 po = tcore_object_ref_object(co);
84 tcore_check_return(po != NULL);
88 tcore_free(po->username);
89 tcore_free(po->password);
92 tcore_free(po->proxy);
93 tcore_free(po->mmsurl);
94 tcore_free(po->profile_name);
97 tcore_object_link_object(co, NULL);
100 CoreObject *tcore_context_new(TcorePlugin *p, TcoreHal *hal)
102 CoreObject *co = NULL;
103 PrivateObject *po = NULL;
105 tcore_check_return_value_assert(p != NULL, NULL);
107 co = tcore_object_new(p, hal);
108 tcore_check_return_value_assert(co != NULL, NULL);
110 po = tcore_malloc0(sizeof(PrivateObject));
111 po->type = TCORE_CONTEXT_TYPE_IP;
112 po->d_comp = TCORE_CONTEXT_D_COMP_OFF;
113 po->h_comp = TCORE_CONTEXT_H_COMP_OFF;
114 po->role = TCORE_CONTEXT_ROLE_UNKNOWN;
115 po->auth = TCORE_CONTEXT_AUTH_NONE;
117 tcore_object_set_type(co, CORE_OBJECT_TYPE_PS_CONTEXT);
118 tcore_object_link_object(co, po);
119 tcore_object_set_free_hook(co, __po_free_hook);
124 void tcore_context_free(CoreObject *co)
126 CORE_OBJECT_CHECK(co, CORE_OBJECT_TYPE_PS_CONTEXT);
127 tcore_object_free(co);
130 gboolean tcore_context_set_state(CoreObject *co, TcoreContextState state)
132 PrivateObject *po = NULL;
134 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
136 dbg("Set State: [%s]",
137 ((state == TCORE_CONTEXT_STATE_ACTIVATED) ? "ACTIVATED"
138 : (state == TCORE_CONTEXT_STATE_ACTIVATING) ? "ACTIVATING"
139 : (state == TCORE_CONTEXT_STATE_DEACTIVATED) ? "DEACTIVATED"
142 po = tcore_object_ref_object(co);
143 tcore_check_return_value_assert(po != NULL, FALSE);
149 gboolean tcore_context_get_state(CoreObject *co, TcoreContextState *state)
151 PrivateObject *po = NULL;
153 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
155 po = tcore_object_ref_object(co);
156 tcore_check_return_value_assert(po != NULL, FALSE);
162 gboolean tcore_context_set_id(CoreObject *co, guint id)
164 PrivateObject *po = NULL;
166 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
168 po = tcore_object_ref_object(co);
169 tcore_check_return_value_assert(po != NULL, FALSE);
176 gboolean tcore_context_get_id(CoreObject *co, guint *id)
178 PrivateObject *po = NULL;
180 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
182 po = tcore_object_ref_object(co);
183 tcore_check_return_value_assert(po != NULL, FALSE);
189 gboolean tcore_context_set_apn(CoreObject *co, const gchar *apn)
191 PrivateObject *po = NULL;
193 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
195 po = tcore_object_ref_object(co);
196 tcore_check_return_value_assert(po != NULL, FALSE);
199 po->apn = tcore_strdup(apn);
203 gboolean tcore_context_get_apn(CoreObject *co, gchar **apn)
205 PrivateObject *po = NULL;
207 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
208 po = tcore_object_ref_object(co);
209 tcore_check_return_value_assert(po != NULL, FALSE);
210 *apn = tcore_strdup(po->apn);
214 gboolean tcore_context_set_role(CoreObject *co, TcoreContextRole role)
216 PrivateObject *po = NULL;
218 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
220 po = tcore_object_ref_object(co);
221 tcore_check_return_value_assert(po != NULL, FALSE);
227 gboolean tcore_context_get_role(CoreObject *co, TcoreContextRole *role)
229 PrivateObject *po = NULL;
231 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
233 po = tcore_object_ref_object(co);
234 tcore_check_return_value_assert(po != NULL, FALSE);
240 gboolean tcore_context_set_type(CoreObject *co, TcoreContextType type)
242 PrivateObject *po = NULL;
244 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
246 po = tcore_object_ref_object(co);
247 tcore_check_return_value_assert(po != NULL, FALSE);
253 gboolean tcore_context_get_type(CoreObject *co, TcoreContextType *type)
255 PrivateObject *po = NULL;
257 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
259 po = tcore_object_ref_object(co);
260 tcore_check_return_value_assert(po != NULL, FALSE);
266 gboolean tcore_context_set_data_compression(CoreObject *co, TcoreContextDComp comp)
268 PrivateObject *po = NULL;
270 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
272 po = tcore_object_ref_object(co);
273 tcore_check_return_value_assert(po != NULL, FALSE);
279 gboolean tcore_context_get_data_compression(CoreObject *co, TcoreContextDComp *comp)
281 PrivateObject *po = NULL;
283 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
285 po = tcore_object_ref_object(co);
286 tcore_check_return_value_assert(po != NULL, FALSE);
292 gboolean tcore_context_set_header_compression(CoreObject *co, TcoreContextHComp comp)
294 PrivateObject *po = NULL;
296 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
298 po = tcore_object_ref_object(co);
299 tcore_check_return_value_assert(po != NULL, FALSE);
305 gboolean tcore_context_get_header_compression(CoreObject *co, TcoreContextHComp *comp)
307 PrivateObject *po = NULL;
309 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
311 po = tcore_object_ref_object(co);
312 tcore_check_return_value_assert(po != NULL, FALSE);
318 gboolean tcore_context_set_username(CoreObject *co, const gchar *username)
320 PrivateObject *po = NULL;
322 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
324 po = tcore_object_ref_object(co);
325 tcore_check_return_value_assert(po != NULL, FALSE);
327 tcore_free(po->username);
328 po->username = tcore_strdup(username);
332 gboolean tcore_context_get_username(CoreObject *co, gchar **username)
334 PrivateObject *po = NULL;
336 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
338 po = tcore_object_ref_object(co);
339 tcore_check_return_value_assert(po != NULL, FALSE);
341 *username = tcore_strdup(po->username);
345 gboolean tcore_context_set_password(CoreObject *co, const gchar *password)
347 PrivateObject *po = NULL;
349 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
351 po = tcore_object_ref_object(co);
352 tcore_check_return_value_assert(po != NULL, FALSE);
354 tcore_free(po->password);
355 po->password = tcore_strdup(password);
359 gboolean tcore_context_get_password(CoreObject *co, gchar **password)
361 PrivateObject *po = NULL;
363 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
365 po = tcore_object_ref_object(co);
366 tcore_check_return_value_assert(po != NULL, FALSE);
368 *password = tcore_strdup(po->password);
372 gboolean tcore_context_set_auth(CoreObject *co, TcoreContextAuth auth)
374 PrivateObject *po = NULL;
376 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
378 po = tcore_object_ref_object(co);
379 tcore_check_return_value_assert(po != NULL, FALSE);
385 gboolean tcore_context_get_auth(CoreObject *co, TcoreContextAuth *auth)
387 PrivateObject *po = NULL;
389 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
391 po = tcore_object_ref_object(co);
392 tcore_check_return_value_assert(po != NULL, FALSE);
398 gboolean tcore_context_set_proxy(CoreObject *co, const gchar *proxy)
400 PrivateObject *po = NULL;
402 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
404 po = tcore_object_ref_object(co);
405 tcore_check_return_value_assert(po != NULL, FALSE);
407 tcore_free(po->proxy);
408 po->proxy = tcore_strdup(proxy);
412 gboolean tcore_context_get_proxy(CoreObject *co, gchar **proxy)
414 PrivateObject *po = NULL;
416 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
418 po = tcore_object_ref_object(co);
419 tcore_check_return_value_assert(po != NULL, FALSE);
421 *proxy = tcore_strdup(po->proxy);
425 gboolean tcore_context_set_mmsurl(CoreObject *co, const gchar *mmsurl)
427 PrivateObject *po = NULL;
429 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
431 po = tcore_object_ref_object(co);
432 tcore_check_return_value_assert(po != NULL, FALSE);
434 tcore_free(po->mmsurl);
435 po->mmsurl = tcore_strdup(mmsurl);
439 gboolean tcore_context_get_mmsurl(CoreObject *co, gchar **mmsurl)
441 PrivateObject *po = NULL;
443 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
445 po = tcore_object_ref_object(co);
446 tcore_check_return_value_assert(po != NULL, FALSE);
448 *mmsurl = tcore_strdup(po->mmsurl);
452 gboolean tcore_context_set_profile_name(CoreObject *co, const gchar *profile_name)
454 PrivateObject *po = NULL;
456 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
458 po = tcore_object_ref_object(co);
459 tcore_check_return_value_assert(po != NULL, FALSE);
461 tcore_free(po->profile_name);
462 po->profile_name = tcore_strdup(profile_name);
466 gboolean tcore_context_get_profile_name(CoreObject *co, gchar **profile_name)
468 PrivateObject *po = NULL;
470 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
472 po = tcore_object_ref_object(co);
473 tcore_check_return_value_assert(po != NULL, FALSE);
475 *profile_name = tcore_strdup(po->profile_name);
479 gboolean tcore_context_set_devinfo(CoreObject *co, TcorePsPdpIpConf *devinfo)
481 PrivateObject *po = NULL;
483 dbg("Setup device information");
485 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
487 po = tcore_object_ref_object(co);
488 tcore_check_return_value_assert(po != NULL, FALSE);
489 tcore_check_return_value_assert(devinfo != NULL, FALSE);
491 memcpy(&(po->ip_v4), devinfo->ip_address, sizeof(TcoreIp4Type));
492 memcpy(&(po->dns_primary_v4), devinfo->primary_dns, sizeof(TcoreIp4Type));
493 memcpy(&(po->dns_secondary_v4), devinfo->secondary_dns, sizeof(TcoreIp4Type));
494 memcpy(&(po->gateway_v4), devinfo->gateway, sizeof(TcoreIp4Type));
495 memcpy(po->devname, devinfo->devname, sizeof(gchar) * 16);
497 msg(" IP Address: [0x%x]", po->ip_v4);
498 msg(" DNS - Primary: [0x%x] Secondary: [0x%x]", po->dns_primary_v4, po->dns_secondary_v4);
499 msg(" Gateway: [0x%x]", po->gateway_v4);
500 msg(" Device Name: [%s]", po->devname);
505 gboolean tcore_context_reset_devinfo(CoreObject *co)
507 PrivateObject *po = NULL;
509 dbg("Reset device information");
511 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
513 po = tcore_object_ref_object(co);
514 tcore_check_return_value_assert(po != NULL, FALSE);
516 memset(&(po->ip_v4), 0, sizeof(TcoreIp4Type));
517 memset(&(po->dns_primary_v4), 0, sizeof(TcoreIp4Type));
518 memset(&(po->dns_secondary_v4), 0, sizeof(TcoreIp4Type));
519 memset(&(po->gateway_v4), 0, sizeof(TcoreIp4Type));
520 memset(po->devname, 0, sizeof(gchar) * 16);
525 void tcore_context_cp_service_info(CoreObject *dest, CoreObject *src)
527 PrivateObject *d_po = NULL;
528 PrivateObject *s_po = NULL;
530 CORE_OBJECT_CHECK(dest, CORE_OBJECT_TYPE_PS_CONTEXT);
531 CORE_OBJECT_CHECK(src, CORE_OBJECT_TYPE_PS_CONTEXT);
533 d_po = tcore_object_ref_object(dest);
534 s_po = tcore_object_ref_object(src);
536 d_po->state = s_po->state;
538 memcpy(&(d_po->ip_v4), &(s_po->ip_v4), sizeof(TcoreIp4Type));
539 memcpy(&(d_po->dns_primary_v4), &(s_po->dns_primary_v4), sizeof(TcoreIp4Type));
540 memcpy(&(d_po->dns_secondary_v4), &(s_po->dns_secondary_v4), sizeof(TcoreIp4Type));
541 memcpy(&(d_po->gateway_v4), &(s_po->gateway_v4), sizeof(TcoreIp4Type));
542 memcpy(d_po->devname, s_po->devname, sizeof(gchar) * 16);
547 gboolean tcore_context_set_ipv4_addr(CoreObject *co, const gchar *addr)
549 PrivateObject *po = NULL;
551 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
553 po = tcore_object_ref_object(co);
554 tcore_check_return_value_assert(po != NULL, FALSE);
557 tcore_free(po->addr);
562 po->addr = tcore_strdup(addr);
563 __context_set_ipv4_atoi(po->ip_v4.s, addr);
564 dbg("IP Address: [%s]", addr);
570 gboolean tcore_context_get_ipv4_addr(CoreObject *co, gchar **ip)
572 PrivateObject *po = NULL;
574 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
576 po = tcore_object_ref_object(co);
577 tcore_check_return_value_assert(po != NULL, FALSE);
579 *ip = tcore_util_get_string_by_ip4type(po->ip_v4);
583 gboolean tcore_context_set_ipv4_dns(CoreObject *co, const gchar *dns1, const gchar *dns2)
585 PrivateObject *po = NULL;
587 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
589 po = tcore_object_ref_object(co);
590 tcore_check_return_value_assert(po != NULL, FALSE);
592 tcore_free(po->dns1);
595 tcore_free(po->dns2);
599 po->dns1 = tcore_strdup(dns1);
600 __context_set_ipv4_atoi(po->dns_primary_v4.s, dns1);
604 po->dns2 = tcore_strdup(dns2);
605 __context_set_ipv4_atoi(po->dns_secondary_v4.s, dns2);
611 gboolean tcore_context_get_ipv4_dns1(CoreObject *co, gchar **ip)
613 PrivateObject *po = NULL;
615 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
617 po = tcore_object_ref_object(co);
618 tcore_check_return_value_assert(po != NULL, FALSE);
620 *ip = tcore_util_get_string_by_ip4type(po->dns_primary_v4);
624 gboolean tcore_context_get_ipv4_dns2(CoreObject *co, gchar **ip)
626 PrivateObject *po = NULL;
628 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
630 po = tcore_object_ref_object(co);
631 tcore_check_return_value_assert(po != NULL, FALSE);
633 *ip = tcore_util_get_string_by_ip4type(po->dns_secondary_v4);
637 gboolean tcore_context_get_ipv4_gw(CoreObject *co, gchar **ip)
639 PrivateObject *po = NULL;
641 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
643 po = tcore_object_ref_object(co);
644 tcore_check_return_value_assert(po != NULL, FALSE);
646 *ip = tcore_util_get_string_by_ip4type(po->gateway_v4);
650 gboolean tcore_context_set_ipv4_devname(CoreObject *co, const gchar *name)
652 PrivateObject *po = NULL;
654 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
656 po = tcore_object_ref_object(co);
657 tcore_check_return_value_assert(po != NULL, FALSE);
660 snprintf(po->devname, DEVNAME_LEN_MAX, "%s", name);
666 gboolean tcore_context_get_ipv4_devname(CoreObject *co, gchar **dev_name)
668 PrivateObject *po = NULL;
670 CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
672 po = tcore_object_ref_object(co);
673 tcore_check_return_value_assert(po != NULL, FALSE);
675 if (po->devname[0] == 0)
678 *dev_name = tcore_strdup(po->devname);