35 QMutex IP2C::instanceMutex;
36 IP2C *IP2C::staticInstance =
nullptr;
38 IP2C *IP2C::instance()
40 if (staticInstance ==
nullptr)
42 QMutexLocker locker(&instanceMutex);
43 if (staticInstance ==
nullptr)
44 staticInstance =
new IP2C();
46 return staticInstance;
49 void IP2C::deinstantiate()
51 if (staticInstance !=
nullptr)
53 delete staticInstance;
54 staticInstance =
nullptr;
59 : flagLan(
":flags/lan-small"), flagLocalhost(
":flags/localhost-small"),
60 flagUnknown(
":flags/unknown-small")
68 const QPixmap &IP2C::flag(
const QString &countryShortName)
70 if (flags.contains(countryShortName))
71 return flags[countryShortName];
73 QString resName =
":flags/" + countryShortName;
74 QResource res(resName);
78 gLog << tr(
"No flag for country: %1").arg(countryShortName);
79 flags[countryShortName] = flagUnknown;
83 flags[countryShortName] = QPixmap(resName);
84 return flags[countryShortName];
87 bool IP2C::hasData()
const
89 return !database.empty();
97 unsigned int upper = database.size() - 1;
98 unsigned int lower = 0;
99 unsigned int index = database.size() / 2;
100 unsigned int lastIndex = 0xFFFFFFFF;
101 while (index != lastIndex)
105 if (ipaddress < database[index].ipStart)
108 index -= (index - lower) >> 1;
111 else if (ipaddress > database[index].ipEnd)
114 index += (upper - index) >> 1;
117 return database[index];
125 if (isLocalhostAddress(ipaddress))
128 if (isLANAddress(ipaddress))
136 if (!data.isCountryKnown())
142 const QPixmap *pFlag = &flag(data.country);
146 bool IP2C::IP2CData::isCountryKnown()
const
148 return !country.isEmpty() && country !=
"ZZZ";