diff options
author | Daniel Wagner <daniel.wagner@bmw-carit.de> | 2012-02-01 18:51:45 +0100 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2012-02-13 11:33:17 +0100 |
commit | d9a94c8478156c97f9cca85d824964994a9b54bf (patch) | |
tree | d24a9454a831429e8bef3a165317b207d0711d8e /src/tethering.c | |
parent | e785a37c5a20e198c4841acd937b2533fed96f62 (diff) | |
download | connman-d9a94c8478156c97f9cca85d824964994a9b54bf.tar.gz connman-d9a94c8478156c97f9cca85d824964994a9b54bf.tar.bz2 connman-d9a94c8478156c97f9cca85d824964994a9b54bf.zip |
tethering: Use notifier to update default interface.
Diffstat (limited to 'src/tethering.c')
-rw-r--r-- | src/tethering.c | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/src/tethering.c b/src/tethering.c index c240302a..70c91776 100644 --- a/src/tethering.c +++ b/src/tethering.c @@ -319,8 +319,12 @@ void __connman_tethering_set_disabled(void) DBG("tethering stopped"); } -void __connman_tethering_update_interface(const char *interface) +static void update_tethering_interface(struct connman_service *service) { + char *interface; + + interface = connman_service_get_interface(service); + DBG("interface %s", interface); g_free(default_interface); @@ -329,16 +333,19 @@ void __connman_tethering_update_interface(const char *interface) disable_nat(interface); default_interface = NULL; - return; + goto out; } default_interface = g_strdup(interface); __sync_synchronize(); if (tethering_enabled == 0) - return; + goto out; enable_nat(interface); + +out: + g_free(interface); } static void setup_tun_interface(unsigned int flags, unsigned change, @@ -537,8 +544,15 @@ int __connman_private_network_release(const char *path) return 0; } +static struct connman_notifier tethering_notifier = { + .name = "tethering", + .default_changed = update_tethering_interface, +}; + int __connman_tethering_init(void) { + int err; + DBG(""); tethering_enabled = 0; @@ -547,6 +561,12 @@ int __connman_tethering_init(void) if (connection == NULL) return -EFAULT; + err = connman_notifier_register(&tethering_notifier); + if (err < 0) { + dbus_connection_unref(connection); + return err; + } + pn_hash = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, remove_private_network); @@ -565,6 +585,8 @@ void __connman_tethering_cleanup(void) __connman_bridge_remove(BRIDGE_NAME); } + connman_notifier_unregister(&tethering_notifier); + if (connection == NULL) return; |