ANSC_STATUS HttpSpoManufactureBmoRepPool ( 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_HFP_INTERFACE pHfpIf = (PHTTP_HFP_INTERFACE )pMyObject->hHfpIf; PHTTP_BMO_REP_OBJECT pBmoRep = NULL; ULONG i = 0; if ( pMyObject->ProxyMode & HTTP_SPO_MODE_COMPACT ) { return ANSC_STATUS_SUCCESS; } for ( i = 0; i < HTTP_SPO_INITIAL_BMO_NUMBER; i++ ) { pBmoRep = (PHTTP_BMO_REP_OBJECT)HttpCreateBmoRep ( pMyObject->hContainerContext, (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)NULL ); if ( !pBmoRep ) { continue; } else { pBmoRep->SetHfpIf ((ANSC_HANDLE)pBmoRep, (ANSC_HANDLE)pHfpIf); pBmoRep->SetRecvContext((ANSC_HANDLE)pBmoRep, (ANSC_HANDLE)NULL ); pBmoRep->SetSendContext((ANSC_HANDLE)pBmoRep, (ANSC_HANDLE)NULL ); } AnscAcquireLock (&pMyObject->BmoRepSListLock); AnscSListPushEntry(&pMyObject->BmoRepSList, &pBmoRep->Linkage); AnscReleaseLock (&pMyObject->BmoRepSListLock); } return ANSC_STATUS_SUCCESS; }
ANSC_HANDLE HttpSpoAcquireBmoRep ( 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_HFP_INTERFACE pHfpIf = (PHTTP_HFP_INTERFACE )pMyObject->hHfpIf; PHTTP_BMO_REP_OBJECT pBmoRep = NULL; PSINGLE_LINK_ENTRY pSLinkEntry = NULL; AnscAcquireLock(&pMyObject->BmoRepSListLock); pSLinkEntry = AnscSListPopEntry(&pMyObject->BmoRepSList); AnscReleaseLock(&pMyObject->BmoRepSListLock); if ( pSLinkEntry ) { pBmoRep = ACCESS_HTTP_BMO_REP_OBJECT(pSLinkEntry); return (ANSC_HANDLE)pBmoRep; } pBmoRep = (PHTTP_BMO_REP_OBJECT)HttpCreateBmoRep ( pMyObject->hContainerContext, (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)NULL ); if ( !pBmoRep ) { return (ANSC_HANDLE)NULL; } else { pBmoRep->SetHfpIf ((ANSC_HANDLE)pBmoRep, (ANSC_HANDLE)pHfpIf); pBmoRep->SetRecvContext((ANSC_HANDLE)pBmoRep, (ANSC_HANDLE)NULL ); pBmoRep->SetSendContext((ANSC_HANDLE)pBmoRep, (ANSC_HANDLE)NULL ); } return (ANSC_HANDLE)pBmoRep; }