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

📄 editserversettings.cpp

📁 一个WinCE6。0下的IP phone的源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        if (FAILED(hr))
        {
            return hr; 
        }
        
        if (!m_NewServerSettings[Index].assign(Text))
        {
            return E_OUTOFMEMORY;
        }

        if (m_NewServerSettings[Index] != ServerSettings_t::s_ServerSettings[Index])
        {
            if (!ServerSettings_t::s_ServerSettings[Index].assign(m_NewServerSettings[Index].get_buffer()))
            {
                return E_OUTOFMEMORY; 
            }

            UpdateFlags(Index); 
        }
    }

    if (m_UpdatedCategoryFlag != 0)
    {
        hr = ApplyNewSettings(); 
        if (FAILED(hr))
        {
            ///TODO: show up an error message? 
            ASSERT(FALSE); 
            return hr; 
        }
    }

    return GetSettingsApp()->GoBackToPreviousScreen();
}

void
EditServerSettingsDialog_t::UpdateFlags(
    unsigned int Index
    )
{
    if (Index < 0 || Index >= ServerSettings_t::LastSetting)
    {
        return; 
    }
    
    ServerSettings_t::SettingCategory_e Category = ServerSettings_t::sc_ServerSettings[Index].Category; 

    switch (Category)
    {
        case ServerSettings_t::SIPSettings: 
            m_UpdatedCategoryFlag |= VOIP_SIP_SETTINGS_BITMASK; 
            break; 

        case ServerSettings_t::VoicemailSettings:
            m_UpdatedCategoryFlag |= VOIP_VOICEMAIL_SETTINGS_BITMASK; 
            break; 

        case ServerSettings_t::BackupSIPSettings:
            m_UpdatedCategoryFlag |= VOIP_BACKUP_SIP_SETTINGS_BITMASK; 
            break; 

        case ServerSettings_t::ProvisionSettings:
            m_UpdatedCategoryFlag |= VOIP_VOICEMAIL_NUMBER_BITMASK; 
            break; 

        case ServerSettings_t::ExchangeProxySetting:
            m_UpdatedCategoryFlag |= EXCHANGE_PROXY; 
            break;

        case ServerSettings_t::ExchangeServerSetting: 
            m_UpdatedCategoryFlag |= EXCHANGE_SERVER; 
            break; 

        default: 
            ASSERT(FALSE); 
            break; 
    }

    return; 
}

HRESULT
EditServerSettingsDialog_t::ApplyNewSettings(
    void
    )
{
    HRESULT hr = S_OK; 
    WCHAR   ProvisionKey[MAX_PATH]  = L"";
    int     ExchangeSettingsChanged = 0;
    
    if (m_UpdatedCategoryFlag & VOIP_SIP_SETTINGS_BITMASK)
    {
        if (ShouldDeleteSIPSettings())
        {
            m_pSIPSettings = (WCHAR*)sc_DeleteSIPSettings; 
        }
        else
        {
            //generate the unique provision key first
            StringCchPrintf(
                 ProvisionKey, 
                 _countof(ProvisionKey), 
                 L"%08x", 
                 GetTickCount()
                 ); 
            
            DWORD MessageValues[] = 
            {
                reinterpret_cast<DWORD>(ProvisionKey),                                                                        // 1 - keyname
                reinterpret_cast<DWORD>((WCHAR*)(ServerSettings_t::s_ServerSettings[ServerSettings_t::AccountName].get_buffer())), // 2 - account name
                reinterpret_cast<DWORD>((WCHAR*)(ServerSettings_t::s_ServerSettings[ServerSettings_t::Password].get_buffer())),    // 3 - password
                reinterpret_cast<DWORD>((WCHAR*)(ServerSettings_t::s_ServerSettings[ServerSettings_t::PhoneNumber].get_buffer())), // 4 - uri
                reinterpret_cast<DWORD>((WCHAR*)(ServerSettings_t::s_ServerSettings[ServerSettings_t::SIPProxy].get_buffer())),    // 5 - sip proxy
                reinterpret_cast<DWORD>((WCHAR*)(ServerSettings_t::s_ServerSettings[ServerSettings_t::SIPTransport].get_buffer())),// 6 - protocol                
                reinterpret_cast<DWORD>((WCHAR*)(ServerSettings_t::s_ServerSettings[ServerSettings_t::SIPRegistrar].get_buffer())),// 7 - sip registrar
            }; 
            
            //come up the sip setting RTC XML
            if (!FormatMessage(
                    FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ARGUMENT_ARRAY, 
                    sc_SIPSettingsTemplate, 
                    0, 0, 
                    (LPWSTR)&m_pSIPSettings, 
                    0, 
                    reinterpret_cast<va_list*>(MessageValues)
                    ))
            {
                hr = CommonUtilities_t::GetErrorFromWin32(); 
                goto exit; 
            }
        }
        
    }

    if (m_UpdatedCategoryFlag & VOIP_BACKUP_SIP_SETTINGS_BITMASK)
    {
        if (ShouldDeleteBackupSIPSettings())
        {
            //we cleared up the back up sip settings, use the delete template
            m_pBackupSIPSettings = (WCHAR*)sc_DeleteBackupSIPSettings;             
        }
        else
        {            
            //generate the unique provision key first
            StringCchPrintf(
                 ProvisionKey, 
                 _countof(ProvisionKey), 
                 L"%08x", 
                 GetTickCount()
                 ); 
            
            DWORD MessageValues[] = 
            {
                reinterpret_cast<DWORD>(ProvisionKey),                   // 1 - keyname
                reinterpret_cast<DWORD>((WCHAR*)(ServerSettings_t::s_ServerSettings[ServerSettings_t::AccountName].get_buffer())),       // 2 - account name
                reinterpret_cast<DWORD>((WCHAR*)(ServerSettings_t::s_ServerSettings[ServerSettings_t::Password].get_buffer())),          // 3 - password
                reinterpret_cast<DWORD>((WCHAR*)(ServerSettings_t::s_ServerSettings[ServerSettings_t::PhoneNumber].get_buffer())),       // 4 - uri
                reinterpret_cast<DWORD>((WCHAR*)(ServerSettings_t::s_ServerSettings[ServerSettings_t::BackupSIPProxy].get_buffer())),    // 5 - backup sip proxy
                reinterpret_cast<DWORD>((WCHAR*)(ServerSettings_t::s_ServerSettings[ServerSettings_t::SIPTransport].get_buffer())),      // 6 - protocol                
                reinterpret_cast<DWORD>((WCHAR*)(ServerSettings_t::s_ServerSettings[ServerSettings_t::BackupSIPRegistrar].get_buffer())),// 7 - backup sip registrar
            }; 
            
            //come up the backup sip setting RTC XML
            if (!FormatMessage(
                    FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ARGUMENT_ARRAY, 
                    sc_BackupSIPSettingsTemplate, 
                    0, 0, 
                    (LPWSTR)&m_pBackupSIPSettings, 
                    0, 
                    reinterpret_cast<va_list*>(MessageValues)
                    ))
            {
                hr = CommonUtilities_t::GetErrorFromWin32(); 
                goto exit; 
            }
        }
        
    }

    if (m_UpdatedCategoryFlag & VOIP_VOICEMAIL_SETTINGS_BITMASK)
    {
        if (ShouldDeleteVoicemailSettings())
        {
            //we cleared up the voicemail settings, use the delete voicemail settings template
            m_pVoicemailSettings = (WCHAR*)sc_DeleteVoicemailSettings; 
        }
        else
        {
            //generate the unique provision key first
            StringCchPrintf(
                 ProvisionKey, 
                 _countof(ProvisionKey), 
                 L"%08x", 
                 GetTickCount()
                 ); 
            
            DWORD MessageValues[] = 
            {
                reinterpret_cast<DWORD>(ProvisionKey),                   // 1 - keyname
                reinterpret_cast<DWORD>((WCHAR*)(ServerSettings_t::s_ServerSettings[ServerSettings_t::AccountName].get_buffer())),       // 2 - account name
                reinterpret_cast<DWORD>((WCHAR*)(ServerSettings_t::s_ServerSettings[ServerSettings_t::Password].get_buffer())),          // 3 - password
                reinterpret_cast<DWORD>((WCHAR*)(ServerSettings_t::s_ServerSettings[ServerSettings_t::PhoneNumber].get_buffer())),       // 4 - uri
                reinterpret_cast<DWORD>((WCHAR*)(ServerSettings_t::s_ServerSettings[ServerSettings_t::VoicemailProxy].get_buffer())),    // 5 - voicemail proxy
                reinterpret_cast<DWORD>((WCHAR*)(ServerSettings_t::s_ServerSettings[ServerSettings_t::SIPTransport].get_buffer())),      // 6 - protocol                
            }; 
            
            //come up the sip setting RTC XML
            if (!FormatMessage(
                    FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ARGUMENT_ARRAY, 
                    sc_VoicemailSettingsTemplate, 
                    0, 0, 
                    (LPWSTR)&m_pVoicemailSettings, 
                    0, 
                    reinterpret_cast<va_list*>(MessageValues)
                    ))
            {
                hr = CommonUtilities_t::GetErrorFromWin32(); 
                goto exit; 
            }
        }
        
    }

    if (m_UpdatedCategoryFlag & VOIP_VOICEMAIL_NUMBER_BITMASK)
    {
        if (ShouldDeleteVoicemailNumber())
        {
            //we cleared up voice mail number, use the delete template
            m_pVoicemailNumber = (WCHAR*)sc_DeleteVoicemailNumber; 
        }
        else
        {
            DWORD MessageValues[] = 
            {
                reinterpret_cast<DWORD>((WCHAR*)(ServerSettings_t::s_ServerSettings[ServerSettings_t::VoicemailNumber].get_buffer())),   // 1 - voicemail number
            }; 

            //come up the voicemail setting RTC XML
            if (!FormatMessage(
                    FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ARGUMENT_ARRAY, 
                    sc_VoicemailNumberTemplate, 
                    0, 0, 
                    (LPWSTR)&m_pVoicemailNumber, 
                    0, 
                    reinterpret_cast<va_list*>(MessageValues)
                    ))
            {
                hr = CommonUtilities_t::GetErrorFromWin32(); 
                goto exit; 
            }
        }
    }

    if (m_UpdatedCategoryFlag & (VOIP_SIP_SETTINGS_BITMASK | VOIP_BACKUP_SIP_SETTINGS_BITMASK | VOIP_VOICEMAIL_SETTINGS_BITMASK | VOIP_VOICEMAIL_NUMBER_BITMASK))
    {
        //come up the final master provsion XML
        DWORD MessageValues[] = 
        {
            reinterpret_cast<DWORD>(m_pSIPSettings), 
            reinterpret_cast<DWORD>(m_pVoicemailSettings), 
            reinterpret_cast<DWORD>(m_pVoicemailNumber), 
            reinterpret_cast<DWORD>(m_pBackupSIPSettings), 
        }; 

        if (!FormatMessage(
                FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ARGUMENT_ARRAY, 
                sc_ProvisionTemplate, 
                0, 0, 
                (LPWSTR)&m_pProvisionDocument, 
                0, 
                reinterpret_cast<va_list*>(MessageValues)
                ))
        {
            hr = CommonUtilities_t::GetErrorFromWin32(); 
            goto exit; 
        }                

        hr = PHProcessProvisionXML(
                    m_pProvisionDocument, 
                    NULL
                    ); 
        if (FAILED(hr))
        {
            goto exit; 
        }
        
    }

    if (m_UpdatedCategoryFlag & EXCHANGE_PROXY)
    {
        hr = RegistrySetString(
                SN_VOIP_EXCHANGEPROXY_ROOT, 
                SN_VOIP_EXCHANGEPROXY_PATH, 
                SN_VOIP_EXCHANGEPROXY_VALUE, 
                ServerSettings_t::s_ServerSettings[ServerSettings_t::ExchangeProxy].get_buffer()
                ); 
        if (FAILED(hr))
        {
            goto exit; 
        }

        ExchangeSettingsChanged = ExchangeSettingsChanged | EXCHANGE_PROXY;
    }    

    if (m_UpdatedCategoryFlag & EXCHANGE_SERVER)
    {
        hr = RegistrySetString(
                SN_VOIP_EXCHANGESERVER_ROOT, 
                SN_VOIP_EXCHANGESERVER_PATH, 
                SN_VOIP_EXCHANGESERVER_VALUE, 
                ServerSettings_t::s_ServerSettings[ServerSettings_t::ExchangeServer].get_buffer()
                ); 
        if (FAILED(hr))
        {
            goto exit; 
        }                
        ExchangeSettingsChanged = ExchangeSettingsChanged | EXCHANGE_SERVER;
    }


exit: 
    if (ExchangeSettingsChanged != 0)
    {
        RegistrySetDWORD(
            SN_VOIP_UPDATEDEXCHANGESETTINGS_ROOT,        
            SN_VOIP_UPDATEDEXCHANGESETTINGS_PATH,        
            SN_VOIP_UPDATEDEXCHANGESETTINGS_VALUE,       
            ExchangeSettingsChanged
            ); 
    }

    CleanupAllPointers(); 
    return hr; 
}

void
EditServerSettingsDialog_t::CleanupPointer(
    WCHAR** ppString
    )
{
    if (ppString == NULL)
    {
        return; 
    }

    if (*ppString != sc_EmptyString && 
        *ppString != sc_DeleteSIPSettings && 
        *ppString != sc_DeleteBackupSIPSettings && 
        *ppString != sc_DeleteVoicemailNumber && 
        *ppString != sc_DeleteVoicemailSettings)
    {
        LocalFree(*ppString); 
        *ppString = (WCHAR*)sc_EmptyString; 
    }

    return; 
}

inline
bool
EditServerSettingsDialog_t::ShouldDeleteSIPSettings(
    void
    )
{
    return (ServerSettings_t::s_ServerSettings[ServerSettings_t::SIPProxy].length() == 0 &&
            ServerSettings_t::s_ServerSettings[ServerSettings_t::SIPRegistrar].length() == 0 &&
            ServerSettings_t::s_ServerSettings[ServerSettings_t::AccountName].length() == 0 &&
            ServerSettings_t::s_ServerSettings[ServerSettings_t::PhoneNumber].length() == 0); 
}

inline
bool
EditServerSettingsDialog_t::ShouldDeleteBackupSIPSettings(
    void
    )
{
    return (ServerSettings_t::s_ServerSettings[ServerSettings_t::BackupSIPProxy].length() == 0 &&
            ServerSettings_t::s_ServerSettings[ServerSettings_t::BackupSIPRegistrar].length() == 0); 
}

inline
bool
EditServerSettingsDialog_t::ShouldDeleteVoicemailSettings(
    void
    )
{
    return (ServerSettings_t::s_ServerSettings[ServerSettings_t::VoicemailProxy].length() == 0); 
}

inline
bool
EditServerSettingsDialog_t::ShouldDeleteVoicemailNumber(
    void
    )
{
    return (ServerSettings_t::s_ServerSettings[ServerSettings_t::VoicemailNumber].length() == 0); 
}


inline
void
EditServerSettingsDialog_t::CleanupAllPointers(
    void
    )
{
    CleanupPointer(&m_pProvisionDocument); 
    CleanupPointer(&m_pSIPSettings); 
    CleanupPointer(&m_pVoicemailNumber); 
    CleanupPointer(&m_pVoicemailSettings); 
    CleanupPointer(&m_pBackupSIPSettings);     

    return; 
    
}

⌨️ 快捷键说明

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