1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
#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 <mts/MTS_IO_MccMncTable.h>"
print "#include <mts/MTS_Logger.h>"
print "#include <mts/MTS_Text.h>"
print ""
print "using namespace MTS::IO;"
print ""
print "MTS::AutoPtr<MTS::Lock> 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<std::string> 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('<td>([^<]*)</td>'*6)
html = urllib2.urlopen('http://mcc-mnc.com/').read()
tbody_start = False
for line in html.split('\n'):
if '<tbody>' in line:
tbody_start = True
elif '</tbody>' 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 ""
|