Thus it will be possible to handle a connection failure properly in the
wifi plugin, so it will not request the agent for a retry.
---
 gsupplicant/gsupplicant.h |  1 +
 gsupplicant/supplicant.c  | 15 +++++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/gsupplicant/gsupplicant.h b/gsupplicant/gsupplicant.h
index 631e846..cc93d32 100644
--- a/gsupplicant/gsupplicant.h
+++ b/gsupplicant/gsupplicant.h
@@ -325,6 +325,7 @@ bool g_supplicant_peer_is_wps_pin(GSupplicantPeer *peer);
 bool g_supplicant_peer_is_in_a_group(GSupplicantPeer *peer);
 GSupplicantInterface *g_supplicant_peer_get_group_interface(GSupplicantPeer 
*peer);
 bool g_supplicant_peer_is_client(GSupplicantPeer *peer);
+bool g_supplicant_peer_has_requested_connection(GSupplicantPeer *peer);
 
 struct _GSupplicantCallbacks {
        void (*system_ready) (void);
diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c
index 83c6dae..c9c875f 100644
--- a/gsupplicant/supplicant.c
+++ b/gsupplicant/supplicant.c
@@ -235,6 +235,7 @@ struct _GSupplicantPeer {
        GSList *groups;
        bool groups_changed;
        const GSupplicantInterface *current_group_iface;
+       bool connection_requested;
 };
 
 struct _GSupplicantGroup {
@@ -515,6 +516,8 @@ static void callback_peer_request(GSupplicantPeer *peer)
        if (!callbacks_pointer->peer_request)
                return;
 
+       peer->connection_requested = true;
+
        callbacks_pointer->peer_request(peer);
 }
 
@@ -1147,6 +1150,14 @@ bool g_supplicant_peer_is_client(GSupplicantPeer *peer)
        return false;
 }
 
+bool g_supplicant_peer_has_requested_connection(GSupplicantPeer *peer)
+{
+       if (!peer)
+               return false;
+
+       return peer->connection_requested;
+}
+
 static void merge_network(GSupplicantNetwork *network)
 {
        GString *str;
@@ -2733,6 +2744,8 @@ static void signal_peer_changed(const char *path, 
DBusMessageIter *iter)
 
        callback_peer_changed(peer, G_SUPPLICANT_PEER_GROUP_CHANGED);
 
+       if (!g_supplicant_peer_is_in_a_group(peer))
+               peer->connection_requested = false;
        peer->groups_changed = false;
 }
 
@@ -2825,6 +2838,7 @@ static void signal_group_failure(const char *path, 
DBusMessageIter *iter)
                return;
 
        callback_peer_changed(peer, G_SUPPLICANT_PEER_GROUP_FAILED);
+       peer->connection_requested = false;
 }
 
 static void signal_group_started(const char *path, DBusMessageIter *iter)
@@ -3018,6 +3032,7 @@ static void signal_group_peer_disconnected(const char 
*path, DBusMessageIter *it
                return;
 
        callback_peer_changed(peer, G_SUPPLICANT_PEER_GROUP_DISCONNECTED);
+       peer->connection_requested = false;
 }
 
 static struct {
-- 
1.8.5.5

_______________________________________________
connman mailing list
connman@connman.net
https://lists.connman.net/mailman/listinfo/connman

Reply via email to