windows-nt/Source/XPSP1/NT/net/homenet/alg/exe/algcontroller.h
2020-09-26 16:20:57 +08:00

186 lines
3.5 KiB
C++

// AlgController.h : Declaration of the CAlgController
#pragma once
#include "resource.h" // main symbols
#include "ApplicationGatewayServices.h"
#include "CollectionAdapters.h"
#include "CollectionAlgModules.h"
/////////////////////////////////////////////////////////////////////////////
// CAlgController
class ATL_NO_VTABLE CAlgController :
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<CAlgController, &CLSID_AlgController>,
public IAlgController
{
//
// Constructors & Destructor
//
public:
CAlgController()
{
MYTRACE_ENTER_NOSHOWEXIT("CAlgController()");
HRESULT hr;
m_pINat = NULL;
m_pIAlgServices = NULL;
}
~CAlgController()
{
MYTRACE_ENTER_NOSHOWEXIT("~CAlgController()");
}
//
// ATL COM helper macros
//
DECLARE_REGISTRY_RESOURCEID(IDR_ALGCONTROLLER)
DECLARE_NOT_AGGREGATABLE(CAlgController)
BEGIN_COM_MAP(CAlgController)
COM_INTERFACE_ENTRY(IAlgController)
END_COM_MAP()
//
// IAlgController - COM Interface exposed methods
//
public:
STDMETHODIMP Start(
IN INat* pINat
);
STDMETHODIMP Stop();
STDMETHODIMP Adapter_Add(
IN ULONG nCookie,
IN short Type
);
STDMETHODIMP Adapter_Remove(
IN ULONG nCookie
);
STDMETHODIMP Adapter_Modify(
IN ULONG nCookie
);
STDMETHODIMP Adapter_Bind(
IN ULONG nCookie,
IN ULONG nAdapterIndex,
IN ULONG nAddressCount,
IN DWORD anAdress[]
);
STDMETHODIMP Adapter_PortMappingChanged(
IN ULONG nCookie,
IN UCHAR ucProtocol,
IN USHORT usPort
);
//
// Private internal methods
//
private:
public:
//
// Return the private interface to CComNAT
//
INat* GetNat()
{
return m_pINat;
}
//
// Load new ALG module that may have been added and unload any modules not configured anymore
//
void
ConfigurationUpdated()
{
m_AlgModules.Refresh();
}
//
//
//
void
FreeResources()
{
//
// Cleanup member before the scalar destruction is
// done on them because at that time the
// two next intruction will have been done ant the two interface will be nuked
//
m_CollectionOfAdapters.RemoveAll();
m_ControlChannelsPrimary.RemoveAll();
m_ControlChannelsSecondary.RemoveAll();
m_AdapterNotificationSinks.RemoveAll();
//
// Done with the public interface
//
if ( m_pIAlgServices )
{
m_pIAlgServices->Release();
m_pIAlgServices = NULL;
}
//
// Done with the private interface
//
if ( m_pINat )
{
m_pINat->Release();
m_pINat = NULL;
}
}
//
// Properties
//
private:
INat* m_pINat;
CCollectionAlgModules m_AlgModules;
public:
IApplicationGatewayServices* m_pIAlgServices;
CCollectionAdapters m_CollectionOfAdapters;
CCollectionAdapterNotifySinks m_AdapterNotificationSinks;
CCollectionControlChannelsPrimary m_ControlChannelsPrimary;
CCollectionControlChannelsSecondary m_ControlChannelsSecondary;
};
extern CAlgController* g_pAlgController; // This is a singleton created by IPNATHLP/NatALG