ANSC_STATUS WebRooDoPost ( ANSC_HANDLE hThisObject, ANSC_HANDLE hBmoReq, ANSC_HANDLE hBmoRep ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PWEB_RESOURCE_OWNER_OBJECT pMyObject = (PWEB_RESOURCE_OWNER_OBJECT )hThisObject; PWEB_RESOURCE_OWNER_PROPERTY pProperty = (PWEB_RESOURCE_OWNER_PROPERTY)&pMyObject->Property; PHTTP_RCP_INTERFACE pRcpIf = (PHTTP_RCP_INTERFACE )pMyObject->hRcpIf; PHTTP_BMO_REQ_OBJECT pBmoReq = (PHTTP_BMO_REQ_OBJECT )hBmoReq; PHTTP_BMO_REP_OBJECT pBmoRep = (PHTTP_BMO_REP_OBJECT )hBmoRep; PHTTP_REQUEST_INFO pReqInfo = (PHTTP_REQUEST_INFO )pBmoReq->GetReqInfo ((ANSC_HANDLE)pBmoReq); PANSC_TOKEN_CHAIN pPathTokenChain = (PANSC_TOKEN_CHAIN )pBmoReq->GetRecvContext((ANSC_HANDLE)pBmoReq); PWEB_GENERAL_SESSION_OBJECT pSession = (PWEB_GENERAL_SESSION_OBJECT )pBmoRep->GetRecvContext((ANSC_HANDLE)pBmoRep); returnStatus = pMyObject->ReplyReq ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pBmoRep, HTTP_STATUS_OK, (ANSC_HANDLE)NULL ); return returnStatus; }
ANSC_STATUS WebRooDoConnect ( ANSC_HANDLE hThisObject, ANSC_HANDLE hBmoReq, ANSC_HANDLE hBmoRep ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PWEB_RESOURCE_OWNER_OBJECT pMyObject = (PWEB_RESOURCE_OWNER_OBJECT )hThisObject; PWEB_RESOURCE_OWNER_PROPERTY pProperty = (PWEB_RESOURCE_OWNER_PROPERTY)&pMyObject->Property; PHTTP_RCP_INTERFACE pRcpIf = (PHTTP_RCP_INTERFACE )pMyObject->hRcpIf; PHTTP_BMO_REQ_OBJECT pBmoReq = (PHTTP_BMO_REQ_OBJECT )hBmoReq; PHTTP_BMO_REP_OBJECT pBmoRep = (PHTTP_BMO_REP_OBJECT )hBmoRep; PHTTP_REQUEST_INFO pReqInfo = (PHTTP_REQUEST_INFO )pBmoReq->GetReqInfo ((ANSC_HANDLE)pBmoReq); PANSC_TOKEN_CHAIN pPathTokenChain = (PANSC_TOKEN_CHAIN )pBmoReq->GetRecvContext((ANSC_HANDLE)pBmoReq); PWEB_GENERAL_SESSION_OBJECT pSession = (PWEB_GENERAL_SESSION_OBJECT )pBmoRep->GetRecvContext((ANSC_HANDLE)pBmoRep); PHTTP_HFO_ALLOW pHttpHfoAllow = NULL; pHttpHfoAllow = (PHTTP_HFO_ALLOW)AnscAllocateMemory(sizeof(HTTP_HFO_ALLOW)); if ( !pHttpHfoAllow ) { return ANSC_STATUS_RESOURCES; } else { pHttpHfoAllow->HashIndex = 0; pHttpHfoAllow->Flags = 0; pHttpHfoAllow->HeaderId = HTTP_HEADER_ID_ALLOW; pHttpHfoAllow->MethodCount = 4; pHttpHfoAllow->MethodArray[0] = HTTP_METHOD_CODE_OPTIONS; pHttpHfoAllow->MethodArray[1] = HTTP_METHOD_CODE_GET; pHttpHfoAllow->MethodArray[2] = HTTP_METHOD_CODE_HEAD; pHttpHfoAllow->MethodArray[3] = HTTP_METHOD_CODE_POST; } returnStatus = pMyObject->ReplyReq ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pBmoRep, HTTP_STATUS_METHOD_NOT_ALLOWED, (ANSC_HANDLE)pHttpHfoAllow ); return returnStatus; }
ANSC_STATUS BwspWsoDoHead ( ANSC_HANDLE hThisObject, ANSC_HANDLE hBmoReq, ANSC_HANDLE hBmoRep ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PBWSP_WEB_SERVLET_OBJECT pMyObject = (PBWSP_WEB_SERVLET_OBJECT )hThisObject; PBWSP_WEB_SERVLET_PROPERTY pProperty = (PBWSP_WEB_SERVLET_PROPERTY )&pMyObject->Property; PBWSP_WSH_INTERFACE pBwspWshIf = (PBWSP_WSH_INTERFACE )pMyObject->hBwspWshIf; PHTTP_RCP_INTERFACE pRcpIf = (PHTTP_RCP_INTERFACE )pMyObject->hRcpIf; PHTTP_BMO_REQ_OBJECT pBmoReq = (PHTTP_BMO_REQ_OBJECT )hBmoReq; PHTTP_BMO_REP_OBJECT pBmoRep = (PHTTP_BMO_REP_OBJECT )hBmoRep; PHTTP_REQUEST_INFO pReqInfo = (PHTTP_REQUEST_INFO )pBmoReq->GetReqInfo ((ANSC_HANDLE)pBmoReq); PANSC_TOKEN_CHAIN pPathTokenChain = (PANSC_TOKEN_CHAIN )pBmoReq->GetRecvContext((ANSC_HANDLE)pBmoReq); PWEB_GENERAL_SESSION_OBJECT pSession = (PWEB_GENERAL_SESSION_OBJECT)pBmoRep->GetRecvContext((ANSC_HANDLE)pBmoRep); if ( pBwspWshIf->DoHead ) { returnStatus = pBwspWshIf->DoHead ( pBwspWshIf->hOwnerContext, (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pBmoRep ); } else { returnStatus = pMyObject->ReplyReq ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pBmoRep, HTTP_STATUS_OK, (ANSC_HANDLE)NULL ); } return returnStatus; }
ANSC_STATUS WebRooProcess ( ANSC_HANDLE hThisObject, ANSC_HANDLE hBmoReq, ANSC_HANDLE hBmoRep ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PWEB_RESOURCE_OWNER_OBJECT pMyObject = (PWEB_RESOURCE_OWNER_OBJECT )hThisObject; PWEB_RESOURCE_OWNER_PROPERTY pProperty = (PWEB_RESOURCE_OWNER_PROPERTY)&pMyObject->Property; PHTTP_RCP_INTERFACE pRcpIf = (PHTTP_RCP_INTERFACE )pMyObject->hRcpIf; PHTTP_BMO_REQ_OBJECT pBmoReq = (PHTTP_BMO_REQ_OBJECT )hBmoReq; PHTTP_BMO_REP_OBJECT pBmoRep = (PHTTP_BMO_REP_OBJECT )hBmoRep; PHTTP_REQUEST_INFO pReqInfo = (PHTTP_REQUEST_INFO )pBmoReq->GetReqInfo ((ANSC_HANDLE)pBmoReq); PANSC_TOKEN_CHAIN pPathTokenChain = (PANSC_TOKEN_CHAIN )pBmoReq->GetRecvContext((ANSC_HANDLE)pBmoReq); PWEB_GENERAL_SESSION_OBJECT pSession = (PWEB_GENERAL_SESSION_OBJECT )pBmoRep->GetRecvContext((ANSC_HANDLE)pBmoRep); PWEB_AUTH_SERVER_OBJECT pAuthServer = (PWEB_AUTH_SERVER_OBJECT )pMyObject->hAuthServer; BOOL bAuthenticated = TRUE; pBmoReq->SetRcpIf ((ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pRcpIf ); pBmoRep->SetWebServlet((ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pMyObject); if ( pReqInfo->MajorVersion != HTTP_CURRENT_MAJOR_VERSION ) { returnStatus = pMyObject->ReplyReq ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pBmoRep, HTTP_STATUS_VERSION_NOT_SUPPORTED, (ANSC_HANDLE)NULL ); goto EXIT1; } if ( pAuthServer ) { returnStatus = pAuthServer->AuthenticateReq ( (ANSC_HANDLE)pAuthServer, (ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pBmoRep ); bAuthenticated = ( returnStatus == ANSC_STATUS_SUCCESS ); returnStatus = ANSC_STATUS_SUCCESS; } if ( bAuthenticated ) { switch ( pBmoReq->GetMethod((ANSC_HANDLE)pBmoReq) ) { case HTTP_METHOD_CODE_OPTIONS : returnStatus = pMyObject->DoOptions ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pBmoRep ); break; case HTTP_METHOD_CODE_GET : returnStatus = pMyObject->DoGet ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pBmoRep ); break; case HTTP_METHOD_CODE_HEAD : returnStatus = pMyObject->DoHead ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pBmoRep ); break; case HTTP_METHOD_CODE_POST : returnStatus = pMyObject->DoPost ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pBmoRep ); break; case HTTP_METHOD_CODE_PUT : returnStatus = pMyObject->DoPut ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pBmoRep ); break; case HTTP_METHOD_CODE_DELETE : returnStatus = pMyObject->DoDelete ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pBmoRep ); break; case HTTP_METHOD_CODE_TRACE : returnStatus = pMyObject->DoTrace ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pBmoRep ); break; case HTTP_METHOD_CODE_CONNECT : returnStatus = pMyObject->DoConnect ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pBmoRep ); break; default : if ( pProperty->OwnerFlag & WEB_ROO_FLAG_UPNP_SUPPORT ) { if ( pBmoReq->GetMethod((ANSC_HANDLE)pBmoReq) == HTTP_METHOD_CODE_NOTIFY ) { returnStatus = pMyObject->DoNotify ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pBmoRep ); break; } else if ( pBmoReq->GetMethod((ANSC_HANDLE)pBmoReq) == HTTP_METHOD_CODE_SEARCH ) { returnStatus = pMyObject->DoSearch ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pBmoRep ); break; } else if ( pBmoReq->GetMethod((ANSC_HANDLE)pBmoReq) == HTTP_METHOD_CODE_M_SEARCH ) { returnStatus = pMyObject->DoMSearch ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pBmoRep ); break; } else if ( pBmoReq->GetMethod((ANSC_HANDLE)pBmoReq) == HTTP_METHOD_CODE_M_POST ) { returnStatus = pMyObject->DoMPost ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pBmoRep ); break; } else if ( pBmoReq->GetMethod((ANSC_HANDLE)pBmoReq) == HTTP_METHOD_CODE_SUBSCRIBE ) { returnStatus = pMyObject->DoSubscribe ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pBmoRep ); break; } else if ( pBmoReq->GetMethod((ANSC_HANDLE)pBmoReq) == HTTP_METHOD_CODE_UNSUBSCRIBE ) { returnStatus = pMyObject->DoUnsubscribe ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pBmoRep ); break; } } returnStatus = pMyObject->ReplyReq ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pBmoRep, HTTP_STATUS_NOT_IMPLEMENTED, (ANSC_HANDLE)NULL ); break; } } /****************************************************************** GRACEFUL ROLLBACK PROCEDURES AND EXIT DOORS ******************************************************************/ EXIT1: AnscDelTokenChain((ANSC_HANDLE)pPathTokenChain); AnscFreeMemory ((ANSC_HANDLE)pPathTokenChain); return returnStatus; }
ANSC_STATUS BwspWsoDoConnect ( ANSC_HANDLE hThisObject, ANSC_HANDLE hBmoReq, ANSC_HANDLE hBmoRep ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PBWSP_WEB_SERVLET_OBJECT pMyObject = (PBWSP_WEB_SERVLET_OBJECT )hThisObject; PBWSP_WEB_SERVLET_PROPERTY pProperty = (PBWSP_WEB_SERVLET_PROPERTY )&pMyObject->Property; PBWSP_WSH_INTERFACE pBwspWshIf = (PBWSP_WSH_INTERFACE )pMyObject->hBwspWshIf; PHTTP_RCP_INTERFACE pRcpIf = (PHTTP_RCP_INTERFACE )pMyObject->hRcpIf; PHTTP_BMO_REQ_OBJECT pBmoReq = (PHTTP_BMO_REQ_OBJECT )hBmoReq; PHTTP_BMO_REP_OBJECT pBmoRep = (PHTTP_BMO_REP_OBJECT )hBmoRep; PHTTP_REQUEST_INFO pReqInfo = (PHTTP_REQUEST_INFO )pBmoReq->GetReqInfo ((ANSC_HANDLE)pBmoReq); PANSC_TOKEN_CHAIN pPathTokenChain = (PANSC_TOKEN_CHAIN )pBmoReq->GetRecvContext((ANSC_HANDLE)pBmoReq); PWEB_GENERAL_SESSION_OBJECT pSession = (PWEB_GENERAL_SESSION_OBJECT)pBmoRep->GetRecvContext((ANSC_HANDLE)pBmoRep); PHTTP_HFO_ALLOW pHttpHfoAllow = NULL; ULONG j = 0; if ( pBwspWshIf->DoConnect ) { returnStatus = pBwspWshIf->DoConnect ( pBwspWshIf->hOwnerContext, (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pBmoRep ); } else { pHttpHfoAllow = (PHTTP_HFO_ALLOW)AnscAllocateMemory(sizeof(HTTP_HFO_ALLOW)); if ( !pHttpHfoAllow ) { return ANSC_STATUS_RESOURCES; } else { pHttpHfoAllow->HashIndex = 0; pHttpHfoAllow->Flags = 0; pHttpHfoAllow->HeaderId = HTTP_HEADER_ID_ALLOW; j = 0; pHttpHfoAllow->MethodArray[j++] = HTTP_METHOD_CODE_OPTIONS; pHttpHfoAllow->MethodArray[j++] = HTTP_METHOD_CODE_GET; pHttpHfoAllow->MethodArray[j++] = HTTP_METHOD_CODE_HEAD; if ( pBwspWshIf->DoPost ) { pHttpHfoAllow->MethodArray[j++] = HTTP_METHOD_CODE_POST; } if ( pBwspWshIf->DoPut ) { pHttpHfoAllow->MethodArray[j++] = HTTP_METHOD_CODE_PUT; } if ( pBwspWshIf->DoDelete ) { pHttpHfoAllow->MethodArray[j++] = HTTP_METHOD_CODE_DELETE; } if ( pBwspWshIf->DoTrace ) { pHttpHfoAllow->MethodArray[j++] = HTTP_METHOD_CODE_TRACE; } if ( pBwspWshIf->DoConnect ) { pHttpHfoAllow->MethodArray[j++] = HTTP_METHOD_CODE_CONNECT; } pHttpHfoAllow->MethodCount = j; } returnStatus = pMyObject->ReplyReq ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pBmoReq, (ANSC_HANDLE)pBmoRep, HTTP_STATUS_METHOD_NOT_ALLOWED, (ANSC_HANDLE)pHttpHfoAllow ); } return returnStatus; }