summaryrefslogtreecommitdiffstats
path: root/src/gprs.c
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2011-03-10 18:32:06 -0600
committerDenis Kenzior <denkenz@gmail.com>2011-03-15 17:11:58 -0500
commit3d71a15c74528ed23f9852a6411eee0c5c70d537 (patch)
tree0ba7051e20cf1a7723ca22dd5ee22103e2c8626f /src/gprs.c
parent250d84464c85c5de8f829ce7368d7a3e402e3efb (diff)
downloadofono-3d71a15c74528ed23f9852a6411eee0c5c70d537.tar.bz2
gprs: Move settings structure
Move the settings structure from pri_context to ofono_gprs_context in preparation for new IPv6 support APIs.
Diffstat (limited to 'src/gprs.c')
-rw-r--r--src/gprs.c84
1 files changed, 48 insertions, 36 deletions
diff --git a/src/gprs.c b/src/gprs.c
index ba22374e..748a2263 100644
--- a/src/gprs.c
+++ b/src/gprs.c
@@ -100,15 +100,6 @@ struct ofono_gprs {
struct ofono_sim_context *sim_context;
};
-struct ofono_gprs_context {
- struct ofono_gprs *gprs;
- enum ofono_gprs_context_type type;
- ofono_bool_t inuse;
- const struct ofono_gprs_context_driver *driver;
- void *driver_data;
- struct ofono_atom *atom;
-};
-
struct context_settings {
enum ofono_gprs_context_type type;
char *interface;
@@ -120,6 +111,16 @@ struct context_settings {
char *proxy;
};
+struct ofono_gprs_context {
+ struct ofono_gprs *gprs;
+ enum ofono_gprs_context_type type;
+ ofono_bool_t inuse;
+ const struct ofono_gprs_context_driver *driver;
+ void *driver_data;
+ struct context_settings *settings;
+ struct ofono_atom *atom;
+};
+
struct pri_context {
ofono_bool_t active;
enum ofono_gprs_context_type type;
@@ -129,7 +130,6 @@ struct pri_context {
unsigned int id;
char *path;
char *key;
- struct context_settings *settings;
char *proxy_host;
uint16_t proxy_port;
DBusMessage *pending;
@@ -419,6 +419,7 @@ static void pri_context_signal_settings(struct pri_context *ctx)
DBusMessage *signal;
DBusMessageIter iter;
const char *prop = "Settings";
+ struct context_settings *settings;
signal = dbus_message_new_signal(path,
OFONO_CONNECTION_CONTEXT_INTERFACE,
@@ -431,7 +432,12 @@ static void pri_context_signal_settings(struct pri_context *ctx)
dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &prop);
- context_settings_append_variant(ctx->settings, &iter);
+ if (ctx->context_driver)
+ settings = ctx->context_driver->settings;
+ else
+ settings = NULL;
+
+ context_settings_append_variant(settings, &iter);
g_dbus_send_message(conn, signal);
}
@@ -604,14 +610,14 @@ static void pri_reset_context_settings(struct pri_context *ctx)
{
char *interface;
- if (ctx->settings == NULL)
+ if (ctx->context_driver == NULL)
return;
- interface = ctx->settings->interface;
- ctx->settings->interface = NULL;
+ interface = ctx->context_driver->settings->interface;
+ ctx->context_driver->settings->interface = NULL;
- context_settings_free(ctx->settings);
- ctx->settings = NULL;
+ context_settings_free(ctx->context_driver->settings);
+ ctx->context_driver->settings = NULL;
pri_context_signal_settings(ctx);
@@ -634,24 +640,26 @@ static void pri_update_context_settings(struct pri_context *ctx,
const char *ip, const char *netmask,
const char *gateway, const char **dns)
{
- if (ctx->settings)
- context_settings_free(ctx->settings);
+ struct ofono_gprs_context *gc = ctx->context_driver;
- ctx->settings = g_try_new0(struct context_settings, 1);
- if (ctx->settings == NULL)
+ if (gc->settings != NULL)
+ context_settings_free(gc->settings);
+
+ gc->settings = g_try_new0(struct context_settings, 1);
+ if (gc->settings == NULL)
return;
- ctx->settings->type = ctx->type;
+ gc->settings->type = ctx->type;
- ctx->settings->interface = g_strdup(interface);
- ctx->settings->static_ip = static_ip;
- ctx->settings->ip = g_strdup(ip);
- ctx->settings->netmask = g_strdup(netmask);
- ctx->settings->gateway = g_strdup(gateway);
- ctx->settings->dns = g_strdupv((char **)dns);
+ gc->settings->interface = g_strdup(interface);
+ gc->settings->static_ip = static_ip;
+ gc->settings->ip = g_strdup(ip);
+ gc->settings->netmask = g_strdup(netmask);
+ gc->settings->gateway = g_strdup(gateway);
+ gc->settings->dns = g_strdupv((char **)dns);
if (ctx->type == OFONO_GPRS_CONTEXT_TYPE_MMS && ctx->message_proxy)
- ctx->settings->proxy = g_strdup(ctx->message_proxy);
+ gc->settings->proxy = g_strdup(ctx->message_proxy);
pri_ifupdown(interface, TRUE);
@@ -677,6 +685,7 @@ static void append_context_properties(struct pri_context *ctx,
const char *name = ctx->name;
dbus_bool_t value;
const char *strvalue;
+ struct context_settings *settings;
ofono_dbus_dict_append(dict, "Name", DBUS_TYPE_STRING, &name);
@@ -709,7 +718,12 @@ static void append_context_properties(struct pri_context *ctx,
DBUS_TYPE_STRING, &strvalue);
}
- context_settings_append_dict(ctx->settings, dict);
+ if (ctx->context_driver)
+ settings = ctx->context_driver->settings;
+ else
+ settings = NULL;
+
+ context_settings_append_dict(settings, dict);
}
static DBusMessage *pri_get_properties(DBusConnection *conn,
@@ -1216,15 +1230,8 @@ static void pri_context_destroy(gpointer userdata)
{
struct pri_context *ctx = userdata;
- if (ctx->settings) {
- context_settings_free(ctx->settings);
- ctx->settings = NULL;
- }
-
g_free(ctx->proxy_host);
-
g_free(ctx->path);
-
g_free(ctx);
}
@@ -2029,6 +2036,11 @@ static void gprs_context_unregister(struct ofono_atom *atom)
if (gc->gprs == NULL)
return;
+ if (gc->settings) {
+ context_settings_free(gc->settings);
+ gc->settings = NULL;
+ }
+
gc->gprs->context_drivers = g_slist_remove(gc->gprs->context_drivers,
gc);
gc->gprs = NULL;