From 27c7fd4ec4582769b1164be1daaf56e8f070f0f5 Mon Sep 17 00:00:00 2001 From: Martin Xu Date: Thu, 28 Jan 2010 22:38:46 +0800 Subject: [PATCH] Add network->driver->setup() callback function After string value has been set in function connman_network_set_string() call network->driver->setup() to let network driver handle the value. ofono network driver setup call back function handles "Cellular.APN" to set up APN. --- include/network.h | 1 + plugins/ofono.c | 13 +++++++++++-- src/network.c | 14 +++++++++++++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/include/network.h b/include/network.h index 6ab109d..e0b1cc3 100644 --- a/include/network.h +++ b/include/network.h @@ -141,6 +141,7 @@ struct connman_network_driver { void (*remove) (struct connman_network *network); int (*connect) (struct connman_network *network); int (*disconnect) (struct connman_network *network); + int (*setup) (struct connman_network *network, const char *key); }; int connman_network_driver_register(struct connman_network_driver *driver); diff --git a/plugins/ofono.c b/plugins/ofono.c index 571b974..e454dde 100644 --- a/plugins/ofono.c +++ b/plugins/ofono.c @@ -570,8 +570,6 @@ static int network_connect(struct connman_network *network) if (connman_network_get_index(network) >= 0) return -EISCONN; - set_apn(network); - return set_network_active(network, TRUE); } @@ -588,6 +586,16 @@ static void network_remove(struct connman_network *network) DBG("network %p", network); } +static int network_setup(struct connman_network *network, const char *key) +{ + DBG(""); + + if (g_strcmp0(key, "Cellular.APN") == 0) + set_apn(network); + + return 0; +} + static struct connman_network_driver network_driver = { .name = "network", .type = CONNMAN_NETWORK_TYPE_CELLULAR, @@ -595,6 +603,7 @@ static struct connman_network_driver network_driver = { .remove = network_remove, .connect = network_connect, .disconnect = network_disconnect, + .setup = network_setup, }; static void add_network(struct connman_device *device, const char *path) diff --git a/src/network.c b/src/network.c index c233c8f..5698809 100644 --- a/src/network.c +++ b/src/network.c @@ -1017,6 +1017,8 @@ int connman_network_set_roaming(struct connman_network *network, int connman_network_set_string(struct connman_network *network, const char *key, const char *value) { + int err; + DBG("network %p key %s value %s", network, key, value); if (g_strcmp0(key, "Name") == 0) @@ -1060,7 +1062,17 @@ int connman_network_set_string(struct connman_network *network, network->wifi.phase2_auth = g_strdup(value); } - return connman_element_set_string(&network->element, key, value); + err = connman_element_set_string(&network->element, key, value); + if (err < 0) + return err; + + if (network->driver == NULL) + return 0; + + if (network->driver->setup) + return network->driver->setup(network, key); + + return 0; } /** -- 2.7.4