diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/MTS_IO_CdmaRadio.cpp | 10 | ||||
| -rw-r--r-- | src/MTS_IO_CellularRadio.cpp | 278 | ||||
| -rw-r--r-- | src/MTS_IO_ICellularRadio.cpp | 2 | ||||
| -rw-r--r-- | src/MTS_IO_MccMncTable.cpp | 3311 |
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"; - m_mTable[832][63] = "fg,French Guiana,594,TelCell GSM"; - m_mTable[832][287] = "fg,French Guiana,594,TelCell GSM"; - m_mTable[1351][351] = "pf,French Polynesia,689,Pacific Mobile Telecom (PMT)"; - m_mTable[1351][527] = "pf,French Polynesia,689,Tikiphone"; - m_mTable[1576][79] = "ga,Gabon,241,Azur/Usan S.A."; - m_mTable[1576][31] = "ga,Gabon,241,Libertis S.A."; - m_mTable[1576][47] = "ga,Gabon,241,MOOV/Telecel"; - m_mTable[1576][63] = "ga,Gabon,241,ZAIN/Celtel Gabon S.A."; - m_mTable[1543][47] = "gm,Gambia,220,Africel"; - m_mTable[1543][63] = "gm,Gambia,220,Comium"; - m_mTable[1543][31] = "gm,Gambia,220,Gamcel"; - m_mTable[1543][79] = "gm,Gambia,220,Q-Cell"; - m_mTable[642][31] = "ge,Georgia,995,Geocell Ltd."; - m_mTable[642][63] = "ge,Georgia,995,Iberiatel Ltd."; - m_mTable[642][47] = "ge,Georgia,995,Magti GSM Ltd."; - m_mTable[642][79] = "ge,Georgia,995,MobiTel/Beeline"; - m_mTable[642][95] = "ge,Georgia,995,Silknet"; - m_mTable[610][383] = "de,Germany,49,E-Plus"; - m_mTable[610][271] = "de,Germany,49,DB Netz AG"; - //MCC(262) MNC(N/A) ISO(de) Country Code(Germany) Country(49) Carrier(Debitel) - m_mTable[610][63] = "de,Germany,49,E-Plus"; - m_mTable[610][95] = "de,Germany,49,E-Plus"; - m_mTable[610][1919] = "de,Germany,49,E-Plus"; - m_mTable[610][303] = "de,Germany,49,E-Plus"; - m_mTable[610][335] = "de,Germany,49,Group 3G UMTS"; - m_mTable[610][1087] = "de,Germany,49,Lycamobile"; - m_mTable[610][319] = "de,Ge |
