ANSC_STATUS HttpSpoManufactureBmoReqPool ( 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_REQ_OBJECT pBmoReq = 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++ ) { pBmoReq = (PHTTP_BMO_REQ_OBJECT)HttpCreateBmoReq ( pMyObject->hContainerContext, (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)NULL ); if ( !pBmoReq ) { continue; } else { pBmoReq->SetHfpIf ((ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pHfpIf); pBmoReq->SetRecvContext((ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)NULL ); pBmoReq->SetSendContext((ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)NULL ); } AnscAcquireLock (&pMyObject->BmoReqSListLock); AnscSListPushEntry(&pMyObject->BmoReqSList, &pBmoReq->Linkage); AnscReleaseLock (&pMyObject->BmoReqSListLock); } return ANSC_STATUS_SUCCESS; }
ANSC_HANDLE HttpSpoAcquireBmoReq ( 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_REQ_OBJECT pBmoReq = NULL; PSINGLE_LINK_ENTRY pSLinkEntry = NULL; AnscAcquireLock(&pMyObject->BmoReqSListLock); pSLinkEntry = AnscSListPopEntry(&pMyObject->BmoReqSList); AnscReleaseLock(&pMyObject->BmoReqSListLock); if ( pSLinkEntry ) { pBmoReq = ACCESS_HTTP_BMO_REQ_OBJECT(pSLinkEntry); return (ANSC_HANDLE)pBmoReq; } pBmoReq = (PHTTP_BMO_REQ_OBJECT)HttpCreateBmoReq ( pMyObject->hContainerContext, (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)NULL ); if ( !pBmoReq ) { return (ANSC_HANDLE)NULL; } else { pBmoReq->SetHfpIf ((ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pHfpIf); pBmoReq->SetRecvContext((ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)NULL ); pBmoReq->SetSendContext((ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)NULL ); } return (ANSC_HANDLE)pBmoReq; }
ANSC_STATUS HttpWstoOpen ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PHTTP_WEBS_TRANS_OBJECT pMyObject = (PHTTP_WEBS_TRANS_OBJECT )hThisObject; PHTTP_SIMPLE_SERVER_OBJECT pSimpleServer = (PHTTP_SIMPLE_SERVER_OBJECT )pMyObject->hOwnerContext; PANSC_DAEMON_SOCKET_TCP_OBJECT pWebSocket = (PANSC_DAEMON_SOCKET_TCP_OBJECT)pMyObject->hWebSocket; PHTTP_HFP_INTERFACE pHfpIf = (PHTTP_HFP_INTERFACE )pMyObject->hHfpIf; PHTTP_TMH_INTERFACE pTmhIf = (PHTTP_TMH_INTERFACE )pMyObject->hTmhIf; PHTTP_BMO_REQ_OBJECT pBmoReq = (PHTTP_BMO_REQ_OBJECT )pMyObject->hBmoReq; PHTTP_BMO_REP_OBJECT pBmoRep = (PHTTP_BMO_REP_OBJECT )pMyObject->hBmoRep; HTTP_SIMPLE_SERVER_PROPERTY httpSsoProperty; returnStatus = pSimpleServer->GetProperty ( (ANSC_HANDLE)pSimpleServer, (ANSC_HANDLE)&httpSsoProperty ); if ( !pBmoReq ) { pBmoReq = (PHTTP_BMO_REQ_OBJECT)pSimpleServer->AcquireBmoReq((ANSC_HANDLE)pSimpleServer); if ( !pBmoReq ) { return ANSC_STATUS_RESOURCES; } else { pMyObject->hBmoReq = (ANSC_HANDLE)pBmoReq; } pBmoReq->SetHfpIf ((ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pHfpIf ); pBmoReq->SetTmhIf ((ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pTmhIf ); pBmoReq->SetTransactionId((ANSC_HANDLE)pBmoReq, 0 ); pBmoReq->SetClientAddr ((ANSC_HANDLE)pBmoReq, pWebSocket->PeerAddress.Dot ); pBmoReq->SetClientPort ((ANSC_HANDLE)pBmoReq, pWebSocket->PeerPort ); pBmoReq->SetDaemonAddr ((ANSC_HANDLE)pBmoReq, httpSsoProperty.HostAddress.Dot); pBmoReq->SetDaemonPort ((ANSC_HANDLE)pBmoReq, httpSsoProperty.HostPort ); pBmoReq->SetServerMode ((ANSC_HANDLE)pBmoReq, pSimpleServer->ServerMode ); } if ( !pBmoRep ) { pBmoRep = (PHTTP_BMO_REP_OBJECT)pSimpleServer->AcquireBmoRep((ANSC_HANDLE)pSimpleServer); if ( !pBmoRep ) { return ANSC_STATUS_RESOURCES; } else { pMyObject->hBmoRep = (ANSC_HANDLE)pBmoRep; } pBmoRep->SetHfpIf ((ANSC_HANDLE)pBmoRep, (ANSC_HANDLE)pHfpIf); pBmoRep->SetTmhIf ((ANSC_HANDLE)pBmoRep, (ANSC_HANDLE)pTmhIf); pBmoRep->SetTransactionId((ANSC_HANDLE)pBmoRep, 0 ); } return ANSC_STATUS_SUCCESS; }