//+---------------------------------------------------------------------------- // // File: cmlog.h // // Module: cmutil.dll, cmdial32.dll etc // // Synopsis: Connection Manager Logging // // Copyright (c) 1998-2000 Microsoft Corporation // // Author: 04-May-2000 SumitC Created // //----------------------------------------------------------------------------- #ifdef CMLOG_IMPLEMENTATION #define CMLOG_CLASS __declspec(dllexport) #else #define CMLOG_CLASS __declspec(dllimport) #endif // the following values follow the defaults for RAS/PPP logging (using rtutils.dll) // const BOOL c_fEnableLogging = TRUE; const DWORD c_dwMaxFileSize = 0x64; // 100K = 102,400 bytes const LPTSTR c_szLogFileDirectory = TEXT("%Temp%"); // // #define constants // #define BYTE_ORDER_MARK 0xFEFF // // List of CM/CPS events that can be logged // // // NOTE that this list must correspond with the s_aCmLogItems array in cmlog.cpp // enum _CMLOG_ITEM { UNKNOWN_LOG_ITEM, // guard item. DO NOT USE WHEN CALLING CMLOG() !! LOGGING_ENABLED_EVENT, LOGGING_DISABLED_EVENT, PREINIT_EVENT, PRECONNECT_EVENT, PREDIAL_EVENT, PRETUNNEL_EVENT, CONNECT_EVENT, CUSTOMACTIONDLL, CUSTOMACTIONEXE, CUSTOMACTION_NOT_ALLOWED, CUSTOMACTION_WONT_RUN, CUSTOMACTION_SKIPPED, DISCONNECT_EVENT, RECONNECT_EVENT, RETRY_AUTH_EVENT, CALLBACK_NUMBER_EVENT, PASSWORD_EXPIRED_EVENT, PASSWORD_RESET_EVENT, CUSTOM_BUTTON_EVENT, ONCANCEL_EVENT, ONERROR_EVENT, CLEAR_LOG_EVENT, DISCONNECT_EXT, DISCONNECT_INT_MANUAL, DISCONNECT_INT_AUTO, DISCONNECT_EXT_LOST_CONN, PB_DOWNLOAD_SUCCESS, PB_DOWNLOAD_FAILURE, PB_UPDATE_SUCCESS, PB_UPDATE_FAILURE_PBS, PB_UPDATE_FAILURE_CMPBK, PB_ABORTED, VPN_DOWNLOAD_SUCCESS, VPN_DOWNLOAD_FAILURE, VPN_UPDATE_SUCCESS, VPN_UPDATE_FAILURE, ONERROR_EVENT_W_SAFENET, SN_ADAPTER_CHANGE_EVENT, USER_FORMATTED = 99, }; // // Use this macro for all string args that may be null or empty. // #define SAFE_LOG_ARG(x) ( (!(x) || !(*(x))) ? TEXT("(none)") : (x) ) // ---------------------------------------------------------------------------- // // Implementor's section (from here to end) // class CMLOG_CLASS CmLogFile { public: CmLogFile(); ~CmLogFile(); // // Initialization/termination functions // HRESULT Init(HINSTANCE hInst, BOOL fAllUser, LPCWSTR szLongServiceName); HRESULT Init(HINSTANCE hInst, BOOL fAllUser, LPCSTR szLongServiceName); HRESULT SetParams(BOOL fEnabled, DWORD dwMaxFileSize, LPCWSTR pszLogFileDir); HRESULT SetParams(BOOL fEnabled, DWORD dwMaxFileSize, LPCSTR pszLogFileDir); HRESULT Start(BOOL fBanner); HRESULT Stop(); HRESULT DeInit(); // // Work functions // void Banner(); void Clear(BOOL fWriteBannerAfterwards = TRUE); void Log(_CMLOG_ITEM eLogItem, ...); // // Status inquiries // BOOL IsEnabled() { return m_fEnabled; } LPCWSTR GetLogFilePath() { return m_pszLogFile; } private: HRESULT OpenFile(); HRESULT CloseFile(); void FormatWrite(_CMLOG_ITEM eItem, LPWSTR szArgs); HRESULT Write(LPWSTR sz); HANDLE m_hfile; // file handle for logfile DWORD m_dwSize; // current size of log file LPWSTR m_pszServiceName; // name of connectoid (used as filename) WCHAR m_szModule[13]; // cached module name (13 = 8 + '.' + 3 + null) DWORD m_dwMaxSize; // max size of log file LPWSTR m_pszLogFileDir; // log file directory BOOL m_fAllUser; // is this an All-User profile? LPWSTR m_pszLogFile; // this is the currently-opened log file (full path) // state variables BOOL m_fInitialized; // set after Init() has been called BOOL m_fEnabled; // set after GetParams() finds logging is enabled (FROM CMS) };