#include <config.h>
#endif
+#include <errno.h>
#include <string.h>
#include <gdbus.h>
return network->available;
}
+/**
+ * connman_network_set_associating:
+ * @network: network structure
+ * @associating: associating state
+ *
+ * Change associating state of network
+ */
+int connman_network_set_associating(struct connman_network *network,
+ connman_bool_t associating)
+{
+ DBG("network %p associating %d", network, associating);
+
+ if (network->associating == associating)
+ return -EALREADY;
+
+ network->associating = associating;
+
+ if (associating == TRUE) {
+ struct connman_service *service;
+
+ service = __connman_service_lookup_from_network(network);
+ __connman_service_indicate_state(service,
+ CONNMAN_SERVICE_STATE_ASSOCIATION);
+ }
+
+ return 0;
+}
+
static gboolean set_connected(gpointer user_data)
{
struct connman_network *network = user_data;
}
/**
- * connman_network_set_associating:
- * @network: network structure
- * @associating: associating state
- *
- * Change associating state of network
- */
-int connman_network_set_associating(struct connman_network *network,
- connman_bool_t associating)
-{
- DBG("network %p associating %d", network, associating);
-
- if (network->associating == associating)
- return -EALREADY;
-
- network->associating = associating;
-
- if (associating == TRUE) {
- struct connman_service *service;
-
- service = __connman_service_lookup_from_network(network);
- __connman_service_indicate_state(service,
- CONNMAN_SERVICE_STATE_ASSOCIATION);
- }
-
- return 0;
-}
-
-/**
* connman_network_set_connected:
* @network: network structure
* @connected: connected state
*/
int __connman_network_connect(struct connman_network *network)
{
+ int err;
+
+ DBG("network %p", network);
+
if (network->connected == TRUE)
return -EALREADY;
- if (network->driver && network->driver->connect)
- return network->driver->connect(network);
+ if (network->driver == NULL)
+ return -EUNATCH;
+
+ if (network->driver->connect == NULL)
+ return -ENOSYS;
- network->connected = TRUE;
+ __connman_device_disconnect(network->device);
- return 0;
+ err = network->driver->connect(network);
+ if (err == 0) {
+ network->connected = TRUE;
+ set_connected(network);
+ }
+
+ return err;
}
+/**
+ * __connman_network_disconnect:
+ * @network: network structure
+ *
+ * Disconnect network
+ */
int __connman_network_disconnect(struct connman_network *network)
{
+ int err;
+
+ DBG("network %p", network);
+
if (network->connected == FALSE)
return -ENOTCONN;
- __connman_device_set_network(network->device, NULL);
+ if (network->driver == NULL)
+ return -EUNATCH;
- connman_element_unregister_children(&network->element);
+ if (network->driver->disconnect == NULL)
+ return -ENOSYS;
- if (network->driver && network->driver->disconnect)
- return network->driver->disconnect(network);
+ err = network->driver->disconnect(network);
+ if (err == 0) {
+ network->connected = FALSE;
+ set_connected(network);
+ }
- network->connected = FALSE;
+ return err;
+}
- return 0;
+/**
+ * connman_network_set_address:
+ * @network: network structure
+ * @address: binary address value
+ * @size: binary address length
+ *
+ * Set unique address value for network
+ */
+int connman_network_set_address(struct connman_network *network,
+ const void *address, unsigned int size)
+{
+ const unsigned char *addr_octet = address;
+ char *str;
+
+ DBG("network %p size %d", network, size);
+
+ if (size != 6)
+ return -EINVAL;
+
+ str = g_strdup_printf("%02X:%02X:%02X:%02X:%02X:%02X",
+ addr_octet[0], addr_octet[1], addr_octet[2],
+ addr_octet[3], addr_octet[4], addr_octet[5]);
+ if (str == NULL)
+ return -ENOMEM;
+
+ g_free(network->address);
+ network->address = str;
+
+ return connman_element_set_string(&network->element,
+ "Address", network->address);
+}
+
+/**
+ * connman_network_set_name:
+ * @network: network structure
+ * @name: name value
+ *
+ * Set display name value for network
+ */
+int connman_network_set_name(struct connman_network *network,
+ const char *name)
+{
+ DBG("network %p name %s", network, name);
+
+ g_free(network->name);
+ network->name = g_strdup(name);
+
+ return connman_element_set_string(&network->element, "Name", name);
+}
+
+/**
+ * connman_network_set_strength:
+ * @network: network structure
+ * @strength: strength value
+ *
+ * Set signal strength value for network
+ */
+int connman_network_set_strength(struct connman_network *network,
+ connman_uint8_t strength)
+{
+ DBG("network %p strengh %d", network, strength);
+
+ network->strength = strength;
+
+ return connman_element_set_uint8(&network->element,
+ "Strength", strength);
}
/**
{
DBG("network %p key %s value %s", network, key, value);
+ if (g_strcmp0(key, "Name") == 0)
+ return connman_network_set_name(network, value);
+
if (g_str_equal(key, "Address") == TRUE) {
g_free(network->address);
network->address = g_strdup(value);
- } else if (g_str_equal(key, "Name") == TRUE) {
- g_free(network->name);
- network->name = g_strdup(value);
} else if (g_str_equal(key, "Node") == TRUE) {
g_free(network->node);
network->node = g_strdup(value);
{
DBG("network %p key %s value %d", network, key, value);
- if (g_str_equal(key, "Strength") == TRUE)
- network->strength = value;
+ if (g_strcmp0(key, "Strength") == 0)
+ return connman_network_set_strength(network, value);
return connman_element_set_uint8(&network->element, key, value);
}
{
DBG("network %p key %s size %d", network, key, size);
+ if (g_strcmp0(key, "Address") == 0)
+ return connman_network_set_address(network, data, size);
+
if (g_str_equal(key, "WiFi.SSID") == TRUE) {
g_free(network->wifi.ssid);
network->wifi.ssid = g_try_malloc(size);