// // MODULE: TSMapClient.cpp // // PURPOSE: Part of launching a Local Troubleshooter from an arbitrary NT5 application // Class TSMapClient is available at runtime for mapping from the application's // way of naming a problem to the Troubleshooter's way. // Only a single thread should operate on any one object of class TSMapClient. The object is not // threadsafe. // In addition to the overtly noted returns, many methods can return a preexisting error. // However, if the calling program has wishes to ignore an error and continue, we // recommend an explicit call to inherited method ClearStatus(). // Note that the mapping file is always strictly SBCS (Single Byte Character Set), but the // calls into this code may use Unicode. This file consequently mixes char and TCHAR. // // COMPANY: Saltmine Creative, Inc. (206)-633-4743 support@saltmine.com // // AUTHOR: Joe Mabel // // ORIGINAL DATE: 2-26-98 // // // Version Date By Comments //-------------------------------------------------------------------- // V0.1 - JM Original /////////////////////// #ifndef _TSMAPCLIENT_ #define _TSMAPCLIENT_ 1 // ----------------- TSMapClient --------------- // Class providing mapping methods which will be available // at runtime when launching a troubleshooter. class TSMapClient: public TSMapRuntimeAbstract { public: TSMapClient(const TCHAR * const sztMapFile); ~TSMapClient(); DWORD Initialize(); private: // redefined inherited methods DWORD ClearAll (); DWORD SetApp (const TCHAR * const sztApp); DWORD SetVer (const TCHAR * const sztVer); DWORD SetProb (const TCHAR * const sztProb); DWORD SetDevID (const TCHAR * const sztDevID); DWORD SetDevClassGUID (const TCHAR * const sztDevClassGUID); DWORD FromProbToTS (TCHAR * const sztTSBN, TCHAR * const sztNode ); DWORD FromDevToTS (TCHAR * const sztTSBN, TCHAR * const sztNode ); DWORD FromDevClassToTS (TCHAR * const sztTSBN, TCHAR * const sztNode ); DWORD ApplyDefaultVer(); bool HardMappingError (DWORD dwStatus); UID GetGenericMapToUID (const TCHAR * const sztName, DWORD dwOffFirst, DWORD dwOffLast, bool bAlphaOrder); DWORD SetFilePointerAbsolute( DWORD dwMoveTo ); bool Read(LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead); bool ReadUIDMap (UIDMAP &uidmap, DWORD &dwPosition, bool bSetPosition = false); bool ReadAppMap (APPMAP &appmap, DWORD &dwPosition, bool bSetPosition = false); bool ReadVerMap (VERMAP &vermap, DWORD &dwPosition, bool bSetPosition = false); bool ReadProbMap (PROBMAP &probmap, DWORD &dwPosition, bool bSetPosition = false); bool ReadDevMap (DEVMAP &devmap, DWORD &dwPosition, bool bSetPosition = false); bool ReadDevClassMap (DEVCLASSMAP &devclassmap, DWORD &dwPosition, bool bSetPosition = false); bool ReadString (char * sz, DWORD cbMax, DWORD &dwPosition, bool bSetPosition); private: TCHAR m_sztMapFile[BUFSIZE]; // pathname of file from which to draw mappings HANDLE m_hMapFile; // corresponding handle TSMAPFILEHEADER m_header; // header portion of map file // If we satisf ourselves that the SQL Server database used in preparing the mapping file // will produce the collating order we want, we could gain some runtime efficiency // by setting the following true: when we are reading through a file for a match, we // could bail if we got past it. bool m_bAppAlphaOrder; bool m_bVerAlphaOrder; bool m_bDevIDAlphaOrder; bool m_bDevClassGUIDAlphaOrder; bool m_bProbAlphaOrder; // NOTE: because the mapping file is strictly SBCS, so are the cache values. Typically, // this requires conversion between these values and Unicode arguments to methods. // Cache info about selected app. This lets us know (for example) at what offset // to start a search for relevant versions. char m_szApp[BUFSIZE]; APPMAP m_appmap; // Cache info about selected version. This lets us know (for example) at what offset // to start a search for relevant mappings to troubleshooting belief networks. char m_szVer[BUFSIZE]; VERMAP m_vermap; // Cache info about selected device (just name & UID) char m_szDevID[BUFSIZE]; UID m_uidDev; // Cache info about selected device class (just name -- a string representing a GUID -- // & UID) char m_szDevClassGUID[BUFSIZE]; UID m_uidDevClass; // Cache info about selected problem (just name & UID) char m_szProb[BUFSIZE]; UID m_uidProb; }; #endif // _TSMAPCLIENT_