diff options
author | Nishant Chaprana <n.chaprana@samsung.com> | 2021-04-07 16:51:44 +0530 |
---|---|---|
committer | Nishant Chaprana <n.chaprana@samsung.com> | 2021-04-21 12:38:31 +0530 |
commit | 770ed7e6a3173290e071662a385b892756ff5072 (patch) | |
tree | 486d6a670d9407bbf59e4b1fd95388c789532a3d | |
parent | 2bd325428feab81382b17b062d4e3b49ede180e4 (diff) | |
download | connman-770ed7e6a3173290e071662a385b892756ff5072.tar.gz connman-770ed7e6a3173290e071662a385b892756ff5072.tar.bz2 connman-770ed7e6a3173290e071662a385b892756ff5072.zip |
Fix autoconnect issue at reboot in TW3submit/tizen/20210421.161229
Change-Id: I7104f40a29f5e45cd2b6ba0391f36d7c37bfa0a2
Signed-off-by: Nishant Chaprana <n.chaprana@samsung.com>
-rw-r--r-- | packaging/connman.spec | 2 | ||||
-rwxr-xr-x | src/connman.h | 2 | ||||
-rwxr-xr-x | src/device.c | 95 | ||||
-rw-r--r-- | src/inet.c | 11 |
4 files changed, 107 insertions, 3 deletions
diff --git a/packaging/connman.spec b/packaging/connman.spec index ed890d1d..ac63c63c 100644 --- a/packaging/connman.spec +++ b/packaging/connman.spec @@ -6,7 +6,7 @@ Name: connman Version: 1.38 -Release: 5 +Release: 6 License: GPL-2.0+ Summary: Connection Manager Url: http://connman.net diff --git a/src/connman.h b/src/connman.h index f4a2f44a..97bb80a5 100755 --- a/src/connman.h +++ b/src/connman.h @@ -645,6 +645,8 @@ int __connman_rfkill_block(enum connman_service_type type, bool block); #if defined TIZEN_EXT char *index2ident(int index, const char *prefix); char *index2addr(int index); +char *_get_wifi_ident(void); +char *_get_wifi_addr(void); #endif #include <connman/network.h> diff --git a/src/device.c b/src/device.c index fa5a0016..ffec3f2c 100755 --- a/src/device.c +++ b/src/device.c @@ -1771,6 +1771,87 @@ void __connman_device_stop_scan(enum connman_service_type type) } #if defined TIZEN_EXT +#define WIFI_MAC "/opt/etc/.mac.info" +#define MAC_ADDR_LEN 18 + +char *_get_wifi_addr(void) +{ + FILE *fp = NULL; + char* rv = 0; + char wifi_mac[MAC_ADDR_LEN + 1]; + char *str; + + fp = fopen(WIFI_MAC, "r"); + if (!fp){ + connman_error("[%s] not present", WIFI_MAC); + return NULL; + } + + rv = fgets(wifi_mac, MAC_ADDR_LEN, fp); + if (!rv) { + connman_error("Failed to get wifi mac address"); + fclose(fp); + return NULL; + } + + str = g_try_malloc0(MAC_ADDR_LEN); + if (!str) { + connman_error("memory allocation failed"); + fclose(fp); + return NULL; + } + + snprintf(str, MAC_ADDR_LEN, "%c%c:%c%c:%c%c:%c%c:%c%c:%c%c", + g_ascii_tolower(wifi_mac[0]), g_ascii_tolower(wifi_mac[1]), + g_ascii_tolower(wifi_mac[3]), g_ascii_tolower(wifi_mac[4]), + g_ascii_tolower(wifi_mac[6]), g_ascii_tolower(wifi_mac[7]), + g_ascii_tolower(wifi_mac[9]), g_ascii_tolower(wifi_mac[10]), + g_ascii_tolower(wifi_mac[12]), g_ascii_tolower(wifi_mac[13]), + g_ascii_tolower(wifi_mac[15]), g_ascii_tolower(wifi_mac[16])); + fclose(fp); + return str; +} + +char *_get_wifi_ident(void) +{ + FILE *fp = NULL; + char* rv = 0; + char wifi_mac[MAC_ADDR_LEN + 1]; + char *str; + + fp = fopen(WIFI_MAC, "r"); + if (!fp){ + connman_error("[%s] not present", WIFI_MAC); + return NULL; + } + + rv = fgets(wifi_mac, MAC_ADDR_LEN, fp); + if (!rv) { + connman_error("Failed to get wifi mac address"); + fclose(fp); + return NULL; + } + + str = g_try_malloc0(MAC_ADDR_LEN); + if (!str) { + connman_error("memory allocation failed"); + fclose(fp); + return NULL; + } + + snprintf(str, MAC_ADDR_LEN, "%c%c%c%c%c%c%c%c%c%c%c%c", + g_ascii_tolower(wifi_mac[0]), g_ascii_tolower(wifi_mac[1]), + g_ascii_tolower(wifi_mac[3]), g_ascii_tolower(wifi_mac[4]), + g_ascii_tolower(wifi_mac[6]), g_ascii_tolower(wifi_mac[7]), + g_ascii_tolower(wifi_mac[9]), g_ascii_tolower(wifi_mac[10]), + g_ascii_tolower(wifi_mac[12]), g_ascii_tolower(wifi_mac[13]), + g_ascii_tolower(wifi_mac[15]), g_ascii_tolower(wifi_mac[16])); + fclose(fp); + return str; +} +#endif + +#if defined TIZEN_EXT char *index2ident(int index, const char *prefix) #else static char *index2ident(int index, const char *prefix) @@ -1897,7 +1978,17 @@ struct connman_device *connman_device_create_from_index(int index) case CONNMAN_DEVICE_TYPE_ETHERNET: case CONNMAN_DEVICE_TYPE_GADGET: case CONNMAN_DEVICE_TYPE_WIFI: +#if defined TIZEN_EXT + if (type == CONNMAN_DEVICE_TYPE_WIFI) + name = _get_wifi_ident(); + if (!name) +#endif name = index2ident(index, ""); +#if defined TIZEN_EXT + if (type == CONNMAN_DEVICE_TYPE_WIFI) + addr = _get_wifi_addr(); + if (!addr) +#endif addr = index2addr(index); break; case CONNMAN_DEVICE_TYPE_BLUETOOTH: @@ -1922,6 +2013,10 @@ struct connman_device *connman_device_create_from_index(int index) ident = index2ident(index, NULL); break; case CONNMAN_DEVICE_TYPE_WIFI: +#if defined TIZEN_EXT + ident = _get_wifi_ident(); + if (!ident) +#endif ident = index2ident(index, NULL); break; case CONNMAN_DEVICE_TYPE_BLUETOOTH: @@ -451,8 +451,15 @@ void connman_inet_update_device_ident(struct connman_device *device) case CONNMAN_DEVICE_TYPE_ETHERNET: case CONNMAN_DEVICE_TYPE_GADGET: case CONNMAN_DEVICE_TYPE_WIFI: - addr = index2addr(index); - ident = index2ident(index, NULL); + if (type == CONNMAN_DEVICE_TYPE_WIFI) + addr = _get_wifi_addr(); + if (!addr) + addr = index2addr(index); + + if (type == CONNMAN_DEVICE_TYPE_WIFI) + ident = _get_wifi_ident(); + if (!ident) + ident = index2ident(index, NULL); break; case CONNMAN_DEVICE_TYPE_CELLULAR: ident = index2ident(index, NULL); |