Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

183 lines
4.2 KiB

#include "ras.h"
#include "raserror.h"
//
// Useful registry constants
//
extern const TCHAR c_szRASKey[];
extern const TCHAR c_szProfile[];
//
// Data for the dialer and property sheet is loaded and saved
// in this format
//
struct _dialpropdata {
BOOL fEnabled;
BOOL fUnattended;
TCHAR pszConnection[RAS_MaxEntryName + 1];
TCHAR pszUsername[UNLEN + 1];
TCHAR pszPassword[PWLEN + 1];
TCHAR pszDomain[DNLEN + 1];
UINT uRedialAttempts;
UINT uRedialDelay;
};
typedef struct _dialpropdata DIALPROPDATA;
//
// Forward declaration
//
class CConnectionAgent;
// the various states that a client can be in
typedef enum {
CLIENT_NEW,
CLIENT_CONNECTING,
CLIENT_CONNECTED,
CLIENT_ABORT,
CLIENT_DISCONNECTED,
} ClientState;
//
// Connection client object
//
class CConnClient : public INotificationSink,
public IOleCommandTarget
{
private:
~CConnClient() {};
public:
CConnClient();
//
// IUnknown members
//
STDMETHODIMP QueryInterface(REFIID, void **);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
//
// INotificationSink members
//
STDMETHODIMP OnNotification(
LPNOTIFICATION pNotification,
LPNOTIFICATIONREPORT pNotificationReport,
DWORD dwReserved
);
//
// IOleCommandTarget members
//
STDMETHODIMP QueryStatus(
const GUID __RPC_FAR *pguidCmdGroup,
ULONG cCmds,
OLECMD __RPC_FAR prgCmds[ ],
OLECMDTEXT __RPC_FAR *pCmdText
);
STDMETHODIMP Exec(
const GUID __RPC_FAR *pguidCmdGroup,
DWORD nCmdID,
DWORD nCmdexecopt,
VARIANT __RPC_FAR *pvaIn,
VARIANT __RPC_FAR *pvaOut
);
HRESULT SetConnAgent(IUnknown *punk);
protected:
long m_cRef;
IOleCommandTarget * m_poctAgent;
BSTR m_bstrURL;
ClientState m_State;
LPNOTIFICATIONREPORT m_pReport;
long m_iCookie;
HRESULT Connect(void);
HRESULT Disconnect(void);
HRESULT DeliverProgressReport(SCODE, BSTR);
};
//
// Main dialer agent object
//
class CConnectionAgent : public IOleCommandTarget
{
private:
~CConnectionAgent();
public:
CConnectionAgent();
//
// IUnknown members
//
STDMETHODIMP QueryInterface(REFIID, void **);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
//
// IOleCommandTarget members
//
STDMETHODIMP QueryStatus(
const GUID __RPC_FAR *pguidCmdGroup,
ULONG cCmds,
OLECMD __RPC_FAR prgCmds[ ],
OLECMDTEXT __RPC_FAR *pCmdText
);
STDMETHODIMP Exec(
const GUID __RPC_FAR *pguidCmdGroup,
DWORD nCmdID,
DWORD nCmdexecopt,
VARIANT __RPC_FAR *pvaIn,
VARIANT __RPC_FAR *pvaOut
);
//
// Other public members
//
DWORD m_dwRegisterHandle;
protected:
long m_cRef;
BOOL IsDialPossible(void);
BOOL IsDialExisting(void);
void Notify(HRESULT hr, TCHAR *pszErrorText);
void Connect(void);
void Disconnect(void);
void Clean(void);
INotificationMgr *m_pMgr;
DIALPROPDATA * m_pData;
DWORD m_dwFlags;
long m_lConnectionCount;
HDPA m_hdpaClient;
};
// Connection agent flags
#define CA_CONNECTING_NOW 1
#define CA_OFFLINE_STATE_READ 2
#define CA_OFFLINE 4
#define CA_DIALED 8
#define CA_LOADED_RAS 16
// IOleCommandTarget commands
#define AGENT_CONNECT 0x00
#define AGENT_DISCONNECT 0x01
#define AGENT_NOTIFY 0x10
// CLIENTINFO struct - info about each client
typedef struct _ci {
IOleCommandTarget * poctClient;
DWORD dwFlags;
} CLIENTINFO;
// flags for CLIENTINFO
#define CLIENT_DISCONNECT 1
#define CLIENT_NOTIFIED 2