#Generates MTS_IO_MccMncTable.cpp file by pulling latest MCC/MNC values #from http://mcc-mnc.com #Original Source Idea: https://github.com/musalbas/mcc-mnc-table import re import urllib2 import datetime print "/*!" print " \\file MTS_IO_MccMncTable.cpp" print " \\brief Auto-Generated MCC-MNC Lookup Table" print " \\date " + str(datetime.date.today()) print " \\author sgodinez" print "" print " An Auto-Generated MCC-MNC Lookup Table" print "*/" print "" print "#include " print "#include " print "#include " print "" print "using namespace MTS::IO;" print "" print "MTS::AutoPtr MccMncTable::m_apLock(new MTS::Lock());" print "MccMncTable* MccMncTable::m_pInstance = NULL;" print "" print "MccMncTable* MccMncTable::getInstance() {" print " if(m_pInstance == NULL) {" print " m_apLock->lock();" print " if (m_pInstance == NULL) {" print " m_pInstance = new MccMncTable();" print " }" print " m_apLock->unlock();" print " }" print " return m_pInstance;" print "}" print "" print "MccMncTable::MccMncTable() {" print " createTable();" print "}" print "" print "Json::Value MccMncTable::lookup(const std::string& sMcc, const std::string& sMnc) {" print " uint32_t iMcc, iMnc;" print ' printTrace("[MCCMNC] MCCx[%s] MNCx[%s]", sMcc.c_str(), sMnc.c_str());' print " if(!MTS::Text::parseHex(iMcc, sMcc)) { return Json::Value::null; }" print " if(!MTS::Text::parseHex(iMnc, sMnc)) { return Json::Value::null; }" print ' printTrace("[MCCMNC] MCC0X[%d] MNC0X[%d]", iMcc, iMnc);' print " if (m_mTable.count(iMcc)) {" print " if(m_mTable[iMcc].count(iMnc)) {" print " std::vector vJson = MTS::Text::split(m_mTable[iMcc][iMnc], ',');" print " Json::Value j;" print ' j["iso"] = vJson[0];' print ' j["country"] = vJson[1];' print ' j["code"] = vJson[2];' print ' j["carrier"] = vJson[3];' print " return j;" print " }" print " }" print "" print " return Json::Value::null;" print "}" print "" print "void MccMncTable::createTable() {" print " std::string sData;" td_re = re.compile('([^<]*)'*6) html = urllib2.urlopen('http://mcc-mnc.com/').read() tbody_start = False for line in html.split('\n'): if '' in line: tbody_start = True elif '' in line: break elif tbody_start: td_search = td_re.search(line) mcc = td_search.group(1).strip().replace(',','') mnc = td_search.group(2).strip().replace(',','') iso = td_search.group(3).strip().replace(',','') countryCode = td_search.group(4).strip().replace(',','') country = td_search.group(5).strip().replace(',','') carrier = td_search.group(6).strip().replace(',','') if mnc != "n/a": mcc_int = int(mcc, 16) if len(mnc) == 2: mnc_int = int(mnc + 'f', 16) else: mnc_int = int(mnc, 16) print ' m_mTable[' + str(mcc_int) + '][' + str(mnc_int) + '] = "' + \ iso + ',' + countryCode + ',' + country + ',' + carrier + '";' else: print " //MCC(" + mcc + ') MNC(N/A) ISO(' + iso + ') Country Code(' + countryCode + ') Country(' + country + ') Carrier(' + carrier + ')' print "}" print ""