570 lines
12 KiB
C
570 lines
12 KiB
C
|
/*++ BUILD Version: 0000 // Increment this if a change has global effects
|
||
|
|
||
|
Copyright (c) 1994-1998 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
client.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Header file for tapi client module
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Dan Knudson (DanKn) 01-Apr-1994
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#define TAPI_VERSION1_0 0x00010003
|
||
|
#define TAPI_VERSION1_4 0x00010004
|
||
|
#define TAPI_VERSION2_0 0x00020000
|
||
|
#define TAPI_VERSION2_1 0x00020001
|
||
|
#define TAPI_VERSION2_2 0x00020002
|
||
|
#define TAPI_VERSION3_0 0x00030000
|
||
|
#define TAPI_VERSION3_1 0x00030001
|
||
|
#define TAPI_VERSION_CURRENT TAPI_VERSION3_1
|
||
|
|
||
|
#ifdef _WIN64
|
||
|
#define TALIGN_MASK 0xfffffff8
|
||
|
#define TALIGN_COUNT 7
|
||
|
#else
|
||
|
#define TALIGN_MASK 0xfffffffc
|
||
|
#define TALIGN_COUNT 3
|
||
|
#endif
|
||
|
#define ALIGN(a) (((a)+TALIGN_COUNT)&TALIGN_MASK)
|
||
|
|
||
|
#define NUM_ARGS_MASK 0x0000000f
|
||
|
|
||
|
#define LINE_FUNC 0x00000010
|
||
|
#define PHONE_FUNC 0x00000020
|
||
|
#define TAPI_FUNC 0x00000000
|
||
|
|
||
|
#define ASYNC 0x00000040
|
||
|
#define SYNC 0x00000000
|
||
|
|
||
|
#define INCL_CONTEXT 0x00000080
|
||
|
|
||
|
#define INITDATA_KEY ((DWORD) 'INIT')
|
||
|
#define TPROXYREQUESTHEADER_KEY ((DWORD) 'REQH')
|
||
|
|
||
|
#define WM_ASYNCEVENT (WM_USER+111)
|
||
|
|
||
|
#define DEF_NUM_EVENT_BUFFER_ENTRIES 16
|
||
|
|
||
|
#define WAVE_STRING_ID_BUFFER_SIZE 256
|
||
|
|
||
|
#define TAPI_SUCCESS 0
|
||
|
#define TAPI_NO_DATA ((DWORD)-1)
|
||
|
#define MAX_TAPI_FUNC_ARGS 13
|
||
|
|
||
|
#define REMOVEPROVIDER 0
|
||
|
#define CONFIGPROVIDER 1
|
||
|
#define ADDPROVIDER 2
|
||
|
#define TAPI16BITSUCCESS -2
|
||
|
|
||
|
#define INITIAL_CLIENT_THREAD_BUF_SIZE 512
|
||
|
#define WM_TAPI16_CALLBACKMSG (WM_USER+101)
|
||
|
|
||
|
#define IsOnlyOneBitSetInDWORD(dw) (dw && !(((DWORD)dw) & (((DWORD)dw) - 1)))
|
||
|
|
||
|
#define AllCallSelect \
|
||
|
(LINECALLSELECT_CALL | \
|
||
|
LINECALLSELECT_ADDRESS | \
|
||
|
LINECALLSELECT_LINE)
|
||
|
|
||
|
#define AllDigitModes \
|
||
|
(LINEDIGITMODE_PULSE | \
|
||
|
LINEDIGITMODE_DTMF | \
|
||
|
LINEDIGITMODE_DTMFEND)
|
||
|
|
||
|
#define AllForwardModes \
|
||
|
(LINEFORWARDMODE_UNCOND | \
|
||
|
LINEFORWARDMODE_UNCONDINTERNAL | \
|
||
|
LINEFORWARDMODE_UNCONDEXTERNAL | \
|
||
|
LINEFORWARDMODE_UNCONDSPECIFIC | \
|
||
|
LINEFORWARDMODE_BUSY | \
|
||
|
LINEFORWARDMODE_BUSYINTERNAL | \
|
||
|
LINEFORWARDMODE_BUSYEXTERNAL | \
|
||
|
LINEFORWARDMODE_BUSYSPECIFIC | \
|
||
|
LINEFORWARDMODE_NOANSW | \
|
||
|
LINEFORWARDMODE_NOANSWINTERNAL | \
|
||
|
LINEFORWARDMODE_NOANSWEXTERNAL | \
|
||
|
LINEFORWARDMODE_NOANSWSPECIFIC | \
|
||
|
LINEFORWARDMODE_BUSYNA | \
|
||
|
LINEFORWARDMODE_BUSYNAINTERNAL | \
|
||
|
LINEFORWARDMODE_BUSYNAEXTERNAL | \
|
||
|
LINEFORWARDMODE_BUSYNASPECIFIC)
|
||
|
|
||
|
#define AllTerminalModes \
|
||
|
(LINETERMMODE_BUTTONS | \
|
||
|
LINETERMMODE_LAMPS | \
|
||
|
LINETERMMODE_DISPLAY | \
|
||
|
LINETERMMODE_RINGER | \
|
||
|
LINETERMMODE_HOOKSWITCH | \
|
||
|
LINETERMMODE_MEDIATOLINE | \
|
||
|
LINETERMMODE_MEDIAFROMLINE | \
|
||
|
LINETERMMODE_MEDIABIDIRECT)
|
||
|
|
||
|
#define AllToneModes \
|
||
|
(LINETONEMODE_CUSTOM | \
|
||
|
LINETONEMODE_RINGBACK | \
|
||
|
LINETONEMODE_BUSY | \
|
||
|
LINETONEMODE_BEEP | \
|
||
|
LINETONEMODE_BILLING)
|
||
|
|
||
|
#define AllHookSwitchDevs \
|
||
|
(PHONEHOOKSWITCHDEV_HANDSET | \
|
||
|
PHONEHOOKSWITCHDEV_SPEAKER | \
|
||
|
PHONEHOOKSWITCHDEV_HEADSET)
|
||
|
|
||
|
#define AllHookSwitchModes \
|
||
|
(PHONEHOOKSWITCHMODE_ONHOOK | \
|
||
|
PHONEHOOKSWITCHMODE_MIC | \
|
||
|
PHONEHOOKSWITCHMODE_SPEAKER | \
|
||
|
PHONEHOOKSWITCHMODE_MICSPEAKER)
|
||
|
|
||
|
#define AllLampModes \
|
||
|
(PHONELAMPMODE_BROKENFLUTTER | \
|
||
|
PHONELAMPMODE_FLASH | \
|
||
|
PHONELAMPMODE_FLUTTER | \
|
||
|
PHONELAMPMODE_OFF | \
|
||
|
PHONELAMPMODE_STEADY | \
|
||
|
PHONELAMPMODE_WINK | \
|
||
|
PHONELAMPMODE_DUMMY)
|
||
|
|
||
|
#define AllMediaModes \
|
||
|
(LINEMEDIAMODE_UNKNOWN | \
|
||
|
LINEMEDIAMODE_INTERACTIVEVOICE | \
|
||
|
LINEMEDIAMODE_AUTOMATEDVOICE | \
|
||
|
LINEMEDIAMODE_DIGITALDATA | \
|
||
|
LINEMEDIAMODE_G3FAX | \
|
||
|
LINEMEDIAMODE_G4FAX | \
|
||
|
LINEMEDIAMODE_DATAMODEM | \
|
||
|
LINEMEDIAMODE_TELETEX | \
|
||
|
LINEMEDIAMODE_VIDEOTEX | \
|
||
|
LINEMEDIAMODE_TELEX | \
|
||
|
LINEMEDIAMODE_MIXED | \
|
||
|
LINEMEDIAMODE_TDD | \
|
||
|
LINEMEDIAMODE_ADSI | \
|
||
|
LINEMEDIAMODE_VOICEVIEW | \
|
||
|
LINEMEDIAMODE_VIDEO)
|
||
|
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
xGetAsyncEvents,
|
||
|
xGetUIDllName,
|
||
|
xUIDLLCallback,
|
||
|
xFreeDialogInstance,
|
||
|
|
||
|
lAccept,
|
||
|
lAddToConference,
|
||
|
lAgentSpecific,
|
||
|
lAnswer,
|
||
|
lBlindTransfer,
|
||
|
lClose,
|
||
|
lCompleteCall,
|
||
|
lCompleteTransfer,
|
||
|
// lConditionalMediaDetection, //remotesp
|
||
|
lDeallocateCall,
|
||
|
lDevSpecific,
|
||
|
lDevSpecificFeature,
|
||
|
lDial,
|
||
|
lDrop,
|
||
|
lForward,
|
||
|
lGatherDigits,
|
||
|
lGenerateDigits,
|
||
|
lGenerateTone,
|
||
|
lGetAddressCaps,
|
||
|
lGetAddressID,
|
||
|
lGetAddressStatus,
|
||
|
lGetAgentActivityList,
|
||
|
lGetAgentCaps,
|
||
|
lGetAgentGroupList,
|
||
|
lGetAgentStatus,
|
||
|
lGetAppPriority,
|
||
|
lGetCallAddressID, // remotesp only
|
||
|
lGetCallInfo,
|
||
|
lGetCallStatus,
|
||
|
lGetConfRelatedCalls,
|
||
|
lGetCountry,
|
||
|
lGetDevCaps,
|
||
|
lGetDevConfig,
|
||
|
lGetIcon,
|
||
|
lGetID,
|
||
|
lGetLineDevStatus,
|
||
|
lGetNewCalls,
|
||
|
lGetNumAddressIDs, // remotesp only
|
||
|
lGetNumRings,
|
||
|
lGetProviderList,
|
||
|
lGetRequest,
|
||
|
lGetStatusMessages,
|
||
|
//In TAPI32.DLL now: lGetTranslateCaps,
|
||
|
lHandoff,
|
||
|
lHold,
|
||
|
lInitialize,
|
||
|
lMakeCall,
|
||
|
lMonitorDigits,
|
||
|
lMonitorMedia,
|
||
|
lMonitorTones,
|
||
|
lNegotiateAPIVersion,
|
||
|
lNegotiateExtVersion,
|
||
|
lOpen,
|
||
|
lPark,
|
||
|
lPickup,
|
||
|
lPrepareAddToConference,
|
||
|
lProxyMessage,
|
||
|
lProxyResponse,
|
||
|
lRedirect,
|
||
|
lRegisterRequestRecipient,
|
||
|
lReleaseUserUserInfo,
|
||
|
lRemoveFromConference,
|
||
|
lSecureCall,
|
||
|
// lSelectExtVersion,
|
||
|
lSendUserUserInfo,
|
||
|
lSetAgentActivity,
|
||
|
lSetAgentGroup,
|
||
|
lSetAgentState,
|
||
|
lSetAppPriority,
|
||
|
lSetAppSpecific,
|
||
|
lSetCallData,
|
||
|
lSetCallParams,
|
||
|
lSetCallPrivilege,
|
||
|
lSetCallQualityOfService,
|
||
|
lSetCallTreatment,
|
||
|
//In TAPI32.DLL now: lSetCurrentLocation,
|
||
|
lSetDefaultMediaDetection, // remotesp only
|
||
|
lSetDevConfig,
|
||
|
lSetLineDevStatus,
|
||
|
lSetMediaControl,
|
||
|
lSetMediaMode,
|
||
|
lSetNumRings,
|
||
|
lSetStatusMessages,
|
||
|
lSetTerminal,
|
||
|
//In TAPI32.DLL now: lSetTollList,
|
||
|
lSetupConference,
|
||
|
lSetupTransfer,
|
||
|
lShutdown,
|
||
|
lSwapHold,
|
||
|
//In TAPI32.DLL now: lTranslateAddress,
|
||
|
lUncompleteCall,
|
||
|
lUnhold,
|
||
|
lUnpark,
|
||
|
|
||
|
pClose,
|
||
|
pDevSpecific,
|
||
|
pGetButtonInfo,
|
||
|
pGetData,
|
||
|
pGetDevCaps,
|
||
|
pGetDisplay,
|
||
|
pGetGain,
|
||
|
pGetHookSwitch,
|
||
|
pGetID,
|
||
|
pGetIcon,
|
||
|
pGetLamp,
|
||
|
pGetRing,
|
||
|
pGetStatus,
|
||
|
pGetStatusMessages,
|
||
|
pGetVolume,
|
||
|
pInitialize,
|
||
|
pOpen,
|
||
|
pNegotiateAPIVersion,
|
||
|
pNegotiateExtVersion,
|
||
|
// pSelectExtVersion, // remotesp
|
||
|
pSetButtonInfo,
|
||
|
pSetData,
|
||
|
pSetDisplay,
|
||
|
pSetGain,
|
||
|
pSetHookSwitch,
|
||
|
pSetLamp,
|
||
|
pSetRing,
|
||
|
pSetStatusMessages,
|
||
|
pSetVolume,
|
||
|
pShutdown,
|
||
|
|
||
|
//In TAPI32.DLL now: tGetLocationInfo,
|
||
|
tRequestDrop,
|
||
|
tRequestMakeCall,
|
||
|
tRequestMediaCall,
|
||
|
// tMarkLineEvent,
|
||
|
tReadLocations,
|
||
|
tWriteLocations,
|
||
|
tAllocNewID,
|
||
|
tPerformance,
|
||
|
lConditionalMediaDetection, //remotesp
|
||
|
lSelectExtVersion,
|
||
|
pSelectExtVersion, // remotesp
|
||
|
// lOpenInt,
|
||
|
// lShutdownInt,
|
||
|
|
||
|
//
|
||
|
// Ordinals for tapi 2.1 ended here. the lOpenInt & lShutdownInt
|
||
|
// were Win95 local-machine-only hacks which have since been removed
|
||
|
//
|
||
|
|
||
|
xNegotiateAPIVersionForAllDevices, // remotesp
|
||
|
|
||
|
mGetAvailableProviders,
|
||
|
mGetLineInfo,
|
||
|
mGetPhoneInfo,
|
||
|
mGetServerConfig,
|
||
|
mSetLineInfo,
|
||
|
mSetPhoneInfo,
|
||
|
mSetServerConfig,
|
||
|
|
||
|
//
|
||
|
// Ordinals for 2.1 update (nt4 sp4) ended here.
|
||
|
//
|
||
|
|
||
|
lMSPIdentify,
|
||
|
lReceiveMSPData,
|
||
|
|
||
|
lGetCallHubTracking,
|
||
|
lGetCallIDs,
|
||
|
lGetHubRelatedCalls,
|
||
|
lSetCallHubTracking,
|
||
|
xPrivateFactoryIdentify,
|
||
|
lDevSpecificEx,
|
||
|
lCreateAgent,
|
||
|
lCreateAgentSession,
|
||
|
lGetAgentInfo,
|
||
|
lGetAgentSessionInfo,
|
||
|
lGetAgentSessionList,
|
||
|
lGetQueueInfo,
|
||
|
lGetGroupList,
|
||
|
lGetQueueList,
|
||
|
lSetAgentMeasurementPeriod,
|
||
|
lSetAgentSessionState,
|
||
|
lSetQueueMeasurementPeriod,
|
||
|
lSetAgentStateEx,
|
||
|
lGetProxyStatus,
|
||
|
lCreateMSPInstance,
|
||
|
lCloseMSPInstance,
|
||
|
|
||
|
//
|
||
|
// Funcs for TAPI 3.1
|
||
|
//
|
||
|
tSetEventMasksOrSubMasks,
|
||
|
tGetEventMasksOrSubMasks,
|
||
|
tSetPermissibleMasks,
|
||
|
tGetPermissibleMasks,
|
||
|
|
||
|
mGetDeviceFlags,
|
||
|
|
||
|
lGetCountryGroup,
|
||
|
|
||
|
lGetIDEx,
|
||
|
|
||
|
pGetIDEx,
|
||
|
|
||
|
//
|
||
|
// The following is always the last one in the list
|
||
|
//
|
||
|
|
||
|
xLastFunc
|
||
|
|
||
|
} FUNC_TYPE;
|
||
|
|
||
|
|
||
|
|
||
|
typedef struct _CLIENT_THREAD_INFO
|
||
|
{
|
||
|
LIST_ENTRY TlsList;
|
||
|
|
||
|
LPBYTE pBuf;
|
||
|
|
||
|
DWORD dwBufSize;
|
||
|
|
||
|
} CLIENT_THREAD_INFO, *PCLIENT_THREAD_INFO;
|
||
|
|
||
|
|
||
|
typedef struct _TAPI32_MSG
|
||
|
{
|
||
|
//
|
||
|
// The following union is used:
|
||
|
//
|
||
|
// 1. by requests from client to server to specify a function type
|
||
|
// 2. by acks from server to client to specify a return value
|
||
|
// 3. by async msgs from server to client to specify msg type
|
||
|
//
|
||
|
|
||
|
union
|
||
|
{
|
||
|
DWORD Req_Func;
|
||
|
|
||
|
DWORD Ack_ReturnValue;
|
||
|
|
||
|
DWORD Msg_Type;
|
||
|
|
||
|
} u;
|
||
|
|
||
|
|
||
|
//
|
||
|
// The following...
|
||
|
//
|
||
|
|
||
|
DWORD unsused;
|
||
|
|
||
|
|
||
|
//
|
||
|
// Function paramters
|
||
|
//
|
||
|
|
||
|
DWORD Params[MAX_TAPI_FUNC_ARGS];
|
||
|
|
||
|
|
||
|
} TAPI32_MSG, *PTAPI32_MSG;
|
||
|
|
||
|
|
||
|
typedef struct _ASYNCEVENTMSG
|
||
|
{
|
||
|
DWORD TotalSize;
|
||
|
DWORD InitContext;
|
||
|
DWORD fnPostProcessProcHandle;
|
||
|
DWORD hDevice;
|
||
|
|
||
|
DWORD Msg;
|
||
|
DWORD OpenContext;
|
||
|
|
||
|
union {
|
||
|
|
||
|
DWORD Param1;
|
||
|
};
|
||
|
|
||
|
union {
|
||
|
|
||
|
DWORD Param2;
|
||
|
};
|
||
|
|
||
|
union {
|
||
|
|
||
|
DWORD Param3;
|
||
|
};
|
||
|
|
||
|
union {
|
||
|
|
||
|
DWORD Param4;
|
||
|
};
|
||
|
|
||
|
} ASYNCEVENTMSG, *PASYNCEVENTMSG;
|
||
|
|
||
|
|
||
|
typedef void (PASCAL *POSTPROCESSPROC)(PASYNCEVENTMSG pMsg);
|
||
|
|
||
|
|
||
|
typedef struct _ASYNC_EVENT_PARAMS
|
||
|
{
|
||
|
DWORD hDevice;
|
||
|
DWORD dwMsg;
|
||
|
ULONG_PTR dwCallbackInstance;
|
||
|
ULONG_PTR dwParam1;
|
||
|
|
||
|
ULONG_PTR dwParam2;
|
||
|
ULONG_PTR dwParam3;
|
||
|
|
||
|
} ASYNC_EVENT_PARAMS, *PASYNC_EVENT_PARAMS;
|
||
|
|
||
|
|
||
|
typedef LONG (PASCAL *TUISPIPROC)();
|
||
|
|
||
|
|
||
|
typedef struct _UITHREADDATA
|
||
|
{
|
||
|
HTAPIDIALOGINSTANCE htDlgInst;
|
||
|
HINSTANCE hUIDll;
|
||
|
HANDLE hThread;
|
||
|
HANDLE hEvent;
|
||
|
|
||
|
LPVOID pParams;
|
||
|
DWORD dwSize;
|
||
|
TUISPIPROC pfnTUISPI_providerGenericDialog;
|
||
|
TUISPIPROC pfnTUISPI_providerGenericDialogData;
|
||
|
|
||
|
struct _UITHREADDATA *pPrev;
|
||
|
struct _UITHREADDATA *pNext;
|
||
|
|
||
|
} UITHREADDATA, *PUITHREADDATA;
|
||
|
|
||
|
|
||
|
typedef struct _PROXYREQUESTHEADER
|
||
|
{
|
||
|
DWORD dwKey;
|
||
|
|
||
|
DWORD dwInstance;
|
||
|
|
||
|
} PROXYREQUESTHEADER, *PPROXYREQUESTHEADER;
|
||
|
|
||
|
|
||
|
#if DBG
|
||
|
extern TCHAR gszDebug[];
|
||
|
#endif
|
||
|
extern const TCHAR gszCurrentLocation[];
|
||
|
extern const TCHAR gszNullString[];
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C"{
|
||
|
#endif
|
||
|
|
||
|
#if DBG
|
||
|
#define ClientAlloc( __size__ ) ClientAllocReal( __size__, __LINE__, __FILE__ )
|
||
|
|
||
|
LPVOID
|
||
|
WINAPI
|
||
|
ClientAllocReal(
|
||
|
DWORD dwSize,
|
||
|
DWORD dwLine,
|
||
|
PSTR pszFile
|
||
|
);
|
||
|
|
||
|
#else
|
||
|
#define ClientAlloc( __size__ ) ClientAllocReal( __size__ )
|
||
|
|
||
|
LPVOID
|
||
|
WINAPI
|
||
|
ClientAllocReal(
|
||
|
DWORD dwSize
|
||
|
);
|
||
|
|
||
|
#endif
|
||
|
|
||
|
SIZE_T
|
||
|
WINAPI
|
||
|
ClientSize(
|
||
|
LPVOID lp
|
||
|
);
|
||
|
|
||
|
void
|
||
|
WINAPI
|
||
|
ClientFree(
|
||
|
LPVOID lp
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
LONG
|
||
|
WINAPI
|
||
|
MarkLineEvent(
|
||
|
DWORD dwApiVersion,
|
||
|
DWORD ptLine,
|
||
|
DWORD ptLineClientToExclude,
|
||
|
DWORD dwMsg,
|
||
|
DWORD dwParam1,
|
||
|
DWORD dwParam2,
|
||
|
DWORD dwParam3
|
||
|
);
|
||
|
|
||
|
void ListNodePoolsInitialize(void);
|
||
|
void ListNodePoolsUninitialize(void);
|
||
|
|
||
|
extern BOOL gbDisableGetTranslateCapsHack;
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|