Changes due to continued development effort.
This commit is contained in:
parent
fe756d9f5e
commit
3f76e165ad
@ -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;
|
||||
}
|
||||
|
||||
|
||||
//++=======================================================================
|
||||
//++=======================================================================
|
||||
//++=======================================================================
|
||||
|
||||
|
@ -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); \
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
//++=======================================================================
|
||||
//++=======================================================================
|
||||
//++=======================================================================
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
//++=======================================================================
|
||||
//++=======================================================================
|
||||
//++=======================================================================
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user