35 QMutex IP2C::instanceMutex;
36 IP2C *IP2C::staticInstance = NULL;
38 IP2C *IP2C::instance()
40 if (staticInstance == NULL)
42 QMutexLocker locker(&instanceMutex);
43 if (staticInstance == NULL)
45 staticInstance =
new IP2C();
48 return staticInstance;
51 void IP2C::deinstantiate()
53 if (staticInstance != NULL)
55 delete staticInstance;
56 staticInstance = NULL;
61 : flagLan(
":flags/lan-small"), flagLocalhost(
":flags/localhost-small"),
62 flagUnknown(
":flags/unknown-small")
72 QMutexLocker dataAccessMutexLocker(&dataAccessMutex);
74 if (database.isEmpty() || entry.ipStart > database.back().ipStart)
78 else if (entry.ipStart < database.first().ipStart)
80 database.insert(0, entry);
84 QList<IP2CData>::iterator it;
85 for (it = database.begin(); it != database.end(); ++it)
87 if (entry.ipStart < it->ipStart)
89 database.insert(it, entry);
96 const QPixmap &IP2C::flag(
const QString& countryShortName)
98 if (flags.contains(countryShortName))
100 return flags[countryShortName];
103 QString resName =
":flags/" + countryShortName;
104 QResource res(resName);
108 gLog << tr(
"No flag for country: %1").arg(countryShortName);
109 flags[countryShortName] = flagUnknown;
113 flags[countryShortName] = QPixmap(resName);
114 return flags[countryShortName];
119 QMutexLocker dataAccessMutexLocker(&dataAccessMutex);
126 unsigned int upper = database.size()-1;
127 unsigned int lower = 0;
128 unsigned int index = database.size()/2;
129 unsigned int lastIndex = 0xFFFFFFFF;
130 while(index != lastIndex)
134 if(ipaddress < database[index].ipStart)
137 index -= (index-lower)>>1;
140 else if(ipaddress > database[index].ipEnd)
143 index += (upper-index)>>1;
146 return database[index];
154 if (isLocalhostAddress(ipaddress))
159 if (isLANAddress(ipaddress))
164 const IP2CData& data = lookupIP(ipaddress);
166 if (!data.isCountryKnown())
176 const QPixmap* pFlag = &flag(data.country);
180 bool IP2C::IP2CData::isCountryKnown()
const 182 return !country.isEmpty() && country !=
"ZZZ";
IP2CCountryInfo obtainCountryInfo(unsigned int ipaddress)
void appendEntryToDatabase(const IP2CData &entry)
Adds new country entry to the database.
const IP2CData & lookupIP(unsigned int ipaddress)
IP to Country database handler.
Flag and name of the country.