diff -r 000000000000 -r dd21522fd290 web_plat/multipart_parser_api/inc/MultipartParser.h --- /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 & 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& 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& aBodyArray, + const TDesC8& aBoundary, + TInt aHeaderMask ); + + private: // Data + + }; + +#endif // MULTIPARTPARSER_H + +// End of File