ANSC_STATUS WebVhoLsmNewContact ( ANSC_HANDLE hThisObject, ANSC_HANDLE hSession ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PWEB_VIRTUAL_HOST_OBJECT pMyObject = (PWEB_VIRTUAL_HOST_OBJECT )hThisObject; PWEB_VIRTUAL_HOST_PROPERTY pProperty = (PWEB_VIRTUAL_HOST_PROPERTY )&pMyObject->Property; PHTTP_HFP_INTERFACE pHfpIf = (PHTTP_HFP_INTERFACE )pMyObject->hHfpIf; PWEB_LSM_INTERFACE pLsmIf = (PWEB_LSM_INTERFACE )pMyObject->hLsmIf; PWEB_GENERAL_SESSION_OBJECT pSession = (PWEB_GENERAL_SESSION_OBJECT)hSession; returnStatus = pSession->SetLsmIdentifier ( (ANSC_HANDLE)pSession, WEB_DEF_LSM_CLIENT_ID ); return returnStatus; }
ANSC_HANDLE WebVhoAddGso ( ANSC_HANDLE hThisObject, char* identifier, PUCHAR address, USHORT port ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PWEB_VIRTUAL_HOST_OBJECT pMyObject = (PWEB_VIRTUAL_HOST_OBJECT )hThisObject; PWEB_VIRTUAL_HOST_PROPERTY pProperty = (PWEB_VIRTUAL_HOST_PROPERTY)&pMyObject->Property; PHTTP_HFP_INTERFACE pHfpIf = (PHTTP_HFP_INTERFACE )pMyObject->hHfpIf; PWEB_LSM_INTERFACE pLsmIf = (PWEB_LSM_INTERFACE )pMyObject->hLsmIf; PWEB_GENERAL_SESSION_OBJECT pSession = NULL; ULONG ulHashIndex = 0; pMyObject->GlobalSidCount++; if ( pMyObject->GlobalSidCount >= 0x7FFFFFFF ) { pMyObject->GlobalSidCount = 0; } pSession = (PWEB_GENERAL_SESSION_OBJECT)WebCreateGeneralSession ( pMyObject->hContainerContext, (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)NULL ); if ( !pSession ) { return (ANSC_HANDLE)NULL; } else { pSession->SetHfpIf ((ANSC_HANDLE)pSession, (ANSC_HANDLE)pHfpIf ); pSession->SetSessionId ((ANSC_HANDLE)pSession, pMyObject->GlobalSidCount ); pSession->SetClientAddr ((ANSC_HANDLE)pSession, address ); pSession->SetClientPort ((ANSC_HANDLE)pSession, port ); pSession->SetLsmContext ((ANSC_HANDLE)pSession, (ANSC_HANDLE)NULL ); pSession->SetLsmMaxAge ((ANSC_HANDLE)pSession, pProperty->LsmCookieMaxAge ); pSession->SetLsmExpire ((ANSC_HANDLE)pSession, pProperty->SessionTimeOut ); pSession->SetMaxLifespan((ANSC_HANDLE)pSession, pProperty->SessionMaxLifespan); } if ( identifier ) { pSession->SetLsmIdentifier((ANSC_HANDLE)pSession, identifier); returnStatus = pLsmIf->ClassifyClient ( pLsmIf->hOwnerContext, (ANSC_HANDLE)pSession ); } else { returnStatus = pLsmIf->NewContact ( pLsmIf->hOwnerContext, (ANSC_HANDLE)pSession ); } ulHashIndex = AnscHashUlong(pSession->SessionId, WEB_VHO_GSO_TABLE_SIZE); pSession->HashIndex = ulHashIndex; AnscAcquireLock(&pMyObject->GsoTableLock); pSession->AcquireAccess((ANSC_HANDLE)pSession); pSession->Engage ((ANSC_HANDLE)pSession); AnscSListPushEntry(&pMyObject->GsoTable[ulHashIndex], &pSession->Linkage); AnscReleaseLock(&pMyObject->GsoTableLock); return (ANSC_HANDLE)pSession; }