mirror of
https://gitlab.gnome.org/GNOME/calls.git
synced 2025-01-06 11:35:32 +00:00
Add API to get SIM country code
This is a copy of Mohammed Sadiq's code in purple-mm-sms
This commit is contained in:
parent
622827d293
commit
463344c52b
1 changed files with 295 additions and 0 deletions
295
plugins/mm/itu-e212-iso.h
Normal file
295
plugins/mm/itu-e212-iso.h
Normal file
|
@ -0,0 +1,295 @@
|
|||
/* -*- mode: c; c-basic-offset: 2; indent-tabs-mode: nil; -*- */
|
||||
/* itu-e212-iso.h
|
||||
*
|
||||
* Copyright 2020 Purism SPC
|
||||
*
|
||||
* Mapping from E.212 MCC to Countries in ISO 3166-1 alpha-2 format
|
||||
*
|
||||
* Author(s):
|
||||
* Mohammed Sadiq <sadiq@sadiqpk.org>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
|
||||
struct mcc_list
|
||||
{
|
||||
guint mcc;
|
||||
char code[3];
|
||||
};
|
||||
|
||||
/*
|
||||
* Extracted from:
|
||||
* https://www.itu.int/dms_pub/itu-t/opb/sp/T-SP-E.212B-2018-PDF-E.pdf
|
||||
*/
|
||||
struct mcc_list mcc_list[] = {
|
||||
{202, "GR"},
|
||||
{204, "NL"},
|
||||
{206, "BE"},
|
||||
{208, "FR"},
|
||||
{212, "MC"},
|
||||
{213, "AD"},
|
||||
{214, "ES"},
|
||||
{216, "HU"},
|
||||
{218, "BA"},
|
||||
{219, "HR"},
|
||||
{220, "RS"},
|
||||
{221, "XK"},
|
||||
{222, "IT"},
|
||||
{225, "VA"},
|
||||
{226, "RO"},
|
||||
{228, "CH"},
|
||||
{230, "CZ"},
|
||||
{231, "SK"},
|
||||
{232, "AT"},
|
||||
{234, "GB"},
|
||||
{235, "GB"},
|
||||
{238, "DK"},
|
||||
{240, "SE"},
|
||||
{242, "NO"},
|
||||
{244, "FI"},
|
||||
{246, "LT"},
|
||||
{247, "LV"},
|
||||
{248, "EE"},
|
||||
{250, "RU"},
|
||||
{255, "UA"},
|
||||
{257, "BY"},
|
||||
{259, "MD"},
|
||||
{260, "PL"},
|
||||
{262, "DE"},
|
||||
{266, "GI"},
|
||||
{268, "PT"},
|
||||
{270, "LU"},
|
||||
{272, "IE"},
|
||||
{274, "IS"},
|
||||
{276, "AL"},
|
||||
{278, "MT"},
|
||||
{280, "CY"},
|
||||
{282, "GE"},
|
||||
{283, "AM"},
|
||||
{284, "BG"},
|
||||
{286, "TR"},
|
||||
{288, "FO"},
|
||||
{290, "GL"},
|
||||
{292, "SM"},
|
||||
{293, "SI"},
|
||||
{294, "MK"},
|
||||
{295, "LI"},
|
||||
{297, "ME"},
|
||||
{302, "CA"},
|
||||
{308, "PM"},
|
||||
{310, "US"},
|
||||
{311, "US"},
|
||||
{312, "US"},
|
||||
{313, "US"},
|
||||
{314, "US"},
|
||||
{315, "US"},
|
||||
{316, "US"},
|
||||
{330, "PR"},
|
||||
{332, "VI"},
|
||||
{334, "MX"},
|
||||
{338, "JM"},
|
||||
/* Guadeloupe and Martinique are part of France */
|
||||
{340, "GP"},
|
||||
{340, "MQ"},
|
||||
{342, "BB"},
|
||||
{344, "AG"},
|
||||
{346, "KY"},
|
||||
{348, "VG"},
|
||||
{350, "BM"},
|
||||
{352, "GD"},
|
||||
{354, "MS"},
|
||||
{356, "KN"},
|
||||
{358, "LC"},
|
||||
{360, "VC"},
|
||||
{362, "CW"},
|
||||
{363, "AW"},
|
||||
{364, "BS"},
|
||||
{365, "AI"},
|
||||
{366, "DM"},
|
||||
{368, "CU"},
|
||||
{370, "DO"},
|
||||
{372, "HT"},
|
||||
{374, "TT"},
|
||||
{376, "TC"},
|
||||
{400, "AZ"},
|
||||
{401, "KZ"},
|
||||
{402, "BT"},
|
||||
{404, "IN"},
|
||||
{405, "IN"},
|
||||
{406, "IN"},
|
||||
{410, "PK"},
|
||||
{412, "AF"},
|
||||
{413, "LK"},
|
||||
{414, "MM"},
|
||||
{415, "LB"},
|
||||
{416, "JO"},
|
||||
{417, "SY"},
|
||||
{418, "IQ"},
|
||||
{419, "KW"},
|
||||
{420, "SA"},
|
||||
{421, "YE"},
|
||||
{422, "OM"},
|
||||
{424, "AE"},
|
||||
{425, "IL"},
|
||||
{426, "BH"},
|
||||
{427, "QA"},
|
||||
{428, "MN"},
|
||||
{429, "NP"},
|
||||
{430, "AE"},
|
||||
{431, "AE"},
|
||||
{432, "IR"},
|
||||
{434, "UZ"},
|
||||
{436, "TJ"},
|
||||
{437, "KG"},
|
||||
{438, "TM"},
|
||||
{440, "JP"},
|
||||
{441, "JP"},
|
||||
{450, "KP"},
|
||||
{452, "VN"},
|
||||
{454, "HK"},
|
||||
{455, "MO"},
|
||||
{456, "KH"},
|
||||
{457, "LA"},
|
||||
{460, "CN"},
|
||||
{461, "CN"},
|
||||
{466, "TW"},
|
||||
{467, "KR"},
|
||||
{470, "BD"},
|
||||
{472, "MV"},
|
||||
{502, "MY"},
|
||||
{505, "AU"},
|
||||
{510, "ID"},
|
||||
{514, "TL"},
|
||||
{515, "PH"},
|
||||
{520, "TH"},
|
||||
{525, "SG"},
|
||||
{528, "BN"},
|
||||
{530, "NZ"},
|
||||
{536, "NR"},
|
||||
{537, "PG"},
|
||||
{539, "TO"},
|
||||
{540, "SB"},
|
||||
{541, "VU"},
|
||||
{542, "FJ"},
|
||||
{543, "WF"},
|
||||
{544, "AS"},
|
||||
{545, "KI"},
|
||||
{546, "NC"},
|
||||
{547, "PF"},
|
||||
{548, "CK"},
|
||||
{549, "AS"},
|
||||
{550, "FM"},
|
||||
{551, "MH"},
|
||||
{552, "PW"},
|
||||
{553, "TV"},
|
||||
{554, "TK"},
|
||||
{555, "NU"},
|
||||
{602, "EG"},
|
||||
{603, "DZ"},
|
||||
{604, "MA"},
|
||||
{605, "TN"},
|
||||
{606, "LY"},
|
||||
{607, "GM"},
|
||||
{608, "SN"},
|
||||
{609, "MR"},
|
||||
{610, "ML"},
|
||||
{611, "GN"},
|
||||
{612, "CI"},
|
||||
{613, "BF"},
|
||||
{614, "NE"},
|
||||
{615, "TG"},
|
||||
{616, "BJ"},
|
||||
{617, "MU"},
|
||||
{618, "LR"},
|
||||
{619, "SL"},
|
||||
{620, "GH"},
|
||||
{621, "NG"},
|
||||
{622, "TD"},
|
||||
{623, "CF"},
|
||||
{624, "CM"},
|
||||
{625, "CV"},
|
||||
{626, "ST"},
|
||||
{627, "GQ"},
|
||||
{628, "GA"},
|
||||
{629, "CG"},
|
||||
{630, "CD"},
|
||||
{631, "AO"},
|
||||
{632, "GW"},
|
||||
{633, "SC"},
|
||||
{634, "SD"},
|
||||
{635, "RW"},
|
||||
{636, "ET"},
|
||||
{637, "SO"},
|
||||
{638, "DJ"},
|
||||
{639, "KE"},
|
||||
{640, "TZ"},
|
||||
{641, "UG"},
|
||||
{642, "BI"},
|
||||
{643, "MZ"},
|
||||
{645, "ZM"},
|
||||
{646, "MG"},
|
||||
{647, "RE"},
|
||||
{648, "ZW"},
|
||||
{649, "NA"},
|
||||
{650, "MW"},
|
||||
{651, "LS"},
|
||||
{652, "BW"},
|
||||
{653, "SZ"},
|
||||
{654, "KM"},
|
||||
{655, "ZA"},
|
||||
{657, "ER"},
|
||||
{658, "SH"},
|
||||
{659, "SS"},
|
||||
{702, "BZ"},
|
||||
{704, "GT"},
|
||||
{706, "SV"},
|
||||
{708, "HN"},
|
||||
{710, "NI"},
|
||||
{712, "CR"},
|
||||
{714, "PA"},
|
||||
{716, "PE"},
|
||||
{722, "AR"},
|
||||
{724, "BR"},
|
||||
{730, "CL"},
|
||||
{732, "CO"},
|
||||
{734, "VE"},
|
||||
{736, "BO"},
|
||||
{738, "GY"},
|
||||
{740, "EC"},
|
||||
{742, "GF"},
|
||||
{744, "PY"},
|
||||
{746, "SR"},
|
||||
{748, "UY"},
|
||||
{750, "FK"},
|
||||
};
|
||||
|
||||
/*
|
||||
* @mcc_str should have MCC as prefix,
|
||||
* It doesn't matter if any thing else is followed.
|
||||
* So it's okay to pass an IMSI.
|
||||
*/
|
||||
static inline const char *
|
||||
get_country_iso_for_mcc (const char *mcc_str)
|
||||
{
|
||||
g_autofree char *str = NULL;
|
||||
guint64 mcc;
|
||||
|
||||
if (!mcc_str || strlen (mcc_str) < 3)
|
||||
return NULL;
|
||||
|
||||
str = g_strndup (mcc_str, 3);
|
||||
mcc = g_ascii_strtoull (str, NULL, 10);
|
||||
|
||||
for (guint i = 0; i < G_N_ELEMENTS (mcc_list); i++)
|
||||
if (mcc_list[i].mcc == mcc)
|
||||
return mcc_list[i].code;
|
||||
|
||||
g_warning ("invalid MCC code: %" G_GUINT64_FORMAT, mcc);
|
||||
|
||||
return NULL;
|
||||
}
|
Loading…
Reference in a new issue