Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #43 from kananoja/master
[ssu] Use Wlan MAC address as the device UID if IMEI is not found.
  • Loading branch information
thp committed Mar 17, 2015
2 parents 218b353 + dc1c334 commit 989d1d6
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 10 deletions.
45 changes: 36 additions & 9 deletions libssu/ssudeviceinfo.cpp
Expand Up @@ -281,11 +281,43 @@ ofonoGetImeis()
return result;
}

static QStringList
getWlanMacs()
{
// Based on QtSystems' qnetworkinfo_linux.cpp
QStringList result;

QStringList dirs = QDir(QLatin1String("/sys/class/net/"))
.entryList(QStringList() << QLatin1String("wlan*"));
foreach (const QString &dir, dirs) {
QFile carrier(QString("/sys/class/net/%1/address").arg(dir));
if (carrier.open(QIODevice::ReadOnly)) {
result.append(QString::fromLatin1(carrier.readAll().simplified().data()));
}
}
return result;
}

static QString
normalizeUid(const QString& uid)
{
// Normalize by stripping colons, dashes and making it lowercase
return uid.trimmed().replace(":", "").replace("-", "").toLower();
}

QString SsuDeviceInfo::deviceUid(){
SsuLog *ssuLog = SsuLog::instance();
QStringList imeis = ofonoGetImeis();
if (imeis.size() > 0) {
return imeis[0];
}

QStringList wlanMacs = getWlanMacs();
if (wlanMacs.size() > 0) {
return normalizeUid(wlanMacs[0]);
}

if (imeis.size() == 0) {
qWarning() << "Could not get IMEI(s) from ofono, trying fallback";
ssuLog->print(LOG_WARNING, "Could not get IMEI(s) from ofono, nor WLAN mac, trying fallback");

// The fallback list is taken from QtSystems' qdeviceinfo_linux.cpp
QStringList fallbackFiles;
Expand All @@ -298,19 +330,14 @@ QString SsuDeviceInfo::deviceUid(){
QFile machineId(filename);
if (machineId.open(QFile::ReadOnly | QFile::Text)) {
QTextStream in(&machineId);

// Normalize by stripping colons, dashes and making it lowercase
return in.readAll().trimmed().replace(":", "").replace("-", "").toLower();
return normalizeUid(in.readAll());
}
}

qCritical() << "Could not read fallback UID - returning empty string";
ssuLog->print(LOG_CRIT, "Could not read fallback UID - returning empty string");
return "";
}

return imeis[0];
}

QStringList SsuDeviceInfo::disabledRepos(){
QStringList result;

Expand Down
3 changes: 2 additions & 1 deletion libssu/ssudeviceinfo.h
Expand Up @@ -54,7 +54,8 @@ class SsuDeviceInfo: public QObject {
Q_INVOKABLE QString deviceModel();
/**
* Calculate the device ID used in ssu requests
* @return QSystemDeviceInfo::imei(), if available, or QSystemDeviceInfo::uniqueDeviceID()
* @return QSystemDeviceInfo::imei(), if available, or QNetworkInfo::macAddress(QNetworkInfo::WlanMode, 0),
* if available, or QSystemDeviceInfo::uniqueDeviceID()
*/
Q_INVOKABLE QString deviceUid();
/**
Expand Down

0 comments on commit 989d1d6

Please sign in to comment.