ANSC_STATUS CcspCwmpAcscoHttpBspPolish ( ANSC_HANDLE hThisObject, ANSC_HANDLE hBmoReq, ANSC_HANDLE hReqContext ) { PCCSP_CWMP_ACS_CONNECTION_OBJECT pMyObject = (PCCSP_CWMP_ACS_CONNECTION_OBJECT)hThisObject; PANSC_ACS_INTERN_HTTP_CONTENT pHttpGetReq = (PANSC_ACS_INTERN_HTTP_CONTENT)hReqContext; ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PHTTP_BMO_REQ_OBJECT pBmoReqObj = (PHTTP_BMO_REQ_OBJECT)hBmoReq; char pBuffer[64] = { 0 }; ULONG i, len = 0; /* add Authorization header - last good one */ if ( pMyObject->AuthHeaderValue ) { pBmoReqObj->SetHeaderValueByName((ANSC_HANDLE)pBmoReqObj, "Authorization", pMyObject->AuthHeaderValue); } /* * If there's a cookie returned, add the cookie */ for ( i = 0; i < pMyObject->NumCookies; i ++ ) { if ( pMyObject->Cookies[i] == NULL ) break; len += _ansc_strlen(pMyObject->Cookies[i]); } if ( pMyObject->NumCookies == 0 ) { CcspTr069PaTraceDebug(("No Cookie will be added.\n")); } else { char *cookies = (char *)CcspTr069PaAllocateMemory(len + pMyObject->NumCookies*2); if (cookies) { AnscZeroMemory(cookies, len + pMyObject->NumCookies*2); for ( i = 0; i < pMyObject->NumCookies; i ++ ) { if ( pMyObject->Cookies[i] == NULL ) break; _ansc_strcat(cookies, pMyObject->Cookies[i]); if ( i < pMyObject->NumCookies - 1 ) _ansc_strcat(cookies, "; "); } pBmoReqObj->SetHeaderValueByName ( (ANSC_HANDLE)pBmoReqObj, "Cookie", cookies ); CcspTr069PaTraceDebug(("Add Cookie into message: %s\n", cookies)); CcspTr069PaFreeMemory(cookies); } } /* When there is more than one envelope in a single HTTP Request, * when there is a SOAP response in an HTTP Request, or when there is a * SOAP Fault response in an HTTP Request, the SOAPAction header in the * HTTP Request MUST have no value (with no quotes), indicating that this * header provides no information as to the intent of the message." */ if( pHttpGetReq ==NULL || pHttpGetReq->SoapMessage == NULL || AnscSizeOfString(pHttpGetReq->SoapMessage) == 0) { /* * An empty HTTP POST MUST NOT contain a SOAPAction header. * An empty HTTP POST MUST NOT contain a Content-Type header. */ pBmoReqObj->SetHeaderValueByName((ANSC_HANDLE)pBmoReqObj, "Content-Length", "0"); /* pBmoReqObj->SetHeaderValueByName((ANSC_HANDLE)pBmoReqObj, "Content-Type", "text/xml;charset=utf-8"); */ } else { pBmoReqObj->SetHeaderValueByName((ANSC_HANDLE)pBmoReqObj, "Content-Type", "text/xml;charset=utf-8"); _ansc_sprintf(pBuffer, "%u", (unsigned int)AnscSizeOfString(pHttpGetReq->SoapMessage)); pBmoReqObj->SetHeaderValueByName((ANSC_HANDLE)pBmoReqObj, "Content-Length", pBuffer); if( pHttpGetReq->MethodName == NULL || AnscSizeOfString(pHttpGetReq->MethodName) == 0) { pBmoReqObj->SetHeaderValueByName((ANSC_HANDLE)pBmoReqObj, "SOAPAction", ""); } else { _ansc_sprintf(pBuffer, "\"%s\"", pHttpGetReq->MethodName); pBmoReqObj->SetHeaderValueByName((ANSC_HANDLE)pBmoReqObj, "SOAPAction", pBuffer); } returnStatus = pBmoReqObj->AppendBody ( pBmoReqObj, pHttpGetReq->SoapMessage, AnscSizeOfString(pHttpGetReq->SoapMessage) ); } return returnStatus; }
static void HttpScoSetCookie ( ANSC_HANDLE hHfpIf, ANSC_HANDLE hResponse, ANSC_HANDLE hRequest ) { PHTTP_HFP_INTERFACE pHttpHfpIf = (PHTTP_HFP_INTERFACE)hHfpIf; PHTTP_BMO_REP_OBJECT pResponse = (PHTTP_BMO_REP_OBJECT)hResponse; PHTTP_BMO_REQ_OBJECT pRequest = (PHTTP_BMO_REQ_OBJECT)hRequest; char* pSetCookie = NULL; BOOL bSetCookie2 = FALSE; ULONG ulCount1 = 0; ULONG ulCount2 = 0; PHTTP_HEADER_FIELD pHttpHfo = NULL; pRequest->DelHeaderField((ANSC_HANDLE)pRequest, HTTP_HEADER_ID_COOKIE); while ( TRUE ) { pSetCookie = pResponse->GetHeaderValueByName2((ANSC_HANDLE)pResponse, "Set-Cookie2", ulCount1++); if ( !pSetCookie ) { pSetCookie = pResponse->GetHeaderValueByName2((ANSC_HANDLE)pResponse, "Set-Cookie", ulCount2++); bSetCookie2 = TRUE; } if ( !pSetCookie ) { break; } else { char* pCookie = NULL; ULONG ulCookieSize = AnscSizeOfString(pSetCookie) + 64; pCookie = (char *)AnscAllocateMemory(ulCookieSize); if ( pCookie ) { PHTTP_HFO_SET_COOKIE pHfoSetCookie = NULL; if ( bSetCookie2 ) { _ansc_sprintf(pCookie, "Set-Cookie2: %s", pSetCookie); } else { _ansc_sprintf(pCookie, "Set-Cookie: %s", pSetCookie); } pHfoSetCookie = (PHTTP_HFO_SET_COOKIE)pHttpHfpIf->ParseHeader(pHttpHfpIf->hOwnerContext, pCookie, AnscSizeOfString(pCookie)); if ( pHfoSetCookie ) { char* pCookieValue = NULL; pHfoSetCookie->HeaderId = HTTP_HEADER_ID_COOKIE; pHfoSetCookie->Flags &= ~HTTP_FIELD_FLAG_VALUE_PRESENT; pHfoSetCookie->Flags &= ~HTTP_FIELD_FLAG_LINE_PRESENT; ulCookieSize = pHttpHfpIf->GetHeaderSize(pHttpHfpIf->hOwnerContext, (ANSC_HANDLE)pHfoSetCookie); pHttpHfpIf->BuildHeader(pHttpHfpIf->hOwnerContext, (ANSC_HANDLE)pHfoSetCookie, pCookie, ulCookieSize); pCookie[ulCookieSize] = 0; if ( pCookie ) { pRequest->SetHeaderValueByName((ANSC_HANDLE)pRequest, "Cookie", pCookie + 8); } AnscFreeMemory(pHfoSetCookie); } AnscFreeMemory(pCookie); } } } }