Windows-Server-2003/printscan/faxsrv/service/server/routerule.h

178 lines
4.6 KiB
C++

/*++
Copyright (c) 1999 Microsoft Corporation
Module Name:
RouteRule.h
Abstract:
This file provides declaration of the service
outbound routing rules.
Author:
Oded Sacher (OdedS) Dec, 1999
Revision History:
--*/
#ifndef _OUT_ROUTE_RULE_H
#define _OUT_ROUTE_RULE_H
#include <map>
#include <list>
#include <string>
#include <algorithm>
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
/************************************
* *
* CDialingLocation *
* *
************************************/
class CDialingLocation
{
public:
CDialingLocation () {}
CDialingLocation (DWORD dwCountryCode, DWORD dwAreaCode)
: m_dwCountryCode(dwCountryCode), m_dwAreaCode(dwAreaCode) {}
~CDialingLocation () {}
BOOL IsValid () const;
bool operator < ( const CDialingLocation &other ) const;
DWORD GetCountryCode () const {return m_dwCountryCode;}
DWORD GetAreaCode () const {return m_dwAreaCode;}
LPCWSTR GetCountryName () const;
private:
DWORD m_dwCountryCode;
DWORD m_dwAreaCode;
}; // CDialingLocation
/************************************
* *
* COutboundRoutingRule *
* *
************************************/
class COutboundRoutingRule
{
public:
COutboundRoutingRule () {}
~COutboundRoutingRule () {}
void Init (CDialingLocation DialingLocation, DWORD dwDevice)
{
m_dwDevice = dwDevice;
m_bUseGroup = FALSE;
m_DialingLocation = DialingLocation;
return;
}
DWORD Init (CDialingLocation DialingLocation, wstring wstrGroupName);
COutboundRoutingRule& operator= (const COutboundRoutingRule& rhs)
{
if (this == &rhs)
{
return *this;
}
m_wstrGroupName = rhs.m_wstrGroupName;
m_dwDevice = rhs.m_dwDevice;
m_bUseGroup = rhs.m_bUseGroup;
m_DialingLocation = rhs.m_DialingLocation;
return *this;
}
DWORD GetStatus (FAX_ENUM_RULE_STATUS* lpdwStatus) const;
DWORD GetDeviceList (LPDWORD* lppdwDevices, LPDWORD lpdwNumDevices) const;
DWORD Save(HKEY hRuleKey) const;
DWORD Load(HKEY hRuleKey);
const CDialingLocation GetDialingLocation () const { return m_DialingLocation; }
DWORD Serialize (LPBYTE lpBuffer,
PFAX_OUTBOUND_ROUTING_RULEW pFaxRule,
PULONG_PTR pupOffset,
DWORD dwBufferSize) const;
LPCWSTR GetGroupName () const;
#if DBG
void Dump () const;
#endif
private:
wstring m_wstrGroupName;
DWORD m_dwDevice;
BOOL m_bUseGroup; // Flag that indicates whether to use m_dwDevice or m_wstrGroupName
CDialingLocation m_DialingLocation;
}; // COutboundRoutingRule
typedef COutboundRoutingRule *PCRULE;
/************************************
* *
* COutboundRulesMap *
* *
************************************/
typedef map<CDialingLocation, COutboundRoutingRule> RULES_MAP, *PRULES_MAP;
//
// The COutboundRulesMap class maps between group name and a list of device ID's
//
class COutboundRulesMap
{
public:
COutboundRulesMap () {}
~COutboundRulesMap () {}
DWORD Load ();
DWORD AddRule (COutboundRoutingRule& Rule);
DWORD DelRule (CDialingLocation& DialingLocation);
DWORD SerializeRules (PFAX_OUTBOUND_ROUTING_RULEW* ppRules,
LPDWORD lpdwNumRules,
LPDWORD lpdwBufferSize) const;
PCRULE FindRule (CDialingLocation& DialingLocation) const;
BOOL CreateDefaultRule (void);
DWORD IsGroupInRuleDest (LPCWSTR lpcwstrGroupName, BOOL* lpbGroupInRule) const;
#if DBG
void Dump () const;
#endif
private:
RULES_MAP m_RulesMap;
}; // COutboundRulesMap
/************************************
* *
* Externes *
* *
************************************/
extern COutboundRulesMap* g_pRulesMap; // Map of dialing location to list of device IDs
//
// IMPORTANT - No locking mechanism - USE g_CsConfig to serialize calls to g_pRulesMap
//
/************************************
* *
* Functions *
* *
************************************/
BOOL CheckDefaultRule (void);
#endif