williamr@2: /* williamr@2: * Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@2: * under the terms of the License "Eclipse Public License v1.0" williamr@2: * which accompanies this distribution, and is available williamr@2: * at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: * williamr@2: * Initial Contributors: williamr@2: * Nokia Corporation - initial contribution. williamr@2: * williamr@2: * Contributors: williamr@2: * williamr@2: * Description: williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: /** williamr@2: @file williamr@2: @publishedPartner williamr@2: @deprecated williamr@2: */ williamr@2: williamr@2: williamr@2: #ifndef __CAFMIMEHEADER_H__ williamr@2: #define __CAFMIMEHEADER_H__ williamr@2: williamr@2: #ifndef REMOVE_CAF1 williamr@2: williamr@2: #include williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: class RWriteStream; williamr@2: class RReadStream; williamr@2: williamr@2: namespace ContentAccess williamr@2: { williamr@2: class CMimeFieldAndData; williamr@2: williamr@2: /** williamr@2: * Packages the MIME header information for easy use by a Content Access Agent. williamr@2: * williamr@2: * The "Content-Type" MIME header must be correct; other fields are optional from williamr@2: * CAF's perspective, but may be mandatory for some agents. williamr@2: * williamr@2: * Consider the following MIME header williamr@2: * williamr@2: * @code williamr@2: * Content-type: application/vnd.oma.drm.content; williamr@2: * Content-Length: 1234 williamr@2: * X-Oma-Drm-Separate-Delivery: 12 williamr@2: * williamr@2: * @endcode williamr@2: * williamr@2: * The CCafMimeHeader is constructed as follows: williamr@2: * williamr@2: * @code williamr@2: * // initialise the header with the content type williamr@2: * _LIT8(KMyMime,"application/vnd.oma.drm.content"); williamr@2: * CCafMimeHeader *header = CCafMimeHeader::NewL(KMyMime()); williamr@2: * williamr@2: * // Set the content length williamr@2: * _LIT8(KMyLength,"1234"); williamr@2: * header->SetStandardMimeDataL(EContentLength, KMyLength()); williamr@2: * williamr@2: * // Set the non-standard header X-Oma-Drm-Separate-Delivery williamr@2: * _LIT8(KMyField,"X-Oma-Drm-Separate-Delivery"); williamr@2: * _LIT8(KMyData,"12"); williamr@2: * header->AddNonStandardMimeL(KMyField(), KMyData()); williamr@2: * williamr@2: * @endcode williamr@2: * williamr@2: * To retreive the values from the CCafMimeHeader williamr@2: * williamr@2: * @code williamr@2: * TPtrC8 contentType = header->StandardMimeData(EContentType); // application/vnd.oma.drm.content williamr@2: * TPtrC8 contentLength = header->StandardMimeData(EContentLength); // 1234 williamr@2: * williamr@2: * TInt numNonStandard = header->NonStandardMimeCount(); // 1 williamr@2: * TPtrC8 field = header->NonStandardMimeField(0); // X-Oma-Drm-Separate-Delivery williamr@2: * TPtrC8 data = header->NonStandardMimeData(0); // 12 williamr@2: * williamr@2: * @endcode williamr@2: * williamr@2: * @publishedPartner williamr@2: * @deprecated williamr@2: */ williamr@2: class CCafMimeHeader : public CBase williamr@2: { williamr@2: public: williamr@2: /** This creates the CCafMimeHeader object and calls SetFieldDataL(EContentType, aContent_Type); williamr@2: * williamr@2: * A CCafMimeHeader must have a valid EContentType field, so the only williamr@2: * constructor available requires this as a parameter. williamr@2: * williamr@2: * @param aContent_Type The "Content-Type :" field from the MIME header. williamr@2: */ williamr@2: IMPORT_C static CCafMimeHeader* NewL(const TDesC8& aContent_Type); williamr@2: williamr@2: /** Destructor */ williamr@2: IMPORT_C virtual ~CCafMimeHeader(); williamr@2: williamr@2: /** Sets the MIME data associated with a standard MIME field. williamr@2: * williamr@2: * @param aIndex The TMimeFields MIME header field. williamr@2: * @param aData The data corresponding to the MIME header. williamr@2: */ williamr@2: IMPORT_C void SetStandardMimeDataL(const TMimeFields &aIndex, const TDesC8& aData); williamr@2: williamr@2: /** Gets the data associated with the standard MIME field. williamr@2: * williamr@2: * @param aIndex The TMimeFields MIME header to retrieve corresponding to the MIME data. williamr@2: * @return The MIME data associated with the field corresponding to aIndex. williamr@2: */ williamr@2: IMPORT_C TPtrC8 StandardMimeData(const TMimeFields& aIndex) const; williamr@2: williamr@2: /** Adds a new non-standard MIME header field. williamr@2: * williamr@2: * e.g., OMA requires a MIME header "X-Oma-Drm-Separate-Delivery". williamr@2: * williamr@2: * @param aFieldName The .... williamr@2: * @param aData The data corresponding to the MIME header. williamr@2: */ williamr@2: IMPORT_C void AddNonStandardMimeL(const TDesC8& aFieldName, const TDesC8& aData); williamr@2: williamr@2: /** Retrieves the field name for a non-standard MIME header. williamr@2: * williamr@2: * @param aIndex The index of the non-standard MIME header. williamr@2: * @return The non-standard MIME field. williamr@2: */ williamr@2: IMPORT_C TPtrC8 NonStandardMimeField(TInt aIndex) const; williamr@2: williamr@2: /** Retrieves the data for a non-standard MIME header. williamr@2: * williamr@2: * @param aIndex The index of the non-standard MIME header. williamr@2: * @return The data associated with the non-standard MIME field. williamr@2: */ williamr@2: IMPORT_C TPtrC8 NonStandardMimeData(TInt aIndex) const; williamr@2: williamr@2: /** The number of non-standard MIME header fields. williamr@2: * williamr@2: * e.g., OMA requires a MIME header "X-Oma-Drm-Separate-Delivery". williamr@2: * williamr@2: * @return The number of non-standard MIME header fields. williamr@2: */ williamr@2: IMPORT_C TInt NonStandardMimeCount() const; williamr@2: williamr@2: /** Externalizes the CCafMimeHeader object. williamr@2: * williamr@2: * Allows the MIME header information to be passed between the client proxy williamr@2: * and the CA agent server. williamr@2: * williamr@2: * @param aStream The stream to write the header information to. williamr@2: */ williamr@2: IMPORT_C void ExternalizeL(RWriteStream& aStream) const; williamr@2: williamr@2: /** Internalize the CCafMimeHeader object. williamr@2: * williamr@2: * Allows the MIME header information to be passed between the client proxy williamr@2: * and the CA agent server. williamr@2: * williamr@2: * @param aStream The stream to read the header information from. williamr@2: */ williamr@2: IMPORT_C void InternalizeL(RReadStream& aStream); williamr@2: williamr@2: private: williamr@2: CCafMimeHeader(); williamr@2: williamr@2: void ConstructL(const TDesC8& aContent_Type); williamr@2: williamr@2: // Index used to map the fixed TMimeFields field value to the position in williamr@2: // iStandardMimeHeaders used to store it williamr@2: HBufC8* iStandardMimeHeader[EMimeMax]; williamr@2: williamr@2: /** Non-standard header fields, some agents (e.g., OMA) need access to williamr@2: * other MIME headers. williamr@2: */ williamr@2: RPointerArray iNonStandardMimeHeaders; williamr@2: williamr@2: }; williamr@2: } williamr@2: #endif // REMOVE_CAF1 williamr@2: williamr@2: #endif // __CAFMIMEHEADER_H__