1 /*
2 * Copyright (C) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "mcc_pool.h"
17
18 using namespace std;
19
20 namespace OHOS {
21 namespace Telephony {
22 std::mutex mccMutex_;
23 std::vector<std::shared_ptr<MccAccess>> MccPool::mccAccessTable_;
24 std::vector<std::string> MccPool::specialMccMnc_;
25 std::vector<std::string> MccPool::indiaMccMnc_;
26 constexpr size_t MCC_ACCESS_TABLE_LEN = 240;
AccessToMcc(int mcc)27 std::shared_ptr<MccAccess> MccPool::AccessToMcc(int mcc)
28 {
29 std::lock_guard<std::mutex> lock(mccMutex_);
30 InitMccTables();
31 auto it = std::find_if(mccAccessTable_.begin(), mccAccessTable_.end(),
32 [mcc](const auto &p) { return p != nullptr && p->mcc_ == mcc; });
33 if (it != mccAccessTable_.end()) {
34 return *it;
35 } else {
36 return std::make_shared<MccAccess>(mcc, "", 0);
37 }
38 }
39
MccCountryCode(int mcc)40 std::string MccPool::MccCountryCode(int mcc)
41 {
42 auto entry = AccessToMcc(mcc);
43 if (entry == nullptr) {
44 return "";
45 }
46 return entry->iso_;
47 }
48
ShortestMncLengthFromMcc(int mcc)49 int MccPool::ShortestMncLengthFromMcc(int mcc)
50 {
51 auto access = AccessToMcc(mcc);
52 if (access == nullptr || access->iso_.empty()) {
53 return MCC_SHORT;
54 } else {
55 return access->mncShortestLength_;
56 }
57 }
58
InitMccTables()59 void MccPool::InitMccTables()
60 {
61 if (mccAccessTable_.size() == 0) {
62 mccAccessTable_.reserve(MCC_ACCESS_TABLE_LEN);
63 AddMccForAsia();
64 AddMccForEurope();
65 AddMccForAfrica();
66 AddMccForNorthAmerica();
67 AddMccForSouthAmerica();
68 AddMccForAustralia();
69 std::sort(mccAccessTable_.begin(), mccAccessTable_.end(), MccPool::MccCompare);
70 }
71 }
72
AddMccForAsia()73 void MccPool::AddMccForAsia()
74 {
75 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GR, "gr", MCC_SHORT));
76 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_NL, "nl", MCC_SHORT));
77 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BE, "be", MCC_SHORT));
78 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_FR, "fr", MCC_SHORT));
79 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MC, "mc", MCC_SHORT));
80 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AD, "ad", MCC_SHORT));
81 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_ES, "es", MCC_SHORT));
82 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_HU, "hu", MCC_SHORT));
83 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BA, "ba", MCC_SHORT));
84 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_HR, "hr", MCC_SHORT));
85 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_RS, "rs", MCC_SHORT));
86 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_IT, "it", MCC_SHORT));
87 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_VA, "va", MCC_SHORT));
88 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_RO, "ro", MCC_SHORT));
89 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CH, "ch", MCC_SHORT));
90 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CZ, "cz", MCC_SHORT));
91 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SK, "sk", MCC_SHORT));
92 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AT, "at", MCC_SHORT));
93 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GB_A, "gb", MCC_SHORT));
94 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GB_B, "gb", MCC_SHORT));
95 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_DK, "dk", MCC_SHORT));
96 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SE, "se", MCC_SHORT));
97 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_NO, "no", MCC_SHORT));
98 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_FI, "fi", MCC_SHORT));
99 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_LT, "lt", MCC_SHORT));
100 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_LV, "lv", MCC_SHORT));
101 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_EE, "ee", MCC_SHORT));
102 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_RU, "ru", MCC_SHORT));
103 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_UA, "ua", MCC_SHORT));
104 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BY, "by", MCC_SHORT));
105 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MD, "md", MCC_SHORT));
106 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PL, "pl", MCC_SHORT));
107 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_DE, "de", MCC_SHORT));
108 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GI, "gi", MCC_SHORT));
109 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PT, "pt", MCC_SHORT));
110 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_LU, "lu", MCC_SHORT));
111 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_IE, "ie", MCC_SHORT));
112 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_IS, "is", MCC_SHORT));
113 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AL, "al", MCC_SHORT));
114 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MT, "mt", MCC_SHORT));
115 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CY, "cy", MCC_SHORT));
116 }
117
AddMccForEurope()118 void MccPool::AddMccForEurope()
119 {
120 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GE_A, "ge", MCC_SHORT));
121 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AM, "am", MCC_SHORT));
122 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BG, "bg", MCC_SHORT));
123 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TR, "tr", MCC_SHORT));
124 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_FO, "fo", MCC_SHORT));
125 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GE_B, "ge", MCC_SHORT));
126 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GL, "gl", MCC_SHORT));
127 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SM, "sm", MCC_SHORT));
128 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SI, "si", MCC_SHORT));
129 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MK, "mk", MCC_SHORT));
130 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_LI, "li", MCC_SHORT));
131 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_ME, "me", MCC_SHORT));
132 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CA, "ca", MCC_LONG));
133 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PM, "pm", MCC_SHORT));
134 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_US_A, "us", MCC_LONG));
135 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_US_B, "us", MCC_LONG));
136 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_US_C, "us", MCC_LONG));
137 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_US_D, "us", MCC_LONG));
138 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_US_E, "us", MCC_LONG));
139 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_US_F, "us", MCC_LONG));
140 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_US_G, "us", MCC_LONG));
141 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PR, "pr", MCC_SHORT));
142 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_VI, "vi", MCC_SHORT));
143 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MX, "mx", MCC_SHORT));
144 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_JM, "jm", MCC_LONG));
145 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GP, "gp", MCC_SHORT));
146 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BB, "bb", MCC_LONG));
147 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AG, "ag", MCC_LONG));
148 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_KY, "ky", MCC_LONG));
149 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_VG, "vg", MCC_LONG));
150 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BM, "bm", MCC_SHORT));
151 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GD, "gd", MCC_SHORT));
152 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MS, "ms", MCC_SHORT));
153 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_KN, "kn", MCC_SHORT));
154 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_LC, "lc", MCC_SHORT));
155 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_VC, "vc", MCC_SHORT));
156 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AI_A, "ai", MCC_SHORT));
157 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AW, "aw", MCC_SHORT));
158 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BS, "bs", MCC_SHORT));
159 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AI_B, "ai", MCC_LONG));
160 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_DM, "dm", MCC_SHORT));
161 }
162
AddMccForAfrica()163 void MccPool::AddMccForAfrica()
164 {
165 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CU, "cu", MCC_SHORT));
166 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_DO, "do", MCC_SHORT));
167 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_HT, "ht", MCC_SHORT));
168 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TT, "tt", MCC_SHORT));
169 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TC, "tc", MCC_SHORT));
170 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AZ, "az", MCC_SHORT));
171 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_KZ, "kz", MCC_SHORT));
172 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BT, "bt", MCC_SHORT));
173 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_IN_A, "in", MCC_SHORT));
174 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_IN_B, "in", MCC_SHORT));
175 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_IN_C, "in", MCC_SHORT));
176 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PK, "pk", MCC_SHORT));
177 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AF, "af", MCC_SHORT));
178 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_LK, "lk", MCC_SHORT));
179 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MM, "mm", MCC_SHORT));
180 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_LB, "lb", MCC_SHORT));
181 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_JO, "jo", MCC_SHORT));
182 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SY, "sy", MCC_SHORT));
183 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_IQ, "iq", MCC_SHORT));
184 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_KW, "kw", MCC_SHORT));
185 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SA, "sa", MCC_SHORT));
186 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_YE, "ye", MCC_SHORT));
187 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_OM, "om", MCC_SHORT));
188 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PS, "ps", MCC_SHORT));
189 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AE_A, "ae", MCC_SHORT));
190 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_IL, "il", MCC_SHORT));
191 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BH, "bh", MCC_SHORT));
192 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_QA, "qa", MCC_SHORT));
193 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MN, "mn", MCC_SHORT));
194 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_NP, "np", MCC_SHORT));
195 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AE_B, "ae", MCC_SHORT));
196 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AE_C, "ae", MCC_SHORT));
197 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_IR, "ir", MCC_SHORT));
198 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_UZ, "uz", MCC_SHORT));
199 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TJ, "tj", MCC_SHORT));
200 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_KG, "kg", MCC_SHORT));
201 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TM, "tm", MCC_SHORT));
202 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_JP_A, "jp", MCC_SHORT));
203 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_JP_B, "jp", MCC_SHORT));
204 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_KR, "kr", MCC_SHORT));
205 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_VN, "vn", MCC_SHORT));
206 }
207
AddMccForNorthAmerica()208 void MccPool::AddMccForNorthAmerica()
209 {
210 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_HK, "hk", MCC_SHORT));
211 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MO, "mo", MCC_SHORT));
212 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_KH, "kh", MCC_SHORT));
213 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_LA, "la", MCC_SHORT));
214 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CN_A, "cn", MCC_SHORT));
215 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CN_B, "cn", MCC_SHORT));
216 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TW, "tw", MCC_SHORT));
217 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_KP, "kp", MCC_SHORT));
218 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BD, "bd", MCC_SHORT));
219 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MV, "mv", MCC_SHORT));
220 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MY, "my", MCC_SHORT));
221 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AU, "au", MCC_SHORT));
222 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_ID, "id", MCC_SHORT));
223 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TL, "tl", MCC_SHORT));
224 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PH, "ph", MCC_SHORT));
225 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TH, "th", MCC_SHORT));
226 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SG, "sg", MCC_SHORT));
227 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BN, "bn", MCC_SHORT));
228 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_NZ, "nz", MCC_SHORT));
229 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MP, "mp", MCC_SHORT));
230 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GU, "gu", MCC_SHORT));
231 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_NR, "nr", MCC_SHORT));
232 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PG, "pg", MCC_SHORT));
233 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TO, "to", MCC_SHORT));
234 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SB, "sb", MCC_SHORT));
235 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_VU, "vu", MCC_SHORT));
236 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_FJ, "fj", MCC_SHORT));
237 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_WF, "wf", MCC_SHORT));
238 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AS, "as", MCC_SHORT));
239 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_KI, "ki", MCC_SHORT));
240 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_NC, "nc", MCC_SHORT));
241 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PF, "pf", MCC_SHORT));
242 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CK, "ck", MCC_SHORT));
243 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_WS, "ws", MCC_SHORT));
244 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_FM, "fm", MCC_SHORT));
245 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MH, "mh", MCC_SHORT));
246 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PW, "pw", MCC_SHORT));
247 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TV, "tv", MCC_SHORT));
248 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_NU, "nu", MCC_SHORT));
249 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_EG, "eg", MCC_SHORT));
250 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_DZ, "dz", MCC_SHORT));
251 }
252
AddMccForSouthAmerica()253 void MccPool::AddMccForSouthAmerica()
254 {
255 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MA, "ma", MCC_SHORT));
256 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TN, "tn", MCC_SHORT));
257 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_LY, "ly", MCC_SHORT));
258 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GM, "gm", MCC_SHORT));
259 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SN, "sn", MCC_SHORT));
260 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MR, "mr", MCC_SHORT));
261 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_ML, "ml", MCC_SHORT));
262 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GN, "gn", MCC_SHORT));
263 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CI, "ci", MCC_SHORT));
264 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BF, "bf", MCC_SHORT));
265 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_NE, "ne", MCC_SHORT));
266 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TG, "tg", MCC_SHORT));
267 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BJ, "bj", MCC_SHORT));
268 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MU, "mu", MCC_SHORT));
269 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_LR, "lr", MCC_SHORT));
270 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SL, "sl", MCC_SHORT));
271 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GH, "gh", MCC_SHORT));
272 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_NG, "ng", MCC_SHORT));
273 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TD, "td", MCC_SHORT));
274 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CF, "cf", MCC_SHORT));
275 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CM, "cm", MCC_SHORT));
276 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CV, "cv", MCC_SHORT));
277 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_ST, "st", MCC_SHORT));
278 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GQ, "gq", MCC_SHORT));
279 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GA, "ga", MCC_SHORT));
280 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CG, "cg", MCC_SHORT));
281 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CD, "cd", MCC_SHORT));
282 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AO, "ao", MCC_SHORT));
283 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GW, "gw", MCC_SHORT));
284 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SC, "sc", MCC_SHORT));
285 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SD, "sd", MCC_SHORT));
286 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_RW, "rw", MCC_SHORT));
287 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_ET, "et", MCC_SHORT));
288 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SO, "so", MCC_SHORT));
289 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_DJ, "dj", MCC_SHORT));
290 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_KE, "ke", MCC_SHORT));
291 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_TZ, "tz", MCC_SHORT));
292 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_UG, "ug", MCC_SHORT));
293 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BI, "bi", MCC_SHORT));
294 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MZ, "mz", MCC_SHORT));
295 }
296
AddMccForAustralia()297 void MccPool::AddMccForAustralia()
298 {
299 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_ZM, "zm", MCC_SHORT));
300 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MG, "mg", MCC_SHORT));
301 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_RE, "re", MCC_SHORT));
302 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_ZW, "zw", MCC_SHORT));
303 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_NA, "na", MCC_SHORT));
304 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_MW, "mw", MCC_SHORT));
305 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_LS, "ls", MCC_SHORT));
306 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BW, "bw", MCC_SHORT));
307 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SZ, "sz", MCC_SHORT));
308 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_KM, "km", MCC_SHORT));
309 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_ZA, "za", MCC_SHORT));
310 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_ER, "er", MCC_SHORT));
311 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SH, "sh", MCC_SHORT));
312 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SS, "ss", MCC_SHORT));
313 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BZ, "bz", MCC_SHORT));
314 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GT, "gt", MCC_SHORT));
315 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SV, "sv", MCC_SHORT));
316 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_HN, "hn", MCC_LONG));
317 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_NI, "ni", MCC_SHORT));
318 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CR, "cr", MCC_SHORT));
319 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PA, "pa", MCC_SHORT));
320 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PE, "pe", MCC_SHORT));
321 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_AR, "ar", MCC_SHORT));
322 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BR, "br", MCC_SHORT));
323 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CL, "cl", MCC_SHORT));
324 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_CO, "co", MCC_LONG));
325 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_VE, "ve", MCC_SHORT));
326 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_BO, "bo", MCC_SHORT));
327 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GY, "gy", MCC_SHORT));
328 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_EC, "ec", MCC_SHORT));
329 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_GF, "gf", MCC_SHORT));
330 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_PY, "py", MCC_SHORT));
331 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_SR, "sr", MCC_SHORT));
332 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_UY, "uy", MCC_SHORT));
333 mccAccessTable_.push_back(std::make_shared<MccAccess>(MCC_FK, "fk", MCC_SHORT));
334 }
335
MccCompare(const std::shared_ptr<MccAccess> & mccAccessA,const std::shared_ptr<MccAccess> & mccAccessB)336 bool MccPool::MccCompare(const std::shared_ptr<MccAccess> &mccAccessA, const std::shared_ptr<MccAccess> &mccAccessB)
337 {
338 if (mccAccessA == nullptr || mccAccessB == nullptr) {
339 return false;
340 }
341 return (mccAccessA->mcc_ < mccAccessB->mcc_);
342 }
343
LengthIsTwoMnc(const std::string & mccMncCode)344 bool MccPool::LengthIsTwoMnc(const std::string &mccMncCode)
345 {
346 InitIndiaTables();
347 std::vector<std::string>::iterator obj = std::find(indiaMccMnc_.begin(), indiaMccMnc_.end(), mccMncCode);
348 return (obj == indiaMccMnc_.end()) ? false : true;
349 }
350
InitIndiaTables()351 void MccPool::InitIndiaTables()
352 {
353 if (indiaMccMnc_.size() == 0) {
354 indiaMccMnc_ = {"40400", "40401", "40402", "40403", "40404", "40405", "40407", "40409",
355 "40410", "40411", "40412", "40413", "40414", "40415", "40416", "40417",
356 "40418", "40419", "40420", "40421", "40422", "40424", "40425", "40427",
357 "40428", "40429", "40430", "40431", "40433", "40434", "40435", "40436",
358 "40437", "40438", "40440", "40441", "40442", "40443", "40444", "40445",
359 "40446", "40449", "40450", "40451", "40452", "40453", "40454", "40455",
360 "40456", "40457", "40458", "40459", "40460", "40462", "40464", "40466",
361 "40467", "40468", "40469", "40470", "40471", "40472", "40473", "40474",
362 "40475", "40476", "40477", "40478", "40479", "40480", "40481", "40482",
363 "40483", "40484", "40485", "40486", "40487", "40488", "40489", "40490",
364 "40491", "40492", "40493", "40494", "40495", "40496", "40497", "40498",
365 "40501", "40505", "40506", "40507", "40508", "40509", "40510", "40511",
366 "40512", "40513", "40514", "40515", "40517", "40518", "40519", "40520",
367 "40521", "40522", "40523", "40524", "40548", "40551", "40552", "40553",
368 "40554", "40555", "40556", "40566", "40567", "40570"};
369 }
370 }
371
LengthIsThreeMnc(const std::string & mccMncCode)372 bool MccPool::LengthIsThreeMnc(const std::string &mccMncCode)
373 {
374 InitSpecialMccMncTables();
375 std::vector<std::string>::iterator obj = std::find(specialMccMnc_.begin(), specialMccMnc_.end(), mccMncCode);
376 return (obj == specialMccMnc_.end()) ? false : true;
377 }
378
InitSpecialMccMncTables()379 void MccPool::InitSpecialMccMncTables()
380 {
381 if (specialMccMnc_.size() == 0) {
382 AddMccMncForCa();
383 AddMccMncForInAirtel();
384 AddMccMncForInHutch();
385 AddMccMncForMy();
386 }
387 }
388
AddMccMncForCa()389 void MccPool::AddMccMncForCa()
390 {
391 specialMccMnc_.push_back("302370");
392 specialMccMnc_.push_back("302720");
393 specialMccMnc_.push_back("310260");
394 specialMccMnc_.push_back("405025");
395 specialMccMnc_.push_back("405026");
396 specialMccMnc_.push_back("405027");
397 specialMccMnc_.push_back("405028");
398 specialMccMnc_.push_back("405029");
399 specialMccMnc_.push_back("405030");
400 specialMccMnc_.push_back("405031");
401 specialMccMnc_.push_back("405032");
402 specialMccMnc_.push_back("405033");
403 specialMccMnc_.push_back("405034");
404 specialMccMnc_.push_back("405035");
405 specialMccMnc_.push_back("405036");
406 specialMccMnc_.push_back("405037");
407 specialMccMnc_.push_back("405038");
408 specialMccMnc_.push_back("405039");
409 specialMccMnc_.push_back("405040");
410 specialMccMnc_.push_back("405041");
411 specialMccMnc_.push_back("405042");
412 specialMccMnc_.push_back("405043");
413 specialMccMnc_.push_back("405044");
414 specialMccMnc_.push_back("405045");
415 specialMccMnc_.push_back("405046");
416 specialMccMnc_.push_back("405047");
417 specialMccMnc_.push_back("405750");
418 specialMccMnc_.push_back("405751");
419 specialMccMnc_.push_back("405752");
420 specialMccMnc_.push_back("405753");
421 specialMccMnc_.push_back("405754");
422 specialMccMnc_.push_back("405755");
423 specialMccMnc_.push_back("405756");
424 specialMccMnc_.push_back("405799");
425 specialMccMnc_.push_back("405800");
426 specialMccMnc_.push_back("405801");
427 }
428
AddMccMncForInAirtel()429 void MccPool::AddMccMncForInAirtel()
430 {
431 specialMccMnc_.push_back("405802");
432 specialMccMnc_.push_back("405803");
433 specialMccMnc_.push_back("405804");
434 specialMccMnc_.push_back("405805");
435 specialMccMnc_.push_back("405806");
436 specialMccMnc_.push_back("405807");
437 specialMccMnc_.push_back("405808");
438 specialMccMnc_.push_back("405809");
439 specialMccMnc_.push_back("405810");
440 specialMccMnc_.push_back("405811");
441 specialMccMnc_.push_back("405812");
442 specialMccMnc_.push_back("405813");
443 specialMccMnc_.push_back("405814");
444 specialMccMnc_.push_back("405815");
445 specialMccMnc_.push_back("405816");
446 specialMccMnc_.push_back("405817");
447 specialMccMnc_.push_back("405818");
448 specialMccMnc_.push_back("405819");
449 specialMccMnc_.push_back("405820");
450 specialMccMnc_.push_back("405821");
451 specialMccMnc_.push_back("405822");
452 specialMccMnc_.push_back("405823");
453 specialMccMnc_.push_back("405824");
454 specialMccMnc_.push_back("405825");
455 specialMccMnc_.push_back("405826");
456 specialMccMnc_.push_back("405827");
457 specialMccMnc_.push_back("405828");
458 specialMccMnc_.push_back("405829");
459 specialMccMnc_.push_back("405830");
460 specialMccMnc_.push_back("405831");
461 specialMccMnc_.push_back("405832");
462 specialMccMnc_.push_back("405833");
463 specialMccMnc_.push_back("405834");
464 specialMccMnc_.push_back("405835");
465 specialMccMnc_.push_back("405836");
466 }
467
AddMccMncForInHutch()468 void MccPool::AddMccMncForInHutch()
469 {
470 specialMccMnc_.push_back("405837");
471 specialMccMnc_.push_back("405838");
472 specialMccMnc_.push_back("405839");
473 specialMccMnc_.push_back("405840");
474 specialMccMnc_.push_back("405841");
475 specialMccMnc_.push_back("405842");
476 specialMccMnc_.push_back("405843");
477 specialMccMnc_.push_back("405844");
478 specialMccMnc_.push_back("405845");
479 specialMccMnc_.push_back("405846");
480 specialMccMnc_.push_back("405847");
481 specialMccMnc_.push_back("405848");
482 specialMccMnc_.push_back("405849");
483 specialMccMnc_.push_back("405850");
484 specialMccMnc_.push_back("405851");
485 specialMccMnc_.push_back("405852");
486 specialMccMnc_.push_back("405853");
487 specialMccMnc_.push_back("405854");
488 specialMccMnc_.push_back("405855");
489 specialMccMnc_.push_back("405856");
490 specialMccMnc_.push_back("405857");
491 specialMccMnc_.push_back("405858");
492 specialMccMnc_.push_back("405859");
493 specialMccMnc_.push_back("405860");
494 specialMccMnc_.push_back("405861");
495 specialMccMnc_.push_back("405862");
496 specialMccMnc_.push_back("405863");
497 specialMccMnc_.push_back("405864");
498 specialMccMnc_.push_back("405865");
499 specialMccMnc_.push_back("405866");
500 specialMccMnc_.push_back("405867");
501 specialMccMnc_.push_back("405868");
502 specialMccMnc_.push_back("405869");
503 specialMccMnc_.push_back("405870");
504 specialMccMnc_.push_back("405871");
505 specialMccMnc_.push_back("405872");
506 specialMccMnc_.push_back("405873");
507 specialMccMnc_.push_back("405874");
508 specialMccMnc_.push_back("405875");
509 }
510
AddMccMncForMy()511 void MccPool::AddMccMncForMy()
512 {
513 specialMccMnc_.push_back("405876");
514 specialMccMnc_.push_back("405877");
515 specialMccMnc_.push_back("405878");
516 specialMccMnc_.push_back("405879");
517 specialMccMnc_.push_back("405880");
518 specialMccMnc_.push_back("405881");
519 specialMccMnc_.push_back("405882");
520 specialMccMnc_.push_back("405883");
521 specialMccMnc_.push_back("405884");
522 specialMccMnc_.push_back("405885");
523 specialMccMnc_.push_back("405886");
524 specialMccMnc_.push_back("405908");
525 specialMccMnc_.push_back("405909");
526 specialMccMnc_.push_back("405910");
527 specialMccMnc_.push_back("405911");
528 specialMccMnc_.push_back("405912");
529 specialMccMnc_.push_back("405913");
530 specialMccMnc_.push_back("405914");
531 specialMccMnc_.push_back("405915");
532 specialMccMnc_.push_back("405916");
533 specialMccMnc_.push_back("405917");
534 specialMccMnc_.push_back("405918");
535 specialMccMnc_.push_back("405919");
536 specialMccMnc_.push_back("405920");
537 specialMccMnc_.push_back("405921");
538 specialMccMnc_.push_back("405922");
539 specialMccMnc_.push_back("405923");
540 specialMccMnc_.push_back("405924");
541 specialMccMnc_.push_back("405925");
542 specialMccMnc_.push_back("405926");
543 specialMccMnc_.push_back("405927");
544 specialMccMnc_.push_back("405928");
545 specialMccMnc_.push_back("405929");
546 specialMccMnc_.push_back("405930");
547 specialMccMnc_.push_back("405931");
548 specialMccMnc_.push_back("405932");
549 specialMccMnc_.push_back("502142");
550 specialMccMnc_.push_back("502143");
551 specialMccMnc_.push_back("502145");
552 specialMccMnc_.push_back("502146");
553 specialMccMnc_.push_back("502147");
554 specialMccMnc_.push_back("502148");
555 }
556
MccPool()557 MccPool::MccPool() {}
558
~MccPool()559 MccPool::~MccPool() {}
560 } // namespace Telephony
561 } // namespace OHOS
562