web_plat/multipart_parser_api/inc/MultipartParser.h
changeset 0 dd21522fd290
child 37 cb62a4f66ebe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web_plat/multipart_parser_api/inc/MultipartParser.h	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,251 @@
+/*
+* Copyright (c) 2005 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:  Implementation of the Multipart Parser
+*
+*/
+
+
+
+#ifndef MULTIPARTPARSER_H
+#define MULTIPARTPARSER_H
+
+//  INCLUDES
+#include "BodyPart.h"
+
+
+//  CONSTANTS
+
+
+// DATA TYPES
+
+
+// FORWARD DECLARATIONS
+class CBodyPart;
+
+// CLASS DECLARATION
+/**
+*  Implementation of the Multipart Parser
+*
+*  \b Library: MultipartParser.lib
+*
+*  @since 3.0
+*/
+class MultipartParser
+    {
+    public:     // Data
+        enum TMultipartTopLevelHeader
+            {
+            EMultipartTopLevelHeaderContentType = 0x0001,
+            EMultipartTopLevelHeaderContentLength = 0x0002,
+            EMultipartTopLevelHeaderLastModified = 0x0004,
+            // make SURE to change this when adding new header types
+            EMultipartTopLevelHeaderAll = 0x0007
+            };
+        
+        enum TMultipartSubtype
+            {
+        	  EMultipartSubtypeMixed = 0
+            };
+
+    public:  // Constructors and destructor
+        
+
+    public: // New functions
+    
+        /**
+        * Parse a multipart file
+        * @since 3.0
+        * @param aMultipartBody   The multipart file to be parsed
+        * @param aContentType     The content type of multipart file: mixed, related etc.
+        * @param aBoundary        The boundary of the multipart file
+        * @param aUrl             The url of the multipart file
+        * @param aBodyPartsArray  The array contains parsed body parts of the multipart file
+        * @param aMaxToParse      The max number of body parts to be parsed
+        * @return void
+        */
+        IMPORT_C static void ParseL( const TDesC8& aMultipartBody, 
+                                     const TDesC8& aContentType,
+                                     const TDesC8& aBoundary,
+                                     const TDesC16& aUrl,
+                                     RPointerArray <CBodyPart>& aBodyPartsArray,
+                                     TInt aMaxToParse = -1 );
+
+        /**
+        * Produces multipart document
+        * @param aBodyArray      Array of BodyPart objects to be included in the output
+        * @param aBoundary       A string containing boundary to be used in construction of multipart document
+        * @param aSubtype        Enumerated value of multipart subtype
+        * @param aHeaderMask     Integer mask of TTopLevelHeaders to indicate which top-level headers should be included
+        * @return multipart document; the ownership of buffer is transferred to caller.
+        */
+        IMPORT_C static HBufC8* ComposeL( RPointerArray<CBodyPart>& aBodyPartsArray,
+                                          const TDesC8& aBoundary,
+                                          TMultipartSubtype aSubtype,
+                                          TInt aHeaderMask );
+                                 
+    public: // Functions from base classes
+               
+    protected:  // Functions from base classes
+        
+
+    private:
+        /**
+        * Get the buffer of the next body part
+        * @since 3.0
+        * @param aStartPosition   The starting position to parse
+        * @param aMultipartBody   The full buffer of multipart file
+        * @param aMultipartLen    The length of the multipart file buffer
+        * @param aBoundary        The boundary of the multipart file
+        * @param aSingleEolChar   The single EOL of the multipart file
+        * @param aBodyPartBuffer  The buffer of this body part
+        * @return the status of the function
+        */
+        static TUint32 GetNextBodyPartBuffer( TUint32 startPosition, 
+                                       const TUint8* aMultipartBody,
+                                       TUint32 aMultipartLen,
+                                       const TDesC8& aBoundary,
+                                       char* aSingleEolChar,
+                                       TUint8** aBodyPartBuffer );
+
+        /**
+        * 
+        * Set the single and double EOL of the multipart file
+        * @since 3.0
+        * @param aMultipartBody   The full buffer of multipart file
+        * @param aMultipartLen    The length of the multipart file buffer
+        * @param aBoundary        The boundary of the multipart file
+        * @param aSingleEolChar   The single EOL of the multipart file
+        * @param aDoubleEolChar   The double EOL of the multipart file
+        * @return void
+        */
+        static void SetEolCharacters( const TUint8* aMultipartBody,
+                               TUint32 aMultipartLen,
+                               const TDesC8& aBoundary,
+                               char** aSingleEolChar,
+                               char** aDoubleEolChar );
+
+        /**
+        * Parse the body part
+        * @since 3.0
+        * @param aBodyPartBuffer        The buffer of this body part
+        * @param aBodyPartBufferLength  The length of this body part buffer
+        * @param aSingleEolChar         The single EOL of the multipart file
+        * @param aDoubleEolChar         The double EOL of the multipart file
+        * @param aResponseUrl           The url requested for the multipart file
+        * @param aBodyPart              The body part parsed and returned
+        * @return void
+        */
+        static void ParseBodyPartL( TUint8* aBodyPartBuffer,
+                             TUint32 aBodyPartBufferLength,
+                             char* aSingleEolChar,
+                             char* aDoubleEolChar,
+                             const TDesC16& aResponseUrl,
+                             CBodyPart* aBodyPart );
+
+        /**
+        * Is encoded or not
+        * @since 3.0
+        * @param aContentTransferEncodingValue  The transfer encoding of this body part
+        * @return is encoded or not
+        */
+        static TBool IsEncoded( TUint8* aContentTransferEncodingValue );
+
+        /**
+        * Decode the body
+        * @since 3.0
+        * @param aContentTransferEncodingValue  The transfer encoding of this body part
+        * @param aEncodedBody                   The encoded body of this body part
+        * @param aDecodedBody                   The decoded body returned
+        * @return status of the function call
+        */
+        static TInt DecodeContentTransferEncoding( TUint8* aContentTransferEncodingValue,
+                                            const TDesC8& aEncodedBody,
+                                            TPtr8& aDecodedBody );
+
+        /**
+        * Is zipped or not
+        * @since 3.0
+        * @param aContentTypeValue  The content type of this body part
+        * @return is zipped or not
+        */
+        static TBool IsZipped( TUint8* aContentTypeValue );
+
+        /**
+        * Unzip the body
+        * @since 3.0
+        * @param aContentTypeValue     The content type of this body part
+        * @param aZippedBody           The zipped body of this body part
+        * @param aUnzippedBody          The unzipped body returned
+        * @return status of the function call
+        */
+        static TInt Unzip( TUint8* aContentType,
+                           const TDesC8& aZippedBody,
+                           TPtr8& aUnzippedBody );
+
+        /**
+        * Parser the content type value
+        * @since 3.0
+        * @param aBodyPart              The body part which contains the content type
+        * @return void
+        */
+        static void CutOffContentTypeAttributes( CBodyPart* aBodyPart );
+
+        /**
+        * Conform the URL for the body part
+        * @since 3.0
+        * @param aContentBaseValue      The content base of this body part
+        * @param aContentLocationValue  The content location of this body part
+        * @param aResponseUrl           The url requested for the multipart file
+        * @return URL
+        */
+        static HBufC16* GetBodyPartUrlL( const TDesC8& aContentBaseValue,
+                                 const TDesC8& aContentLocationValue,
+                                 const TDesC16& aResponseUrl );
+
+        /**
+        * URL relative or not
+        * @since 3.0
+        * @param aUrl           Any url
+        * @return relative or not
+        */
+        static TBool IsUrlRelativeL( const TDesC8& aUrl );
+
+        /**
+        * resolve relative URL to absolute URL
+        * @since 3.0
+        * @param aBase         The base URL
+        * @param aRelativeUrl  The relative URL
+        * @return absolute URL
+        */
+        static HBufC16* UrlRelToAbsL( TDesC16& aBase, 
+                                      const TDesC8& aRelativeUrl );
+
+        /**
+        * Produces multipart/mixed document
+        * @param aBodyArray      Array of BodyPart objects to be included in the output
+        * @param aBoundary       A string containing boundary to be used in construction of multipart document
+        * @param aHeaderMask     Integer mask of TTopLevelHeaders to indicate which top-level headers should be included
+        * @return multipart document; the ownership of buffer is transferred to caller.
+        */
+        static HBufC8* ComposeMixedL( RPointerArray<CBodyPart>& aBodyArray,
+                                      const TDesC8& aBoundary,
+                                      TInt aHeaderMask );
+                                          
+    private:    // Data
+
+    };
+
+#endif      // MULTIPARTPARSER_H   
+            
+// End of File