Initial maemo support.
[connman] / src / network.c
index 14330d8..cf0586b 100644 (file)
@@ -23,6 +23,7 @@
 #include <config.h>
 #endif
 
+#include <errno.h>
 #include <string.h>
 
 #include <gdbus.h>
@@ -861,6 +862,74 @@ int __connman_network_disconnect(struct connman_network *network)
 }
 
 /**
+ * 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);
+}
+
+/**
  * connman_network_set_string:
  * @network: network structure
  * @key: unique identifier
@@ -873,12 +942,12 @@ int connman_network_set_string(struct connman_network *network,
 {
        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);
@@ -937,8 +1006,8 @@ int connman_network_set_uint8(struct connman_network *network,
 {
        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);
 }
@@ -1016,6 +1085,9 @@ int connman_network_set_blob(struct connman_network *network,
 {
        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);