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  #ifndef OHOS_MCC_POOL_H
17  #define OHOS_MCC_POOL_H
18  
19  #include <algorithm>
20  #include <cstdio>
21  #include <functional>
22  #include <iostream>
23  #include <vector>
24  
25  enum MccCountry {
26      MCC_GR = 202,
27      MCC_NL = 204,
28      MCC_BE = 206,
29      MCC_FR = 208,
30      MCC_MC = 212,
31      MCC_AD = 213,
32      MCC_ES = 214,
33      MCC_HU = 216,
34      MCC_BA = 218,
35      MCC_HR = 219,
36      MCC_RS = 220,
37      MCC_IT = 222,
38      MCC_VA = 225,
39      MCC_RO = 226,
40      MCC_CH = 228,
41      MCC_CZ = 230,
42      MCC_SK = 231,
43      MCC_AT = 232,
44      MCC_GB_A = 234,
45      MCC_GB_B = 235,
46      MCC_DK = 238,
47      MCC_SE = 240,
48      MCC_NO = 242,
49      MCC_FI = 244,
50      MCC_LT = 246,
51      MCC_LV = 247,
52      MCC_EE = 248,
53      MCC_RU = 250,
54      MCC_UA = 255,
55      MCC_BY = 257,
56      MCC_MD = 259,
57      MCC_PL = 260,
58      MCC_DE = 262,
59      MCC_GI = 266,
60      MCC_PT = 268,
61      MCC_LU = 270,
62      MCC_IE = 272,
63      MCC_IS = 274,
64      MCC_AL = 276,
65      MCC_MT = 278,
66      MCC_CY = 280,
67      MCC_GE_A = 282,
68      MCC_AM = 283,
69      MCC_BG = 284,
70      MCC_TR = 286,
71      MCC_FO = 288,
72      MCC_GE_B = 289,
73      MCC_GL = 290,
74      MCC_SM = 292,
75      MCC_SI = 293,
76      MCC_MK = 294,
77      MCC_LI = 295,
78      MCC_ME = 297,
79      MCC_CA = 302,
80      MCC_PM = 308,
81      MCC_US_A = 310,
82      MCC_US_B = 311,
83      MCC_US_C = 312,
84      MCC_US_D = 313,
85      MCC_US_E = 314,
86      MCC_US_F = 315,
87      MCC_US_G = 316,
88      MCC_PR = 330,
89      MCC_VI = 332,
90      MCC_MX = 334,
91      MCC_JM = 338,
92      MCC_GP = 340,
93      MCC_BB = 342,
94      MCC_AG = 344,
95      MCC_KY = 346,
96      MCC_VG = 348,
97      MCC_BM = 350,
98      MCC_GD = 352,
99      MCC_MS = 354,
100      MCC_KN = 356,
101      MCC_LC = 358,
102      MCC_VC = 360,
103      MCC_AI_A = 362,
104      MCC_AW = 363,
105      MCC_BS = 364,
106      MCC_AI_B = 365,
107      MCC_DM = 366,
108      MCC_CU = 368,
109      MCC_DO = 370,
110      MCC_HT = 372,
111      MCC_TT = 374,
112      MCC_TC = 376,
113      MCC_AZ = 400,
114      MCC_KZ = 401,
115      MCC_BT = 402,
116      MCC_IN_A = 404,
117      MCC_IN_B = 405,
118      MCC_IN_C = 406,
119      MCC_PK = 410,
120      MCC_AF = 412,
121      MCC_LK = 413,
122      MCC_MM = 414,
123      MCC_LB = 415,
124      MCC_JO = 416,
125      MCC_SY = 417,
126      MCC_IQ = 418,
127      MCC_KW = 419,
128      MCC_SA = 420,
129      MCC_YE = 421,
130      MCC_OM = 422,
131      MCC_PS = 423,
132      MCC_AE_A = 424,
133      MCC_IL = 425,
134      MCC_BH = 426,
135      MCC_QA = 427,
136      MCC_MN = 428,
137      MCC_NP = 429,
138      MCC_AE_B = 430,
139      MCC_AE_C = 431,
140      MCC_IR = 432,
141      MCC_UZ = 434,
142      MCC_TJ = 436,
143      MCC_KG = 437,
144      MCC_TM = 438,
145      MCC_JP_A = 440,
146      MCC_JP_B = 441,
147      MCC_KR = 450,
148      MCC_VN = 452,
149      MCC_HK = 454,
150      MCC_MO = 455,
151      MCC_KH = 456,
152      MCC_LA = 457,
153      MCC_CN_A = 460,
154      MCC_CN_B = 461,
155      MCC_TW = 466,
156      MCC_KP = 467,
157      MCC_BD = 470,
158      MCC_MV = 472,
159      MCC_MY = 502,
160      MCC_AU = 505,
161      MCC_ID = 510,
162      MCC_TL = 514,
163      MCC_PH = 515,
164      MCC_TH = 520,
165      MCC_SG = 525,
166      MCC_BN = 528,
167      MCC_NZ = 530,
168      MCC_MP = 534,
169      MCC_GU = 535,
170      MCC_NR = 536,
171      MCC_PG = 537,
172      MCC_TO = 539,
173      MCC_SB = 540,
174      MCC_VU = 541,
175      MCC_FJ = 542,
176      MCC_WF = 543,
177      MCC_AS = 544,
178      MCC_KI = 545,
179      MCC_NC = 546,
180      MCC_PF = 547,
181      MCC_CK = 548,
182      MCC_WS = 549,
183      MCC_FM = 550,
184      MCC_MH = 551,
185      MCC_PW = 552,
186      MCC_TV = 553,
187      MCC_NU = 555,
188      MCC_EG = 602,
189      MCC_DZ = 603,
190      MCC_MA = 604,
191      MCC_TN = 605,
192      MCC_LY = 606,
193      MCC_GM = 607,
194      MCC_SN = 608,
195      MCC_MR = 609,
196      MCC_ML = 610,
197      MCC_GN = 611,
198      MCC_CI = 612,
199      MCC_BF = 613,
200      MCC_NE = 614,
201      MCC_TG = 615,
202      MCC_BJ = 616,
203      MCC_MU = 617,
204      MCC_LR = 618,
205      MCC_SL = 619,
206      MCC_GH = 620,
207      MCC_NG = 621,
208      MCC_TD = 622,
209      MCC_CF = 623,
210      MCC_CM = 624,
211      MCC_CV = 625,
212      MCC_ST = 626,
213      MCC_GQ = 627,
214      MCC_GA = 628,
215      MCC_CG = 629,
216      MCC_CD = 630,
217      MCC_AO = 631,
218      MCC_GW = 632,
219      MCC_SC = 633,
220      MCC_SD = 634,
221      MCC_RW = 635,
222      MCC_ET = 636,
223      MCC_SO = 637,
224      MCC_DJ = 638,
225      MCC_KE = 639,
226      MCC_TZ = 640,
227      MCC_UG = 641,
228      MCC_BI = 642,
229      MCC_MZ = 643,
230      MCC_ZM = 645,
231      MCC_MG = 646,
232      MCC_RE = 647,
233      MCC_ZW = 648,
234      MCC_NA = 649,
235      MCC_MW = 650,
236      MCC_LS = 651,
237      MCC_BW = 652,
238      MCC_SZ = 653,
239      MCC_KM = 654,
240      MCC_ZA = 655,
241      MCC_ER = 657,
242      MCC_SH = 658,
243      MCC_SS = 659,
244      MCC_BZ = 702,
245      MCC_GT = 704,
246      MCC_SV = 706,
247      MCC_HN = 708,
248      MCC_NI = 710,
249      MCC_CR = 712,
250      MCC_PA = 714,
251      MCC_PE = 716,
252      MCC_AR = 722,
253      MCC_BR = 724,
254      MCC_CL = 730,
255      MCC_CO = 732,
256      MCC_VE = 734,
257      MCC_BO = 736,
258      MCC_GY = 738,
259      MCC_EC = 740,
260      MCC_GF = 742,
261      MCC_PY = 744,
262      MCC_SR = 746,
263      MCC_UY = 748,
264      MCC_FK = 750
265  };
266  
267  enum MccType { MCC_SHORT = 2, MCC_LONG = 3 };
268  
269  namespace OHOS {
270  namespace Telephony {
271  class MccAccess {
272  public:
273      int mcc_ = 0;
274      std::string iso_ = "";
275      int mncShortestLength_ = 0;
MccAccess(int mcc,std::string iso,int shortestMnc)276      MccAccess(int mcc, std::string iso, int shortestMnc)
277      {
278          mcc_ = mcc;
279          iso_ = iso;
280          mncShortestLength_ = shortestMnc;
281      }
282  };
283  
284  class MccPool {
285  public:
286      MccPool();
287      ~MccPool();
288      static std::string MccCountryCode(int mcc);
289      static int ShortestMncLengthFromMcc(int mcc);
290      static bool LengthIsThreeMnc(const std::string &mccMncCode);
291      static bool LengthIsTwoMnc(const std::string &mccMncCode);
292      static std::vector<std::shared_ptr<MccAccess>> mccAccessTable_;
293      static std::vector<std::string> specialMccMnc_;
294      static std::vector<std::string> indiaMccMnc_;
295  
296  private:
297      static std::shared_ptr<MccAccess> AccessToMcc(int mcc);
298      static void InitMccTables();
299      static bool MccCompare(const std::shared_ptr<MccAccess> &mccAccessA, const std::shared_ptr<MccAccess> &mccAccessB);
300      static void AddMccForAsia();
301      static void AddMccForEurope();
302      static void AddMccForAfrica();
303      static void AddMccForNorthAmerica();
304      static void AddMccForSouthAmerica();
305      static void AddMccForAustralia();
306  
307      static void InitSpecialMccMncTables();
308      static void AddMccMncForCa();
309      static void AddMccMncForInAirtel();
310      static void AddMccMncForInHutch();
311      static void AddMccMncForMy();
312      static void InitIndiaTables();
313  };
314  } // namespace Telephony
315  } // namespace OHOS
316  #endif // OHOS_MCC_TABLE_H