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.
135 lines
2.8 KiB
135 lines
2.8 KiB
/*++
|
|
|
|
Copyright (c) 1996 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
tapiCountry.c
|
|
|
|
Abstract:
|
|
|
|
Utility functions for working with TAPI
|
|
|
|
Environment:
|
|
|
|
Server
|
|
|
|
Revision History:
|
|
|
|
09/18/96 -davidx-
|
|
Created it.
|
|
|
|
07/25/99 -v-sashab-
|
|
Moved from fxsui
|
|
|
|
--*/
|
|
|
|
#include "faxsvc.h"
|
|
#include "tapiCountry.h"
|
|
|
|
//
|
|
// Global variables used for accessing TAPI services
|
|
//
|
|
LPLINECOUNTRYLIST g_pLineCountryList;
|
|
|
|
|
|
|
|
BOOL
|
|
GetCountries(
|
|
VOID
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Return a list of countries from TAPI
|
|
|
|
Arguments:
|
|
|
|
NONE
|
|
|
|
Return Value:
|
|
|
|
TRUE if successful, FALSE if there is an error
|
|
|
|
NOTE:
|
|
|
|
We cache the result of lineGetCountry here since it's incredibly slow.
|
|
This function must be invoked inside a critical section since it updates
|
|
globally shared information.
|
|
|
|
--*/
|
|
|
|
{
|
|
#define INITIAL_SIZE_ALL_COUNTRY 22000
|
|
DEBUG_FUNCTION_NAME(TEXT("GetCountries"));
|
|
DWORD cbNeeded;
|
|
LONG status;
|
|
INT repeatCnt = 0;
|
|
|
|
if (g_pLineCountryList == NULL) {
|
|
|
|
//
|
|
// Initial buffer size
|
|
//
|
|
|
|
cbNeeded = INITIAL_SIZE_ALL_COUNTRY;
|
|
|
|
while (TRUE) {
|
|
|
|
MemFree(g_pLineCountryList);
|
|
g_pLineCountryList = NULL;
|
|
|
|
if (! (g_pLineCountryList = (LPLINECOUNTRYLIST)MemAlloc(cbNeeded)))
|
|
{
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
TEXT("Memory allocation failed"));
|
|
break;
|
|
}
|
|
|
|
g_pLineCountryList->dwTotalSize = cbNeeded;
|
|
|
|
status = lineGetCountry(0, MAX_TAPI_API_VER, g_pLineCountryList);
|
|
|
|
if ((g_pLineCountryList->dwNeededSize > g_pLineCountryList->dwTotalSize) &&
|
|
(status == NO_ERROR ||
|
|
status == LINEERR_STRUCTURETOOSMALL ||
|
|
status == LINEERR_NOMEM) &&
|
|
(repeatCnt++ == 0))
|
|
{
|
|
cbNeeded = g_pLineCountryList->dwNeededSize + 1;
|
|
DebugPrintEx(
|
|
DEBUG_WRN,
|
|
TEXT("LINECOUNTRYLIST size: %d"),cbNeeded);
|
|
continue;
|
|
}
|
|
|
|
if (status != NO_ERROR) {
|
|
|
|
DebugPrintEx(
|
|
DEBUG_ERR,
|
|
TEXT("lineGetCountry failed: %x"),status);
|
|
MemFree(g_pLineCountryList);
|
|
g_pLineCountryList = NULL;
|
|
|
|
} else
|
|
DebugPrintEx(DEBUG_MSG,TEXT("Number of countries: %d"), g_pLineCountryList->dwNumCountries);
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
return g_pLineCountryList != NULL;
|
|
}
|
|
|
|
|
|
LPLINECOUNTRYLIST
|
|
GetCountryList(
|
|
)
|
|
{
|
|
DEBUG_FUNCTION_NAME(TEXT("GetCountryList"));
|
|
|
|
return g_pLineCountryList;
|
|
}
|