Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

3659 lines
97 KiB

/* TSP3216S.C
Copyright 1995 (C) Microsoft Corporation
32-bit TAPI service provider to act as a cover for a system's 16-bit SPs
16-bit part: TSP3216S.DLL
32-bit part: TSP3216L.DLL
t-jereh 20-July-1995
TODO:
1) allow debug levels
2) if OOM in InitializeSPs(), fail
3) other OOM errors
*/
#include <windows.h>
#include <windowsx.h>
#include <tapi.h>
#include <tspi.h>
#include "tsp3216.h"
#include "tsp3216s.h"
#include "debug.h"
//#include <wownt16.h>
#undef TSPIAPI
#define TSPIAPI PASCAL __loadds
#define TSPAPI _export _far _pascal __loadds
typedef LONG (TSPAPI* TSPAPIPROC)(void);
#if DBG
#define TSP3216SDebugString(_x_) DbgPrt _x_
//#define TSP3216SDebugString(_x_) TSP3216SOutputDebug _x_
#else
#define TSP3216SDebugString(_x_)
#endif
#define THIS_FUNCTION_UNDER_CONSTRUCTION (LONG)LINEERR_OPERATIONUNAVAIL
#define THIS_PHONEFUNCTION_UNDER_CONSTRUCTION (LONG)PHONEERR_OPERATIONUNAVAIL
// a default return value so that the compiler doesn't
// whine about missing return values in incomplete functions
// globals
DWORD FAR PASCAL ghInst32; // handle into TSP3216L.DLL
HINSTANCE ghThisInst; //This hinst
HWND ghWnd = NULL; //hWnd of TSP3216L's window.
//***************************************************************************
int NumProviders = 0;
DWORD gdwPPID;
HINSTANCE FAR * hProviders = NULL; // array of handles to providers
TSPAPIPROC FAR * lpfnProcAddress = NULL;
DWORD FAR * dwPermanentProviderIDArray;
DWORD FAR * dwNumLinesArray = NULL; // dwNumLinesArray[1] is how many
DWORD FAR * dwNumPhonesArray = NULL; // lines are on provider 1
DWORD gdwLineDeviceIDBase;
DWORD gdwPhoneDeviceIDBase;
FARPROC glpLineEventProc32, glpPhoneEventProc32;
FARPROC glpLineCreateProc32, glpPhoneCreateProc32;
FARPROC glpAsyncCompletionProc32 = NULL;
const char far szINIfilename[] = "TELEPHON.INI";
#define BOGUS_REQUEST_ID (0xfffffffd)
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_LineBlank1(
DWORD dwBlank1
)
{
TSP3216SDebugString((2, "Entering/leaving TSPI_LineBlank1 - lResult=LINEERR_OPERATIONUNAVAIL"));
return LINEERR_OPERATIONUNAVAIL;
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_LineBlank2(
DWORD dwBlank1,
DWORD dwBlank2
)
{
TSP3216SDebugString((2, "Entering/leaving TSPI_LineBlank2 - lResult=LINEERR_OPERATIONUNAVAIL"));
return LINEERR_OPERATIONUNAVAIL;
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_LineBlank3(
DWORD dwBlank1,
DWORD dwBlank2,
DWORD dwBlank3
)
{
TSP3216SDebugString((2, "Entering/leaving TSPI_LineBlank3 - lResult=LINEERR_OPERATIONUNAVAIL"));
return LINEERR_OPERATIONUNAVAIL;
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_LineBlank4(
DWORD dwBlank1,
DWORD dwBlank2,
DWORD dwBlank3,
DWORD dwBlank4
)
{
TSP3216SDebugString((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
)
{
TSP3216SDebugString((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
)
{
TSP3216SDebugString((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
)
{
TSP3216SDebugString((2, "Entering/leaving TSPI_LineBlank7 - lResult=LINEERR_OPERATIONUNAVAIL"));
return LINEERR_OPERATIONUNAVAIL;
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_PhoneBlank1(
DWORD dwBlank1
)
{
TSP3216SDebugString((2, "Entering/leaving TSPI_PhoneBlank1 - lResult=PHONEERR_OPERATIONUNAVAIL"));
return PHONEERR_OPERATIONUNAVAIL;
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_PhoneBlank2(
DWORD dwBlank1,
DWORD dwBlank2
)
{
TSP3216SDebugString((2, "Entering/leaving TSPI_PhoneBlank2 - lResult=PHONEERR_OPERATIONUNAVAIL"));
return PHONEERR_OPERATIONUNAVAIL;
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_PhoneBlank3(
DWORD dwBlank1,
DWORD dwBlank2,
DWORD dwBlank3
)
{
TSP3216SDebugString((2, "Entering/leaving TSPI_PhoneBlank3 - lResult=PHONEERR_OPERATIONUNAVAIL"));
return PHONEERR_OPERATIONUNAVAIL;
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_PhoneBlank4(
DWORD dwBlank1,
DWORD dwBlank2,
DWORD dwBlank3,
DWORD dwBlank4
)
{
TSP3216SDebugString((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
)
{
TSP3216SDebugString((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
)
{
TSP3216SDebugString((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
)
{
TSP3216SDebugString((2, "Entering/leaving TSPI_PhoneBlank7 - lResult=PHONEERR_OPERATIONUNAVAIL"));
return PHONEERR_OPERATIONUNAVAIL;
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
// function definitions
#ifdef DEBUG
VOID TSP3216SOutputDebug(int level, LPSTR errString)
{
char outString[1024];
// if(level <= ???)
{
wsprintf(outString, "TSP3216S:(%d) %s\r\n", level, errString);
OutputDebugString(outString);
}
}
#endif
VOID
InitializeSPs(VOID)
{
int iProvider;
int iCurProvider;
char LibFileName[MAXBUFSIZE];
char szBuffer[MAXBUFSIZE];
// ghInst32 = LoadLibraryEx32("TSP3216L.DLL", NULL, 0);
//
// glpLineEventProc32 = GetProcAddress32(ghInst32, "LineEventProc32");
// glpPhoneEventProc32 = GetProcAddress32(ghInst32, "PhoneEventProc32");
// glpAsyncCompletionProc32 = GetProcAddress32(
// ghInst32,
// "AsyncCompletionProc32"
// );
// glpLineCreateProc32 = GetProcAddress32(ghInst32, "LineCreateProc32");
// glpPhoneCreateProc32 = GetProcAddress32(ghInst32, "PhoneCreateProc32");
NumProviders = GetPrivateProfileInt(
"Providers",
"NumProviders",
0, // default
&szINIfilename[0]
);
dwPermanentProviderIDArray
= (DWORD FAR *)GlobalAllocPtr(GPTR, NumProviders * sizeof(DWORD));
dwNumLinesArray
= (DWORD FAR *)GlobalAllocPtr(GPTR, NumProviders * sizeof(DWORD));
dwNumPhonesArray
= (DWORD FAR *)GlobalAllocPtr(GPTR, NumProviders * sizeof(DWORD));
hProviders =
(HINSTANCE FAR *)GlobalAllocPtr(GPTR, NumProviders * sizeof(HINSTANCE));
lpfnProcAddress = (TSPAPIPROC FAR *)GlobalAllocPtr(
GPTR,
NumProviders * TSPI_PROC_LAST * sizeof(TSPAPIPROC)
);
if(
!dwPermanentProviderIDArray
|| !dwNumLinesArray
|| !dwNumPhonesArray
|| !hProviders
|| !lpfnProcAddress)
;// out of memory - fail
iCurProvider = 0;
for(iProvider = 0; iProvider < NumProviders; ++iProvider)
{
wsprintf(szBuffer, "ProviderFilename%d", iProvider);
GetPrivateProfileString(
"Providers",
szBuffer,
"", // default
LibFileName,
MAXBUFSIZE,
szINIfilename
);
DBGOUT((1, "Loading [%s] - provider # %d", LibFileName, iProvider));
hProviders[iCurProvider] = LoadLibrary(LibFileName);
//
// Only add it to the list if it's real.
//
if ( hProviders[iCurProvider] > 32 )
{
wsprintf(szBuffer, "ProviderID%d", iProvider);
dwPermanentProviderIDArray[iCurProvider] = GetPrivateProfileInt(
"Providers",
szBuffer,
0, // default
szINIfilename
);
iCurProvider++;
}
#if DBG
else
{
DBGOUT((1, " %s provider # %d FAILED TO LOAD!", LibFileName, iProvider));
}
#endif
}
//
// Adjust the global for how many SPs actually loaded.
//
NumProviders = iCurProvider;
}
VOID
FreeAllMem(VOID)
{
int iProvider;
for(iProvider = 0; iProvider < NumProviders; ++iProvider)
FreeLibrary(hProviders[iProvider]);
GlobalFreePtr(dwPermanentProviderIDArray);
GlobalFreePtr(dwNumLinesArray);
GlobalFreePtr(dwNumPhonesArray);
GlobalFreePtr(hProviders);
GlobalFreePtr(lpfnProcAddress);
// FreeLibrary32(ghInst32);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
TSPAPIPROC
GetProcAddressHashed(int iProvider, DWORD iFunction, UINT nNumParms) // iFunction is 500-based
{
static TSPAPIPROC DefaultLineTable[] = {
(TSPAPIPROC)TSPI_LineBlank1,
(TSPAPIPROC)TSPI_LineBlank2,
(TSPAPIPROC)TSPI_LineBlank3,
(TSPAPIPROC)TSPI_LineBlank4,
(TSPAPIPROC)TSPI_LineBlank5,
(TSPAPIPROC)TSPI_LineBlank6,
(TSPAPIPROC)TSPI_LineBlank7
};
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 *pfn;
TSPAPIPROC *FunctionTable;
//
// Find out if it's a phone function or a line function
//
if (
(iFunction >= TSPI_PHONECLOSE)
&&
(iFunction <= TSPI_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;
}
pfn = &lpfnProcAddress[(iProvider*TSPI_PROC_LAST)+(iFunction-TSPI_PROC_BASE)];
if( NULL == *pfn )
{
*pfn = (TSPAPIPROC)GetProcAddress(
hProviders[iProvider],
(LPCSTR)iFunction
);
//
// Did it fail?
//
if( NULL == *pfn )
{
*pfn = FunctionTable[ nNumParms - 1 ];
}
}
return *pfn;
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
int iProviderFromDeviceID(DWORD dwDeviceID)
{
DWORD dwFirstDeviceIDonProvider = gdwLineDeviceIDBase;
int iProvider = 0;
// seeks the correct provider for this line
while(dwDeviceID >= dwFirstDeviceIDonProvider + dwNumLinesArray[iProvider])
{
dwFirstDeviceIDonProvider += dwNumLinesArray[iProvider];
++iProvider;
}
return iProvider;
}
//
// ----------------------- 32-bit callback shells -----------------------------
//
//
// We load up dwData with the 32bit callback address.
//
/* LPARAM of WM_COPYDATA */ /* ;Internal NT */
typedef struct tagCOPYDATASTRUCT /* ;Internal NT */
{ /* ;Internal NT */
DWORD dwData; /* ;Internal NT */
DWORD cbData; /* ;Internal NT */
LPSTR lpData; /* ;Internal NT */
} COPYDATASTRUCT, FAR *LPCOPYDATASTRUCT; /* ;Internal NT */
LINEEVENT PASCAL __loadds __export LineEventProc16(
HTAPILINE htLine,
HTAPICALL htCall,
DWORD dwMsg,
DWORD dwParam1,
DWORD dwParam2,
DWORD dwParam3
)
{
DWORD LineEventStruct[6+1];
COPYDATASTRUCT cds = { 0,
sizeof(LineEventStruct),
(LPSTR)&LineEventStruct
};
DBGOUT((1, "Line event callback"));
DBGOUT((11, " htLine =0x%08lx", (DWORD)htLine));
DBGOUT((11, " (Mapping htLine to 0x%08lx)", LineEventStruct[1]));
DBGOUT((11, " htCall =0x%08lx", (DWORD)htCall));
DBGOUT((11, " dwMsg =0x%08lx", dwMsg));
DBGOUT((11, " dwParam1=0x%08lx", dwParam1));
DBGOUT((11, " dwParam2=0x%08lx", dwParam2));
DBGOUT((11, " dwParam3=0x%08lx", dwParam3));
cds.dwData = (DWORD)glpLineEventProc32;
LineEventStruct[0] = CALLBACK_LINEEVENT;
LineEventStruct[1] = (DWORD)htLine;
LineEventStruct[2] = (DWORD)htCall;
LineEventStruct[3] = dwMsg;
LineEventStruct[4] = dwParam1;
LineEventStruct[5] = dwParam2;
LineEventStruct[6] = dwParam3;
if (!IsBadReadPtr(htLine, sizeof(MYLINE)) )
{
LineEventStruct[1] = (DWORD)((LPMYLINE)htLine)->htLine;
}
#if DBG
else
{
TSP3216SDebugString((1, "But the htLine was BAD!!!!"));
//return (LINEERR_INVALPARAM);
return LINEERR_INVALPOINTER;
}
#endif
switch (dwMsg)
{
case LINE_LINEDEVSTATE:
{
TSP3216SDebugString((2, "Got a LINE_LINEDEVSTATE msg"));
}
break;
case LINE_NEWCALL:
{
LPMYCALL lpmCall;
LPMYLINE lpmLine;
int iProvider;
HDRVLINE REALhdLine;
TSP3216SDebugString((2, "Got a LINE_NEWCALL"));
lpmLine = (MYLINE *)htLine;
iProvider = lpmLine->iProvider;
REALhdLine = lpmLine->hdLine;
lpmCall = (MYCALL *)GlobalAllocPtr(GPTR, sizeof(MYCALL));
if(!lpmCall)
{
TSP3216SDebugString((1, "GlobalAlloc failed for hCall!"));
return LINEERR_NOMEM;
}
lpmCall->iProvider = iProvider;
lpmCall->dwDeviceID = lpmLine->dwDeviceID;
//
// Tell TAPI that _our_ hCall is the real one...
// (and save the one from the SP)
//
lpmCall->hdCall = (HDRVCALL)dwParam1;
LineEventStruct[4] = (DWORD)lpmCall;
// //
// // Give TAPI a pointer to _our_ mem to write _it's_ handle
// //
// *(LPHTAPICALL)dwParam2 = lpmCall;
// LineEventStruct[5] = &(lpmCall->htCall);
}
break;
}
SendMessage( ghWnd, WM_COPYDATA, NULL, (LPARAM)&cds );
#if DBG
if ( LINE_NEWCALL == dwMsg )
{
DBGOUT((11, "Returned htCall=0x%08lx", *((LPDWORD)dwParam2) ));
}
#endif
}
PHONEEVENT PASCAL __loadds __export PhoneEventProc16(
HTAPIPHONE htPhone,
DWORD dwMsg,
DWORD dwParam1,
DWORD dwParam2,
DWORD dwParam3
)
{
DWORD PhoneEventStruct[5+1];
COPYDATASTRUCT cds = { 0,
sizeof(PhoneEventStruct),
(LPSTR)&PhoneEventStruct
};
DBGOUT((1, "Phone event callback"));
DBGOUT((11, " htPhone =0x%08lx", (DWORD)htPhone));
DBGOUT((11, " dwMsg =0x%08lx", dwMsg));
DBGOUT((11, " dwParam1=0x%08lx", dwParam1));
DBGOUT((11, " dwParam2=0x%08lx", dwParam2));
DBGOUT((11, " dwParam3=0x%08lx", dwParam3));
cds.dwData = (DWORD)glpPhoneEventProc32;
PhoneEventStruct[0] = CALLBACK_PHONEEVENT;
PhoneEventStruct[1] = (DWORD)htPhone;
PhoneEventStruct[2] = dwMsg;
PhoneEventStruct[3] = dwParam1;
PhoneEventStruct[4] = dwParam2;
PhoneEventStruct[5] = dwParam3;
SendMessage( ghWnd, WM_COPYDATA, NULL, (LPARAM)&cds );
return 0;
}
ASYNC_COMPLETION PASCAL __export __loadds AsyncCompletionProc16(DRV_REQUESTID dwRequestID,
LONG lResult)
{
DWORD AsyncCompletionStruct[2+1];
COPYDATASTRUCT cds = { 0,
sizeof(AsyncCompletionStruct),
(LPSTR)&AsyncCompletionStruct
};
DBGOUT((1, "Async completion callback"));
DBGOUT((11, " dwRequestID=0x%08lx", dwRequestID));
DBGOUT((11, " lResult =0x%08lx", lResult));
if ( BOGUS_REQUEST_ID == dwRequestID )
{
DBGOUT((2, " This is a reply we should ignore"));
//BUGBUG: maybe: If there's an error returned, should we return that?
return 0;
}
cds.dwData = (DWORD)glpAsyncCompletionProc32;
AsyncCompletionStruct[0] = CALLBACK_ASYNCCOMPLETION;
AsyncCompletionStruct[1] = dwRequestID;
AsyncCompletionStruct[2] = lResult;
SendMessage( ghWnd, WM_COPYDATA, NULL, (LPARAM)&cds );
}
LINEEVENT PASCAL __loadds __export LineCreateProc16(
HTAPILINE htLine,
HTAPICALL htCall,
DWORD dwMsg,
DWORD dwParam1,
DWORD dwParam2,
DWORD dwParam3
)
{
DWORD LineCreateStruct[6+1];
COPYDATASTRUCT cds = { 0,
sizeof(LineCreateStruct),
(LPSTR)&LineCreateStruct
};
DBGOUT((1, "Line Create callback"));
cds.dwData = (DWORD)glpLineCreateProc32;
LineCreateStruct[0] = CALLBACK_LINECREATE;
LineCreateStruct[1] = (DWORD)htLine;
LineCreateStruct[2] = (DWORD)htCall;
LineCreateStruct[3] = dwMsg;
LineCreateStruct[4] = dwParam1;
LineCreateStruct[5] = dwParam2;
LineCreateStruct[6] = dwParam3;
SendMessage( ghWnd, WM_COPYDATA, NULL, (LPARAM)&cds );
return 0;
}
PHONEEVENT PASCAL __loadds __export PhoneCreateProc16(
HTAPIPHONE htPhone,
DWORD dwMsg,
DWORD dwParam1,
DWORD dwParam2,
DWORD dwParam3
)
{
DWORD PhoneCreateStruct[5 + 1];
COPYDATASTRUCT cds = { 0,
sizeof(PhoneCreateStruct),
(LPSTR)&PhoneCreateStruct
};
DBGOUT((1, "Phone Create callback"));
cds.dwData = (DWORD)glpPhoneCreateProc32;
PhoneCreateStruct[0] = CALLBACK_PHONECREATE;
PhoneCreateStruct[1] = (DWORD)htPhone;
PhoneCreateStruct[2] = dwMsg;
PhoneCreateStruct[3] = dwParam1;
PhoneCreateStruct[4] = dwParam2;
PhoneCreateStruct[5] = dwParam3;
SendMessage( ghWnd, WM_COPYDATA, NULL, (LPARAM)&cds );
return 0;
}
//
// -------------------- TSPIAPI TSPI_line functions ---------------------------
//
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineAccept(
DRV_REQUESTID dwRequestID,
HDRVCALL hdCall,
LPCSTR lpsUserUserInfo,
DWORD dwSize
)
{
LPMYCALL lpmCall = (MYCALL *)hdCall;
int iProvider = lpmCall->iProvider;
HDRVCALL REALhdCall = lpmCall->hdCall;
TSP3216SDebugString((2, "Entering TSPI_lineAccept"));
return (* GetProcAddressHashed(iProvider, TSPI_LINEACCEPT, 4))(
dwRequestID,
REALhdCall,
lpsUserUserInfo,
dwSize);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineAddToConference(
DRV_REQUESTID dwRequestID,
HDRVCALL hdConfCall,
HDRVCALL hdConsultCall
)
{
LPMYCALL lpmCall = (MYCALL *)hdConfCall;
int iProvider = lpmCall->iProvider;
HDRVCALL REALhdCall = lpmCall->hdCall;
LPMYCALL lpmConsultCall = (MYCALL *)hdConsultCall;
HDRVCALL REALhdConsultCall = lpmConsultCall->hdCall;
TSP3216SDebugString((2, "Entering TSPI_lineAddToConference"));
return (* GetProcAddressHashed(iProvider, TSPI_LINEADDTOCONFERENCE,3))(
dwRequestID,
REALhdCall,
REALhdConsultCall);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineAnswer(
DRV_REQUESTID dwRequestID,
HDRVCALL hdCall,
LPCSTR lpsUserUserInfo,
DWORD dwSize
)
{
LPMYCALL lpmCall = (MYCALL *)hdCall;
int iProvider = lpmCall->iProvider;
HDRVCALL REALhdCall = lpmCall->hdCall;
TSP3216SDebugString((2, "Entering TSPI_lineAnswer"));
return (* GetProcAddressHashed(iProvider, TSPI_LINEANSWER, 4))(
dwRequestID,
REALhdCall,
lpsUserUserInfo,
dwSize);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineBlindTransfer(
DRV_REQUESTID dwRequestID,
HDRVCALL hdCall,
LPCSTR lpszDestAddress,
DWORD dwCountryCode)
{
LPMYCALL lpmCall = (MYCALL *)hdCall;
int iProvider = lpmCall->iProvider;
HDRVCALL REALhdCall = lpmCall->hdCall;
TSP3216SDebugString((2, "Entering TSPI_lineBlindTransfer"));
return (* GetProcAddressHashed(iProvider, TSPI_LINEBLINDTRANSFER, 4))(
dwRequestID,
REALhdCall,
lpszDestAddress,
dwCountryCode
);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineClose(
HDRVLINE hdLine
)
{
LPMYLINE lpmLine = (MYLINE *)hdLine;
int iProvider = lpmLine->iProvider;
HDRVLINE REALhdLine = lpmLine->hdLine;
TSP3216SDebugString((2, "Entering TSPI_lineClose"));
GlobalFreePtr((LPVOID)lpmLine);
return (* GetProcAddressHashed(iProvider, TSPI_LINECLOSE, 1))(REALhdLine);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineCloseCall(
HDRVCALL hdCall
)
{
LPMYCALL lpmCall = (MYCALL *)hdCall;
int iProvider = lpmCall->iProvider;
HDRVCALL REALhdCall = lpmCall->hdCall;
TSP3216SDebugString((2, "Entering TSPI_lineCloseCall"));
GlobalFreePtr((LPVOID)lpmCall);
return (* GetProcAddressHashed(iProvider, TSPI_LINECLOSECALL, 1))(REALhdCall);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineCompleteCall(
DRV_REQUESTID dwRequestID,
HDRVCALL hdCall,
LPDWORD lpdwCompletionID,
DWORD dwCompletionMode,
DWORD dwMessageID
)
{
LPMYCALL lpmCall = (MYCALL *)hdCall;
int iProvider = lpmCall->iProvider;
HDRVCALL REALhdCall = lpmCall->hdCall;
TSP3216SDebugString((2, "Entering TSPI_lineCompleteCall"));
return (* GetProcAddressHashed(iProvider, TSPI_LINECOMPLETECALL, 5))(
dwRequestID,
REALhdCall,
lpdwCompletionID,
dwCompletionMode,
REALhdCall
);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineCompleteTransfer(
DRV_REQUESTID dwRequestID,
HDRVCALL hdCall,
HDRVCALL hdConsultCall,
HTAPICALL htConfCall,
LPHDRVCALL lphdConfCall,
DWORD dwTransferMode
)
{
LPMYCALL lpmCall = (MYCALL *)hdCall;
int iProvider = lpmCall->iProvider;
HDRVCALL REALhdCall = lpmCall->hdCall;
LPMYCALL lpmConsultCall = (MYCALL *)hdConsultCall;
HDRVCALL REALhdConsultCall = lpmCall->hdCall;
TSP3216SDebugString((2, "Entering TSPI_lineCompleteTransfer"));
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
// NEED TO DO the work for lphdConfCall
//
// return (* GetProcAddressHashed(iProvider, TSPI_LINECOMPLETETRANSFER, 5))(
// dwRequestID,
// REALhdCall,
// lpdwCompletionID,
// dwCompletionMode,
// REALhdCall
// );
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineConditionalMediaDetection(
HDRVLINE hdLine,
DWORD dwMediaModes,
LPLINECALLPARAMS const lpCallParams
)
{
LPMYLINE lpmLine = (MYLINE *)hdLine;
int iProvider = lpmLine->iProvider;
HDRVLINE REALhdLine = lpmLine->hdLine;
LONG lResult;
TSP3216SDebugString((2, "Entering TSPI_lineConditionalMediaDetection"));
lResult = (* GetProcAddressHashed(iProvider, TSPI_LINECONDITIONALMEDIADETECTION, 3))(
REALhdLine,
dwMediaModes,
lpCallParams);
TSP3216SDebugString((2, "Leaving TSPI_lineConditionalMediaDetection"));
return lResult;
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineConfigDialog(
DWORD dwDeviceID,
HWND hwndOwner,
LPCSTR lpszDeviceClass
)
{
int iProvider;
#if DBG
LONG lResult = 0;
#endif
TSP3216SDebugString((2, "Entering TSPI_lineConfigDialog"));
TSP3216SDebugString((11, " dwDeviceID=0x%08lx", dwDeviceID));
TSP3216SDebugString((11, " hwndOwner=0x%08lx", (DWORD)hwndOwner));
TSP3216SDebugString((11, " lpszDeviceClass=0x%08lx", lpszDeviceClass));
#if DBG
if ( !IsBadStringPtr(lpszDeviceClass, 1) )
TSP3216SDebugString((11, " *lpszDeviceClass=[%s]", lpszDeviceClass));
#endif
_asm int 1;
iProvider = iProviderFromDeviceID(dwDeviceID);
#if DBG
lResult =
#else
return
#endif
(* GetProcAddressHashed(iProvider, TSPI_LINECONFIGDIALOG, 3))(
dwDeviceID,
hwndOwner,
lpszDeviceClass
);
#if DBG
return lResult;
#endif
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineConfigDialogEdit(
DWORD dwDeviceID,
HWND hwndOwner,
LPCSTR lpszDeviceClass,
LPVOID const lpDeviceConfigIn,
DWORD dwSize,
LPVARSTRING lpDeviceConfigOut
)
{
TSP3216SDebugString((2, "Entering TSPI_lineConfigDialogEdit"));
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineDevSpecific(
DRV_REQUESTID dwRequestID,
HDRVLINE hdLine,
DWORD dwAddressID,
HDRVCALL hdCall,
LPVOID lpParams,
DWORD dwSize
)
{
TSP3216SDebugString((2, "Entering TSPI_lineDevSpecific"));
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineDevSpecificFeature(
DRV_REQUESTID dwRequestID,
HDRVLINE hdLine,
DWORD dwFeature,
LPVOID lpParams,
DWORD dwSize
)
{
TSP3216SDebugString((2, "Entering TSPI_lineDevSpecificFeature"));
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineDial(
DRV_REQUESTID dwRequestID,
HDRVCALL hdCall,
LPCSTR lpszDestAddress,
DWORD dwCountryCode
)
{
LPMYCALL lpmCall = (MYCALL *)hdCall;
int iProvider = lpmCall->iProvider;
HDRVCALL REALhdCall = lpmCall->hdCall;
TSP3216SDebugString((2, "Entering TSPI_lineDial"));
return (* GetProcAddressHashed(iProvider, TSPI_LINEDIAL, 4))(
dwRequestID,
REALhdCall,
lpszDestAddress,
dwCountryCode
);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineDrop(
DRV_REQUESTID dwRequestID,
HDRVCALL hdCall,
LPCSTR lpsUserUserInfo,
DWORD dwSize
)
{
LPMYCALL lpmCall = (MYCALL *)hdCall;
int iProvider = lpmCall->iProvider;
HDRVCALL REALhdCall = lpmCall->hdCall;
TSP3216SDebugString((2, "Entering TSPI_lineDrop"));
return (* GetProcAddressHashed(iProvider, TSPI_LINEDROP, 4))(
dwRequestID,
REALhdCall,
lpsUserUserInfo,
dwSize
);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineDropOnClose(
HDRVCALL hdCall
)
{
LPMYCALL lpmCall = (MYCALL *)hdCall;
int iProvider = lpmCall->iProvider;
HDRVCALL REALhdCall = lpmCall->hdCall;
TSP3216SDebugString((2, "Entering TSPI_lineDropOnClose"));
return (* GetProcAddressHashed(iProvider, TSPI_LINEDROPONCLOSE, 1))(
REALhdCall
);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineDropNoOwner(
HDRVCALL hdCall
)
{
LPMYCALL lpmCall = (MYCALL *)hdCall;
int iProvider = lpmCall->iProvider;
HDRVCALL REALhdCall = lpmCall->hdCall;
TSPAPIPROC *pfn;
LONG lResult;
TSP3216SDebugString((2, "Entering TSPI_lineDropNoOwner"));
pfn = (TSPAPIPROC)GetProcAddressHashed(iProvider, TSPI_LINEDROPNOOWNER, 1);
if (pfn == (TSPAPIPROC)TSPI_LineBlank1)
{
lResult = (*pfn)( REALhdCall );
}
else
{
TSP3216SDebugString((4, " This SP does not export DROPNOOWNER, so we'll call LINEDROP"));
lResult = (* GetProcAddressHashed(iProvider, TSPI_LINEDROP, 4))(
(DWORD) BOGUS_REQUEST_ID,
(DWORD) REALhdCall,
(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;
}
}
TSP3216SDebugString((3, "Leaving TSPI_lineDropNoOwner, return code=0x%08lx", lResult));
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
)
{
TSP3216SDebugString((2, "Entering TSPI_lineForward"));
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineGatherDigits(
HDRVCALL hdCall,
DWORD dwEndToEndID,
DWORD dwDigitModes,
LPSTR lpsDigits,
DWORD dwNumDigits,
LPCSTR lpszTerminationDigits,
DWORD dwFirstDigitTimeout,
DWORD dwInterDigitTimeout
)
{
TSP3216SDebugString((2, "Entering TSPI_lineGatherDigits"));
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineGenerateDigits(
HDRVCALL hdCall,
DWORD dwEndToEndID,
DWORD dwDigitMode,
LPCSTR lpszDigits,
DWORD dwDuration
)
{
LPMYCALL lpmCall = (MYCALL *)hdCall;
int iProvider = lpmCall->iProvider;
HDRVCALL REALhdCall = lpmCall->hdCall;
TSP3216SDebugString((2, "Entering TSPI_lineGenerateDigits"));
TSP3216SDebugString((11, " hdCall =0x%08lx", hdCall));
TSP3216SDebugString((11, " dwEndToEndID=0x%08lx", dwEndToEndID));
TSP3216SDebugString((11, " lpszDigits =0x%08lx", lpszDigits));
TSP3216SDebugString((12, " *lpszDigits =%s", lpszDigits));
TSP3216SDebugString((11, " dwDuration =0x%08lx", dwDuration));
return (* GetProcAddressHashed(iProvider, TSPI_LINEGENERATEDIGITS, 5))(
REALhdCall,
dwEndToEndID,
dwDigitMode,
lpszDigits,
dwDuration );
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineGenerateTone(
HDRVCALL hdCall,
DWORD dwEndToEndID,
DWORD dwToneMode,
DWORD dwDuration,
DWORD dwNumTones,
LPLINEGENERATETONE const lpTones
)
{
LPMYCALL lpmCall = (MYCALL *)hdCall;
int iProvider = lpmCall->iProvider;
HDRVCALL REALhdCall = lpmCall->hdCall;
TSP3216SDebugString((2, "Entering TSPI_lineGenerateTone"));
return (* GetProcAddressHashed(iProvider, TSPI_LINEGENERATETONE, 6))(
REALhdCall,
dwEndToEndID,
dwToneMode,
dwDuration,
dwNumTones,
lpTones );
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineGetAddressCaps(
DWORD dwDeviceID,
DWORD dwAddressID,
DWORD dwTSPIVersion,
DWORD dwExtVersion,
LPLINEADDRESSCAPS lpAddressCaps
)
{
int iProvider = iProviderFromDeviceID(dwDeviceID);
DWORD dwFirstDeviceIDonProvider = gdwLineDeviceIDBase;
TSP3216SDebugString((2, "Entering TSPI_lineGetAddressCaps"));
return(* GetProcAddressHashed(iProvider, TSPI_LINEGETADDRESSCAPS, 5))(
dwDeviceID,
dwAddressID,
dwTSPIVersion,
dwExtVersion,
lpAddressCaps
);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineGetAddressID(
HDRVLINE hdLine,
LPDWORD lpdwAddressID,
DWORD dwAddressMode,
LPCSTR lpsAddress,
DWORD dwSize
)
{
LPMYLINE lpmLine = (MYLINE *)hdLine;
int iProvider = lpmLine->iProvider;
HDRVLINE REALhdLine = lpmLine->hdLine;
#if DBG
LONG lResult;
#endif
TSP3216SDebugString((2, "Entering TSPI_lineGetAddressID"));
#if DBG
lResult =
#else
return
#endif
(* GetProcAddressHashed(iProvider, TSPI_LINEGETADDRESSID, 5))(
REALhdLine,
lpdwAddressID,
dwAddressMode,
lpsAddress,
dwSize
);
#if DBG
TSP3216SDebugString((2, "Leaving TSPI_lineGetAddressID"));
return lResult;
#endif
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineGetAddressStatus(
HDRVLINE hdLine,
DWORD dwAddressID,
LPLINEADDRESSSTATUS lpAddressStatus
)
{
LPMYLINE lpmLine = (MYLINE *)hdLine;
int iProvider = lpmLine->iProvider;
HDRVLINE REALhdLine = lpmLine->hdLine;
LONG lResult;
TSP3216SDebugString((2, "Entering TSPI_lineGetAddressStatus"));
lResult = (* GetProcAddressHashed(iProvider, TSPI_LINEGETADDRESSSTATUS, 3))(
REALhdLine,
dwAddressID,
lpAddressStatus);
TSP3216SDebugString((2, "Leaving TSPI_lineGetAddressStatus"));
return lResult;
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineGetCallAddressID(
HDRVCALL hdCall,
LPDWORD lpdwAddressID
)
{
LPMYCALL lpmCall = (MYCALL *)hdCall;
int iProvider = lpmCall->iProvider;
HDRVCALL REALhdCall = lpmCall->hdCall;
TSP3216SDebugString((2, "Entering TSPI_lineGetCallAddressID"));
return (* GetProcAddressHashed(iProvider, TSPI_LINEGETCALLADDRESSID, 2))(
REALhdCall,
lpdwAddressID
);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineGetCallInfo(
HDRVCALL hdCall,
LPLINECALLINFO lpCallInfo
)
{
LPMYCALL lpmCall = (MYCALL *)hdCall;
int iProvider = lpmCall->iProvider;
HDRVCALL REALhdCall = lpmCall->hdCall;
TSP3216SDebugString((2, "Entering TSPI_lineGetCallInfo"));
return (* GetProcAddressHashed(iProvider, TSPI_LINEGETCALLINFO, 2))(
REALhdCall,
lpCallInfo
);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineGetCallStatus(
HDRVCALL hdCall,
LPLINECALLSTATUS lpCallStatus
)
{
LPMYCALL lpmCall = (MYCALL *)hdCall;
int iProvider = lpmCall->iProvider;
HDRVCALL REALhdCall = lpmCall->hdCall;
TSP3216SDebugString((2, "Entering TSPI_lineGetCallStatus"));
return (* GetProcAddressHashed(iProvider, TSPI_LINEGETCALLSTATUS, 2))(
REALhdCall,
lpCallStatus
);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineGetDevCaps(
DWORD dwDeviceID,
DWORD dwTSPIVersion,
DWORD dwExtVersion,
LPLINEDEVCAPS lpLineDevCaps
)
{
int iProvider = iProviderFromDeviceID(dwDeviceID);
#if DBG
LONG lResult;
TSP3216SDebugString((2, "...debugmode..."));
#endif
TSP3216SDebugString((2, "Entering TSPI_lineGetDevCaps"));
#if DBG
lResult =
#else
return
#endif
(* GetProcAddressHashed(iProvider, TSPI_LINEGETDEVCAPS, 4))(
dwDeviceID,
dwTSPIVersion,
dwExtVersion,
lpLineDevCaps
);
#if DBG
DBGOUT((2, "Leaving TSPI_lineGetDevCaps retcode=0x%08lx", lResult));
return lResult;
#endif
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineGetDevConfig(
DWORD dwDeviceID,
LPVARSTRING lpDeviceConfig,
LPCSTR lpszDeviceClass
)
{
int iProvider = iProviderFromDeviceID(dwDeviceID);
#if DBG
LONG lResult;
#endif
TSP3216SDebugString((2, "Entering TSPI_lineGetDevConfig"));
#if DBG
lResult =
#else
return
#endif
(* GetProcAddressHashed(iProvider, TSPI_LINEGETDEVCONFIG, 3))(
dwDeviceID,
lpDeviceConfig,
lpszDeviceClass
);
#if DBG
DBGOUT((2, "Leaving TSPI_lineGetDevConfig retcode=0x%08lx", lResult));
return lResult;
#endif
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineGetExtensionID(
DWORD dwDeviceID,
DWORD dwTSPIVersion,
LPLINEEXTENSIONID lpExtensionID
)
{
int iProvider = iProviderFromDeviceID(dwDeviceID);
TSPAPIPROC lpfn;
#if DBG
LONG lResult = 0;
#endif
TSP3216SDebugString((2, "Entering TSPI_lineGetExtensionID"));
lpfn = (TSPAPIPROC)GetProcAddressHashed(iProvider, TSPI_LINEGETEXTENSIONID, 3);
if (lpfn != TSPI_LineBlank3)
{
#if DBG
lResult =
#else
return
#endif
(*lpfn)(
dwDeviceID,
dwTSPIVersion,
lpExtensionID
);
}
else
{
TSP3216SDebugString((2, " SP# %d does not support TSPI_lineGetExtensionID. (We'll fill in zeros.)", iProvider));
lpExtensionID->dwExtensionID0 = 0;
lpExtensionID->dwExtensionID1 = 0;
lpExtensionID->dwExtensionID2 = 0;
lpExtensionID->dwExtensionID3 = 0;
}
#if DBG
TSP3216SDebugString((2, "Leaving TSPI_lineGetExtensionID retcode=0x%08lx", lResult));
return lResult;
#endif
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineGetIcon(
DWORD dwDeviceID,
LPCSTR lpszDeviceClass,
LPHICON lphIcon
)
{
int iProvider = iProviderFromDeviceID(dwDeviceID);
#if DBG
LONG lResult;
#endif
TSP3216SDebugString((2, "Entering TSPI_lineGetIcon"));
#if DBG
lResult =
#else
return
#endif
(* GetProcAddressHashed(iProvider, TSPI_LINEGETICON, 3))(
dwDeviceID,
lpszDeviceClass,
lphIcon
);
#if DBG
DBGOUT((2, "Leaving TSPI_lineGetIcon retcode=0x%08lx", lResult));
return lResult;
#endif
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineGetID16(
HDRVLINE hdLine,
DWORD dwAddressID,
HDRVCALL hdCall,
DWORD dwSelect,
LPVARSTRING lpDeviceID,
LPCSTR lpszDeviceClass
)
{
LPMYLINE lpmLine = 0;
int iProvider = 0;
HDRVLINE REALhdLine = 0;
LONG lResult;
LPMYCALL lpmCall = 0;
HDRVCALL REALhdCall = 0;
TSP3216SDebugString((2, "Entering TSPI_lineGetID"));
switch ( dwSelect )
{
case LINECALLSELECT_LINE:
{
lpmLine = (MYLINE *)hdLine;
iProvider = lpmLine->iProvider;
REALhdLine = lpmLine->hdLine;
}
break;
case LINECALLSELECT_ADDRESS:
{
lpmLine = (MYLINE *)hdLine;
iProvider = lpmLine->iProvider;
REALhdLine = lpmLine->hdLine;
}
break;
case LINECALLSELECT_CALL:
{
lpmCall = (MYCALL *)hdCall;
REALhdCall = lpmCall->hdCall;
}
break;
default:
TSP3216SDebugString((2, "Leaving TSPI_lineGetID - 2lResult=0x%08lx", lResult));
return LINEERR_INVALPARAM;
}
lResult = (* GetProcAddressHashed(iProvider, TSPI_LINEGETID, 6))(
REALhdLine,
dwAddressID,
REALhdCall,
dwSelect,
lpDeviceID,
lpszDeviceClass );
TSP3216SDebugString((2, "Leaving TSPI_lineGetID - lResult=0x%08lx", lResult));
return lResult;
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineGetLineDevStatus(
HDRVLINE hdLine,
LPLINEDEVSTATUS lpLineDevStatus
)
{
LPMYLINE lpmLine = (MYLINE *)hdLine;
int iProvider = lpmLine->iProvider;
HDRVLINE REALhdLine = lpmLine->hdLine;
LONG lResult;
TSP3216SDebugString((2, "Entering TSPI_lineGetLineDevStatus"));
lResult = (* GetProcAddressHashed(iProvider, TSPI_LINEGETLINEDEVSTATUS, 2))(
REALhdLine,
lpLineDevStatus);
TSP3216SDebugString((2, "Leaving TSPI_lineGetLineDevStatus"));
return lResult;
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineGetNumAddressIDs(
HDRVLINE hdLine,
LPDWORD lpdwNumAddressIDs
)
{
LPMYLINE lpmLine = (MYLINE *)hdLine;
int iProvider = lpmLine->iProvider;
HDRVLINE REALhdLine = lpmLine->hdLine;
LONG lResult;
TSP3216SDebugString((2, "Entering TSPI_lineGetNumAddressIDs"));
lResult = (* GetProcAddressHashed(iProvider, TSPI_LINEGETNUMADDRESSIDS, 2))(
REALhdLine,
lpdwNumAddressIDs );
TSP3216SDebugString((2, "Leaving TSPI_lineGetNumAddressIDs - returning 0x%08lx", lResult));
return lResult;
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineHold(
DRV_REQUESTID dwRequestID,
HDRVCALL hdCall
)
{
LPMYCALL lpmCall = (MYCALL *)hdCall;
int iProvider = lpmCall->iProvider;
HDRVCALL REALhdCall = lpmCall->hdCall;
TSP3216SDebugString((2, "Entering TSPI_lineHold"));
return (* GetProcAddressHashed(iProvider, TSPI_LINEHOLD, 2))(
dwRequestID,
REALhdCall
);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineMakeCall16(
DRV_REQUESTID dwRequestID,
HDRVLINE hdLine,
HTAPICALL htCall,
LPHDRVCALL lphdCall,
LPCSTR lpszDestAddress,
DWORD dwCountryCode,
LPLINECALLPARAMS const lpCallParams
)
{
LPMYCALL lpmCall;
LPMYLINE lpmLine = (MYLINE *)hdLine;
int iProvider = lpmLine->iProvider;
HDRVLINE REALhdLine = lpmLine->hdLine;
LONG lResult;
TSP3216SDebugString((2, "Entering TSPI_lineMakeCall16"));
DBGOUT((11, " dwRequestID = 0x%08lx", dwRequestID));
DBGOUT((11, " *lpszDestAddress = [%s]", lpszDestAddress));
DBGOUT((11, " dwCountryCode = 0x%08lx", dwCountryCode));
lpmCall = (MYCALL *)GlobalAllocPtr(GPTR, sizeof(MYCALL));
if(!lpmCall)
return(LINEERR_NOMEM);
*lphdCall = (HDRVCALL)lpmCall;
lpmCall->htCall = htCall;
lpmCall->iProvider = iProvider;
lpmCall->dwDeviceID = lpmLine->dwDeviceID;
lResult = (* GetProcAddressHashed(lpmCall->iProvider, TSPI_LINEMAKECALL, 7))(
dwRequestID,
REALhdLine,
htCall, // WAS SECONDLY (HTAPICALL)lpmCall, // Was htCall,
&(lpmCall->hdCall),
lpszDestAddress,
dwCountryCode,
lpCallParams
);
TSP3216SDebugString((2, "Leaving TSPI_lineMakeCall16 - returning 0x%08lx", lResult));
return lResult;
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineMonitorDigits(
HDRVCALL hdCall,
DWORD dwDigitModes
)
{
LPMYCALL lpmCall = (MYCALL *)hdCall;
int iProvider = lpmCall->iProvider;
HDRVCALL REALhdCall = lpmCall->hdCall;
TSP3216SDebugString((2, "Entering TSPI_lineMonitorDigits"));
return (* GetProcAddressHashed(iProvider, TSPI_LINEMONITORDIGITS, 2))(
REALhdCall,
dwDigitModes
);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineMonitorMedia(
HDRVCALL hdCall,
DWORD dwMediaModes
)
{
LPMYCALL lpmCall = (MYCALL *)hdCall;
int iProvider = lpmCall->iProvider;
HDRVCALL REALhdCall = lpmCall->hdCall;
TSP3216SDebugString((2, "Entering TSPI_lineMonitorMedia"));
return (* GetProcAddressHashed(iProvider, TSPI_LINEMONITORMEDIA, 2))(
REALhdCall,
dwMediaModes
);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineMonitorTones(
HDRVCALL hdCall,
DWORD dwToneListID,
LPLINEMONITORTONE const lpToneList,
DWORD dwNumEntries
)
{
LPMYCALL lpmCall = (MYCALL *)hdCall;
int iProvider = lpmCall->iProvider;
HDRVCALL REALhdCall = lpmCall->hdCall;
TSP3216SDebugString((2, "Entering TSPI_lineMonitorTones"));
return (* GetProcAddressHashed(iProvider, TSPI_LINEMONITORTONES, 4))(
REALhdCall,
dwToneListID,
lpToneList,
dwNumEntries
);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineNegotiateExtVersion(
DWORD dwDeviceID,
DWORD dwTSPIVersion,
DWORD dwLowVersion,
DWORD dwHighVersion,
LPDWORD lpdwExtVersion
)
{
int iProvider = iProviderFromDeviceID(dwDeviceID);
#if DBG
LONG lResult;
#endif
TSP3216SDebugString((2, "Entering TSPI_lineNegotiateExtVersion"));
#if DBG
lResult =
#else
return
#endif
(* GetProcAddressHashed(iProvider, TSPI_LINENEGOTIATEEXTVERSION, 5))(
dwDeviceID,
dwTSPIVersion,
dwLowVersion,
dwHighVersion,
lpdwExtVersion
);
#if DBG
DBGOUT((2, "Leaving TSPI_lineNegotiateExeVersion retcode=0x%08lx", lResult));
return lResult;
#endif
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineNegotiateTSPIVersion(
DWORD dwDeviceID,
DWORD dwLowVersion,
DWORD dwHighVersion,
LPDWORD lpdwTSPIVersion
)
{
TSP3216SDebugString((2, "Entering TSPI_lineNegotiateTSPIVersion"));
//BUGBUG Need to call to service providers and keep track of their
// versions, no?
*lpdwTSPIVersion = TAPI_CUR_VER;
return(0);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineOpen(
DWORD dwDeviceID,
HTAPILINE htLine,
LPHDRVLINE lphdLine,
DWORD dwTSPIVersion,
LINEEVENT lpfnEventProc
)
{
int iProvider = iProviderFromDeviceID(dwDeviceID);
LPMYLINE lpmLine;
#if DBG
LONG lResult;
#endif
TSP3216SDebugString((2, "Entering TSPI_lineOpen"));
TSP3216SDebugString((11, " dwDeviceID =0x%08lx", dwDeviceID));
TSP3216SDebugString((11, " htLine =0x%08lx", htLine));
TSP3216SDebugString((11, " lphdLine =0x%08lx", lphdLine));
TSP3216SDebugString((11, " dwTSPIVersion=0x%08lx", dwTSPIVersion));
TSP3216SDebugString((11, " lpfnEventProc=0x%08lx", lpfnEventProc));
glpLineEventProc32 = lpfnEventProc;
lpmLine = (MYLINE *)GlobalAllocPtr(GPTR, sizeof(MYLINE));
if(!lpmLine)
return(LINEERR_NOMEM);
*lphdLine = (HDRVLINE)lpmLine;
lpmLine->iProvider = iProvider;
lpmLine->dwDeviceID = dwDeviceID;
lpmLine->htLine = htLine;
lpmLine->lpfnEventProc = lpfnEventProc;
#if DBG
lResult =
#else
return
#endif
(* GetProcAddressHashed(iProvider, TSPI_LINEOPEN, 5))(
dwDeviceID,
(HTAPILINE)lpmLine, // was htLine
&(lpmLine->hdLine),
dwTSPIVersion,
LineEventProc16
);
#if DBG
DBGOUT((2, "Leaving TSPI_lineOpen retcode=0x%08lx", lResult));
return lResult;
#endif
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_linePark(
DRV_REQUESTID dwRequestID,
HDRVCALL hdCall,
DWORD dwParkMode,
LPCSTR lpszDirAddress,
LPVARSTRING lpNonDirAddress
)
{
TSP3216SDebugString((2, "Entering TSPI_linePark"));
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_linePickup(
DRV_REQUESTID dwRequestID,
HDRVLINE hdLine,
DWORD dwAddressID,
HTAPICALL htCall,
LPHDRVCALL lphdCall,
LPCSTR lpszDestAddress,
LPCSTR lpszGroupID
)
{
TSP3216SDebugString((2, "Entering TSPI_linePickup"));
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_linePrepareAddToConference(
DRV_REQUESTID dwRequestID,
HDRVCALL hdConfCall,
HTAPICALL htConsultCall,
LPHDRVCALL lphdConsultCall,
LPLINECALLPARAMS const lpCallParams
)
{
TSP3216SDebugString((2, "Entering TSPI_linePrepareAddToConference"));
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineRedirect(
DRV_REQUESTID dwRequestID,
HDRVCALL hdCall,
LPCSTR lpszDestAddress,
DWORD dwCountryCode
)
{
TSP3216SDebugString((2, "Entering TSPI_lineRedirect"));
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineRemoveFromConference(
DRV_REQUESTID dwRequestID,
HDRVCALL hdCall
)
{
TSP3216SDebugString((2, "Entering TSPI_lineRemoveFromConference"));
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineSecureCall(
DRV_REQUESTID dwRequestID,
HDRVCALL hdCall
)
{
TSP3216SDebugString((2, "Entering TSPI_lineSecureCall"));
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineSelectExtVersion(
HDRVLINE hdLine,
DWORD dwExtVersion
)
{
TSP3216SDebugString((2, "Entering TSPI_lineSelectExtVersion"));
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineSendUserUserInfo(
DRV_REQUESTID dwRequestID,
HDRVCALL hdCall,
LPCSTR lpsUserUserInfo,
DWORD dwSize
)
{
TSP3216SDebugString((2, "Entering TSPI_lineSendUserUserInfo"));
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineSetAppSpecific(
HDRVCALL hdCall,
DWORD dwAppSpecific
)
{
LPMYCALL lpmCall = (MYCALL *)hdCall;
int iProvider = lpmCall->iProvider;
HDRVCALL REALhdCall = lpmCall->hdCall;
TSP3216SDebugString((2, "Entering TSPI_lineSetAppSpecific"));
return (* GetProcAddressHashed(iProvider, TSPI_LINESETAPPSPECIFIC, 2))(
REALhdCall,
dwAppSpecific
);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineSetCallParams(
DRV_REQUESTID dwRequestID,
HDRVCALL hdCall,
DWORD dwBearerMode,
DWORD dwMinRate,
DWORD dwMaxRate,
LPLINEDIALPARAMS const lpDialParams
)
{
LPMYCALL lpmCall = (MYCALL *)hdCall;
int iProvider = lpmCall->iProvider;
HDRVCALL REALhdCall = lpmCall->hdCall;
TSP3216SDebugString((2, "Entering TSPI_lineSetCallParams"));
return (* GetProcAddressHashed(iProvider, TSPI_LINESETCALLPARAMS, 6))(
dwRequestID,
REALhdCall,
dwBearerMode,
dwMinRate,
dwMaxRate,
lpDialParams
);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineSetCurrentLocation(
DWORD dwLocation
)
{
TSP3216SDebugString((2, "Entering TSPI_lineSetCurrentLocation"));
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineSetDefaultMediaDetection(
HDRVLINE hdLine,
DWORD dwMediaModes
)
{
LPMYLINE lpmLine = (MYLINE *)hdLine;
int iProvider = lpmLine->iProvider;
HDRVLINE REALhdLine = lpmLine->hdLine;
TSP3216SDebugString((2, "Entering TSPI_lineSetDefaultMediaDetection"));
return (* GetProcAddressHashed(
iProvider,
TSPI_LINESETDEFAULTMEDIADETECTION,
2
))(REALhdLine, dwMediaModes);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineSetDevConfig(
DWORD dwDeviceID,
LPVOID const lpDeviceConfig,
DWORD dwSize,
LPCSTR lpszDeviceClass
)
{
int iProvider = iProviderFromDeviceID(dwDeviceID);
DWORD dwFirstDeviceIDonProvider = gdwLineDeviceIDBase;
TSP3216SDebugString((2, "Entering TSPI_lineSetDevConfig"));
return(* GetProcAddressHashed(iProvider, TSPI_LINESETDEVCONFIG, 4))(
dwDeviceID,
lpDeviceConfig,
dwSize,
lpszDeviceClass
);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
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
)
{
TSP3216SDebugString((2, "Entering TSPI_lineSetMediaControl"));
// dwSelect!!!
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineSetMediaMode(
HDRVCALL hdCall,
DWORD dwMediaMode
)
{
LPMYCALL lpmCall = (MYCALL *)hdCall;
int iProvider = lpmCall->iProvider;
HDRVCALL REALhdCall = lpmCall->hdCall;
TSP3216SDebugString((2, "Entering TSPI_lineSetMediaMode"));
return (* GetProcAddressHashed(iProvider, TSPI_LINESETMEDIAMODE, 2))(
REALhdCall,
dwMediaMode
);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineSetStatusMessages(
HDRVLINE hdLine,
DWORD dwLineStates,
DWORD dwAddressStates
)
{
LPMYLINE lpmLine = (MYLINE *)hdLine;
int iProvider = lpmLine->iProvider;
HDRVLINE REALhdLine = lpmLine->hdLine;
TSP3216SDebugString((2, "Entering TSPI_lineSetStatusMessages"));
return (* GetProcAddressHashed(iProvider, TSPI_LINESETSTATUSMESSAGES, 3))(
REALhdLine,
dwLineStates,
dwAddressStates
);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineSetTerminal(
DRV_REQUESTID dwRequestID,
HDRVLINE hdLine,
DWORD dwAddressID,
HDRVCALL hdCall,
DWORD dwSelect,
DWORD dwTerminalModes,
DWORD dwTerminalID,
DWORD bEnable
)
{
TSP3216SDebugString((2, "Entering TSPI_lineSetTerminal"));
// dwSelect!!!
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineSetupConference(
DRV_REQUESTID dwRequestID,
HDRVCALL hdCall,
HDRVLINE hdLine,
HTAPICALL htConfCall,
LPHDRVCALL lphdConfCall,
HTAPICALL htConsultCall,
LPHDRVCALL lphdConsultCall,
DWORD dwNumParties,
LPLINECALLPARAMS const lpCallParams
)
{
TSP3216SDebugString((2, "Entering TSPI_lineSetupConference"));
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineSetupTransfer(
DRV_REQUESTID dwRequestID,
HDRVCALL hdCall,
HTAPICALL htConsultCall,
LPHDRVCALL lphdConsultCall,
LPLINECALLPARAMS const lpCallParams
)
{
TSP3216SDebugString((2, "Entering TSPI_lineSetupTransfer"));
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineSwapHold(
DRV_REQUESTID dwRequestID,
HDRVCALL hdActiveCall,
HDRVCALL hdHeldCall
)
{
TSP3216SDebugString((2, "Entering TSPI_lineSwapHold"));
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineUncompleteCall(
DRV_REQUESTID dwRequestID,
HDRVLINE hdLine,
DWORD dwCompletionID
)
{
TSP3216SDebugString((2, "Entering TSPI_lineUncompleteCall"));
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineUnhold(
DRV_REQUESTID dwRequestID,
HDRVCALL hdCall
)
{
TSP3216SDebugString((2, "Entering TSPI_lineUnhold"));
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineUnpark(
DRV_REQUESTID dwRequestID,
HDRVLINE hdLine,
DWORD dwAddressID,
HTAPICALL htCall,
LPHDRVCALL lphdCall,
LPCSTR lpszDestAddress
)
{
TSP3216SDebugString((2, "Entering TSPI_lineUnpark"));
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
//***************************************************************************
//***************************************************************************
//***************************************************************************
LONG
TSPIAPI
TSPI_lineReleaseUserUserInfo(
DRV_REQUESTID dwRequestID,
HDRVCALL hdCall
)
{
TSP3216SDebugString((2, "Entering TSPI_lineReleaseUserUserInfo"));
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
//
// ----------------------- TSPIAPI TSPI_phone functions -----------------------
//
LONG
TSPIAPI
TSPI_phoneClose(
HDRVPHONE hdPhone
)
{
LPMYPHONE lpmPhone = (MYPHONE *)hdPhone;
int iProvider = lpmPhone->iProvider;
HDRVPHONE REALhdPhone = lpmPhone->hdPhone;
LONG lResult;
TSP3216SDebugString((2, "Entering TSPI_phoneClose"));
lResult = (* GetProcAddressHashed(iProvider, TSPI_PHONECLOSE, 1))(
REALhdPhone
);
TSP3216SDebugString((2, "Leaving TSPI_phoneClose - lResult=0x%08lx", lResult));
return lResult;
}
LONG
TSPIAPI
TSPI_phoneConfigDialog(
DWORD dwDeviceID,
HWND hwndOwner,
LPCSTR lpszDeviceClass
)
{
return(THIS_PHONEFUNCTION_UNDER_CONSTRUCTION);
}
LONG
TSPIAPI
TSPI_phoneDevSpecific(
DRV_REQUESTID dwRequestID,
HDRVPHONE hdPhone,
LPVOID lpParams,
DWORD dwSize
)
{
TSP3216SDebugString((2, "Entering TSPI_phoneDevSpecific"));
return(THIS_PHONEFUNCTION_UNDER_CONSTRUCTION);
}
LONG
TSPIAPI
TSPI_phoneGetButtonInfo(
HDRVPHONE hdPhone,
DWORD dwButtonLampID,
LPPHONEBUTTONINFO lpButtonInfo
)
{
TSP3216SDebugString((2, "Entering TSPI_phoneGetButtonInfo"));
return(THIS_PHONEFUNCTION_UNDER_CONSTRUCTION);
}
LONG
TSPIAPI
TSPI_phoneGetData(
HDRVPHONE hdPhone,
DWORD dwDataID,
LPVOID lpData,
DWORD dwSize
)
{
TSP3216SDebugString((2, "Entering TSPI_phoneGetData"));
return(THIS_PHONEFUNCTION_UNDER_CONSTRUCTION);
}
LONG
TSPIAPI
TSPI_phoneGetDevCaps(
DWORD dwDeviceID,
DWORD dwTSPIVersion,
DWORD dwExtVersion,
LPPHONECAPS lpPhoneCaps
)
{
int iProvider = iProviderFromDeviceID(dwDeviceID);
LONG lResult;
TSP3216SDebugString((2, "Entering TSPI_phoneGetDevCaps"));
lResult = (* GetProcAddressHashed(iProvider, TSPI_PHONEGETDEVCAPS, 4))(
dwDeviceID,
//BUGBUG What version to send down here?
dwTSPIVersion,
//BUGBUG What version to send down here?
dwExtVersion,
lpPhoneCaps
);
TSP3216SDebugString((2, "Leaving TSPI_phoneGetDevCaps"));
return lResult;
}
LONG
TSPIAPI
TSPI_phoneGetDisplay(
HDRVPHONE hdPhone,
LPVARSTRING lpDisplay
)
{
TSP3216SDebugString((2, "Entering TSPI_phoneGetDisplay"));
return(THIS_PHONEFUNCTION_UNDER_CONSTRUCTION);
}
LONG
TSPIAPI
TSPI_phoneGetExtensionID(
DWORD dwDeviceID,
DWORD dwTSPIVersion,
LPPHONEEXTENSIONID lpExtensionID
)
{
LONG lResult;
int iProvider = iProviderFromDeviceID(dwDeviceID);
FARPROC lpfn;
TSP3216SDebugString((2, "Entering TSPI_phoneGetExtensionID"));
lpfn = GetProcAddressHashed(iProvider, TSPI_PHONEGETEXTENSIONID, 3);
//
// Does this service provider export this function?
//
if (lpfn != TSPI_PhoneBlank3)
{
lResult = (* lpfn)(
dwDeviceID,
dwTSPIVersion,
lpExtensionID
);
}
else
{
//
// Nope. Fill it fulla rocks.
//
TSP3216SDebugString((2, " SP# %ld does not support TSPI_phoneGetExtensionID. (We'll zero it)", (DWORD)iProvider));
lpExtensionID->dwExtensionID0 = 0;
lpExtensionID->dwExtensionID1 = 0;
lpExtensionID->dwExtensionID2 = 0;
lpExtensionID->dwExtensionID3 = 0;
lResult = 0;
}
TSP3216SDebugString((2, "Leaving TSPI_phoneGetExtensionID - lResult=0x%08lx",lResult));
return lResult;
}
LONG
TSPIAPI
TSPI_phoneGetGain(
HDRVPHONE hdPhone,
DWORD dwHookSwitchDev,
LPDWORD lpdwGain
)
{
LPMYPHONE lpmPhone = (MYPHONE *)hdPhone;
int iProvider = lpmPhone->iProvider;
HDRVPHONE REALhdPhone = lpmPhone->hdPhone;
LONG lResult;
TSP3216SDebugString((2, "Entering TSPI_phoneGetGain"));
lResult = (* GetProcAddressHashed(iProvider, TSPI_PHONEGETGAIN, 3))(
REALhdPhone,
dwHookSwitchDev,
lpdwGain
);
TSP3216SDebugString((2, "Leaving TSPI_phoneGetGain"));
return lResult;
}
LONG
TSPIAPI
TSPI_phoneGetHookSwitch(
HDRVPHONE hdPhone,
LPDWORD lpdwHookSwitchDevs
)
{
LPMYPHONE lpmPhone = (MYPHONE *)hdPhone;
int iProvider = lpmPhone->iProvider;
HDRVPHONE REALhdPhone = lpmPhone->hdPhone;
LONG lResult;
TSP3216SDebugString((2, "Entering TSPI_phoneGetHookSwitch"));
lResult = (* GetProcAddressHashed(iProvider, TSPI_PHONEGETHOOKSWITCH, 2))(
REALhdPhone,
lpdwHookSwitchDevs
);
TSP3216SDebugString((2, "Leaving TSPI_phoneGetHoosSwitch"));
return lResult;
}
LONG
TSPIAPI
TSPI_phoneGetIcon(
DWORD dwDeviceID,
LPCSTR lpszDeviceClass,
LPHICON lphIcon
)
{
int iProvider = iProviderFromDeviceID(dwDeviceID);
LONG lResult;
TSP3216SDebugString((2, "Entering TSPI_phoneGetIcon"));
lResult = (* GetProcAddressHashed(iProvider, TSPI_PHONEGETICON, 3))(
dwDeviceID,
lpszDeviceClass,
lphIcon
);
TSP3216SDebugString((2, "Leaving TSPI_phoneGetIcon"));
return lResult;
}
LONG
TSPIAPI
TSPI_phoneGetID16(
HDRVPHONE hdPhone,
LPVARSTRING lpDeviceID,
LPCSTR lpszDeviceClass
)
{
LPMYPHONE lpmPhone = (MYPHONE *)hdPhone;
int iProvider = lpmPhone->iProvider;
HDRVPHONE REALhdPhone = lpmPhone->hdPhone;
LONG lResult;
TSP3216SDebugString((2, "Entering TSPI_phoneGetID"));
lResult = (* GetProcAddressHashed(iProvider, TSPI_PHONEGETID, 3))(
REALhdPhone,
lpDeviceID,
lpszDeviceClass
);
//BUGBUG - Do we have to dupe the handle like on lineGetID?
TSP3216SDebugString((2, "Leaving TSPI_phoneGetID - lResult=0x%08lx",
lResult));
return lResult;
}
LONG
TSPIAPI
TSPI_phoneGetLamp(
HDRVPHONE hdPhone,
DWORD dwButtonLampID,
LPDWORD lpdwLampMode
)
{
TSP3216SDebugString((2, "Entering TSPI_phoneGetLamp"));
return(THIS_PHONEFUNCTION_UNDER_CONSTRUCTION);
}
LONG
TSPIAPI
TSPI_phoneGetRing(
HDRVPHONE hdPhone,
LPDWORD lpdwRingMode,
LPDWORD lpdwVolume
)
{
TSP3216SDebugString((2, "Entering TSPI_phoneGetRing"));
return(THIS_PHONEFUNCTION_UNDER_CONSTRUCTION);
}
LONG
TSPIAPI
TSPI_phoneGetStatus(
HDRVPHONE hdPhone,
LPPHONESTATUS lpPhoneStatus
)
{
LPMYPHONE lpmPhone = (MYPHONE *)hdPhone;
int iProvider = lpmPhone->iProvider;
HDRVPHONE REALhdPhone = lpmPhone->hdPhone;
LONG lResult;
TSP3216SDebugString((2, "Entering TSPI_phoneGetStatus"));
lResult = (* GetProcAddressHashed(iProvider, TSPI_PHONEGETSTATUS, 2))(
REALhdPhone,
lpPhoneStatus
);
TSP3216SDebugString((2, "Leaving TSPI_phoneGetStatus - lResult=0x%08lx",
lResult));
return lResult;
}
LONG
TSPIAPI
TSPI_phoneGetVolume(
HDRVPHONE hdPhone,
DWORD dwHookSwitchDev,
LPDWORD lpdwVolume
)
{
LPMYPHONE lpmPhone = (MYPHONE *)hdPhone;
int iProvider = lpmPhone->iProvider;
HDRVPHONE REALhdPhone = lpmPhone->hdPhone;
LONG lResult;
TSP3216SDebugString((2, "Entering TSPI_phoneGetVolume"));
lResult = (* GetProcAddressHashed(iProvider, TSPI_PHONEGETVOLUME, 3))(
REALhdPhone,
dwHookSwitchDev,
lpdwVolume
);
TSP3216SDebugString((2, "Leaving TSPI_phoneGetVolume - lResult=0x%08lx",
lResult));
return lResult;
}
LONG
TSPIAPI
TSPI_phoneNegotiateExtVersion(
DWORD dwDeviceID,
DWORD dwTSPIVersion,
DWORD dwLowVersion,
DWORD dwHighVersion,
LPDWORD lpdwExtVersion
)
{
TSP3216SDebugString((2, "Entering TSPI_phoneNegotiateExtVersion"));
return(THIS_PHONEFUNCTION_UNDER_CONSTRUCTION);
}
LONG
TSPIAPI
TSPI_phoneNegotiateTSPIVersion(
DWORD dwDeviceID,
DWORD dwLowVersion,
DWORD dwHighVersion,
LPDWORD lpdwTSPIVersion
)
{
int iProvider = iProviderFromDeviceID(dwDeviceID);
TSP3216SDebugString((2, "Entering TSPI_phoneNegotiateTSPIVersion"));
*lpdwTSPIVersion = TAPI_CUR_VER;
return(0);
// return (* GetProcAddressHashed(iProvider, TSPI_PHONEOPEN, 4))(
// dwDeviceID,
// dwLowVersion,
// dwHighVersion,
// lpdwTSPIVersion
// );
//
}
LONG
TSPIAPI
TSPI_phoneOpen(
DWORD dwDeviceID,
HTAPIPHONE htPhone,
LPHDRVPHONE lphdPhone,
DWORD dwTSPIVersion,
PHONEEVENT lpfnEventProc
)
{
int iProvider = iProviderFromDeviceID(dwDeviceID);
LPMYPHONE lpmPhone;
#if DBG
LONG lResult;
#endif
TSP3216SDebugString((2, "Entering TSPI_phoneOpen"));
glpPhoneEventProc32 = lpfnEventProc;
lpmPhone = (MYPHONE *)GlobalAllocPtr(GPTR, sizeof(MYPHONE));
if(!lpmPhone)
return(PHONEERR_NOMEM);
*lphdPhone = (HDRVPHONE)lpmPhone;
lpmPhone->iProvider = iProvider;
lpmPhone->dwDeviceID = dwDeviceID;
lpmPhone->htPhone = htPhone;
lpmPhone->lpfnEventProc = lpfnEventProc;
#if DBG
lResult =
#else
return
#endif
(* GetProcAddressHashed(iProvider, TSPI_PHONEOPEN, 5))(
dwDeviceID,
htPhone, //WAS SECONDLY (HTAPIPHONE)lpmPhone, // was htPhone
&(lpmPhone->hdPhone),
dwTSPIVersion,
PhoneEventProc16
);
#if DBG
TSP3216SDebugString((2, "Leaving TSPI_phoneOpen - lResult=0x%08lx", lResult));
return lResult;
#endif
}
LONG
TSPIAPI
TSPI_phoneSelectExtVersion(
HDRVPHONE hdPhone,
DWORD dwExtVersion
)
{
TSP3216SDebugString((2, "Entering TSPI_phoneSelectExtVersion"));
return(THIS_PHONEFUNCTION_UNDER_CONSTRUCTION);
}
LONG
TSPIAPI
TSPI_phoneSetButtonInfo(
DRV_REQUESTID dwRequestID,
HDRVPHONE hdPhone,
DWORD dwButtonLampID,
LPPHONEBUTTONINFO const lpButtonInfo
)
{
TSP3216SDebugString((2, "Entering TSPI_phoneSetButtonInfo"));
return(THIS_PHONEFUNCTION_UNDER_CONSTRUCTION);
}
LONG
TSPIAPI
TSPI_phoneSetData(
DRV_REQUESTID dwRequestID,
HDRVPHONE hdPhone,
DWORD dwDataID,
LPVOID const lpData,
DWORD dwSize
)
{
TSP3216SDebugString((2, "Entering TSPI_phoneSetData"));
return(THIS_PHONEFUNCTION_UNDER_CONSTRUCTION);
}
LONG
TSPIAPI
TSPI_phoneSetDisplay(
DRV_REQUESTID dwRequestID,
HDRVPHONE hdPhone,
DWORD dwRow,
DWORD dwColumn,
LPCSTR lpsDisplay,
DWORD dwSize
)
{
TSP3216SDebugString((2, "Entering TSPI_phoneSetDisplay"));
return(THIS_PHONEFUNCTION_UNDER_CONSTRUCTION);
}
LONG
TSPIAPI
TSPI_phoneSetGain(
DRV_REQUESTID dwRequestID,
HDRVPHONE hdPhone,
DWORD dwHookSwitchDev,
DWORD dwGain
)
{
LPMYPHONE lpmPhone = (MYPHONE *)hdPhone;
int iProvider = lpmPhone->iProvider;
HDRVPHONE REALhdPhone = lpmPhone->hdPhone;
LONG lResult;
TSP3216SDebugString((2, "Entering TSPI_phoneSetGain"));
lResult = (* GetProcAddressHashed(iProvider, TSPI_PHONESETGAIN, 4))(
dwRequestID,
REALhdPhone,
dwHookSwitchDev,
dwGain
);
TSP3216SDebugString((2, "Leaving TSPI_phoneSetGain - lResult=0x%08lx",
lResult));
return lResult;
}
LONG
TSPIAPI
TSPI_phoneSetHookSwitch(
DRV_REQUESTID dwRequestID,
HDRVPHONE hdPhone,
DWORD dwHookSwitchDevs,
DWORD dwHookSwitchMode
)
{
LPMYPHONE lpmPhone = (MYPHONE *)hdPhone;
int iProvider = lpmPhone->iProvider;
HDRVPHONE REALhdPhone = lpmPhone->hdPhone;
LONG lResult;
TSP3216SDebugString((2, "Entering TSPI_phoneSetHookSwitch"));
lResult = (* GetProcAddressHashed(iProvider, TSPI_PHONESETHOOKSWITCH, 4))(
dwRequestID,
REALhdPhone,
dwHookSwitchDevs,
dwHookSwitchMode
);
TSP3216SDebugString((2, "Leaving TSPI_phoneSetHookSwitch - lResult=0x%08lx",
lResult));
return lResult;
}
LONG
TSPIAPI
TSPI_phoneSetLamp(
DRV_REQUESTID dwRequestID,
HDRVPHONE hdPhone,
DWORD dwButtonLampID,
DWORD dwLampMode
)
{
TSP3216SDebugString((2, "Entering TSPI_phoneSetLamp"));
return(THIS_PHONEFUNCTION_UNDER_CONSTRUCTION);
}
LONG
TSPIAPI
TSPI_phoneSetRing(
DRV_REQUESTID dwRequestID,
HDRVPHONE hdPhone,
DWORD dwRingMode,
DWORD dwVolume
)
{
TSP3216SDebugString((2, "Entering TSPI_phoneSetRing"));
return(THIS_PHONEFUNCTION_UNDER_CONSTRUCTION);
}
LONG
TSPIAPI
TSPI_phoneSetStatusMessages(
HDRVPHONE hdPhone,
DWORD dwPhoneStates,
DWORD dwButtonModes,
DWORD dwButtonStates
)
{
LPMYPHONE lpmPhone = (MYPHONE *)hdPhone;
int iProvider = lpmPhone->iProvider;
HDRVPHONE REALhdPhone = lpmPhone->hdPhone;
LONG lResult;
TSP3216SDebugString((2, "Entering TSPI_phoneSetStatusMessages"));
lResult = (* GetProcAddressHashed(iProvider, TSPI_PHONESETSTATUSMESSAGES, 4))(
REALhdPhone,
dwPhoneStates,
dwButtonModes,
dwButtonStates
);
TSP3216SDebugString((2, "Leaving TSPI_phoneSetStatusMessages"));
return lResult;
}
LONG
TSPIAPI
TSPI_phoneSetVolume(
DRV_REQUESTID dwRequestID,
HDRVPHONE hdPhone,
DWORD dwHookSwitchDev,
DWORD dwVolume
)
{
LPMYPHONE lpmPhone = (MYPHONE *)hdPhone;
int iProvider = lpmPhone->iProvider;
HDRVPHONE REALhdPhone = lpmPhone->hdPhone;
LONG lResult;
TSP3216SDebugString((2, "Entering TSPI_phoneSetVolume"));
lResult = (* GetProcAddressHashed(iProvider, TSPI_PHONESETVOLUME, 4))(
dwRequestID,
REALhdPhone,
dwHookSwitchDev,
dwVolume
);
TSP3216SDebugString((2, "Leaving TSPI_phoneSetVolume - lResult=0x%08lx",
lResult));
return lResult;
}
//
// ----------------------- TSPIAPI TSPI_provider functions --------------------
//
LONG
TSPIAPI
TSPI_providerConfig(
HWND hwndOwner,
DWORD dwPermanentProviderID
)
{
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
LONG
TSPIAPI
TSPI_providerInit16(
DWORD dwTSPIVersion,
DWORD dwPermanentProviderID,
DWORD dwLineDeviceIDBase,
DWORD dwPhoneDeviceIDBase,
DWORD dwNumLines,
DWORD dwNumPhones,
ASYNC_COMPLETION lpfnCompletionProc
)
{
int iProvider;
BOOL fAllFailed = TRUE;
LONG lResult;
TSP3216SDebugString((2, "Entering TSPI_providerInit"));
DBGOUT((1, " Completion addr=0x%08lx", (DWORD)lpfnCompletionProc));
gdwLineDeviceIDBase = dwLineDeviceIDBase;
gdwPhoneDeviceIDBase = dwPhoneDeviceIDBase;
glpAsyncCompletionProc32 = lpfnCompletionProc;
for(iProvider = 0; iProvider < NumProviders; ++iProvider)
{
DBGOUT((2, "TSPI_providerInit initializing provider #%d", iProvider));
if(!(lResult = (* GetProcAddressHashed(iProvider, TSPI_PROVIDERINIT, 7))(
dwTSPIVersion,
dwPermanentProviderIDArray[iProvider],
dwLineDeviceIDBase,
dwPhoneDeviceIDBase,
dwNumLinesArray[iProvider],
dwNumPhonesArray[iProvider],
AsyncCompletionProc16
)))
{
fAllFailed = FALSE; // if one succeeded, they didn't ALL fail
}
#if DBG
else
{
DBGOUT((1, " provider # %d failed TSPI_PROVIDERINIT err=0x%08lx",
iProvider, lResult));
}
#endif
dwLineDeviceIDBase += dwNumLinesArray[iProvider];
dwPhoneDeviceIDBase += dwNumPhonesArray[iProvider];
}
if(fAllFailed)
{
DBGOUT((2, "TSPI_providerInit: all 16bit providers failed init!"));
return(LINEERR_OPERATIONFAILED);
}
else
return(ERR_NONE);
}
LONG
TSPIAPI
TSPI_providerInstall(
HWND hwndOwner,
DWORD dwPermanentProviderID
)
{
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
LONG
TSPIAPI
TSPI_providerRemove(
HWND hwndOwner,
DWORD dwPermanentProviderID
)
{
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
LONG
TSPIAPI
TSPI_providerShutdown16(
DWORD dwTSPIVersion
)
{
int iProvider;
TSP3216SDebugString((2, "Entering TSPI_providerShutdown"));
for(iProvider = 0; iProvider < NumProviders; ++iProvider)
(* GetProcAddressHashed(iProvider, TSPI_PROVIDERSHUTDOWN, 1))(
dwTSPIVersion
);
FreeAllMem();
return(ERR_NONE);
}
LONG
TSPIAPI
TSPI_providerEnumDevices16(
DWORD dwPermanentProviderID,
LPDWORD lpdwNumLines,
LPDWORD lpdwNumPhones,
HPROVIDER hProvider,
LINEEVENT lpfnLineCreateProc,
PHONEEVENT lpfnPhoneCreateProc,
HWND hSecretWnd
)
{
int iProvider;
TSP3216SDebugString((2, "Entering TSPI_providerEnumDevices"));
ghWnd = hSecretWnd;
glpLineCreateProc32 = lpfnLineCreateProc;
glpPhoneCreateProc32 = lpfnPhoneCreateProc;
PostMessage( ghWnd, TSP3216L_MESSAGE, 1,2);
InitializeSPs();
gdwPPID = dwPermanentProviderID;
*lpdwNumLines = 0;
*lpdwNumPhones = 0;
for(iProvider = 0; iProvider < NumProviders; ++iProvider)
{
TSPAPIPROC lpfn;
lpfn = GetProcAddressHashed(iProvider, TSPI_PROVIDERENUMDEVICES, 6);
DBGOUT((1, " TSPI_providerEnumDevices: provider #%d - lpfn=0x%08lx",
iProvider, (DWORD)lpfn));
if (lpfn != TSPI_LineBlank6)
{
(*lpfn)(
dwPermanentProviderIDArray[iProvider],
&(dwNumLinesArray[iProvider]),
&(dwNumPhonesArray[iProvider]),
hProvider,
LineCreateProc16,
PhoneCreateProc16
);
DBGOUT((1, " provider=%d #lines= %ld #phones= %ld",
iProvider,
dwNumLinesArray[iProvider],
dwNumPhonesArray[iProvider] ));
(*lpdwNumLines) += dwNumLinesArray[iProvider];
(*lpdwNumPhones) += dwNumPhonesArray[iProvider];
}
}
DBGOUT((2, " TSPI_providerEnumDevices: #providers=%d #lines= %d #phones= %d",
NumProviders,
*lpdwNumLines,
*lpdwNumPhones));
return(ERR_NONE);
}
LONG
TSPIAPI
TSPI_providerCreateLineDevice(
DWORD dwTempID,
DWORD dwDeviceID
)
{
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
LONG
TSPIAPI
TSPI_providerCreatePhoneDevice(
DWORD dwTempID,
DWORD dwDeviceID
)
{
return(THIS_FUNCTION_UNDER_CONSTRUCTION);
}
int CALLBACK
LibMain(
HINSTANCE hDllInstance,
WORD wDataSeg,
WORD wHeapSize,
LPSTR lpszCmdLine
)
{
#if DBG
OutputDebugString("TSP3216s: Libmain entered\r\n");
#endif
ghThisInst = hDllInstance;
return(1); // success
}
//int
//DllEntryPoint(
// HINSTANCE hDllInstance,
// WORD wDataSeg,
// WORD wHeapSize,
// LPSTR lpszCmdLine
// )
BOOL FAR PASCAL __export TapiThk_ThunkConnect16( LPSTR, LPSTR, WORD, DWORD);
BOOL FAR PASCAL __export TapiFThk_ThunkConnect16( LPSTR, LPSTR, WORD, DWORD);
BOOL FAR PASCAL __export Tapi32_ThunkConnect16( LPSTR, LPSTR, WORD, DWORD);
BOOL FAR PASCAL __export DllEntryPoint(
DWORD dwReason,
WORD hInst,
WORD wDS,
WORD wHeapSize,
DWORD dwReserved1,
WORD dwReserved2
)
{
// static UINT nUseCount = 0;
// UINT n;
DBGOUT((1, "DllEntryPoint entered reason=%lx\r\n", dwReason));
// if ( dwReason == 0 )
// nUseCount--;
if ( dwReason == 1 )
{
TapiThk_ThunkConnect16( "TSP3216S.DLL", "TSP3216L.TSP", hInst, dwReason);
TapiFThk_ThunkConnect16( "TSP3216S.DLL", "TSP3216L.TSP", hInst, dwReason);
Tapi32_ThunkConnect16( "TSP3216S.DLL", "TSP3216L.TSP", hInst, dwReason);
// nUseCount++;
}
// if (dwReason == 0)
// {
// for ( n=0; n<NumProviders; n++)
// {
// FreeLibrary(hProviders[n]);
// }
// }
return(1); // success
}
WORD CALLBACK _loadds
NewData(
)
{
return (ghThisInst); // success
}
DWORD CALLBACK _loadds
NewData2(
)
{
// return (DWORD)&_TapiCallbackThunk;
return 0;
}