142 lines
5.2 KiB
C++
142 lines
5.2 KiB
C++
//
|
|
// MODULE: StateInfo.cpp
|
|
//
|
|
// PURPOSE: Contains sniffing, network and node information. Also is used
|
|
// by the Launch module to start the container application.
|
|
//
|
|
// PROJECT: Local Troubleshooter Launcher for the Device Manager
|
|
//
|
|
// COMPANY: Saltmine Creative, Inc. (206)-633-4743 support@saltmine.com
|
|
//
|
|
// AUTHOR: Richard Meadows
|
|
// COMMENTS BY: Joe Mabel
|
|
//
|
|
// ORIGINAL DATE: 2-26-98
|
|
//
|
|
//
|
|
// Version Date By Comments
|
|
//--------------------------------------------------------------------
|
|
// V0.1 - RM Original
|
|
///////////////////////
|
|
|
|
enum ELaunchRegime
|
|
{
|
|
launchIndefinite = 0,
|
|
launchMap,
|
|
launchDefaultWebPage,
|
|
launchDefaultNetwork,
|
|
launchKnownNetwork
|
|
};
|
|
|
|
// Basically, this is the structure to pass information to the launched
|
|
// Local Troubleshooter OCX
|
|
class CItem
|
|
{
|
|
public:
|
|
enum { SYM_LEN = 512 };
|
|
enum { NODE_COUNT = 55 };
|
|
enum { GUID_LEN = 256 }; // this is used for other things besides GUIDs, so
|
|
// don't shrink it just because GUIDs are smaller.
|
|
public:
|
|
CItem();
|
|
|
|
void ReInit();
|
|
void Clear();
|
|
|
|
void SetNetwork(LPCTSTR szNetwork);
|
|
void SetProblem(LPCTSTR szProblem);
|
|
void SetNode(LPCTSTR szNode, LPCTSTR szState);
|
|
bool GetNetwork(LPTSTR *pszCmd, LPTSTR *pszVal);
|
|
bool GetProblem(LPTSTR *szCmd, LPTSTR *szVal);
|
|
bool GetNodeState(int iNodeC, LPTSTR *szCmd, LPTSTR *szVal);
|
|
TCHAR m_szEventName[SYM_LEN]; // an arbitrary, unique event name related to this
|
|
// launch.
|
|
|
|
// ProblemSet and NetworkSet are used to query the state of the item.
|
|
bool ProblemSet();
|
|
bool NetworkSet();
|
|
|
|
// Interface to other member variables recponsible for launching
|
|
void SetLaunchRegime(ELaunchRegime eLaunchRegime);
|
|
void SetContainerPathName(TCHAR szContainerPathName[MAX_PATH]);
|
|
void SetWebPage(TCHAR m_szWebPage[MAX_PATH]);
|
|
void SetSniffScriptFile(TCHAR szSniffScriptFile[MAX_PATH]);
|
|
void SetSniffStandardFile(TCHAR szSniffStandardFile[MAX_PATH]);
|
|
ELaunchRegime GetLaunchRegime();
|
|
TCHAR* GetContainerPathName();
|
|
TCHAR* GetWebPage();
|
|
TCHAR* GetSniffScriptFile();
|
|
TCHAR* GetSniffStandardFile();
|
|
|
|
// Although the troubleshooting network & problem node are already specified,
|
|
// this info is here for sniffing. That is, the Troubleshooter OCX can get the
|
|
// P&P device ID & use it for sniffing purposes.
|
|
TCHAR m_szPNPDeviceID[GUID_LEN]; // Plug & Play Device ID
|
|
TCHAR m_szGuidClass[GUID_LEN]; // Standard text representation of Device Class GUID
|
|
TCHAR m_szMachineID[GUID_LEN]; // Machine name (in format like "\\holmes")
|
|
// Needed so that we can sniff on a remote machine
|
|
TCHAR m_szDeviceInstanceID[GUID_LEN]; // Needed so that we can sniff correct device
|
|
|
|
protected:
|
|
|
|
TCHAR m_szProblemDef[SYM_LEN]; // "TShootProblem", typically used as m_aszCmds[1]
|
|
// so that m_aszVals[1] is the name of the
|
|
// problem node
|
|
TCHAR m_szTypeDef[SYM_LEN]; // "type", typically used as m_aszCmds[0]
|
|
// so that m_aszVals[0] is the name of the
|
|
// troubleshooting belief network
|
|
int m_cNodesSet; // The number of nodes, other than the problem
|
|
// node, for which we've set states.
|
|
|
|
// The next two arrays are used jointly. m_aszCmds[i] and m_aszVals[i] are
|
|
// a name/value pair similar to what would be returned by an HTML form,
|
|
// although, in practice, the Local Troubleshooter OCX does the work that
|
|
// (on the Web) would be performed by server-side code.
|
|
// Typically these arrays have m_cNodesSet+2 significant entries (with the first
|
|
// 2 locations indicating troubleshooting network and problem node).
|
|
// Second dimension is just amount of space for each string.
|
|
TCHAR m_aszCmds[NODE_COUNT][SYM_LEN];
|
|
TCHAR m_aszVals[NODE_COUNT][SYM_LEN];
|
|
|
|
TCHAR m_szContainerPathName[MAX_PATH]; // name (possibly full path) of executable intended to start
|
|
TCHAR m_szWebPage[MAX_PATH]; // full path of web page file (possibly default) to start container with
|
|
TCHAR m_szSniffScriptFile[MAX_PATH]; // contains full path and file name of "network"_sniff.htm file
|
|
TCHAR m_szSniffStandardFile[MAX_PATH]; // contains full path and file name of tssniffAsk.htm file
|
|
|
|
ELaunchRegime m_eLaunchRegime; // regime of launch
|
|
};
|
|
|
|
class CSMStateInfo
|
|
{
|
|
enum { HANDLE_VAL = 1 };
|
|
public:
|
|
CSMStateInfo();
|
|
~CSMStateInfo();
|
|
|
|
/* Made for the ILaunchTS interface . */
|
|
HRESULT GetShooterStates(CItem &refLaunchState, DWORD *pdwResult);
|
|
|
|
/* Made for the ITShootATL interface . */
|
|
bool GoGo(DWORD dwTimeOut, CItem &item, DWORD *pdwResult);
|
|
bool GoURL(CItem &item, DWORD *pdwResult);
|
|
|
|
/* Made to verify the mapping code. */
|
|
// The ILaunchTS interface uses TestGet directly.
|
|
// The ITShootATL interface uses TestPut indirectly through the CLaunch class.
|
|
// CLaunch does the mapping and then calls TestPut.
|
|
void TestPut(CItem &item); // Simply copies item to m_Item.
|
|
void TestGet(CItem &item); // Simply copies m_Item to item.
|
|
|
|
protected:
|
|
CComCriticalSection m_csGlobalMemory; // Critical section to protect global
|
|
// memory against simultaneous use by
|
|
// TSLaunch.DLL & Local Troubleshooter OCX
|
|
CComCriticalSection m_csSingleLaunch; // Critical section to prevent distinct
|
|
// launches (say, by 2 different applications)
|
|
// from overlapping dangerously.
|
|
CItem m_Item;
|
|
|
|
BOOL CreateContainer(CItem &item, LPTSTR szCommand);
|
|
BOOL CopySniffScriptFile(CItem &item);
|
|
};
|