📄 network.cpp
字号:
{ 51501, "ISLACOM", "PH" },
{ 51502, "Globe", "PH" },
{ 51503, "SMART", "PH" },
{ 51505, "Digitel", "PH" },
{ 51511, "ACeS", "PH" },
{ 52001, "AIS GSM", "TH" },
{ 52015, "ACT Mobile", "TH" },
{ 52018, "WP-1800", "TH" },
{ 52020, "ACeS", "TH" },
{ 52023, "HELLO", "TH" },
{ 52099, "Orange", "TH" },
{ 52501, "ST-GSM-SGP", "SG" },
{ 52502, "ST-GSM1800-SGP", "SG" },
{ 52503, "M1-GSM-SGP", "SG" },
{ 52504, "SGP-M1-3GSM", "SG" },
{ 52505, "STARHUB-SGP", "SG" },
{ 52811, "BRU TSTCom", "BN" },
{ 53001, "Vodafone", "NZ" },
{ 53901, "Tonga Comm.", "TO" },
{ 54100, "ACeS", "VU" },
{ 54101, "SMILE", "VU" },
{ 54201, "Vodafone", "FJ" },
{ 54411, "Blue Sky", "AS" },
{ 54601, "MOBILIS", "NC" },
{ 54720, "VINI", "PF" },
{ 55001, "FSM", "FM" },
{ 60201, "MobiNiL", "EG" },
{ 60202, "CLICK GSM", "EG" },
{ 60301, "AMN", "DZ" },
{ 60400, "Meditel", "MA" },
{ 60401, "IAM", "MA" },
{ 60502, "TUNICELL", "TN" },
{ 60801, "ALIZE", "SN" },
{ 60802, "SENTEL", "SN" },
{ 61001, "MALITEL", "ML" },
{ 61101, "MOBILIS", "GN" },
{ 61102, "LAGUI", "GN" },
{ 61201, "CORA", "CI" },
{ 61203, "Ivoiris", "CI" },
{ 61205, "TELECEL", "CI" },
{ 61302, "CELTEL", "BF" },
{ 61402, "CELTEL", "NE" },
{ 61501, "TOGOCEL", "TG" },
{ 61601, "LIBERCOM", "BJ" },
{ 61602, "Telecel Benin", "BJ" },
{ 61603, "BENINCELL", "BJ" },
{ 61701, "CELLPLUS", "MU" },
{ 61710, "EMTEL", "MU" },
{ 61801, "Omega", "LR" },
{ 62001, "SPACEFON", "GH" },
{ 62002, "ONEtouch", "GH" },
{ 62003, "MOBITEL", "GH" },
{ 62100, "MTN", "NG" },
{ 62120, "ECONET", "NG" },
{ 62130, "MTN", "NG" },
{ 62140, "NITEL GSM", "NG" },
{ 62201, "CELTEL", "TD" },
{ 62202, "LIBERTIS", "TD" },
{ 62401, "MTN-CAM", "CM" },
{ 62402, "MOBILIS", "CM" },
{ 62501, "CPV MOVEL", "CV" },
{ 62801, "LIBERTIS", "GA" },
{ 62802, "GO Celtel", "GA" },
{ 62803, "CELTEL", "GA" },
{ 62901, "CELTEL", "CG" },
{ 62910, "LIBERTIS", "CG" },
{ 63001, "CELLNET", "CD" },
{ 63002, "CELTEL", "CD" },
{ 63004, "CELLCO", "CD" },
{ 63089, "OASIS", "CD" },
{ 63301, "SEYCEL", "SC" },
{ 63310, "AIRTEL", "SC" },
{ 63401, "MobiTel", "MZ" },
{ 63510, "Rwandacell", "RW" },
{ 63601, "ETMTN", "ET" },
{ 63701, "BARAKAAT", "SO" },
{ 63902, "Safaricom", "KE" },
{ 63903, "KENCELL", "KE" },
{ 64001, "TRITEL", "TZ" },
{ 64002, "MobiTel", "TZ" },
{ 64003, "ZANTEL", "TZ" },
{ 64004, "Vodacom", "TZ" },
{ 64005, "CELTEL", "TZ" },
{ 64101, "CelTel", "UG" },
{ 64110, "MTN-UGANDA", "UG" },
{ 64111, "UTL TELECEL", "UG" },
{ 64201, "Spacetel", "BI" },
{ 64202, "SAFARIS", "BI" },
{ 64301, "mCel", UNKNOWN_COUNTRY_CODE }, //???
{ 64501, "ZAMCELL", UNKNOWN_COUNTRY_CODE }, //???
{ 64502, "TELECEL", UNKNOWN_COUNTRY_CODE },
{ 64601, "Madacom", "MG" },
{ 64602, "ANTARIS", "MG" },
{ 64700, "Orange Reunion", "RE" },
{ 64710, "SFR Reunion", "RE" },
{ 64801, "NET*ONE", "ZW" },
{ 64803, "TELECEL", "ZW" },
{ 64804, "ECONET", "ZW" },
{ 64901, "MTC", "NA" },
{ 65001, "CALLPOINT 90", "MW" },
{ 65010, "CelTel", "MW" },
{ 65101, "Vodacom", "LS" },
{ 65201, "MASCOM", "BW" },
{ 65202, "VISTA", "BW" },
{ 65310, "SwaziMTN", "SZ" },
{ 65501, "Vodacom", "ZA" },
{ 65507, "Cell C (Pty) Ltd", "ZA" },
{ 65510, "MTN", "ZA" },
{ 70601, "PERSONAL", "SV" },
{ 70602, "DIGICEL", "SV" },
{ 71610, "TIM", "PE" },
{ 72207, "UNIFON", "AR" },
{ 72234, "Telecom Personal", "AR" },
{ 72235, "PORT-HABLE", "AR" },
{ 72402, "TIM BRASIL", "BR" },
{ 72403, "TIM BRASIL", "BR" },
{ 72404, "TIM BRASIL", "BR" },
{ 72405, "Claro", "BR" },
{ 72416, "BrTCel", "BR" },
{ 73001, "ENTEL PCS", "CL" },
{ 73010, "ENTEL PCS", "CL" },
{ 73401, "INFONET", "VE" },
{ 73402, "DIGITEL", "VE" },
{ 73601, "NUEVATEL", "BO" },
{ 73602, "ENTEL", "BO" },
{ 74401, "VOX", "PY" },
{ 74402, "PY 02", "PY" },
{ 74601, "ICMS", "SR" },
{ 90105, "Thuraya", UNKNOWN_COUNTRY_CODE }, //???
};
#define NUM_OPERATORNAMES (sizeof(g_rgonmOperatorNames) / sizeof(g_rgonmOperatorNames[0]))
//
// Services
//
static const DWORD g_rgdwServices[] =
{
RIL_SERVICE_MODEM_ASYNC, // 1
RIL_SERVICE_MODEM_SYNC, // 2
RIL_SERVICE_PADACCESS_ASYNC, // 3
RIL_SERVICE_PACKETACCESS_SYNC, // 4
RIL_SERVICE_VOICE, // 5
};
#define NUM_SERVICES (sizeof(g_rgdwServices) / sizeof(DWORD))
//
// Operator status values
//
static const DWORD g_rgdwOperStats[] =
{
RIL_OPSTATUS_UNKNOWN, // 0
RIL_OPSTATUS_AVAILABLE, // 1
RIL_OPSTATUS_CURRENT, // 2
RIL_OPSTATUS_FORBIDDEN, // 3
};
#define NUM_OPERSTATS (sizeof(g_rgdwOperStats) / sizeof(DWORD))
//
// Operator formats
//
static const DWORD g_rgdwOperFormats[] =
{
RIL_OPFORMAT_LONG, // 0
RIL_OPFORMAT_SHORT, // 1
RIL_OPFORMAT_NUM, // 2
};
#define NUM_OPERFORMATS (sizeof(g_rgdwOperFormats) / sizeof(DWORD))
//
// Operator selection modes
//
static const DWORD g_rgdwOperSelModes[] =
{
RIL_OPSELMODE_AUTOMATIC, // 0
RIL_OPSELMODE_MANUAL, // 1
0xFFFFFFFF, // 2
0xFFFFFFFF, // 3
RIL_OPSELMODE_MANUALAUTOMATIC, // 4
};
#define NUM_OPSELMODES (sizeof(g_rgdwOperSelModes) / sizeof(DWORD))
//
// Comparison routine used for binary search below
//
static int _cdecl BSCompareOperatorNames(const void* pElem1, const void* pElem2)
{
int nRet;
UINT nNumericName1 = ((OPERATORNAMEMAP*)pElem1)->nNumericName;
UINT nNumericName2 = ((OPERATORNAMEMAP*)pElem2)->nNumericName;
if (nNumericName1 < nNumericName2) {
nRet = -1;
} else if (nNumericName1 == nNumericName2) {
nRet = 0;
} else {
nRet = 1;
}
return nRet;
}
//
//
//
void GetLongOperatorNameEx(RILOPERATORNAMES* pronNames, DWORD dwLAC)
{
FUNCTION_TRACE(GetLongOperatorNameEx);
OPERATORNAMEMAP onmKey;
OPERATORNAMEMAP* ponmFound;
TCHAR tszLongName[MAXLENGTH_OPERATOR_LONG];
// Operator name precedence:
// 1) EONS.
// 2) EONS cache (ONLY if EONS isnt ready yet).
// 3) CPHS SIM field for HPLMN.
// 4) Value in registry, keyed by network number.
// 5) Value in hard-coded table above.
// 6) Value from radio response.
// 7) Numeric value.
BOOL fDone = FALSE;
#ifdef RIL_ENABLE_EONS
if (RIL_PARAM_ON_NUMNAME & pronNames->dwParams)
{
DWORD dwPLMN = atoi( pronNames->szNumName );
RILOPERATORNAMES ron;
memset( &ron, 0, sizeof(ron) );
/* use cache only if EONS isnt ready */
BOOL fReady = g_eons.Ready();
if ( fReady )
{
if ( dwLAC != 0xFFFFFFFF )
{
fDone = g_eons.Search( dwPLMN, dwLAC, &ron );
}
else
{
fDone = g_eons.Search( dwPLMN, &ron );
}
}
else
{
/* cached value */
if ( dwLAC != 0xFFFFFFFF )
{
fDone = g_eonscache.Search( dwPLMN, dwLAC, &ron );
}
else
{
fDone = g_eonscache.Search( dwPLMN, &ron );
}
}
if ( fDone )
{
if ( ron.dwParams & RIL_PARAM_ON_LONGNAME )
{
memcpy( pronNames->szLongName, ron.szLongName, sizeof(pronNames->szLongName) );
pronNames->dwParams |= RIL_PARAM_ON_LONGNAME;
}
if ( ron.dwParams & RIL_PARAM_ON_SHORTNAME )
{
memcpy( pronNames->szShortName, ron.szShortName, sizeof(pronNames->szShortName) );
pronNames->dwParams |= RIL_PARAM_ON_SHORTNAME;
}
if ( ron.dwParams & RIL_PARAM_ON_COUNTRY_CODE )
{
memcpy( pronNames->szCountryCode, ron.szCountryCode, sizeof(pronNames->szCountryCode) );
pronNames->dwParams |= RIL_PARAM_ON_COUNTRY_CODE;
}
}
}
#endif
/* CPHS override if EONS is not available and when registered HOME */
if ( !fDone && g_dwRegStatus == RIL_REGSTAT_HOME )
{
if ( g_pcszCPHS != NULL && g_pcszCPHS[0] != TEXT('\0') )
{
strncpyz(pronNames->szLongName, g_pcszCPHS, ARRAY_LENGTH(pronNames->szLongName));
pronNames->dwParams |= RIL_PARAM_ON_LONGNAME;
fDone = TRUE;
}
}
// Make sure we have a numeric name
if (!fDone&&(RIL_PARAM_ON_NUMNAME & pronNames->dwParams)) {
// Now see if we have a mapping for this numeric name specified in the registry
if (GetRegistrySZ(HKEY_LOCAL_MACHINE, g_tszRegKeyOperNames, TString(pronNames->szNumName), tszLongName, MAXLENGTH_OPERATOR_LONG)) {
// Yes, we do -- use it
strncpyz(pronNames->szLongName, AnsiString(tszLongName), MAXLENGTH_OPERATOR_LONG);
pronNames->dwParams |= RIL_PARAM_ON_LONGNAME;
} else {
// Set up the key for binary search
memset(&onmKey, 0x00, sizeof(onmKey));
// Perform binary search on the operator name map
//direct search first
onmKey.nNumericName = atoi(pronNames->szNumName);
ponmFound = (OPERATORNAMEMAP*)bsearch(&onmKey, g_rgonmOperatorNames, NUM_OPERATORNAMES, sizeof(OPERATORNAMEMAP), BSCompareOperatorNames);
if ((NULL == ponmFound) && (6 == strlen(pronNames->szNumName))) {
//handle 2 unusual PCS 1900 cases..
DWORD dwTemp;
//try the YYY0XX case first...(this needs to be done first because of proper ambiguity resolution)
onmKey.nNumericName = atoi(pronNames->szNumName);
dwTemp = onmKey.nNumericName % 100;
DEBUGCHK((0 <= dwTemp) && (100 > dwTemp));
onmKey.nNumericName -= dwTemp;
//if we now have a number divisible by 1000 (i.e. the form YYY000) then proceed
if (0 == (onmKey.nNumericName % 1000)) {
//map YYY000 to YYY00
onmKey.nNumericName /= 10;
//map YYY00 to YYYXX
onmKey.nNumericName += dwTemp;
ponmFound = (OPERATORNAMEMAP*)bsearch(&onmKey, g_rgonmOperatorNames, NUM_OPERATORNAMES, sizeof(OPERATORNAMEMAP), BSCompareOperatorNames);
}
if (NULL == ponmFound) {
//try the YYYXX0 case next...
onmKey.nNumericName = atoi(pronNames->szNumName);
//if we now have a number divisible by 10 (i.e. the form YYYXX0) then proceed
if (0 == (onmKey.nNumericName % 10)) {
//map YYYXX0 to YYYXX
onmKey.nNumericName /= 10;
ponmFound = (OPERATORNAMEMAP*)bsearch(&onmKey, g_rgonmOperatorNames, NUM_OPERATORNAMES, sizeof(OPERATORNAMEMAP), BSCompareOperatorNames);
}
}
}
if (ponmFound) {
// Copy the found long name into the provided buffer
strncpyz(pronNames->szLongName, ponmFound->szLongName, MAXLENGTH_OPERATOR_LONG);
strncpyz(pronNames->szCountryCode, ponmFound->szCountryCode, MAXLENGTH_OPERATOR_COUNTRY_CODE);
pronNames->dwParams |= RIL_PARAM_ON_LONGNAME|RIL_PARAM_ON_COUNTRY_CODE;
}
}
// If we still don't have a long name, then fill in with the numeric name
if (!(RIL_PARAM_ON_LONGNAME & pronNames->dwParams))
{
strncpyz(pronNames->szLongName, pronNames->szNumName, MAXLENGTH_OPERATOR_LONG);
strncpyz(pronNames->szCountryCode, UNKNOWN_COUNTRY_CODE, MAXLENGTH_OPERATOR_COUNTRY_CODE);
pronNames->dwParams |= RIL_PARAM_ON_LONGNAME|RIL_PARAM_ON_COUNTRY_CODE;
}
}
#if 0
if ( pronNames->dwParams & RIL_PARAM_ON_LONGNAME )
{
DEBUGMSG(ZONE_TRACE, (TEXT("RILDrv : i :-------------- LONG NAME [%hs] ---------------"), pronNames->szLongName));
}
if ( pronNames->dwParams & RIL_PARAM_ON_SHORTNAME )
{
DEBUGMSG(ZONE_TRACE, (TEXT("RILDrv : i :------------- SHORT NAME [%hs] ---------------"), pronNames->szShortName));
}
if ( pronNames->dwParams & RIL_PARAM_ON_NUMNAME )
{
DEBUGMSG(ZONE_TRACE, (TEXT("RILDrv : i :--------------- NUM NAME [%hs] ---------------"), pronNames->szNumName));
}
if ( pronNames->dwParams & RIL_PARAM_ON_COUNTRY_CODE )
{
DEBUGMSG(ZONE_TRACE, (TEXT("RILDrv : i :----------- COUNTRY CODE [%hs] ---------------"), pronNames->szCountryCode));
}
#endif
}
void GetLongOperatorName(RILOPERATORNAMES* pronNames)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -