Open Source Telephony
 help / color / mirror / Atom feed
* [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