Leaked source code of windows server 2003
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

/*++
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;
}