Leaked source code of windows server 2003
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

//////////////////////////////////////////////////////////////////////////////
//
// 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;
}