[tdls]:Added handling to support more than one app
[platform/core/connectivity/net-config.git] / src / wifi-tdls.c
index 6e331fc..d9b95e4 100755 (executable)
@@ -40,6 +40,7 @@ char *peer_mac = NULL;
 int is_connected = 0;
 static gint tdls_timer_id = 0;
 int is_discover_broadcast = 0;
+int is_timer_expired = 0;
 
 #define TDLS_DISCOVER_TIMOUT 4 /*TDLS Unicast Discovery Timeout*/
 #define TDLS_DISCOVER_BROADCAST_TIMOUT 8 /*TDLS Broadcast Discovery Timeout*/
@@ -101,6 +102,8 @@ static gboolean _tdls_timer_discover_event(gpointer user_data)
        __netconfig_wifi_notify_tdls_discover_event("00:00:00:00:00:00", is_discover_broadcast);
        is_discover_broadcast = 0;
        stop_tdls_timer();
+       is_timer_expired = 1;
+
        return FALSE;
 }
 
@@ -199,6 +202,13 @@ gboolean handle_tdls_discover(Wifi *wifi, GDBusMethodInvocation *context,
        int discover_timeout = 0;
 
        GVariant *message = NULL;
+
+       if (tdls_timer_id > 0) {
+               DBG(" TDLS Discover is already progress !!!");
+               wifi_complete_tdls_discover(wifi, context, NETCONFIG_ERROR_TDLS_ALREADY_DONE);
+               return TRUE;
+       }
+
        message = __netconfig_wifi_tdls_send_dbus_str("TDLSDiscover", (const char*)peer_mac_Addr);
 
        if (message == NULL) {
@@ -220,6 +230,7 @@ gboolean handle_tdls_discover(Wifi *wifi, GDBusMethodInvocation *context,
                discover_timeout = TDLS_DISCOVER_TIMOUT;
        }
 
+       is_timer_expired = 0;
        tdls_timer_id = g_timeout_add_seconds(discover_timeout,
                                        _tdls_timer_discover_event, NULL);
 
@@ -319,7 +330,7 @@ gboolean handle_tdls_channel_switch(Wifi *wifi, GDBusMethodInvocation *context,
        builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
 
        g_variant_builder_add(builder, "{sv}", "PeerAddress", g_variant_new_string(peer_mac_Addr));
-       g_variant_builder_add(builder, "{sv}", "Frequency", g_variant_new_int32(freq));
+       g_variant_builder_add(builder, "{sv}", "Frequency", g_variant_new_uint32(freq));
        g_variant_builder_add(builder, "{sv}", "OperClass", g_variant_new_byte(oper_class));
        params = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
        g_variant_builder_unref(builder);
@@ -408,16 +419,19 @@ void netconfig_wifi_tdls_disconnected_event(GVariant *message)
 
 void netconfig_wifi_tdls_peer_found_event(GVariant *message)
 {
-       DBG("WiFi TDLS Discovery EVENT");
+       DBG("WiFi TDLS Discovery EVENT Received !!");
        const gchar *peer_mac_addr = NULL;
 
-       g_variant_get(message, "(s)", &peer_mac_addr);
-       INFO("Discover Peer Mac Address: [%s]", peer_mac_addr);
+       if (!is_timer_expired) {
 
+               g_variant_get(message, "(s)", &peer_mac_addr);
+               INFO("Discover Peer Mac Address: [%s]", peer_mac_addr);
 
-       if (is_discover_broadcast == 0)
-               stop_tdls_timer();
+               if (is_discover_broadcast == 0)
+                       stop_tdls_timer();
 
-       __netconfig_wifi_notify_tdls_discover_event(peer_mac_addr, is_discover_broadcast);
+               __netconfig_wifi_notify_tdls_discover_event(peer_mac_addr, is_discover_broadcast);
+       } else
+               DBG("Timer expired: Do not process the TDLS Discovery Event");
 }