return NULL;
}
+#if defined TIZEN_EXT
+#define SENDER_PREFIX ",sender='%s'"
+#define PATH_PREFIX ",path='%s'"
+#define IFACE_PREFIX ",interface='%s'"
+#define MEMBER_PREFIX ",member='%s'"
+#define ARG0_PREFIX ",arg0='%s'"
+
+static gboolean check_rule_length(int remains, const char *prefix, const char *data)
+{
+ if (!prefix || !data)
+ return FALSE;
+
+ return strlen(prefix) - 2 + strlen(data) < remains;
+}
+
+static void format_rule(struct filter_data *data, char *rule, size_t size)
+{
+ const char *sender;
+ int offset;
+
+ offset = snprintf(rule, size, "type='signal'");
+ sender = data->name ? : data->owner;
+
+ if (sender &&
+ check_rule_length(size - offset, SENDER_PREFIX, sender))
+ offset += snprintf(rule + offset, size - offset,
+ SENDER_PREFIX, sender);
+ if (data->path &&
+ check_rule_length(size - offset, PATH_PREFIX, data->path))
+ offset += snprintf(rule + offset, size - offset,
+ PATH_PREFIX, data->path);
+ if (data->interface &&
+ check_rule_length(size - offset, IFACE_PREFIX, data->interface))
+ offset += snprintf(rule + offset, size - offset,
+ IFACE_PREFIX, data->interface);
+ if (data->member &&
+ check_rule_length(size - offset, MEMBER_PREFIX, data->member))
+ offset += snprintf(rule + offset, size - offset,
+ MEMBER_PREFIX, data->member);
+ if (data->argument &&
+ check_rule_length(size - offset, ARG0_PREFIX, data->argument))
+ snprintf(rule + offset, size - offset,
+ ARG0_PREFIX, data->argument);
+}
+#else
static void format_rule(struct filter_data *data, char *rule, size_t size)
{
const char *sender;
snprintf(rule + offset, size - offset,
",arg0='%s'", data->argument);
}
+#endif
static gboolean add_match(struct filter_data *data,
DBusHandleMessageFunction filter)
return g_string_free(str, FALSE);
}
+static void update_network_with_best_bss(GSupplicantNetwork *network,
+ struct g_supplicant_bss *best_bss)
+{
+ network->signal = best_bss->signal;
+ network->frequency = best_bss->frequency;
+ network->best_bss = best_bss;
+}
+
static bool update_best_bss(GSupplicantNetwork *network,
struct g_supplicant_bss *bss, struct g_supplicant_bss *best_bss)
{
int score_new;
int score_best;
+ if (network->best_bss == NULL) {
+ update_network_with_best_bss(network, bss);
+ return true;
+ }
+
score_new = calculate_score(
compare_bssid(bss->bssid, network->last_connected_bssid),
get_assoc_reject_cnt(network->assoc_reject_table, bss->bssid),
bss->frequency, bss->signal);
+
score_best = calculate_score(
compare_bssid(network->best_bss->bssid, network->last_connected_bssid),
get_assoc_reject_cnt(network->assoc_reject_table, network->best_bss->bssid),
MAC2STR(bss->bssid), score_new,
MAC2STR(network->best_bss->bssid), score_best);
- network->signal = bss->signal;
- network->frequency = bss->frequency;
- network->best_bss = bss;
+ update_network_with_best_bss(network, bss);
SUPPLICANT_DBG("Update best BSS for %s", network->name);
supplicant_dbus_dict_close(iter, &dict);
}
+#if defined TIZEN_EXT
+static void interface_get_state(const char *key, DBusMessageIter *iter,
+ void *user_data)
+{
+ struct interface_create_data *data = user_data;
+ GSupplicantInterface *interface = NULL;
+ const char *str = NULL;
+
+ SUPPLICANT_DBG("key[%s]", key);
+
+ if (!data) {
+ SUPPLICANT_DBG("data is NULL");
+ return;
+ }
+
+ interface = data->interface;
+ if (!interface) {
+ SUPPLICANT_DBG("interface is NULL");
+ return;
+ }
+
+ if (iter)
+ dbus_message_iter_get_basic(iter, &str);
+
+ if (str) {
+ if (string2state(str) != interface->state)
+ interface->state = string2state(str);
+ }
+
+ if (interface->state == G_SUPPLICANT_STATE_DISABLED)
+ interface->ready = FALSE;
+ else
+ interface->ready = TRUE;
+
+ SUPPLICANT_DBG("state %s (%d)", str, interface->state);
+
+ if (data->callback) {
+ data->callback(0, interface, data->user_data);
+#if defined TIZEN_EXT_WIFI_MESH
+ callback_mesh_support(interface);
+#endif
+ }
+
+ interface_create_data_free(data);
+}
+#endif
+
static void interface_get_result(const char *error,
DBusMessageIter *iter, void *user_data)
{
goto done;
}
+#if defined TIZEN_EXT
+ data->interface = interface;
+ err = supplicant_dbus_property_get(path,
+ SUPPLICANT_INTERFACE ".Interface",
+ "State", interface_get_state, data, NULL);
+
+ if (err == 0)
+ return;
+#endif
+
if (data->callback) {
data->callback(0, interface, data->user_data);
#if !defined TIZEN_EXT