---
src/connman.h | 3 +++
src/service.c | 36 ++++++++++++++++++++++++++++++++++++
2 files changed, 39 insertions(+), 0 deletions(-)
diff --git a/src/connman.h b/src/connman.h
index 408b809..e687502 100644
--- a/src/connman.h
+++ b/src/connman.h
@@ -552,6 +552,9 @@ void __connman_service_notify(struct connman_service
*service,
int __connman_service_counter_register(const char *counter);
void __connman_service_counter_unregister(const char *counter);
+void __connman_service_set_dhcp_address(struct connman_service *service,
+ const char *address);
+char *__connman_service_get_dhcp_address(struct connman_service *service);
struct connman_session;
struct service_entry;
diff --git a/src/service.c b/src/service.c
index b8f6aac..72e08a7 100644
--- a/src/service.c
+++ b/src/service.c
@@ -108,6 +108,7 @@ struct connman_service {
char **excludes;
char *pac;
connman_bool_t wps;
+ char *last_dynamic_ip_address;
};
static void append_path(gpointer value, gpointer user_data)
@@ -3005,6 +3006,7 @@ static void service_free(gpointer user_data)
g_free(service->private_key_file);
g_free(service->private_key_passphrase);
g_free(service->phase2);
+ g_free(service->last_dynamic_ip_address);
if (service->stats.timer != NULL)
g_timer_destroy(service->stats.timer);
@@ -5003,6 +5005,24 @@ __connman_service_create_from_provider(struct
connman_provider *provider)
return service;
}
+void __connman_service_set_dhcp_address(struct connman_service *service,
+ const char *address)
+{
+ if (service == NULL)
+ return;
+
+ g_free(service->last_dynamic_ip_address);
+ service->last_dynamic_ip_address = g_strdup(address);
+}
+
+char *__connman_service_get_dhcp_address(struct connman_service *service)
+{
+ if (service == NULL)
+ return NULL;
+
+ return g_strdup(service->last_dynamic_ip_address);
+}
+
static int service_load(struct connman_service *service)
{
const char *ident = service->profile;
@@ -5186,6 +5206,13 @@ static int service_load(struct connman_service *service)
service->pac = str;
}
+ str = g_key_file_get_string(keyfile,
+ service->identifier, "DHCP.LastAddress", NULL);
+ if (str != NULL) {
+ g_free(service->last_dynamic_ip_address);
+ service->last_dynamic_ip_address = str;
+ }
+
done:
g_key_file_free(keyfile);
@@ -5366,6 +5393,15 @@ update:
g_key_file_remove_key(keyfile, service->identifier,
"Proxy.URL", NULL);
+ if (service->last_dynamic_ip_address != NULL &&
+ strlen(service->last_dynamic_ip_address) > 0)
+ g_key_file_set_string(keyfile, service->identifier,
+ "DHCP.LastAddress",
+ service->last_dynamic_ip_address);
+ else
+ g_key_file_remove_key(keyfile, service->identifier,
+ "DHCP.LastAddress", NULL);
+
data = g_key_file_to_data(keyfile, &length, NULL);
if (g_file_set_contents(pathname, data, length, NULL) == FALSE)
--
1.7.1
_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman