Changes due to continued development effort.

This commit is contained in:
Juan Carlos Luciani 2006-04-28 18:59:15 +00:00
parent fe756d9f5e
commit 3f76e165ad
4 changed files with 146 additions and 59 deletions

View File

@ -44,7 +44,10 @@
//===[ Global variables ]==================================================
// In memory auth cache list head
LIST_ENTRY authCacheListHead;
LIST_ENTRY g_authCacheListHead;
// Non-host specific key name
char g_allHosts[] = "AllHosts";
//++=======================================================================
@ -61,13 +64,19 @@ CreateAuthCacheEntry(
//
// Notes:
//
// L1
// L2
//=======================================================================--
{
AuthCacheEntry *pEntry;
DbgTrace(1, "-CreateAuthCacheEntry- Start\n", 0);
// Use allHosts if a host name was not specified
if (pHostName == NULL)
{
pHostName = g_allHosts;
}
// Allocate space for the entry
pEntry = (AuthCacheEntry*) malloc(sizeof(*pEntry));
if (pEntry)
@ -133,7 +142,7 @@ FreeAuthCacheEntry(
//
// Notes:
//
// L1
// L2
//=======================================================================--
{
DbgTrace(1, "-FreeAuthCacheEntry- Start\n", 0);
@ -170,7 +179,7 @@ CacheEntryLifetimeExpired(
//
// Notes:
//
// L1
// L2
//=======================================================================--
{
DWORD currentTime = GetTickCount();
@ -237,7 +246,7 @@ FindEntryInAuthCache(
//
// Notes:
//
// L1
// L2
//=======================================================================--
{
AuthCacheEntry *pEntry = NULL;
@ -248,9 +257,15 @@ FindEntryInAuthCache(
// Examine the cache, if entry found then check if it has expired
// in which case we would want to remove it from the cache.
// Use allHosts if a host name was not specified
if (pHostName == NULL)
{
pHostName = g_allHosts;
}
// First look through the entries in our in-memory cache
pListEntry = authCacheListHead.Flink;
while (pListEntry != &authCacheListHead)
pListEntry = g_authCacheListHead.Flink;
while (pListEntry != &g_authCacheListHead)
{
AuthCacheEntry *pWrkEntry;
@ -410,7 +425,7 @@ FindEntryInAuthCache(
// add it to the in-memory cache.
entryInitialized = TRUE;
deleteCacheKeyNameKey = FALSE;
InsertHeadList(&authCacheListHead, &pEntry->listEntry);
InsertHeadList(&g_authCacheListHead, &pEntry->listEntry);
}
else
{
@ -435,7 +450,7 @@ FindEntryInAuthCache(
// add it to the in-memory cache.
entryInitialized = TRUE;
deleteCacheKeyNameKey = FALSE;
InsertHeadList(&authCacheListHead, &pEntry->listEntry);
InsertHeadList(&g_authCacheListHead, &pEntry->listEntry);
}
}
else
@ -509,7 +524,7 @@ AddEntryToAuthCache(
//
// Notes:
//
// L1
// L2
//=======================================================================--
{
LONG status;
@ -653,7 +668,7 @@ AddEntryToAuthCache(
{
// The entry was added to the cache, save it in
// our in-memory cache.
InsertHeadList(&authCacheListHead, &pEntry->listEntry);
InsertHeadList(&g_authCacheListHead, &pEntry->listEntry);
}
else
{
@ -678,7 +693,7 @@ InitializeAuthCache(void)
//
// Notes:
//
// L1
// L2
//=======================================================================--
{
CasaStatus retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR,
@ -690,7 +705,7 @@ InitializeAuthCache(void)
DbgTrace(1, "-InitializeAuthCache- Start\n", 0);
// Initialize the cache list head
InitializeListHead(&authCacheListHead);
InitializeListHead(&g_authCacheListHead);
// Lets create the CASA Auth Cache registry key in the
// user's hive and limit access to it.
@ -873,3 +888,8 @@ InitializeAuthCache(void)
return retStatus;
}
//++=======================================================================
//++=======================================================================
//++=======================================================================

View File

@ -44,18 +44,24 @@
//
// DbgTrace macro define
//
#define DbgTrace(LEVEL, X, Y) { \
char printBuff[256]; \
if (LEVEL == 0) \
{ \
_snprintf(printBuff, sizeof(printBuff), X, Y); \
printf("AuthToken %s", printBuff); \
} \
else if (DebugLevel >= LEVEL) \
{ \
_snprintf(printBuff, sizeof(printBuff), X, Y); \
printf("AuthToken %s", printBuff); \
} \
//#define DbgTrace(LEVEL, X, Y) { \
//char printBuff[256]; \
// if (LEVEL == 0 || DebugLevel >= LEVEL) \
// { \
// _snprintf(printBuff, sizeof(printBuff), X, Y); \
// printf("AuthToken %s", printBuff); \
// } \
//}
#define DbgTrace(LEVEL, X, Y) { \
char formatBuff[128]; \
char printBuff[256]; \
if (LEVEL == 0 || DebugLevel >= LEVEL) \
{ \
strcpy(formatBuff, "AuthToken "); \
strncat(formatBuff, X, sizeof(formatBuff) - 10); \
_snprintf(printBuff, sizeof(printBuff), formatBuff, Y); \
OutputDebugString(printBuff); \
} \
}

View File

@ -76,7 +76,7 @@ CreateUserMutex(void)
//
// Notes:
//
// L1
// L2
//=======================================================================--
{
CasaStatus retStatus = CASA_STATUS_SUCCESS;
@ -99,8 +99,6 @@ CreateUserMutex(void)
SECURITY_ATTRIBUTES mutexAttributes;
char mutexName[256];
//printf("\nUsername is %s", pUsername);
// Now lets create a global semaphore for the
// user and allow its handle to be inherited.
mutexAttributes.nLength = sizeof(mutexAttributes);
@ -162,7 +160,7 @@ CreateUserMutex(void)
//++=======================================================================
void
LockUserMutex(void)
AcquireUserMutex(void)
//
// Arguments:
//
@ -172,20 +170,20 @@ LockUserMutex(void)
//
// Notes:
//
// L1
// L2
//=======================================================================--
{
DbgTrace(2, "-LockUserMutex- Start\n", 0);
DbgTrace(2, "-AcquireUserMutex- Start\n", 0);
WaitForSingleObject(hUserMutex, INFINITE);
DbgTrace(2, "-LockUserMutex- End\n", 0);
DbgTrace(2, "-AcquireUserMutex- End\n", 0);
}
//++=======================================================================
void
FreeUserMutex(void)
ReleaseUserMutex(void)
//
// Arguments:
//
@ -195,17 +193,17 @@ FreeUserMutex(void)
//
// Notes:
//
// L1
// L2
//=======================================================================--
{
DbgTrace(2, "-FreeUserMutex- Start\n", 0);
DbgTrace(2, "-ReleaseUserMutex- Start\n", 0);
if (ReleaseMutex(hUserMutex) == 0)
{
DbgTrace(0, "-FreeUserMutex- ReleaseMutex failed, error = %d\n", GetLastError());
DbgTrace(0, "-ReleaseUserMutex- ReleaseMutex failed, error = %d\n", GetLastError());
}
DbgTrace(2, "-FreeUserMutex- End\n", 0);
DbgTrace(2, "-ReleaseUserMutex- End\n", 0);
}
@ -222,7 +220,7 @@ OpenLibrary(
//
// Notes:
//
// L0
// L2
//=======================================================================--
{
LIB_HANDLE libHandle;
@ -255,7 +253,7 @@ CloseLibrary(
//
// Notes:
//
// L0
// L2
//=======================================================================--
{
DbgTrace(1, "-CloseLibrary- Start\n", 0);
@ -280,11 +278,12 @@ GetFunctionPtr(
//
// Notes:
//
// L0
// L2
//=======================================================================--
{
void *pFuncPtr;
DbgTrace(1, "-GetFunctionPtr- Start\n", 0);
pFuncPtr = GetProcAddress(libHandle, pFunctionName);
@ -312,13 +311,14 @@ NormalizeHostName(
//
// Notes:
//
// L1
// L2
//=======================================================================--
{
char *pNormalizedName = NULL;
LIST_ENTRY *pListEntry;
NormalizedHostNameCacheEntry *pEntry = NULL;
DbgTrace(1, "-NormalizeHostName- Start\n", 0);
// Obtain our synchronization mutex
@ -502,7 +502,7 @@ InitializeHostNameNormalization(void)
//
// Notes:
//
// L1
// L2
//=======================================================================--
{
CasaStatus retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR,
@ -542,3 +542,8 @@ InitializeHostNameNormalization(void)
return retStatus;
}
//++=======================================================================
//++=======================================================================
//++=======================================================================

View File

@ -32,6 +32,8 @@
#define INITIAL_RESPONSE_DATA_BUF_SIZE 1028
#define INCREMENT_RESPONSE_DATA_BUF_SIZE 256
#define MAX_RPC_RETRIES 3
//===[ Function prototypes ]===============================================
//===[ Global variables ]==================================================
@ -54,12 +56,13 @@ CopyMultiToWideAlloc(
//
// Notes:
//
// L0
// L2
//=======================================================================--
{
int retStatus;
int size, i;
DbgTrace(2, "-CopyMultiToWideAlloc- Start\n", 0);
size = (multiSize + 1) * sizeof(WCHAR);
@ -106,11 +109,12 @@ OpenRpcSession(
//
// Notes:
//
// L0
// L2
//=======================================================================--
{
RpcSession *pSession;
DbgTrace(1, "-OpenRpcSession- Start\n", 0);
// Allocate space for the session
@ -195,7 +199,7 @@ CloseRpcSession(
//
// Notes:
//
// L0
// L2
//=======================================================================--
{
DbgTrace(1, "-CloseRpcSession- Start\n", 0);
@ -214,8 +218,9 @@ CloseRpcSession(
//++=======================================================================
static
CasaStatus
Rpc(
InternalRpc(
IN RpcSession *pSession,
IN char *pMethod,
IN bool secure,
@ -231,7 +236,7 @@ Rpc(
//
// Notes:
//
// L0
// L2
//=======================================================================--
{
CasaStatus retStatus = CASA_STATUS_SUCCESS;
@ -240,7 +245,7 @@ Rpc(
int wideRpcTargetLen;
WCHAR sendHeaders[] = L"Content-Type: text/html";
DbgTrace(1, "-Rpc- Start\n", 0);
DbgTrace(1, "-InternalRpc- Start\n", 0);
// Initialize output parameter
*ppResponseData = NULL;
@ -255,8 +260,6 @@ Rpc(
{
HINTERNET hRequest;
// tbd - Add retry capability
// Open a request handle
hRequest = WinHttpOpenRequest(pSession->hConnection,
L"POST",
@ -334,7 +337,7 @@ Rpc(
}
else
{
DbgTrace(0, "-Rpc- Buffer allocation failure\n", 0);
DbgTrace(0, "-InternalRpc- Buffer allocation failure\n", 0);
retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR,
CASA_FACILITY_AUTHTOKEN,
CASA_STATUS_INSUFFICIENT_RESOURCES);
@ -343,7 +346,7 @@ Rpc(
}
else
{
DbgTrace(0, "-Rpc- Failed reading response data, error = %d\n", GetLastError());
DbgTrace(0, "-InternalRpc- Failed reading response data, error = %d\n", GetLastError());
retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR,
CASA_FACILITY_AUTHTOKEN,
CASA_STATUS_UNSUCCESSFUL);
@ -366,7 +369,7 @@ Rpc(
}
else
{
DbgTrace(0, "-Rpc- Buffer allocation failure\n", 0);
DbgTrace(0, "-InternalRpc- Buffer allocation failure\n", 0);
retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR,
CASA_FACILITY_AUTHTOKEN,
CASA_STATUS_INSUFFICIENT_RESOURCES);
@ -374,7 +377,7 @@ Rpc(
}
else
{
DbgTrace(0, "-Rpc- HTTP request did not complete successfully, status = %S\n", httpCompStatus);
DbgTrace(0, "-InternalRpc- HTTP request did not complete successfully, status = %S\n", httpCompStatus);
retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR,
CASA_FACILITY_AUTHTOKEN,
CASA_STATUS_UNSUCCESSFUL);
@ -382,7 +385,7 @@ Rpc(
}
else
{
DbgTrace(0, "-Rpc- Unable to obtain http request completion status, error = %d\n", GetLastError());
DbgTrace(0, "-InternalRpc- Unable to obtain http request completion status, error = %d\n", GetLastError());
retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR,
CASA_FACILITY_AUTHTOKEN,
CASA_STATUS_UNSUCCESSFUL);
@ -390,7 +393,7 @@ Rpc(
}
else
{
DbgTrace(0, "-Rpc- Unable to receive response, error = %d\n", GetLastError());
DbgTrace(0, "-InternalRpc- Unable to receive response, error = %d\n", GetLastError());
retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR,
CASA_FACILITY_AUTHTOKEN,
CASA_STATUS_UNSUCCESSFUL);
@ -400,7 +403,7 @@ Rpc(
{
int error = GetLastError();
DbgTrace(0, "-Rpc- Unsuccessful send http request, error = %d\n", error);
DbgTrace(0, "-InternalRpc- Unsuccessful send http request, error = %d\n", error);
if (error == ERROR_WINHTTP_CANNOT_CONNECT)
{
retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR,
@ -420,7 +423,7 @@ Rpc(
}
else
{
DbgTrace(0, "-Rpc- Unable to open http request, error = %d\n", GetLastError());
DbgTrace(0, "-InternalRpc- Unable to open http request, error = %d\n", GetLastError());
retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR,
CASA_FACILITY_AUTHTOKEN,
CASA_STATUS_UNSUCCESSFUL);
@ -431,12 +434,65 @@ Rpc(
}
else
{
DbgTrace(0, "-Rpc- Error converting method name to wide string\n", 0);
DbgTrace(0, "-InternalRpc- Error converting method name to wide string\n", 0);
}
DbgTrace(1, "-InternalRpc- End, retStatus = %d\n", retStatus);
return retStatus;
}
//++=======================================================================
CasaStatus
Rpc(
IN RpcSession *pSession,
IN char *pMethod,
IN bool secure,
IN char *pRequestData,
INOUT char **ppResponseData,
INOUT int *pResponseDataLen)
//
// Arguments:
//
// Returns:
//
// Abstract:
//
// Notes:
//
// L2
//=======================================================================--
{
CasaStatus retStatus;
int retries = 0;
DbgTrace(1, "-Rpc- Start\n", 0);
// Retry the RPC as needed
do
{
// Issue the RPC
retStatus = InternalRpc(pSession,
pMethod,
secure,
pRequestData,
ppResponseData,
pResponseDataLen);
// Account for this try
retries ++;
} while (CasaStatusCode(retStatus) == CASA_STATUS_AUTH_SERVER_UNAVAILABLE
&& retries < MAX_RPC_RETRIES);
DbgTrace(1, "-Rpc- End, retStatus = %d\n", retStatus);
return retStatus;
}
//++=======================================================================
//++=======================================================================
//++=======================================================================