diff options
author | Daniel Wagner <daniel.wagner@bmw-carit.de> | 2011-03-31 10:02:34 +0200 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2011-03-31 12:40:35 +0200 |
commit | 4dd2ab274860714b88a2c8c84dee7f024760067e (patch) | |
tree | 8699cc7c8a5b3debc8a29224008c50a32b8cb499 | |
parent | a4682c5e09c0aebbc0ffd0689523228f9570ca95 (diff) | |
download | connman-4dd2ab274860714b88a2c8c84dee7f024760067e.tar.gz connman-4dd2ab274860714b88a2c8c84dee7f024760067e.tar.bz2 connman-4dd2ab274860714b88a2c8c84dee7f024760067e.zip |
notify: Add ipconfig notifiers
-rw-r--r-- | include/notifier.h | 3 | ||||
-rw-r--r-- | src/connman.h | 2 | ||||
-rw-r--r-- | src/notifier.c | 13 | ||||
-rw-r--r-- | src/service.c | 9 |
4 files changed, 24 insertions, 3 deletions
diff --git a/include/notifier.h b/include/notifier.h index 4349f839..5efae71b 100644 --- a/include/notifier.h +++ b/include/notifier.h @@ -23,6 +23,7 @@ #define __CONNMAN_NOTIFIER_H #include <connman/service.h> +#include <connman/ipconfig.h> #ifdef __cplusplus extern "C" { @@ -48,6 +49,8 @@ struct connman_notifier { void (*proxy_changed) (struct connman_service *service); void (*service_state_changed) (struct connman_service *service, enum connman_service_state state); + void (*ipconfig_changed) (struct connman_service *service, + struct connman_ipconfig *ipconfig); }; int connman_notifier_register(struct connman_notifier *notifier); diff --git a/src/connman.h b/src/connman.h index a030a42f..aa6d7908 100644 --- a/src/connman.h +++ b/src/connman.h @@ -604,6 +604,8 @@ void __connman_notifier_default_changed(struct connman_service *service); void __connman_notifier_proxy_changed(struct connman_service *service); void __connman_notifier_service_state_changed(struct connman_service *service, enum connman_service_state state); +void __connman_notifier_ipconfig_changed(struct connman_service *service, + struct connman_ipconfig *ipconfig); connman_bool_t __connman_notifier_is_registered(enum connman_service_type type); connman_bool_t __connman_notifier_is_enabled(enum connman_service_type type); diff --git a/src/notifier.c b/src/notifier.c index f02f2dac..846546bc 100644 --- a/src/notifier.c +++ b/src/notifier.c @@ -437,6 +437,19 @@ void __connman_notifier_service_state_changed(struct connman_service *service, } } +void __connman_notifier_ipconfig_changed(struct connman_service *service, + struct connman_ipconfig *ipconfig) +{ + GSList *list; + + for (list = notifier_list; list; list = list->next) { + struct connman_notifier *notifier = list->data; + + if (notifier->ipconfig_changed) + notifier->ipconfig_changed(service, ipconfig); + } +} + static connman_bool_t technology_supported(enum connman_service_type type) { switch (type) { diff --git a/src/service.c b/src/service.c index 4d5d78cd..92435626 100644 --- a/src/service.c +++ b/src/service.c @@ -1233,7 +1233,8 @@ static void append_provider(DBusMessageIter *iter, void *user_data) } -static void settings_changed(struct connman_service *service) +static void settings_changed(struct connman_service *service, + struct connman_ipconfig *ipconfig) { connman_dbus_property_changed_dict(service->path, CONNMAN_SERVICE_INTERFACE, "IPv4", @@ -1242,6 +1243,8 @@ static void settings_changed(struct connman_service *service) connman_dbus_property_changed_dict(service->path, CONNMAN_SERVICE_INTERFACE, "IPv6", append_ipv6, service); + + __connman_notifier_ipconfig_changed(service, ipconfig); } static void ipv4_configuration_changed(struct connman_service *service) @@ -4348,7 +4351,7 @@ static void service_ip_bound(struct connman_ipconfig *ipconfig) CONNMAN_SERVICE_STATE_READY, CONNMAN_IPCONFIG_TYPE_IPV6); - settings_changed(service); + settings_changed(service, ipconfig); } static void service_ip_release(struct connman_ipconfig *ipconfig) @@ -4377,7 +4380,7 @@ static void service_ip_release(struct connman_ipconfig *ipconfig) CONNMAN_SERVICE_STATE_DISCONNECT, CONNMAN_IPCONFIG_TYPE_IPV4); - settings_changed(service); + settings_changed(service, ipconfig); } static const struct connman_ipconfig_ops service_ops = { |