summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeff Hatch <jhatch@multitech.com>2021-06-02 14:55:50 -0500
committerJeff Hatch <jhatch@multitech.com>2021-06-02 14:55:50 -0500
commit8eb97c149a08f6ec9d938be53868ee426895bf0e (patch)
treefed63fa776088659855a9ae3b2c7f5d221ec3a25 /src
parentbcd5443bcfff3e17ee120c305bbfd0ce2c812b21 (diff)
parentbc2875140ba6a91eaeab8e9626a212986dcf5d4d (diff)
downloadlibmts-io-1.0.26.tar.gz
libmts-io-1.0.26.tar.bz2
libmts-io-1.0.26.zip
Merge branch 'sk/GP-1111-carrier-detection' into 'master' 1.0.26
[GP-1111] mPower R. Apr 2021: +CEMODE shall be set to CEMODE=2 See merge request !40
Diffstat (limited to 'src')
-rw-r--r--src/MTS_IO_CdmaRadio.cpp10
-rw-r--r--src/MTS_IO_CellularRadio.cpp278
-rw-r--r--src/MTS_IO_ICellularRadio.cpp2
-rw-r--r--src/MTS_IO_MccMncTable.cpp3311
4 files changed, 1924 insertions, 1677 deletions
diff --git a/src/MTS_IO_CdmaRadio.cpp b/src/MTS_IO_CdmaRadio.cpp
index f84fd34..de02055 100644
--- a/src/MTS_IO_CdmaRadio.cpp
+++ b/src/MTS_IO_CdmaRadio.cpp
@@ -1290,6 +1290,16 @@ ICellularRadio::CODE CdmaRadio::getNetworkStatus(Json::Value& jData) {
return SUCCESS;
}
+ICellularRadio::CODE CdmaRadio::getSimMccMnc(std::string&) {
+ printTrace("%s| Get MCC/MNC of the home network from the SIM: not applicable", getName().c_str());
+ return NOT_APPLICABLE;
+}
+
+ICellularRadio::CODE CdmaRadio::getSimMccMnc(std::string&, std::string&) {
+ printTrace("%s| Get MCC/MNC of the home network from the SIM: not applicable", getName().c_str());
+ return NOT_APPLICABLE;
+}
+
std::string CdmaRadio::getMeidLastSix() {
std::string sMeid;
if(getMeid(sMeid) != SUCCESS || sMeid.size() != 14) {
diff --git a/src/MTS_IO_CellularRadio.cpp b/src/MTS_IO_CellularRadio.cpp
index c2fcfad..1850a60 100644
--- a/src/MTS_IO_CellularRadio.cpp
+++ b/src/MTS_IO_CellularRadio.cpp
@@ -425,26 +425,21 @@ ICellularRadio::CODE CellularRadio::getType(std::string& sType) {
ICellularRadio::CODE CellularRadio::getCarrier(std::string& sCarrier) {
printTrace("%s| Get Carrier", m_sName.c_str());
- if(m_sCarrier == "") {
- Json::Value jData;
- if(getNetworkStatus(jData) == SUCCESS) {
- if(jData.isMember(ICellularRadio::KEY_MCC) && jData.isMember(ICellularRadio::KEY_MNC)) {
- std::string sMcc = jData[ICellularRadio::KEY_MCC].asString();
- std::string sMnc = jData[ICellularRadio::KEY_MNC].asString();
- Json::Value jLookup = MccMncTable::getInstance()->lookup(sMcc, sMnc);
- printTrace("%s| MCC-MNC Lookup: [%s][%s][%s]", m_sName.c_str(),
- sMcc.c_str(), sMnc.c_str(), jLookup.toStyledString().c_str());
- if(jLookup.isMember(ICellularRadio::KEY_CARRIER)) {
- m_sCarrier = jLookup[ICellularRadio::KEY_CARRIER].asString();
- } else {
- printWarning("%s| MCC-MNC Lookup did not contain carrier", m_sName.c_str());
- return FAILURE;
- }
+ if (m_sCarrier == "") {
+ std::string sMcc;
+ std::string sMnc;
+ if (getSimMccMnc(sMcc, sMnc) == CODE::SUCCESS) {
+ Json::Value jLookup = MccMncTable::getInstance()->lookup(sMcc, sMnc);
+ printTrace("%s| MCC-MNC Lookup: [%s][%s][%s]", m_sName.c_str(),
+ sMcc.c_str(), sMnc.c_str(), jLookup.toStyledString().c_str());
+ if (jLookup.isMember(ICellularRadio::KEY_CARRIER)) {
+ m_sCarrier = jLookup[ICellularRadio::KEY_CARRIER].asString();
} else {
- printWarning("%s| Network Status did no contain MCC or MNC", m_sName.c_str());
+ printWarning("%s| MCC-MNC Lookup did not contain carrier", m_sName.c_str());
return FAILURE;
}
} else {
+ printWarning("%s| SIM did no contain MCC or MNC", m_sName.c_str());
return FAILURE;
}
}
@@ -935,24 +930,49 @@ ICellularRadio::CODE CellularRadio::unlockSimCard(const Json::Value& jArgs) {
}
ICellularRadio::CODE CellularRadio::getSimCarrierCode(std::string& sCarrierCode) {
- std::string sIccid;
CODE rc;
printTrace("%s| Get carrier code from the SIM card installed", m_sName.c_str());
- rc = getIccid(sIccid);
- if (rc != SUCCESS) {
- printError("%s| Unable to determine SIM carrier: Failed to fetch SIM identifier", m_sName.c_str());
- return rc;
- }
+ do {
+ // Try to detect based on the ICCID
+ std::string sIccid;
- printTrace("%s| Fetched ICCID: [%s]", m_sName.c_str(), sIccid.c_str());
+ rc = getIccid(sIccid);
+ if (rc != SUCCESS) {
+ printError("%s| Unable to determine SIM carrier: Failed to fetch SIM identifier", m_sName.c_str());
+ break;
+ }
- rc = getSimCarrierCode(sIccid, sCarrierCode);
- if (rc != SUCCESS) {
- printError("%s| Unable to determine SIM carrier: Unable to extract carrier from the SIM identifier", m_sName.c_str());
- return rc;
- }
+ printTrace("%s| Fetched ICCID: [%s]", m_sName.c_str(), sIccid.c_str());
+
+ rc = getSimCarrierCode(sIccid, sCarrierCode);
+ if (rc != SUCCESS) {
+ printError("%s| Unable to determine SIM carrier: Unable to extract carrier from the SIM identifier", m_sName.c_str());
+ break;
+ }
+
+ if (sCarrierCode != VALUE_UNKNOWN) {
+ rc = SUCCESS;
+ break;
+ }
+
+ // Fallback to the MCC/MNC detection
+ std::string sMcc;
+ std::string sMnc;
+
+ rc = getSimMccMnc(sMcc, sMnc);
+ if (rc != SUCCESS) {
+ printError("%s| Unable to determine SIM carrier: Failed to fetch MCC/MNC from the SIM", m_sName.c_str());
+ break;
+ }
+
+ rc = getSimCarrierCode(sMcc, sMnc, sCarrierCode);
+ if (rc != SUCCESS) {
+ printError("%s| Unable to determine SIM carrier: Unable to extract carrier from MCC/MNC of the SIM", m_sName.c_str());
+ break;
+ }
+ } while(false);
printTrace("%s| Detected carrier code: [%s]", m_sName.c_str(), sCarrierCode.c_str());
return rc;
@@ -970,13 +990,213 @@ ICellularRadio::CODE CellularRadio::getSimCarrierCode(const std::string& sIccid,
sCarrierCode = VALUE_CARRIER_CODE_ATT;
} else {
// All other carriers for which ICCID prefixes are not defined
- printWarning("%s| Carrier is unknown for this SIM ID: [%s]", m_sName.c_str(), sIccid.c_str());
+ printWarning("%s| Carrier code is unknown for this SIM ID: [%s]", m_sName.c_str(), sIccid.c_str());
sCarrierCode = VALUE_UNKNOWN;
}
return SUCCESS; // no error cases for now
}
+ICellularRadio::CODE CellularRadio::getSimCarrierCode(const std::string& sMcc, const std::string& sMnc, std::string& sCarrierCode) {
+ const Json::Value& jLookup = MccMncTable::getInstance()->lookup(sMcc, sMnc);
+
+ do {
+ printTrace("%s| MCC-MNC Lookup: [%s][%s][%s]", m_sName.c_str(),
+ sMcc.c_str(), sMnc.c_str(), jLookup.toStyledString().c_str());
+
+ if (jLookup.isNull()) {
+ printWarning("%s| Carrier code is unknown for this MCC/NNC combination: [%s][%s]", m_sName.c_str(), sMcc.c_str(), sMnc.c_str());
+ sCarrierCode = VALUE_UNKNOWN;
+ break;
+ }
+
+ if (jLookup["carrierCode"].asString().empty()) {
+ printWarning("%s| Carrier code is unknown for this MCC/MNC combination: [%s][%s]", m_sName.c_str(), sMcc.c_str(), sMnc.c_str());
+ sCarrierCode = VALUE_UNKNOWN;
+ break;
+ }
+
+ sCarrierCode = jLookup["carrierCode"].asString();
+ printTrace("%s| Detected carrier code by MCC/MNC: [%s]", m_sName.c_str(), sCarrierCode.c_str());
+ } while (false);
+
+ return CODE::SUCCESS;
+}
+
+ICellularRadio::CODE CellularRadio::simAccessReadBinary(uint16_t iFileId, uint8_t iP1, uint8_t iP2, uint8_t iLe, std::string& sResult) {
+ printTrace("%s| Read binary from the SIM Elementary File", m_sName.c_str());
+
+ // +CRSM=176,<fileid>,<P1>,<P2>,<P3/Le>[,<data>[,<pathid>]]
+ std::string sCmd = "AT+CRSM=176,";
+ sCmd += MTS::Text::format(iFileId);
+ sCmd += ',';
+ sCmd += MTS::Text::format(iP1);
+ sCmd += ',';
+ sCmd += MTS::Text::format(iP2);
+ sCmd += ',';
+ sCmd += MTS::Text::format(iLe);
+
+ std::string sRawResponse = sendCommand(sCmd, DEFAULT_BAIL_STRINGS, 3000);
+ printTrace("%s| Raw response from the radio: [%s]", m_sName.c_str(), sRawResponse.c_str());
+
+ if (sRawResponse.empty()) {
+ printError("%s| No response from the radio in 3 seconds.", m_sName.c_str());
+ return CODE::NO_RESPONSE;
+ }
+
+ if (sRawResponse.rfind(RSP_ERROR) != std::string::npos) {
+ printError("%s| Failed to read from the SIM Elementary File: [%s]", m_sName.c_str(), sRawResponse.c_str());
+ return CODE::ERROR;
+ }
+
+ // Trim the output to remove excess whitespaces and line separators.
+ sRawResponse = MTS::Text::trim(sRawResponse);
+
+ // The response should start with "+CRSM: ".
+ const std::string sResponsePrefix = "+CRSM: ";
+ if (sRawResponse.rfind(sResponsePrefix, 0) != 0) {
+ printError("%s| Unexpected response from the radio: [%s]", m_sName.c_str(), sRawResponse.c_str());
+ return CODE::FAILURE;
+ }
+
+ // Select eveything between the prefix and the next line.
+ auto eolPos = sRawResponse.find(CR, sResponsePrefix.size());
+ sRawResponse = sRawResponse.substr(sResponsePrefix.size(), eolPos - sResponsePrefix.size());
+
+ // Split the output by commas. Example: 144,0,"00FFFF02"
+ auto vOutput = MTS::Text::split(sRawResponse, ',', 3);
+ if (vOutput.size() < 3) {
+ printError("%s| Unexpected response from the radio: [%s]", m_sName.c_str(), sRawResponse.c_str());
+ return CODE::FAILURE;
+ }
+
+ // Two unquoted integers
+ const std::string& sSw1 = vOutput[0];
+ const std::string& sSw2 = vOutput[1];
+
+ // Check if the SIM indicates any errors
+ if (sSw1 != "144" || sSw2 != "0") {
+ printError("%s| Unexpected response from the SIM: [%s]", m_sName.c_str(), sRawResponse.c_str());
+ return CODE::FAILURE;
+ }
+
+ // Quectel radios quote the third element of the output. Remove the quoting.
+ const std::string& sResponse = MTS::Text::trim(vOutput[2], '"');
+
+ sResult = sResponse;
+ return CODE::SUCCESS;
+}
+
+ICellularRadio::CODE CellularRadio::getSimMncLength(uint8_t& iLength) {
+ printTrace("%s| Get SIM MNC length", m_sName.c_str());
+
+ const int iEfadId = 0x6FAD;
+ const uint8_t iOffsetHigh = 0;
+ const uint8_t iOffsetLow = 0;
+ const uint8_t iNumBytes = 0;
+
+ CODE rc;
+ std::string sEFadContent;
+
+ rc = simAccessReadBinary(iEfadId, iOffsetLow, iOffsetHigh, iNumBytes, sEFadContent);
+ if (rc != CODE::SUCCESS) {
+ printError("%s| Failed to determine the SIM MNC length", m_sName.c_str());
+ return rc;
+ }
+
+ // length of MNC in the IMSI is stored in byte 4 of EFad (indexing from 1)
+ const uint8_t iMncLengthEfadIdx = 4;
+ const uint8_t iCharsPerByte = 2;
+ const uint8_t iMinEFadLength = iMncLengthEfadIdx * iCharsPerByte;
+
+ if (sEFadContent.size() < iMinEFadLength) {
+ printError("%s| SIM EFad does not contain an MNC length byte: [%s]", m_sName.c_str(), sEFadContent.c_str());
+ return CODE::FAILURE;
+ }
+
+ // read byte 4 of EFad (indexing from 1) with the MNC length
+ const size_t iMncStartPosition = (iMncLengthEfadIdx - 1) * iCharsPerByte;
+ const std::string sMncLength = sEFadContent.substr(iMncStartPosition, iCharsPerByte);
+ uint8_t iMncLength;
+
+ // parse hex to unsigned byte
+ if (!MTS::Text::parseHex(iMncLength, sMncLength)) {
+ printError("%s| Unexpected SIM EFad content: [%s]", m_sName.c_str(), sEFadContent.c_str());
+ return CODE::FAILURE;
+ }
+
+ // Only the lower 4 bits are used for MNC length, others are reserved for future use.
+ iMncLength &= 0x0F;
+
+ // Done
+ iLength = iMncLength;
+ printDebug("%s| Got MNC length of [%u]", m_sName.c_str(), iLength);
+
+ return CODE::SUCCESS;
+}
+
+ICellularRadio::CODE CellularRadio::getSimMccMnc(std::string& sMccMnc) {
+ printTrace("%s| Get MCC/MNC of the home network from the SIM", m_sName.c_str());
+
+ CODE rc;
+ std::string sImsi;
+ uint8_t iMncLength;
+
+ do {
+ rc = getImsi(sImsi);
+ if (rc != CODE::SUCCESS) {
+ printError("%s| Failed to get SIM IMSI", m_sName.c_str());
+ break;
+ }
+
+ if (sImsi.size() < 5) {
+ printError("%s| Unexpected IMSI value: [%s]", m_sName.c_str(), sImsi.c_str());
+ rc = CODE::FAILURE;
+ break;
+ }
+
+ rc = getSimMncLength(iMncLength);
+ if (rc != CODE::SUCCESS) {
+ printError("%s| Failed to determine the MNC length", m_sName.c_str());
+ break;
+ }
+
+ // MNC shall be 2 or 3 characters long
+ if (iMncLength < 2 || iMncLength > 3) {
+ printError("%s| Unexpected MNC length: [%u]", m_sName.c_str(), iMncLength);
+ rc = CODE::FAILURE;
+ break;
+ }
+
+ // PLMN code shall be 5 or 6 characters long
+ const size_t mncLength = 3;
+ const size_t plmnCodeLength = mncLength + iMncLength;
+
+ sMccMnc = sImsi.substr(0, plmnCodeLength);
+
+ // Done
+ printDebug("%s| Got MCC/MNC of the home network from the SIM: [%s]", m_sName.c_str(), sMccMnc.c_str());
+ rc = CODE::SUCCESS;
+ } while (false);
+
+ return rc;
+}
+
+ICellularRadio::CODE CellularRadio::getSimMccMnc(std::string& sMcc, std::string& sMnc) {
+ CODE rc;
+ std::string sPlmnCode;
+
+ rc = getSimMccMnc(sPlmnCode);
+
+ if (rc == CODE::SUCCESS) {
+ // PLMN code consists of MCC (first 3 digits) and MNC (second 2 or 3 digits)
+ sMcc = sPlmnCode.substr(0, 3);
+ sMnc = sPlmnCode.substr(3);
+ }
+
+ return rc;
+}
+
ICellularRadio::CODE CellularRadio::validateMsl(const Json::Value&) {
printTrace("%s| Validate MSL", m_sName.c_str());
diff --git a/src/MTS_IO_ICellularRadio.cpp b/src/MTS_IO_ICellularRadio.cpp
index 0483dc8..0a33b59 100644
--- a/src/MTS_IO_ICellularRadio.cpp
+++ b/src/MTS_IO_ICellularRadio.cpp
@@ -52,6 +52,8 @@ const char *MTS::IO::ICellularRadio::KEY_ICCID = "iccid"; //!< Integrated
const char *MTS::IO::ICellularRadio::KEY_MSL = "msl"; //!< Master Subsidy Lock
const char *MTS::IO::ICellularRadio::KEY_SUPPORTED_CELL_MODES = "supportedCellularModes"; //!< Comma-separated list of all supported cellular modes (2g,3g,4g)
const char *MTS::IO::ICellularRadio::KEY_SIM_CARRIER_CODE = "simCarrierCode"; //!< Unique carrier identifier based on the SIM card information.
+const char *MTS::IO::ICellularRadio::KEY_SIM_MCC = "simMcc"; //!< MCC of the home network from the SIM.
+const char *MTS::IO::ICellularRadio::KEY_SIM_MNC = "simMnc"; //!< MNC of the home network from the SIM.
//Dynamic Data
const char *MTS::IO::ICellularRadio::KEY_ROAMING = "roaming"; //!< Indicates whether or not using Home Network
const char *MTS::IO::ICellularRadio::KEY_DATETIME = "datetime"; //!< Date and Time from tower
diff --git a/src/MTS_IO_MccMncTable.cpp b/src/MTS_IO_MccMncTable.cpp
index e375213..054a6fa 100644
--- a/src/MTS_IO_MccMncTable.cpp
+++ b/src/MTS_IO_MccMncTable.cpp
@@ -21,7 +21,7 @@
/*!
\file MTS_IO_MccMncTable.cpp
\brief Auto-Generated MCC-MNC Lookup Table
- \date 2014-12-11
+ \date 2021-05-27
\author sgodinez
An Auto-Generated MCC-MNC Lookup Table
@@ -53,9 +53,13 @@ MccMncTable::MccMncTable() {
Json::Value MccMncTable::lookup(const std::string& sMcc, const std::string& sMnc) {
uint32_t iMcc, iMnc;
+ std::string sNormalizedMnc = sMnc;
printTrace("[MCCMNC] MCCx[%s] MNCx[%s]", sMcc.c_str(), sMnc.c_str());
- if(!MTS::Text::parseHex(iMcc, sMcc)) { return Json::Value::null; }
- if(!MTS::Text::parseHex(iMnc, sMnc)) { return Json::Value::null; }
+ if (sMnc.length() == 2) {
+ sNormalizedMnc += 'f';
+ }
+ if (!MTS::Text::parseHex(iMcc, sMcc)) { return Json::Value::null; }
+ if (!MTS::Text::parseHex(iMnc, sNormalizedMnc)) { return Json::Value::null; }
printTrace("[MCCMNC] MCC0X[%d] MNC0X[%d]", iMcc, iMnc);
if (m_mTable.count(iMcc)) {
if(m_mTable[iMcc].count(iMnc)) {
@@ -65,6 +69,7 @@ Json::Value MccMncTable::lookup(const std::string& sMcc, const std::string& sMnc
j["country"] = vJson[1];
j["code"] = vJson[2];
j["carrier"] = vJson[3];
+ j["carrierCode"] = vJson[4];
return j;
}
}
@@ -74,1650 +79,1660 @@ Json::Value MccMncTable::lookup(const std::string& sMcc, const std::string& sMnc
void MccMncTable::createTable() {
std::string sData;
- m_mTable[649][2191] = "ge,Abkhazia,7,A-Mobile";
- m_mTable[649][1679] = "ge,Abkhazia,7,A-Mobile";
- m_mTable[649][1663] = "ge,Abkhazia,7,Aquafon";
- m_mTable[1042][2191] = "af,Afghanistan,93,Afghan Telecom Corp. (AT)";
- m_mTable[1042][2063] = "af,Afghanistan,93,Afghan Telecom Corp. (AT)";
- m_mTable[1042][31] = "af,Afghanistan,93,Afghan Wireless/AWCC";
- m_mTable[1042][1039] = "af,Afghanistan,93,Areeba/MTN";
- m_mTable[1042][1295] = "af,Afghanistan,93,Etisalat";
- m_mTable[1042][527] = "af,Afghanistan,93,Roshan";
- m_mTable[630][31] = "al,Albania,355,AMC Mobil";
- m_mTable[630][63] = "al,Albania,355,Eagle Mobile";
- m_mTable[630][79] = "al,Albania,355,PLUS Communication Sh.a";
- m_mTable[630][47] = "al,Albania,355,Vodafone";
- m_mTable[1539][31] = "dz,Algeria,213,ATM Mobils";
- m_mTable[1539][47] = "dz,Algeria,213,Orascom / DJEZZY";
- m_mTable[1539][63] = "dz,Algeria,213,Oreedo/Wataniya / Nedjma";
- m_mTable[1348][287] = "as,American Samoa,684,Blue Sky Communications";
- m_mTable[531][63] = "ad,Andorra,376,Mobiland";
- m_mTable[1585][79] = "ao,Angola,244,MoviCel";
- m_mTable[1585][47] = "ao,Angola,244,Unitel";
- m_mTable[869][2112] = "ai,Anguilla,1264,Cable and Wireless";
- m_mTable[869][16] = "ai,Anguilla,1264,Digicell / Wireless Vent. Ltd";
- m_mTable[836][48] = "ag,Antigua and Barbuda,1268,APUA PCS";
- m_mTable[836][2336] = "ag,Antigua and Barbuda,1268,C & W";
- m_mTable[836][2352] = "ag,Antigua and Barbuda,1268,DigiCel/Cing. Wireless";
- m_mTable[1826][784] = "ar,Argentina Republic,54,Claro/ CTI/AMX";
- m_mTable[1826][816] = "ar,Argentina Republic,54,Claro/ CTI/AMX";
- m_mTable[1826][800] = "ar,Argentina Republic,54,Claro/ CTI/AMX";
- m_mTable[1826][16] = "ar,Argentina Republic,54,Compania De Radiocomunicaciones Moviles SA";
- m_mTable[1826][112] = "ar,Argentina Republic,54,Movistar/Telefonica";
- m_mTable[1826][32] = "ar,Argentina Republic,54,Nextel";
- m_mTable[1826][833] = "ar,Argentina Republic,54,Telecom Personal S.A.";
- m_mTable[643][31] = "am,Armenia,374,ArmenTel/Beeline";
- m_mTable[643][79] = "am,Armenia,374,Karabakh Telecom";
- m_mTable[643][271] = "am,Armenia,374,Orange";
- m_mTable[643][95] = "am,Armenia,374,Vivacell";
- m_mTable[867][527] = "aw,Aruba,297,Digicel";
- m_mTable[867][31] = "aw,Aruba,297,Setar GSM";
- m_mTable[1285][335] = "au,Australia,61,AAPT Ltd.";
- m_mTable[1285][591] = "au,Australia,61,Advanced Comm Tech Pty.";
- m_mTable[1285][159] = "au,Australia,61,Airnet Commercial Australia Ltd..";
- m_mTable[1285][79] = "au,Australia,61,Department of Defense";
- m_mTable[1285][623] = "au,Australia,61,Dialogue Communications Pty Ltd";
- m_mTable[1285][303] = "au,Australia,61,H3G Ltd.";
- m_mTable[1285][111] = "au,Australia,61,H3G Ltd.";
- m_mTable[1285][2191] = "au,Australia,61,Localstar Holding Pty. Ltd";
- m_mTable[1285][415] = "au,Australia,61,Lycamobile Pty Ltd";
- m_mTable[1285][143] = "au,Australia,61,Railcorp/Vodafone";
- m_mTable[1285][2463] = "au,Australia,61,Railcorp/Vodafone";
- m_mTable[1285][319] = "au,Australia,61,Railcorp/Vodafone";
- m_mTable[1285][2319] = "au,Australia,61,Singtel Optus";
- m_mTable[1285][47] = "au,Australia,61,Singtel Optus";
- m_mTable[1285][31] = "au,Australia,61,Telstra Corp. Ltd.";
- m_mTable[1285][287] = "au,Australia,61,Telstra Corp. Ltd.";
- m_mTable[1285][1823] = "au,Australia,61,Telstra Corp. Ltd.";
- m_mTable[1285][1839] = "au,Australia,61,Telstra Corp. Ltd.";
- m_mTable[1285][95] = "au,Australia,61,The Ozitel Network Pty.";
- m_mTable[1285][367] = "au,Australia,61,Victorian Rail Track Corp. (VicTrack)";
- m_mTable[1285][63] = "au,Australia,61,Vodafone";
- m_mTable[1285][127] = "au,Australia,61,Vodafone";
- m_mTable[562][31] = "at,Austria,43,A1 MobilKom";
- m_mTable[562][287] = "at,Austria,43,A1 MobilKom";
- m_mTable[562][159] = "at,Austria,43,A1 MobilKom";
- m_mTable[562][47] = "at,Austria,43,A1 MobilKom";
- m_mTable[562][351] = "at,Austria,43,T-Mobile/Telering";
- m_mTable[562][15] = "at,Austria,43,Fix Line";
- m_mTable[562][335] = "at,Austria,43,H3G";
- m_mTable[562][271] = "at,Austria,43,H3G";
- m_mTable[562][111] = "at,Austria,43,A1/Orange/One Connect";
- m_mTable[562][303] = "at,Austria,43,A1/Orange/One Connect";
- m_mTable[562][95] = "at,Austria,43,A1/Orange/One Connect";
- m_mTable[562][127] = "at,Austria,43,T-Mobile/Telering";
- m_mTable[562][79] = "at,Austria,43,T-Mobile/Telering";
- m_mTable[562][63] = "at,Austria,43,T-Mobile/Telering";
- m_mTable[562][143] = "at,Austria,43,Telefonica";
- m_mTable[1024][31] = "az,Azerbaijan,994,Azercell Telekom B.M.";
- m_mTable[1024][79] = "az,Azerbaijan,994,Azerfon.";
- m_mTable[1024][63] = "az,Azerbaijan,994,Caspian American Telecommunications LLC (CATEL)";
- m_mTable[1024][47] = "az,Azerbaijan,994,J.V. Bakcell GSM 2000";
- m_mTable[868][783] = "bs,Bahamas,1242,Bahamas Telco. Comp.";
- m_mTable[868][927] = "bs,Bahamas,1242,Bahamas Telco. Comp.";
- m_mTable[868][912] = "bs,Bahamas,1242,Bahamas Telco. Comp.";
- m_mTable[868][63] = "bs,Bahamas,1242,Smart Communications";
- m_mTable[1062][31] = "bh,Bahrain,973,Batelco";
- m_mTable[1062][47] = "bh,Bahrain,973,ZAIN/Vodafone";
- m_mTable[1062][79] = "bh,Bahrain,973,VIVA";
- m_mTable[1136][47] = "bd,Bangladesh,880,Robi/Aktel";
- m_mTable[1136][95] = "bd,Bangladesh,880,Citycell";
- m_mTable[1136][111] = "bd,Bangladesh,880,Citycell";
- m_mTable[1136][31] = "bd,Bangladesh,880,GrameenPhone";
- m_mTable[1136][63] = "bd,Bangladesh,880,Orascom";
- m_mTable[1136][79] = "bd,Bangladesh,880,TeleTalk";
- m_mTable[1136][127] = "bd,Bangladesh,880,Airtel/Warid";
- m_mTable[834][1536] = "bb,Barbados,1246,C & W BET Ltd.";
- m_mTable[834][2064] = "bb,Barbados,1246,Cingular Wireless";
- m_mTable[834][1872] = "bb,Barbados,1246,Digicel";
- m_mTable[834][80] = "bb,Barbados,1246,Digicel";
- m_mTable[834][2080] = "bb,Barbados,1246,Sunbeach";
- m_mTable[599][63] = "by,Belarus,375,BelCel JV";
- m_mTable[599][79] = "by,Belarus,375,BeST";
- m_mTable[599][31] = "by,Belarus,375,Mobile Digital Communications";
- m_mTable[599][47] = "by,Belarus,375,MTS";
- m_mTable[518][527] = "be,Belgium,32,Base/KPN";
- m_mTable[518][31] = "be,Belgium,32,Belgacom/Proximus";
- m_mTable[518][111] = "be,Belgium,32,Lycamobile Belgium";
- m_mTable[518][271] = "be,Belgium,32,Mobistar/Orange";
- m_mTable[518][47] = "be,Belgium,32,SNCT/NMBS";
- m_mTable[518][95] = "be,Belgium,32,Telenet BidCo NV";
- m_mTable[1794][1663] = "bz,Belize,501,DigiCell";
- m_mTable[1794][1679] = "bz,Belize,501,International Telco (INTELCO)";
- m_mTable[1558][79] = "bj,Benin,229,Bell Benin/BBCOM";
- m_mTable[1558][47] = "bj,Benin,229,Etisalat/MOOV";
- m_mTable[1558][95] = "bj,Benin,229,GloMobile";
- m_mTable[1558][31] = "bj,Benin,229,Libercom";
- m_mTable[1558][63] = "bj,Benin,229,MTN/Spacetel";
- m_mTable[848][0] = "bm,Bermuda,1441,Bermuda Digital Communications Ltd (BDC)";
- m_mTable[848][2463] = "bm,Bermuda,1441,CellOne Ltd";
- m_mTable[848][271] = "bm,Bermuda,1441,DigiCel / Cingular";
- m_mTable[848][47] = "bm,Bermuda,1441,M3 Wireless Ltd";
- m_mTable[848][31] = "bm,Bermuda,1441,Telecommunications (Bermuda & West Indies) Ltd (Digicel Bermuda)";
- m_mTable[1026][287] = "bt,Bhutan,975,B-Mobile";
- m_mTable[1026][383] = "bt,Bhutan,975,Bhutan Telecom Ltd (BTL)";
- m_mTable[1026][1919] = "bt,Bhutan,975,TashiCell";
- m_mTable[1846][47] = "bo,Bolivia,591,Entel Pcs";
- m_mTable[1846][31] = "bo,Bolivia,591,Nuevatel";
- m_mTable[1846][63] = "bo,Bolivia,591,TELECEL BOLIVIA";
- m_mTable[536][2319] = "ba,Bosnia & Herzegov.,387,BH Mobile";
- m_mTable[536][63] = "ba,Bosnia & Herzegov.,387,Eronet Mobile";
- m_mTable[536][95] = "ba,Bosnia & Herzegov.,387,M-Tel";
- m_mTable[1618][79] = "bw,Botswana,267,beMOBILE";
- m_mTable[1618][31] = "bw,Botswana,267,Mascom Wireless (Pty) Ltd.";
- m_mTable[1618][47] = "bw,Botswana,267,Orange";
- m_mTable[1828][303] = "br,Brazil,55,Claro/Albra/America Movil";
- m_mTable[1828][911] = "br,Brazil,55,Claro/Albra/America Movil";
- m_mTable[1828][95] = "br,Brazil,55,Claro/Albra/America Movil";
- m_mTable[1828][31] = "br,Brazil,55,Vivo S.A./Telemig";
- m_mTable[1828][847] = "br,Brazil,55,CTBC Celular SA (CTBC)";
- m_mTable[1828][831] = "br,Brazil,55,CTBC Celular SA (CTBC)";
- m_mTable[1828][815] = "br,Brazil,55,CTBC Celular SA (CTBC)";
- m_mTable[1828][143] = "br,Brazil,55,TIM";
- m_mTable[1828][927] = "br,Brazil,55,Nextel (Telet)";
- m_mTable[1828][15] = "br,Brazil,55,Nextel (Telet)";
- m_mTable[1828][591] = "br,Brazil,55,Amazonia Celular S/A";
- m_mTable[1828][783] = "br,Brazil,55,Oi (TNL PCS / Oi)";
- m_mTable[1828][799] = "br,Brazil,55,Oi (TNL PCS / Oi)";
- m_mTable[1828][367] = "br,Brazil,55,Brazil Telcom";
- m_mTable[1828][351] = "br,Brazil,55,Sercontel Cel";
- m_mTable[1828][127] = "br,Brazil,55,CTBC/Triangulo";
- m_mTable[1828][415] = "br,Brazil,55,Vivo S.A./Telemig";
- m_mTable[1828][47] = "br,Brazil,55,TIM";
- m_mTable[1828][79] = "br,Brazil,55,TIM";
- m_mTable[1828][63] = "br,Brazil,55,TIM";
- m_mTable[1828][895] = "br,Brazil,55,Unicel do Brasil Telecomunicacoes Ltda";
- m_mTable[1828][271] = "br,Brazil,55,Vivo S.A./Telemig";
- m_mTable[1828][111] = "br,Brazil,55,Vivo S.A./Telemig";
- m_mTable[1828][575] = "br,Brazil,55,Vivo S.A./Telemig";
- m_mTable[1828][287] = "br,Brazil,55,Vivo S.A./Telemig";
- m_mTable[840][1392] = "vg,British Virgin Islands,284,Caribbean Cellular";
- m_mTable[840][1904] = "vg,British Virgin Islands,284,Digicel";
- m_mTable[840][368] = "vg,British Virgin Islands,284,LIME";
- m_mTable[1320][47] = "bn,Brunei,673,b-mobile";
- m_mTable[1320][287] = "bn,Brunei,673,Datastream (DTSCom)";
- m_mTable[1320][31] = "bn,Brunei,673,Telekom Brunei Bhd (TelBru)";
- m_mTable[644][111] = "bg,Bulgaria,359,BTC Mobile EOOD (vivatel)";
- m_mTable[644][63] = "bg,Bulgaria,359,BTC Mobile EOOD (vivatel)";
- m_mTable[644][95] = "bg,Bulgaria,359,Cosmo Mobile EAD/Globul";
- m_mTable[644][31] = "bg,Bulgaria,359,MobilTel AD";
- m_mTable[1555][63] = "bf,Burkina Faso,226,TeleCel";
- m_mTable[1555][31] = "bf,Burkina Faso,226,TeleMob-OnaTel";
- m_mTable[1555][47] = "bf,Burkina Faso,226,AirTel/ZAIN/CelTel";
- m_mTable[1044][31] = "mm,Burma,95,Myanmar Post & Teleco.";
- m_mTable[1602][47] = "bi,Burundi,257,Africel / Safaris";
- m_mTable[1602][143] = "bi,Burundi,257,HiTs Telecom";
- m_mTable[1602][63] = "bi,Burundi,257,Onatel / Telecel";
- m_mTable[1602][127] = "bi,Burundi,257,Smart Mobile / LACELL";
- m_mTable[1602][31] = "bi,Burundi,257,Spacetel / Econet";
- m_mTable[1602][2095] = "bi,Burundi,257,U-COM";
- m_mTable[1110][79] = "kh,Cambodia,855,Cambodia Advance Communications Co. Ltd (CADCOMMS)";
- m_mTable[1110][47] = "kh,Cambodia,855,Hello/Malaysia Telcom";
- m_mTable[1110][143] = "kh,Cambodia,855,Metfone";
- m_mTable[1110][399] = "kh,Cambodia,855,MFone/Camshin";
- m_mTable[1110][31] = "kh,Cambodia,855,Mobitel/Cam GSM";
- m_mTable[1110][63] = "kh,Cambodia,855,QB/Cambodia Adv. Comms.";
- m_mTable[1110][95] = "kh,Cambodia,855,Smart Mobile";
- m_mTable[1110][111] = "kh,Cambodia,855,Smart Mobile";
- m_mTable[1110][159] = "kh,Cambodia,855,Sotelco Ltd (Beeline Cambodia)";
- m_mTable[1572][31] = "cm,Cameroon,237,MTN";
- m_mTable[1572][79] = "cm,Cameroon,237,Nextel";
- m_mTable[1572][47] = "cm,Cameroon,237,Orange";
- m_mTable[770][1618] = "ca,Canada,1,BC Tel Mobility";
- m_mTable[770][1584] = "ca,Canada,1,Bell Aliant";
- m_mTable[770][1552] = "ca,Canada,1,Bell Mobility";
- m_mTable[770][1617] = "ca,Canada,1,Bell Mobility";
- m_mTable[770][1648] = "ca,Canada,1,CityWest Mobility";
- m_mTable[770][865] = "ca,Canada,1,Clearnet";
- m_mTable[770][864] = "ca,Canada,1,Clearnet";
- m_mTable[770][896] = "ca,Canada,1,DMTS Mobility";
- m_mTable[770][1808] = "ca,Canada,1,Globalstar Canada";
- m_mTable[770][1600] = "ca,Canada,1,Latitude Wireless";
- m_mTable[770][880] = "ca,Canada,1,FIDO (Rogers AT&T/ Microcell)";
- m_mTable[770][800] = "ca,Canada,1,mobilicity";
- m_mTable[770][1794] = "ca,Canada,1,MT&T Mobility";
- m_mTable[770][1621] = "ca,Canada,1,MTS Mobility";
- m_mTable[770][1632] = "ca,Canada,1,MTS Mobility";
- m_mTable[770][1793] = "ca,Canada,1,NB Tel Mobility";
- m_mTable[770][1795] = "ca,Canada,1,New Tel Mobility";
- m_mTable[770][1888] = "ca,Canada,1,Public Mobile";
- m_mTable[770][1623] = "ca,Canada,1,Quebectel Mobility";
- m_mTable[770][1824] = "ca,Canada,1,Rogers AT&T Wireless";
- m_mTable[770][1664] = "ca,Canada,1,Sask Tel Mobility";
- m_mTable[770][1620] = "ca,Canada,1,Sask Tel Mobility";
- m_mTable[770][1622] = "ca,Canada,1,Tbay Mobility";
- m_mTable[770][544] = "ca,Canada,1,Telus Mobility";
- m_mTable[770][1619] = "ca,Canada,1,Telus Mobility";
- m_mTable[770][1280] = "ca,Canada,1,Videotron";
- m_mTable[770][1168] = "ca,Canada,1,WIND";
- m_mTable[1573][31] = "cv,Cape Verde,238,CV Movel";
- m_mTable[1573][47] = "cv,Cape Verde,238,T+ Telecom";
- m_mTable[838][80] = "ky,Cayman Islands,1345,Digicel Cayman Ltd";
- m_mTable[838][6] = "ky,Cayman Islands,1345,Digicel Ltd.";
- m_mTable[838][320] = "ky,Cayman Islands,1345,LIME / Cable & Wirel.";
- m_mTable[1571][31] = "cf,Central African Rep.,236,Centrafr. Telecom+";
- m_mTable[1571][79] = "cf,Central African Rep.,236,Nationlink";
- m_mTable[1571][63] = "cf,Central African Rep.,236,Orange/Celca";
- m_mTable[1571][47] = "cf,Central African Rep.,236,Telecel Centraf.";
- m_mTable[1570][79] = "td,Chad,235,Salam/Sotel";
- m_mTable[1570][47] = "td,Chad,235,Tchad Mobile";
- m_mTable[1570][63] = "td,Chad,235,Tigo/Milicom/Tchad Mobile";
- m_mTable[1570][31] = "td,Chad,235,Zain/Airtel/Celtel";
- m_mTable[1840][111] = "cl,Chile,56,Blue Two Chile SA";
- m_mTable[1840][287] = "cl,Chile,56,Celupago SA";
- m_mTable[1840][351] = "cl,Chile,56,Cibeles Telecom SA";
- m_mTable[1840][63] = "cl,Chile,56,Claro";
- m_mTable[1840][271] = "cl,Chile,56,Entel PCS";
- m_mTable[1840][31] = "cl,Chile,56,Entel Telefonia Mov";
- m_mTable[1840][335] = "cl,Chile,56,Netline Telefonica Movil Ltda";
- m_mTable[1840][159] = "cl,Chile,56,Nextel SA";
- m_mTable[1840][95] = "cl,Chile,56,Nextel SA";
- m_mTable[1840][79] = "cl,Chile,56,Nextel SA";
- m_mTable[1840][127] = "cl,Chile,56,TELEFONICA";
- m_mTable[1840][47] = "cl,Chile,56,TELEFONICA";
- m_mTable[1840][303] = "cl,Chile,56,Telestar Movil SA";
- m_mTable[1840][15] = "cl,Chile,56,TESAM SA";
- m_mTable[1840][319] = "cl,Chile,56,Tribe Mobile SPA";
- m_mTable[1840][143] = "cl,Chile,56,VTR Banda Ancha SA";
- m_mTable[1120][127] = "cn,China,86,China Mobile GSM";
- m_mTable[1120][15] = "cn,China,86,China Mobile GSM";
- m_mTable[1120][47] = "cn,China,86,China Mobile GSM";
- m_mTable[1120][79] = "cn,China,86,China Space Mobile Satellite Telecommunications Co. Ltd (China Spacecom)";
- m_mTable[1120][63] = "cn,China,86,China Telecom";
- m_mTable[1120][95] = "cn,China,86,China Telecom";
- m_mTable[1120][111] = "cn,China,86,China Unicom";
- m_mTable[1120][31] = "cn,China,86,China Unicom";
- m_mTable[1842][304] = "co,Colombia,57,Avantel SAS";
- m_mTable[1842][258] = "co,Colombia,57,Movistar";
- m_mTable[1842][259] = "co,Colombia,57,TIGO/Colombia Movil";
- m_mTable[1842][1] = "co,Colombia,57,TIGO/Colombia Movil";
- m_mTable[1842][257] = "co,Colombia,57,Comcel S.A. Occel S.A./Celcaribe";
- m_mTable[1842][2] = "co,Colombia,57,Edatel S.A.";
- m_mTable[1842][291] = "co,Colombia,57,Movistar";
- m_mTable[1842][273] = "co,Colombia,57,TIGO/Colombia Movil";
- m_mTable[1842][322] = "co,Colombia,57,UNE EPM Telecomunicaciones SA ESP";
- m_mTable[1842][32] = "co,Colombia,57,UNE EPM Telecomunicaciones SA ESP";
- m_mTable[1842][340] = "co,Colombia,57,Virgin Mobile Colombia SAS";
- m_mTable[1620][31] = "km,Comoros,269,HURI - SNPT";
- m_mTable[1584][2159] = "cd,Congo Dem. Rep.,243,Orange RDC sarl";
- m_mTable[1584][95] = "cd,Congo Dem. Rep.,243,SuperCell";
- m_mTable[1584][2207] = "cd,Congo Dem. Rep.,243,TIGO/Oasis";
- m_mTable[1584][31] = "cd,Congo Dem. Rep.,243,Vodacom";
- m_mTable[1584][2191] = "cd,Congo Dem. Rep.,243,Yozma Timeturns sprl (YTT)";
- m_mTable[1584][47] = "cd,Congo Dem. Rep.,243,ZAIN CelTel";
- m_mTable[1577][31] = "cg,Congo Republic,242,Airtel Congo SA";
- m_mTable[1577][47] = "cg,Congo Republic,242,Zain/Celtel";
- m_mTable[1577][271] = "cg,Congo Republic,242,MTN/Libertis";
- m_mTable[1577][127] = "cg,Congo Republic,242,Warid";
- m_mTable[1352][31] = "ck,Cook Islands,682,Telecom Cook Islands";
- m_mTable[1810][63] = "cr,Costa Rica,506,Claro";
- m_mTable[1810][47] = "cr,Costa Rica,506,ICE";
- m_mTable[1810][31] = "cr,Costa Rica,506,ICE";
- m_mTable[1810][79] = "cr,Costa Rica,506,Movistar";
- m_mTable[1810][527] = "cr,Costa Rica,506,Virtualis";
- m_mTable[537][31] = "hr,Croatia,385,T-Mobile/Cronet";
- m_mTable[537][47] = "hr,Croatia,385,Tele2";
- m_mTable[537][271] = "hr,Croatia,385,VIPnet d.o.o.";
- m_mTable[872][31] = "cu,Cuba,53,C-COM";
- m_mTable[866][2399] = "cw,Curacao,599,EOCG Wireless NV";
- m_mTable[866][1695] = "cw,Curacao,599,Polycom N.V./ Digicel";
- m_mTable[640][271] = "cy,Cyprus,357,MTN/Areeba";
- m_mTable[640][527] = "cy,Cyprus,357,PrimeTel PLC";
- m_mTable[640][31] = "cy,Cyprus,357,Vodafone/CyTa";
- m_mTable[560][143] = "cz,Czech Rep.,420,Compatel s.r.o.";
- m_mTable[560][47] = "cz,Czech Rep.,420,O2";
- m_mTable[560][31] = "cz,Czech Rep.,420,T-Mobile / RadioMobil";
- m_mTable[560][95] = "cz,Czech Rep.,420,Travel Telekommunikation s.r.o.";
- m_mTable[560][79] = "cz,Czech Rep.,420,Ufone";
- m_mTable[560][2463] = "cz,Czech Rep.,420,Vodafone";
- m_mTable[560][63] = "cz,Czech Rep.,420,Vodafone";
- m_mTable[568][95] = "dk,Denmark,45,ApS KBUS";
- m_mTable[568][575] = "dk,Denmark,45,Banedanmark";
- m_mTable[568][655] = "dk,Denmark,45,CoolTEL ApS";
- m_mTable[568][111] = "dk,Denmark,45,Hi3G";
- m_mTable[568][303] = "dk,Denmark,45,Lycamobile Ltd";
- m_mTable[568][63] = "dk,Denmark,45,Mach Connectivity ApS";
- m_mTable[568][127] = "dk,Denmark,45,";
- m_mTable[568][79] = "dk,Denmark,45,NextGen Mobile Ltd (CardBoardFish)";
- m_mTable[568][271] = "dk,Denmark,45,TDC Denmark";
- m_mTable[568][31] = "dk,Denmark,45,TDC Denmark";
- m_mTable[568][1919] = "dk,Denmark,45,Telenor/Sonofon";
- m_mTable[568][47] = "dk,Denmark,45,Telenor/Sonofon";
- m_mTable[568][527] = "dk,Denmark,45,Telia";
- m_mTable[568][783] = "dk,Denmark,45,Telia";
- m_mTable[1592][31] = "dj,Djibouti,253,Djibouti Telecom SA (Evatis)";
- m_mTable[870][272] = "dm,Dominica,1767,C & W";
- m_mTable[870][32] = "dm,Dominica,1767,Cingular Wireless/Digicel";
- m_mTable[870][80] = "dm,Dominica,1767,Wireless Ventures (Dominica) Ltd (Digicel Dominica)";
- m_mTable[880][47] = "do,Dominican Republic,1809,Claro";
- m_mTable[880][31] = "do,Dominican Republic,1809,Orange";
- m_mTable[880][63] = "do,Dominican Republic,1809,TRIcom";
- m_mTable[880][79] = "do,Dominican Republic,1809,Trilogy Dominicana S. A.";
- m_mTable[1856][47] = "ec,Ecuador,593,Alegro/Telcsa";
- m_mTable[1856][15] = "ec,Ecuador,593,MOVISTAR/OteCel";
- m_mTable[1856][31] = "ec,Ecuador,593,Porta/Conecel";
- m_mTable[1538][31] = "eg,Egypt,20,EMS - Mobinil";
- m_mTable[1538][63] = "eg,Egypt,20,ETISALAT";
- m_mTable[1538][47] = "eg,Egypt,20,Vodafone/Mirsfone";
- m_mTable[1798][31] = "sv,El Salvador,503,CLARO/CTE";
- m_mTable[1798][47] = "sv,El Salvador,503,Digicel";
- m_mTable[1798][95] = "sv,El Salvador,503,INTELFON SA de CV";
- m_mTable[1798][79] = "sv,El Salvador,503,Telefonica";
- m_mTable[1798][63] = "sv,El Salvador,503,Telemovil";
- m_mTable[1575][63] = "gq,Equatorial Guinea,240,HiTs-GE";
- m_mTable[1575][31] = "gq,Equatorial Guinea,240,ORANGE/GETESA";
- m_mTable[1623][31] = "er,Eritrea,291,Eritel";
- m_mTable[584][31] = "ee,Estonia,372,EMT GSM";
- m_mTable[584][47] = "ee,Estonia,372,Radiolinja Eesti";
- m_mTable[584][63] = "ee,Estonia,372,Tele2 Eesti AS";
- m_mTable[584][79] = "ee,Estonia,372,Top Connect OU";
- m_mTable[1590][31] = "et,Ethiopia,251,ETH/MTN";
- m_mTable[1872][1] = "fk,Falkland Islands (Malvinas),500,Cable and Wireless South Atlantic Ltd (Falkland Islands";
- m_mTable[648][63] = "fo,Faroe Islands,298,Edge Mobile Sp/F";
- m_mTable[648][31] = "fo,Faroe Islands,298,Faroese Telecom";
- m_mTable[648][47] = "fo,Faroe Islands,298,Kall GSM";
- m_mTable[1346][47] = "fj,Fiji,679,DigiCell";
- m_mTable[1346][31] = "fj,Fiji,679,Vodafone";
- m_mTable[580][335] = "fi,Finland,358,Alands";
- m_mTable[580][623] = "fi,Finland,358,Compatel Ltd";
- m_mTable[580][319] = "fi,Finland,358,DNA/Finnet";
- m_mTable[580][63] = "fi,Finland,358,DNA/Finnet";
- m_mTable[580][303] = "fi,Finland,358,DNA/Finnet";
- m_mTable[580][79] = "fi,Finland,358,DNA/Finnet";
- m_mTable[580][543] = "fi,Finland,358,Elisa/Saunalahti";
- m_mTable[580][95] = "fi,Finland,358,Elisa/Saunalahti";
- m_mTable[580][2095] = "fi,Finland,358,ID-Mobile";
- m_mTable[580][287] = "fi,Finland,358,Mundio Mobile (Finland) Ltd";
- m_mTable[580][159] = "fi,Finland,358,Nokia Oyj";
- m_mTable[580][271] = "fi,Finland,358,TDC Oy Finland";
- m_mTable[580][2335] = "fi,Finland,358,TeliaSonera";
- m_mTable[520][639] = "fr,France,33,AFONE SA";
- m_mTable[520][2351] = "fr,France,33,Association Plate-forme Telecom";
- m_mTable[520][655] = "fr,France,33,Astrium";
- m_mTable[520][543] = "fr,France,33,Bouygues Telecom";
- m_mTable[520][527] = "fr,France,33,Bouygues Telecom";
- m_mTable[520][2191] = "fr,France,33,Bouygues Telecom";
- m_mTable[520][335] = "fr,France,33,Lliad/FREE Mobile";
- m_mTable[520][127] = "fr,France,33,GlobalStar";
- m_mTable[520][111] = "fr,France,33,GlobalStar";
- m_mTable[520][95] = "fr,France,33,GlobalStar";
- m_mTable[520][671] = "fr,France,33,Orange";
- m_mTable[520][367] = "fr,France,33,Lliad/FREE Mobile";
- m_mTable[520][351] = "fr,France,33,Lliad/FREE Mobile";
- m_mTable[520][607] = "fr,France,33,Lycamobile SARL";
- m_mTable[520][63] = "fr,France,33,MobiquiThings";
- m_mTable[520][591] = "fr,France,33,MobiquiThings";
- m_mTable[520][799] = "fr,France,33,Mundio Mobile (France) Ltd";
- m_mTable[520][623] = "fr,France,33,NRJ";
- m_mTable[520][2207] = "fr,France,33,Virgin Mobile/Omer";
- m_mTable[520][575] = "fr,France,33,Virgin Mobile/Omer";
- m_mTable[520][47] = "fr,France,33,Orange";
- m_mTable[520][31] = "fr,France,33,Orange";
- m_mTable[520][2335] = "fr,France,33,Orange";
- m_mTable[520][287] = "fr,France,33,S.F.R.";
- m_mTable[520][271] = "fr,France,33,S.F.R.";
- m_mTable[520][159] = "fr,France,33,S.F.R.";
- m_mTable[520][319] = "fr,France,33,S.F.R.";
- m_mTable[520][79] = "fr,France,33,SISTEER";
- m_mTable[520][15] = "fr,France,33,Tel/Tel";
- m_mTable[520][559] = "fr,France,33,Transatel SA";
- m_mTable[832][527] = "fg,French Guiana,594,Bouygues/DigiCel";
- m_mTable[832][31] = "fg,French Guiana,594,Orange Caribe";
- m_mTable[832][47] = "fg,French Guiana,594,Outremer Telecom";