You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1023 lines
33 KiB
1023 lines
33 KiB
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (C) 1999-2001 Microsoft Corporation
|
|
//
|
|
// Module Name:
|
|
// ConfigAlertEmail.cpp
|
|
//
|
|
// Description:
|
|
// implement the class CConfigAlertEmail
|
|
//
|
|
// Dependency files:
|
|
// ConfigAlertEmail.h
|
|
//
|
|
// History:
|
|
// 1. lustar.li (Guogang Li), creation date in 18-DEC-2000
|
|
//
|
|
// Notes:
|
|
//
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "stdafx.h"
|
|
#include <regstr.h>
|
|
#include <comdef.h>
|
|
#include <comutil.h>
|
|
#include "SetAlertEmail.h"
|
|
|
|
#include "appliancetask.h"
|
|
#include "taskctx.h"
|
|
#include "ConfigAlertEmail.h"
|
|
|
|
#include "appsrvcs.h"
|
|
#include "alertemailmsg.h"
|
|
|
|
|
|
//
|
|
// Name and parameters for SetAlertEmail Task
|
|
//
|
|
const WCHAR SET_ALERT_EMAIL_TASK[] = L"SetAlertEmail";
|
|
const WCHAR PARAM_ENABLE_ALERT_EMAIL[] = L"EnableAlertEmail";
|
|
const WCHAR PARAM_SEND_EMAIL_TYPE[] = L"SendEmailType";
|
|
const WCHAR PARAM_RECEIVER_EMAIL_ADDRESS[] = L"ReceiverEmailAddress";
|
|
|
|
//
|
|
// Alert source information
|
|
//
|
|
const WCHAR ALERT_LOG_NAME[]=L"MSSAKitComm";
|
|
const WCHAR ALERT_SOURCE []=L"";
|
|
|
|
//
|
|
// Registry locations
|
|
//
|
|
const WCHAR REGKEY_SA_ALERTEMAIL[] =
|
|
L"Software\\Microsoft\\ServerAppliance\\AlertEmail";
|
|
const WCHAR REGSTR_VAL_ENABLE_ALERT_EMAIL[] = L"EnableAlertEmail";
|
|
const WCHAR REGSTR_VAL_ALERTEMAIL_RAISEALERT[] = L"RaiseAlert";
|
|
const WCHAR REGSTR_VAL_SEND_EMAIL_TYPE[] = L"SendEmailType";
|
|
const WCHAR REGSTR_VAL_RECEIVER_EMAIL_ADDRESS[] = L"ReceiverEmailAddress";
|
|
|
|
|
|
//
|
|
// Various strings used in the program
|
|
//
|
|
const WCHAR SZ_METHOD_NAME[]=L"MethodName";
|
|
const WCHAR SZ_APPLIANCE_INITIALIZATION_TASK []=L"ApplianceInitializationTask";
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Function: CConfigAlertEmail::OnTaskExecute
|
|
//
|
|
// Synopsis: This function is the entry point for AppMgr.
|
|
//
|
|
// Arguments: pTaskContext - The TaskContext object contains the method name
|
|
// and parameters as name value pairs
|
|
//
|
|
// Returns: HRESULT
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
STDMETHODIMP
|
|
CConfigAlertEmail::OnTaskExecute(IUnknown *pTaskContext)
|
|
{
|
|
HRESULT hrRet=E_FAIL;
|
|
CComPtr<ITaskContext> pTaskParameters;
|
|
SET_ALERT_EMAIL_TASK_TYPE saetChoice;
|
|
|
|
ASSERT(pTaskContext);
|
|
|
|
TRACE(("CConfigAlertEmail::OnTaskExecute"));
|
|
|
|
try
|
|
{
|
|
do
|
|
{
|
|
if(NULL == pTaskContext)
|
|
{
|
|
TRACE("CConfigAlertEmail::OnTaskExecute got NULL pTaskContext");
|
|
break;
|
|
}
|
|
|
|
hrRet = pTaskContext->QueryInterface(IID_ITaskContext,
|
|
(void **)&pTaskParameters);
|
|
|
|
if(FAILED(hrRet))
|
|
{
|
|
TRACE1("CConfigAlertEmail::OnTaskExecute pTaskContext QI failed \
|
|
for pTaskParameters, %X",hrRet);
|
|
break;
|
|
}
|
|
|
|
// Check which Task is being executed and call that method
|
|
|
|
saetChoice = GetMethodName(pTaskParameters);
|
|
|
|
switch (saetChoice)
|
|
{
|
|
case SET_ALERT_EMAIL:
|
|
hrRet = SetAlertEmailSettings(pTaskParameters);
|
|
TRACE1(("SetAlertEmailSettings returned %X"), hrRet);
|
|
break;
|
|
case RAISE_SET_ALERT_EMAIL_ALERT:
|
|
//
|
|
// Alert will be raised on OnTaskExcute
|
|
//
|
|
hrRet = S_OK;
|
|
TRACE(("RaiseSetAlertEmailAlert method called"));
|
|
break;
|
|
default:
|
|
TRACE("GetMethodName() failed to get method name in OnTaskExecute");
|
|
hrRet = E_INVALIDARG;
|
|
break;
|
|
}
|
|
}
|
|
while(false);
|
|
}
|
|
catch(...)
|
|
{
|
|
TRACE("CConfigAlertEmail::OnTaskExecute caught unknown exception");
|
|
hrRet=E_FAIL;
|
|
}
|
|
|
|
TRACE1("CConfigAlertEmail::OnTaskExecute returning %X", hrRet);
|
|
return hrRet;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Function: CConfigAlertEmail::OnTaskComplete
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: pTaskContext - The TaskContext object contains the method name
|
|
// and parameters as name value pairs
|
|
//
|
|
// Returns: HRESULT
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
STDMETHODIMP
|
|
CConfigAlertEmail::OnTaskComplete(IUnknown *pTaskContext,
|
|
LONG lTaskResult)
|
|
{
|
|
HRESULT hrRet = E_FAIL;
|
|
CComPtr<ITaskContext> pTaskParameters;
|
|
SET_ALERT_EMAIL_TASK_TYPE saetChoice;
|
|
|
|
|
|
ASSERT(pTaskContext);
|
|
TRACE(("CConfigAlertEmail::OnTaskComplete"));
|
|
|
|
try
|
|
{
|
|
do
|
|
{
|
|
hrRet = pTaskContext->QueryInterface(IID_ITaskContext,
|
|
(void **)&pTaskParameters);
|
|
|
|
if (FAILED(hrRet))
|
|
{
|
|
TRACE1("CConfigAlertEmail::OnTaskComplete failed in pTaskContext \
|
|
QI for pTaskParameters, %X", hrRet);
|
|
break;
|
|
}
|
|
|
|
//
|
|
// Check which Task is being executed and call that method
|
|
//
|
|
saetChoice = GetMethodName(pTaskParameters);
|
|
switch (saetChoice)
|
|
{
|
|
case SET_ALERT_EMAIL:
|
|
if (lTaskResult == SA_TASK_RESULT_COMMIT)
|
|
{
|
|
//
|
|
// Clear any existing CConfigAlertEmail alert,
|
|
// do not raise the alert on subsequent boots
|
|
//
|
|
ClearSetAlertEmailAlert();
|
|
DoNotRaiseSetAlertEmailAlert();
|
|
TRACE("No rollback in OnTaskComplete");
|
|
hrRet = S_OK;
|
|
}
|
|
else
|
|
{
|
|
hrRet = RollbackSetAlertEmailSettings(pTaskParameters);
|
|
TRACE1(("RollbackSetAlertEmailSettings returned %X"), hrRet);
|
|
}
|
|
break;
|
|
|
|
case RAISE_SET_ALERT_EMAIL_ALERT:
|
|
if (lTaskResult == SA_TASK_RESULT_COMMIT)
|
|
{
|
|
if (TRUE == ShouldRaiseSetAlertEmailAlert())
|
|
{
|
|
hrRet = RaiseSetAlertEmailAlert();
|
|
if (FAILED(hrRet))
|
|
{
|
|
TRACE1(("RaiseSetAlertEmailAlert returned %X"), hrRet);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
TRACE("No need to raise the alert email alert");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// Do nothing on Commit failure
|
|
//
|
|
hrRet = S_OK;
|
|
}
|
|
break;
|
|
default:
|
|
TRACE("GetMethodName() failed to get method name in OnTaskComplete");
|
|
hrRet = E_INVALIDARG;
|
|
break;
|
|
}
|
|
}
|
|
while(false);
|
|
}
|
|
catch(...)
|
|
{
|
|
TRACE("CConfigAlertEmail::OnTaskComplete caught unknown exception");
|
|
hrRet=E_FAIL;
|
|
}
|
|
|
|
TRACE1("CConfigAlertEmail::OnTaskComplete returning %X", hrRet);
|
|
return hrRet;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Function: CConfigAlertEmail::RaiseSetAlertEmailAlert
|
|
//
|
|
// Synopsis: Raises the initial "Alert email not set up" alert during appliance
|
|
// initialization
|
|
//
|
|
// Arguments: None
|
|
//
|
|
// Returns: HRESULT
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
STDMETHODIMP
|
|
CConfigAlertEmail::RaiseSetAlertEmailAlert()
|
|
{
|
|
CComPtr<IApplianceServices> pAppSrvcs;
|
|
DWORD dwAlertType = SA_ALERT_TYPE_ATTENTION;
|
|
DWORD dwAlertId = SA_ALERTEMAIL_SETTINGS_NOTSET_ALERT_CAPTION;
|
|
HRESULT hrRet = E_FAIL;
|
|
_bstr_t bstrAlertLog(ALERT_LOG_NAME);
|
|
_bstr_t bstrAlertSource(ALERT_SOURCE);
|
|
_variant_t varReplacementStrings;
|
|
_variant_t varRawData;
|
|
LONG lCookie;
|
|
|
|
TRACE("Entering RaiseSetAlertEmailAlert");
|
|
|
|
try
|
|
{
|
|
do
|
|
{
|
|
hrRet = CoCreateInstance(CLSID_ApplianceServices,
|
|
NULL,
|
|
CLSCTX_INPROC_SERVER,
|
|
IID_IApplianceServices,
|
|
(void**)&pAppSrvcs);
|
|
if (FAILED(hrRet))
|
|
{
|
|
ASSERTMSG(FALSE,
|
|
L"RaiseSetAlertEmailAlert failed at CoCreateInstance");
|
|
TRACE1("RaiseSetAlertEmailAlert failed at CoCreateInstance, %x",
|
|
hrRet);
|
|
break;
|
|
}
|
|
|
|
ASSERT(pAppSrvcs);
|
|
|
|
//
|
|
// Initialize() is called prior to using other component services.
|
|
//Performscomponent initialization operations.
|
|
//
|
|
hrRet = pAppSrvcs->Initialize();
|
|
if (FAILED(hrRet))
|
|
{
|
|
ASSERTMSG(FALSE,
|
|
L"RaiseSetAlertEmailAlert failed at pAppSrvcs->Initialize");
|
|
TRACE1("RaiseSetAlertEmailAlert failed at pAppSrvcs->Initialize, %x",
|
|
hrRet);
|
|
break;
|
|
}
|
|
|
|
hrRet = pAppSrvcs->RaiseAlert(
|
|
dwAlertType,
|
|
dwAlertId,
|
|
bstrAlertLog,
|
|
bstrAlertSource,
|
|
SA_ALERT_DURATION_ETERNAL,
|
|
&varReplacementStrings,
|
|
&varRawData,
|
|
&lCookie
|
|
);
|
|
|
|
if (FAILED(hrRet))
|
|
{
|
|
ASSERTMSG(FALSE,
|
|
TEXT("RaiseSetAlertEmailAlert failed at pAppSrvcs->RaiseAlert"));
|
|
TRACE1("RaiseSetAlertEmailAlert failed at pAppSrvcs->RaiseAlert, %x",
|
|
hrRet);
|
|
break;
|
|
}
|
|
}
|
|
while(false);
|
|
}
|
|
catch(...)
|
|
{
|
|
TRACE("CConfigAlertEmail::RaiseSetAlertEmailAlert exception caught");
|
|
hrRet=E_FAIL;
|
|
}
|
|
|
|
return hrRet;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Function: CConfigAlertEmail::ShouldRaiseSetAlertEmailAlert
|
|
//
|
|
// Synopsis: Returns TRUE if the alert needs to be raised. Reads RaiseAlert
|
|
// regkey to determine this.
|
|
//
|
|
// Arguments: None
|
|
//
|
|
// Returns: BOOL
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
BOOL
|
|
CConfigAlertEmail::ShouldRaiseSetAlertEmailAlert()
|
|
{
|
|
LONG lReturnValue;
|
|
HKEY hKey = NULL;
|
|
DWORD dwSize, dwType, dwRaiseAlertEmailAlert = 0;
|
|
BOOL bReturnCode = TRUE;
|
|
|
|
TRACE("ShouldRaiseSetAlertEmailAlert");
|
|
|
|
do
|
|
{
|
|
//
|
|
// Open HKLM\Software\Microsoft\ServerAppliance\AlertEmail reg key
|
|
//
|
|
lReturnValue = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
|
|
REGKEY_SA_ALERTEMAIL,
|
|
0,
|
|
KEY_READ,
|
|
&hKey);
|
|
|
|
if (lReturnValue != ERROR_SUCCESS)
|
|
{
|
|
TRACE1("RegOpenKeyEx failed with %X", lReturnValue);
|
|
bReturnCode=FALSE;
|
|
break;
|
|
}
|
|
|
|
//
|
|
// Read the RaiseAlert reg key
|
|
//
|
|
dwSize = sizeof(DWORD);
|
|
lReturnValue = RegQueryValueEx(hKey,
|
|
REGSTR_VAL_ALERTEMAIL_RAISEALERT,
|
|
0,
|
|
&dwType,
|
|
(LPBYTE) &dwRaiseAlertEmailAlert,
|
|
&dwSize);
|
|
if (lReturnValue != ERROR_SUCCESS)
|
|
{
|
|
TRACE2("RegQueryValueEx of %ws failed with %X",
|
|
REGSTR_VAL_ALERTEMAIL_RAISEALERT, lReturnValue);
|
|
bReturnCode=FALSE;
|
|
break;
|
|
}
|
|
|
|
if (0 == dwRaiseAlertEmailAlert)
|
|
{
|
|
bReturnCode = FALSE;
|
|
}
|
|
}
|
|
while(false);
|
|
|
|
if (NULL != hKey)
|
|
{
|
|
RegCloseKey(hKey);
|
|
}
|
|
return bReturnCode;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Function: CConfigAlertEmail::DoNotRaiseSetAlertEmailAlert
|
|
//
|
|
// Synopsis: After alert email is setup the initial "Alert email not set up"
|
|
// alert needs to be disabled. This function sets the RaiseAlert regkey
|
|
// to 0 to prevent the alert to be raised.
|
|
//
|
|
// Arguments: None
|
|
//
|
|
// Returns: BOOL
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
BOOL
|
|
CConfigAlertEmail::DoNotRaiseSetAlertEmailAlert()
|
|
{
|
|
LONG lReturnValue;
|
|
HKEY hKey = NULL;
|
|
DWORD dwDisposition, dwRaiseAlertEmailAlert = 0;
|
|
BOOL bReturnCode = FALSE;
|
|
|
|
TRACE("Entering DoNotRaiseSetAlertEmailAlert");
|
|
|
|
|
|
//
|
|
// Write Settings to registry
|
|
//
|
|
do
|
|
{
|
|
lReturnValue = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
|
|
REGKEY_SA_ALERTEMAIL,
|
|
0,
|
|
NULL,
|
|
REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS,
|
|
NULL,
|
|
&hKey,
|
|
&dwDisposition);
|
|
if (lReturnValue != ERROR_SUCCESS)
|
|
{
|
|
TRACE1("RegCreateKeyEx failed with %X", lReturnValue);
|
|
break;
|
|
}
|
|
|
|
//
|
|
// Set RaiseAlert value to 0
|
|
//
|
|
dwRaiseAlertEmailAlert = 0;
|
|
lReturnValue = RegSetValueEx(hKey,
|
|
REGSTR_VAL_ALERTEMAIL_RAISEALERT,
|
|
0,
|
|
REG_DWORD,
|
|
(LPBYTE) &dwRaiseAlertEmailAlert,
|
|
sizeof(DWORD));
|
|
if (lReturnValue != ERROR_SUCCESS)
|
|
{
|
|
TRACE2("RegSetValueEx of %ws failed with %X",
|
|
REGSTR_VAL_ALERTEMAIL_RAISEALERT, lReturnValue);
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
bReturnCode = TRUE;
|
|
}
|
|
}
|
|
while(false);
|
|
|
|
if (NULL != hKey)
|
|
{
|
|
RegCloseKey(hKey);
|
|
}
|
|
return bReturnCode;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Function: CConfigAlertEmail::ClearSetAlertEmailAlert
|
|
//
|
|
// Synopsis: Clear the alert email alert
|
|
//
|
|
// Arguments: NONE
|
|
//
|
|
// Returns: BOOL
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
BOOL
|
|
CConfigAlertEmail::ClearSetAlertEmailAlert()
|
|
{
|
|
CComPtr<IApplianceServices> pAppSrvcs;
|
|
HRESULT hrRet = E_FAIL;
|
|
_bstr_t bstrAlertLog(ALERT_LOG_NAME);
|
|
BOOL bReturnCode = FALSE;
|
|
|
|
|
|
TRACE("ClearSetAlertEmailAlert");
|
|
|
|
try
|
|
{
|
|
do
|
|
{
|
|
hrRet = CoCreateInstance(CLSID_ApplianceServices,
|
|
NULL,
|
|
CLSCTX_INPROC_SERVER,
|
|
IID_IApplianceServices,
|
|
(void**)&pAppSrvcs);
|
|
if (FAILED(hrRet))
|
|
{
|
|
ASSERTMSG(FALSE,
|
|
L"ClearSetAlertEmailAlert failed at CoCreateInstance");
|
|
TRACE1("ClearSetAlertEmailAlert failed at CoCreateInstance, %x",
|
|
hrRet);
|
|
break;
|
|
}
|
|
|
|
ASSERT(pAppSrvcs);
|
|
hrRet = pAppSrvcs->Initialize();
|
|
if (FAILED(hrRet))
|
|
{
|
|
ASSERTMSG(FALSE,
|
|
L"ClearSetAlertEmailAlert failed at pAppSrvcs->Initialize");
|
|
TRACE1("ClearSetAlertEmailAlert failed at pAppSrvcs->Initialize, %x",
|
|
hrRet);
|
|
break;
|
|
}
|
|
|
|
//
|
|
// Clear the Setup Chime Settings alert
|
|
//
|
|
hrRet = pAppSrvcs->ClearAlertAll(
|
|
SA_ALERTEMAIL_SETTINGS_NOTSET_ALERT_CAPTION,
|
|
bstrAlertLog
|
|
);
|
|
|
|
//
|
|
// DISP_E_MEMBERNOTFOUND means that there were no matching alerts
|
|
//
|
|
if ((hrRet != DISP_E_MEMBERNOTFOUND) && (FAILED(hrRet)))
|
|
{
|
|
ASSERTMSG(FALSE,
|
|
TEXT("ClearSetAlertEmailAlert failed at pAppSrvcs->RaiseAlert"));
|
|
TRACE1("ClearSetAlertEmailAlert failed at pAppSrvcs->RaiseAlert, %x",
|
|
hrRet);
|
|
}
|
|
else
|
|
{
|
|
bReturnCode = TRUE;
|
|
}
|
|
}
|
|
while(false);
|
|
}
|
|
catch(...)
|
|
{
|
|
TRACE("CConfigAlertEmail::ClearSetAlertEmailAlert caught unknown exception");
|
|
bReturnCode=FALSE;
|
|
|
|
}
|
|
|
|
return bReturnCode;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Function: CConfigAlertEmail::SetAlertEmailSettings
|
|
//
|
|
// Synopsis: Writes alert email settings passed by task context to registry
|
|
//
|
|
// Arguments: pTaskContext - The TaskContext object contains the method name
|
|
// and parameters as name value pairs
|
|
//
|
|
// Returns: HRESULT
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
STDMETHODIMP
|
|
CConfigAlertEmail::SetAlertEmailSettings(
|
|
ITaskContext *pTaskContext
|
|
)
|
|
{
|
|
HRESULT hrRet=E_FAIL;
|
|
LONG lResult;
|
|
CRegKey crKey;
|
|
DWORD dwDisposition;
|
|
DWORD dwCount=MAX_MAIL_ADDRESS_LENGH;
|
|
|
|
BOOL bEnableAlertEmail=0;
|
|
DWORD dwSendEmailType = 0;
|
|
_bstr_t bstrReceriverEmailAddress;
|
|
|
|
|
|
ASSERT(pTaskContext);
|
|
|
|
try
|
|
{
|
|
do
|
|
{
|
|
//
|
|
// Get all parameters from the TaskContext object
|
|
//
|
|
hrRet = GetSetAlertEmailSettingsParameters(
|
|
pTaskContext,
|
|
&bEnableAlertEmail,
|
|
&dwSendEmailType,
|
|
&bstrReceriverEmailAddress
|
|
);
|
|
if (S_OK != hrRet)
|
|
{
|
|
break;
|
|
}
|
|
|
|
|
|
//
|
|
// Save current values - this will be used to restore the settings
|
|
// if this task needs to be rolledback
|
|
//
|
|
lResult = crKey.Open(
|
|
HKEY_LOCAL_MACHINE,
|
|
REGKEY_SA_ALERTEMAIL,
|
|
KEY_ALL_ACCESS
|
|
);
|
|
if (ERROR_SUCCESS == lResult)
|
|
{
|
|
if (ERROR_SUCCESS != crKey.QueryValue(m_bEnableAlertEmail,
|
|
REGSTR_VAL_ENABLE_ALERT_EMAIL))
|
|
{
|
|
//
|
|
// Could be due to bad setup - let log it and continue on
|
|
//
|
|
TRACE2("QueryValue of %ws failed in SetAlertEmailSettings, \
|
|
%x", REGSTR_VAL_ENABLE_ALERT_EMAIL, lResult);
|
|
}
|
|
if (ERROR_SUCCESS != crKey.QueryValue(m_dwSendEmailType,
|
|
REGSTR_VAL_SEND_EMAIL_TYPE))
|
|
{
|
|
//
|
|
// Could be due to bad setup - let log it and continue on
|
|
//
|
|
TRACE2("QueryValue of %ws failed in SetChimeSettings, %x",
|
|
REGSTR_VAL_SEND_EMAIL_TYPE, lResult);
|
|
}
|
|
if (ERROR_SUCCESS != crKey.QueryValue(m_szReceiverMailAddress,
|
|
REGSTR_VAL_RECEIVER_EMAIL_ADDRESS,
|
|
&dwCount))
|
|
{
|
|
//
|
|
// Could be due to bad setup - let log it and continue on
|
|
//
|
|
TRACE2("QueryValue of %ws failed in ReceiverMailAddress, %x",
|
|
REGSTR_VAL_RECEIVER_EMAIL_ADDRESS, lResult);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// If we couldn't open the key, it probably because the key does
|
|
// not exist. Let's create it
|
|
//
|
|
lResult = crKey.Create(HKEY_LOCAL_MACHINE,
|
|
REGKEY_SA_ALERTEMAIL,
|
|
NULL,
|
|
REG_OPTION_NON_VOLATILE,
|
|
KEY_ALL_ACCESS,
|
|
NULL,
|
|
&dwDisposition);
|
|
|
|
if (ERROR_SUCCESS != lResult)
|
|
{
|
|
TRACE1("Create failed in CConfigAlertEmail::SetAlertEmailSettings, \
|
|
%x", lResult);
|
|
hrRet=HRESULT_FROM_WIN32(lResult);
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
//
|
|
// Set the new values
|
|
//
|
|
lResult = crKey.SetValue(bEnableAlertEmail, REGSTR_VAL_ENABLE_ALERT_EMAIL);
|
|
if (ERROR_SUCCESS != lResult)
|
|
{
|
|
TRACE2("SetValue of %ws failed, %x", REGSTR_VAL_ENABLE_ALERT_EMAIL,
|
|
lResult);
|
|
hrRet=HRESULT_FROM_WIN32(lResult);
|
|
break;
|
|
}
|
|
|
|
lResult = crKey.SetValue(dwSendEmailType, REGSTR_VAL_SEND_EMAIL_TYPE);
|
|
if (ERROR_SUCCESS != lResult)
|
|
{
|
|
TRACE2("SetValue of %ws failed, %x", REGSTR_VAL_SEND_EMAIL_TYPE,
|
|
lResult);
|
|
hrRet=HRESULT_FROM_WIN32(lResult);
|
|
break;
|
|
}
|
|
|
|
lResult = crKey.SetValue(bstrReceriverEmailAddress,
|
|
REGSTR_VAL_RECEIVER_EMAIL_ADDRESS);
|
|
if (ERROR_SUCCESS != lResult)
|
|
{
|
|
TRACE2("SetValue of %ws failed, %x",
|
|
REGSTR_VAL_RECEIVER_EMAIL_ADDRESS, lResult);
|
|
hrRet=HRESULT_FROM_WIN32(lResult);
|
|
break;
|
|
}
|
|
hrRet = S_OK;
|
|
|
|
}
|
|
while(false);
|
|
}
|
|
catch(...)
|
|
{
|
|
TRACE("CConfigAlertEmail::SetAlertEmailSettings caught unknown exception");
|
|
hrRet=E_FAIL;
|
|
}
|
|
|
|
return hrRet;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Function: CConfigAlertEmail::RollbackSetAlertEmailSettings
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: pTaskContext - The TaskContext object contains the method name
|
|
// and parameters as name value pairs
|
|
//
|
|
// Returns: HRESULT
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
STDMETHODIMP
|
|
CConfigAlertEmail::RollbackSetAlertEmailSettings(
|
|
ITaskContext *pTaskContext
|
|
)
|
|
{
|
|
CRegKey crKey;
|
|
LONG lResult;
|
|
HRESULT hrRet = S_OK;
|
|
|
|
ASSERT(pTaskContext);
|
|
|
|
try
|
|
{
|
|
do
|
|
{
|
|
lResult = crKey.Open(HKEY_LOCAL_MACHINE,
|
|
REGKEY_SA_ALERTEMAIL,
|
|
KEY_WRITE);
|
|
|
|
if (ERROR_SUCCESS != lResult)
|
|
{
|
|
TRACE1("CConfigAlertEmail::RollbackSetAlertEmailSettings failed \
|
|
to open Chime regkey, %d",lResult);
|
|
hrRet=HRESULT_FROM_WIN32(lResult);
|
|
break;
|
|
}
|
|
|
|
//
|
|
// Restore the old values
|
|
//
|
|
lResult = crKey.SetValue(m_bEnableAlertEmail, REGSTR_VAL_ENABLE_ALERT_EMAIL);
|
|
if (ERROR_SUCCESS != lResult)
|
|
{
|
|
TRACE2("SetValue of %ws failed, %x", REGSTR_VAL_ENABLE_ALERT_EMAIL,
|
|
lResult);
|
|
hrRet=HRESULT_FROM_WIN32(lResult);
|
|
break;
|
|
}
|
|
|
|
lResult = crKey.SetValue(m_dwSendEmailType, REGSTR_VAL_SEND_EMAIL_TYPE);
|
|
if (ERROR_SUCCESS != lResult)
|
|
{
|
|
TRACE2("SetValue of %ws failed, %x", REGSTR_VAL_SEND_EMAIL_TYPE,
|
|
lResult);
|
|
hrRet=HRESULT_FROM_WIN32(lResult);
|
|
break;
|
|
}
|
|
|
|
lResult = crKey.SetValue(m_szReceiverMailAddress,
|
|
REGSTR_VAL_RECEIVER_EMAIL_ADDRESS);
|
|
if (ERROR_SUCCESS != lResult)
|
|
{
|
|
TRACE2("SetValue of %ws failed, %x", REGSTR_VAL_RECEIVER_EMAIL_ADDRESS,
|
|
lResult);
|
|
hrRet=HRESULT_FROM_WIN32(lResult);
|
|
break;
|
|
}
|
|
hrRet = S_OK;
|
|
}
|
|
while(false);
|
|
|
|
}
|
|
catch(...)
|
|
{
|
|
TRACE("CConfigAlertEmail::RollbackSetAlertEmailSettings caught unknown \
|
|
exception");
|
|
hrRet=E_FAIL;
|
|
}
|
|
|
|
return hrRet;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Function: CConfigAlertEmail::GetSetAlertEmailSettingsParameters
|
|
//
|
|
// Synopsis: Extracts AlertEmail settings parameters from task context
|
|
//
|
|
// Arguments: pTaskContext - The TaskContext object contains the method name
|
|
// and parameters as name value pairs
|
|
// pbEnableAlertEmail - Enable send alert email
|
|
// pdwSendEmailType - Sent email type
|
|
// pbstrMailAddress - Receiver email address
|
|
//
|
|
// Returns: HRESULT
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
STDMETHODIMP
|
|
CConfigAlertEmail::GetSetAlertEmailSettingsParameters(
|
|
ITaskContext *pTaskContext,
|
|
BOOL *pbEnableAlertEmail,
|
|
DWORD *pdwSendEmailType,
|
|
_bstr_t *pbstrMailAddress
|
|
)
|
|
{
|
|
HRESULT hrRet = S_OK;
|
|
_variant_t varValue;
|
|
|
|
_bstr_t bstrParamEnableAlertEmail(PARAM_ENABLE_ALERT_EMAIL);
|
|
_bstr_t bstrParamSendEmailType(PARAM_SEND_EMAIL_TYPE);
|
|
_bstr_t bstrParamReceiverEmailAddress(PARAM_RECEIVER_EMAIL_ADDRESS);
|
|
|
|
ASSERT(pTaskContext && pbEnableAlertEmail && pdwSendEmailType&&
|
|
pbstrMailAddress);
|
|
|
|
//
|
|
// Retrieve Parameters from TaskContext
|
|
//
|
|
try
|
|
{
|
|
do
|
|
{
|
|
//
|
|
// Retrieve EnableAlertEmail from TaskContext
|
|
//
|
|
VariantClear(&varValue);
|
|
hrRet = pTaskContext->GetParameter(bstrParamEnableAlertEmail,
|
|
&varValue);
|
|
|
|
if(FAILED(hrRet))
|
|
{
|
|
TRACE1("CConfigAlertEmail::GetSetAlertEmailSettingsParameters \
|
|
failed in GetParameters, %X",hrRet);
|
|
break;
|
|
}
|
|
|
|
if (V_VT(&varValue) != VT_BSTR)
|
|
{
|
|
TRACE2(("Non-BSTR (%X) parameter received for %ws in \
|
|
GetParameter in CConfigAlertEmail:GetSetAlertEmailSettings\
|
|
Parameters"), V_VT(&varValue), PARAM_ENABLE_ALERT_EMAIL);
|
|
hrRet = E_INVALIDARG;
|
|
|
|
break;
|
|
}
|
|
*pbEnableAlertEmail = _ttoi(V_BSTR(&varValue));
|
|
|
|
|
|
//
|
|
// Retrieve SendEmailType from TaskContext
|
|
//
|
|
VariantClear(&varValue);
|
|
hrRet = pTaskContext->GetParameter(bstrParamSendEmailType,
|
|
&varValue);
|
|
|
|
if(FAILED(hrRet))
|
|
{
|
|
TRACE1("CConfigAlertEmail::GetSetAlertEmailSettings failed \
|
|
in GetParameters, %X",hrRet);
|
|
break;
|
|
}
|
|
|
|
if (V_VT(&varValue) != VT_BSTR)
|
|
{
|
|
TRACE2(("Non-BSTR(%X) parameter received for %ws in \
|
|
GetParameter in CConfigAlertEmail::GetSetAlertEmailSettings"),
|
|
V_VT(&varValue), PARAM_SEND_EMAIL_TYPE);
|
|
hrRet = E_INVALIDARG;
|
|
break;
|
|
}
|
|
*pdwSendEmailType = _ttol(V_BSTR(&varValue));
|
|
//
|
|
// Retrieve ReceiverEmailAddress from TaskContext
|
|
//
|
|
VariantClear(&varValue);
|
|
hrRet = pTaskContext->GetParameter(bstrParamReceiverEmailAddress,
|
|
&varValue);
|
|
|
|
if(FAILED(hrRet))
|
|
{
|
|
TRACE1("CConfigAlertEmail::GetSetAlertEmailSettings failed \
|
|
in GetParameters, %X",hrRet);
|
|
break;
|
|
}
|
|
|
|
if (V_VT(&varValue) != VT_BSTR)
|
|
{
|
|
TRACE2(("Non-String(%X) parameter received for %ws in \
|
|
GetParameter in CConfigAlertEmail::GetSetAlertEmailSettings"),
|
|
V_VT(&varValue), PARAM_RECEIVER_EMAIL_ADDRESS);
|
|
hrRet = E_INVALIDARG;
|
|
break;
|
|
}
|
|
*pbstrMailAddress = V_BSTR(&varValue);
|
|
|
|
TRACE1(("EnableAlertEmail = 0x%x"),*pbEnableAlertEmail);
|
|
TRACE1(("SendEmailType = 0x%x"), *pdwSendEmailType);
|
|
TRACE1(("ReceiverEmailAddress = %ws"), *pbstrMailAddress);
|
|
|
|
}
|
|
while(false);
|
|
}
|
|
catch(...)
|
|
{
|
|
TRACE1("CConfigAlertEmail::GetSetAlertEmailSettings exception caught",
|
|
hrRet);
|
|
hrRet=E_FAIL;
|
|
}
|
|
|
|
return hrRet;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Function: CConfigAlertEmail::GetMethodName
|
|
//
|
|
// Synopsis:
|
|
//
|
|
// Arguments: pTaskContext - The TaskContext object contains the method name
|
|
// and parameters as name value pairs
|
|
//
|
|
// Returns: SET_CHIME_SETTINGS_TASK_TYPE
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
SET_ALERT_EMAIL_TASK_TYPE
|
|
CConfigAlertEmail::GetMethodName(ITaskContext *pTaskParameter)
|
|
{
|
|
HRESULT hrRet;
|
|
_variant_t varValue;
|
|
_bstr_t bstrParamName(SZ_METHOD_NAME);
|
|
SET_ALERT_EMAIL_TASK_TYPE saetChoice = NONE_FOUND;
|
|
|
|
|
|
ASSERT(pTaskParameter);
|
|
|
|
try
|
|
{
|
|
do
|
|
{
|
|
hrRet = pTaskParameter->GetParameter(bstrParamName,
|
|
&varValue);
|
|
|
|
if (FAILED(hrRet))
|
|
{
|
|
TRACE1(("GetParameter failed in CConfigAlertEmail::Ge \
|
|
tMethodName %X"), hrRet);
|
|
}
|
|
|
|
if (V_VT(&varValue) != VT_BSTR)
|
|
{
|
|
TRACE1(("Non-strint(%X) parameter received in GetParameter \
|
|
in CConfigAlertEmail::GetMethodName"), V_VT(&varValue));
|
|
hrRet = E_INVALIDARG;
|
|
break;
|
|
}
|
|
|
|
if (lstrcmp(V_BSTR(&varValue), SET_ALERT_EMAIL_TASK) == 0)
|
|
{
|
|
saetChoice = SET_ALERT_EMAIL;
|
|
break;
|
|
}
|
|
if (lstrcmp(V_BSTR(&varValue),SZ_APPLIANCE_INITIALIZATION_TASK)==0)
|
|
{
|
|
saetChoice = RAISE_SET_ALERT_EMAIL_ALERT;
|
|
break;
|
|
}
|
|
}
|
|
while(false);
|
|
}
|
|
catch(...)
|
|
{
|
|
TRACE("SET_ALERT_EMAIL_TASK::GetMethodName caught unknown exception");
|
|
hrRet=E_FAIL;
|
|
}
|
|
|
|
if (FAILED(hrRet))
|
|
{
|
|
saetChoice = NONE_FOUND;
|
|
}
|
|
|
|
return saetChoice;
|
|
}
|