ANSC_STATUS WebVhoDelGso ( ANSC_HANDLE hThisObject, ULONG ulSessionId, 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 ulClientAddr = 0; PSINGLE_LINK_ENTRY pSLinkEntry = NULL; ULONG ulHashIndex = AnscHashUlong(ulSessionId, WEB_VHO_GSO_TABLE_SIZE); AnscAcquireLock(&pMyObject->GsoTableLock); pSLinkEntry = AnscSListGetFirstEntry(&pMyObject->GsoTable[ulHashIndex]); while ( pSLinkEntry ) { pSession = ACCESS_WEB_GENERAL_SESSION_OBJECT(pSLinkEntry); ulClientAddr = *(PULONG)pSession->GetClientAddr((ANSC_HANDLE)pSession); pSLinkEntry = AnscSListGetNextEntry(pSLinkEntry); if ( (pSession->GetSessionId((ANSC_HANDLE)pSession) == ulSessionId ) && (ulClientAddr == AnscReadUlong(address)) ) { AnscSListPopEntryByLink(&pMyObject->GsoTable[ulHashIndex], &pSession->Linkage); pSession->AcquireAccess((ANSC_HANDLE)pSession); returnStatus = pLsmIf->EndSession ( pLsmIf->hOwnerContext, (ANSC_HANDLE)pSession ); pSession->ReleaseAccess((ANSC_HANDLE)pSession); pSession->Cancel ((ANSC_HANDLE)pSession); pSession->Remove ((ANSC_HANDLE)pSession); } } AnscReleaseLock(&pMyObject->GsoTableLock); return ANSC_STATUS_SUCCESS; }
ANSC_STATUS WebVhoDelAllGsos ( ANSC_HANDLE hThisObject ) { 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; PSINGLE_LINK_ENTRY pSLinkEntry = NULL; ULONG i = 0; AnscAcquireLock(&pMyObject->GsoTableLock); for ( i = 0; i < WEB_VHO_GSO_TABLE_SIZE; i++ ) { pSLinkEntry = AnscSListPopEntry(&pMyObject->GsoTable[i]); while ( pSLinkEntry ) { pSession = ACCESS_WEB_GENERAL_SESSION_OBJECT(pSLinkEntry); pSLinkEntry = AnscSListPopEntry(&pMyObject->GsoTable[i]); pSession->AcquireAccess((ANSC_HANDLE)pSession); returnStatus = pLsmIf->ExpireSession ( pLsmIf->hOwnerContext, (ANSC_HANDLE)pSession ); pSession->ReleaseAccess((ANSC_HANDLE)pSession); pSession->Cancel ((ANSC_HANDLE)pSession); pSession->Remove ((ANSC_HANDLE)pSession); } } AnscReleaseLock(&pMyObject->GsoTableLock); return ANSC_STATUS_SUCCESS; }