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

📄 eons.cpp

📁 windows mobile RIL软件
💻 CPP
📖 第 1 页 / 共 3 页
字号:
                ASSERT( strlen(opl.szPLMN) == 6 );
            }

            /* lacA <= lacZ */
            ASSERT( opl.dwLACa <= opl.dwLACz );

            /* lacZ <= 0x0ffff */
            ASSERT( opl.dwLACz <= 0x0ffff );

            /* PLMN should not be all WILDCARDs */
            BOOL fAllWildcards = TRUE;
            for( int j = 0; j < (int)strlen(opl.szPLMN) && fAllWildcards; j++ )
            {
                fAllWildcards = ( opl.szPLMN[j] == WILDCARD );
            }
            ASSERT( !fAllWildcards );

            /* index to PNN list */
            ASSERT( opl.dwIndex <= 256 );
            /* index can only be either 0 (deleted entry) or within [1,num-of-PNN-entry] */
            ASSERT( opl.dwIndex == 0 || ( 1 <= opl.dwIndex && opl.dwIndex <= static_cast<DWORD>( iPNN ) ) );
        }
        for( int i = 0; i < iPNN; i++ )
        {
            RILOPERATORNAMES ron = const_cast<GrowableThingCollection<RILOPERATORNAMES>*>( &m_pnn )->GetThingAtIndex( i );

            /* dont exist */
            ASSERT( ! ( ron.dwParams & RIL_PARAM_ON_COUNTRY_CODE ) );
            ASSERT( ! ( ron.dwParams & RIL_PARAM_ON_NUMNAME ) );
        }
#endif
    }
#endif
}

/****************************************************************************/
/****************************************************************************/

const TCHAR EONSCache::RegistryPath[] = RIL_SECURE_REGISTRY_KEY TEXT("\\EONS.cache");

EONSCache::EONSCache()
{
}

EONSCache::EONSCache( const EONS& ref )
    : EONS(ref)
{
}

EONSCache::~EONSCache()
{
}

HRESULT
EONSCache::Read()
{
    /* override to make the read synchronous */
    HRESULT hr = ReadData();
    return hr;
}

HRESULT
EONSCache::Write()
{
    HRESULT hr = WriteOPLData();
    if ( SUCCEEDED( hr ) )
    {
        hr = WritePNNData();
    }
    return hr;
}

void
EONSCache::Invalidate()
{
    Clear();
}

HRESULT
EONSCache::ReadOPLData()
{
    HRESULT hr = E_FAIL;

    HKEY hkey = NULL;

    StringBuffer key;
    key.Set( RegistryPath );
    key.Append( TEXT("\\opl") );

    LONG lResult = RegOpenKeyEx( RIL_REGISTRY_ROOT, key, 0, 0, &hkey );
    if ( lResult == ERROR_SUCCESS )
    {
        hr = S_OK;
        TCHAR subkey[16];

        BOOL fDone = FALSE;
        for( int i = 1; !fDone; i++ )
        {
            _sntprintfz( subkey, ARRAY_LENGTH(subkey), TEXT("%d"), i );

            HKEY hkey2 = NULL;

            lResult = RegOpenKeyEx( hkey, subkey, 0, 0, &hkey2 );
            if ( lResult == ERROR_SUCCESS )
            {
                OPLStruct opl;
                memset( &opl, 0, sizeof(opl) );

                BOOL fError = FALSE;
                DWORD dwSize = 0;
                DWORD dwType = 0;

                {
                    TCHAR szBuf[ARRAY_LENGTH(opl.szPLMN)];
                    dwSize = sizeof(szBuf);
                    lResult = RegQueryValueEx( hkey2, TEXT("PLMN"), NULL, &dwType, (BYTE*)szBuf, &dwSize );
                    fError = ( lResult != ERROR_SUCCESS || dwType != REG_SZ );
                    if ( !fError )
                    {
                        AnsiString as(szBuf);
                        strncpyz( opl.szPLMN, (const char*)as, ARRAY_LENGTH(opl.szPLMN) );
                    }
                }

                if ( !fError )
                {
                    dwSize = sizeof(opl.dwLACa);
                    lResult = RegQueryValueEx( hkey2, TEXT("start LAC"), NULL, &dwType, (BYTE*)&opl.dwLACa, &dwSize );
                    fError = ( lResult != ERROR_SUCCESS || dwType != REG_DWORD );
                }

                if ( !fError )
                {
                    dwSize = sizeof(opl.dwLACz);
                    lResult = RegQueryValueEx( hkey2, TEXT("end LAC"), NULL, &dwType, (BYTE*)&opl.dwLACz, &dwSize );
                    fError = ( lResult != ERROR_SUCCESS || dwType != REG_DWORD );
                }

                if ( !fError )
                {
                    dwSize = sizeof(opl.dwIndex);
                    lResult = RegQueryValueEx( hkey2, TEXT("index"), NULL, &dwType, (BYTE*)&opl.dwIndex, &dwSize );
                    fError = ( lResult != ERROR_SUCCESS || dwType != REG_DWORD );
                }

                if ( !fError )
                {
                    m_opl.AddThing( opl );
                }
            }
            else if ( lResult == ERROR_FILE_NOT_FOUND )
            {
                fDone = TRUE;
                hr = S_OK;
            }
            else
            {
                fDone = TRUE;
                hr = HRESULT_FROM_WIN32( lResult );
            }

            if ( hkey2 != NULL )
            {
                RegCloseKey( hkey2 );
            }
            hkey2 = NULL;
        }
    }
    else if ( lResult == ERROR_FILE_NOT_FOUND )
    {
        /* cache doesnt exist; treat as no items */
        hr = S_OK;
    }
    else
    {
        hr = HRESULT_FROM_WIN32( lResult );
    }

    if ( hkey != NULL )
    {
        RegCloseKey( hkey );
    }
    hkey = NULL;

    return hr;
}

HRESULT
EONSCache::ReadPNNData()
{
    HRESULT hr = E_FAIL;

    HKEY hkey = NULL;

    StringBuffer key;
    key.Set( RegistryPath );
    key.Append( TEXT("\\pnn") );

    LONG lResult = RegOpenKeyEx( RIL_REGISTRY_ROOT, key, 0, 0, &hkey );
    if ( lResult == ERROR_SUCCESS )
    {
        hr = S_OK;
        TCHAR subkey[16];

        BOOL fDone = FALSE;
        for( int i = 1; !fDone; i++ )
        {
            _sntprintfz( subkey, ARRAY_LENGTH(subkey), TEXT("%d"), i );

            HKEY hkey2 = NULL;

            lResult = RegOpenKeyEx( hkey, subkey, 0, 0, &hkey2 );
            if ( lResult == ERROR_SUCCESS )
            {
                RILOPERATORNAMES ron;
                memset( &ron, 0, sizeof(ron) );
                ron.cbSize = sizeof(ron);

                BOOL fError = FALSE;
                DWORD dwSize = 0;
                DWORD dwType = 0;

                {
                    TCHAR szBuf[ARRAY_LENGTH(ron.szLongName)];
                    dwSize = sizeof(szBuf);
                    lResult = RegQueryValueEx( hkey2, TEXT("long name"), NULL, &dwType, (BYTE*)szBuf, &dwSize );
                    fError = ( lResult != ERROR_SUCCESS || dwType != REG_SZ );
                    if ( !fError )
                    {
                        AnsiString as(szBuf);
                        strncpyz( ron.szLongName, (const char*)as, ARRAY_LENGTH(ron.szLongName) );
                        ron.dwParams |= RIL_PARAM_ON_LONGNAME;
                    }
                }

                if ( !fError )
                {
                    TCHAR szBuf[ARRAY_LENGTH(ron.szShortName)];
                    dwSize = sizeof(szBuf);
                    lResult = RegQueryValueEx( hkey2, TEXT("short name"), NULL, &dwType, (BYTE*)szBuf, &dwSize );
                    if ( lResult == ERROR_SUCCESS && dwType == REG_SZ )
                    {
                        AnsiString as(szBuf);
                        strncpyz( ron.szShortName, (const char*)as, ARRAY_LENGTH(ron.szShortName) );
                        ron.dwParams |= RIL_PARAM_ON_SHORTNAME;
                    }
                    else if ( lResult == ERROR_FILE_NOT_FOUND )
                    {
                        /* ok -- short name is optional */
                    }
                    else
                    {
                        fError = TRUE;
                    }
                }

                if ( !fError )
                {
                    m_pnn.AddThing( ron );
                }
            }
            else if ( lResult == ERROR_FILE_NOT_FOUND )
            {
                fDone = TRUE;
                hr = S_OK;
            }
            else
            {
                fDone = TRUE;
                hr = HRESULT_FROM_WIN32( lResult );
            }

            if ( hkey2 != NULL )
            {
                RegCloseKey( hkey2 );
            }
            hkey2 = NULL;
        }
    }
    else if ( lResult == ERROR_FILE_NOT_FOUND )
    {
        /* cache doesnt exist; treat as no items */
        hr = S_OK;
    }
    else
    {
        hr = HRESULT_FROM_WIN32( lResult );
    }

    if ( hkey != NULL )
    {
        RegCloseKey( hkey );
    }
    hkey = NULL;

    return hr;
}

HRESULT
EONSCache::WriteOPLData()
{
    HRESULT hr = S_OK;

    StringBuffer key;
    key.Set( RegistryPath );
    key.Append( TEXT("\\opl") );

    LONG lResult = RegDeleteKey( RIL_REGISTRY_ROOT, key );

    int c = m_opl.GetSize();
    if ( c > 0 )
    {
        HKEY hkey = NULL;
        DWORD dwDisposition = 0;
        lResult = RegCreateKeyEx( RIL_REGISTRY_ROOT, key, 0, NULL, 0, 0, NULL, &hkey, &dwDisposition );
        if ( lResult == ERROR_SUCCESS )
        {
            TCHAR subkey[16];
            BOOL fError = FALSE;

            for( int i = 0; i < c && !fError; i++ )
            {
                _sntprintfz( subkey, ARRAY_LENGTH(subkey), TEXT("%d"), i+1 );

                HKEY hkey2 = NULL;
                lResult = RegCreateKeyEx( hkey, subkey, 0, NULL, 0, 0, NULL, &hkey2, &dwDisposition );
                if ( lResult == ERROR_SUCCESS )
                {
                    OPLStruct opl = m_opl.GetThingAtIndex( i );

                    DWORD dwSize = 0;

                    {
                        WideString ws( opl.szPLMN );
                        dwSize = ( ( strlen(opl.szPLMN) + 1 ) * sizeof(TCHAR) );
                        lResult = RegSetValueEx( hkey2, TEXT("PLMN"), 0, REG_SZ, (BYTE*)(const TCHAR *)ws, dwSize );
                        if ( lResult != ERROR_SUCCESS )
                        {
                            fError = TRUE;
                            hr = HRESULT_FROM_WIN32( lResult );
                        }
                    }

                    if ( !fError )
                    {
                        dwSize = sizeof(opl.dwLACa);
                        lResult = RegSetValueEx( hkey2, TEXT("start LAC"), 0, REG_DWORD, (BYTE*)&opl.dwLACa, dwSize );
                        if ( lResult != ERROR_SUCCESS )
                        {
                            fError = TRUE;
                            hr = HRESULT_FROM_WIN32( lResult );
                        }
                    }

                    if ( !fError )
                    {
                        dwSize = sizeof(opl.dwLACz);
                        lResult = RegSetValueEx( hkey2, TEXT("end LAC"), 0, REG_DWORD, (BYTE*)&opl.dwLACz, dwSize );
                        if ( lResult != ERROR_SUCCESS )
                        {
                            fError = TRUE;
                            hr = HRESULT_FROM_WIN32( lResult );
                        }
                    }

                    if ( !fError )
                    {
                        dwSize = sizeof(opl.dwIndex);
                        lResult = RegSetValueEx( hkey2, TEXT("index"), 0, REG_DWORD, (BYTE*)&opl.dwIndex, dwSize );
                        if ( lResult != ERROR_SUCCESS )
                        {
                            fError = TRUE;
                            hr = HRESULT_FROM_WIN32( lResult );
                        }
                    }
                }
                else
                {
                    fError = TRUE;
                    hr = HRESULT_FROM_WIN32( lResult );
                }

                if ( hkey2 != NULL )
                {
                    RegCloseKey( hkey2 );
                }
                hkey2 = NULL;
            }
        }
        else
        {
            hr = HRESULT_FROM_WIN32( lResult );
        }

        if ( hkey != NULL )
        {
            RegCloseKey( hkey );
        }
        hkey = NULL;
    }
    
    return hr;
}

HRESULT
EONSCache::WritePNNData()
{
    HRESULT hr = S_OK;

    StringBuffer key;
    key.Set( RegistryPath );
    key.Append( TEXT("\\pnn") );

    LONG lResult = RegDeleteKey( RIL_REGISTRY_ROOT, key );

    int c = m_pnn.GetSize();
    if ( c > 0 )
    {
        HKEY hkey = NULL;
        DWORD dwDisposition = 0;
        lResult = RegCreateKeyEx( RIL_REGISTRY_ROOT, key, 0, NULL, 0, 0, NULL, &hkey, &dwDisposition );
        if ( lResult == ERROR_SUCCESS )
        {
            TCHAR subkey[16];
            BOOL fError = FALSE;

            for( int i = 0; i < c && !fError; i++ )
            {
                _sntprintfz( subkey, ARRAY_LENGTH(subkey), TEXT("%d"), i+1 );

                HKEY hkey2 = NULL;
                lResult = RegCreateKeyEx( hkey, subkey, 0, NULL, 0, 0, NULL, &hkey2, &dwDisposition );
                if ( lResult == ERROR_SUCCESS )
                {
                    RILOPERATORNAMES ron = m_pnn.GetThingAtIndex( i );

                    DWORD dwSize = 0;

                    if ( ron.dwParams & RIL_PARAM_ON_LONGNAME )
                    {
                        WideString ws( ron.szLongName );
                        dwSize = ( ( strlen(ron.szLongName) + 1 ) * sizeof(TCHAR) );
                        lResult = RegSetValueEx( hkey2, TEXT("long name"), 0, REG_SZ, (BYTE*)(const TCHAR *)ws, dwSize );
                        if ( lResult != ERROR_SUCCESS )
                        {
                            fError = TRUE;
                            hr = HRESULT_FROM_WIN32( lResult );
                        }
                    }

                    if ( !fError )
                    {
                        if ( ron.dwParams & RIL_PARAM_ON_SHORTNAME )
                        {
                            WideString ws( ron.szShortName );
                            dwSize = ( ( strlen(ron.szShortName) + 1 ) * sizeof(TCHAR) );
                            lResult = RegSetValueEx( hkey2, TEXT("short name"), 0, REG_SZ, (BYTE*)(const TCHAR *)ws, dwSize );
                            if ( lResult != ERROR_SUCCESS )
                            {
                                fError = TRUE;
                                hr = HRESULT_FROM_WIN32( lResult );
                            }
                        }
                    }
                }
                else
                {
                    fError = TRUE;
                    hr = HRESULT_FROM_WIN32( lResult );
                }

                if ( hkey2 != NULL )
                {
                    RegCloseKey( hkey2 );
                }
                hkey2 = NULL;
            }
        }
        else
        {
            hr = HRESULT_FROM_WIN32( lResult );
        }

        if ( hkey != NULL )
        {
            RegCloseKey( hkey );
        }
        hkey = NULL;
    }
    
    return hr;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -