summaryrefslogtreecommitdiffstats
path: root/src/gprs.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2010-10-27 15:09:33 +0200
committerMarcel Holtmann <marcel@holtmann.org>2010-10-27 15:09:33 +0200
commit87cd9f57b335c2e65d11de5e5d1c785367a1116c (patch)
tree1462e24aafb29e5a4dfcb8173afe292f915acad8 /src/gprs.c
parent9c476f1f0a818c6990e75d9b83c53c539396f710 (diff)
downloadofono-87cd9f57b335c2e65d11de5e5d1c785367a1116c.tar.bz2
gprs: Add support for exposing proxy information for MMS context
Diffstat (limited to 'src/gprs.c')
-rw-r--r--src/gprs.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/gprs.c b/src/gprs.c
index 1c8ab50f..cc184c48 100644
--- a/src/gprs.c
+++ b/src/gprs.c
@@ -90,12 +90,14 @@ struct ofono_gprs_context {
};
struct context_settings {
+ enum ofono_gprs_context_type type;
char *interface;
gboolean static_ip;
char *ip;
char *netmask;
char *gateway;
char **dns;
+ char *proxy;
};
struct pri_context {
@@ -219,6 +221,7 @@ static void context_settings_free(struct context_settings *settings)
g_free(settings->netmask);
g_free(settings->gateway);
g_strfreev(settings->dns);
+ g_free(settings->proxy);
g_free(settings);
}
@@ -245,11 +248,18 @@ static void context_settings_append_variant(struct context_settings *settings,
dbus_message_iter_open_container(&variant, DBUS_TYPE_ARRAY,
typesig, &array);
if (settings == NULL)
- goto end;
+ goto done;
ofono_dbus_dict_append(&array, "Interface",
DBUS_TYPE_STRING, &settings->interface);
+ if (settings->type == OFONO_GPRS_CONTEXT_TYPE_MMS) {
+ if (settings->proxy)
+ ofono_dbus_dict_append(&array, "Proxy",
+ DBUS_TYPE_STRING, &settings->proxy);
+ goto done;
+ }
+
if (settings->static_ip == TRUE)
method = "static";
else
@@ -274,7 +284,7 @@ static void context_settings_append_variant(struct context_settings *settings,
DBUS_TYPE_STRING,
&settings->dns);
-end:
+done:
dbus_message_iter_close_container(&variant, &array);
dbus_message_iter_close_container(iter, &variant);
@@ -384,7 +394,11 @@ static void pri_update_context_settings(struct pri_context *ctx,
if (ctx->settings)
context_settings_free(ctx->settings);
- ctx->settings = g_new0(struct context_settings, 1);
+ ctx->settings = g_try_new0(struct context_settings, 1);
+ if (!ctx->settings)
+ return;
+
+ ctx->settings->type = ctx->type;
ctx->settings->interface = g_strdup(interface);
ctx->settings->static_ip = static_ip;
@@ -393,6 +407,9 @@ static void pri_update_context_settings(struct pri_context *ctx,
ctx->settings->gateway = g_strdup(gateway);
ctx->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);
+
pri_ifupdown(interface, TRUE);
pri_context_signal_settings(ctx);