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.
 
 
 
 
 
 

247 lines
8.0 KiB

/**********************************************************************/
/** Microsoft Windows/NT **/
/** Copyright(c) Microsoft Corporation, 1997 - 1999 **/
/**********************************************************************/
/*
tapidb.h
FILE HISTORY:
*/
#ifndef _TAPIDB_H
#define _TAPIDB_H
#ifndef TAPI_H
#include "tapi.h"
#endif
#ifndef _TAPIMMC_H
#define _TAPIMMC_H
#include "tapimmc.h"
#endif
#ifndef __DYNAMLNK_H_INCLUDED__
#include "dynamlnk.h"
#endif
#ifndef _HARRAY_H
#include "harray.h"
#endif
interface ITapiInfo;
// we allocate a bigger line info size so that users can be added
#define DEVICEINFO_GROW_SIZE 10240
#define TAPI_DEFAULT_DEVICE_BUFF_SIZE 204800
// hash table for status strings
typedef CMap<CString, LPCTSTR, CString, CString&> CTapiStatusMap;
typedef enum _TapiApiIndex
{
TAPI_ADD_PROVIDER = 0,
TAPI_CONFIG_PROVIDER,
TAPI_GET_AVAILABLE_PROVIDERS,
TAPI_GET_LINE_INFO,
TAPI_GET_LINE_STATUS,
TAPI_GET_PHONE_INFO,
TAPI_GET_PHONE_STATUS,
TAPI_GET_PROVIDER_LIST,
TAPI_GET_SERVER_CONFIG,
TAPI_INITIALIZE,
TAPI_REMOVE_PROVIDER,
TAPI_SET_LINE_INFO,
TAPI_SET_PHONE_INFO,
TAPI_SET_SERVER_CONFIG,
TAPI_GET_DEVICE_FLAGS,
TAPI_SHUTDOWN
};
// not subject to localization
static LPCSTR g_apchFunctionNames[] = {
"MMCAddProvider",
"MMCConfigProvider",
"MMCGetAvailableProviders",
"MMCGetLineInfo",
"MMCGetLineStatus",
"MMCGetPhoneInfo",
"MMCGetPhoneStatus",
"MMCGetProviderList",
"MMCGetServerConfig",
"MMCInitialize",
"MMCRemoveProvider",
"MMCSetLineInfo",
"MMCSetPhoneInfo",
"MMCSetServerConfig",
"MMCGetDeviceFlags",
"MMCShutdown",
NULL
};
// not subject to localization
extern DynamicDLL g_TapiDLL;
typedef LONG (*ADDPROVIDER) (HMMCAPP, HWND, LPCWSTR, LPDWORD);
typedef LONG (*CONFIGPROVIDER) (HMMCAPP, HWND, DWORD);
typedef LONG (*GETAVAILABLEPROVIDERS) (HMMCAPP, LPAVAILABLEPROVIDERLIST);
typedef LONG (*GETLINEINFO) (HMMCAPP, LPVOID);
typedef LONG (*GETLINESTATUS) (HMMCAPP, HWND, DWORD, DWORD, DWORD, LPVARSTRING);
typedef LONG (*GETPHONEINFO) (HMMCAPP, LPVOID);
typedef LONG (*GETPHONESTATUS) (HMMCAPP, HWND, DWORD, DWORD, DWORD, LPVARSTRING);
typedef LONG (*GETPROVIDERLIST) (HMMCAPP, LPLINEPROVIDERLIST);
typedef LONG (*GETSERVERCONFIG) (HMMCAPP, LPTAPISERVERCONFIG);
typedef LONG (*INITIALIZE) (LPCWSTR, LPHMMCAPP, LPDWORD, HANDLE);
typedef LONG (*REMOVEPROVIDER) (HMMCAPP, HWND, DWORD);
typedef LONG (*SETLINEINFO) (HMMCAPP, LPVOID);
typedef LONG (*SETPHONEINFO) (HMMCAPP, LPVOID);
typedef LONG (*SETSERVERCONFIG) (HMMCAPP, LPTAPISERVERCONFIG);
typedef LONG (*GETDEVICEFLAGS) (HMMCAPP, BOOL, DWORD, DWORD, LPDWORD, LPDWORD);
typedef LONG (*SHUTDOWN) (HMMCAPP);
class CTapiConfigInfo
{
public:
CString m_strDomainName;
CString m_strUserName;
CString m_strPassword;
CUserInfoArray m_arrayAdministrators;
DWORD m_dwFlags;
};
class CTapiProvider
{
public:
DWORD m_dwProviderID;
DWORD m_dwFlags;
CString m_strName;
CString m_strFilename;
};
class CTapiDevice
{
public:
DWORD m_dwPermanentID;
DWORD m_dwProviderID;
CString m_strName;
CStringArray m_arrayAddresses;
CUserInfoArray m_arrayUsers;
};
typedef enum _DEVICE_TYPE
{
DEVICE_LINE = 0,
DEVICE_PHONE,
DEVICE_TYPE_MAX
} DEVICE_TYPE, * LPDEVICE_TYPE;
// for our interface
#define DeclareITapiInfoMembers(IPURE) \
STDMETHOD(Initialize) (THIS) IPURE; \
STDMETHOD(Reset) (THIS) IPURE; \
STDMETHOD(Destroy) (THIS) IPURE; \
STDMETHOD(EnumConfigInfo) (THIS) IPURE; \
STDMETHOD(GetConfigInfo) (THIS_ CTapiConfigInfo * ptapiConfigInfo) IPURE; \
STDMETHOD(SetConfigInfo) (THIS_ CTapiConfigInfo * ptapiConfigInfo) IPURE; \
STDMETHOD_(BOOL, IsServer) (THIS) IPURE; \
STDMETHOD_(BOOL, IsTapiServer) (THIS) IPURE; \
STDMETHOD(SetComputerName) (THIS_ LPCTSTR pComputer) IPURE; \
STDMETHOD_(LPCTSTR, GetComputerName) (THIS) IPURE; \
STDMETHOD_(int, GetProviderCount) (THIS) IPURE; \
STDMETHOD(EnumProviders) (THIS) IPURE; \
STDMETHOD(GetProviderInfo) (THIS_ CTapiProvider * pproviderInfo, int nIndex) IPURE; \
STDMETHOD(GetProviderInfo) (THIS_ CTapiProvider * pproviderInfo, DWORD dwProviderID) IPURE; \
STDMETHOD(AddProvider) (THIS_ LPCTSTR pProviderFilename, LPDWORD pdwProviderID, HWND hWnd) IPURE; \
STDMETHOD(ConfigureProvider) (THIS_ DWORD dwProviderID, HWND hWnd) IPURE; \
STDMETHOD(RemoveProvider) (THIS_ DWORD dwProviderID, HWND hWnd) IPURE; \
STDMETHOD(EnumDevices) (THIS_ DEVICE_TYPE deviceType) IPURE; \
STDMETHOD_(int, GetTotalDeviceCount) (THIS_ DEVICE_TYPE deviceType) IPURE; \
STDMETHOD_(int, GetDeviceCount) (THIS_ DEVICE_TYPE deviceType, DWORD dwProviderID) IPURE; \
STDMETHOD(GetDeviceInfo) (THIS_ DEVICE_TYPE deviceType, CTapiDevice * ptapiDevice, DWORD dwProviderID, int nIndex) IPURE; \
STDMETHOD(SetDeviceInfo) (THIS_ DEVICE_TYPE deviceType, CTapiDevice * ptapiDevice) IPURE; \
STDMETHOD(SortDeviceInfo) (THIS_ DEVICE_TYPE deviceType, DWORD dwProviderID, INDEX_TYPE indexType, DWORD dwSortOptions) IPURE; \
STDMETHOD(GetDeviceStatus) (THIS_ DEVICE_TYPE deviceType, CString * pstrStatus, DWORD dwProviderID, int nIndex, HWND hWnd) IPURE; \
STDMETHOD_(int, GetAvailableProviderCount) (THIS) IPURE; \
STDMETHOD(EnumAvailableProviders) (THIS) IPURE; \
STDMETHOD(GetAvailableProviderInfo) (THIS_ CTapiProvider * pproviderInfo, int nIndex) IPURE; \
STDMETHOD_(BOOL,IsAdmin) (THIS) IPURE; \
STDMETHOD_(BOOL,IsLocalMachine) (THIS) IPURE; \
STDMETHOD_(BOOL,FHasServiceControl) (THIS) IPURE; \
STDMETHOD(SetCachedLineBuffSize) (THIS_ DWORD dwLineSize) IPURE; \
STDMETHOD(SetCachedPhoneBuffSize) (THIS_ DWORD dwPhoneSize) IPURE; \
STDMETHOD_(DWORD,GetCachedLineBuffSize) (THIS) IPURE; \
STDMETHOD_(DWORD,GetCachedPhoneBuffSize) (THIS) IPURE; \
STDMETHOD_(BOOL,IsCacheDirty) (THIS) IPURE; \
STDMETHOD(GetDeviceFlags) (THIS_ DWORD dwProviderID, DWORD dwPermanentID, LPDWORD pdwFlags) IPURE; \
#undef INTERFACE
#define INTERFACE ITapiInfo
DECLARE_INTERFACE_(ITapiInfo, IUnknown)
{
DeclareIUnknownMembers(PURE)
DeclareITapiInfoMembers(PURE)
};
typedef ComSmartPointer<ITapiInfo, &IID_ITapiInfo> SPITapiInfo;
// now the object that implements ITapiInfo
class CTapiInfo : public ITapiInfo
{
public:
CTapiInfo();
~CTapiInfo();
DeclareIUnknownMembers(IMPL);
DeclareITapiInfoMembers(IMPL);
private:
void TapiConfigToInternal(LPTAPISERVERCONFIG pTapiConfig, CTapiConfigInfo & tapiConfigInfo);
void InternalToTapiConfig(CTapiConfigInfo & tapiConfigInfo, LPTAPISERVERCONFIG * pTapiConfig);
void TapiDeviceToInternal(DEVICE_TYPE deviceType, LPDEVICEINFO pTapiDeviceInfo, CTapiDevice & tapiDevice);
void InternalToTapiDevice(CTapiDevice & tapiDevice, LPDEVICEINFOLIST * pTapiDeviceInfoList);
int CalcHashValue(LPCTSTR pString);
LPCTSTR GetProviderName(DWORD dwProviderID, LPCTSTR pszFilename, LPDWORD pdwFlags);
DWORD GetCurrentUser();
private:
HMMCAPP m_hServer; // handle to server
LPTAPISERVERCONFIG m_pTapiConfig;
LPLINEPROVIDERLIST m_pProviderList;
LPAVAILABLEPROVIDERLIST m_pAvailProviderList;
LPDEVICEINFOLIST m_paDeviceInfo[DEVICE_TYPE_MAX];
CString m_strComputerName;
DWORD m_dwApiVersion;
HANDLE m_hReinit;
CIndexMgr m_IndexMgr[DEVICE_TYPE_MAX];
CCriticalSection m_csData;
CTapiStatusMap m_mapStatusStrings;
HANDLE m_hResetEvent;
LONG m_cRef;
BOOL m_fIsAdmin;
CString m_strCurrentUser;
BOOL m_fIsLocalMachine;
DWORD m_dwCachedLineSize;
DWORD m_dwCachedPhoneSize;
BOOL m_fCacheDirty;
};
HRESULT CreateTapiInfo(ITapiInfo ** ppTapiInfo);
void UnloadTapiDll();
DWORD IsAdmin(LPCTSTR szMachineName, LPCTSTR szAccount, LPCTSTR szPassword, BOOL * pfIsAdmin);
#endif _TAPIDB_H