connman_bool_t connected);
extern connman_bool_t connman_network_get_connected(struct connman_network *network);
+extern int connman_network_set_address(struct connman_network *network,
+ const void *address, unsigned int size);
extern int connman_network_set_name(struct connman_network *network,
const char *name);
extern int connman_network_set_strength(struct connman_network *network,
struct supplicant_result {
char *path;
char *name;
- char *addr;
+ unsigned char *addr;
+ unsigned int addr_len;
unsigned char *ssid;
unsigned int ssid_len;
dbus_uint16_t capabilities;
if (addr_len != 6)
return;
- eth = (void *) addr;
-
- result->addr = g_try_malloc0(18);
+ result->addr = g_try_malloc(addr_len);
if (result->addr == NULL)
return;
- snprintf(result->addr, 18, "%02X:%02X:%02X:%02X:%02X:%02X",
- eth->ether_addr_octet[0],
- eth->ether_addr_octet[1],
- eth->ether_addr_octet[2],
- eth->ether_addr_octet[3],
- eth->ether_addr_octet[4],
- eth->ether_addr_octet[5]);
+ memcpy(result->addr, addr, addr_len);
+ result->addr_len = addr_len;
- result->path = g_try_malloc0(18);
+ result->path = g_try_malloc0(13);
if (result->path == NULL)
return;
- snprintf(result->path, 18, "%02x%02x%02x%02x%02x%02x",
+ eth = (void *) addr;
+
+ snprintf(result->path, 13, "%02x%02x%02x%02x%02x%02x",
eth->ether_addr_octet[0],
eth->ether_addr_octet[1],
eth->ether_addr_octet[2],
connman_network_set_protocol(network,
CONNMAN_NETWORK_PROTOCOL_IP);
- connman_network_set_string(network, "Address", result.addr);
+ connman_network_set_address(network, result.addr,
+ result.addr_len);
if (connman_device_add_network(task->device, network) < 0) {
connman_network_unref(network);
#include <config.h>
#endif
+#include <errno.h>
#include <string.h>
#include <gdbus.h>
}
/**
+ * 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
{
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);