/*
* libtcore
*
- * Copyright (c) 2013 Samsung Electronics Co. Ltd. All rights reserved.
- * Copyright (c) 2013 Intel Corporation. All rights reserved.
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Ja-young Gu <jygu@samsung.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include "tcore.h"
#include "util.h"
#include "plugin.h"
+#include "user_request.h"
#include "co_context.h"
-#define DEVNAME_LEN_MAX 16
-
-typedef struct {
- TcoreContextState state;
- guint id;
- TcoreContextRole role;
+struct private_object_data {
+ enum co_context_state state;
+ unsigned char id;
+ enum co_context_role role;
+ gboolean default_profile;
+ gboolean attach_apn;
+
+ char *apn;
+ char *addr;
+ enum co_context_type type;
+ enum co_context_d_comp d_comp;
+ enum co_context_h_comp h_comp;
+ enum co_context_tech tech_pref;
+ char *username;
+ char *password;
+ char *dns1;
+ char *dns2;
+ enum co_context_auth auth;
+
+ union tcore_ip4_type ip_v4;
+ union tcore_ip4_type gateway_v4;
+ union tcore_ip4_type dns_primary_v4;
+ union tcore_ip4_type dns_secondary_v4;
- gchar *apn;
- gchar *addr;
- TcoreContextType type;
- TcoreContextDComp d_comp;
- TcoreContextHComp h_comp;
+ /* IPv6 will be supported */
+ char *ip_v6;
+ char *gateway_v6;
+ char *dns_primary_v6;
+ char *dns_secondary_v6;
- gchar *username;
- gchar *password;
- gchar *dns1;
- gchar *dns2;
- TcoreContextAuth auth;
+ pcscf_addr *pcscf_ipv4;
+ pcscf_addr *pcscf_ipv6;
- TcoreIp4Type ip_v4;
- TcoreIp4Type gateway_v4;
- TcoreIp4Type dns_primary_v4;
- TcoreIp4Type dns_secondary_v4;
+ char *proxy;
+ char *mmsurl;
+ char *profile_name;
+ char devname[16];
- /* IPv6 will be supported */
+ /* Dedicated bearer information */
+ struct dedicated_bearer_info dedicated_bearer;
+};
- gchar *proxy;
- gchar *mmsurl;
- gchar *profile_name;
- gchar devname[DEVNAME_LEN_MAX];
-} PrivateObject;
-
-static void __context_set_ipv4_atoi(guchar *ip4, const gchar *str)
+static void _free_hook(CoreObject *o)
{
- gchar *token = NULL;
- gchar *temp = NULL;
- guint index = 0;
+ struct private_object_data *po = NULL;
- temp = tcore_strdup(str);
- token = strtok(temp, ".");
- while (token != NULL) {
- ip4[index++] = atoi(token);
- msg(" [%c]", ip4[index-1]);
- token = strtok(NULL, ".");
+ po = tcore_object_ref_object(o);
+ if (po) {
+ free(po);
+ tcore_object_link_object(o, NULL);
}
- tcore_free(temp);
}
-static void __po_free_hook(CoreObject *co)
+CoreObject *tcore_context_new(TcorePlugin *p, const char *name, TcoreHal *hal)
{
- PrivateObject *po = NULL;
+ CoreObject *o = NULL;
+ struct private_object_data *po = NULL;
+
+ if (!p)
+ return NULL;
- po = tcore_object_ref_object(co);
- tcore_check_return(po != NULL);
+ o = tcore_object_new(p, name, hal);
+ if (!o)
+ return NULL;
- tcore_free(po->apn);
- tcore_free(po->addr);
- tcore_free(po->username);
- tcore_free(po->password);
- tcore_free(po->dns1);
- tcore_free(po->dns2);
- tcore_free(po->proxy);
- tcore_free(po->mmsurl);
- tcore_free(po->profile_name);
- tcore_free(po);
+ po = calloc(1, sizeof(struct private_object_data));
+ if (!po) {
+ tcore_object_free(o);
+ return NULL;
+ }
- tcore_object_link_object(co, NULL);
+ po->type = CONTEXT_TYPE_IP;
+ po->d_comp = CONTEXT_D_COMP_OFF;
+ po->h_comp = CONTEXT_H_COMP_OFF;
+ po->role = CONTEXT_ROLE_UNKNOWN;
+ po->auth = CONTEXT_AUTH_NONE;
+ po->tech_pref = CONTEXT_TECH_3GPP;
+
+ tcore_object_set_type(o, CORE_OBJECT_TYPE_PS_CONTEXT);
+ tcore_object_link_object(o, po);
+ tcore_object_set_free_hook(o, _free_hook);
+
+ return o;
}
-CoreObject *tcore_context_new(TcorePlugin *p, TcoreHal *hal)
+void tcore_context_free(CoreObject *o)
{
- CoreObject *co = NULL;
- PrivateObject *po = NULL;
+ CORE_OBJECT_CHECK(o, CORE_OBJECT_TYPE_PS_CONTEXT);
+ tcore_object_free(o);
+}
- tcore_check_return_value_assert(p != NULL, NULL);
+TReturn tcore_context_set_state(CoreObject *o, enum co_context_state state)
+{
+ struct private_object_data *po = NULL;
- co = tcore_object_new(p, hal);
- tcore_check_return_value_assert(co != NULL, NULL);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
- po = tcore_malloc0(sizeof(PrivateObject));
- po->type = TCORE_CONTEXT_TYPE_IP;
- po->d_comp = TCORE_CONTEXT_D_COMP_OFF;
- po->h_comp = TCORE_CONTEXT_H_COMP_OFF;
- po->role = TCORE_CONTEXT_ROLE_UNKNOWN;
- po->auth = TCORE_CONTEXT_AUTH_NONE;
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
- tcore_object_set_type(co, CORE_OBJECT_TYPE_PS_CONTEXT);
- tcore_object_link_object(co, po);
- tcore_object_set_free_hook(co, __po_free_hook);
+ po->state = state;
- return co;
+ return TCORE_RETURN_SUCCESS;
}
-void tcore_context_free(CoreObject *co)
+enum co_context_state tcore_context_get_state(CoreObject *o)
{
- CORE_OBJECT_CHECK(co, CORE_OBJECT_TYPE_PS_CONTEXT);
- tcore_object_free(co);
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return 0;
+
+ return po->state;
}
-gboolean tcore_context_set_state(CoreObject *co, TcoreContextState state)
+TReturn tcore_context_set_id(CoreObject *o, unsigned char id)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
- dbg("Set State: [%s]",
- ((state == TCORE_CONTEXT_STATE_ACTIVATED) ? "ACTIVATED"
- : (state == TCORE_CONTEXT_STATE_ACTIVATING) ? "ACTIVATING"
- : (state == TCORE_CONTEXT_STATE_DEACTIVATED) ? "DEACTIVATED"
- : "DEACTIVATING"));
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po->id = id;
- po->state = state;
- return TRUE;
+ return TCORE_RETURN_SUCCESS;
}
-gboolean tcore_context_get_state(CoreObject *co, TcoreContextState *state)
+unsigned char tcore_context_get_id(CoreObject *o)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return 0;
- *state = po->state;
- return TRUE;
+ return po->id;
}
-gboolean tcore_context_set_id(CoreObject *co, guint id)
+TReturn tcore_context_set_apn(CoreObject *o, const char *apn)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return FALSE;
- po->id = id;
+ if (po->apn) {
+ free(po->apn);
+ po->apn = NULL;
+ }
+
+ if (apn)
+ po->apn = g_strdup(apn);
- return TRUE;
+ return TCORE_RETURN_SUCCESS;
}
-gboolean tcore_context_get_id(CoreObject *co, guint *id)
+char *tcore_context_get_apn(CoreObject *o)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return NULL;
- *id = po->id;
- return TRUE;
+ if (!po->apn)
+ return NULL;
+
+ return g_strdup(po->apn);
}
-gboolean tcore_context_set_apn(CoreObject *co, const gchar *apn)
+TReturn tcore_context_set_address(CoreObject *o, const char *addr)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ if (po->addr) {
+ free(po->addr);
+ po->addr = NULL;
+ }
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ if (addr)
+ po->addr = g_strdup(addr);
- tcore_free(po->apn);
- po->apn = tcore_strdup(apn);
- return TRUE;
+ return TCORE_RETURN_SUCCESS;
}
-gboolean tcore_context_get_apn(CoreObject *co, gchar **apn)
+char *tcore_context_get_address(CoreObject *o)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
- *apn = tcore_strdup(po->apn);
- return TRUE;
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return NULL;
+
+ if (!po->addr)
+ return NULL;
+
+ return g_strdup(po->addr);
}
-gboolean tcore_context_set_role(CoreObject *co, TcoreContextRole role)
+TReturn tcore_context_set_role(CoreObject *o, enum co_context_role role)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
po->role = role;
- return TRUE;
+
+ return TCORE_RETURN_SUCCESS;
}
-gboolean tcore_context_get_role(CoreObject *co, TcoreContextRole *role)
+enum co_context_role tcore_context_get_role(CoreObject *o)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return 0;
- *role = po->role;
- return TRUE;
+ return po->role;
}
-gboolean tcore_context_set_type(CoreObject *co, TcoreContextType type)
+TReturn tcore_context_set_type(CoreObject *o, enum co_context_type type)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
po->type = type;
- return TRUE;
+
+ return TCORE_RETURN_SUCCESS;
}
-gboolean tcore_context_get_type(CoreObject *co, TcoreContextType *type)
+enum co_context_type tcore_context_get_type(CoreObject *o)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return 0;
- *type = po->type;
- return TRUE;
+ return po->type;
}
-gboolean tcore_context_set_data_compression(CoreObject *co, TcoreContextDComp comp)
+TReturn tcore_context_set_data_compression(CoreObject *o, enum co_context_d_comp comp)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
po->d_comp = comp;
- return TRUE;
+
+ return TCORE_RETURN_SUCCESS;
}
-gboolean tcore_context_get_data_compression(CoreObject *co, TcoreContextDComp *comp)
+enum co_context_d_comp tcore_context_get_data_compression(CoreObject *o)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return 0;
- *comp = po->d_comp;
- return TRUE;
+ return po->d_comp;
}
-gboolean tcore_context_set_header_compression(CoreObject *co, TcoreContextHComp comp)
+TReturn tcore_context_set_header_compression(CoreObject *o, enum co_context_h_comp comp)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
po->h_comp = comp;
- return TRUE;
+
+ return TCORE_RETURN_SUCCESS;
+}
+
+enum co_context_h_comp tcore_context_get_header_compression(CoreObject *o)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return 0;
+
+ return po->h_comp;
}
-gboolean tcore_context_get_header_compression(CoreObject *co, TcoreContextHComp *comp)
+TReturn tcore_context_set_tech_preference(CoreObject *o, enum co_context_tech tech)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
- *comp = po->h_comp;
- return TRUE;
+ po->tech_pref = tech;
+
+ return TCORE_RETURN_SUCCESS;
}
-gboolean tcore_context_set_username(CoreObject *co, const gchar *username)
+enum co_context_tech tcore_context_get_tech_preference(CoreObject *o)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return CONTEXT_TECH_INVALID;
- tcore_free(po->username);
- po->username = tcore_strdup(username);
- return TRUE;
+ return po->tech_pref;
}
-gboolean tcore_context_get_username(CoreObject *co, gchar **username)
+TReturn tcore_context_set_username(CoreObject *o, const char *username)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
+
+ if (po->username) {
+ free(po->username);
+ po->username = NULL;
+ }
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ if (username)
+ po->username = g_strdup(username);
- *username = tcore_strdup(po->username);
- return TRUE;
+ return TCORE_RETURN_SUCCESS;
}
-gboolean tcore_context_set_password(CoreObject *co, const gchar *password)
+char *tcore_context_get_username(CoreObject *o)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return NULL;
+
+ if (!po->username)
+ return NULL;
+
+ return g_strdup(po->username);
+}
+
+TReturn tcore_context_set_password(CoreObject *o, const char *password)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ if (po->password) {
+ free(po->password);
+ po->password = NULL;
+ }
+
+ if (password)
+ po->password = g_strdup(password);
+
+ return TCORE_RETURN_SUCCESS;
+}
+
+char *tcore_context_get_password(CoreObject *o)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return NULL;
+
+ if (!po->password)
+ return NULL;
+
+ return g_strdup(po->password);
+}
+
+TReturn tcore_context_set_dns1(CoreObject *o, const char *dns)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
+
+ if (po->dns1) {
+ free(po->dns1);
+ po->dns1 = NULL;
+ }
+
+ if (dns)
+ po->dns1 = g_strdup(dns);
+
+ return TCORE_RETURN_SUCCESS;
+}
+
+TReturn tcore_context_set_ipv6_dns1(CoreObject *o, const char *dns)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
+
+ if (po->dns_primary_v6) {
+ free(po->dns_primary_v6);
+ po->dns_primary_v6 = NULL;
+ }
+
+ if (dns)
+ po->dns_primary_v6 = g_strdup(dns);
+
+ return TCORE_RETURN_SUCCESS;
+}
+
+char *tcore_context_get_dns1(CoreObject *o)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return NULL;
+
+ if (!po->dns1)
+ return NULL;
+
+ return g_strdup(po->dns1);
+}
+
+TReturn tcore_context_set_dns2(CoreObject *o, const char *dns)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
+
+ if (po->dns2) {
+ free(po->dns2);
+ po->dns2 = NULL;
+ }
+
+ if (dns)
+ po->dns2 = g_strdup(dns);
+
+ return TCORE_RETURN_SUCCESS;
+}
+
+TReturn tcore_context_set_ipv6_dns2(CoreObject *o, const char *dns)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
+
+ if (po->dns_secondary_v6) {
+ free(po->dns_secondary_v6);
+ po->dns_secondary_v6 = NULL;
+ }
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ if (dns)
+ po->dns_secondary_v6 = g_strdup(dns);
- tcore_free(po->password);
- po->password = tcore_strdup(password);
- return TRUE;
+ return TCORE_RETURN_SUCCESS;
}
-gboolean tcore_context_get_password(CoreObject *co, gchar **password)
+char *tcore_context_get_dns2(CoreObject *o)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return NULL;
- *password = tcore_strdup(po->password);
- return TRUE;
+ if (!po->dns2)
+ return NULL;
+
+ return g_strdup(po->dns2);
}
-gboolean tcore_context_set_auth(CoreObject *co, TcoreContextAuth auth)
+TReturn tcore_context_set_auth(CoreObject *o, enum co_context_auth auth)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
po->auth = auth;
- return TRUE;
+
+ return TCORE_RETURN_SUCCESS;
+}
+
+enum co_context_auth tcore_context_get_auth(CoreObject *o)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, 0);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return 0;
+
+ return po->auth;
+}
+
+TReturn tcore_context_set_proxy(CoreObject *o, const char *proxy)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return FALSE;
+
+ if (po->proxy) {
+ free(po->proxy);
+ po->apn = NULL;
+ }
+
+ if (proxy)
+ po->proxy = g_strdup(proxy);
+
+ return TCORE_RETURN_SUCCESS;
}
-gboolean tcore_context_get_auth(CoreObject *co, TcoreContextAuth *auth)
+char *tcore_context_get_proxy(CoreObject *o)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return NULL;
- *auth = po->auth;
- return TRUE;
+ if (!po->proxy)
+ return NULL;
+
+ return g_strdup(po->proxy);
}
-gboolean tcore_context_set_proxy(CoreObject *co, const gchar *proxy)
+TReturn tcore_context_set_mmsurl(CoreObject *o, const char *mmsurl)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return FALSE;
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ if (po->mmsurl) {
+ free(po->mmsurl);
+ po->mmsurl = NULL;
+ }
- tcore_free(po->proxy);
- po->proxy = tcore_strdup(proxy);
- return TRUE;
+ if (mmsurl)
+ po->mmsurl = g_strdup(mmsurl);
+
+ return TCORE_RETURN_SUCCESS;
}
-gboolean tcore_context_get_proxy(CoreObject *co, gchar **proxy)
+char *tcore_context_get_mmsurl(CoreObject *o)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return NULL;
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ if (!po->mmsurl)
+ return NULL;
- *proxy = tcore_strdup(po->proxy);
- return TRUE;
+ return g_strdup(po->mmsurl);
}
-gboolean tcore_context_set_mmsurl(CoreObject *co, const gchar *mmsurl)
+TReturn tcore_context_set_profile_name(CoreObject *o, const char *profile_name)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return FALSE;
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ if (po->profile_name) {
+ free(po->profile_name);
+ po->profile_name = NULL;
+ }
+
+ if (profile_name)
+ po->profile_name = g_strdup(profile_name);
- tcore_free(po->mmsurl);
- po->mmsurl = tcore_strdup(mmsurl);
- return TRUE;
+ return TCORE_RETURN_SUCCESS;
}
-gboolean tcore_context_get_mmsurl(CoreObject *co, gchar **mmsurl)
+char *tcore_context_get_profile_name(CoreObject *o)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return NULL;
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ if (!po->profile_name)
+ return NULL;
- *mmsurl = tcore_strdup(po->mmsurl);
- return TRUE;
+ return g_strdup(po->profile_name);
}
-gboolean tcore_context_set_profile_name(CoreObject *co, const gchar *profile_name)
+TReturn tcore_context_set_default_profile(CoreObject *o, gboolean default_conn)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
- tcore_free(po->profile_name);
- po->profile_name = tcore_strdup(profile_name);
- return TRUE;
+ po->default_profile = default_conn;
+
+ return TCORE_RETURN_SUCCESS;
}
-gboolean tcore_context_get_profile_name(CoreObject *co, gchar **profile_name)
+gboolean tcore_context_get_default_profile(CoreObject *o)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return FALSE;
- *profile_name = tcore_strdup(po->profile_name);
- return TRUE;
+ return po->default_profile;
}
-gboolean tcore_context_set_devinfo(CoreObject *co, TcorePsPdpIpConf *devinfo)
+TReturn tcore_context_set_devinfo(CoreObject *o, struct tnoti_ps_pdp_ipconfiguration *devinfo)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
+
+ po = tcore_object_ref_object(o);
+
+ if (!po || !devinfo)
+ return TCORE_RETURN_EINVAL;
+
+ /* Free context resource if it was already allocated */
+ tcore_context_reset_devinfo(o);
+
+ po->ip_v6 = g_strdup((gchar *)devinfo->ipv6_address);
+ po->dns_primary_v6 = g_strdup((gchar *)devinfo->ipv6_primary_dns);
+ po->dns_secondary_v6 = g_strdup((gchar *)devinfo->ipv6_secondary_dns);
+ po->gateway_v6 = g_strdup((gchar *)devinfo->ipv6_gateway);
+ memcpy(&(po->ip_v4), devinfo->ip_address, sizeof(union tcore_ip4_type));
+ memcpy(&(po->dns_primary_v4), devinfo->primary_dns, sizeof(union tcore_ip4_type));
+ memcpy(&(po->dns_secondary_v4), devinfo->secondary_dns, sizeof(union tcore_ip4_type));
+ memcpy(&(po->gateway_v4), devinfo->gateway, sizeof(union tcore_ip4_type));
+ memcpy(po->devname, devinfo->devname, sizeof(char) * 16);
+
+ po->pcscf_ipv4 = g_try_malloc0(sizeof(pcscf_addr));
+ if (po->pcscf_ipv4) {
+ po->pcscf_ipv4->count = devinfo->pcscf_ipv4_count;
+ if (po->pcscf_ipv4->count > 0) {
+ unsigned int i;
+ po->pcscf_ipv4->addr = g_try_malloc0(sizeof(char *) * po->pcscf_ipv4->count);
+ if ((po->pcscf_ipv4->addr) && (devinfo->pcscf_ipv4))
+ for (i = 0; i < po->pcscf_ipv4->count; i++)
+ po->pcscf_ipv4->addr[i] = g_strdup(devinfo->pcscf_ipv4[i]);
+ }
+ }
+
+ po->pcscf_ipv6 = g_try_malloc0(sizeof(pcscf_addr));
+ if (po->pcscf_ipv6) {
+ po->pcscf_ipv6->count = devinfo->pcscf_ipv6_count;
+ if (po->pcscf_ipv6->count > 0) {
+ unsigned int i;
+ po->pcscf_ipv6->addr = g_try_malloc0(sizeof(char *) * po->pcscf_ipv6->count);
+ if ((po->pcscf_ipv6->addr) && (devinfo->pcscf_ipv6))
+ for (i = 0; i < po->pcscf_ipv6->count; i++)
+ po->pcscf_ipv6->addr[i] = g_strdup(devinfo->pcscf_ipv6[i]);
+ }
+ }
+
+ return TCORE_RETURN_SUCCESS;
+}
+
+TReturn tcore_context_reset_devinfo(CoreObject *o)
+{
+ struct private_object_data *po = NULL;
+ unsigned int i;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
+
+ if (po->ip_v6) {
+ g_free(po->ip_v6);
+ po->ip_v6 = NULL;
+ }
+
+ if (po->dns_primary_v6) {
+ g_free(po->dns_primary_v6);
+ po->dns_primary_v6 = NULL;
+ }
- dbg("Setup device information");
+ if (po->dns_secondary_v6) {
+ g_free(po->dns_secondary_v6);
+ po->dns_secondary_v6 = NULL;
+ }
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ if (po->gateway_v6) {
+ g_free(po->gateway_v6);
+ po->gateway_v6 = NULL;
+ }
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
- tcore_check_return_value_assert(devinfo != NULL, FALSE);
+ if (po->pcscf_ipv4) {
+ for (i = 0; i < po->pcscf_ipv4->count; i++)
+ g_free(po->pcscf_ipv4->addr[i]);
+ g_free(po->pcscf_ipv4);
+ po->pcscf_ipv4 = NULL;
+ }
- memcpy(&(po->ip_v4), devinfo->ip_address, sizeof(TcoreIp4Type));
- memcpy(&(po->dns_primary_v4), devinfo->primary_dns, sizeof(TcoreIp4Type));
- memcpy(&(po->dns_secondary_v4), devinfo->secondary_dns, sizeof(TcoreIp4Type));
- memcpy(&(po->gateway_v4), devinfo->gateway, sizeof(TcoreIp4Type));
- memcpy(po->devname, devinfo->devname, sizeof(gchar) * 16);
+ if (po->pcscf_ipv6) {
+ for (i = 0; i < po->pcscf_ipv6->count; i++)
+ g_free(po->pcscf_ipv6->addr[i]);
+ g_free(po->pcscf_ipv6);
+ po->pcscf_ipv6 = NULL;
+ }
- msg(" IP Address: [0x%x]", po->ip_v4);
- msg(" DNS - Primary: [0x%x] Secondary: [0x%x]", po->dns_primary_v4, po->dns_secondary_v4);
- msg(" Gateway: [0x%x]", po->gateway_v4);
- msg(" Device Name: [%s]", po->devname);
+ memset(&(po->ip_v4), 0, sizeof(union tcore_ip4_type));
+ memset(&(po->dns_primary_v4), 0, sizeof(union tcore_ip4_type));
+ memset(&(po->dns_secondary_v4), 0, sizeof(union tcore_ip4_type));
+ memset(&(po->gateway_v4), 0, sizeof(union tcore_ip4_type));
+ memset(po->devname, 0, sizeof(char) * 16);
- return TRUE;
+ return TCORE_RETURN_SUCCESS;
}
-gboolean tcore_context_reset_devinfo(CoreObject *co)
+TReturn tcore_context_set_bearer_info(CoreObject *o, struct tnoti_ps_dedicated_bearer_info *bearer_info)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- dbg("Reset device information");
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ if (!bearer_info)
+ return TCORE_RETURN_EINVAL;
- memset(&(po->ip_v4), 0, sizeof(TcoreIp4Type));
- memset(&(po->dns_primary_v4), 0, sizeof(TcoreIp4Type));
- memset(&(po->dns_secondary_v4), 0, sizeof(TcoreIp4Type));
- memset(&(po->gateway_v4), 0, sizeof(TcoreIp4Type));
- memset(po->devname, 0, sizeof(gchar) * 16);
+ if (bearer_info->dedicated_bearer.num_dedicated_bearer > 0)
+ memcpy(&(po->dedicated_bearer), &(bearer_info->dedicated_bearer), sizeof(struct dedicated_bearer_info));
- return TRUE;
+ return TCORE_RETURN_SUCCESS;
+}
+
+TReturn tcore_context_get_bearer_info(CoreObject *o, struct dedicated_bearer_info *bearer_info)
+{
+ struct private_object_data *po = NULL;
+ guchar count = 0;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
+
+ if (!bearer_info)
+ return TCORE_RETURN_EINVAL;
+
+ count = po->dedicated_bearer.num_dedicated_bearer;
+ if (count > MAX_NUM_DEDICATED_BEARER)
+ return TCORE_RETURN_EINVAL;
+
+ if (count > 0) {
+ bearer_info->num_dedicated_bearer = count;
+ bearer_info->secondary_context_id = po->dedicated_bearer.secondary_context_id;
+ memcpy(bearer_info->qos, po->dedicated_bearer.qos, count*sizeof(struct qos_parameter));
+ }
+
+ return TCORE_RETURN_SUCCESS;
+}
+
+TReturn tcore_context_reset_bearer_info(CoreObject *o)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
+
+ if (po->dedicated_bearer.num_dedicated_bearer > 0)
+ memset(&(po->dedicated_bearer), 0, sizeof(struct dedicated_bearer_info));
+
+ return TCORE_RETURN_SUCCESS;
}
void tcore_context_cp_service_info(CoreObject *dest, CoreObject *src)
{
- PrivateObject *d_po = NULL;
- PrivateObject *s_po = NULL;
+ struct private_object_data *d_po = NULL;
+ struct private_object_data *s_po = NULL;
CORE_OBJECT_CHECK(dest, CORE_OBJECT_TYPE_PS_CONTEXT);
CORE_OBJECT_CHECK(src, CORE_OBJECT_TYPE_PS_CONTEXT);
d_po->state = s_po->state;
d_po->id = s_po->id;
- memcpy(&(d_po->ip_v4), &(s_po->ip_v4), sizeof(TcoreIp4Type));
- memcpy(&(d_po->dns_primary_v4), &(s_po->dns_primary_v4), sizeof(TcoreIp4Type));
- memcpy(&(d_po->dns_secondary_v4), &(s_po->dns_secondary_v4), sizeof(TcoreIp4Type));
- memcpy(&(d_po->gateway_v4), &(s_po->gateway_v4), sizeof(TcoreIp4Type));
- memcpy(d_po->devname, s_po->devname, sizeof(gchar) * 16);
- return;
+ d_po->ip_v6 = g_strdup(s_po->ip_v6);
+ d_po->dns_primary_v6 = g_strdup(s_po->dns_primary_v6);
+ d_po->dns_secondary_v6 = g_strdup(s_po->dns_secondary_v6);
+ d_po->gateway_v6 = g_strdup(s_po->gateway_v6);
+
+ memcpy(&(d_po->ip_v4), &(s_po->ip_v4), sizeof(union tcore_ip4_type));
+ memcpy(&(d_po->dns_primary_v4), &(s_po->dns_primary_v4), sizeof(union tcore_ip4_type));
+ memcpy(&(d_po->dns_secondary_v4), &(s_po->dns_secondary_v4), sizeof(union tcore_ip4_type));
+ memcpy(&(d_po->gateway_v4), &(s_po->gateway_v4), sizeof(union tcore_ip4_type));
+ memcpy(d_po->devname, s_po->devname, sizeof(char) * 16);
}
-gboolean tcore_context_set_ipv4_addr(CoreObject *co, const gchar *addr)
+char *tcore_context_get_ipv4_addr(CoreObject *o)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return NULL;
- if (po->addr) {
- tcore_free(po->addr);
- po->addr = NULL;
- }
+ return tcore_util_get_string_by_ip4type(po->ip_v4);
+}
- if (addr) {
- po->addr = tcore_strdup(addr);
- __context_set_ipv4_atoi(po->ip_v4.s, addr);
- dbg("IP Address: [%s]", addr);
- }
+char *tcore_context_get_ipv4_dns1(CoreObject *o)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
- return TRUE;
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return NULL;
+
+ return tcore_util_get_string_by_ip4type(po->dns_primary_v4);
}
-gboolean tcore_context_get_ipv4_addr(CoreObject *co, gchar **ip)
+char *tcore_context_get_ipv4_dns2(CoreObject *o)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return NULL;
- *ip = tcore_util_get_string_by_ip4type(po->ip_v4);
- return TRUE;
+ return tcore_util_get_string_by_ip4type(po->dns_secondary_v4);
}
-gboolean tcore_context_set_ipv4_dns(CoreObject *co, const gchar *dns1, const gchar *dns2)
+char *tcore_context_get_ipv4_gw(CoreObject *o)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return NULL;
- tcore_free(po->dns1);
- po->dns1 = NULL;
+ return tcore_util_get_string_by_ip4type(po->gateway_v4);
+}
- tcore_free(po->dns2);
- po->dns2 = NULL;
+char *tcore_context_get_ipv4_devname(CoreObject *o)
+{
+ struct private_object_data *po = NULL;
- if (dns1) {
- po->dns1 = tcore_strdup(dns1);
- __context_set_ipv4_atoi(po->dns_primary_v4.s, dns1);
- }
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
- if (dns2) {
- po->dns2 = tcore_strdup(dns2);
- __context_set_ipv4_atoi(po->dns_secondary_v4.s, dns2);
- }
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return NULL;
+
+ if (po->devname[0] == 0)
+ return NULL;
- return TRUE;
+ return g_strdup(po->devname);
}
-gboolean tcore_context_get_ipv4_dns1(CoreObject *co, gchar **ip)
+char *tcore_context_get_ipv6_addr(CoreObject *o)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return NULL;
- *ip = tcore_util_get_string_by_ip4type(po->dns_primary_v4);
- return TRUE;
+ return g_strdup(po->ip_v6);
}
-gboolean tcore_context_get_ipv4_dns2(CoreObject *co, gchar **ip)
+char *tcore_context_get_ipv6_dns1(CoreObject *o)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return NULL;
- *ip = tcore_util_get_string_by_ip4type(po->dns_secondary_v4);
- return TRUE;
+ return g_strdup(po->dns_primary_v6);
}
-gboolean tcore_context_get_ipv4_gw(CoreObject *co, gchar **ip)
+char *tcore_context_get_ipv6_dns2(CoreObject *o)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return NULL;
- *ip = tcore_util_get_string_by_ip4type(po->gateway_v4);
- return TRUE;
+ return g_strdup(po->dns_secondary_v6);
}
-gboolean tcore_context_set_ipv4_devname(CoreObject *co, const gchar *name)
+char *tcore_context_get_ipv6_gw(CoreObject *o)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return NULL;
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ return g_strdup(po->gateway_v6);
+}
- if (name) {
- snprintf(po->devname, DEVNAME_LEN_MAX, "%s", name);
+pcscf_addr *tcore_context_get_pcscf_ipv4_addr(CoreObject *o)
+{
+ struct private_object_data *po = NULL;
+ pcscf_addr *pcscf_tmp;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return NULL;
+
+ if (!po->pcscf_ipv4)
+ return NULL;
+
+ pcscf_tmp = g_try_malloc0(sizeof(pcscf_addr));
+ if (!pcscf_tmp)
+ return NULL;
+
+ pcscf_tmp->count = po->pcscf_ipv4->count;
+ if (pcscf_tmp->count > 0) {
+ unsigned int i;
+ pcscf_tmp->addr = g_try_malloc0(sizeof(char *) * po->pcscf_ipv4->count);
+ if (!pcscf_tmp->addr) {
+ g_free(pcscf_tmp);
+ return NULL;
+ }
+
+ for (i = 0; i < po->pcscf_ipv4->count; i++)
+ pcscf_tmp->addr[i] = g_strdup(po->pcscf_ipv4->addr[i]);
}
- return TRUE;
+ return pcscf_tmp;
}
-gboolean tcore_context_get_ipv4_devname(CoreObject *co, gchar **dev_name)
+pcscf_addr *tcore_context_get_pcscf_ipv6_addr(CoreObject *o)
{
- PrivateObject *po = NULL;
+ struct private_object_data *po = NULL;
+ pcscf_addr *pcscf_tmp;
- CORE_OBJECT_CHECK_RETURN(co, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, NULL);
- po = tcore_object_ref_object(co);
- tcore_check_return_value_assert(po != NULL, FALSE);
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return NULL;
- if (po->devname[0] == 0)
- return TRUE;
+ if (!po->pcscf_ipv6)
+ return NULL;
+
+ pcscf_tmp = g_try_malloc0(sizeof(pcscf_addr));
+ if (!pcscf_tmp)
+ return NULL;
+
+ pcscf_tmp->count = po->pcscf_ipv6->count;
+ if (pcscf_tmp->count > 0) {
+ unsigned int i;
+ pcscf_tmp->addr = g_try_malloc0(sizeof(char *) * po->pcscf_ipv6->count);
+ if (!pcscf_tmp->addr) {
+ g_free(pcscf_tmp);
+ return NULL;
+ }
+
+ for (i = 0; i < po->pcscf_ipv6->count; i++)
+ pcscf_tmp->addr[i] = g_strdup(po->pcscf_ipv6->addr[i]);
+ }
+
+ return pcscf_tmp;
+}
+
+TReturn tcore_context_set_attach_apn(CoreObject *o, gboolean flag)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, TCORE_RETURN_EINVAL);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return TCORE_RETURN_EINVAL;
+
+ po->attach_apn = flag;
+
+ return TCORE_RETURN_SUCCESS;
+}
+
+gboolean tcore_context_get_attach_apn(CoreObject *o)
+{
+ struct private_object_data *po = NULL;
+
+ CORE_OBJECT_CHECK_RETURN(o, CORE_OBJECT_TYPE_PS_CONTEXT, FALSE);
+
+ po = tcore_object_ref_object(o);
+ if (!po)
+ return FALSE;
- *dev_name = tcore_strdup(po->devname);
- return TRUE;
+ return po->attach_apn;
}