⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 network.cpp

📁 ril source code for Windows CE
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    { 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 + -