mirror of https://github.com/lianthony/NT4.0
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.
1072 lines
27 KiB
1072 lines
27 KiB
/*++ BUILD Version: 0000 // Increment this if a change has global effects
|
|
|
|
Copyright (c) 1995-1996 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
server.h
|
|
|
|
Abstract:
|
|
|
|
Header file for tapi server & client
|
|
|
|
Author:
|
|
|
|
Dan Knudson (DanKn) dd-Mmm-1995
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
|
|
#include "rmotsp.h"
|
|
|
|
|
|
#define INVAL_KEY ((DWORD) 'LVNI')
|
|
#define TCALL_KEY ((DWORD) 'LLAC')
|
|
#define TINCOMPLETECALL_KEY ((DWORD) 'LACI')
|
|
#define TZOMBIECALL_KEY ((DWORD) 'LACZ')
|
|
#define TCALLCLIENT_KEY ((DWORD) 'ILCC')
|
|
#define TINCOMPLETECALLCLIENT_KEY ((DWORD) 'LCCI')
|
|
#define TLINE_KEY ((DWORD) 'ENIL')
|
|
#define TLINECLIENT_KEY ((DWORD) 'ILCL')
|
|
#define TPHONE_KEY ((DWORD) 'NOHP')
|
|
#define TPHONECLIENT_KEY ((DWORD) 'ILCP')
|
|
#define TLINEAPP_KEY ((DWORD) 'PPAL')
|
|
#define TPHONEAPP_KEY ((DWORD) 'PPAP')
|
|
#define TCLIENT_KEY ((DWORD) 'TNLC')
|
|
#define TPROVIDER_KEY ((DWORD) 'VORP')
|
|
#define TASYNC_KEY ((DWORD) 'CYSA')
|
|
#define TDLGINST_KEY ((DWORD) 'GOLD')
|
|
#define TCONFLIST_KEY ((DWORD) 'FNOC')
|
|
|
|
#define INITIAL_EVENT_BUFFER_SIZE 1024
|
|
|
|
#define DEF_NUM_LOOKUP_ENTRIES 16
|
|
#define DEF_NUM_CONF_LIST_ENTRIES 4
|
|
#define DEF_NUM_PTR_LIST_ENTRIES 8
|
|
|
|
#define BOGUS_REQUEST_ID 0x7fffffff
|
|
|
|
#define DCF_SPIRETURNED 0x00000001
|
|
#define DCF_DRVCALLVALID 0x00000002
|
|
#define DCF_CREATEDINITIALMONITORS 0x00000004
|
|
#define DCF_INCOMINGCALL 0x00010000
|
|
|
|
#define SYNC_REQUESTS_ALL 0
|
|
#define SYNC_REQUESTS_PER_WIDGET 1
|
|
#define SYNC_REQUESTS_NONE 2
|
|
|
|
#define SP_NONE 0xffffffff
|
|
|
|
#define SP_LINEACCEPT 0
|
|
#define SP_LINEADDTOCONFERENCE 1
|
|
#define SP_LINEAGENTSPECIFIC 2
|
|
#define SP_LINEANSWER 3
|
|
#define SP_LINEBLINDTRANSFER 4
|
|
#define SP_LINECLOSE 5
|
|
#define SP_LINECLOSECALL 6
|
|
#define SP_LINECOMPLETECALL 7
|
|
#define SP_LINECOMPLETETRANSFER 8
|
|
#define SP_LINECONDITIONALMEDIADETECTION 9
|
|
#define SP_LINEDEVSPECIFIC 10
|
|
#define SP_LINEDEVSPECIFICFEATURE 11
|
|
#define SP_LINEDIAL 12
|
|
#define SP_LINEDROP 13
|
|
#define SP_LINEFORWARD 14
|
|
#define SP_LINEGATHERDIGITS 15
|
|
#define SP_LINEGENERATEDIGITS 16
|
|
#define SP_LINEGENERATETONE 17
|
|
#define SP_LINEGETADDRESSCAPS 18
|
|
#define SP_LINEGETADDRESSID 19
|
|
#define SP_LINEGETADDRESSSTATUS 20
|
|
#define SP_LINEGETAGENTACTIVITYLIST 21
|
|
#define SP_LINEGETAGENTCAPS 22
|
|
#define SP_LINEGETAGENTGROUPLIST 23
|
|
#define SP_LINEGETAGENTSTATUS 24
|
|
#define SP_LINEGETCALLADDRESSID 25
|
|
#define SP_LINEGETCALLINFO 26
|
|
#define SP_LINEGETCALLSTATUS 27
|
|
#define SP_LINEGETDEVCAPS 28
|
|
#define SP_LINEGETDEVCONFIG 29
|
|
#define SP_LINEGETEXTENSIONID 30
|
|
#define SP_LINEGETICON 31
|
|
#define SP_LINEGETID 32
|
|
#define SP_LINEGETLINEDEVSTATUS 33
|
|
#define SP_LINEGETNUMADDRESSIDS 34
|
|
#define SP_LINEHOLD 35
|
|
#define SP_LINEMAKECALL 36
|
|
#define SP_LINEMONITORDIGITS 37
|
|
#define SP_LINEMONITORMEDIA 38
|
|
#define SP_LINEMONITORTONES 39
|
|
#define SP_LINENEGOTIATEEXTVERSION 40
|
|
#define SP_LINENEGOTIATETSPIVERSION 41
|
|
#define SP_LINEOPEN 42
|
|
#define SP_LINEPARK 43
|
|
#define SP_LINEPICKUP 44
|
|
#define SP_LINEPREPAREADDTOCONFERENCE 45
|
|
#define SP_LINEREDIRECT 46
|
|
#define SP_LINERELEASEUSERUSERINFO 47
|
|
#define SP_LINEREMOVEFROMCONFERENCE 48
|
|
#define SP_LINESECURECALL 49
|
|
#define SP_LINESELECTEXTVERSION 50
|
|
#define SP_LINESENDUSERUSERINFO 51
|
|
#define SP_LINESETAGENTACTIVITY 52
|
|
#define SP_LINESETAGENTGROUP 53
|
|
#define SP_LINESETAGENTSTATE 54
|
|
#define SP_LINESETAPPSPECIFIC 55
|
|
#define SP_LINESETCALLDATA 56
|
|
#define SP_LINESETCALLPARAMS 57
|
|
#define SP_LINESETCALLQUALITYOFSERVICE 58
|
|
#define SP_LINESETCALLTREATMENT 59
|
|
#define SP_LINESETCURRENTLOCATION 60
|
|
#define SP_LINESETDEFAULTMEDIADETECTION 61
|
|
#define SP_LINESETDEVCONFIG 62
|
|
#define SP_LINESETLINEDEVSTATUS 63
|
|
#define SP_LINESETMEDIACONTROL 64
|
|
#define SP_LINESETMEDIAMODE 65
|
|
#define SP_LINESETSTATUSMESSAGES 66
|
|
#define SP_LINESETTERMINAL 67
|
|
#define SP_LINESETUPCONFERENCE 68
|
|
#define SP_LINESETUPTRANSFER 69
|
|
#define SP_LINESWAPHOLD 70
|
|
#define SP_LINEUNCOMPLETECALL 71
|
|
#define SP_LINEUNHOLD 72
|
|
#define SP_LINEUNPARK 73
|
|
#define SP_PHONECLOSE 74
|
|
#define SP_PHONEDEVSPECIFIC 75
|
|
#define SP_PHONEGETBUTTONINFO 76
|
|
#define SP_PHONEGETDATA 77
|
|
#define SP_PHONEGETDEVCAPS 78
|
|
#define SP_PHONEGETDISPLAY 79
|
|
#define SP_PHONEGETEXTENSIONID 80
|
|
#define SP_PHONEGETGAIN 81
|
|
#define SP_PHONEGETHOOKSWITCH 82
|
|
#define SP_PHONEGETICON 83
|
|
#define SP_PHONEGETID 84
|
|
#define SP_PHONEGETLAMP 85
|
|
#define SP_PHONEGETRING 86
|
|
#define SP_PHONEGETSTATUS 87
|
|
#define SP_PHONEGETVOLUME 88
|
|
#define SP_PHONENEGOTIATEEXTVERSION 89
|
|
#define SP_PHONENEGOTIATETSPIVERSION 90
|
|
#define SP_PHONEOPEN 91
|
|
#define SP_PHONESELECTEXTVERSION 92
|
|
#define SP_PHONESETBUTTONINFO 93
|
|
#define SP_PHONESETDATA 94
|
|
#define SP_PHONESETDISPLAY 95
|
|
#define SP_PHONESETGAIN 96
|
|
#define SP_PHONESETHOOKSWITCH 97
|
|
#define SP_PHONESETLAMP 98
|
|
#define SP_PHONESETRING 99
|
|
#define SP_PHONESETSTATUSMESSAGES 100
|
|
#define SP_PHONESETVOLUME 101
|
|
#define SP_PROVIDERCREATELINEDEVICE 102
|
|
#define SP_PROVIDERCREATEPHONEDEVICE 103
|
|
#define SP_PROVIDERENUMDEVICES 104
|
|
#define SP_PROVIDERFREEDIALOGINSTANCE 105
|
|
#define SP_PROVIDERGENERICDIALOGDATA 106
|
|
#define SP_PROVIDERINIT 107
|
|
#define SP_PROVIDERSHUTDOWN 108
|
|
#define SP_PROVIDERUIIDENTIFY 109
|
|
#define SP_LASTPROCNUMBER (SP_PROVIDERUIIDENTIFY + 1)
|
|
|
|
#define myexcept except(EXCEPTION_EXECUTE_HANDLER)
|
|
|
|
#define IsBadPtrKey(p,key) (((DWORD) p & 0x7) || (*((LPDWORD) p) != key) ? \
|
|
TRUE : FALSE)
|
|
|
|
|
|
typedef LONG (PASCAL *TSPIPROC)();
|
|
|
|
typedef struct _TPOINTERLIST
|
|
{
|
|
DWORD dwNumUsedEntries;
|
|
|
|
LPVOID aEntries[DEF_NUM_PTR_LIST_ENTRIES];
|
|
|
|
} TPOINTERLIST, *PTPOINTERLIST;
|
|
|
|
typedef struct _TPROVIDER
|
|
{
|
|
DWORD dwKey;
|
|
HANDLE hMutex;
|
|
HINSTANCE hDll;
|
|
DWORD dwTSPIOptions;
|
|
|
|
DWORD dwSPIVersion;
|
|
DWORD dwPermanentProviderID;
|
|
struct _TPROVIDER *pPrev;
|
|
struct _TPROVIDER *pNext;
|
|
|
|
TSPIPROC apfn[SP_LASTPROCNUMBER];
|
|
|
|
WCHAR szFileName[1];
|
|
|
|
} TPROVIDER, *PTPROVIDER;
|
|
|
|
|
|
typedef struct _TCALL
|
|
{
|
|
DWORD dwKey;
|
|
HANDLE hMutex;
|
|
LPVOID ptCallClients;
|
|
LPVOID ptLine;
|
|
|
|
PTPROVIDER ptProvider;
|
|
DWORD dwDrvCallFlags;
|
|
BOOL bCreatedInitialMonitors;
|
|
HDRVCALL hdCall;
|
|
|
|
DWORD dwCallInstance;
|
|
DWORD dwAddressID;
|
|
DWORD dwCallState;
|
|
DWORD dwCallStateMode;
|
|
|
|
DWORD dwNumOwners;
|
|
DWORD dwNumMonitors;
|
|
BOOL bAlertApps;
|
|
DWORD dwAppNameSize;
|
|
|
|
LPVOID pszAppName;
|
|
DWORD dwDisplayableAddressSize;
|
|
LPVOID pszDisplayableAddress;
|
|
DWORD dwCalledPartySize;
|
|
|
|
LPVOID pszCalledParty;
|
|
DWORD dwCommentSize;
|
|
LPVOID pszComment;
|
|
LPVOID pConfList;
|
|
|
|
struct _TCALL *pPrev;
|
|
struct _TCALL *pNext;
|
|
|
|
} TCALL, *PTCALL;
|
|
|
|
|
|
typedef struct _TCALLCLIENT
|
|
{
|
|
DWORD dwKey;
|
|
LPVOID ptClient;
|
|
LPVOID ptLineClient;
|
|
PTCALL ptCall;
|
|
|
|
HANDLE hRemoteCall;
|
|
DWORD dwPrivilege;
|
|
DWORD dwMonitorDigitModes;
|
|
DWORD dwMonitorMediaModes;
|
|
|
|
|
|
//
|
|
// The following field is used to determine whether we need to
|
|
// set or zero the LINE_CALLSTATE\dwParam3 parameter to indicate
|
|
// a privilege change to the app
|
|
//
|
|
|
|
BOOL bIndicatePrivilege;
|
|
struct _TCALLCLIENT *pPrevSametCall;
|
|
struct _TCALLCLIENT *pNextSametCall;
|
|
struct _TCALLCLIENT *pPrevSametLineClient;
|
|
|
|
struct _TCALLCLIENT *pNextSametLineClient;
|
|
|
|
} TCALLCLIENT, *PTCALLCLIENT;
|
|
|
|
|
|
typedef struct _TCONFERENCELIST
|
|
{
|
|
DWORD dwKey;
|
|
DWORD dwNumTotalEntries;
|
|
DWORD dwNumUsedEntries;
|
|
struct _TCONFERENCELIST *pNext;
|
|
|
|
PTCALL aptCalls[1];
|
|
|
|
} TCONFERENCELIST, *PTCONFERENCELIST;
|
|
|
|
|
|
typedef struct _TLINE
|
|
{
|
|
DWORD dwKey;
|
|
HANDLE hMutex;
|
|
LPVOID ptLineClients;
|
|
LPVOID apProxys[9];
|
|
|
|
PTPROVIDER ptProvider;
|
|
HDRVLINE hdLine;
|
|
DWORD dwDeviceID;
|
|
DWORD dwSPIVersion;
|
|
|
|
DWORD dwExtVersion;
|
|
DWORD dwExtVersionCount;
|
|
DWORD dwNumAddresses;
|
|
DWORD dwOpenMediaModes;
|
|
|
|
DWORD dwNumOpens;
|
|
DWORD dwUnionLineStates;
|
|
DWORD dwUnionAddressStates;
|
|
PTCALL ptCalls;
|
|
|
|
} TLINE, *PTLINE;
|
|
|
|
|
|
typedef struct _TLINECLIENT
|
|
{
|
|
DWORD dwKey;
|
|
LPVOID ptClient;
|
|
HANDLE hMutex;
|
|
LPVOID ptLineApp;
|
|
|
|
PTLINE ptLine;
|
|
DWORD dwAddressID;
|
|
PTCALLCLIENT ptCallClients;
|
|
DWORD hRemoteLine;
|
|
|
|
DWORD dwAPIVersion;
|
|
DWORD dwPrivileges;
|
|
DWORD dwMediaModes;
|
|
DWORD dwCallbackInstance;
|
|
|
|
DWORD dwLineStates;
|
|
DWORD dwAddressStates;
|
|
LPDWORD aNumRings;
|
|
DWORD dwExtVersion;
|
|
|
|
LPVOID pPendingProxyRequests;
|
|
struct _TLINECLIENT *pPrevSametLine;
|
|
struct _TLINECLIENT *pNextSametLine;
|
|
struct _TLINECLIENT *pPrevSametLineApp;
|
|
|
|
struct _TLINECLIENT *pNextSametLineApp;
|
|
|
|
} TLINECLIENT, *PTLINECLIENT;
|
|
|
|
|
|
typedef struct _TPHONE
|
|
{
|
|
DWORD dwKey;
|
|
HANDLE hMutex;
|
|
LPVOID ptPhoneClients;
|
|
PTPROVIDER ptProvider;
|
|
|
|
HDRVPHONE hdPhone;
|
|
DWORD dwDeviceID;
|
|
DWORD dwSPIVersion;
|
|
DWORD dwExtVersion;
|
|
|
|
DWORD dwExtVersionCount;
|
|
DWORD dwNumOwners;
|
|
DWORD dwNumMonitors;
|
|
DWORD dwUnionPhoneStates;
|
|
|
|
DWORD dwUnionButtonModes;
|
|
DWORD dwUnionButtonStates;
|
|
|
|
} TPHONE, *PTPHONE;
|
|
|
|
|
|
typedef struct _TPHONECLIENT
|
|
{
|
|
DWORD dwKey;
|
|
LPVOID ptClient;
|
|
HANDLE hMutex;
|
|
LPVOID ptPhoneApp;
|
|
|
|
PTPHONE ptPhone;
|
|
DWORD hRemotePhone;
|
|
DWORD dwAPIVersion;
|
|
DWORD dwExtVersion;
|
|
|
|
DWORD dwPrivilege;
|
|
DWORD dwCallbackInstance;
|
|
DWORD dwPhoneStates;
|
|
DWORD dwButtonModes;
|
|
|
|
DWORD dwButtonStates;
|
|
struct _TPHONECLIENT *pPrevSametPhone;
|
|
struct _TPHONECLIENT *pNextSametPhone;
|
|
struct _TPHONECLIENT *pPrevSametPhoneApp;
|
|
|
|
struct _TPHONECLIENT *pNextSametPhoneApp;
|
|
|
|
} TPHONECLIENT, *PTPHONECLIENT;
|
|
|
|
|
|
typedef struct _TLINEAPP
|
|
{
|
|
DWORD dwKey;
|
|
LPVOID ptClient;
|
|
HANDLE hMutex;
|
|
PTLINECLIENT ptLineClients;
|
|
|
|
LINECALLBACK lpfnCallback;
|
|
struct _TLINEAPP *pPrev;
|
|
struct _TLINEAPP *pNext;
|
|
DWORD dwAPIVersion;
|
|
|
|
DWORD bReqMediaCallRecipient;
|
|
LPVOID pRequestRecipient;
|
|
DWORD dwFriendlyNameSize;
|
|
WCHAR *pszFriendlyName;
|
|
|
|
DWORD dwModuleNameSize;
|
|
WCHAR *pszModuleName;
|
|
|
|
} TLINEAPP, *PTLINEAPP;
|
|
|
|
|
|
typedef struct _TPHONEAPP
|
|
{
|
|
DWORD dwKey;
|
|
LPVOID ptClient;
|
|
HANDLE hMutex;
|
|
PTPHONECLIENT ptPhoneClients;
|
|
|
|
PHONECALLBACK lpfnCallback;
|
|
struct _TPHONEAPP *pPrev;
|
|
struct _TPHONEAPP *pNext;
|
|
DWORD dwAPIVersion;
|
|
|
|
DWORD dwFriendlyNameSize;
|
|
WCHAR *pszFriendlyName;
|
|
DWORD dwModuleNameSize;
|
|
WCHAR *pszModuleName;
|
|
|
|
} TPHONEAPP, *PTPHONEAPP;
|
|
|
|
|
|
typedef struct _TAPIDIALOGINSTANCE
|
|
{
|
|
DWORD dwKey;
|
|
LPVOID ptClient;
|
|
DWORD dwPermanentProviderID;
|
|
HINSTANCE hTsp;
|
|
|
|
TSPIPROC pfnTSPI_providerGenericDialogData;
|
|
PTPROVIDER ptProvider;
|
|
HDRVDIALOGINSTANCE hdDlgInst;
|
|
WCHAR *pszProviderFilename;
|
|
|
|
DWORD bRemoveProvider;
|
|
struct _TAPIDIALOGINSTANCE *pPrev;
|
|
struct _TAPIDIALOGINSTANCE *pNext;
|
|
|
|
} TAPIDIALOGINSTANCE, *PTAPIDIALOGINSTANCE;
|
|
|
|
|
|
typedef struct _TCLIENT
|
|
{
|
|
DWORD dwKey;
|
|
HANDLE hProcess;
|
|
HANDLE hMutex;
|
|
DWORD dwUserNameSize;
|
|
|
|
WCHAR *pszUserName;
|
|
DWORD dwComputerNameSize;
|
|
WCHAR *pszComputerName;
|
|
PCONTEXT_HANDLE_TYPE2 phContext;
|
|
|
|
|
|
//
|
|
// Async event ring buffer fields
|
|
//
|
|
|
|
HANDLE hValidEventBufferDataEvent;
|
|
HANDLE hEventBufferMutex;
|
|
DWORD dwEventBufferTotalSize;
|
|
DWORD dwEventBufferUsedSize;
|
|
|
|
LPBYTE pEventBuffer;
|
|
LPBYTE pDataIn;
|
|
LPBYTE pDataOut;
|
|
|
|
|
|
//
|
|
// Lists of line apps and phone apps associated with this client
|
|
//
|
|
|
|
PTLINEAPP ptLineApps;
|
|
|
|
PTPHONEAPP ptPhoneApps;
|
|
|
|
|
|
//
|
|
// Current dialog instances on this client
|
|
//
|
|
|
|
PTAPIDIALOGINSTANCE pProviderXxxDlgInsts;
|
|
PTAPIDIALOGINSTANCE pGenericDlgInsts;
|
|
|
|
|
|
//
|
|
// Previous & next tClient in the global list
|
|
//
|
|
|
|
struct _TCLIENT *pPrev;
|
|
|
|
struct _TCLIENT *pNext;
|
|
|
|
} TCLIENT, *PTCLIENT;
|
|
|
|
|
|
typedef struct _TREQUESTRECIPIENT
|
|
{
|
|
PTLINEAPP ptLineApp;
|
|
DWORD dwRegistrationInstance;
|
|
struct _TREQUESTRECIPIENT *pPrev;
|
|
struct _TREQUESTRECIPIENT *pNext;
|
|
|
|
} TREQUESTRECIPIENT, *PTREQUESTRECIPIENT;
|
|
|
|
typedef void (*SRVPOSTPROCESSPROC)(LPVOID, LPVOID, LPVOID);
|
|
|
|
typedef struct _ASYNCREQUESTINFO
|
|
{
|
|
DWORD dwKey;
|
|
LPVOID pNext;
|
|
LONG lResult;
|
|
PTCLIENT ptClient;
|
|
|
|
SRVPOSTPROCESSPROC pfnPostProcess;
|
|
BOOL bLineFunc;
|
|
DWORD pInitData;
|
|
DWORD dwCallbackInst;
|
|
|
|
DWORD pfnClientPostProcessProc;
|
|
DWORD dwRequestID;
|
|
DWORD dwParam1;
|
|
DWORD dwParam2;
|
|
|
|
DWORD dwParam3;
|
|
DWORD dwParam4;
|
|
DWORD dwParam5;
|
|
|
|
} ASYNCREQUESTINFO, *PASYNCREQUESTINFO;
|
|
|
|
#define SP_LINE_EVENT 1
|
|
#define SP_COMPLETION_EVENT 2
|
|
#define SP_PHONE_EVENT 3
|
|
|
|
typedef struct _SPEVENT
|
|
{
|
|
DWORD dwType;
|
|
struct _SPEVENT *pNext;
|
|
|
|
union
|
|
{
|
|
HTAPILINE htLine;
|
|
HTAPIPHONE htPhone;
|
|
DWORD dwRequestID;
|
|
};
|
|
|
|
union
|
|
{
|
|
HTAPICALL htCall;
|
|
LONG lResult;
|
|
};
|
|
|
|
DWORD dwMsg;
|
|
|
|
DWORD dwParam1;
|
|
DWORD dwParam2;
|
|
DWORD dwParam3;
|
|
|
|
} SPEVENT, *PSPEVENT;
|
|
|
|
|
|
|
|
//
|
|
// The following XXXTUPLE types give us a quick easy way to retrieve
|
|
// the ptProvider and ptXxx associated with the widget (the widget ID
|
|
// is used as an index into a global array)
|
|
//
|
|
|
|
typedef struct _TLINELOOKUPENTRY
|
|
{
|
|
DWORD dwSPIVersion;
|
|
PTLINE ptLine;
|
|
HANDLE hMutex;
|
|
PTPROVIDER ptProvider;
|
|
|
|
DWORD bRemoved;
|
|
DWORD bRemote;
|
|
|
|
} TLINELOOKUPENTRY, *PTLINELOOKUPENTRY;
|
|
|
|
|
|
typedef struct _TLINELOOKUPTABLE
|
|
{
|
|
DWORD dwNumTotalEntries;
|
|
DWORD dwNumUsedEntries;
|
|
struct _TLINELOOKUPTABLE *pNext;
|
|
TLINELOOKUPENTRY aEntries[1];
|
|
|
|
} TLINELOOKUPTABLE, *PTLINELOOKUPTABLE;
|
|
|
|
|
|
typedef struct _TPHONELOOKUPENTRY
|
|
{
|
|
DWORD dwSPIVersion;
|
|
PTPHONE ptPhone;
|
|
HANDLE hMutex;
|
|
PTPROVIDER ptProvider;
|
|
|
|
DWORD bRemoved;
|
|
|
|
} TPHONELOOKUPENTRY, *PTPHONELOOKUPENTRY;
|
|
|
|
|
|
typedef struct _TPHONELOOKUPTABLE
|
|
{
|
|
DWORD dwNumTotalEntries;
|
|
DWORD dwNumUsedEntries;
|
|
struct _TPHONELOOKUPTABLE *pNext;
|
|
TPHONELOOKUPENTRY aEntries[1];
|
|
|
|
} TPHONELOOKUPTABLE, *PTPHONELOOKUPTABLE;
|
|
|
|
|
|
typedef struct _TREQUESTMAKECALL
|
|
{
|
|
LINEREQMAKECALLW LineReqMakeCall;
|
|
struct _TREQUESTMAKECALL *pNext;
|
|
|
|
} TREQUESTMAKECALL, *PTREQUESTMAKECALL;
|
|
|
|
|
|
typedef struct _TAPIGLOBALS
|
|
{
|
|
SERVICE_STATUS_HANDLE sshStatusHandle;
|
|
HICON hLineIcon;
|
|
HICON hPhoneIcon;
|
|
DWORD dwNumAllocs;
|
|
|
|
DWORD dwNumTotalAllocs;
|
|
DWORD dwAsyncRequestID;
|
|
HANDLE hProcess;
|
|
BOOL bReinit;
|
|
|
|
HANDLE hMutex;
|
|
HANDLE hAsyncRequestIDMutex;
|
|
PTCLIENT ptClients;
|
|
PTPROVIDER ptProviders;
|
|
|
|
DWORD dwNumLineInits;
|
|
DWORD dwNumLines;
|
|
PTLINELOOKUPTABLE pLineLookup;
|
|
DWORD dwNumPhoneInits;
|
|
|
|
DWORD dwNumPhones;
|
|
PTPHONELOOKUPTABLE pPhoneLookup;
|
|
PTREQUESTRECIPIENT pRequestRecipients;
|
|
PTREQUESTRECIPIENT pHighestPriorityRequestRecipient;
|
|
|
|
PTREQUESTMAKECALL pRequestMakeCallList;
|
|
PTREQUESTMAKECALL pRequestMakeCallListEnd;
|
|
WCHAR *apszPriorityList[24];
|
|
WCHAR *pszReqMakeCallPriList;
|
|
|
|
WCHAR *pszReqMediaCallPriList;
|
|
DWORD dwComputerNameSize;
|
|
WCHAR *pszComputerName;
|
|
|
|
} TAPIGLOBALS, *PTAPIGLOBALS;
|
|
|
|
|
|
typedef struct _CLIENTATTACH_PARAMS
|
|
{
|
|
OUT LONG lResult;
|
|
|
|
IN PTCLIENT _Unused_;
|
|
|
|
|
|
IN DWORD dwProcessID;
|
|
|
|
OUT DWORD hRpcClientInst;
|
|
|
|
OUT HANDLE hDetachEvent;
|
|
|
|
OUT HANDLE hAsyncEventsEvent;
|
|
|
|
} CLIENTATTACH_PARAMS, *PCLIENTATTACH_PARAMS;
|
|
|
|
|
|
typedef struct _GETEVENTS_PARAMS
|
|
{
|
|
OUT LONG lResult;
|
|
|
|
IN PTCLIENT ptClient;
|
|
|
|
|
|
IN DWORD dwTotalBufferSize;
|
|
|
|
OUT DWORD dwNeededBufferSize;
|
|
|
|
OUT DWORD dwUsedBufferSize;
|
|
|
|
} GETEVENTS_PARAMS, *PGETEVENTS_PARAMS;
|
|
|
|
|
|
typedef struct _GETUIDLLNAME_PARAMS
|
|
{
|
|
OUT LONG lResult;
|
|
|
|
IN PTCLIENT ptClient;
|
|
|
|
|
|
IN DWORD dwObjectID;
|
|
|
|
IN DWORD dwObjectType;
|
|
|
|
OUT DWORD dwUIDllNameOffset;
|
|
|
|
IN OUT DWORD dwUIDllNameSize;
|
|
|
|
|
|
//
|
|
// The following fields used only for providerConfig, -Install, & -Remove
|
|
//
|
|
|
|
IN DWORD dwProviderFilenameOffset;
|
|
|
|
IN DWORD bRemoveProvider;
|
|
|
|
OUT HTAPIDIALOGINSTANCE htDlgInst;
|
|
|
|
} GETUIDLLNAME_PARAMS, *PGETUIDLLNAME_PARAMS;
|
|
|
|
|
|
typedef struct _UIDLLCALLBACK_PARAMS
|
|
{
|
|
OUT LONG lResult;
|
|
|
|
IN PTCLIENT ptClient;
|
|
|
|
|
|
IN DWORD dwObjectID;
|
|
|
|
IN DWORD dwObjectType;
|
|
|
|
IN DWORD dwParamsInOffset;
|
|
|
|
IN DWORD dwParamsInSize;
|
|
|
|
OUT DWORD dwParamsOutOffset;
|
|
|
|
IN OUT DWORD dwParamsOutSize;
|
|
|
|
} UIDLLCALLBACK_PARAMS, *PUIDLLCALLBACK_PARAMS;
|
|
|
|
|
|
typedef struct _FREEDIALOGINSTANCE_PARAMS
|
|
{
|
|
OUT LONG lResult;
|
|
|
|
IN PTCLIENT ptClient;
|
|
|
|
|
|
IN HTAPIDIALOGINSTANCE htDlgInst;
|
|
|
|
IN LONG lUIDllResult;
|
|
|
|
} FREEDIALOGINSTANCE_PARAMS, *PFREEDIALOGINSTANCE_PARAMS;
|
|
|
|
|
|
typedef struct _PROXYREQUESTWRAPPER
|
|
{
|
|
ASYNCEVENTMSG AsyncEventMsg;
|
|
|
|
LINEPROXYREQUEST ProxyRequest;
|
|
|
|
} PROXYREQUESTWRAPPER, *PPROXYREQUESTWRAPPER;
|
|
|
|
|
|
#if DBG
|
|
|
|
#define DBGOUT(arg) DbgPrt arg
|
|
|
|
VOID
|
|
DbgPrt(
|
|
IN DWORD dwDbgLevel,
|
|
IN PUCHAR DbgMessage,
|
|
IN ...
|
|
);
|
|
|
|
#else
|
|
|
|
#define DBGOUT(arg)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
LPVOID
|
|
WINAPI
|
|
ServerAlloc(
|
|
DWORD dwSize
|
|
);
|
|
|
|
VOID
|
|
WINAPI
|
|
ServerFree(
|
|
LPVOID lp
|
|
);
|
|
|
|
HANDLE
|
|
MyCreateMutex(
|
|
void
|
|
);
|
|
|
|
BOOL
|
|
PASCAL
|
|
MyDuplicateHandle(
|
|
HANDLE hSource,
|
|
LPHANDLE phTarget
|
|
);
|
|
|
|
void
|
|
CALLBACK
|
|
CompletionProc(
|
|
PASYNCREQUESTINFO pAsyncRequestInfo,
|
|
LONG lResult
|
|
);
|
|
|
|
BOOL
|
|
WaitForMutex(
|
|
HANDLE hMutex,
|
|
HANDLE *phMutex,
|
|
BOOL *pbCloseMutex,
|
|
LPVOID pWidget,
|
|
DWORD dwKey,
|
|
DWORD dwTimeout
|
|
);
|
|
|
|
void
|
|
MyReleaseMutex(
|
|
HANDLE hMutex,
|
|
BOOL bCloseMutex
|
|
);
|
|
|
|
void
|
|
PASCAL
|
|
DestroytLineApp(
|
|
PTLINEAPP ptLineApp
|
|
);
|
|
|
|
void
|
|
DestroytPhoneApp(
|
|
PTPHONEAPP ptPhoneApp
|
|
);
|
|
|
|
LONG
|
|
ServerInit(
|
|
void
|
|
);
|
|
|
|
LONG
|
|
ServerShutdown(
|
|
void
|
|
);
|
|
|
|
void
|
|
WriteEventBuffer(
|
|
PTCLIENT ptClient,
|
|
PASYNCEVENTMSG pMsg
|
|
);
|
|
|
|
void
|
|
PASCAL
|
|
QueueSPEvent(
|
|
PSPEVENT pSPEvent
|
|
);
|
|
|
|
|
|
#if DBG
|
|
|
|
#define SP_FUNC_SYNC 0
|
|
#define SP_FUNC_ASYNC 1
|
|
|
|
LONG
|
|
WINAPI
|
|
CallSP1(
|
|
TSPIPROC pfn,
|
|
LPCSTR lpszFuncName,
|
|
DWORD dwFlags,
|
|
DWORD dwArg1
|
|
);
|
|
|
|
LONG
|
|
WINAPI
|
|
CallSP2(
|
|
TSPIPROC pfn,
|
|
LPCSTR lpszFuncName,
|
|
DWORD dwFlags,
|
|
DWORD dwArg1,
|
|
DWORD dwArg2
|
|
);
|
|
|
|
LONG
|
|
WINAPI
|
|
CallSP3(
|
|
TSPIPROC pfn,
|
|
LPCSTR lpszFuncName,
|
|
DWORD dwFlags,
|
|
DWORD dwArg1,
|
|
DWORD dwArg2,
|
|
DWORD dwArg3
|
|
);
|
|
|
|
LONG
|
|
WINAPI
|
|
CallSP4(
|
|
TSPIPROC pfn,
|
|
LPCSTR lpszFuncName,
|
|
DWORD dwFlags,
|
|
DWORD dwArg1,
|
|
DWORD dwArg2,
|
|
DWORD dwArg3,
|
|
DWORD dwArg4
|
|
);
|
|
|
|
LONG
|
|
WINAPI
|
|
CallSP5(
|
|
TSPIPROC pfn,
|
|
LPCSTR lpszFuncName,
|
|
DWORD dwFlags,
|
|
DWORD dwArg1,
|
|
DWORD dwArg2,
|
|
DWORD dwArg3,
|
|
DWORD dwArg4,
|
|
DWORD dwArg5
|
|
);
|
|
|
|
LONG
|
|
WINAPI
|
|
CallSP6(
|
|
TSPIPROC pfn,
|
|
LPCSTR lpszFuncName,
|
|
DWORD dwFlags,
|
|
DWORD dwArg1,
|
|
DWORD dwArg2,
|
|
DWORD dwArg3,
|
|
DWORD dwArg4,
|
|
DWORD dwArg5,
|
|
DWORD dwArg6
|
|
);
|
|
|
|
LONG
|
|
WINAPI
|
|
CallSP7(
|
|
TSPIPROC pfn,
|
|
LPCSTR lpszFuncName,
|
|
DWORD dwFlags,
|
|
DWORD dwArg1,
|
|
DWORD dwArg2,
|
|
DWORD dwArg3,
|
|
DWORD dwArg4,
|
|
DWORD dwArg5,
|
|
DWORD dwArg6,
|
|
DWORD dwArg7
|
|
);
|
|
|
|
LONG
|
|
WINAPI
|
|
CallSP8(
|
|
TSPIPROC pfn,
|
|
LPCSTR lpszFuncName,
|
|
DWORD dwFlags,
|
|
DWORD dwArg1,
|
|
DWORD dwArg2,
|
|
DWORD dwArg3,
|
|
DWORD dwArg4,
|
|
DWORD dwArg5,
|
|
DWORD dwArg6,
|
|
DWORD dwArg7,
|
|
DWORD dwArg8
|
|
);
|
|
|
|
LONG
|
|
WINAPI
|
|
CallSP9(
|
|
TSPIPROC pfn,
|
|
LPCSTR lpszFuncName,
|
|
DWORD dwFlags,
|
|
DWORD dwArg1,
|
|
DWORD dwArg2,
|
|
DWORD dwArg3,
|
|
DWORD dwArg4,
|
|
DWORD dwArg5,
|
|
DWORD dwArg6,
|
|
DWORD dwArg7,
|
|
DWORD dwArg8,
|
|
DWORD dwArg9
|
|
);
|
|
|
|
LONG
|
|
WINAPI
|
|
CallSP12(
|
|
TSPIPROC pfn,
|
|
LPCSTR lpszFuncName,
|
|
DWORD dwFlags,
|
|
DWORD dwArg1,
|
|
DWORD dwArg2,
|
|
DWORD dwArg3,
|
|
DWORD dwArg4,
|
|
DWORD dwArg5,
|
|
DWORD dwArg6,
|
|
DWORD dwArg7,
|
|
DWORD dwArg8,
|
|
DWORD dwArg9,
|
|
DWORD dwArg10,
|
|
DWORD dwArg11,
|
|
DWORD dwArg12
|
|
);
|
|
|
|
#else
|
|
|
|
#define CallSP1(pfn,nm,fl,a1) ((*pfn)(a1))
|
|
#define CallSP2(pfn,nm,fl,a1,a2) ((*pfn)(a1,a2))
|
|
#define CallSP3(pfn,nm,fl,a1,a2,a3) ((*pfn)(a1,a2,a3))
|
|
#define CallSP4(pfn,nm,fl,a1,a2,a3,a4) ((*pfn)(a1,a2,a3,a4))
|
|
#define CallSP5(pfn,nm,fl,a1,a2,a3,a4,a5) ((*pfn)(a1,a2,a3,a4,a5))
|
|
#define CallSP6(pfn,nm,fl,a1,a2,a3,a4,a5,a6) ((*pfn)(a1,a2,a3,a4,a5,a6))
|
|
#define CallSP7(pfn,nm,fl,a1,a2,a3,a4,a5,a6,a7) ((*pfn)(a1,a2,a3,a4,a5,a6,a7))
|
|
#define CallSP8(pfn,nm,fl,a1,a2,a3,a4,a5,a6,a7,a8) \
|
|
((*pfn)(a1,a2,a3,a4,a5,a6,a7,a8))
|
|
#define CallSP9(pfn,nm,fl,a1,a2,a3,a4,a5,a6,a7,a8,a9) \
|
|
((*pfn)(a1,a2,a3,a4,a5,a6,a7,a8,a9))
|
|
#define CallSP12(pfn,nm,fl,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) \
|
|
((*pfn)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12))
|
|
|
|
#endif
|
|
|
|
|
|
#if DBG
|
|
|
|
BOOL
|
|
IsBadSizeOffset(
|
|
DWORD dwTotalSize,
|
|
DWORD dwFixedSize,
|
|
DWORD dwXxxSize,
|
|
DWORD dwXxxOffset,
|
|
char *pszCallingFunc,
|
|
char *pszFieldName
|
|
);
|
|
|
|
#define ISBADSIZEOFFSET(a1,a2,a3,a4,a5,a6) IsBadSizeOffset(a1,a2,a3,a4,a5,a6)
|
|
|
|
#else
|
|
|
|
BOOL
|
|
IsBadSizeOffset(
|
|
DWORD dwTotalSize,
|
|
DWORD dwFixedSize,
|
|
DWORD dwXxxSize,
|
|
DWORD dwXxxOffset
|
|
);
|
|
|
|
#define ISBADSIZEOFFSET(a1,a2,a3,a4,a5,a6) IsBadSizeOffset(a1,a2,a3,a4)
|
|
|
|
#endif
|