diff -r 000000000000 -r dd21522fd290 webengine/wmlengine/src/FileLoader/include/urlloader_murlschemehandler.inl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webengine/wmlengine/src/FileLoader/include/urlloader_murlschemehandler.inl Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,170 @@ +/* +* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Handling of general url loading +* +*/ + + +// INCLUDE FILES +#include "BrsrStatusCodes.h" +#include "nwx_http_defs.h" + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +// ============================= LOCAL FUNCTIONS =============================== + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// MUrlSchemeHandler::PartialResponse +// Call the partial response callback with a chunk. +// ----------------------------------------------------------------------------- +// +inline TBrowserStatusCode MUrlSchemeHandler::PartialResponse(const TUint16* aUri, + TPtr8& aBody, + void* aHeaders, + TUint8* aContentTypeString, + TUint8* aContentLocationString, + NW_Bool aNoStore, + TUint8* aBoundaryString, + TUint16* aLastModified, + TUint16 aCharset, + NW_Uint8 *aCharsetString, + TUint aHttpStatus, + TUint8 aMethod, + TUint16 aTransId, + TInt aChunkIndex, + void* aCertInfo, + TUint aContentLength, + TInt aErr, + void* aLoadContext, + NW_Url_RespCallback_t* aPartialCallback ) + { + TUint convertedHttpStatus = aHttpStatus; + + __ASSERT_DEBUG(aUri != NULL, LoaderUtils::PanicLoader()); + __ASSERT_DEBUG(aPartialCallback != NULL, LoaderUtils::PanicLoader()); + + LoaderUtils::LogLoaderEvents(ELogTypeResponse, aTransId, aUri); + + TUint8* body = (TUint8*)aBody.Ptr(); + + if (aBody.Length() && aHttpStatus > Success && aHttpStatus < MultipleChoices) + { + /* Http status of 2xx is success, we map to OK (200) if there is a body. */ + convertedHttpStatus = Success; + } + + if (aBody.Length() && aHttpStatus >= MultipleChoices && aHttpStatus < BadRequest) + { + /* Display the content, not a generic error, if there is a body. */ + convertedHttpStatus = Success; + } + + if (aBody.Length() && aHttpStatus >= ServerError && aHttpStatus < 600) + { + /* Display the content, not a generic error, if there is a body. */ + convertedHttpStatus = Success; + } + + // when dealing with http status 300 and 500 check to see if body is present + // if so we want to treat this as a standard content load and force the + // http status to be 200 (success) + + if ((body) && (((aHttpStatus >= MultipleChoices) && (aHttpStatus < 400)) || ((aHttpStatus >= ServerError) && (aHttpStatus < 600)))) + { + aHttpStatus = Success; + convertedHttpStatus = Success; + iIsBodyPresent = ETrue; + } + + if ((iIsBodyPresent && (aChunkIndex == -1)) && (((aHttpStatus >= MultipleChoices) && (aHttpStatus < 400)) || ((aHttpStatus >= ServerError) && (aHttpStatus < 600)))) + { + aHttpStatus = Success; + convertedHttpStatus = Success; + iIsBodyPresent = EFalse; + } + + TBrowserStatusCode status = (aErr == KErrNone && convertedHttpStatus != Success) ? + KBrsrHttpStatus : LoaderUtils::MapErrors(aErr); + + NW_Url_Resp_t* urlResp = UrlLoader_UrlResponseNew(aUri, (TUint8*)aBody.Ptr(), + aBody.Length(), aHeaders, + aContentTypeString, + aContentLocationString, + aNoStore, + aBoundaryString, + aLastModified, + aCharset, + aCharsetString, + aHttpStatus, + aMethod, + aTransId, + aContentLength); + if (aCertInfo != NULL) + { + urlResp->certInfo = aCertInfo; + } + + CleanupStack::PushL(aContentTypeString); + CleanupStack::PushL(aContentLocationString); + CleanupStack::PushL(aBoundaryString); + CleanupStack::PushL(aLastModified); + CleanupStack::PushL(body); + if (urlResp == NULL) + { + status = (aPartialCallback)(KBrsrOutOfMemory, aTransId, aChunkIndex, aLoadContext, NULL); + CleanupStack::PopAndDestroy(5); // body, aContentTypeString, aContentLocationString + // aBoundaryString, aLastModified + } + else + { + status = (aPartialCallback)(status, aTransId, aChunkIndex, aLoadContext, urlResp); + CleanupStack::Pop(5); // body, aContentTypeString, aContentLocationString, aBoundaryString, aLastModified + } + return status; + } + +// ----------------------------------------------------------------------------- +// MUrlSchemeHandler::Response +// Call the response callback with an error code. +// ----------------------------------------------------------------------------- +// +inline TBrowserStatusCode MUrlSchemeHandler::PartialResponse(TUint16 aTransId, + TInt aErr, + void* aLoadContext, + NW_Url_RespCallback_t* aPartialCallback) +{ + __ASSERT_DEBUG(aPartialCallback != NULL, LoaderUtils::PanicLoader()); + + LoaderUtils::LogLoaderEvents(ELogTypeFailedResponse, aTransId, + LoaderUtils::MapErrors(aErr)); + return (aPartialCallback)(LoaderUtils::MapErrors(aErr), aTransId, -1, aLoadContext, NULL); +} + +// End of File