248 lines
8 KiB
C++
248 lines
8 KiB
C++
/**********************************************************************/
|
|
/** 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
|