Skip to content

Commit 2be2a3c

Browse files
RDKEMW-1892 WifiConnect fails for NetworkManager (rdkcentral#125)
Calling WifiConnect without SSID must attempt to connect to last connected or to any of the available known SSID.
1 parent a116e40 commit 2be2a3c

6 files changed

Lines changed: 108 additions & 34 deletions

plugin/NetworkManagerImplementation.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -848,6 +848,8 @@ namespace WPEFramework
848848
NMLOG_DEBUG("checking WiFi signal strength");
849849
GetWiFiSignalQuality(ssid, strength, noise, snr, newSignalQuality);
850850

851+
m_lastConnectedSSID = ssid; // last connected ssid used in wifiConnect
852+
851853
if (oldSignalQuality != newSignalQuality) {
852854
NMLOG_INFO("Notifying WiFiSignalQualityChangedEvent %s", strength.c_str());
853855
oldSignalQuality = newSignalQuality;

plugin/NetworkManagerImplementation.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,7 @@ namespace WPEFramework
291291
public:
292292
std::atomic<bool> m_ethConnected;
293293
std::atomic<bool> m_wlanConnected;
294+
std::string m_lastConnectedSSID;
294295
mutable ConnectivityMonitor connectivityMonitor;
295296
};
296297
}

plugin/NetworkManagerJsonRpc.cpp

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -753,33 +753,35 @@ namespace WPEFramework
753753
NMLOG_INFO("Entry to %s", __FUNCTION__);
754754

755755
if (parameters.HasLabel("ssid"))
756+
{
756757
ssid.ssid = parameters["ssid"].String();
757-
else
758-
returnJson(rc);
759758

760-
if (parameters.HasLabel("passphrase"))
761-
ssid.passphrase = parameters["passphrase"].String();
762-
763-
if (parameters.HasLabel("security"))
764-
ssid.security= static_cast <Exchange::INetworkManager::WIFISecurityMode> (parameters["security"].Number());
765-
766-
// Check Security modes
767-
if (parameters.HasLabel("eap"))
768-
ssid.eap = parameters["eap"].String();
769-
if (parameters.HasLabel("eap_identity"))
770-
ssid.eap_identity = parameters["eap_identity"].String();
771-
if (parameters.HasLabel("ca_cert"))
772-
ssid.ca_cert = parameters["ca_cert"].String();
773-
if (parameters.HasLabel("client_cert"))
774-
ssid.client_cert = parameters["client_cert"].String();
775-
if (parameters.HasLabel("private_key"))
776-
ssid.private_key = parameters["private_key"].String();
777-
if (parameters.HasLabel("private_key_passwd"))
778-
ssid.private_key_passwd = parameters["private_key_passwd"].String();
779-
if (parameters.HasLabel("persist"))
780-
ssid.persist = parameters["persist"].Boolean();
759+
if (parameters.HasLabel("passphrase"))
760+
ssid.passphrase = parameters["passphrase"].String();
761+
762+
if (parameters.HasLabel("security"))
763+
ssid.security= static_cast <Exchange::INetworkManager::WIFISecurityMode> (parameters["security"].Number());
764+
765+
// Check Security modes
766+
if (parameters.HasLabel("eap"))
767+
ssid.eap = parameters["eap"].String();
768+
if (parameters.HasLabel("eap_identity"))
769+
ssid.eap_identity = parameters["eap_identity"].String();
770+
if (parameters.HasLabel("ca_cert"))
771+
ssid.ca_cert = parameters["ca_cert"].String();
772+
if (parameters.HasLabel("client_cert"))
773+
ssid.client_cert = parameters["client_cert"].String();
774+
if (parameters.HasLabel("private_key"))
775+
ssid.private_key = parameters["private_key"].String();
776+
if (parameters.HasLabel("private_key_passwd"))
777+
ssid.private_key_passwd = parameters["private_key_passwd"].String();
778+
if (parameters.HasLabel("persist"))
779+
ssid.persist = parameters["persist"].Boolean();
780+
else
781+
ssid.persist = true;
782+
}
781783
else
782-
ssid.persist = true;
784+
NMLOG_WARNING("ssid not included in wifi connect request !");
783785

784786
if (_networkManager)
785787
rc = _networkManager->WiFiConnect(ssid);

plugin/gnome/NetworkManagerGnomeProxy.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -664,24 +664,24 @@ namespace WPEFramework
664664
uint32_t NetworkManagerImplementation::WiFiConnect(const WiFiConnectTo& ssid /* @in */)
665665
{
666666
uint32_t rc = Core::ERROR_GENERAL;
667-
if(ssid.ssid.empty() || ssid.ssid.size() > 32)
668-
{
669-
NMLOG_WARNING("ssid is invalied");
670-
return rc;
671-
}
672667

673668
// Check the last scanning time and if it exceeds 5 sec do a rescanning
674669
if(!wifi->isWifiScannedRecently())
675670
{
676671
nmEvent->setwifiScanOptions(false);
677672
if(!wifi->wifiScanRequest())
678-
{
679673
NMLOG_WARNING("scanning failed but try to connect");
680-
}
681674
}
682675

683-
if(wifi->wifiConnect(ssid))
676+
if(ssid.ssid.empty() && _instance != NULL)
677+
{
678+
NMLOG_WARNING("ssid is empty activating last connectd ssid !");
679+
if(wifi->activateKnownWifiConnection(_instance->m_lastConnectedSSID))
680+
rc = Core::ERROR_NONE;
681+
}
682+
else if(wifi->wifiConnect(ssid))
684683
rc = Core::ERROR_NONE;
684+
685685
return rc;
686686
}
687687

plugin/gnome/NetworkManagerGnomeWIFI.cpp

Lines changed: 70 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,7 @@ namespace WPEFramework
383383

384384
static void wifiConnectionUpdate(GObject *rmObject, GAsyncResult *res, gpointer user_data)
385385
{
386-
NMRemoteConnection *remote_con = NM_REMOTE_CONNECTION(rmObject);
386+
NMRemoteConnection *remote_con = NM_REMOTE_CONNECTION(rmObject);
387387
wifiManager *_wifiManager = (static_cast<wifiManager*>(user_data));
388388
GVariant *ret = NULL;
389389
GError *error = NULL;
@@ -540,6 +540,74 @@ namespace WPEFramework
540540
return true;
541541
}
542542

543+
bool wifiManager::activateKnownWifiConnection(std::string knownssid)
544+
{
545+
NMAccessPoint *AccessPoint = NULL;
546+
const GPtrArray *wifiConnections = NULL;
547+
NMConnection *m_connection = NULL;
548+
const GPtrArray* ApList = NULL;
549+
const char* specificObjPath = "/";
550+
551+
if(!createClientNewConnection())
552+
return false;
553+
554+
NMDevice *m_wifidevice = getWifiDevice();
555+
if(m_wifidevice == NULL) {
556+
NMLOG_WARNING("wifi state is unmanaged !");
557+
return false;
558+
}
559+
560+
nm_device_set_autoconnect(m_wifidevice, true); // set autoconnect true
561+
562+
if(knownssid.empty())
563+
{
564+
NMLOG_WARNING("ssid not specified !");
565+
return false;
566+
}
567+
568+
wifiConnections = nm_device_get_available_connections(m_wifidevice);
569+
if(wifiConnections == NULL)
570+
{
571+
NMLOG_WARNING("No wifi connection found !");
572+
return false;
573+
}
574+
575+
for (guint i = 0; i < wifiConnections->len; i++)
576+
{
577+
NMConnection *connection = static_cast<NMConnection*>(g_ptr_array_index(wifiConnections, i));
578+
if(connection == NULL)
579+
continue;
580+
581+
const char *connId = nm_connection_get_id(NM_CONNECTION(connection));
582+
if (connId != NULL && strcmp(connId, knownssid.c_str()) == 0)
583+
{
584+
m_connection = g_object_ref(connection);
585+
NMLOG_DEBUG("connection '%s' exists !", knownssid.c_str());
586+
if (m_connection == NULL)
587+
{
588+
NMLOG_ERROR("m_connection == NULL smothing went worng");
589+
return false;
590+
}
591+
break;
592+
}
593+
}
594+
595+
m_isSuccess = false;
596+
if (m_connection != NULL && NM_IS_REMOTE_CONNECTION(m_connection))
597+
{
598+
NMLOG_INFO("activating known wifi '%s' connection", knownssid.c_str());
599+
m_createNewConnection = false; // no need to create new connection
600+
nm_client_activate_connection_async(m_client, NM_CONNECTION(m_connection), m_wifidevice, specificObjPath, NULL, wifiConnectCb, this);
601+
wait(m_loop);
602+
}
603+
else
604+
{
605+
NMLOG_ERROR("'%s' connection not found !", knownssid.c_str());
606+
}
607+
608+
return m_isSuccess;
609+
}
610+
543611
bool wifiManager::wifiConnect(Exchange::INetworkManager::WiFiConnectTo ssidInfo)
544612
{
545613
NMAccessPoint *AccessPoint = NULL;
@@ -856,7 +924,7 @@ namespace WPEFramework
856924
}
857925
if (!ssids.empty())
858926
{
859-
NMLOG_DEBUG("known wifi connections are %s", ssidPrint.c_str());
927+
NMLOG_INFO("known wifi connections are %s", ssidPrint.c_str());
860928
return true;
861929
}
862930

plugin/gnome/NetworkManagerGnomeWIFI.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ namespace WPEFramework
4949

5050
bool isWifiConnected();
5151
bool wifiDisconnect();
52+
bool activateKnownWifiConnection(std::string knownssid);
5253
bool wifiConnectedSSIDInfo(Exchange::INetworkManager::WiFiSSIDInfo &ssidinfo);
5354
bool wifiConnect(Exchange::INetworkManager::WiFiConnectTo ssidInfo);
5455
bool wifiScanRequest(std::string ssidReq = "");

0 commit comments

Comments
 (0)