Leaked source code of windows server 2003
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.
 
 
 
 
 
 

167 lines
4.3 KiB

/*++
Copyright (c) 1999 Microsoft Corporation
Module Name:
RouteGroup.h
Abstract:
This file provides declaration of the service
outbound routing groups.
Author:
Oded Sacher (OdedS) Nov, 1999
Revision History:
--*/
#ifndef _OUT_ROUTE_GROUP_H
#define _OUT_ROUTE_GROUP_H
#include <map>
#include <list>
#include <string>
#include <algorithm>
#include <set>
using namespace std;
#pragma hdrstop
#pragma warning (disable : 4786) // identifier was truncated to '255' characters in the debug information
// This pragma does not work KB ID: Q167355
/************************************
* *
* wstrCaseInsensitiveLess *
* *
************************************/
class wstrCaseInsensitiveLess
{
public:
bool operator()(const wstring X, wstring Y) const
{
LPCWSTR lpcwstrX = X.c_str();
LPCWSTR lpcwstrY = Y.c_str();
if (_wcsicmp(lpcwstrX,lpcwstrY) < 0)
{
return true;
}
return false;
}
};
typedef list<DWORD> GROUP_DEVICES, *PGROUP_DEVICES;
/************************************
* *
* COutboundRoutingGroup *
* *
************************************/
class COutboundRoutingGroup
{
public:
COutboundRoutingGroup () {}
~COutboundRoutingGroup () {}
COutboundRoutingGroup (const COutboundRoutingGroup& rhs)
: m_DeviceList(rhs.m_DeviceList) {}
COutboundRoutingGroup& operator= (const COutboundRoutingGroup& rhs)
{
if (this == &rhs)
{
return *this;
}
m_DeviceList = rhs.m_DeviceList;
return *this;
}
DWORD Load(HKEY hGroupKey, LPCWSTR lpcwstrGroupName);
DWORD SetDevices (const LPDWORD lpdwDevices, DWORD dwNumDevices, BOOL fAllDevicesGroup);
DWORD SerializeDevices (LPDWORD* lppDevices, LPDWORD lpdwNumDevices, BOOL bAllocate = TRUE) const;
DWORD Save(HKEY hGroupKey) const;
DWORD AddDevice (DWORD dwDevice);
DWORD DelDevice (DWORD dwDevice);
DWORD SetDeviceOrder (DWORD dwDevice, DWORD dwOrder);
DWORD GetStatus (FAX_ENUM_GROUP_STATUS* lpStatus) const;
#if DBG
void Dump () const;
#endif
private:
BOOL IsDeviceInGroup (DWORD dwDevice) const;
DWORD ValidateDevices (const LPDWORD lpdwDevices, DWORD dwNumDevices, BOOL fAllDevicesGroup) const;
GROUP_DEVICES m_DeviceList;
}; // COutboundRoutingGroup
/************************************
* *
* COutboundRoutingGroupsMap *
* *
************************************/
typedef COutboundRoutingGroup *PCGROUP;
typedef map<wstring, COutboundRoutingGroup, wstrCaseInsensitiveLess> GROUPS_MAP, *PGROUPS_MAP;
//
// The CGroupMap class maps between group name and a list of device ID's
//
class COutboundRoutingGroupsMap
{
public:
COutboundRoutingGroupsMap () {}
~COutboundRoutingGroupsMap () {}
DWORD Load ();
DWORD AddGroup (LPCWSTR lpcwstrGroupName, PCGROUP pCGroup);
DWORD DelGroup (LPCWSTR lpcwstrGroupName);
DWORD SerializeGroups (PFAX_OUTBOUND_ROUTING_GROUPW* ppGroups,
LPDWORD lpdwNumGroups,
LPDWORD lpdwBufferSize) const;
PCGROUP FindGroup (LPCWSTR lpcwstrGroupName) const;
BOOL UpdateAllDevicesGroup (void);
DWORD RemoveDevice (DWORD dwDeviceId);
#if DBG
void Dump () const;
#endif
private:
GROUPS_MAP m_GroupsMap;
}; // COutboundRoutingGroupsMap
/************************************
* *
* Externes *
* *
************************************/
extern COutboundRoutingGroupsMap* g_pGroupsMap; // Map of group name to list of device IDs
//
// IMPORTANT - No locking mechanism - USE g_CsConfig to serialize calls to g_pGroupsMap
//
/************************************
* *
* Functions *
* *
************************************/
BOOL
IsDeviceInstalled (DWORD dwDeviceId);
#endif