201 lines
4.4 KiB
C++
201 lines
4.4 KiB
C++
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
Copyright (C) Microsoft Corporation, 1997 - 1999
|
|
|
|
Module Name:
|
|
|
|
ConectionToServer.h
|
|
|
|
Abstract:
|
|
|
|
Header file for class which manages connection to a remote server.
|
|
|
|
The connect action takes place in a worker thread.
|
|
|
|
See ConnectionToServer.cpp for implementation.
|
|
|
|
Revision History:
|
|
mmaguire 02/09/98 - created
|
|
byao 04/24/98 - Modified for NAPMMC.DLL (Remote Access Policies snap-in)
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
#if !defined(_NAP_CONNECTION_TO_SERVER_H_)
|
|
#define _NAP_CONNECTION_TO_SERVER_H_
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// BEGIN INCLUDES
|
|
//
|
|
// where we can find what this class derives from:
|
|
//
|
|
#include "DialogWithWorkerThread.h"
|
|
//
|
|
//
|
|
// where we can find what this class has or uses:
|
|
//
|
|
#include "sdoias.h"
|
|
//
|
|
// END INCLUDES
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
// return value for connection
|
|
#define CONNECT_NO_ERROR 0
|
|
#define CONNECT_SERVER_NOT_SUPPORTED 1
|
|
#define CONNECT_FAILED (-1)
|
|
|
|
typedef
|
|
enum _TAG_CONNECTION_STATUS
|
|
{
|
|
NO_CONNECTION_ATTEMPTED = 0,
|
|
CONNECTING,
|
|
CONNECTED,
|
|
CONNECTION_ATTEMPT_FAILED,
|
|
CONNECTION_INTERRUPTED,
|
|
UNKNOWN
|
|
} CONNECTION_STATUS;
|
|
|
|
|
|
|
|
class CMachineNode;
|
|
class CLoggingMachineNode;
|
|
|
|
class CConnectionToServer : public CDialogWithWorkerThread<CConnectionToServer>
|
|
{
|
|
public:
|
|
CConnectionToServer( CMachineNode *pServerNode,
|
|
BSTR bstrServerAddress,
|
|
BOOL fExtendingIAS );
|
|
|
|
~CConnectionToServer( void );
|
|
|
|
public:
|
|
|
|
// This is the ID of the dialog resource we want for this class.
|
|
// An enum is used here because the correct value of
|
|
// IDD must be initialized before the base class's constructor is called
|
|
enum { IDD = IDD_CONNECT_TO_MACHINE };
|
|
|
|
BEGIN_MSG_MAP(CConnectionToServer)
|
|
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
|
|
COMMAND_ID_HANDLER( IDCANCEL, OnCancel )
|
|
CHAIN_MSG_MAP(CDialogWithWorkerThread<CConnectionToServer>)
|
|
END_MSG_MAP()
|
|
|
|
LRESULT OnCancel(
|
|
UINT uMsg
|
|
, WPARAM wParam
|
|
, HWND hwnd
|
|
, BOOL& bHandled
|
|
);
|
|
|
|
LRESULT OnInitDialog(
|
|
UINT uMsg
|
|
, WPARAM wParam
|
|
, LPARAM lParam
|
|
, BOOL& bHandled
|
|
);
|
|
|
|
LRESULT OnReceiveThreadMessage(
|
|
UINT uMsg
|
|
, WPARAM wParam
|
|
, LPARAM lParam
|
|
, BOOL& bHandled
|
|
);
|
|
|
|
void CleanupMachineRelated( void )
|
|
{
|
|
m_pMachineNode = NULL;
|
|
}
|
|
|
|
CONNECTION_STATUS GetConnectionStatus( void );
|
|
|
|
HRESULT GetSdoService( ISdo **ppSdo );
|
|
|
|
// happening in the main thread
|
|
HRESULT ReloadSdo(ISdo** ppSdoService, ISdoDictionaryOld **ppSdoDictionaryOld);
|
|
|
|
HRESULT GetSdoDictionaryOld( ISdoDictionaryOld **ppSdoDictionaryOld );
|
|
|
|
|
|
DWORD DoWorkerThreadAction();
|
|
|
|
|
|
protected:
|
|
|
|
CONNECTION_STATUS m_ConnectionStatus;
|
|
|
|
// Pointer to stream into which the worker thread
|
|
// this class creates will marshal the Sdo interface pointer it gets.
|
|
LPSTREAM m_pStreamSdoMachineMarshal;
|
|
LPSTREAM m_pStreamSdoServiceMarshal;
|
|
LPSTREAM m_pStreamSdoDictionaryOldMarshal;
|
|
|
|
// SDO pointers for use in the main thread's context.
|
|
CComPtr<ISdo> m_spSdo;
|
|
CComPtr<ISdoDictionaryOld> m_spSdoDictionaryOld;
|
|
CComPtr<ISdoMachine> m_spSdoMachine;
|
|
|
|
//
|
|
CMachineNode* m_pMachineNode;
|
|
CComBSTR m_bstrServerAddress;
|
|
BOOL m_fExtendingIAS;
|
|
BOOL m_fDSAvailable; // is DS avilable for this machine?
|
|
// DS is only available for NT5 domain
|
|
void WriteTrace(char* info, HRESULT hr)
|
|
{
|
|
::CString str = info;
|
|
::CString str1;
|
|
str1.Format(str, hr);
|
|
TracePrintf(g_dwTraceHandle, str1);
|
|
|
|
};
|
|
|
|
//
|
|
// local computer name.
|
|
// We need this name to call ServerInfo->GetDomainInfo(), as well as showing
|
|
// it in connecting message
|
|
//
|
|
TCHAR m_szLocalComputerName[IAS_MAX_COMPUTERNAME_LENGTH];
|
|
|
|
};
|
|
|
|
class CLoggingConnectionToServer : public CConnectionToServer
|
|
{
|
|
public:
|
|
CLoggingConnectionToServer( CLoggingMachineNode * pServerNode,
|
|
BSTR bstrServerAddress,
|
|
BOOL fExtendingIAS );
|
|
|
|
~CLoggingConnectionToServer( void );
|
|
|
|
public:
|
|
BEGIN_MSG_MAP(CLoggingConnectionToServer)
|
|
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
|
|
CHAIN_MSG_MAP(CConnectionToServer)
|
|
END_MSG_MAP()
|
|
|
|
LRESULT OnInitDialog(
|
|
UINT uMsg
|
|
, WPARAM wParam
|
|
, LPARAM lParam
|
|
, BOOL& bHandled
|
|
);
|
|
|
|
LRESULT OnReceiveThreadMessage(
|
|
UINT uMsg
|
|
, WPARAM wParam
|
|
, LPARAM lParam
|
|
, BOOL& bHandled
|
|
);
|
|
|
|
DWORD DoWorkerThreadAction();
|
|
|
|
|
|
private:
|
|
CLoggingMachineNode * m_pMachineNode;
|
|
};
|
|
|
|
#endif // _IAS_CONNECTION_TO_SERVER_H_
|