* [PATCH 1/5] ignore the NULL dict entry
@ 2009-11-17 15:49 Martin Xu
2009-11-17 15:49 ` [PATCH 2/5] emit PropertyChanged Settings signal after active/deactive primary context Martin Xu
0 siblings, 1 reply; 6+ messages in thread
From: Martin Xu @ 2009-11-17 15:49 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 514 bytes --]
---
src/dbus.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/src/dbus.c b/src/dbus.c
index b74481f..942294e 100644
--- a/src/dbus.c
+++ b/src/dbus.c
@@ -134,6 +134,9 @@ static void append_dict_variant(DBusMessageIter *iter, int type, void *val)
typesig, &array);
for (i = 0; val_array[i]; i += 2) {
+ if (val_array[i + 1] == NULL)
+ continue;
+
dbus_message_iter_open_container(&array, DBUS_TYPE_DICT_ENTRY,
NULL, &entry);
--
1.6.1.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/5] emit PropertyChanged Settings signal after active/deactive primary context
2009-11-17 15:49 [PATCH 1/5] ignore the NULL dict entry Martin Xu
@ 2009-11-17 15:49 ` Martin Xu
2009-11-17 15:49 ` [PATCH 3/5] ofono_gprs_context_update_settings Martin Xu
2009-11-18 0:57 ` [PATCH 2/5] emit PropertyChanged Settings signal after active/deactive primary context Denis Kenzior
0 siblings, 2 replies; 6+ messages in thread
From: Martin Xu @ 2009-11-17 15:49 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 4282 bytes --]
---
src/gprs.c | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 115 insertions(+), 0 deletions(-)
diff --git a/src/gprs.c b/src/gprs.c
index 0253109..a8d8afa 100644
--- a/src/gprs.c
+++ b/src/gprs.c
@@ -82,9 +82,19 @@ struct ofono_gprs {
struct ofono_atom *atom;
};
+struct context_settings {
+ char *interface;
+ char *method;
+ char *address;
+ char *netmask;
+ char *dns;
+ char *gateway;
+};
+
struct ofono_gprs_context {
struct ofono_gprs *gprs;
DBusMessage *pending;
+ struct context_settings settings;
const struct ofono_gprs_context_driver *driver;
void *driver_data;
struct ofono_atom *atom;
@@ -97,6 +107,7 @@ struct pri_context {
char name[MAX_CONTEXT_NAME_LENGTH + 1];
char *path;
char *key;
+ struct context_settings settings;
struct ofono_gprs_primary_context context;
struct ofono_gprs *gprs;
};
@@ -190,6 +201,102 @@ static DBusMessage *pri_get_properties(DBusConnection *conn,
return reply;
}
+static void context_settings_dup(struct context_settings *to,
+ struct context_settings *from)
+{
+ g_free(to->interface);
+ to->interface = g_strdup(from->interface);
+
+ g_free(to->method);
+ to->method = g_strdup(from->method);
+
+ g_free(to->address);
+ to->address = g_strdup(from->address);
+
+ g_free(to->netmask);
+ to->netmask = g_strdup(from->netmask);
+
+ g_free(to->dns);
+ to->dns = g_strdup(from->dns);
+
+ g_free(to->gateway);
+ to->gateway = g_strdup(from->gateway);
+}
+
+static void cleanup_context_settings(struct context_settings *settings)
+{
+ g_free(settings->interface);
+ settings->interface = NULL;
+
+ g_free(settings->method);
+ settings->method = NULL;
+
+ g_free(settings->address);
+ settings->address = NULL;
+
+ g_free(settings->netmask);
+ settings->netmask = NULL;
+
+ g_free(settings->dns);
+ settings->dns = NULL;
+
+ g_free(settings->gateway);
+ settings->gateway = NULL;
+}
+
+static char **get_settings(struct context_settings *settings)
+{
+ char **ret;
+
+ ret = g_new0(char *, 13);
+
+ ret[0] = g_strdup("Interface");
+ ret[1] = g_strdup(settings->interface);
+
+ ret[2] = g_strdup("Method");
+ ret[3] = g_strdup(settings->method);
+
+ ret[4] = g_strdup("Address");
+ ret[5] = g_strdup(settings->address);
+
+ ret[6] = g_strdup("Netmask");
+ ret[7] = g_strdup(settings->netmask);
+
+ ret[8] = g_strdup("DomainNameServers");
+ ret[9] = g_strdup(settings->dns);
+
+ ret[10] = g_strdup("GateWay");
+ ret[11] = g_strdup(settings->gateway);
+
+ return ret;
+}
+
+static void pri_context_settings_changed(struct pri_context *ctx)
+{
+ DBusConnection *conn = ofono_dbus_get_connection();
+ char **settings = get_settings(&ctx->settings);
+
+ ofono_dbus_signal_dict_property_changed(conn, ctx->path,
+ DATA_CONTEXT_INTERFACE,
+ "Settings",
+ DBUS_TYPE_STRING,
+ &settings);
+
+ g_strfreev(settings);
+}
+
+static void update_pri_context_settings(ofono_bool_t active,
+ struct ofono_gprs_context *gc,
+ struct pri_context *ctx)
+{
+ if (active)
+ context_settings_dup(&ctx->settings, &gc->settings);
+ else
+ cleanup_context_settings(&ctx->settings);
+
+ pri_context_settings_changed(ctx);
+}
+
static void pri_set_active_callback(const struct ofono_error *error,
void *data)
{
@@ -215,6 +322,9 @@ static void pri_set_active_callback(const struct ofono_error *error,
dbus_message_new_method_return(gc->pending));
value = ctx->active;
+
+ update_pri_context_settings(value, gc, ctx);
+
ofono_dbus_signal_property_changed(conn, ctx->path,
DATA_CONTEXT_INTERFACE,
"Active", DBUS_TYPE_BOOLEAN,
@@ -510,6 +620,8 @@ static void pri_context_destroy(gpointer userdata)
{
struct pri_context *ctx = userdata;
+ cleanup_context_settings(&ctx->settings);
+
if (ctx->path)
g_free(ctx->path);
@@ -1185,6 +1297,8 @@ static void gprs_context_remove(struct ofono_atom *atom)
if (gc->driver && gc->driver->remove)
gc->driver->remove(gc);
+ cleanup_context_settings(&gc->settings);
+
g_free(gc);
}
@@ -1579,3 +1693,4 @@ void *ofono_gprs_get_data(struct ofono_gprs *gprs)
{
return gprs->driver_data;
}
+
--
1.6.1.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/5] ofono_gprs_context_update_settings
2009-11-17 15:49 ` [PATCH 2/5] emit PropertyChanged Settings signal after active/deactive primary context Martin Xu
@ 2009-11-17 15:49 ` Martin Xu
2009-11-17 15:49 ` [PATCH 4/5] add function ofono_gprs_context_get_modem Martin Xu
2009-11-18 0:57 ` [PATCH 2/5] emit PropertyChanged Settings signal after active/deactive primary context Denis Kenzior
1 sibling, 1 reply; 6+ messages in thread
From: Martin Xu @ 2009-11-17 15:49 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1773 bytes --]
---
include/gprs-context.h | 8 ++++++++
src/gprs.c | 26 ++++++++++++++++++++++++++
2 files changed, 34 insertions(+), 0 deletions(-)
diff --git a/include/gprs-context.h b/include/gprs-context.h
index c4ebd23..8b860c2 100644
--- a/include/gprs-context.h
+++ b/include/gprs-context.h
@@ -71,6 +71,14 @@ void ofono_gprs_context_remove(struct ofono_gprs_context *gc);
void ofono_gprs_context_set_data(struct ofono_gprs_context *gc, void *data);
void *ofono_gprs_context_get_data(struct ofono_gprs_context *gc);
+void ofono_gprs_context_update_settings(struct ofono_gprs_context *gc,
+ const char *interface,
+ const char *method,
+ const char *address,
+ const char *netmask,
+ const char *dns,
+ const char *gateway);
+
#ifdef __cplusplus
}
#endif
diff --git a/src/gprs.c b/src/gprs.c
index a8d8afa..a64ff45 100644
--- a/src/gprs.c
+++ b/src/gprs.c
@@ -1694,3 +1694,29 @@ void *ofono_gprs_get_data(struct ofono_gprs *gprs)
return gprs->driver_data;
}
+void ofono_gprs_context_update_settings(struct ofono_gprs_context *gc,
+ const char *interface,
+ const char *method,
+ const char *address,
+ const char *netmask,
+ const char *dns,
+ const char *gateway)
+{
+ g_free(gc->settings.interface);
+ gc->settings.interface = g_strdup(interface);
+
+ g_free(gc->settings.method);
+ gc->settings.method = g_strdup(method);
+
+ g_free(gc->settings.address);
+ gc->settings.address = g_strdup(address);
+
+ g_free(gc->settings.netmask);
+ gc->settings.netmask = g_strdup(netmask);
+
+ g_free(gc->settings.dns);
+ gc->settings.dns = g_strdup(dns);
+
+ g_free(gc->settings.gateway);
+ gc->settings.gateway = g_strdup(gateway);
+}
--
1.6.1.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 4/5] add function ofono_gprs_context_get_modem
2009-11-17 15:49 ` [PATCH 3/5] ofono_gprs_context_update_settings Martin Xu
@ 2009-11-17 15:49 ` Martin Xu
2009-11-17 15:49 ` [PATCH 5/5] update gprs context settings when activating primary conext Martin Xu
0 siblings, 1 reply; 6+ messages in thread
From: Martin Xu @ 2009-11-17 15:49 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 985 bytes --]
---
include/gprs-context.h | 2 ++
src/gprs.c | 5 +++++
2 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/include/gprs-context.h b/include/gprs-context.h
index 8b860c2..95b2bae 100644
--- a/include/gprs-context.h
+++ b/include/gprs-context.h
@@ -79,6 +79,8 @@ void ofono_gprs_context_update_settings(struct ofono_gprs_context *gc,
const char *dns,
const char *gateway);
+struct ofono_modem *ofono_gprs_context_get_modem(struct ofono_gprs_context *gc);
+
#ifdef __cplusplus
}
#endif
diff --git a/src/gprs.c b/src/gprs.c
index a64ff45..7d37389 100644
--- a/src/gprs.c
+++ b/src/gprs.c
@@ -1720,3 +1720,8 @@ void ofono_gprs_context_update_settings(struct ofono_gprs_context *gc,
g_free(gc->settings.gateway);
gc->settings.gateway = g_strdup(gateway);
}
+
+ struct ofono_modem *ofono_gprs_context_get_modem(struct ofono_gprs_context *gc)
+{
+ return __ofono_atom_get_modem(gc->atom);
+}
--
1.6.1.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 5/5] update gprs context settings when activating primary conext
2009-11-17 15:49 ` [PATCH 4/5] add function ofono_gprs_context_get_modem Martin Xu
@ 2009-11-17 15:49 ` Martin Xu
0 siblings, 0 replies; 6+ messages in thread
From: Martin Xu @ 2009-11-17 15:49 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1247 bytes --]
---
drivers/mbmmodem/gprs-context.c | 14 ++++++++++++++
1 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/drivers/mbmmodem/gprs-context.c b/drivers/mbmmodem/gprs-context.c
index ecbafa0..b800d4a 100644
--- a/drivers/mbmmodem/gprs-context.c
+++ b/drivers/mbmmodem/gprs-context.c
@@ -116,6 +116,18 @@ static void mbm_cgdcont_cb(gboolean ok, GAtResult *result, gpointer user_data)
CALLBACK_WITH_FAILURE(cb, cbd->data);
}
+static void update_gprs_context_settings(struct ofono_gprs_context *gc)
+{
+ const char *interface;
+
+ struct ofono_modem *modem = ofono_gprs_context_get_modem(gc);
+
+ interface = ofono_modem_get_string(modem, "NetworkInterface");
+
+ ofono_gprs_context_update_settings(gc, interface, "dhcp",
+ NULL, NULL, NULL, NULL);
+}
+
static void mbm_gprs_activate_primary(struct ofono_gprs_context *gc,
const struct ofono_gprs_primary_context *ctx,
ofono_gprs_context_cb_t cb, void *data)
@@ -132,6 +144,8 @@ static void mbm_gprs_activate_primary(struct ofono_gprs_context *gc,
cbd->user = gc;
+ update_gprs_context_settings(gc);
+
/* TODO: Handle username / password fields */
len = sprintf(buf, "AT+CGDCONT=%u,\"IP\"", ctx->cid);
--
1.6.1.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 2/5] emit PropertyChanged Settings signal after active/deactive primary context
2009-11-17 15:49 ` [PATCH 2/5] emit PropertyChanged Settings signal after active/deactive primary context Martin Xu
2009-11-17 15:49 ` [PATCH 3/5] ofono_gprs_context_update_settings Martin Xu
@ 2009-11-18 0:57 ` Denis Kenzior
1 sibling, 0 replies; 6+ messages in thread
From: Denis Kenzior @ 2009-11-18 0:57 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 272 bytes --]
Hi Martin,
> ---
> src/gprs.c | 115
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files
> changed, 115 insertions(+), 0 deletions(-)
>
So I pushed out my own changes inspired by your patch. Let me know how they
work.
Regards,
-Denis
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2009-11-18 0:57 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-17 15:49 [PATCH 1/5] ignore the NULL dict entry Martin Xu
2009-11-17 15:49 ` [PATCH 2/5] emit PropertyChanged Settings signal after active/deactive primary context Martin Xu
2009-11-17 15:49 ` [PATCH 3/5] ofono_gprs_context_update_settings Martin Xu
2009-11-17 15:49 ` [PATCH 4/5] add function ofono_gprs_context_get_modem Martin Xu
2009-11-17 15:49 ` [PATCH 5/5] update gprs context settings when activating primary conext Martin Xu
2009-11-18 0:57 ` [PATCH 2/5] emit PropertyChanged Settings signal after active/deactive primary context Denis Kenzior
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox