windows-nt/Source/XPSP1/NT/shell/ext/webcheck/dialmon.h
2020-09-26 16:20:57 +08:00

154 lines
4.7 KiB
C++

//*********************************************************************
//* Microsoft Windows **
//* Copyright(c) Microsoft Corp., 1994-1995 **
//*********************************************************************
//
// DIALMON.H - central header file for dial monitor app
//
// HISTORY:
//
// 4/18/95 jeremys Created.
//
#ifndef _DIALMON_H_
#define _DIALMON_H_
#include <regstr.h>
// We need winver 4.00 so ras doesn't puke on our new structure sizes in
// RasEnumConnections.
#undef WINVER
#define WINVER 0x400
#include <ras.h>
#include <raserror.h>
// how to tell dialmon that something is going on
void IndicateDialmonActivity(void);
// give user 30 seconds to respond to dialog
#define DISCONNECT_DLG_COUNTDOWN 30
// truncate and add "..." if connectoid name longer than 20 characters
#define MAX_CONNECTOID_DISPLAY_LEN 50
// private message sent to disconnect dialog to dismiss it
#define WM_QUIT_DISCONNECT_DLG WM_USER+50
// sizes of various unknown things
#define MAX_RES_LEN 255
#define DEF_CONN_BUF_SIZE 4096
// class name used for dial monitoring
#define AUTODIAL_MONITOR_CLASS_NAME "MS_AutodialMonitor"
// max ras connections we care about
#define MAX_CONNECTION 8
// forward declaration
class BUFFER;
///////////////////////////////////////////////////////////////////////////
//
// CDialMon class definition
//
///////////////////////////////////////////////////////////////////////////
class CDialMon
{
private:
BOOL _fInDisconnectFunction; // prevent dialog reentrancy
DWORD _dwTimeoutMins; // timeout value, in minutes
DWORD _dwElapsedTicks; // elapsed ticks with no activity
BOOL _fNoTimeout; // monitor idle or just exit?
BOOL _fDisconnectOnExit;
BOOL _fConnected;
TCHAR _pszConnectoidName[RAS_MaxEntryName+1];
// name of connectoid of interest
UINT_PTR _uIdleTimerID; // timer id on parent window
HWND _hwndDialmon;
public:
HWND _hDisconnectDlg;
CDialMon();
~CDialMon();
void OnSetConnectoid(BOOL fNoTimeout);
void OnActivity(void);
void OnTimer(UINT_PTR uTimerID);
void OnExplorerExit();
void ResetElapsedTicks(){ _dwElapsedTicks = 0; }
// Set DEBUG_KV to 1 here if you need to test hangup logic
// without actually having a dailup connection.
//#define DEBUG_KV 1
#ifdef DEBUG_KV
// wrapper over private fn. StartMonitoring when we need to debug without
// actually having a dial-up connection.
void kvStartMonitoring(){ StartMonitoring(); }
#endif
private:
BOOL StartMonitoring(void);
void StopMonitoring(void);
INT_PTR StartIdleTimer(void);
void StopIdleTimer(void);
void CheckForDisconnect(BOOL fTimer);
BOOL PromptForDisconnect(BOOL fTimer, BOOL *pfDisconnectDisabled);
BOOL RefreshTimeoutSettings(void);
BOOL LoadRNADll(void);
void UnloadRNADll(void);
};
// structure for passing params to disconnect prompt dialog
typedef struct tagDISCONNECTDLGINFO {
LPTSTR pszConnectoidName; // input: name of connectoid
DWORD dwTimeout; // input: idle timeout in minutes
BOOL fTimer; // input: timer or shutdown?
DWORD dwCountdownVal; // internal: state of countdown in dialog
BOOL fDisconnectDisabled; // output: TRUE if disconnect disabled
CDialMon *pDialMon; // pointer back to dialmon class
} DISCONNECTDLGINFO;
///////////////////////////////////////////////////////////////////////////
//
// BUFFER class and helpers
//
///////////////////////////////////////////////////////////////////////////
class BUFFER_BASE
{
protected:
UINT _cch;
virtual BOOL Alloc( UINT cchBuffer ) = 0;
virtual BOOL Realloc( UINT cchBuffer ) = 0;
public:
BUFFER_BASE() { _cch = 0; }
~BUFFER_BASE() { _cch = 0; }
BOOL Resize( UINT cchNew );
UINT QuerySize() const { return _cch; };
};
class BUFFER : public BUFFER_BASE
{
protected:
TCHAR *_lpBuffer;
virtual BOOL Alloc( UINT cchBuffer );
virtual BOOL Realloc( UINT cchBuffer );
public:
BUFFER( UINT cchInitial=0 );
~BUFFER();
BOOL Resize( UINT cchNew );
TCHAR * QueryPtr() const { return (TCHAR *)_lpBuffer; }
operator TCHAR *() const { return (TCHAR *)_lpBuffer; }
};
#endif