diff options
author | Mayank Haarit <mayank.h@samsung.com> | 2018-09-18 20:13:57 +0530 |
---|---|---|
committer | Milind Murhekar <m.murhekar@samsung.com> | 2018-10-04 14:34:20 +0530 |
commit | 071fe548f78efbfa84ee6841c013713903a7e28c (patch) | |
tree | 5bd60d5c03e141f5c4c4b25e9b5eeb5c6e329aab /gsupplicant | |
parent | 0ea80470841d34bbfb20de9341f9f8932e5adea5 (diff) | |
download | connman-071fe548f78efbfa84ee6841c013713903a7e28c.tar.gz connman-071fe548f78efbfa84ee6841c013713903a7e28c.tar.bz2 connman-071fe548f78efbfa84ee6841c013713903a7e28c.zip |
[CONNMAN][Change AP's max speed logic]
This patch changes the internal logic of getting
max speed from connected AP.
Change-Id: I7191a09f1d974f1158ce9440cfa6924feca61340
Signed-off-by: Mayank Haarit <mayank.h@samsung.com>
Diffstat (limited to 'gsupplicant')
-rw-r--r-- | gsupplicant/gsupplicant.h | 11 | ||||
-rw-r--r-- | gsupplicant/supplicant.c | 92 |
2 files changed, 103 insertions, 0 deletions
diff --git a/gsupplicant/gsupplicant.h b/gsupplicant/gsupplicant.h index 7e947117..035789e5 100644 --- a/gsupplicant/gsupplicant.h +++ b/gsupplicant/gsupplicant.h @@ -288,6 +288,11 @@ typedef void (*GSupplicantInterfaceCallback) (int result, GSupplicantInterface *interface, void *user_data); +#if defined TIZEN_EXT +typedef void (*GSupplicantMaxSpeedCallback) (int result, + int maxspeed, void *user_data); +#endif + void g_supplicant_interface_cancel(GSupplicantInterface *interface); int g_supplicant_interface_create(const char *ifname, const char *driver, @@ -302,6 +307,12 @@ int g_supplicant_interface_scan(GSupplicantInterface *interface, GSupplicantInterfaceCallback callback, void *user_data); +#if defined TIZEN_EXT +int g_supplicant_interface_signalpoll(GSupplicantInterface *interface, + GSupplicantMaxSpeedCallback callback, + void *user_data); +#endif + int g_supplicant_interface_p2p_find(GSupplicantInterface *interface, GSupplicantInterfaceCallback callback, void *user_data); diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c index 83acfc58..e300f194 100644 --- a/gsupplicant/supplicant.c +++ b/gsupplicant/supplicant.c @@ -314,6 +314,15 @@ struct interface_data { GSupplicantSSID *ssid; }; +#if defined TIZEN_EXT +struct interface_signalpoll_data { + GSupplicantInterface *interface; + char *path; + GSupplicantMaxSpeedCallback callback; + void *user_data; +}; +#endif + struct interface_create_data { char *ifname; char *driver; @@ -5313,6 +5322,89 @@ int g_supplicant_interface_scan(GSupplicantInterface *interface, return ret; } +#if defined TIZEN_EXT +static void interface_signalpoll_result(const char *error, + DBusMessageIter *iter, void *user_data) +{ + struct interface_signalpoll_data *data = user_data; + int err = 0; + dbus_int32_t maxspeed = 0; + DBusMessageIter sub_iter, dict; + + if (error) { + err = -EIO; + SUPPLICANT_DBG("error: %s", error); + goto out; + } + + dbus_message_iter_get_arg_type(iter); + dbus_message_iter_recurse(iter, &sub_iter); + dbus_message_iter_recurse(&sub_iter, &dict); + + while (dbus_message_iter_get_arg_type(&dict) == DBUS_TYPE_DICT_ENTRY) { + DBusMessageIter entry, value; + const char *key; + + dbus_message_iter_recurse(&dict, &entry); + dbus_message_iter_get_basic(&entry, &key); + dbus_message_iter_next(&entry); + dbus_message_iter_recurse(&entry, &value); + + switch (dbus_message_iter_get_arg_type(&value)) { + case DBUS_TYPE_INT32: + if (g_strcmp0(key, "linkspeed") == 0) { + dbus_message_iter_get_basic(&value, &maxspeed); + SUPPLICANT_DBG("linkspeed = %d", maxspeed); + break; + } + } + dbus_message_iter_next(&dict); + } + +out: + if(data->callback) + data->callback(err, maxspeed, data->user_data); + + g_free(data->path); + dbus_free(data); +} + +int g_supplicant_interface_signalpoll(GSupplicantInterface *interface, + GSupplicantMaxSpeedCallback callback, + void *user_data) +{ + struct interface_signalpoll_data *data; + int ret; + + if (!interface) + return -EINVAL; + + if (!system_available) + return -EFAULT; + + data = dbus_malloc0(sizeof(*data)); + if (!data) + return -ENOMEM; + + data->interface = interface; + data->path = g_strdup(interface->path); + data->callback = callback; + data->user_data = user_data; + + ret = supplicant_dbus_method_call(interface->path, + SUPPLICANT_INTERFACE ".Interface", "SignalPoll", + NULL, interface_signalpoll_result, data, + interface); + + if (ret < 0) { + g_free(data->path); + dbus_free(data); + } + + return ret; +} +#endif + static int parse_supplicant_error(DBusMessageIter *iter) { int err = -ECONNABORTED; |