Add network->driver->setup() callback function
authorMartin Xu <martin.xu@intel.com>
Thu, 28 Jan 2010 14:38:46 +0000 (22:38 +0800)
committerMarcel Holtmann <marcel@holtmann.org>
Fri, 29 Jan 2010 07:12:52 +0000 (08:12 +0100)
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
plugins/ofono.c
src/network.c

index 6ab109d..e0b1cc3 100644 (file)
@@ -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);
index 571b974..e454dde 100644 (file)
@@ -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)
index c233c8f..5698809 100644 (file)
@@ -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;
 }
 
 /**