From: Marcel Holtmann Date: Thu, 21 May 2009 19:54:52 +0000 (-0700) Subject: Add helper for setting network address and use it X-Git-Tag: maemo-0.19~33 X-Git-Url: https://vcs.maemo.org/git/?p=connman;a=commitdiff_plain;h=5ff3fa9a377546180d6b0b6acb59d3a278ca1896 Add helper for setting network address and use it --- diff --git a/include/network.h b/include/network.h index 3764e08..7710913 100644 --- a/include/network.h +++ b/include/network.h @@ -80,6 +80,8 @@ extern int connman_network_set_connected(struct connman_network *network, 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, diff --git a/plugins/supplicant.c b/plugins/supplicant.c index 6df89d6..cb84cc5 100644 --- a/plugins/supplicant.c +++ b/plugins/supplicant.c @@ -150,7 +150,8 @@ enum supplicant_state { 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; @@ -892,25 +893,20 @@ static void extract_addr(DBusMessageIter *value, 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], @@ -1167,7 +1163,8 @@ static void properties_reply(DBusPendingCall *call, void *user_data) 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); diff --git a/src/network.c b/src/network.c index 70f4289..cf0586b 100644 --- a/src/network.c +++ b/src/network.c @@ -23,6 +23,7 @@ #include #endif +#include #include #include @@ -861,6 +862,38 @@ 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 @@ -1052,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);