445 lines
10 KiB
C++
445 lines
10 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// FILE : DlgSMTPConfig.cpp //
|
|
// //
|
|
// DESCRIPTION : The CDlgSMTPConfig class implements the //
|
|
// //
|
|
// AUTHOR : yossg //
|
|
// //
|
|
// HISTORY : //
|
|
// Jul 20 2000 yossg Create //
|
|
// Oct 17 2000 yossg //
|
|
// //
|
|
// Copyright (C) 2000 Microsoft Corporation All Rights Reserved //
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "StdAfx.h"
|
|
|
|
#include "DlgSMTPConfig.h"
|
|
#include "DlgConfirmPassword.h"
|
|
|
|
#include "FxsValid.h"
|
|
#include "dlgutils.h"
|
|
#include <htmlHelp.h>
|
|
#include <faxreg.h>
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CDlgSMTPConfig
|
|
|
|
CDlgSMTPConfig::CDlgSMTPConfig()
|
|
{
|
|
m_fIsPasswordDirty = FALSE;
|
|
m_fIsDialogInitiated = FALSE;
|
|
}
|
|
|
|
CDlgSMTPConfig::~CDlgSMTPConfig()
|
|
{
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
- CDlgSMTPConfig::InitSmtpDlg
|
|
-
|
|
* Purpose:
|
|
* Initiates the configuration structure from RPC get Call,
|
|
* and current assined devices own parameters
|
|
*
|
|
* Arguments:
|
|
*
|
|
* Return:
|
|
* OLE error code
|
|
*/
|
|
HRESULT CDlgSMTPConfig::InitSmtpDlg (FAX_ENUM_SMTP_AUTH_OPTIONS enumAuthOption, BSTR bstrUserName)
|
|
{
|
|
DEBUG_FUNCTION_NAME( _T("CDlgSMTPConfig::InitSmtpDlg"));
|
|
|
|
HRESULT hRc = S_OK;
|
|
|
|
m_enumAuthOption = enumAuthOption;
|
|
|
|
m_bstrUserName = bstrUserName;
|
|
if (!m_bstrUserName )
|
|
{
|
|
DebugPrintEx(DEBUG_ERR,
|
|
_T("Out of memory - Failed to Init m_bstrUserName. (ec: %0X8)"), hRc);
|
|
//MsgBox by Caller Function
|
|
hRc = E_OUTOFMEMORY;
|
|
goto Exit;
|
|
}
|
|
|
|
ATLASSERT(S_OK == hRc);
|
|
|
|
Exit:
|
|
return hRc;
|
|
}
|
|
|
|
/*
|
|
+ CDlgSMTPConfig::OnInitDialog
|
|
+
|
|
* Purpose:
|
|
* Initiate all dialog controls.
|
|
*
|
|
* Arguments:
|
|
* [in] uMsg : Value identifying the event.
|
|
* [in] lParam : Message-specific value.
|
|
* [in] wParam : Message-specific value.
|
|
* [in] bHandled : bool value.
|
|
*
|
|
- Return:
|
|
- 0 or 1
|
|
*/
|
|
LRESULT
|
|
CDlgSMTPConfig::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
DEBUG_FUNCTION_NAME( _T("CDlgSMTPConfig::OnInitDialog"));
|
|
HRESULT hRc = S_OK;
|
|
|
|
|
|
switch (m_enumAuthOption)
|
|
{
|
|
case FAX_SMTP_AUTH_ANONYMOUS :
|
|
|
|
CheckDlgButton(IDC_SMTP_ANONIM_RADIO1, BST_CHECKED);
|
|
EnableCredentialsButton(IDC_SMTP_ANONIM_RADIO1);
|
|
|
|
break;
|
|
|
|
case FAX_SMTP_AUTH_BASIC :
|
|
|
|
CheckDlgButton(IDC_SMTP_BASIC_RADIO2, BST_CHECKED);
|
|
EnableCredentialsButton(IDC_SMTP_BASIC_RADIO2);
|
|
|
|
break;
|
|
|
|
case FAX_SMTP_AUTH_NTLM :
|
|
|
|
CheckDlgButton(IDC_SMTP_NTLM_RADIO3, BST_CHECKED);
|
|
EnableCredentialsButton(IDC_SMTP_NTLM_RADIO3);
|
|
|
|
break;
|
|
|
|
default:
|
|
ATLASSERT(0);
|
|
|
|
}
|
|
|
|
m_fIsDialogInitiated = TRUE;
|
|
|
|
EnableOK(FALSE);
|
|
return 1; // Let the system set the focus
|
|
}
|
|
|
|
/*
|
|
+ CDlgSMTPConfig::OnOK
|
|
+
|
|
* Purpose:
|
|
* Initiate all dialog controls.
|
|
*
|
|
* Arguments:
|
|
* [in] uMsg : Value identifying the event.
|
|
* [in] lParam : Message-specific value.
|
|
* [in] wParam : Message-specific value.
|
|
* [in] bHandled : bool value.
|
|
*
|
|
- Return:
|
|
- 0 or 1
|
|
*/
|
|
LRESULT
|
|
CDlgSMTPConfig::OnOK(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
DEBUG_FUNCTION_NAME( _T("CDlgSMTPConfig::OnOK"));
|
|
HRESULT hRc = S_OK;
|
|
|
|
//
|
|
// Set data member data
|
|
//
|
|
if (IsDlgButtonChecked(IDC_SMTP_ANONIM_RADIO1) == BST_CHECKED)
|
|
{
|
|
m_enumAuthOption = FAX_SMTP_AUTH_ANONYMOUS;
|
|
}
|
|
else
|
|
{
|
|
if (IsDlgButtonChecked(IDC_SMTP_NTLM_RADIO3) == BST_CHECKED)
|
|
{
|
|
m_enumAuthOption = FAX_SMTP_AUTH_NTLM;
|
|
}
|
|
else // IsDlgButtonChecked(IDC_SMTP_BASIC_RADIO2) == BST_CHECKED
|
|
{
|
|
m_enumAuthOption = FAX_SMTP_AUTH_BASIC;
|
|
}
|
|
}
|
|
|
|
//
|
|
// Step 4: Close the dialog
|
|
//
|
|
ATLASSERT(S_OK == hRc );
|
|
|
|
EndDialog(wID);
|
|
|
|
goto Exit;
|
|
|
|
|
|
Exit:
|
|
|
|
return FAILED(hRc) ? 0 : 1;
|
|
}
|
|
|
|
/*
|
|
- CDlgSMTPConfig::EnableCredentialsButton
|
|
-
|
|
* Purpose:
|
|
* Enable/disable Basic Authentication dialog controls.
|
|
*
|
|
* Arguments:
|
|
* [in] iIDC - DWORD value for the radio button selected or the
|
|
* radio above the credetials button that should be active.
|
|
*
|
|
* Return:
|
|
* void
|
|
*/
|
|
VOID CDlgSMTPConfig::EnableCredentialsButton(DWORD iIDC)
|
|
{
|
|
|
|
switch (iIDC)
|
|
{
|
|
case IDC_SMTP_ANONIM_RADIO1:
|
|
|
|
::EnableWindow(GetDlgItem(IDC_SMTP_CREDENTIALS_BASIC_BUTTON), FALSE);
|
|
::EnableWindow(GetDlgItem(IDC_SMTP_CREDENTIALS_NTLM_BUTTON), FALSE);
|
|
break;
|
|
|
|
case IDC_SMTP_BASIC_RADIO2:
|
|
|
|
::EnableWindow(GetDlgItem(IDC_SMTP_CREDENTIALS_BASIC_BUTTON), TRUE);
|
|
::EnableWindow(GetDlgItem(IDC_SMTP_CREDENTIALS_NTLM_BUTTON), FALSE);
|
|
break;
|
|
|
|
case IDC_SMTP_NTLM_RADIO3:
|
|
|
|
::EnableWindow(GetDlgItem(IDC_SMTP_CREDENTIALS_NTLM_BUTTON), TRUE);
|
|
::EnableWindow(GetDlgItem(IDC_SMTP_CREDENTIALS_BASIC_BUTTON), FALSE);
|
|
break;
|
|
|
|
default:
|
|
|
|
ATLASSERT( 0 ); // Unexpected value
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
- CDlgSMTPConfig::OnRadioButtonClicked
|
|
-
|
|
* Purpose:
|
|
* .
|
|
*
|
|
* Arguments:
|
|
*
|
|
* Return:
|
|
* 1
|
|
*/
|
|
LRESULT
|
|
CDlgSMTPConfig::OnRadioButtonClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
UNREFERENCED_PARAMETER (wNotifyCode);
|
|
UNREFERENCED_PARAMETER (hWndCtl);
|
|
UNREFERENCED_PARAMETER (bHandled);
|
|
|
|
DEBUG_FUNCTION_NAME( _T("CDlgSMTPConfig::OnRadioButtonClicked"));
|
|
|
|
UINT fEnableOK;
|
|
|
|
if (!m_fIsDialogInitiated) //event receieved in too early stage
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
//
|
|
// Activate OK button
|
|
//
|
|
if ( IsDlgButtonChecked(IDC_SMTP_ANONIM_RADIO1) == BST_CHECKED )
|
|
{
|
|
EnableOK(TRUE);
|
|
}
|
|
else //BASIC or NTLM
|
|
{
|
|
ATLASSERT(IDC_SMTP_BASIC_RADIO2 == wID || IDC_SMTP_NTLM_RADIO3 == wID );
|
|
|
|
fEnableOK = ( m_bstrUserName.Length() > 0 );
|
|
|
|
EnableOK(!!fEnableOK);
|
|
}
|
|
|
|
//
|
|
// Activate the proper Credentials button
|
|
//
|
|
EnableCredentialsButton(wID);
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
/*
|
|
- CDlgSMTPConfig::OnCredentialsButtonClicked
|
|
-
|
|
* Purpose:
|
|
* Allow edit Credentials for the SMTP server configuration .
|
|
*
|
|
* Arguments:
|
|
*
|
|
* Return:
|
|
* 1
|
|
*/
|
|
LRESULT CDlgSMTPConfig::OnCredentialsButtonClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
DEBUG_FUNCTION_NAME( _T("CDlgSMTPConfig::OnCredentialsButtonClicked"));
|
|
|
|
INT_PTR rc = IDCANCEL;
|
|
HRESULT hRc = S_OK;
|
|
DWORD dwRet = ERROR_SUCCESS;
|
|
|
|
CDlgConfirmPassword DlgCredentialsConfig;
|
|
|
|
|
|
//
|
|
// Dialog to configure SMTP authentication mode
|
|
//
|
|
hRc = DlgCredentialsConfig.InitCredentialsDlg(m_bstrUserName);
|
|
if (FAILED(hRc))
|
|
{
|
|
DlgMsgBox(this, IDS_MEMORY);
|
|
goto Cleanup;
|
|
}
|
|
|
|
rc = DlgCredentialsConfig.DoModal();
|
|
if (rc != IDOK)
|
|
{
|
|
goto Cleanup;
|
|
}
|
|
|
|
|
|
m_bstrUserName = DlgCredentialsConfig.GetUserName();
|
|
if (!m_bstrUserName)
|
|
{
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
TEXT("Null memeber BSTR - m_bstrUserName."));
|
|
|
|
DlgMsgBox(this, IDS_MEMORY);
|
|
|
|
goto Cleanup;
|
|
}
|
|
|
|
if ( DlgCredentialsConfig.IsPasswordModified() ) //If you got here password was also confirmed
|
|
{
|
|
m_bstrPassword = DlgCredentialsConfig.GetPassword();
|
|
if (!m_bstrPassword)
|
|
{
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
TEXT("Out of memory while setting m_bstrPassword"));
|
|
DlgMsgBox(this, IDS_MEMORY);
|
|
|
|
goto Cleanup;
|
|
}
|
|
|
|
m_fIsPasswordDirty = TRUE;
|
|
}
|
|
else
|
|
{
|
|
m_bstrPassword.Empty();
|
|
}
|
|
|
|
EnableOK(TRUE);
|
|
|
|
|
|
Cleanup:
|
|
return 1;
|
|
}
|
|
|
|
|
|
/*
|
|
- CDlgSMTPConfig::EnableOK
|
|
-
|
|
* Purpose:
|
|
* Enable (disable) apply button.
|
|
*
|
|
* Arguments:
|
|
* [in] fEnable - the value to enable the button
|
|
*
|
|
* Return:
|
|
* void
|
|
*/
|
|
VOID
|
|
CDlgSMTPConfig::EnableOK(BOOL fEnable)
|
|
{
|
|
HWND hwndOK = GetDlgItem(IDOK);
|
|
::EnableWindow(hwndOK, fEnable);
|
|
}
|
|
|
|
/*
|
|
- CDlgSMTPConfig::OnCancel
|
|
-
|
|
* Purpose:
|
|
* End dialog OnCancel.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* Return:
|
|
* 0
|
|
*/
|
|
LRESULT
|
|
CDlgSMTPConfig::OnCancel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
DEBUG_FUNCTION_NAME( _T("CDlgSMTPConfig::OnCancel"));
|
|
|
|
EndDialog(wID);
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CDlgSMTPConfig::OnHelpRequest
|
|
|
|
This is called in response to the WM_HELP Notify
|
|
message and to the WM_CONTEXTMENU Notify message.
|
|
|
|
WM_HELP Notify message.
|
|
This message is sent when the user presses F1 or <Shift>-F1
|
|
over an item or when the user clicks on the ? icon and then
|
|
presses the mouse over an item.
|
|
|
|
WM_CONTEXTMENU Notify message.
|
|
This message is sent when the user right clicks over an item
|
|
and then clicks "What's this?"
|
|
|
|
--*/
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
LRESULT
|
|
CDlgSMTPConfig::OnHelpRequest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
|
|
{
|
|
DEBUG_FUNCTION_NAME(_T("CDlgSMTPConfig::OnHelpRequest"));
|
|
|
|
switch (uMsg)
|
|
{
|
|
case WM_HELP:
|
|
WinContextHelp(((LPHELPINFO)lParam)->dwContextId, m_hWnd);
|
|
break;
|
|
|
|
case WM_CONTEXTMENU:
|
|
WinContextHelp(::GetWindowContextHelpId((HWND)wParam), m_hWnd);
|
|
break;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|