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.
6251 lines
149 KiB
6251 lines
149 KiB
#pragma warning(disable: 4087)
|
|
|
|
#define STRICT
|
|
#define UNICODE
|
|
|
|
#include <windows.h>
|
|
#include <windowsx.h>
|
|
|
|
#ifndef WIN32
|
|
#define TAPI_CURRENT_VERSION 0x00010004
|
|
#endif
|
|
|
|
#include <tapi.h>
|
|
#include <tspi.h>
|
|
|
|
#include "tsp3216.h"
|
|
|
|
#include "Repeater.h"
|
|
#include "logger.h"
|
|
#include "debug.h"
|
|
|
|
#ifndef WIN32
|
|
#define TCHAR char
|
|
#define TEXT(string) string
|
|
#define LPCWSTR LPCSTR
|
|
#endif
|
|
|
|
#ifdef WIN32
|
|
extern CRITICAL_SECTION gcsLogging;
|
|
extern CRITICAL_SECTION gcsID;
|
|
#endif
|
|
|
|
#define TSPAPI PASCAL
|
|
typedef LONG (TSPAPI* TSPAPIPROC)(void);
|
|
|
|
#if DBG
|
|
#define RepeaterDebugString(_x_) DbgPrt _x_
|
|
#else
|
|
#define RepeaterDebugString(_x_)
|
|
#endif
|
|
|
|
// globals
|
|
|
|
HINSTANCE ghThisInst;
|
|
BOOL gfTerminateNow = FALSE;
|
|
BOOL gbStarted = FALSE;
|
|
DWORD dwPermanentProvider;
|
|
DWORD dwNumLines;
|
|
DWORD dwNumPhones;
|
|
|
|
#ifdef WIN32
|
|
DWORD gdwLoggingThreadID;
|
|
HANDLE ghLoggingThread;
|
|
#endif
|
|
|
|
#if (TAPI_CURRENT_VERSION >= 0x00020000)
|
|
HDRVDIALOGINSTANCE gDlgInst;
|
|
#endif
|
|
|
|
//////////////////////////////////////////////////////
|
|
HINSTANCE hProvider = NULL;
|
|
TSPAPIPROC FAR * lpfnProcAddress = NULL;
|
|
|
|
#ifdef WIN32
|
|
#define MYALLOC(x,y) ((x) = GlobalAlloc(GPTR, (y)))
|
|
#define MYFREE(x) GlobalFree(x)
|
|
#else
|
|
#define MYALLOC(x,y) ((x) = (LPVOID)MAKELONG(0, GlobalAlloc(GPTR, (y))))
|
|
#define MYFREE(x) (GlobalFree((HGLOBAL)HIWORD(x)))
|
|
|
|
#endif
|
|
|
|
|
|
LINEEVENT glpLineEventProc32;
|
|
PHONEEVENT glpPhoneEventProc32;
|
|
|
|
ASYNC_COMPLETION glpAsyncCompletionProc32 = NULL;
|
|
|
|
void InitLogging();
|
|
|
|
#ifndef WIN32
|
|
const char far szIniFile[] = "telephon.INI";
|
|
#endif
|
|
|
|
|
|
#define BOGUS_REQUEST_ID (0xfffffffd)
|
|
|
|
#define NORMALCHUNK sizeof(PREHEADER) + sizeof(POSTSTRUCT)
|
|
|
|
// all tspi function names
|
|
// since all functions are exported by name
|
|
char *gaszTSPIFuncNames[] =
|
|
{
|
|
"TSPI_lineAccept",
|
|
"TSPI_lineAddToConference",
|
|
"TSPI_lineAgentSpecific",
|
|
"TSPI_lineAnswer",
|
|
"TSPI_lineBlindTransfer",
|
|
"TSPI_lineClose",
|
|
"TSPI_lineCloseCall",
|
|
"TSPI_lineCompleteCall",
|
|
"TSPI_lineCompleteTransfer",
|
|
"TSPI_lineConditionalMediaDetection",
|
|
"TSPI_lineDevSpecific",
|
|
"TSPI_lineDevSpecificFeature",
|
|
"TSPI_lineDial",
|
|
"TSPI_lineDrop",
|
|
"TSPI_lineForward",
|
|
"TSPI_lineGatherDigits",
|
|
"TSPI_lineGenerateDigits",
|
|
"TSPI_lineGenerateTone",
|
|
"TSPI_lineGetAddressCaps",
|
|
"TSPI_lineGetAddressID",
|
|
"TSPI_lineGetAddressStatus",
|
|
"TSPI_lineGetAgentActivityList",
|
|
"TSPI_lineGetAgentCaps",
|
|
"TSPI_lineGetAgentGroupList",
|
|
"TSPI_lineGetAgentStatus",
|
|
"TSPI_lineGetCallAddressID",
|
|
"TSPI_lineGetCallInfo",
|
|
"TSPI_lineGetCallStatus",
|
|
"TSPI_lineGetDevCaps",
|
|
"TSPI_lineGetDevConfig",
|
|
"TSPI_lineGetExtensionID",
|
|
"TSPI_lineGetIcon",
|
|
"TSPI_lineGetID",
|
|
"TSPI_lineGetLineDevStatus",
|
|
"TSPI_lineGetNumAddressIDs",
|
|
"TSPI_lineHold",
|
|
"TSPI_lineMakeCall",
|
|
"TSPI_lineMonitorDigits",
|
|
"TSPI_lineMonitorMedia",
|
|
"TSPI_lineMonitorTones",
|
|
"TSPI_lineNegotiateExtVersion",
|
|
"TSPI_lineNegotiateTSPIVersion",
|
|
"TSPI_lineOpen",
|
|
"TSPI_linePark",
|
|
"TSPI_linePickup",
|
|
"TSPI_linePrepareAddToConference",
|
|
"TSPI_lineRedirect",
|
|
"TSPI_lineReleaseUserUserInfo",
|
|
"TSPI_lineRemoveFromConference",
|
|
"TSPI_lineSecureCall",
|
|
"TSPI_lineSelectExtVersion",
|
|
"TSPI_lineSendUserUserInfo",
|
|
"TSPI_lineSetAgentActivity",
|
|
"TSPI_lineSetAgentGroup",
|
|
"TSPI_lineSetAgentState",
|
|
"TSPI_lineSetAppSpecific",
|
|
"TSPI_lineSetCallData",
|
|
"TSPI_lineSetCallParams",
|
|
"TSPI_lineSetCallQualityOfService",
|
|
"TSPI_lineSetCallTreatment",
|
|
"TSPI_lineSetCurrentLocation",
|
|
"TSPI_lineSetDefaultMediaDetection",
|
|
"TSPI_lineSetDevConfig",
|
|
"TSPI_lineSetLineDevStatus",
|
|
"TSPI_lineSetMediaControl",
|
|
"TSPI_lineSetMediaMode",
|
|
"TSPI_lineSetStatusMessages",
|
|
"TSPI_lineSetTerminal",
|
|
"TSPI_lineSetupConference",
|
|
"TSPI_lineSetupTransfer",
|
|
"TSPI_lineSwapHold",
|
|
"TSPI_lineUncompleteCall",
|
|
"TSPI_lineUnhold",
|
|
"TSPI_lineUnpark",
|
|
"TSPI_phoneClose",
|
|
"TSPI_phoneDevSpecific",
|
|
"TSPI_phoneGetButtonInfo",
|
|
"TSPI_phoneGetData",
|
|
"TSPI_phoneGetDevCaps",
|
|
"TSPI_phoneGetDisplay",
|
|
"TSPI_phoneGetExtensionID",
|
|
"TSPI_phoneGetGain",
|
|
"TSPI_phoneGetHookSwitch",
|
|
"TSPI_phoneGetIcon",
|
|
"TSPI_phoneGetID",
|
|
"TSPI_phoneGetLamp",
|
|
"TSPI_phoneGetRing",
|
|
"TSPI_phoneGetStatus",
|
|
"TSPI_phoneGetVolume",
|
|
"TSPI_phoneNegotiateExtVersion",
|
|
"TSPI_phoneNegotiateTSPIVersion",
|
|
"TSPI_phoneOpen",
|
|
"TSPI_phoneSelectExtVersion",
|
|
"TSPI_phoneSetButtonInfo",
|
|
"TSPI_phoneSetData",
|
|
"TSPI_phoneSetDisplay",
|
|
"TSPI_phoneSetGain",
|
|
"TSPI_phoneSetHookSwitch",
|
|
"TSPI_phoneSetLamp",
|
|
"TSPI_phoneSetRing",
|
|
"TSPI_phoneSetStatusMessages",
|
|
"TSPI_phoneSetVolume",
|
|
"TSPI_providerCreateLineDevice",
|
|
"TSPI_providerCreatePhoneDevice",
|
|
"TSPI_providerEnumDevices",
|
|
"TSPI_providerFreeDialogInstance",
|
|
"TSPI_providerGenericDialogData",
|
|
"TSPI_providerInit",
|
|
"TSPI_providerShutdown",
|
|
"TSPI_providerUIIdentify",
|
|
"TSPI_lineConfigDialog",
|
|
"TSPI_lineConfigDialogEdit",
|
|
"TSPI_phoneConfigDialog",
|
|
"TSPI_providerConfig"
|
|
"TSPI_lineDropOnClose",
|
|
"TSPI_lineDropNoOwner",
|
|
NULL
|
|
};
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_LineBlank1(
|
|
DWORD dwBlank1
|
|
)
|
|
{
|
|
RepeaterDebugString((2, "Entering/leaving TSPI_LineBlank1 - lResult=LINEERR_OPERATIONUNAVAIL"));
|
|
return LINEERR_OPERATIONUNAVAIL;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_LineBlank2(
|
|
DWORD dwBlank1,
|
|
DWORD dwBlank2
|
|
)
|
|
{
|
|
RepeaterDebugString((2, "Entering/leaving TSPI_LineBlank2 - lResult=LINEERR_OPERATIONUNAVAIL"));
|
|
return LINEERR_OPERATIONUNAVAIL;
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_LineBlank3(
|
|
DWORD dwBlank1,
|
|
DWORD dwBlank2,
|
|
DWORD dwBlank3
|
|
)
|
|
{
|
|
RepeaterDebugString((2, "Entering/leaving TSPI_LineBlank3 - lResult=LINEERR_OPERATIONUNAVAIL"));
|
|
return LINEERR_OPERATIONUNAVAIL;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_LineBlank4(
|
|
DWORD dwBlank1,
|
|
DWORD dwBlank2,
|
|
DWORD dwBlank3,
|
|
DWORD dwBlank4
|
|
)
|
|
{
|
|
RepeaterDebugString((2, "Entering/leaving TSPI_LineBlank4 - lResult=LINEERR_OPERATIONUNAVAIL"));
|
|
return LINEERR_OPERATIONUNAVAIL;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_LineBlank5(
|
|
DWORD dwBlank1,
|
|
DWORD dwBlank2,
|
|
DWORD dwBlank3,
|
|
DWORD dwBlank4,
|
|
DWORD dwBlank5
|
|
)
|
|
{
|
|
RepeaterDebugString((2, "Entering/leaving TSPI_LineBlank5 - lResult=LINEERR_OPERATIONUNAVAIL"));
|
|
return LINEERR_OPERATIONUNAVAIL;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_LineBlank6(
|
|
DWORD dwBlank1,
|
|
DWORD dwBlank2,
|
|
DWORD dwBlank3,
|
|
DWORD dwBlank4,
|
|
DWORD dwBlank5,
|
|
DWORD dwBlank6
|
|
)
|
|
{
|
|
RepeaterDebugString((2, "Entering/leaving TSPI_LineBlank6 - lResult=LINEERR_OPERATIONUNAVAIL"));
|
|
return LINEERR_OPERATIONUNAVAIL;
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_LineBlank7(
|
|
DWORD dwBlank1,
|
|
DWORD dwBlank2,
|
|
DWORD dwBlank3,
|
|
DWORD dwBlank4,
|
|
DWORD dwBlank5,
|
|
DWORD dwBlank6,
|
|
DWORD dwBlank7
|
|
)
|
|
{
|
|
RepeaterDebugString((2, "Entering/leaving TSPI_LineBlank7 - lResult=LINEERR_OPERATIONUNAVAIL"));
|
|
return LINEERR_OPERATIONUNAVAIL;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_LineBlank8(
|
|
DWORD dwBlank1,
|
|
DWORD dwBlank2,
|
|
DWORD dwBlank3,
|
|
DWORD dwBlank4,
|
|
DWORD dwBlank5,
|
|
DWORD dwBlank6,
|
|
DWORD dwBlank7,
|
|
DWORD dwBlank8
|
|
)
|
|
{
|
|
RepeaterDebugString((2, "Entering/leaving TSPI_LineBlank8 - lResult=LINEERR_OPERATIONUNAVAIL"));
|
|
return LINEERR_OPERATIONUNAVAIL;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_LineBlank9(
|
|
DWORD dwBlank1,
|
|
DWORD dwBlank2,
|
|
DWORD dwBlank3,
|
|
DWORD dwBlank4,
|
|
DWORD dwBlank5,
|
|
DWORD dwBlank6,
|
|
DWORD dwBlank7,
|
|
DWORD dwBlank8,
|
|
DWORD dwBlank9
|
|
)
|
|
{
|
|
RepeaterDebugString((2, "Entering/leaving TSPI_LineBlank9 - lResult=LINEERR_OPERATIONUNAVAIL"));
|
|
return LINEERR_OPERATIONUNAVAIL;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_LineBlank10(
|
|
DWORD dwBlank1,
|
|
DWORD dwBlank2,
|
|
DWORD dwBlank3,
|
|
DWORD dwBlank4,
|
|
DWORD dwBlank5,
|
|
DWORD dwBlank6,
|
|
DWORD dwBlank7,
|
|
DWORD dwBlank8,
|
|
DWORD dwBlank9,
|
|
DWORD dwBlank10
|
|
)
|
|
{
|
|
RepeaterDebugString((2, "Entering/leaving TSPI_LineBlank10 - lResult=LINEERR_OPERATIONUNAVAIL"));
|
|
return LINEERR_OPERATIONUNAVAIL;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_LineBlank11(
|
|
DWORD dwBlank1,
|
|
DWORD dwBlank2,
|
|
DWORD dwBlank3,
|
|
DWORD dwBlank4,
|
|
DWORD dwBlank5,
|
|
DWORD dwBlank6,
|
|
DWORD dwBlank7,
|
|
DWORD dwBlank8,
|
|
DWORD dwBlank9,
|
|
DWORD dwBlank10,
|
|
DWORD dwBlank11
|
|
)
|
|
{
|
|
RepeaterDebugString((2, "Entering/leaving TSPI_LineBlank11 - lResult=LINEERR_OPERATIONUNAVAIL"));
|
|
return LINEERR_OPERATIONUNAVAIL;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_LineBlank12(
|
|
DWORD dwBlank1,
|
|
DWORD dwBlank2,
|
|
DWORD dwBlank3,
|
|
DWORD dwBlank4,
|
|
DWORD dwBlank5,
|
|
DWORD dwBlank6,
|
|
DWORD dwBlank7,
|
|
DWORD dwBlank8,
|
|
DWORD dwBlank9,
|
|
DWORD dwBlank10,
|
|
DWORD dwBlank11,
|
|
DWORD dwBlank12
|
|
)
|
|
{
|
|
RepeaterDebugString((2, "Entering/leaving TSPI_LineBlank12 - lResult=LINEERR_OPERATIONUNAVAIL"));
|
|
return LINEERR_OPERATIONUNAVAIL;
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_PhoneBlank1(
|
|
DWORD dwBlank1
|
|
)
|
|
{
|
|
RepeaterDebugString((2, "Entering/leaving TSPI_PhoneBlank1 - lResult=PHONEERR_OPERATIONUNAVAIL"));
|
|
return PHONEERR_OPERATIONUNAVAIL;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_PhoneBlank2(
|
|
DWORD dwBlank1,
|
|
DWORD dwBlank2
|
|
)
|
|
{
|
|
RepeaterDebugString((2, "Entering/leaving TSPI_PhoneBlank2 - lResult=PHONEERR_OPERATIONUNAVAIL"));
|
|
return PHONEERR_OPERATIONUNAVAIL;
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_PhoneBlank3(
|
|
DWORD dwBlank1,
|
|
DWORD dwBlank2,
|
|
DWORD dwBlank3
|
|
)
|
|
{
|
|
RepeaterDebugString((2, "Entering/leaving TSPI_PhoneBlank3 - lResult=PHONEERR_OPERATIONUNAVAIL"));
|
|
return PHONEERR_OPERATIONUNAVAIL;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_PhoneBlank4(
|
|
DWORD dwBlank1,
|
|
DWORD dwBlank2,
|
|
DWORD dwBlank3,
|
|
DWORD dwBlank4
|
|
)
|
|
{
|
|
RepeaterDebugString((2, "Entering/leaving TSPI_PhoneBlank4 - lResult=PHONEERR_OPERATIONUNAVAIL"));
|
|
return PHONEERR_OPERATIONUNAVAIL;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_PhoneBlank5(
|
|
DWORD dwBlank1,
|
|
DWORD dwBlank2,
|
|
DWORD dwBlank3,
|
|
DWORD dwBlank4,
|
|
DWORD dwBlank5
|
|
)
|
|
{
|
|
RepeaterDebugString((2, "Entering/leaving TSPI_PhoneBlank5 - lResult=PHONEERR_OPERATIONUNAVAIL"));
|
|
return PHONEERR_OPERATIONUNAVAIL;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_PhoneBlank6(
|
|
DWORD dwBlank1,
|
|
DWORD dwBlank2,
|
|
DWORD dwBlank3,
|
|
DWORD dwBlank4,
|
|
DWORD dwBlank5,
|
|
DWORD dwBlank6
|
|
)
|
|
{
|
|
RepeaterDebugString((2, "Entering/leaving TSPI_PhoneBlank6 - lResult=PHONEERR_OPERATIONUNAVAIL"));
|
|
return PHONEERR_OPERATIONUNAVAIL;
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_PhoneBlank7(
|
|
DWORD dwBlank1,
|
|
DWORD dwBlank2,
|
|
DWORD dwBlank3,
|
|
DWORD dwBlank4,
|
|
DWORD dwBlank5,
|
|
DWORD dwBlank6,
|
|
DWORD dwBlank7
|
|
)
|
|
{
|
|
RepeaterDebugString((2, "Entering/leaving TSPI_PhoneBlank7 - lResult=PHONEERR_OPERATIONUNAVAIL"));
|
|
return PHONEERR_OPERATIONUNAVAIL;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_PhoneBlank8(
|
|
DWORD dwBlank1,
|
|
DWORD dwBlank2,
|
|
DWORD dwBlank3,
|
|
DWORD dwBlank4,
|
|
DWORD dwBlank5,
|
|
DWORD dwBlank6,
|
|
DWORD dwBlank7,
|
|
DWORD dwBlank8
|
|
)
|
|
{
|
|
RepeaterDebugString((2, "Entering/leaving TSPI_PhoneBlank8 - lResult=PHONEERR_OPERATIONUNAVAIL"));
|
|
return PHONEERR_OPERATIONUNAVAIL;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_PhoneBlank9(
|
|
DWORD dwBlank1,
|
|
DWORD dwBlank2,
|
|
DWORD dwBlank3,
|
|
DWORD dwBlank4,
|
|
DWORD dwBlank5,
|
|
DWORD dwBlank6,
|
|
DWORD dwBlank7,
|
|
DWORD dwBlank8,
|
|
DWORD dwBlank9
|
|
)
|
|
{
|
|
RepeaterDebugString((2, "Entering/leaving TSPI_PhoneBlank9 - lResult=PHONEERR_OPERATIONUNAVAIL"));
|
|
return PHONEERR_OPERATIONUNAVAIL;
|
|
}
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
// function definitions
|
|
|
|
#ifdef DEBUG
|
|
VOID RepeaterOutputDebug(int level, LPSTR errString)
|
|
{
|
|
char outString[1024];
|
|
|
|
// if(level <= ???)
|
|
{
|
|
wsprintf(outString, "Repeater:(%d) %s\r\n", level, errString);
|
|
OutputDebugString(outString);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
VOID
|
|
InitializeSPs(VOID);
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
void StartMeUp( void )
|
|
{
|
|
|
|
gbStarted = TRUE;
|
|
|
|
MYALLOC(lpfnProcAddress, sizeof(gaszTSPIFuncNames)/sizeof(gaszTSPIFuncNames[0]) * sizeof(TSPAPIPROC));
|
|
|
|
#ifdef WIN32
|
|
//
|
|
// Kick off the logging thread
|
|
//
|
|
InitLogging();
|
|
|
|
DBGOUT((3, "Entering StartMeUp"));
|
|
|
|
ghLoggingThread = CreateThread(
|
|
NULL,
|
|
0,
|
|
LoggingThread,
|
|
NULL,
|
|
0,
|
|
&gdwLoggingThreadID
|
|
);
|
|
#else
|
|
InitLogging();
|
|
#endif
|
|
|
|
InitializeSPs();
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
VOID
|
|
InitializeSPs(VOID)
|
|
{
|
|
TCHAR LibFileName[MAXBUFSIZE];
|
|
TCHAR szBuffer[MAXBUFSIZE];
|
|
#ifdef WIN32
|
|
HKEY hKey;
|
|
DWORD dwSize, dwType;
|
|
#endif
|
|
|
|
// under the telephony key, there should be a repeater key,
|
|
// that is exactly like the providers key. the repeater key
|
|
// should list the provider to actually be used. the provider
|
|
// key should list repeater as the only sp.
|
|
|
|
#ifdef WIN32
|
|
RegOpenKeyEx(HKEY_LOCAL_MACHINE,
|
|
TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Telephony\\Repeater"),
|
|
0,
|
|
KEY_QUERY_VALUE,
|
|
&hKey);
|
|
#endif
|
|
|
|
#ifdef WIN32
|
|
dwSize = MAXBUFSIZE;
|
|
dwType = REG_SZ;
|
|
RegQueryValueEx(hKey,
|
|
TEXT("ProviderFilename0"),
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)LibFileName,
|
|
&dwSize);
|
|
#else
|
|
GetPrivateProfileString(TEXT("Repeater"),
|
|
TEXT("ProviderFilename0"),
|
|
TEXT(""),
|
|
LibFileName,
|
|
MAXBUFSIZE,
|
|
szIniFile);
|
|
|
|
#endif
|
|
|
|
DBGOUT((1, "Loading provider"));
|
|
|
|
hProvider = LoadLibrary(LibFileName);
|
|
|
|
if ( hProvider )
|
|
{
|
|
DBGOUT((1, "LoadLibrary succeeded"));
|
|
|
|
#ifdef WIN32
|
|
|
|
dwSize = sizeof(DWORD);
|
|
dwType = REG_DWORD;
|
|
|
|
RegQueryValueEx(hKey,
|
|
TEXT("ProviderID0"),
|
|
NULL,
|
|
&dwType,
|
|
(LPBYTE)&dwPermanentProvider,
|
|
&dwSize);
|
|
#else
|
|
dwPermanentProvider=
|
|
GetPrivateProfileInt("Repeater",
|
|
TEXT("ProviderID0"),
|
|
0,
|
|
szIniFile);
|
|
|
|
// try to read NumPhones and NumLines from telephon.ini
|
|
// if the sp implements enumdevices, these numbers
|
|
// will get overwritten anyway
|
|
dwNumLines = GetPrivateProfileInt("Provider0",
|
|
"NumLines",
|
|
0,
|
|
szIniFile);
|
|
|
|
dwNumPhones = GetPrivateProfileInt("Provider0",
|
|
"NumPhones",
|
|
0,
|
|
szIniFile);
|
|
#endif
|
|
}
|
|
|
|
else
|
|
{
|
|
DBGOUT((1, " provider FAILED TO LOAD!"));
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
TSPAPIPROC GetProcAddressHashed(DWORD iFunction, UINT nNumParms)
|
|
{
|
|
|
|
static TSPAPIPROC DefaultLineTable[] =
|
|
{
|
|
(TSPAPIPROC)TSPI_LineBlank1,
|
|
(TSPAPIPROC)TSPI_LineBlank2,
|
|
(TSPAPIPROC)TSPI_LineBlank3,
|
|
(TSPAPIPROC)TSPI_LineBlank4,
|
|
(TSPAPIPROC)TSPI_LineBlank5,
|
|
(TSPAPIPROC)TSPI_LineBlank6,
|
|
(TSPAPIPROC)TSPI_LineBlank7,
|
|
(TSPAPIPROC)TSPI_LineBlank8,
|
|
(TSPAPIPROC)TSPI_LineBlank9,
|
|
(TSPAPIPROC)TSPI_LineBlank10,
|
|
(TSPAPIPROC)TSPI_LineBlank11,
|
|
(TSPAPIPROC)TSPI_LineBlank12
|
|
};
|
|
|
|
static TSPAPIPROC DefaultPhoneTable[] =
|
|
{
|
|
(TSPAPIPROC)TSPI_PhoneBlank1,
|
|
(TSPAPIPROC)TSPI_PhoneBlank2,
|
|
(TSPAPIPROC)TSPI_PhoneBlank3,
|
|
(TSPAPIPROC)TSPI_PhoneBlank4,
|
|
(TSPAPIPROC)TSPI_PhoneBlank5,
|
|
(TSPAPIPROC)TSPI_PhoneBlank6,
|
|
(TSPAPIPROC)TSPI_PhoneBlank7,
|
|
(TSPAPIPROC)TSPI_PhoneBlank8,
|
|
(TSPAPIPROC)TSPI_PhoneBlank9,
|
|
};
|
|
|
|
TSPAPIPROC *pfn;
|
|
TSPAPIPROC *FunctionTable;
|
|
|
|
|
|
//
|
|
// Find out if it's a phone function or a line function
|
|
//
|
|
if (
|
|
(iFunction >= SP_PHONECLOSE)
|
|
&&
|
|
(iFunction <= SP_PHONESETVOLUME)
|
|
)
|
|
{
|
|
//
|
|
// It's a phone function
|
|
//
|
|
FunctionTable = DefaultPhoneTable;
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// It's a line function
|
|
//
|
|
FunctionTable = DefaultLineTable;
|
|
}
|
|
|
|
if ( nNumParms > (sizeof(DefaultLineTable)/sizeof(TSPAPIPROC)) )
|
|
{
|
|
DBGOUT((1, ">Num funcs function was requested!"));
|
|
return 0;
|
|
}
|
|
|
|
// get the pointer to the function
|
|
pfn = &lpfnProcAddress[iFunction];
|
|
|
|
// have we already gotten the address?
|
|
if( NULL == *pfn )
|
|
{
|
|
|
|
// nope, call get proc address
|
|
DBGOUT((5, "%s address being gotten", gaszTSPIFuncNames[iFunction]));
|
|
|
|
*pfn = (TSPAPIPROC)GetProcAddress(hProvider,
|
|
gaszTSPIFuncNames[iFunction]);
|
|
|
|
//
|
|
// Did it fail?
|
|
//
|
|
if( NULL == *pfn )
|
|
{
|
|
DBGOUT((1, "Getting address failed"));
|
|
*pfn = FunctionTable[ nNumParms - 1 ];
|
|
}
|
|
}
|
|
|
|
DBGOUT((1, "leaving getprocess address *pfn %lx", *pfn));
|
|
|
|
return *pfn;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
#ifdef WIN32
|
|
void PASCAL LineEventProc(
|
|
#else
|
|
void CALLBACK __export LineEventProc(
|
|
#endif
|
|
HTAPILINE htLine,
|
|
HTAPICALL htCall,
|
|
DWORD dwMsg,
|
|
DWORD dwParam1,
|
|
DWORD dwParam2,
|
|
DWORD dwParam3
|
|
)
|
|
{
|
|
|
|
DWORD dwID;
|
|
|
|
DBGOUT((1, "Line event callback"));
|
|
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, sizeof(PREHEADER) + sizeof(LINEMSGSTRUCT));
|
|
|
|
switch (dwMsg)
|
|
{
|
|
case LINE_NEWCALL:
|
|
case LINE_CALLSTATE:
|
|
case LINE_CALLDEVSPECIFIC:
|
|
case LINE_CALLDEVSPECIFICFEATURE:
|
|
case LINE_CALLINFO:
|
|
case LINE_GATHERDIGITS:
|
|
case LINE_GENERATE:
|
|
case LINE_MONITORDIGITS:
|
|
case LINE_MONITORMEDIA:
|
|
case LINE_MONITORTONE:
|
|
case LINE_ADDRESSSTATE:
|
|
case LINE_CLOSE:
|
|
case LINE_DEVSPECIFIC:
|
|
case LINE_DEVSPECIFICFEATURE:
|
|
case LINE_LINEDEVSTATE:
|
|
case LINE_CREATE:
|
|
#if (TAPI_CURRENT_VERSION >= 0x00020000)
|
|
case LINE_CREATEDIALOGINSTANCE:
|
|
case LINE_REMOVE:
|
|
#endif
|
|
break;
|
|
|
|
} // end of switch (dwMsg)
|
|
|
|
WritePreHeader(dwID,
|
|
LINEMSG);
|
|
|
|
WriteLineMsgStruct(dwID,
|
|
htLine,
|
|
htCall,
|
|
dwMsg,
|
|
dwParam1,
|
|
dwParam2,
|
|
dwParam3);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
(*glpLineEventProc32)(htLine,
|
|
htCall,
|
|
dwMsg,
|
|
dwParam1,
|
|
dwParam2,
|
|
dwParam3);
|
|
|
|
}
|
|
|
|
#ifdef WIN32
|
|
void PASCAL
|
|
#else
|
|
void CALLBACK __export
|
|
#endif
|
|
PhoneEventProc(
|
|
HTAPIPHONE htPhone,
|
|
DWORD dwMsg,
|
|
DWORD dwParam1,
|
|
DWORD dwParam2,
|
|
DWORD dwParam3
|
|
)
|
|
{
|
|
|
|
DWORD dwID;
|
|
|
|
DBGOUT((1, "Phone event callback"));
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, sizeof(PREHEADER) + sizeof(PHONEMSGSTRUCT));
|
|
|
|
switch(dwMsg)
|
|
{
|
|
case PHONE_BUTTON:
|
|
case PHONE_CLOSE:
|
|
case PHONE_DEVSPECIFIC:
|
|
case PHONE_STATE:
|
|
case PHONE_CREATE:
|
|
#if (TAPI_CURRENT_VERSION >= 0x00020000)
|
|
case PHONE_REMOVE:
|
|
#endif
|
|
break;
|
|
} // end of switch(dwMsg)
|
|
|
|
WritePreHeader(dwID,
|
|
PHONEMSG);
|
|
|
|
WritePhoneMsgStruct(dwID,
|
|
htPhone,
|
|
dwMsg,
|
|
dwParam1,
|
|
dwParam2,
|
|
dwParam3);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
(*glpPhoneEventProc32)(htPhone,
|
|
dwMsg,
|
|
dwParam1,
|
|
dwParam2,
|
|
dwParam3);
|
|
|
|
}
|
|
|
|
|
|
#ifdef WIN32
|
|
void CALLBACK //ASYNC_COMPLETION // PASCAL
|
|
#else
|
|
void CALLBACK __export
|
|
#endif
|
|
AsyncCompletionProc(DRV_REQUESTID dwRequestID,
|
|
LONG lResult)
|
|
{
|
|
|
|
DWORD dwID;
|
|
|
|
DBGOUT((1, "Async completion callback"));
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, sizeof(PREHEADER) + sizeof(ASYNCSTRUCT));
|
|
|
|
WritePreHeader(dwID,
|
|
ASYNCMSG);
|
|
|
|
WriteAsyncStruct(dwID,
|
|
dwRequestID,
|
|
lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
(*glpAsyncCompletionProc32)( dwRequestID, lResult );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//
|
|
// -------------------- TSPIAPI TSPI_line functions ---------------------------
|
|
//
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineAccept(DRV_REQUESTID dwRequestID,
|
|
HDRVCALL hdCall,
|
|
LPCSTR lpsUserUserInfo,
|
|
DWORD dwSize)
|
|
{
|
|
LONG lReturn;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC4) + dwSize);
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineAccept"));
|
|
|
|
WritePreHeader(dwID, SPFUNC4);
|
|
|
|
WriteLogStruct4(dwID,
|
|
SP_LINEACCEPT,
|
|
dwRequestID,
|
|
(DWORD)hdCall,
|
|
(DWORD)lpsUserUserInfo,
|
|
(DWORD)dwSize);
|
|
|
|
WriteStruct(dwID,
|
|
dwSize,
|
|
(LPVOID)lpsUserUserInfo);
|
|
|
|
lReturn = (* GetProcAddressHashed(SP_LINEACCEPT, 4))(
|
|
dwRequestID,
|
|
hdCall,
|
|
lpsUserUserInfo,
|
|
dwSize);
|
|
|
|
WritePostStruct(dwID,
|
|
lReturn);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lReturn;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineAddToConference(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVCALL hdConfCall,
|
|
HDRVCALL hdConsultCall
|
|
)
|
|
{
|
|
LONG lReturn;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC3));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineAddToConference"));
|
|
|
|
WritePreHeader(dwID, SPFUNC3);
|
|
|
|
WriteLogStruct3(dwID, SP_LINEADDTOCONFERENCE,
|
|
dwRequestID,
|
|
(DWORD)hdConfCall,
|
|
(DWORD)hdConsultCall);
|
|
|
|
lReturn = (* GetProcAddressHashed(SP_LINEADDTOCONFERENCE,3))(
|
|
dwRequestID,
|
|
hdConfCall,
|
|
hdConsultCall);
|
|
|
|
WritePostStruct(dwID, lReturn);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lReturn;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineAnswer(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVCALL hdCall,
|
|
LPCSTR lpsUserUserInfo,
|
|
DWORD dwSize
|
|
)
|
|
{
|
|
LONG lReturn;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC4) + dwSize);
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineAnswer"));
|
|
|
|
WritePreHeader(dwID, SPFUNC4);
|
|
|
|
WriteLogStruct4(dwID, SP_LINEACCEPT,
|
|
dwRequestID,
|
|
(DWORD)hdCall,
|
|
(DWORD)lpsUserUserInfo,
|
|
(DWORD)dwSize);
|
|
|
|
WriteStruct(dwID, dwSize, (LPVOID)lpsUserUserInfo);
|
|
|
|
lReturn = (* GetProcAddressHashed(SP_LINEANSWER, 4))(
|
|
dwRequestID,
|
|
hdCall,
|
|
lpsUserUserInfo,
|
|
dwSize);
|
|
|
|
WritePostStruct(dwID, lReturn);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lReturn;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineBlindTransfer(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVCALL hdCall,
|
|
LPCWSTR lpszDestAddress,
|
|
DWORD dwCountryCode)
|
|
{
|
|
LONG lReturn;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC4) + lstrlen(lpszDestAddress));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineBlindTransfer"));
|
|
|
|
WritePreHeader(dwID, SPFUNC4);
|
|
|
|
WriteLogStruct4(dwID, SP_LINEBLINDTRANSFER,
|
|
dwRequestID,
|
|
(DWORD)hdCall,
|
|
(DWORD)lpszDestAddress,
|
|
dwCountryCode);
|
|
|
|
WriteStruct(dwID, lstrlen(lpszDestAddress), (LPVOID)lpszDestAddress);
|
|
|
|
lReturn = (* GetProcAddressHashed(SP_LINEBLINDTRANSFER, 4))(
|
|
dwRequestID,
|
|
hdCall,
|
|
lpszDestAddress,
|
|
dwCountryCode
|
|
);
|
|
|
|
WritePostStruct(dwID, lReturn);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lReturn;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineClose(
|
|
HDRVLINE hdLine
|
|
)
|
|
{
|
|
LONG lReturn;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC1));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineClose"));
|
|
|
|
WritePreHeader(dwID, SPFUNC1);
|
|
|
|
WriteLogStruct1(dwID, SP_LINECLOSE,
|
|
(DWORD)hdLine);
|
|
|
|
lReturn = (* GetProcAddressHashed(SP_LINECLOSE, 1))(hdLine);
|
|
|
|
WritePostStruct(dwID, lReturn);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lReturn;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineCloseCall(
|
|
HDRVCALL hdCall
|
|
)
|
|
{
|
|
LONG lReturn;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC1));
|
|
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineCloseCall"));
|
|
|
|
WritePreHeader(dwID, SPFUNC1);
|
|
|
|
WriteLogStruct1(dwID, SP_LINECLOSECALL,
|
|
(DWORD)hdCall);
|
|
|
|
lReturn = (* GetProcAddressHashed(SP_LINECLOSECALL, 1))(hdCall);
|
|
|
|
WritePostStruct(dwID, lReturn);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lReturn;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineCompleteCall(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVCALL hdCall,
|
|
LPDWORD lpdwCompletionID,
|
|
DWORD dwCompletionMode,
|
|
DWORD dwMessageID
|
|
)
|
|
{
|
|
LONG lReturn;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC5) + sizeof(DWORD));
|
|
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineCompleteCall"));
|
|
|
|
WritePreHeader(dwID, SPFUNC5);
|
|
|
|
WriteLogStruct5(dwID, SP_LINECOMPLETECALL,
|
|
dwRequestID,
|
|
(DWORD)hdCall,
|
|
(DWORD)lpdwCompletionID,
|
|
dwCompletionMode,
|
|
(DWORD)hdCall);
|
|
|
|
lReturn = (* GetProcAddressHashed(SP_LINECOMPLETECALL, 5))(
|
|
dwRequestID,
|
|
hdCall,
|
|
lpdwCompletionID,
|
|
dwCompletionMode,
|
|
hdCall
|
|
);
|
|
|
|
WritePostStruct(dwID, lReturn);
|
|
|
|
WriteStruct(dwID, sizeof(DWORD),
|
|
(LPVOID)lpdwCompletionID);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lReturn;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineCompleteTransfer(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVCALL hdCall,
|
|
HDRVCALL hdConsultCall,
|
|
HTAPICALL htConfCall,
|
|
LPHDRVCALL lphdConfCall,
|
|
DWORD dwTransferMode
|
|
)
|
|
{
|
|
LONG lReturn;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC6) + sizeof(MYHDRVCALL));
|
|
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineCompleteTransfer"));
|
|
|
|
WritePreHeader(dwID, SPFUNC6);
|
|
|
|
WriteLogStruct6(dwID, SP_LINECOMPLETETRANSFER,
|
|
dwRequestID,
|
|
(DWORD)hdCall,
|
|
(DWORD)hdConsultCall,
|
|
(DWORD)htConfCall,
|
|
(DWORD)lphdConfCall,
|
|
dwTransferMode);
|
|
|
|
lReturn = (* GetProcAddressHashed(SP_LINECOMPLETETRANSFER, 6))(
|
|
dwRequestID,
|
|
hdCall,
|
|
hdConsultCall,
|
|
htConfCall,
|
|
lphdConfCall,
|
|
dwTransferMode
|
|
);
|
|
|
|
WritePostStruct(dwID, lReturn);
|
|
|
|
if (lReturn >= 0)
|
|
{
|
|
WriteStruct(dwID, sizeof(HDRVCALL),
|
|
(LPVOID)lphdConfCall);
|
|
}
|
|
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lReturn;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineConditionalMediaDetection(
|
|
HDRVLINE hdLine,
|
|
DWORD dwMediaModes,
|
|
LPLINECALLPARAMS const lpCallParams
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC3) +
|
|
(lpCallParams ? lpCallParams->dwTotalSize : 0));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineConditionalMediaDetection"));
|
|
|
|
WritePreHeader(dwID, SPFUNC3);
|
|
|
|
WriteLogStruct3(dwID, SP_LINECONDITIONALMEDIADETECTION,
|
|
(DWORD)hdLine,
|
|
dwMediaModes,
|
|
(DWORD)lpCallParams);
|
|
|
|
if (lpCallParams)
|
|
{
|
|
WriteStruct(dwID, lpCallParams->dwTotalSize,
|
|
(LPVOID)lpCallParams);
|
|
}
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINECONDITIONALMEDIADETECTION, 3))(
|
|
hdLine,
|
|
dwMediaModes,
|
|
lpCallParams);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
RepeaterDebugString((2, "Leaving TSPI_lineConditionalMediaDetection"));
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineConfigDialog(
|
|
DWORD dwDeviceID,
|
|
HWND hwndOwner,
|
|
LPCWSTR lpszDeviceClass
|
|
)
|
|
{
|
|
|
|
LONG lResult = 0;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC3) + lstrlen(lpszDeviceClass));
|
|
|
|
WritePreHeader(dwID, SPFUNC3);
|
|
|
|
WriteLogStruct3(dwID, SP_LINECONFIGDIALOG,
|
|
dwDeviceID,
|
|
#ifdef WIN32
|
|
(DWORD)hwndOwner,
|
|
#else
|
|
MAKELONG(hwndOwner, 0),
|
|
#endif
|
|
(DWORD)lpszDeviceClass);
|
|
|
|
WriteStruct(dwID, lstrlen(lpszDeviceClass),
|
|
(LPVOID)lpszDeviceClass);
|
|
|
|
lResult =
|
|
(* GetProcAddressHashed(SP_LINECONFIGDIALOG, 3))(
|
|
dwDeviceID,
|
|
hwndOwner,
|
|
lpszDeviceClass
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineConfigDialogEdit(
|
|
DWORD dwDeviceID,
|
|
HWND hwndOwner,
|
|
LPCWSTR lpszDeviceClass,
|
|
LPVOID const lpDeviceConfigIn,
|
|
DWORD dwSize,
|
|
LPVARSTRING lpDeviceConfigOut
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineConfigDialogEdit"));
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC6) +
|
|
dwSize +
|
|
lstrlen(lpszDeviceClass) +
|
|
(lpDeviceConfigOut ? lpDeviceConfigOut->dwTotalSize : 0));
|
|
|
|
|
|
WritePreHeader(dwID, SPFUNC6);
|
|
|
|
WriteLogStruct6(dwID, SP_LINECONFIGDIALOGEDIT,
|
|
dwDeviceID,
|
|
#ifdef WIN32
|
|
(DWORD)hwndOwner,
|
|
#else
|
|
(DWORD)MAKELONG(hwndOwner, 0),
|
|
#endif
|
|
(DWORD)lpszDeviceClass,
|
|
(DWORD)lpDeviceConfigIn,
|
|
dwSize,
|
|
(DWORD)lpDeviceConfigOut);
|
|
|
|
if (lpszDeviceClass)
|
|
{
|
|
WriteStruct(dwID, lstrlen(lpszDeviceClass),
|
|
(LPVOID)lpszDeviceClass);
|
|
}
|
|
|
|
if (lpDeviceConfigIn)
|
|
{
|
|
WriteStruct(dwID, dwSize,
|
|
(LPVOID)lpDeviceConfigIn);
|
|
}
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINECONFIGDIALOGEDIT, 6))(
|
|
dwDeviceID,
|
|
hwndOwner,
|
|
lpszDeviceClass,
|
|
lpDeviceConfigIn,
|
|
dwSize,
|
|
lpDeviceConfigOut);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
if (lpDeviceConfigOut)
|
|
{
|
|
WriteStruct(dwID, lpDeviceConfigOut->dwTotalSize,
|
|
(LPVOID)lpDeviceConfigOut);
|
|
}
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineDevSpecific(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVLINE hdLine,
|
|
DWORD dwAddressID,
|
|
HDRVCALL hdCall,
|
|
LPVOID lpParams,
|
|
DWORD dwSize
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC6) + dwSize + dwSize);
|
|
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineDevSpecific"));
|
|
|
|
WritePreHeader(dwID, SPFUNC6);
|
|
|
|
WriteLogStruct6(dwID, SP_LINEDEVSPECIFIC,
|
|
dwRequestID,
|
|
(DWORD)hdLine,
|
|
dwAddressID,
|
|
(DWORD)hdCall,
|
|
(DWORD)lpParams,
|
|
dwSize);
|
|
|
|
WriteStruct(dwID, dwSize,
|
|
(LPVOID)lpParams);
|
|
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEDEVSPECIFIC, 6))(
|
|
dwRequestID,
|
|
hdLine,
|
|
dwAddressID,
|
|
hdCall,
|
|
lpParams,
|
|
dwSize);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
WriteStruct(dwID, dwSize,
|
|
(LPVOID)lpParams);
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineDevSpecificFeature(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVLINE hdLine,
|
|
DWORD dwFeature,
|
|
LPVOID lpParams,
|
|
DWORD dwSize
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC5) + dwSize + dwSize);
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineDevSpecificFeature"));
|
|
|
|
WritePreHeader(dwID, SPFUNC5);
|
|
|
|
WriteLogStruct5(dwID, SP_LINEDEVSPECIFICFEATURE,
|
|
dwRequestID,
|
|
(DWORD)hdLine,
|
|
dwFeature,
|
|
(DWORD)lpParams,
|
|
dwSize);
|
|
|
|
WriteStruct(dwID, dwSize,
|
|
(LPVOID)lpParams);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEDEVSPECIFICFEATURE, 5))(
|
|
dwRequestID,
|
|
hdLine,
|
|
dwFeature,
|
|
lpParams,
|
|
dwSize);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
WriteStruct(dwID, dwSize,
|
|
(LPVOID)lpParams);
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineDial(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVCALL hdCall,
|
|
LPCWSTR lpszDestAddress,
|
|
DWORD dwCountryCode
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC4) + lstrlen(lpszDestAddress));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineDial"));
|
|
|
|
WritePreHeader(dwID, SPFUNC4);
|
|
|
|
WriteLogStruct4(dwID, SP_LINEDIAL,
|
|
dwRequestID,
|
|
(DWORD)hdCall,
|
|
(DWORD)lpszDestAddress,
|
|
dwCountryCode);
|
|
|
|
if (lpszDestAddress)
|
|
{
|
|
WriteStruct(dwID, lstrlen(lpszDestAddress),
|
|
(LPVOID)lpszDestAddress);
|
|
}
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEDIAL, 4))(
|
|
dwRequestID,
|
|
hdCall,
|
|
lpszDestAddress,
|
|
dwCountryCode
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineDrop(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVCALL hdCall,
|
|
LPCSTR lpsUserUserInfo,
|
|
DWORD dwSize
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC4) + dwSize);
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineDrop"));
|
|
|
|
WritePreHeader(dwID, SPFUNC4);
|
|
|
|
WriteLogStruct4(dwID, SP_LINEDROP,
|
|
dwRequestID,
|
|
(DWORD)hdCall,
|
|
(DWORD)lpsUserUserInfo,
|
|
dwSize);
|
|
|
|
WriteStruct(dwID, dwSize,
|
|
(LPVOID)lpsUserUserInfo);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEDROP, 4))(
|
|
dwRequestID,
|
|
hdCall,
|
|
lpsUserUserInfo,
|
|
dwSize
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineDropOnClose(
|
|
HDRVCALL hdCall
|
|
)
|
|
{
|
|
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC1));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineDropOnClose"));
|
|
|
|
WritePreHeader(dwID, SPFUNC1);
|
|
|
|
WriteLogStruct1(dwID, SP_LINEDROPONCLOSE,
|
|
(DWORD)hdCall);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEDROPONCLOSE, 1))
|
|
(hdCall);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineDropNoOwner(
|
|
HDRVCALL hdCall
|
|
)
|
|
{
|
|
TSPAPIPROC pfn;
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC1));
|
|
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineDropNoOwner"));
|
|
|
|
|
|
WritePreHeader(dwID, SPFUNC1);
|
|
|
|
WriteLogStruct1(dwID, SP_LINEDROPNOOWNER,
|
|
(DWORD)hdCall);
|
|
|
|
pfn = (TSPAPIPROC)GetProcAddressHashed(SP_LINEDROPNOOWNER, 1);
|
|
|
|
|
|
if (pfn != (TSPAPIPROC)TSPI_LineBlank1)
|
|
{
|
|
lResult = (*pfn)(hdCall);
|
|
}
|
|
else
|
|
{
|
|
RepeaterDebugString((4, " This SP does not export DROPNOOWNER, so we'll call LINEDROP"));
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEDROP, 4))(
|
|
(DWORD) BOGUS_REQUEST_ID,
|
|
(DWORD) hdCall,
|
|
(DWORD) NULL,
|
|
(DWORD) 0
|
|
);
|
|
|
|
//
|
|
// Did we get an error back sync?
|
|
//
|
|
if (
|
|
(lResult < 0)
|
|
&&
|
|
(lResult != BOGUS_REQUEST_ID)
|
|
)
|
|
{
|
|
//
|
|
// Yup. Return it.
|
|
//
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// No, we got back the req id. Return success.
|
|
//
|
|
lResult = 0;
|
|
}
|
|
}
|
|
|
|
RepeaterDebugString((3, "Leaving TSPI_lineDropNoOwner, return code=0x%08lx", lResult));
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineForward(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVLINE hdLine,
|
|
DWORD bAllAddresses,
|
|
DWORD dwAddressID,
|
|
LPLINEFORWARDLIST const lpForwardList,
|
|
DWORD dwNumRingsNoAnswer,
|
|
HTAPICALL htConsultCall,
|
|
LPHDRVCALL lphdConsultCall,
|
|
LPLINECALLPARAMS const lpCallParams
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC9) +
|
|
(lpForwardList ? lpForwardList->dwTotalSize : 0) +
|
|
(lpCallParams ? lpCallParams->dwTotalSize : 0) +
|
|
sizeof(HDRVCALL));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineForward"));
|
|
|
|
WritePreHeader(dwID, SPFUNC9);
|
|
|
|
WriteLogStruct9(dwID, SP_LINEFORWARD,
|
|
dwRequestID,
|
|
(DWORD)hdLine,
|
|
(DWORD)bAllAddresses,
|
|
dwAddressID,
|
|
(DWORD)lpForwardList,
|
|
(DWORD)dwNumRingsNoAnswer,
|
|
(DWORD)htConsultCall,
|
|
(DWORD)lphdConsultCall,
|
|
(DWORD)lpCallParams);
|
|
|
|
if (lpForwardList)
|
|
{
|
|
WriteStruct(dwID, lpForwardList->dwTotalSize,
|
|
(LPVOID)lpForwardList);
|
|
}
|
|
|
|
if (lpCallParams)
|
|
{
|
|
WriteStruct(dwID, lpCallParams->dwTotalSize,
|
|
(LPVOID)lpCallParams);
|
|
}
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEFORWARD, 9))(
|
|
dwRequestID,
|
|
(HDRVLINE)hdLine,
|
|
bAllAddresses,
|
|
dwAddressID,
|
|
lpForwardList,
|
|
dwNumRingsNoAnswer,
|
|
htConsultCall,
|
|
lphdConsultCall,
|
|
lpCallParams
|
|
);
|
|
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
WriteStruct(dwID, sizeof(HDRVCALL),
|
|
(LPVOID)lphdConsultCall);
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineGatherDigits(
|
|
HDRVCALL hdCall,
|
|
DWORD dwEndToEndID,
|
|
DWORD dwDigitModes,
|
|
#ifdef WIN32
|
|
LPWSTR lpsDigits,
|
|
#else
|
|
LPSTR lpsDigits,
|
|
#endif
|
|
DWORD dwNumDigits,
|
|
LPCWSTR lpszTerminationDigits,
|
|
DWORD dwFirstDigitTimeout,
|
|
DWORD dwInterDigitTimeout
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC8) + lstrlen(lpszTerminationDigits));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineGatherDigits"));
|
|
|
|
WritePreHeader(dwID, SPFUNC8);
|
|
|
|
WriteLogStruct8(dwID, SP_LINEGATHERDIGITS,
|
|
(DWORD)hdCall,
|
|
dwEndToEndID,
|
|
dwDigitModes,
|
|
(DWORD)lpsDigits,
|
|
dwNumDigits,
|
|
(DWORD)lpszTerminationDigits,
|
|
dwFirstDigitTimeout,
|
|
dwInterDigitTimeout);
|
|
|
|
|
|
// lpsDigits?
|
|
|
|
if (lpszTerminationDigits)
|
|
{
|
|
WriteStruct(dwID, lstrlen(lpszTerminationDigits),
|
|
(LPVOID)lpszTerminationDigits);
|
|
}
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEGATHERDIGITS, 8))(
|
|
hdCall,
|
|
dwEndToEndID,
|
|
dwDigitModes,
|
|
lpsDigits,
|
|
dwNumDigits,
|
|
lpszTerminationDigits,
|
|
dwFirstDigitTimeout,
|
|
dwInterDigitTimeout);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineGenerateDigits(
|
|
HDRVCALL hdCall,
|
|
DWORD dwEndToEndID,
|
|
DWORD dwDigitMode,
|
|
LPCWSTR lpszDigits,
|
|
DWORD dwDuration
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC5) + lstrlen(lpszDigits));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineGenerateDigits"));
|
|
|
|
WritePreHeader(dwID, SPFUNC5);
|
|
|
|
WriteLogStruct5(dwID, SP_LINEGENERATEDIGITS,
|
|
(DWORD)hdCall,
|
|
dwEndToEndID,
|
|
dwDigitMode,
|
|
(DWORD)lpszDigits,
|
|
dwDuration);
|
|
|
|
if (lpszDigits)
|
|
{
|
|
WriteStruct(dwID, lstrlen(lpszDigits),
|
|
(LPVOID)lpszDigits);
|
|
}
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEGENERATEDIGITS, 5))(
|
|
hdCall,
|
|
dwEndToEndID,
|
|
dwDigitMode,
|
|
lpszDigits,
|
|
dwDuration );
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineGenerateTone(
|
|
HDRVCALL hdCall,
|
|
DWORD dwEndToEndID,
|
|
DWORD dwToneMode,
|
|
DWORD dwDuration,
|
|
DWORD dwNumTones,
|
|
LPLINEGENERATETONE const lpTones
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC6) + dwNumTones * sizeof(LINEGENERATETONE));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineGenerateTone"));
|
|
|
|
WritePreHeader(dwID, SPFUNC6);
|
|
|
|
WriteLogStruct6(dwID, SP_LINEGENERATETONE,
|
|
(DWORD)hdCall,
|
|
dwEndToEndID,
|
|
dwToneMode,
|
|
dwDuration,
|
|
dwNumTones,
|
|
(DWORD)lpTones);
|
|
|
|
WriteStruct(dwID, dwNumTones * sizeof(LINEGENERATETONE),
|
|
(LPVOID)lpTones);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEGENERATETONE, 6))(
|
|
hdCall,
|
|
dwEndToEndID,
|
|
dwToneMode,
|
|
dwDuration,
|
|
dwNumTones,
|
|
lpTones );
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineGetAddressCaps(
|
|
DWORD dwDeviceID,
|
|
DWORD dwAddressID,
|
|
DWORD dwTSPIVersion,
|
|
DWORD dwExtVersion,
|
|
LPLINEADDRESSCAPS lpAddressCaps
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC5) +
|
|
(lpAddressCaps ? lpAddressCaps->dwTotalSize : 0));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineGetAddressCaps"));
|
|
|
|
WritePreHeader(dwID, SPFUNC5);
|
|
|
|
WriteLogStruct5(dwID, SP_LINEGETADDRESSCAPS,
|
|
dwDeviceID,
|
|
dwAddressID,
|
|
dwTSPIVersion,
|
|
dwExtVersion,
|
|
(DWORD)lpAddressCaps);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEGETADDRESSCAPS, 5))(
|
|
dwDeviceID,
|
|
dwAddressID,
|
|
dwTSPIVersion,
|
|
dwExtVersion,
|
|
lpAddressCaps
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
if (lpAddressCaps)
|
|
{
|
|
WriteStruct(dwID, lpAddressCaps->dwUsedSize,
|
|
(LPVOID)lpAddressCaps);
|
|
}
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineGetAddressID(
|
|
HDRVLINE hdLine,
|
|
LPDWORD lpdwAddressID,
|
|
DWORD dwAddressMode,
|
|
LPCWSTR lpsAddress,
|
|
DWORD dwSize
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC5) + dwSize + sizeof(DWORD));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineGetAddressID"));
|
|
|
|
WritePreHeader(dwID, SPFUNC5);
|
|
|
|
WriteLogStruct5(dwID, SP_LINEGETADDRESSID,
|
|
(DWORD)hdLine,
|
|
(DWORD)lpdwAddressID,
|
|
dwAddressMode,
|
|
(DWORD)lpsAddress,
|
|
dwSize);
|
|
|
|
WriteStruct(dwID, dwSize,
|
|
(LPVOID)lpsAddress);
|
|
|
|
lResult =
|
|
(* GetProcAddressHashed(SP_LINEGETADDRESSID, 5))(
|
|
hdLine,
|
|
lpdwAddressID,
|
|
dwAddressMode,
|
|
lpsAddress,
|
|
dwSize
|
|
);
|
|
|
|
RepeaterDebugString((2, "Leaving TSPI_lineGetAddressID"));
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
WriteStruct(dwID, sizeof(DWORD),
|
|
(LPVOID)lpdwAddressID);
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineGetAddressStatus(
|
|
HDRVLINE hdLine,
|
|
DWORD dwAddressID,
|
|
LPLINEADDRESSSTATUS lpAddressStatus
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC3) +
|
|
(lpAddressStatus ? lpAddressStatus->dwTotalSize : 0));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineGetAddressStatus"));
|
|
|
|
WritePreHeader(dwID, SPFUNC3);
|
|
|
|
WriteLogStruct3(dwID, SP_LINEGETADDRESSSTATUS,
|
|
(DWORD)hdLine,
|
|
dwAddressID,
|
|
(DWORD)lpAddressStatus);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEGETADDRESSSTATUS, 3))(
|
|
hdLine,
|
|
dwAddressID,
|
|
lpAddressStatus);
|
|
|
|
RepeaterDebugString((2, "Leaving TSPI_lineGetAddressStatus"));
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
if (lpAddressStatus)
|
|
{
|
|
WriteStruct(dwID, lpAddressStatus->dwUsedSize,
|
|
(LPVOID)lpAddressStatus);
|
|
}
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineGetCallAddressID(
|
|
HDRVCALL hdCall,
|
|
LPDWORD lpdwAddressID
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC2) + sizeof(DWORD));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineGetCallAddressID"));
|
|
|
|
WritePreHeader(dwID, SPFUNC2);
|
|
|
|
WriteLogStruct2(dwID, SP_LINEGETCALLADDRESSID,
|
|
(DWORD)hdCall,
|
|
(DWORD)lpdwAddressID);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEGETCALLADDRESSID, 2))(
|
|
hdCall,
|
|
lpdwAddressID
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
WriteStruct(dwID, sizeof(DWORD),
|
|
(LPVOID)lpdwAddressID);
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineGetCallInfo(
|
|
HDRVCALL hdCall,
|
|
LPLINECALLINFO lpCallInfo
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC2) +
|
|
(lpCallInfo? lpCallInfo->dwTotalSize : 0));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineGetCallInfo"));
|
|
|
|
WritePreHeader(dwID, SPFUNC2);
|
|
|
|
WriteLogStruct2(dwID, SP_LINEGETCALLINFO,
|
|
(DWORD)hdCall,
|
|
(DWORD)lpCallInfo);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEGETCALLINFO, 2))(
|
|
hdCall,
|
|
lpCallInfo
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
if (lpCallInfo)
|
|
{
|
|
WriteStruct(dwID, lpCallInfo->dwUsedSize,
|
|
(LPVOID)lpCallInfo);
|
|
}
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineGetCallStatus(
|
|
HDRVCALL hdCall,
|
|
LPLINECALLSTATUS lpCallStatus
|
|
)
|
|
{
|
|
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC2) +
|
|
(lpCallStatus ? lpCallStatus->dwTotalSize : 0));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineGetCallStatus"));
|
|
|
|
WritePreHeader(dwID, SPFUNC2);
|
|
|
|
WriteLogStruct2(dwID, SP_LINEGETCALLSTATUS,
|
|
(DWORD)hdCall,
|
|
(DWORD)lpCallStatus);
|
|
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEGETCALLSTATUS, 2))(
|
|
hdCall,
|
|
lpCallStatus
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
if (lpCallStatus)
|
|
{
|
|
WriteStruct(dwID, lpCallStatus->dwUsedSize,
|
|
(LPVOID)lpCallStatus);
|
|
}
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineGetDevCaps(
|
|
DWORD dwDeviceID,
|
|
DWORD dwTSPIVersion,
|
|
DWORD dwExtVersion,
|
|
LPLINEDEVCAPS lpLineDevCaps
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC4) +
|
|
(lpLineDevCaps ? lpLineDevCaps->dwTotalSize : 0));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineGetDevCaps"));
|
|
|
|
WritePreHeader(dwID, SPFUNC4);
|
|
|
|
WriteLogStruct4(dwID, SP_LINEGETDEVCAPS,
|
|
dwDeviceID,
|
|
dwTSPIVersion,
|
|
dwExtVersion,
|
|
(DWORD)lpLineDevCaps);
|
|
|
|
lResult =
|
|
(* GetProcAddressHashed(SP_LINEGETDEVCAPS, 4))(
|
|
dwDeviceID,
|
|
dwTSPIVersion,
|
|
dwExtVersion,
|
|
lpLineDevCaps
|
|
);
|
|
|
|
DBGOUT((2, "Leaving TSPI_lineGetDevCaps retcode=0x%08lx", lResult));
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
if (lpLineDevCaps)
|
|
{
|
|
WriteStruct(dwID, lpLineDevCaps->dwUsedSize,
|
|
(LPVOID)lpLineDevCaps);
|
|
}
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineGetDevConfig(
|
|
DWORD dwDeviceID,
|
|
LPVARSTRING lpDeviceConfig,
|
|
LPCWSTR lpszDeviceClass
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC3) +
|
|
(lpDeviceConfig ? lpDeviceConfig->dwTotalSize : 0) +
|
|
lstrlen(lpszDeviceClass));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineGetDevConfig"));
|
|
|
|
WritePreHeader(dwID, SPFUNC3);
|
|
|
|
WriteLogStruct3(dwID, SP_LINEGETDEVCONFIG,
|
|
dwDeviceID,
|
|
(DWORD)lpDeviceConfig,
|
|
(DWORD)lpszDeviceClass);
|
|
|
|
if (lpszDeviceClass)
|
|
{
|
|
WriteStruct(dwID, lstrlen(lpszDeviceClass),
|
|
(LPVOID)lpszDeviceClass);
|
|
}
|
|
|
|
lResult =
|
|
(* GetProcAddressHashed(SP_LINEGETDEVCONFIG, 3))(
|
|
dwDeviceID,
|
|
lpDeviceConfig,
|
|
lpszDeviceClass
|
|
);
|
|
|
|
DBGOUT((2, "Leaving TSPI_lineGetDevConfig retcode=0x%08lx", lResult));
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
if (lpDeviceConfig)
|
|
{
|
|
WriteStruct(dwID, lpDeviceConfig->dwUsedSize,
|
|
(LPVOID)lpDeviceConfig);
|
|
}
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineGetExtensionID(
|
|
DWORD dwDeviceID,
|
|
DWORD dwTSPIVersion,
|
|
LPLINEEXTENSIONID lpExtensionID
|
|
)
|
|
{
|
|
|
|
LONG lResult = 0;
|
|
DWORD dwID;
|
|
TSPAPIPROC lpfn;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC3) + sizeof(LINEEXTENSIONID));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineGetExtensionID"));
|
|
|
|
lpfn = (TSPAPIPROC)GetProcAddressHashed(SP_LINEGETEXTENSIONID, 3);
|
|
|
|
WritePreHeader(dwID, SPFUNC3);
|
|
|
|
WriteLogStruct3(dwID, SP_LINEGETEXTENSIONID,
|
|
dwDeviceID,
|
|
dwTSPIVersion,
|
|
(DWORD)lpExtensionID);
|
|
|
|
if (lpfn != (TSPAPIPROC)TSPI_LineBlank3)
|
|
{
|
|
|
|
lResult =
|
|
(* lpfn)(
|
|
dwDeviceID,
|
|
dwTSPIVersion,
|
|
lpExtensionID
|
|
);
|
|
}
|
|
else
|
|
{
|
|
RepeaterDebugString((2, " SP does not support TSPI_lineGetExtensionID. (We'll fill in zeros.)"));
|
|
|
|
lpExtensionID->dwExtensionID0 = 0;
|
|
lpExtensionID->dwExtensionID1 = 0;
|
|
lpExtensionID->dwExtensionID2 = 0;
|
|
lpExtensionID->dwExtensionID3 = 0;
|
|
}
|
|
|
|
|
|
|
|
RepeaterDebugString((2, "Leaving TSPI_lineGetExtensionID retcode=0x%08lx", lResult));
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
WriteStruct(dwID, sizeof(LINEEXTENSIONID),
|
|
(LPVOID)lpExtensionID);
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineGetIcon(
|
|
DWORD dwDeviceID,
|
|
LPCWSTR lpszDeviceClass,
|
|
LPHICON lphIcon
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC3) +
|
|
lstrlen(lpszDeviceClass) +
|
|
sizeof(HICON));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineGetIcon"));
|
|
|
|
WritePreHeader(dwID, SPFUNC3);
|
|
|
|
WriteLogStruct3(dwID, SP_LINEGETICON,
|
|
dwDeviceID,
|
|
(DWORD)lpszDeviceClass,
|
|
(DWORD)lphIcon);
|
|
|
|
if (lpszDeviceClass)
|
|
{
|
|
WriteStruct(dwID, lstrlen(lpszDeviceClass),
|
|
(LPVOID)lpszDeviceClass);
|
|
}
|
|
|
|
lResult =
|
|
(* GetProcAddressHashed(SP_LINEGETICON, 3))(
|
|
dwDeviceID,
|
|
lpszDeviceClass,
|
|
lphIcon
|
|
);
|
|
|
|
DBGOUT((2, "Leaving TSPI_lineGetIcon retcode=0x%08lx", lResult));
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
WriteStruct(dwID, sizeof(HICON),
|
|
(LPVOID)lphIcon);
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineGetID(
|
|
HDRVLINE hdLine,
|
|
DWORD dwAddressID,
|
|
HDRVCALL hdCall,
|
|
DWORD dwSelect,
|
|
LPVARSTRING lpDeviceID,
|
|
LPCWSTR lpszDeviceClass
|
|
#if (TAPI_CURRENT_VERSION >= 0x00020000)
|
|
,
|
|
HANDLE hTargetProcess
|
|
#endif
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC7) +
|
|
lstrlen(lpszDeviceClass) +
|
|
(lpDeviceID ? lpDeviceID->dwTotalSize : 0));
|
|
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineGetID"));
|
|
|
|
|
|
#if (TAPI_CURRENT_VERSION >= 0x00020000)
|
|
|
|
WritePreHeader(dwID, SPFUNC7);
|
|
|
|
WriteLogStruct7(dwID, SP_LINEGETID,
|
|
(DWORD)hdLine,
|
|
(DWORD)dwAddressID,
|
|
(DWORD)hdCall,
|
|
(DWORD)dwSelect,
|
|
(DWORD)lpDeviceID,
|
|
(DWORD)lpszDeviceClass,
|
|
(DWORD)hTargetProcess);
|
|
#else
|
|
WritePreHeader(dwID, SPFUNC6);
|
|
|
|
WriteLogStruct6(dwID, SP_LINEGETID,
|
|
(DWORD)hdLine,
|
|
(DWORD)dwAddressID,
|
|
(DWORD)hdCall,
|
|
(DWORD)dwSelect,
|
|
(DWORD)lpDeviceID,
|
|
(DWORD)lpszDeviceClass );
|
|
#endif
|
|
|
|
if (lpszDeviceClass)
|
|
{
|
|
WriteStruct(dwID, lstrlen(lpszDeviceClass),
|
|
(LPVOID)lpszDeviceClass);
|
|
}
|
|
|
|
|
|
#if (TAPI_CURRENT_VERSION >= 0x00020000)
|
|
lResult = (* GetProcAddressHashed(SP_LINEGETID, 7))(
|
|
hdLine,
|
|
dwAddressID,
|
|
hdCall,
|
|
dwSelect,
|
|
lpDeviceID,
|
|
lpszDeviceClass,
|
|
hTargetProcess);
|
|
#else
|
|
lResult = (* GetProcAddressHashed(SP_LINEGETID, 6))(
|
|
hdLine,
|
|
dwAddressID,
|
|
hdCall,
|
|
dwSelect,
|
|
lpDeviceID,
|
|
lpszDeviceClass);
|
|
#endif
|
|
|
|
RepeaterDebugString((2, "Leaving TSPI_lineGetID - lResult=0x%08lx", lResult));
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
if (lpDeviceID)
|
|
{
|
|
WriteStruct(dwID, lpDeviceID->dwUsedSize,
|
|
(LPVOID)lpDeviceID);
|
|
}
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineGetLineDevStatus(
|
|
HDRVLINE hdLine,
|
|
LPLINEDEVSTATUS lpLineDevStatus
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC2) +
|
|
(lpLineDevStatus ? lpLineDevStatus->dwTotalSize : 0));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineGetLineDevStatus"));
|
|
|
|
WritePreHeader(dwID, SPFUNC2);
|
|
|
|
WriteLogStruct2(dwID, SP_LINEGETLINEDEVSTATUS,
|
|
(DWORD)hdLine,
|
|
(DWORD)lpLineDevStatus);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEGETLINEDEVSTATUS, 2))(
|
|
hdLine,
|
|
lpLineDevStatus);
|
|
|
|
RepeaterDebugString((2, "Leaving TSPI_lineGetLineDevStatus"));
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
if (lpLineDevStatus)
|
|
{
|
|
WriteStruct(dwID, lpLineDevStatus->dwUsedSize,
|
|
(LPVOID)lpLineDevStatus);
|
|
}
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineGetNumAddressIDs(
|
|
HDRVLINE hdLine,
|
|
LPDWORD lpdwNumAddressIDs
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC2) + sizeof(DWORD));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineGetNumAddressIDs"));
|
|
|
|
WritePreHeader(dwID, SPFUNC2);
|
|
|
|
WriteLogStruct2(dwID, SP_LINEGETNUMADDRESSIDS,
|
|
(DWORD)hdLine,
|
|
(DWORD)lpdwNumAddressIDs);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEGETNUMADDRESSIDS, 2))(
|
|
hdLine,
|
|
lpdwNumAddressIDs );
|
|
|
|
RepeaterDebugString((2, "Leaving TSPI_lineGetNumAddressIDs - returning 0x%08lx", lResult));
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
WriteStruct(dwID, sizeof(DWORD),
|
|
(LPVOID)lpdwNumAddressIDs);
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineHold(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVCALL hdCall
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC2));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineHold"));
|
|
|
|
WritePreHeader(dwID, SPFUNC2);
|
|
|
|
WriteLogStruct2(dwID, SP_LINEHOLD,
|
|
dwRequestID,
|
|
(DWORD)hdCall);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEHOLD, 2))(
|
|
dwRequestID,
|
|
hdCall
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineMakeCall(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVLINE hdLine,
|
|
HTAPICALL htCall,
|
|
LPHDRVCALL lphdCall,
|
|
LPCWSTR lpszDestAddress,
|
|
DWORD dwCountryCode,
|
|
LPLINECALLPARAMS const lpCallParams
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC7) +
|
|
sizeof(HDRVCALL) +
|
|
lstrlen(lpszDestAddress) +
|
|
(lpCallParams?lpCallParams->dwTotalSize:0));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineMakeCall"));
|
|
|
|
WritePreHeader(dwID, SPFUNC7);
|
|
|
|
WriteLogStruct7(dwID, SP_LINEMAKECALL,
|
|
dwRequestID,
|
|
(DWORD)hdLine,
|
|
(DWORD)htCall,
|
|
(DWORD)lphdCall,
|
|
(DWORD)lpszDestAddress,
|
|
dwCountryCode,
|
|
(DWORD)lpCallParams);
|
|
|
|
if (lpszDestAddress)
|
|
{
|
|
WriteStruct(dwID, lstrlen(lpszDestAddress),
|
|
(LPVOID)lpszDestAddress);
|
|
}
|
|
|
|
if (lpCallParams)
|
|
{
|
|
WriteStruct(dwID, lpCallParams->dwTotalSize,
|
|
(LPVOID)lpCallParams);
|
|
}
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEMAKECALL, 7))
|
|
(
|
|
dwRequestID,
|
|
hdLine,
|
|
htCall,
|
|
lphdCall,
|
|
lpszDestAddress,
|
|
dwCountryCode,
|
|
lpCallParams
|
|
);
|
|
|
|
|
|
RepeaterDebugString((2, "Leaving TSPI_lineMakeCall - returning 0x%08lx", lResult));
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
WriteStruct(dwID, sizeof(HDRVCALL),
|
|
(LPVOID)lphdCall);
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineMonitorDigits(
|
|
HDRVCALL hdCall,
|
|
DWORD dwDigitModes
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC2));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineMonitorDigits"));
|
|
|
|
WritePreHeader(dwID, SPFUNC2);
|
|
|
|
WriteLogStruct2(dwID, SP_LINEMONITORDIGITS,
|
|
(DWORD)hdCall,
|
|
dwDigitModes);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEMONITORDIGITS, 2))(
|
|
hdCall,
|
|
dwDigitModes
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineMonitorMedia(
|
|
HDRVCALL hdCall,
|
|
DWORD dwMediaModes
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC2));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineMonitorMedia"));
|
|
|
|
WritePreHeader(dwID, SPFUNC2);
|
|
|
|
WriteLogStruct2(dwID, SP_LINEMONITORMEDIA,
|
|
(DWORD)hdCall,
|
|
dwMediaModes);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEMONITORMEDIA, 2))(
|
|
hdCall,
|
|
dwMediaModes
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineMonitorTones(
|
|
HDRVCALL hdCall,
|
|
DWORD dwToneListID,
|
|
LPLINEMONITORTONE const lpToneList,
|
|
DWORD dwNumEntries
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC4) + dwNumEntries * sizeof(LINEMONITORTONE));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineMonitorTones"));
|
|
|
|
WritePreHeader(dwID, SPFUNC4);
|
|
|
|
WriteLogStruct4(dwID, SP_LINEMONITORTONES,
|
|
(DWORD)hdCall,
|
|
dwToneListID,
|
|
(DWORD)lpToneList,
|
|
dwNumEntries);
|
|
|
|
WriteStruct(dwID, sizeof(LINEMONITORTONE) * dwNumEntries,
|
|
(LPVOID)lpToneList);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEMONITORTONES, 4))(
|
|
hdCall,
|
|
dwToneListID,
|
|
lpToneList,
|
|
dwNumEntries
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineNegotiateExtVersion(
|
|
DWORD dwDeviceID,
|
|
DWORD dwTSPIVersion,
|
|
DWORD dwLowVersion,
|
|
DWORD dwHighVersion,
|
|
LPDWORD lpdwExtVersion
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC5) + sizeof(DWORD));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineNegotiateExtVersion"));
|
|
|
|
WritePreHeader(dwID, SPFUNC5);
|
|
|
|
WriteLogStruct5(dwID, SP_LINENEGOTIATEEXTVERSION,
|
|
dwDeviceID,
|
|
dwTSPIVersion,
|
|
dwLowVersion,
|
|
dwHighVersion,
|
|
(DWORD)lpdwExtVersion);
|
|
|
|
lResult =
|
|
(* GetProcAddressHashed(SP_LINENEGOTIATEEXTVERSION, 5))(
|
|
dwDeviceID,
|
|
dwTSPIVersion,
|
|
dwLowVersion,
|
|
dwHighVersion,
|
|
lpdwExtVersion
|
|
);
|
|
|
|
|
|
DBGOUT((2, "Leaving TSPI_lineNegotiateExeVersion retcode=0x%08lx", lResult));
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
WriteStruct(dwID, sizeof(DWORD),
|
|
(LPVOID)lpdwExtVersion);
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineNegotiateTSPIVersion(
|
|
DWORD dwDeviceID,
|
|
DWORD dwLowVersion,
|
|
DWORD dwHighVersion,
|
|
LPDWORD lpdwTSPIVersion
|
|
)
|
|
{
|
|
LONG lResult = 0;
|
|
DWORD dwID;
|
|
|
|
if (!gbStarted)
|
|
{
|
|
StartMeUp();
|
|
}
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC4) + sizeof(DWORD));
|
|
|
|
WritePreHeader(dwID, SPFUNC4);
|
|
|
|
WriteLogStruct4(dwID, SP_LINENEGOTIATETSPIVERSION,
|
|
dwDeviceID,
|
|
dwLowVersion,
|
|
dwHighVersion,
|
|
(DWORD)lpdwTSPIVersion);
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineNegotiateTSPIVersion"));
|
|
|
|
/// bugbugbug!! call the *(&(^$ function
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINENEGOTIATETSPIVERSION, 4))(
|
|
dwDeviceID,
|
|
dwLowVersion,
|
|
dwHighVersion,
|
|
lpdwTSPIVersion);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
WriteStruct(dwID, sizeof(DWORD),
|
|
(LPVOID)lpdwTSPIVersion);
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineOpen(
|
|
DWORD dwDeviceID,
|
|
HTAPILINE htLine,
|
|
LPHDRVLINE lphdLine,
|
|
DWORD dwTSPIVersion,
|
|
LINEEVENT lpfnEventProc
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC5) + sizeof(HDRVLINE));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineOpen"));
|
|
|
|
glpLineEventProc32 = lpfnEventProc;
|
|
|
|
WritePreHeader(dwID, SPFUNC5);
|
|
|
|
WriteLogStruct5(dwID, SP_LINEOPEN,
|
|
dwDeviceID,
|
|
(DWORD)htLine,
|
|
(DWORD)lphdLine,
|
|
dwTSPIVersion,
|
|
(DWORD)lpfnEventProc);
|
|
|
|
lResult =
|
|
(* GetProcAddressHashed(SP_LINEOPEN, 5))(
|
|
dwDeviceID,
|
|
htLine,
|
|
lphdLine,
|
|
dwTSPIVersion,
|
|
LineEventProc
|
|
);
|
|
|
|
DBGOUT((2, "Leaving TSPI_lineOpen retcode=0x%08lx", lResult));
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
WriteStruct(dwID, sizeof(HDRVLINE),
|
|
(LPVOID)lphdLine);
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_linePark(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVCALL hdCall,
|
|
DWORD dwParkMode,
|
|
LPCWSTR lpszDirAddress,
|
|
LPVARSTRING lpNonDirAddress
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC5) +
|
|
lstrlen(lpszDirAddress) +
|
|
(lpNonDirAddress ? lpNonDirAddress->dwTotalSize : 0));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_linePark"));
|
|
|
|
WritePreHeader(dwID, SPFUNC5);
|
|
|
|
WriteLogStruct5(dwID, SP_LINEPARK,
|
|
dwRequestID,
|
|
(DWORD)hdCall,
|
|
dwParkMode,
|
|
(DWORD)lpszDirAddress,
|
|
(DWORD)lpNonDirAddress);
|
|
|
|
if (dwParkMode & LINEPARKMODE_DIRECTED)
|
|
{
|
|
if (lpszDirAddress)
|
|
{
|
|
WriteStruct(dwID, lstrlen(lpszDirAddress),
|
|
(LPVOID)lpszDirAddress);
|
|
}
|
|
}
|
|
|
|
lResult =
|
|
(* GetProcAddressHashed(SP_LINEPARK, 5))(
|
|
dwRequestID,
|
|
hdCall,
|
|
dwParkMode,
|
|
lpszDirAddress,
|
|
lpNonDirAddress);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if ((lResult >= 0) && (dwParkMode & LINEPARKMODE_NONDIRECTED))
|
|
{
|
|
if (lpNonDirAddress)
|
|
{
|
|
WriteStruct(dwID, lpNonDirAddress->dwUsedSize,
|
|
(LPVOID)lpNonDirAddress);
|
|
}
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_linePickup(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVLINE hdLine,
|
|
DWORD dwAddressID,
|
|
HTAPICALL htCall,
|
|
LPHDRVCALL lphdCall,
|
|
LPCWSTR lpszDestAddress,
|
|
LPCWSTR lpszGroupID
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC7) +
|
|
lstrlen(lpszDestAddress) +
|
|
lstrlen(lpszGroupID) +
|
|
sizeof(HDRVCALL));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_linePickup"));
|
|
|
|
WritePreHeader(dwID, SPFUNC7);
|
|
|
|
WriteLogStruct7(dwID, SP_LINEPICKUP,
|
|
dwRequestID,
|
|
(DWORD)hdLine,
|
|
(DWORD)dwAddressID,
|
|
(DWORD)htCall,
|
|
(DWORD)lphdCall,
|
|
(DWORD)lpszDestAddress,
|
|
(DWORD)lpszGroupID);
|
|
|
|
if (lpszDestAddress)
|
|
{
|
|
WriteStruct(dwID, lstrlen(lpszDestAddress),
|
|
(LPVOID)lpszDestAddress);
|
|
}
|
|
|
|
if (lpszGroupID)
|
|
{
|
|
WriteStruct(dwID, lstrlen(lpszGroupID),
|
|
(LPVOID)lpszGroupID);
|
|
}
|
|
|
|
lResult =
|
|
(* GetProcAddressHashed(SP_LINEPICKUP, 7))(
|
|
dwRequestID,
|
|
hdLine,
|
|
dwAddressID,
|
|
htCall,
|
|
lphdCall,
|
|
lpszDestAddress,
|
|
lpszGroupID);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
WriteStruct(dwID, sizeof(HDRVCALL),
|
|
(LPVOID)lphdCall);
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_linePrepareAddToConference(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVCALL hdConfCall,
|
|
HTAPICALL htConsultCall,
|
|
LPHDRVCALL lphdConsultCall,
|
|
LPLINECALLPARAMS const lpCallParams
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC5) +
|
|
(lpCallParams?lpCallParams->dwTotalSize:0) +
|
|
sizeof(HDRVCALL));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_linePrepareAddToConference"));
|
|
|
|
WritePreHeader(dwID, SPFUNC5);
|
|
|
|
WriteLogStruct5(dwID, SP_LINEPREPAREADDTOCONFERENCE,
|
|
dwRequestID,
|
|
(DWORD)hdConfCall,
|
|
(DWORD)htConsultCall,
|
|
(DWORD)lphdConsultCall,
|
|
(DWORD)lpCallParams);
|
|
|
|
if (lpCallParams)
|
|
{
|
|
WriteStruct(dwID, lpCallParams->dwTotalSize,
|
|
(LPVOID)lpCallParams);
|
|
}
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEPREPAREADDTOCONFERENCE,
|
|
5))(
|
|
dwRequestID,
|
|
hdConfCall,
|
|
htConsultCall,
|
|
lphdConsultCall,
|
|
lpCallParams);
|
|
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
WriteStruct(dwID, sizeof(HDRVCALL),
|
|
(LPVOID)lphdConsultCall);
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineRedirect(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVCALL hdCall,
|
|
LPCWSTR lpszDestAddress,
|
|
DWORD dwCountryCode
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC4) +
|
|
lstrlen(lpszDestAddress));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineRedirect"));
|
|
|
|
WritePreHeader(dwID, SPFUNC4);
|
|
|
|
WriteLogStruct4(dwID, SP_LINEREDIRECT,
|
|
dwRequestID,
|
|
(DWORD)hdCall,
|
|
(DWORD)lpszDestAddress,
|
|
dwCountryCode);
|
|
|
|
if (lpszDestAddress)
|
|
{
|
|
WriteStruct(dwID, lstrlen(lpszDestAddress),
|
|
(LPVOID)lpszDestAddress);
|
|
}
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEREDIRECT,
|
|
4))(
|
|
dwRequestID,
|
|
hdCall,
|
|
lpszDestAddress,
|
|
dwCountryCode);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineRemoveFromConference(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVCALL hdCall
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC2));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineRemoveFromConference"));
|
|
|
|
WritePreHeader(dwID, SPFUNC2);
|
|
|
|
WriteLogStruct2(dwID, SP_LINEREMOVEFROMCONFERENCE,
|
|
dwRequestID,
|
|
(DWORD)hdCall);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEREMOVEFROMCONFERENCE,
|
|
2))(
|
|
dwRequestID,
|
|
hdCall);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineSecureCall(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVCALL hdCall
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC2));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineSecureCall"));
|
|
|
|
WritePreHeader(dwID, SPFUNC2);
|
|
|
|
WriteLogStruct2(dwID, SP_LINESECURECALL,
|
|
dwRequestID,
|
|
(DWORD)hdCall);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINESECURECALL,
|
|
2))(
|
|
dwRequestID,
|
|
hdCall);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineSelectExtVersion(
|
|
HDRVLINE hdLine,
|
|
DWORD dwExtVersion
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC2));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineSelectExtVersion"));
|
|
|
|
WritePreHeader(dwID, SPFUNC2);
|
|
|
|
WriteLogStruct2(dwID, SP_LINESELECTEXTVERSION,
|
|
(DWORD)hdLine,
|
|
(DWORD)dwExtVersion);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINESELECTEXTVERSION,
|
|
2))(
|
|
hdLine,
|
|
dwExtVersion);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineSendUserUserInfo(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVCALL hdCall,
|
|
LPCSTR lpsUserUserInfo,
|
|
DWORD dwSize
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC4) + dwSize);
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineSendUserUserInfo"));
|
|
|
|
WritePreHeader(dwID, SPFUNC4);
|
|
|
|
WriteLogStruct4(dwID, SP_LINESENDUSERUSERINFO,
|
|
dwRequestID,
|
|
(DWORD)hdCall,
|
|
(DWORD)lpsUserUserInfo,
|
|
dwSize);
|
|
|
|
if (lpsUserUserInfo)
|
|
{
|
|
WriteStruct(dwID, dwSize,
|
|
(LPVOID)lpsUserUserInfo);
|
|
}
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINESENDUSERUSERINFO,
|
|
4))(
|
|
dwRequestID,
|
|
hdCall,
|
|
lpsUserUserInfo,
|
|
dwSize);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineSetAppSpecific(
|
|
HDRVCALL hdCall,
|
|
DWORD dwAppSpecific
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC2));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineSetAppSpecific"));
|
|
|
|
WritePreHeader(dwID, SPFUNC2);
|
|
|
|
WriteLogStruct2(dwID, SP_LINESETAPPSPECIFIC,
|
|
(DWORD)hdCall,
|
|
dwAppSpecific);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINESETAPPSPECIFIC, 2))(
|
|
hdCall,
|
|
dwAppSpecific
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineSetCallParams(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVCALL hdCall,
|
|
DWORD dwBearerMode,
|
|
DWORD dwMinRate,
|
|
DWORD dwMaxRate,
|
|
LPLINEDIALPARAMS const lpDialParams
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC6) + sizeof(LINEDIALPARAMS));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineSetCallParams"));
|
|
|
|
WritePreHeader(dwID, SPFUNC6);
|
|
|
|
WriteLogStruct6(dwID, SP_LINESETCALLPARAMS,
|
|
dwRequestID,
|
|
(DWORD)hdCall,
|
|
dwBearerMode,
|
|
dwMinRate,
|
|
dwMaxRate,
|
|
(DWORD)lpDialParams);
|
|
|
|
if (lpDialParams)
|
|
{
|
|
WriteStruct(dwID, sizeof(LINEDIALPARAMS),
|
|
(LPVOID)lpDialParams);
|
|
}
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINESETCALLPARAMS, 6))(
|
|
dwRequestID,
|
|
hdCall,
|
|
dwBearerMode,
|
|
dwMinRate,
|
|
dwMaxRate,
|
|
lpDialParams
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineSetCurrentLocation(
|
|
DWORD dwLocation
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC1));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineSetCurrentLocation"));
|
|
|
|
WritePreHeader(dwID, SPFUNC1);
|
|
|
|
WriteLogStruct1(dwID, SP_LINESETCURRENTLOCATION,
|
|
dwLocation);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINESETCURRENTLOCATION, 1))
|
|
(dwLocation);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineSetDefaultMediaDetection(
|
|
HDRVLINE hdLine,
|
|
DWORD dwMediaModes
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC2));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineSetDefaultMediaDetection"));
|
|
|
|
WritePreHeader(dwID, SPFUNC2);
|
|
|
|
WriteLogStruct2(dwID, SP_LINESETDEFAULTMEDIADETECTION,
|
|
(DWORD)hdLine,
|
|
dwMediaModes);
|
|
|
|
lResult = (* GetProcAddressHashed(
|
|
SP_LINESETDEFAULTMEDIADETECTION,
|
|
2
|
|
))(hdLine, dwMediaModes);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineSetDevConfig(
|
|
DWORD dwDeviceID,
|
|
LPVOID const lpDeviceConfig,
|
|
DWORD dwSize,
|
|
LPCWSTR lpszDeviceClass
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC4) +
|
|
dwSize +
|
|
lstrlen(lpszDeviceClass));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineSetDevConfig"));
|
|
|
|
WritePreHeader(dwID, SPFUNC4);
|
|
|
|
WriteLogStruct4(dwID, SP_LINESETDEVCONFIG,
|
|
(DWORD)dwDeviceID,
|
|
(DWORD)lpDeviceConfig,
|
|
dwSize,
|
|
(DWORD)lpszDeviceClass);
|
|
|
|
if (lpDeviceConfig)
|
|
{
|
|
WriteStruct(dwID, dwSize,
|
|
(LPVOID)lpDeviceConfig);
|
|
}
|
|
|
|
if (lpszDeviceClass)
|
|
{
|
|
WriteStruct(dwID, lstrlen(lpszDeviceClass),
|
|
(LPVOID)lpszDeviceClass);
|
|
}
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINESETDEVCONFIG, 4))(
|
|
dwDeviceID,
|
|
lpDeviceConfig,
|
|
dwSize,
|
|
lpszDeviceClass
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineSetMediaControl(
|
|
HDRVLINE hdLine,
|
|
DWORD dwAddressID,
|
|
HDRVCALL hdCall,
|
|
DWORD dwSelect,
|
|
LPLINEMEDIACONTROLDIGIT const lpDigitList,
|
|
DWORD dwDigitNumEntries,
|
|
LPLINEMEDIACONTROLMEDIA const lpMediaList,
|
|
DWORD dwMediaNumEntries,
|
|
LPLINEMEDIACONTROLTONE const lpToneList,
|
|
DWORD dwToneNumEntries,
|
|
LPLINEMEDIACONTROLCALLSTATE const lpCallStateList,
|
|
DWORD dwCallStateNumEntries
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC12) +
|
|
sizeof(LINEMEDIACONTROLDIGIT) * dwDigitNumEntries +
|
|
sizeof(LINEMEDIACONTROLMEDIA) * dwMediaNumEntries +
|
|
sizeof(LINEMEDIACONTROLTONE) * dwToneNumEntries +
|
|
sizeof(LINEMEDIACONTROLCALLSTATE) * dwCallStateNumEntries);
|
|
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineSetMediaControl"));
|
|
|
|
WritePreHeader(dwID, SPFUNC12);
|
|
|
|
WriteLogStruct12(dwID, SP_LINESETMEDIACONTROL,
|
|
(DWORD)hdLine,
|
|
dwAddressID,
|
|
(DWORD)hdCall,
|
|
dwSelect,
|
|
(DWORD)lpDigitList,
|
|
dwDigitNumEntries,
|
|
(DWORD)lpMediaList,
|
|
dwMediaNumEntries,
|
|
(DWORD)lpToneList,
|
|
dwToneNumEntries,
|
|
(DWORD)lpCallStateList,
|
|
dwCallStateNumEntries);
|
|
|
|
if (lpDigitList)
|
|
{
|
|
WriteStruct(dwID, sizeof(LINEMEDIACONTROLDIGIT) * dwDigitNumEntries,
|
|
(LPVOID)lpDigitList);
|
|
}
|
|
|
|
if (lpMediaList)
|
|
{
|
|
WriteStruct(dwID, sizeof(LINEMEDIACONTROLMEDIA) * dwMediaNumEntries,
|
|
(LPVOID)lpMediaList);
|
|
}
|
|
|
|
if (lpToneList)
|
|
{
|
|
WriteStruct(dwID, sizeof(LINEMEDIACONTROLTONE) * dwToneNumEntries,
|
|
(LPVOID)lpToneList);
|
|
}
|
|
|
|
if (lpCallStateList)
|
|
{
|
|
WriteStruct(dwID, sizeof(LINEMEDIACONTROLCALLSTATE) * dwCallStateNumEntries,
|
|
(LPVOID)lpCallStateList);
|
|
}
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINESETMEDIACONTROL,
|
|
12))
|
|
(hdLine,
|
|
dwAddressID,
|
|
hdCall,
|
|
dwSelect,
|
|
lpDigitList,
|
|
dwDigitNumEntries,
|
|
lpMediaList,
|
|
dwMediaNumEntries,
|
|
lpToneList,
|
|
dwToneNumEntries,
|
|
lpCallStateList,
|
|
dwCallStateNumEntries);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineSetMediaMode(
|
|
HDRVCALL hdCall,
|
|
DWORD dwMediaMode
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC2));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineSetMediaMode"));
|
|
|
|
WritePreHeader(dwID, SPFUNC2);
|
|
|
|
WriteLogStruct2(dwID, SP_LINESETMEDIAMODE,
|
|
(DWORD)hdCall,
|
|
dwMediaMode);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINESETMEDIAMODE, 2))(
|
|
hdCall,
|
|
dwMediaMode
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineSetStatusMessages(
|
|
HDRVLINE hdLine,
|
|
DWORD dwLineStates,
|
|
DWORD dwAddressStates
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC3));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineSetStatusMessages"));
|
|
|
|
WritePreHeader(dwID, SPFUNC3);
|
|
|
|
WriteLogStruct3(dwID, SP_LINESETSTATUSMESSAGES,
|
|
(DWORD)hdLine,
|
|
dwLineStates,
|
|
dwAddressStates);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINESETSTATUSMESSAGES, 3))(
|
|
hdLine,
|
|
dwLineStates,
|
|
dwAddressStates
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineSetTerminal(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVLINE hdLine,
|
|
DWORD dwAddressID,
|
|
HDRVCALL hdCall,
|
|
DWORD dwSelect,
|
|
DWORD dwTerminalModes,
|
|
DWORD dwTerminalID,
|
|
DWORD bEnable
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC8));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineSetTerminal"));
|
|
|
|
WritePreHeader(dwID, SPFUNC8);
|
|
|
|
WriteLogStruct8(dwID, SP_LINESETTERMINAL,
|
|
dwRequestID,
|
|
(DWORD)hdLine,
|
|
dwAddressID,
|
|
(DWORD)hdCall,
|
|
dwSelect,
|
|
dwTerminalModes,
|
|
dwTerminalID,
|
|
bEnable);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINESETTERMINAL,
|
|
8))(
|
|
dwRequestID,
|
|
hdLine,
|
|
dwAddressID,
|
|
hdCall,
|
|
dwSelect,
|
|
dwTerminalModes,
|
|
dwTerminalID,
|
|
bEnable);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineSetupConference(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVCALL hdCall,
|
|
HDRVLINE hdLine,
|
|
HTAPICALL htConfCall,
|
|
LPHDRVCALL lphdConfCall,
|
|
HTAPICALL htConsultCall,
|
|
LPHDRVCALL lphdConsultCall,
|
|
DWORD dwNumParties,
|
|
LPLINECALLPARAMS const lpCallParams
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC9) +
|
|
sizeof(HDRVCALL) +
|
|
sizeof(HDRVCALL));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineSetupConference"));
|
|
|
|
WritePreHeader(dwID, SPFUNC9);
|
|
|
|
WriteLogStruct9(dwID, SP_LINESETUPCONFERENCE,
|
|
dwRequestID,
|
|
(DWORD)hdCall,
|
|
(DWORD)hdLine,
|
|
(DWORD)htConfCall,
|
|
(DWORD)lphdConfCall,
|
|
(DWORD)htConsultCall,
|
|
(DWORD)lphdConsultCall,
|
|
dwNumParties,
|
|
(DWORD)lpCallParams);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINESETUPCONFERENCE,
|
|
9))(
|
|
dwRequestID,
|
|
hdCall,
|
|
hdLine,
|
|
htConfCall,
|
|
lphdConfCall,
|
|
htConsultCall,
|
|
lphdConsultCall,
|
|
dwNumParties,
|
|
lpCallParams);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
WriteStruct(dwID, sizeof(HDRVCALL),
|
|
(LPVOID)lphdConfCall);
|
|
|
|
WriteStruct(dwID, sizeof(HDRVCALL),
|
|
(LPVOID)lphdConsultCall);
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineSetupTransfer(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVCALL hdCall,
|
|
HTAPICALL htConsultCall,
|
|
LPHDRVCALL lphdConsultCall,
|
|
LPLINECALLPARAMS const lpCallParams
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC5) +
|
|
sizeof(HDRVCALL) +
|
|
(lpCallParams ? lpCallParams->dwTotalSize : 0));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineSetupTransfer"));
|
|
|
|
WritePreHeader(dwID, SPFUNC5);
|
|
|
|
WriteLogStruct5(dwID, SP_LINESETUPTRANSFER,
|
|
dwRequestID,
|
|
(DWORD)hdCall,
|
|
(DWORD)htConsultCall,
|
|
(DWORD)lphdConsultCall,
|
|
(DWORD)lpCallParams);
|
|
|
|
if (lpCallParams)
|
|
{
|
|
WriteStruct(dwID, lpCallParams->dwTotalSize,
|
|
(LPVOID)lpCallParams);
|
|
}
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINESETUPTRANSFER,
|
|
5))(
|
|
dwRequestID,
|
|
hdCall,
|
|
htConsultCall,
|
|
lphdConsultCall,
|
|
lpCallParams);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
WriteStruct(dwID, sizeof(HDRVCALL),
|
|
(LPVOID)lphdConsultCall);
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineSwapHold(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVCALL hdActiveCall,
|
|
HDRVCALL hdHeldCall
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC3));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineSwapHold"));
|
|
|
|
|
|
WritePreHeader(dwID, SPFUNC3);
|
|
|
|
WriteLogStruct3(dwID, SP_LINESWAPHOLD,
|
|
dwRequestID,
|
|
(DWORD)hdActiveCall,
|
|
(DWORD)hdHeldCall);
|
|
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINESWAPHOLD,
|
|
3))(
|
|
dwRequestID,
|
|
hdActiveCall,
|
|
hdHeldCall);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineUncompleteCall(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVLINE hdLine,
|
|
DWORD dwCompletionID
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC3));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineUncompleteCall"));
|
|
|
|
WritePreHeader(dwID, SPFUNC3);
|
|
|
|
WriteLogStruct3(dwID, SP_LINEUNCOMPLETECALL,
|
|
dwRequestID,
|
|
(DWORD)hdLine,
|
|
dwCompletionID);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEUNCOMPLETECALL,
|
|
3))(
|
|
dwRequestID,
|
|
hdLine,
|
|
dwCompletionID);
|
|
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineUnhold(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVCALL hdCall
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC2));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineUnhold"));
|
|
|
|
WritePreHeader(dwID, SPFUNC2);
|
|
|
|
WriteLogStruct2(dwID, SP_LINEUNHOLD,
|
|
dwRequestID,
|
|
(DWORD)hdCall);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINEUNHOLD,
|
|
2))(
|
|
dwRequestID,
|
|
hdCall);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineUnpark(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVLINE hdLine,
|
|
DWORD dwAddressID,
|
|
HTAPICALL htCall,
|
|
LPHDRVCALL lphdCall,
|
|
LPCWSTR lpszDestAddress
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC6) +
|
|
lstrlen(lpszDestAddress) +
|
|
sizeof(HDRVCALL));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineUnpark"));
|
|
|
|
WritePreHeader(dwID, SPFUNC6);
|
|
|
|
WriteLogStruct6(dwID, SP_LINEUNPARK,
|
|
dwRequestID,
|
|
(DWORD)hdLine,
|
|
dwAddressID,
|
|
(DWORD)htCall,
|
|
(DWORD)lphdCall,
|
|
(DWORD)lpszDestAddress);
|
|
|
|
if (lpszDestAddress)
|
|
{
|
|
WriteStruct(dwID, lstrlen(lpszDestAddress),
|
|
(LPVOID)lpszDestAddress);
|
|
}
|
|
|
|
lResult= (* GetProcAddressHashed(SP_LINEUNPARK,
|
|
6))(
|
|
dwRequestID,
|
|
hdLine,
|
|
dwAddressID,
|
|
htCall,
|
|
lphdCall,
|
|
lpszDestAddress);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
WriteStruct(dwID, sizeof(HDRVCALL),
|
|
(LPVOID)lphdCall);
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_lineReleaseUserUserInfo(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVCALL hdCall
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC2));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_lineReleaseUserUserInfo"));
|
|
|
|
WritePreHeader(dwID, SPFUNC2);
|
|
|
|
WriteLogStruct2(dwID, SP_LINERELEASEUSERUSERINFO,
|
|
(DWORD)dwRequestID,
|
|
(DWORD)hdCall);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_LINERELEASEUSERUSERINFO,
|
|
2))(
|
|
dwRequestID,
|
|
hdCall);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
// ----------------------- TSPIAPI TSPI_phone functions -----------------------
|
|
//
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneClose(
|
|
HDRVPHONE hdPhone
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC1));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneClose"));
|
|
|
|
WritePreHeader(dwID, SPFUNC1);
|
|
|
|
WriteLogStruct1(dwID, SP_PHONECLOSE,
|
|
(DWORD)hdPhone);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONECLOSE, 1))(
|
|
hdPhone
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
RepeaterDebugString((2, "Leaving TSPI_phoneClose - lResult=0x%08lx", lResult));
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneConfigDialog(
|
|
DWORD dwDeviceID,
|
|
HWND hwndOwner,
|
|
LPCWSTR lpszDeviceClass
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC3) +
|
|
lstrlen(lpszDeviceClass));
|
|
|
|
WritePreHeader(dwID, SPFUNC3);
|
|
|
|
WriteLogStruct3(dwID, SP_PHONECONFIGDIALOG,
|
|
dwDeviceID,
|
|
#ifdef WIN32
|
|
(DWORD)hwndOwner,
|
|
#else
|
|
(DWORD)MAKELONG(hwndOwner, 0),
|
|
#endif
|
|
(DWORD)lpszDeviceClass);
|
|
|
|
if (lpszDeviceClass)
|
|
{
|
|
WriteStruct(dwID, lstrlen(lpszDeviceClass),
|
|
(LPVOID)lpszDeviceClass);
|
|
}
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONECONFIGDIALOG, 3))(
|
|
dwDeviceID,
|
|
hwndOwner,
|
|
lpszDeviceClass);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneDevSpecific(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVPHONE hdPhone,
|
|
LPVOID lpParams,
|
|
DWORD dwSize
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC4) + dwSize);
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneDevSpecific"));
|
|
|
|
WritePreHeader(dwID, SPFUNC4);
|
|
|
|
WriteLogStruct4(dwID, SP_PHONEDEVSPECIFIC,
|
|
dwRequestID,
|
|
(DWORD)hdPhone,
|
|
(DWORD)lpParams,
|
|
(DWORD)dwSize);
|
|
|
|
if (lpParams)
|
|
{
|
|
WriteStruct(dwID, dwSize,
|
|
(LPVOID)lpParams);
|
|
}
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONEDEVSPECIFIC,
|
|
4))(
|
|
dwRequestID,
|
|
hdPhone,
|
|
lpParams,
|
|
dwSize);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneGetButtonInfo(
|
|
HDRVPHONE hdPhone,
|
|
DWORD dwButtonLampID,
|
|
LPPHONEBUTTONINFO lpButtonInfo
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC3) +
|
|
(lpButtonInfo ? lpButtonInfo->dwTotalSize : 0));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneGetButtonInfo"));
|
|
|
|
WritePreHeader(dwID, SPFUNC3);
|
|
|
|
WriteLogStruct3(dwID, SP_PHONEGETBUTTONINFO,
|
|
(DWORD)hdPhone,
|
|
dwButtonLampID,
|
|
(DWORD)lpButtonInfo);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONEGETBUTTONINFO,
|
|
3))(
|
|
hdPhone,
|
|
dwButtonLampID,
|
|
lpButtonInfo);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
if (lpButtonInfo)
|
|
{
|
|
WriteStruct(dwID, lpButtonInfo->dwUsedSize,
|
|
(LPVOID)lpButtonInfo);
|
|
}
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneGetData(
|
|
HDRVPHONE hdPhone,
|
|
DWORD dwDataID,
|
|
LPVOID lpData,
|
|
DWORD dwSize
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC4) + dwSize);
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneGetData"));
|
|
|
|
WritePreHeader(dwID, SPFUNC4);
|
|
|
|
WriteLogStruct4(dwID, SP_PHONEGETDATA,
|
|
(DWORD)hdPhone,
|
|
(DWORD)dwDataID,
|
|
(DWORD)lpData,
|
|
dwSize);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONEGETDATA,
|
|
4))(
|
|
hdPhone,
|
|
dwDataID,
|
|
lpData,
|
|
dwSize);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
if (lpData)
|
|
{
|
|
WriteStruct(dwID, dwSize,
|
|
lpData);
|
|
}
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneGetDevCaps(
|
|
DWORD dwDeviceID,
|
|
DWORD dwTSPIVersion,
|
|
DWORD dwExtVersion,
|
|
LPPHONECAPS lpPhoneCaps
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC4) +
|
|
(lpPhoneCaps ? lpPhoneCaps->dwTotalSize : 0));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneGetDevCaps"));
|
|
|
|
WritePreHeader(dwID, SPFUNC4);
|
|
|
|
WriteLogStruct4(dwID, SP_PHONEGETDEVCAPS,
|
|
dwDeviceID,
|
|
dwTSPIVersion,
|
|
dwExtVersion,
|
|
(DWORD)lpPhoneCaps);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONEGETDEVCAPS, 4))(
|
|
dwDeviceID,
|
|
dwTSPIVersion,
|
|
dwExtVersion,
|
|
lpPhoneCaps
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
if (lpPhoneCaps)
|
|
{
|
|
WriteStruct(dwID, lpPhoneCaps->dwUsedSize,
|
|
(LPVOID)lpPhoneCaps);
|
|
}
|
|
}
|
|
|
|
RepeaterDebugString((2, "Leaving TSPI_phoneGetDevCaps"));
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneGetDisplay(
|
|
HDRVPHONE hdPhone,
|
|
LPVARSTRING lpDisplay
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC2) +
|
|
(lpDisplay ? lpDisplay->dwTotalSize : 0));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneGetDisplay"));
|
|
|
|
WritePreHeader(dwID, SPFUNC2);
|
|
|
|
WriteLogStruct2(dwID, SP_PHONEGETDISPLAY,
|
|
(DWORD)hdPhone,
|
|
(DWORD)lpDisplay);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONEGETDISPLAY,
|
|
2))(
|
|
hdPhone,
|
|
lpDisplay);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
if (lpDisplay)
|
|
{
|
|
WriteStruct(dwID, lpDisplay->dwUsedSize,
|
|
(LPVOID)lpDisplay);
|
|
}
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneGetExtensionID(
|
|
DWORD dwDeviceID,
|
|
DWORD dwTSPIVersion,
|
|
LPPHONEEXTENSIONID lpExtensionID
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
TSPAPIPROC lpfn;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC3) + sizeof(PHONEEXTENSIONID));
|
|
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneGetExtensionID"));
|
|
|
|
WritePreHeader(dwID, SPFUNC3);
|
|
|
|
WriteLogStruct3(dwID, SP_PHONEGETEXTENSIONID,
|
|
dwDeviceID,
|
|
dwTSPIVersion,
|
|
(DWORD)lpExtensionID);
|
|
|
|
|
|
lpfn = GetProcAddressHashed(SP_PHONEGETEXTENSIONID, 3);
|
|
|
|
//
|
|
// Does this service provider export this function?
|
|
//
|
|
if (lpfn != (TSPAPIPROC)TSPI_PhoneBlank3)
|
|
{
|
|
lResult = (* lpfn)(
|
|
dwDeviceID,
|
|
dwTSPIVersion,
|
|
lpExtensionID
|
|
);
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// Nope. Fill it fulla rocks.
|
|
//
|
|
RepeaterDebugString((2, " SP# does not support TSPI_phoneGetExtensionID. (We'll zero it)"));
|
|
|
|
lpExtensionID->dwExtensionID0 = 0;
|
|
lpExtensionID->dwExtensionID1 = 0;
|
|
lpExtensionID->dwExtensionID2 = 0;
|
|
lpExtensionID->dwExtensionID3 = 0;
|
|
|
|
lResult = 0;
|
|
}
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
if (lpExtensionID)
|
|
{
|
|
WriteStruct(dwID, sizeof(PHONEEXTENSIONID),
|
|
(LPVOID)lpExtensionID);
|
|
}
|
|
}
|
|
|
|
RepeaterDebugString((2, "Leaving TSPI_phoneGetExtensionID - lResult=0x%08lx",lResult));
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneGetGain(
|
|
HDRVPHONE hdPhone,
|
|
DWORD dwHookSwitchDev,
|
|
LPDWORD lpdwGain
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC3) + sizeof(DWORD));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneGetGain"));
|
|
|
|
WritePreHeader(dwID, SPFUNC3);
|
|
|
|
WriteLogStruct3(dwID, SP_PHONEGETGAIN,
|
|
(DWORD)hdPhone,
|
|
dwHookSwitchDev,
|
|
(DWORD)lpdwGain);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONEGETGAIN, 3))(
|
|
hdPhone,
|
|
dwHookSwitchDev,
|
|
lpdwGain
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
WriteStruct(dwID, sizeof(DWORD),
|
|
(LPVOID)lpdwGain);
|
|
}
|
|
|
|
RepeaterDebugString((2, "Leaving TSPI_phoneGetGain"));
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneGetHookSwitch(
|
|
HDRVPHONE hdPhone,
|
|
LPDWORD lpdwHookSwitchDevs
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC2) + sizeof(DWORD));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneGetHookSwitch"));
|
|
|
|
WritePreHeader(dwID, SPFUNC2);
|
|
|
|
WriteLogStruct2(dwID, SP_PHONEGETHOOKSWITCH,
|
|
(DWORD)hdPhone,
|
|
(DWORD)lpdwHookSwitchDevs);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONEGETHOOKSWITCH, 2))(
|
|
hdPhone,
|
|
lpdwHookSwitchDevs
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
WriteStruct(dwID, sizeof(DWORD),
|
|
(LPVOID)lpdwHookSwitchDevs);
|
|
}
|
|
|
|
RepeaterDebugString((2, "Leaving TSPI_phoneGetHoosSwitch"));
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneGetIcon(
|
|
DWORD dwDeviceID,
|
|
LPCWSTR lpszDeviceClass,
|
|
LPHICON lphIcon
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC3) +
|
|
sizeof(HICON) +
|
|
lstrlen(lpszDeviceClass));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneGetIcon"));
|
|
|
|
WritePreHeader(dwID, SPFUNC3);
|
|
|
|
WriteLogStruct3(dwID, SP_PHONEGETICON,
|
|
dwDeviceID,
|
|
(DWORD)lpszDeviceClass,
|
|
(DWORD)lphIcon);
|
|
|
|
if (lpszDeviceClass)
|
|
{
|
|
WriteStruct(dwID, lstrlen(lpszDeviceClass),
|
|
(LPVOID)lpszDeviceClass);
|
|
}
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONEGETICON, 3))(
|
|
dwDeviceID,
|
|
lpszDeviceClass,
|
|
lphIcon
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >= 0)
|
|
{
|
|
WriteStruct(dwID, sizeof(HICON),
|
|
(LPVOID)lphIcon);
|
|
}
|
|
|
|
RepeaterDebugString((2, "Leaving TSPI_phoneGetIcon"));
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneGetID(
|
|
HDRVPHONE hdPhone,
|
|
LPVARSTRING lpDeviceID,
|
|
LPCWSTR lpszDeviceClass
|
|
#if (TAPI_CURRENT_VERSION >= 0x00020000)
|
|
,
|
|
HANDLE hTargetProcess
|
|
#endif
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC4) +
|
|
lstrlen(lpszDeviceClass) +
|
|
(lpDeviceID ? lpDeviceID->dwTotalSize : 0));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneGetID"));
|
|
|
|
#if (TAPI_CURRENT_VERSION >= 0x00020000)
|
|
WritePreHeader(dwID, SPFUNC4);
|
|
|
|
WriteLogStruct4(dwID, SP_PHONEGETID,
|
|
(DWORD)hdPhone,
|
|
(DWORD)lpDeviceID,
|
|
(DWORD)lpszDeviceClass,
|
|
(DWORD)hTargetProcess
|
|
);
|
|
#else
|
|
WritePreHeader(dwID, SPFUNC3);
|
|
|
|
WriteLogStruct3(dwID, SP_PHONEGETID,
|
|
(DWORD)hdPhone,
|
|
(DWORD)lpDeviceID,
|
|
(DWORD)lpszDeviceClass
|
|
);
|
|
#endif
|
|
|
|
|
|
if (lpszDeviceClass)
|
|
{
|
|
WriteStruct(dwID, lstrlen(lpszDeviceClass),
|
|
(LPVOID)lpszDeviceClass);
|
|
}
|
|
|
|
#if (TAPI_CURRENT_VERSION >= 0x00020000)
|
|
lResult = (* GetProcAddressHashed(SP_PHONEGETID, 4))(
|
|
hdPhone,
|
|
lpDeviceID,
|
|
lpszDeviceClass,
|
|
hTargetProcess
|
|
);
|
|
#else
|
|
lResult = (* GetProcAddressHashed(SP_PHONEGETID, 3))(
|
|
hdPhone,
|
|
lpDeviceID,
|
|
lpszDeviceClass
|
|
);
|
|
#endif
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >=0)
|
|
{
|
|
if (lpDeviceID)
|
|
{
|
|
WriteStruct(dwID, lpDeviceID->dwUsedSize,
|
|
(LPVOID)lpDeviceID);
|
|
}
|
|
}
|
|
|
|
RepeaterDebugString((2, "Leaving TSPI_phoneGetID - lResult=0x%08lx",
|
|
lResult));
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneGetLamp(
|
|
HDRVPHONE hdPhone,
|
|
DWORD dwButtonLampID,
|
|
LPDWORD lpdwLampMode
|
|
)
|
|
{
|
|
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC3) + sizeof(DWORD));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneGetLamp"));
|
|
|
|
WritePreHeader(dwID, SPFUNC3);
|
|
|
|
WriteLogStruct3(dwID, SP_PHONEGETLAMP,
|
|
(DWORD)hdPhone,
|
|
dwButtonLampID,
|
|
(DWORD)lpdwLampMode);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONEGETLAMP,
|
|
3))(
|
|
hdPhone,
|
|
dwButtonLampID,
|
|
lpdwLampMode);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >=0)
|
|
{
|
|
WriteStruct(dwID, sizeof(DWORD),
|
|
(LPVOID)lpdwLampMode);
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneGetRing(
|
|
HDRVPHONE hdPhone,
|
|
LPDWORD lpdwRingMode,
|
|
LPDWORD lpdwVolume
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC3) + sizeof(DWORD) + sizeof(DWORD));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneGetRing"));
|
|
|
|
WritePreHeader(dwID, SPFUNC3);
|
|
|
|
WriteLogStruct3(dwID, SP_PHONEGETRING,
|
|
(DWORD)hdPhone,
|
|
(DWORD)lpdwRingMode,
|
|
(DWORD)lpdwVolume);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONEGETRING,
|
|
3))(
|
|
hdPhone,
|
|
lpdwRingMode,
|
|
lpdwVolume);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >=0)
|
|
{
|
|
WriteStruct(dwID, sizeof(DWORD),
|
|
(LPVOID)lpdwRingMode);
|
|
|
|
WriteStruct(dwID, sizeof(DWORD),
|
|
(LPVOID)lpdwVolume);
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneGetStatus(
|
|
HDRVPHONE hdPhone,
|
|
LPPHONESTATUS lpPhoneStatus
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK +
|
|
sizeof(LOGSPFUNC2) +
|
|
(lpPhoneStatus ? lpPhoneStatus->dwTotalSize : 0));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneGetStatus"));
|
|
|
|
WritePreHeader(dwID, SPFUNC2);
|
|
|
|
WriteLogStruct2(dwID, SP_PHONEGETSTATUS,
|
|
(DWORD)hdPhone,
|
|
(DWORD)lpPhoneStatus);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONEGETSTATUS, 2))(
|
|
hdPhone,
|
|
lpPhoneStatus
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >=0)
|
|
{
|
|
if (lpPhoneStatus)
|
|
{
|
|
WriteStruct(dwID, lpPhoneStatus->dwUsedSize,
|
|
(LPVOID)lpPhoneStatus);
|
|
}
|
|
}
|
|
|
|
RepeaterDebugString((2, "Leaving TSPI_phoneGetStatus - lResult=0x%08lx",
|
|
lResult));
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneGetVolume(
|
|
HDRVPHONE hdPhone,
|
|
DWORD dwHookSwitchDev,
|
|
LPDWORD lpdwVolume
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC3) + sizeof(DWORD));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneGetVolume"));
|
|
|
|
WritePreHeader(dwID, SPFUNC3);
|
|
|
|
WriteLogStruct3(dwID, SP_PHONEGETVOLUME,
|
|
(DWORD)hdPhone,
|
|
dwHookSwitchDev,
|
|
(DWORD)lpdwVolume);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONEGETVOLUME, 3))(
|
|
hdPhone,
|
|
dwHookSwitchDev,
|
|
lpdwVolume
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >=0)
|
|
{
|
|
WriteStruct(dwID, sizeof(DWORD),
|
|
(LPVOID)lpdwVolume);
|
|
}
|
|
|
|
RepeaterDebugString((2, "Leaving TSPI_phoneGetVolume - lResult=0x%08lx",
|
|
lResult));
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneNegotiateExtVersion(
|
|
DWORD dwDeviceID,
|
|
DWORD dwTSPIVersion,
|
|
DWORD dwLowVersion,
|
|
DWORD dwHighVersion,
|
|
LPDWORD lpdwExtVersion
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
TSPAPIPROC lpfn;
|
|
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC5) + sizeof(DWORD));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneNegotiateExtVersion"));
|
|
|
|
WritePreHeader(dwID, SPFUNC5);
|
|
|
|
WriteLogStruct5(dwID, SP_PHONENEGOTIATEEXTVERSION,
|
|
dwDeviceID,
|
|
dwTSPIVersion,
|
|
dwLowVersion,
|
|
dwHighVersion,
|
|
(DWORD)lpdwExtVersion);
|
|
|
|
lpfn = GetProcAddressHashed(SP_PHONENEGOTIATEEXTVERSION,
|
|
5);
|
|
|
|
if (lpfn)
|
|
{
|
|
lResult = (*lpfn)(
|
|
dwDeviceID,
|
|
dwTSPIVersion,
|
|
dwLowVersion,
|
|
dwHighVersion,
|
|
lpdwExtVersion);
|
|
}
|
|
else
|
|
{
|
|
lResult = PHONEERR_OPERATIONUNAVAIL;
|
|
}
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >=0)
|
|
{
|
|
WriteStruct(dwID, sizeof(DWORD),
|
|
(LPVOID)lpdwExtVersion);
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneNegotiateTSPIVersion(
|
|
DWORD dwDeviceID,
|
|
DWORD dwLowVersion,
|
|
DWORD dwHighVersion,
|
|
LPDWORD lpdwTSPIVersion
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC4) + sizeof(DWORD));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneNegotiateTSPIVersion"));
|
|
|
|
WritePreHeader(dwID, SPFUNC4);
|
|
|
|
WriteLogStruct4(dwID, SP_PHONENEGOTIATETSPIVERSION,
|
|
dwDeviceID,
|
|
dwLowVersion,
|
|
dwHighVersion,
|
|
(DWORD)lpdwTSPIVersion);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONENEGOTIATETSPIVERSION, 4))(
|
|
dwDeviceID,
|
|
dwLowVersion,
|
|
dwHighVersion,
|
|
lpdwTSPIVersion);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >=0)
|
|
{
|
|
WriteStruct(dwID, sizeof(DWORD),
|
|
(LPVOID)lpdwTSPIVersion);
|
|
}
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneOpen(
|
|
DWORD dwDeviceID,
|
|
HTAPIPHONE htPhone,
|
|
LPHDRVPHONE lphdPhone,
|
|
DWORD dwTSPIVersion,
|
|
PHONEEVENT lpfnEventProc
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC5) + sizeof(HDRVPHONE));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneOpen"));
|
|
|
|
glpPhoneEventProc32 = lpfnEventProc;
|
|
|
|
WritePreHeader(dwID, SPFUNC5);
|
|
|
|
WriteLogStruct5(dwID, SP_PHONEOPEN,
|
|
dwDeviceID,
|
|
(DWORD)htPhone,
|
|
(DWORD)lphdPhone,
|
|
dwTSPIVersion,
|
|
(DWORD)PhoneEventProc);
|
|
lResult =
|
|
(* GetProcAddressHashed(SP_PHONEOPEN, 5))(
|
|
dwDeviceID,
|
|
htPhone,
|
|
lphdPhone,
|
|
dwTSPIVersion,
|
|
PhoneEventProc
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
if (lResult >=0)
|
|
{
|
|
WriteStruct(dwID, sizeof(HDRVPHONE),
|
|
(LPVOID)lphdPhone);
|
|
}
|
|
|
|
RepeaterDebugString((2, "Leaving TSPI_phoneOpen - lResult=0x%08lx", lResult));
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneSelectExtVersion(
|
|
HDRVPHONE hdPhone,
|
|
DWORD dwExtVersion
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC2));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneSelectExtVersion"));
|
|
|
|
WritePreHeader(dwID, SPFUNC2);
|
|
|
|
WriteLogStruct2(dwID, SP_PHONESELECTEXTVERSION,
|
|
(DWORD)hdPhone,
|
|
dwExtVersion);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONESELECTEXTVERSION,
|
|
2))(
|
|
hdPhone,
|
|
dwExtVersion);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneSetButtonInfo(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVPHONE hdPhone,
|
|
DWORD dwButtonLampID,
|
|
LPPHONEBUTTONINFO const lpButtonInfo
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC4));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneSetButtonInfo"));
|
|
|
|
WritePreHeader(dwID, SPFUNC4);
|
|
|
|
WriteLogStruct4(dwID, SP_PHONESETBUTTONINFO,
|
|
dwRequestID,
|
|
(DWORD)hdPhone,
|
|
dwButtonLampID,
|
|
(DWORD)lpButtonInfo);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONESETBUTTONINFO,
|
|
4))(
|
|
dwRequestID,
|
|
hdPhone,
|
|
dwButtonLampID,
|
|
lpButtonInfo);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneSetData(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVPHONE hdPhone,
|
|
DWORD dwDataID,
|
|
LPVOID const lpData,
|
|
DWORD dwSize
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC5) + dwSize);
|
|
|
|
WritePreHeader(dwID, SPFUNC5);
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneSetData"));
|
|
|
|
WriteLogStruct5(dwID, SP_PHONESETDATA,
|
|
dwRequestID,
|
|
(DWORD)hdPhone,
|
|
dwDataID,
|
|
(DWORD)lpData,
|
|
dwSize);
|
|
|
|
if (lpData)
|
|
{
|
|
WriteStruct(dwID,
|
|
dwSize,
|
|
(LPVOID)lpData);
|
|
}
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONESETDATA,
|
|
5))(
|
|
dwRequestID,
|
|
hdPhone,
|
|
dwDataID,
|
|
lpData,
|
|
dwSize);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneSetDisplay(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVPHONE hdPhone,
|
|
DWORD dwRow,
|
|
DWORD dwColumn,
|
|
LPCWSTR lpsDisplay,
|
|
DWORD dwSize
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC6) + dwSize);
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneSetDisplay"));
|
|
|
|
WritePreHeader(dwID, SPFUNC6);
|
|
|
|
WriteLogStruct6(dwID, SP_PHONESETDISPLAY,
|
|
dwRequestID,
|
|
(DWORD)hdPhone,
|
|
dwRow,
|
|
dwColumn,
|
|
(DWORD)lpsDisplay,
|
|
dwSize);
|
|
|
|
if (lpsDisplay)
|
|
{
|
|
WriteStruct(dwID,
|
|
dwSize,
|
|
(LPVOID)lpsDisplay);
|
|
}
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONESETDISPLAY,
|
|
6))(
|
|
dwRequestID,
|
|
hdPhone,
|
|
dwRow,
|
|
dwColumn,
|
|
lpsDisplay,
|
|
dwSize);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneSetGain(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVPHONE hdPhone,
|
|
DWORD dwHookSwitchDev,
|
|
DWORD dwGain
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC4));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneSetGain"));
|
|
|
|
WritePreHeader(dwID, SPFUNC4);
|
|
|
|
WriteLogStruct4(dwID, SP_PHONESETGAIN,
|
|
dwRequestID,
|
|
(DWORD)hdPhone,
|
|
dwHookSwitchDev,
|
|
dwGain);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONESETGAIN, 4))(
|
|
dwRequestID,
|
|
hdPhone,
|
|
dwHookSwitchDev,
|
|
dwGain
|
|
);
|
|
|
|
RepeaterDebugString((2, "Leaving TSPI_phoneSetGain - lResult=0x%08lx",
|
|
lResult));
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneSetHookSwitch(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVPHONE hdPhone,
|
|
DWORD dwHookSwitchDevs,
|
|
DWORD dwHookSwitchMode
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC4));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneSetHookSwitch"));
|
|
|
|
WritePreHeader(dwID, SPFUNC4);
|
|
|
|
WriteLogStruct4(dwID, SP_PHONESETHOOKSWITCH,
|
|
dwRequestID,
|
|
(DWORD)hdPhone,
|
|
dwHookSwitchDevs,
|
|
dwHookSwitchMode);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONESETHOOKSWITCH, 4))(
|
|
dwRequestID,
|
|
hdPhone,
|
|
dwHookSwitchDevs,
|
|
dwHookSwitchMode
|
|
);
|
|
|
|
RepeaterDebugString((2, "Leaving TSPI_phoneSetHookSwitch - lResult=0x%08lx",
|
|
lResult));
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneSetLamp(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVPHONE hdPhone,
|
|
DWORD dwButtonLampID,
|
|
DWORD dwLampMode
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC4));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneSetLamp"));
|
|
|
|
WritePreHeader(dwID, SPFUNC4);
|
|
|
|
WriteLogStruct4(dwID, SP_PHONESETLAMP,
|
|
dwRequestID,
|
|
(DWORD)hdPhone,
|
|
(DWORD)dwButtonLampID,
|
|
dwLampMode);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONESETLAMP,
|
|
4))(
|
|
dwRequestID,
|
|
hdPhone,
|
|
dwButtonLampID,
|
|
dwLampMode);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneSetRing(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVPHONE hdPhone,
|
|
DWORD dwRingMode,
|
|
DWORD dwVolume
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC4));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneSetRing"));
|
|
|
|
WritePreHeader(dwID, SPFUNC4);
|
|
|
|
WriteLogStruct4(dwID, SP_PHONESETRING,
|
|
dwRequestID,
|
|
(DWORD)hdPhone,
|
|
dwRingMode,
|
|
dwVolume);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONESETRING,
|
|
4))(
|
|
dwRequestID,
|
|
hdPhone,
|
|
dwRingMode,
|
|
dwVolume);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneSetStatusMessages(
|
|
HDRVPHONE hdPhone,
|
|
DWORD dwPhoneStates,
|
|
DWORD dwButtonModes,
|
|
DWORD dwButtonStates
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC4));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneSetStatusMessages"));
|
|
|
|
WritePreHeader(dwID, SPFUNC4);
|
|
|
|
WriteLogStruct4(dwID, SP_PHONESETSTATUSMESSAGES,
|
|
(DWORD)hdPhone,
|
|
dwPhoneStates,
|
|
dwButtonModes,
|
|
dwButtonStates);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONESETSTATUSMESSAGES, 4))(
|
|
hdPhone,
|
|
dwPhoneStates,
|
|
dwButtonModes,
|
|
dwButtonStates
|
|
);
|
|
|
|
RepeaterDebugString((2, "Leaving TSPI_phoneSetStatusMessages"));
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_phoneSetVolume(
|
|
DRV_REQUESTID dwRequestID,
|
|
HDRVPHONE hdPhone,
|
|
DWORD dwHookSwitchDev,
|
|
DWORD dwVolume
|
|
)
|
|
{
|
|
LONG lResult;
|
|
DWORD dwID;
|
|
|
|
GetChunkID(&dwID);
|
|
AllocChunk(dwID, NORMALCHUNK + sizeof(LOGSPFUNC4));
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_phoneSetVolume"));
|
|
|
|
WritePreHeader(dwID, SPFUNC4);
|
|
|
|
WriteLogStruct4(dwID, SP_PHONESETVOLUME,
|
|
dwRequestID,
|
|
(DWORD)hdPhone,
|
|
dwHookSwitchDev,
|
|
dwVolume);
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PHONESETVOLUME, 4))(
|
|
dwRequestID,
|
|
hdPhone,
|
|
dwHookSwitchDev,
|
|
dwVolume
|
|
);
|
|
|
|
WritePostStruct(dwID, lResult);
|
|
|
|
RepeaterDebugString((2, "Leaving TSPI_phoneSetVolume - lResult=0x%08lx",
|
|
lResult));
|
|
|
|
ReleaseID(dwID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
|
|
|
|
//
|
|
// ----------------------- TSPIAPI TSPI_provider functions --------------------
|
|
//
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_providerConfig(
|
|
HWND hwndOwner,
|
|
DWORD dwPermanentProviderID
|
|
)
|
|
{
|
|
LONG lResult;
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PROVIDERCONFIG, 2))
|
|
(hwndOwner,
|
|
dwPermanentProviderID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_providerInit(
|
|
DWORD dwTSPIVersion,
|
|
DWORD dwPermanentProviderID,
|
|
DWORD dwLineDeviceIDBase,
|
|
DWORD dwPhoneDeviceIDBase,
|
|
DWORD dwNumLines,
|
|
DWORD dwNumPhones,
|
|
ASYNC_COMPLETION lpfnCompletionProc
|
|
#if (TAPI_CURRENT_VERSION >= 0x00020000)
|
|
,
|
|
LPDWORD lpdwTSPIOptions
|
|
#endif
|
|
)
|
|
{
|
|
LONG lResult;
|
|
|
|
if (!gbStarted)
|
|
{
|
|
StartMeUp();
|
|
}
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_providerInit"));
|
|
|
|
glpAsyncCompletionProc32 = lpfnCompletionProc;
|
|
|
|
|
|
#if (TAPI_CURRENT_VERSION >= 0x00020000)
|
|
lResult = (* GetProcAddressHashed(SP_PROVIDERINIT, 8))
|
|
(
|
|
dwTSPIVersion,
|
|
dwPermanentProviderID,
|
|
dwLineDeviceIDBase,
|
|
dwPhoneDeviceIDBase,
|
|
dwNumLines,
|
|
dwNumPhones,
|
|
AsyncCompletionProc,
|
|
lpdwTSPIOptions
|
|
);
|
|
#else
|
|
lResult = (* GetProcAddressHashed( SP_PROVIDERINIT, 7))
|
|
(
|
|
dwTSPIVersion,
|
|
dwPermanentProvider,
|
|
dwLineDeviceIDBase,
|
|
dwPhoneDeviceIDBase,
|
|
dwNumLines,
|
|
dwNumPhones,
|
|
AsyncCompletionProc
|
|
);
|
|
#endif
|
|
|
|
DBGOUT((1, "leaving provider init"));
|
|
|
|
return lResult;
|
|
}
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_providerInstall(
|
|
HWND hwndOwner,
|
|
DWORD dwPermanentProviderID
|
|
)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_providerRemove(
|
|
HWND hwndOwner,
|
|
DWORD dwPermanentProviderID
|
|
)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_providerShutdown(
|
|
DWORD dwTSPIVersion
|
|
#if (TAPI_CURRENT_VERSION >= 0x00020000)
|
|
,
|
|
DWORD dwPermanentProviderID
|
|
#endif
|
|
)
|
|
{
|
|
RepeaterDebugString((2, "Entering TSPI_providerShutdown"));
|
|
|
|
#if (TAPI_CURRENT_VERSION >= 0x00020000)
|
|
(* GetProcAddressHashed(SP_PROVIDERSHUTDOWN, 2))(
|
|
dwTSPIVersion,
|
|
dwPermanentProviderID
|
|
);
|
|
#else
|
|
(* GetProcAddressHashed(SP_PROVIDERSHUTDOWN, 1))(
|
|
dwTSPIVersion
|
|
);
|
|
#endif
|
|
|
|
// FreeLibrary(hProvider);
|
|
|
|
// MYFREE(lpfnProcAddress);
|
|
|
|
return(ERR_NONE);
|
|
}
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_providerEnumDevices(
|
|
DWORD dwPermanentProviderID,
|
|
LPDWORD lpdwNumLines,
|
|
LPDWORD lpdwNumPhones,
|
|
HPROVIDER hProvider,
|
|
LINEEVENT lpfnLineCreateProc,
|
|
PHONEEVENT lpfnPhoneCreateProc
|
|
)
|
|
{
|
|
TSPAPIPROC lpfn;
|
|
|
|
if (!gbStarted)
|
|
{
|
|
StartMeUp();
|
|
}
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_providerEnumDevices"));
|
|
|
|
|
|
glpLineEventProc32 = lpfnLineCreateProc;
|
|
glpPhoneEventProc32 = lpfnPhoneCreateProc;
|
|
|
|
// InitializeSPs();
|
|
|
|
lpfn = GetProcAddressHashed(SP_PROVIDERENUMDEVICES, 6);
|
|
|
|
if (lpfn != (TSPAPIPROC)TSPI_LineBlank6)
|
|
{
|
|
DBGOUT((1, "calling providerenumdevices"));
|
|
|
|
(* lpfn)(
|
|
dwPermanentProvider,
|
|
&dwNumLines,
|
|
&dwNumPhones,
|
|
hProvider,
|
|
LineEventProc,
|
|
PhoneEventProc
|
|
);
|
|
|
|
*lpdwNumLines = dwNumLines;
|
|
*lpdwNumPhones = dwNumPhones;
|
|
}
|
|
else
|
|
{
|
|
DBGOUT((1, "failed to get entry"));
|
|
}
|
|
|
|
DBGOUT((2, " TSPI_providerEnumDevices: #lines= %d #phones= %d",
|
|
*lpdwNumLines,
|
|
*lpdwNumPhones));
|
|
|
|
return(ERR_NONE);
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_providerCreateLineDevice(
|
|
DWORD dwTempID,
|
|
DWORD dwDeviceID
|
|
)
|
|
{
|
|
LONG lResult;
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PROVIDERCREATELINEDEVICE, 2))(
|
|
dwTempID,
|
|
dwDeviceID);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_providerCreatePhoneDevice(
|
|
DWORD dwTempID,
|
|
DWORD dwDeviceID
|
|
)
|
|
{
|
|
LONG lResult;
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PROVIDERCREATEPHONEDEVICE, 2))(
|
|
dwTempID,
|
|
dwDeviceID);
|
|
|
|
return lResult;
|
|
|
|
}
|
|
|
|
#if (TAPI_CURRENT_VERSION >= 0x00020000)
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_providerFreeDialogInstance(
|
|
HDRVDIALOGINSTANCE hdDlgInst
|
|
)
|
|
{
|
|
LONG lResult;
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_providerFreeDialogInstance"));
|
|
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PROVIDERFREEDIALOGINSTANCE,1))(
|
|
hdDlgInst);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_providerGenericDialogData(
|
|
DWORD dwObjectID,
|
|
DWORD dwObjectType,
|
|
LPVOID lpParams,
|
|
DWORD dwSize
|
|
)
|
|
{
|
|
LONG lResult;
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_providerGenericDialogData"));
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PROVIDERGENERICDIALOGDATA, 4))(
|
|
dwObjectID,
|
|
dwObjectType,
|
|
lpParams,
|
|
dwSize);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
|
|
LONG
|
|
TSPIAPI
|
|
TSPI_providerUIIdentify(
|
|
LPWSTR lpszUIDLLName
|
|
)
|
|
{
|
|
LONG lResult;
|
|
|
|
RepeaterDebugString((2, "Entering TSPI_providerUIIdentify"));
|
|
|
|
lResult = (* GetProcAddressHashed(SP_PROVIDERUIIDENTIFY, 1))(
|
|
lpszUIDLLName);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
#endif // tapi 2.0
|
|
|
|
#ifdef WIN32
|
|
|
|
BOOL WINAPI DllMain(
|
|
HANDLE hModule,
|
|
DWORD dwReason,
|
|
DWORD dwReserved
|
|
)
|
|
{
|
|
|
|
DBGOUT((1, "DllEntryPoint entered reason=%lx\r\n", dwReason));
|
|
|
|
|
|
if ( dwReason == 1 )
|
|
{
|
|
// StartMeUp();
|
|
// don't do nothin'
|
|
}
|
|
|
|
if (dwReason == 0)
|
|
{
|
|
if (gbStarted)
|
|
{
|
|
gfTerminateNow = TRUE;
|
|
|
|
WaitForSingleObject(ghLoggingThread,
|
|
2000);
|
|
|
|
CloseHandle(ghLoggingThread);
|
|
DeleteCriticalSection(&gcsLogging);
|
|
DeleteCriticalSection(&gcsID);
|
|
FreeLibrary(hProvider);
|
|
|
|
MYFREE(lpfnProcAddress);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return(1); // success
|
|
}
|
|
|
|
#else
|
|
|
|
int
|
|
FAR
|
|
PASCAL
|
|
LibMain(HANDLE hInstance,
|
|
WORD wDataSegment,
|
|
WORD wHeapSize,
|
|
LPSTR lpszCmdLine)
|
|
{
|
|
StartMeUp();
|
|
return TRUE;
|
|
}
|
|
|
|
#endif
|