ANSC_STATUS HttpSpoManufacturePsoPool ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PHTTP_SIMPLE_PROXY_OBJECT pMyObject = (PHTTP_SIMPLE_PROXY_OBJECT )hThisObject; PHTTP_SIMPLE_PROXY_PROPERTY pProperty = (PHTTP_SIMPLE_PROXY_PROPERTY)&pMyObject->Property; PHTTP_PROXY_SESSION_OBJECT pSession = NULL; ULONG i = 0; if ( pMyObject->ProxyMode & HTTP_SPO_MODE_COMPACT ) { return ANSC_STATUS_SUCCESS; } for ( i = 0; i < HTTP_SPO_INITIAL_PSO_NUMBER; i++ ) { pSession = (PHTTP_PROXY_SESSION_OBJECT)HttpCreateProxySession ( pMyObject->hContainerContext, (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)NULL ); if ( !pSession ) { continue; } else { pSession->SetClientSocket((ANSC_HANDLE)pSession, (ANSC_HANDLE)NULL); pSession->SetServerSocket((ANSC_HANDLE)pSession, (ANSC_HANDLE)NULL); pSession->SetSbcContext ((ANSC_HANDLE)pSession, (ANSC_HANDLE)NULL); pSession->SetCbcContext ((ANSC_HANDLE)pSession, (ANSC_HANDLE)NULL); } AnscAcquireLock (&pMyObject->PsoSListLock); AnscSListPushEntry(&pMyObject->PsoSList, &pSession->Linkage); AnscReleaseLock (&pMyObject->PsoSListLock); } return ANSC_STATUS_SUCCESS; }
ANSC_HANDLE HttpSpoAcquirePso ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PHTTP_SIMPLE_PROXY_OBJECT pMyObject = (PHTTP_SIMPLE_PROXY_OBJECT )hThisObject; PHTTP_SIMPLE_PROXY_PROPERTY pProperty = (PHTTP_SIMPLE_PROXY_PROPERTY)&pMyObject->Property; PHTTP_PROXY_SESSION_OBJECT pSession = NULL; PSINGLE_LINK_ENTRY pSLinkEntry = NULL; AnscAcquireLock(&pMyObject->PsoSListLock); pSLinkEntry = AnscSListPopEntry(&pMyObject->PsoSList); AnscReleaseLock(&pMyObject->PsoSListLock); if ( pSLinkEntry ) { pSession = ACCESS_HTTP_PROXY_SESSION_OBJECT(pSLinkEntry); return (ANSC_HANDLE)pSession; } pSession = (PHTTP_PROXY_SESSION_OBJECT)HttpCreateProxySession ( pMyObject->hContainerContext, (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)NULL ); if ( !pSession ) { return (ANSC_HANDLE)NULL; } else { pSession->SetClientSocket((ANSC_HANDLE)pSession, (ANSC_HANDLE)NULL); pSession->SetServerSocket((ANSC_HANDLE)pSession, (ANSC_HANDLE)NULL); pSession->SetSbcContext ((ANSC_HANDLE)pSession, (ANSC_HANDLE)NULL); pSession->SetCbcContext ((ANSC_HANDLE)pSession, (ANSC_HANDLE)NULL); } return (ANSC_HANDLE)pSession; }