webengine/wmlengine/src/FileLoader/include/urlloader_murlschemehandler.inl
changeset 0 dd21522fd290
--- /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