--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/msg_plat/mms_conformance_api/inc/MmsConformance.h Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,423 @@
+/*
+* 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 "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:
+* Utility class for resolving whether a file can be
+* sent over MMS or not.
+*
+*/
+
+
+
+#ifndef __MMSCONFORMANCE_H
+#define __MMSCONFORMANCE_H
+
+// INCLUDES
+
+#include <e32std.h>
+#include <e32base.h> // CBase
+
+#include <msgmedia.hrh>
+
+// CONSTANTS
+
+// Message class size limits
+// - from OMA MMS Conformance Document v1.2
+const TInt KClassMaxSizeText = 30 * 1024; // 30k
+const TInt KClassMaxSizeImageRich = 100 * 1024; // 100k
+const TInt KClassMaxSizeVideoRich = 300 * 1024; // 300k
+// - from OMA MMS Conformance Document v1.3
+const TInt KClassMaxSizeMegapixel = 600 * 1024; // 600k
+
+// Image size definitions
+// - from OMA MMS Conformance Document v1.2
+const TInt KImageBasicWidth = 160;
+const TInt KImageBasicHeight = 120;
+const TInt KImageRichWidth = 640;
+const TInt KImageRichHeight = 480;
+// - from OMA MMS Conformance Document v1.3
+const TInt KImageMegapixelWidth = 1600;
+const TInt KImageMegapixelHeight = 1200;
+
+// Video size definitions
+// - from ITU-T Recommendation H.263
+// (referenced from 3GPP TS 26.140
+// (referenced from OMA MMS Conformance Document v1.2))
+const TInt KMmsQCIFSizeWidth = 176;
+const TInt KMmsQCIFSizeHeight = 144;
+const TInt KMmsSubQCIFSizeWidth = 128;
+const TInt KMmsSubQCIFSizeHeight = 96;
+
+// MACROS
+
+// FORWARD DECLARATIONS
+
+// DATA TYPES
+
+// MACROS
+
+// FORWARD DECLARATIONS
+class CMsgMediaInfo;
+
+// DATA TYPES
+
+enum TMmsConfClass
+ {
+ EMmsClassUnclassified = 0,
+ // The order of classes matter. They must be in "ascending order".
+ EMmsClassText,
+ EMmsClassImageBasic,
+ EMmsClassImageRich,
+ EMmsClassVideoBasic,
+ EMmsClassVideoRich,
+ EMmsClassMegapixel
+ };
+
+enum TMmsConfStatus
+ {
+ EMmsConfOk = 0x0000,
+ EMmsConfNokDRM = 0x0001,
+ EMmsConfNokConversionNeeded = 0x0002,
+ EMmsConfNokScalingNeeded = 0x0004,
+ EMmsConfNokTooBig = 0x0008,
+ EMmsConfNokNotEnoughInfo = 0x0010,
+ EMmsConfNokNotSupported = 0x0020,
+ EMmsConfNokFreeModeOnly = 0x0040,
+ EMmsConfNokCorrupt = 0x0080
+ };
+
+NONSHARABLE_CLASS( TMmsConformance )
+ {
+ public:
+
+ /**
+ * Default constructor
+ */
+ inline TMmsConformance();
+
+ /**
+ * Constructor
+ */
+ inline TMmsConformance(
+ TMmsConfClass aConfClass,
+ TUint32 aConfStatus,
+ TBool aAdaptation );
+
+ /**
+ * Copy constructor
+ * @param aConformance Data to copy
+ */
+ inline TMmsConformance( const TMmsConformance& aConformance );
+
+ public: // data
+ TMmsConfClass iConfClass;
+ TUint32 iConfStatus;
+ TBool iCanAdapt;
+ };
+
+class CMmsConformance;
+typedef void (CMmsConformance::*LocalFuncPtr) (void);
+
+// FUNCTION PROTOTYPES
+
+// CLASS DECLARATION
+/**
+* CMmsConformance...
+*
+* @lib MsgMedia.lib
+* @since 3.1
+*/
+NONSHARABLE_CLASS( CMmsConformance ) : public CBase
+ {
+ public: // New methods
+
+ /**
+ * Factory method.
+ *
+ * @param aFs IN Fileserver session.
+ * @return Pointer to instance in CleanupStack
+ */
+ IMPORT_C static CMmsConformance* NewLC();
+
+ /**
+ * Factory method.
+ *
+ * @param aFs IN Fileserver session.
+ * @return Pointer to instance
+ */
+ IMPORT_C static CMmsConformance* NewL();
+
+ /**
+ * Destructor
+ */
+ virtual ~CMmsConformance();
+
+ /**
+ * Checks whether the MIME type is MMS conformant or not.
+ *
+ * @param aMimeType IN Mime type of the file.
+ * @return ETrue, if it's ok to send the
+ * EFalse, otherwise
+ */
+ IMPORT_C TBool IsConformantMime( const TPtrC8& aMimeType );
+
+ /**
+ * Resolves conformance status of the given media object.
+ *
+ * @param aMediaInfo IN Mime type of the file.
+ * @return ETrue, if it's ok to send the
+ * EFalse, otherwise
+ */
+ IMPORT_C TMmsConformance MediaConformance( CMsgMediaInfo& aMediaInfo );
+
+ /**
+ * Static version of the function that returns
+ * the OMA Conformance Document version
+ * supported by the current implementation.
+ *
+ * @return Conformance version defined in "mmsversion.h"
+ */
+ IMPORT_C static TUint8 ConformanceVersionL();
+
+ /**
+ * Get the OMA Conformance Document version
+ * supported by the current implementation.
+ *
+ * @return Conformance version defined in "mmsversion.h"
+ */
+ inline TUint8 ConformanceVersion() const;
+
+ /**
+ * Get maximum send size of a multimedia message
+ *
+ * @return Maximum send size in bytes
+ */
+ inline TUint32 MaxSendSize() const;
+
+ /**
+ * Set maximum send size for a multimedia message
+ *
+ * The default max send size (in MMS Settings) can
+ * be overriden with this function.
+ *
+ * NOTICE! There is no guarantee that the message can
+ * be sent if the size is defined bigger than
+ * the default max send size.
+ *
+ * @param aMaxSize 0, unlimited
+ * other value, max send size in bytes
+ */
+ inline void SetMaxSendSize( TUint32 aMaxSize );
+
+ /**
+ * User changeable creation mode
+ *
+ * @return ETrue, user can change MMS Creation mode
+ * EFalse, otherwise
+ */
+ inline TBool CreationModeUserChangeable() const;
+
+ /**
+ * Get MMS creation mode
+ *
+ * @return ETrue, Set creation mode to "free" (or "guided")
+ * EFalse, Set creation mode to "restricted"
+ */
+ inline TBool CreationMode() const;
+
+ /**
+ * Set MMS creation mode
+ *
+ * The default creation mode (in MMS Settings) can
+ * be overriden with this function.
+ *
+ * @param aFree ETrue, Set creation mode to "free"
+ * EFalse, Set creation mode to "restricted"
+ */
+ inline void SetCreationMode( TBool aFree );
+
+ /**
+ * Set image size setting
+ *
+ * The default image size setting (in MMS Settings) can
+ * be overriden with this function.
+ *
+ * NOTICE! There is no guarantee that the message can
+ * be sent if the size is defined bigger than
+ * the default max send size.
+ *
+ * @param aImageSize Image size in pixels
+ */
+ inline void SetImageSizeSetting( TSize aImageSize );
+
+ /**
+ * CheckCharacterSet
+ *
+ * With this method it is possible to control whether
+ * the conformance of the character set is checked
+ * for text/plain files.
+ *
+ * By default character set conformance is checked,
+ * i.e. CheckCharacterSet flag is ETrue.
+ *
+ * If set EFalse the client is responsible for converting
+ * the character set to a conformant one (either US-ASCII
+ * or UTF-8).
+ *
+ * @param aCheck ETrue, character set conformance is checked,
+ * EFalse, character set conformance is not checked.
+ */
+ inline void CheckCharacterSet( TBool aCheck );
+
+ private:
+
+ /**
+ * Constructor.
+ *
+ * @param aFs IN Fileserver session.
+ */
+ CMmsConformance();
+
+ /**
+ * 2nd phase constructor.
+ */
+ void ConstructL();
+
+ /**
+ *
+ */
+ void CheckDRMStatus();
+
+ /**
+ *
+ */
+ LocalFuncPtr ResolveFunction( const TPtrC8& aMimeType );
+
+ /**
+ * Determines conformance for text/plain.
+ */
+ void ResolveTextPlain();
+
+ /**
+ * Determines conformance for application/xhtml+xml.
+ */
+ void ResolveTextXhtml();
+
+ /**
+ * Determines conformance for audio/amr.
+ */
+ void ResolveAudioAmr();
+
+ /**
+ * Determines conformance for audio/sp-midi.
+ */
+ void ResolveAudioSpMidi();
+
+ /**
+ * Determines conformance for image/jpeg.
+ */
+ void ResolveImageJpeg();
+
+ /**
+ * Determines conformance for image/gif.
+ */
+ void ResolveImageGif();
+
+ /**
+ * Determines conformance for image/wbmp.
+ */
+ void ResolveImageWbmp();
+
+ /**
+ * Determines conformance for image/png.
+ */
+ void ResolveImagePng();
+
+ /**
+ * Determines conformance for video/3gpp.
+ */
+ void ResolveVideo3gpp();
+
+ /**
+ * Determines conformance for video/3gpp2.
+ */
+ void ResolveVideo3gpp2();
+
+ /**
+ * Determines conformance for supported attachment MIME types.
+ */
+ void ResolveAttachment();
+
+ /**
+ * Determines conformance for unsupported attachment MIME types.
+ */
+ void ResolveNonconformantAttachment();
+
+ /**
+ * Determines conformance based on the file size.
+ *
+ * @return ETrue, if OK to send from file size point of view
+ * EFalse, otherwise
+ */
+ TBool CheckFileSize();
+
+ /**
+ * Determines conformance of an image file based on
+ * the file size and the image resolution.
+ *
+ * @return ETrue, if the file was actually initialized as image
+ * EFalse, otherwise
+ */
+ TBool CheckImageSize();
+
+ /**
+ * Subfunction of CheckImageSize.
+ * Determines enumeration from image resolution
+ *
+ * @param aImageSize Size of the image
+ * @return Smallest class the image resolution fits
+ */
+ TMmsConfClass ClassByImageResolution( TSize aImageSize );
+
+ /**
+ * Compares size to MMS Settings "Image size".
+ * @param aImageSize Size of the image
+ * @return ETrue, width or height (or both) is larger than setting
+ * EFalse, otherwise
+ */
+ inline TBool LargerThanImageSizeSetting( TSize aImageSize );
+
+ private: // data
+
+ enum TResolverFlags
+ {
+ EDrmFeatureFull = 0x0001,
+ ECreationModeRestricted = 0x0002,
+ ECreationModeUserChangeable = 0x0004,
+ EMms3gpp2Mode = 0x0008,
+ ECheckCharacterSet = 0x0010
+ };
+
+ CMsgMediaInfo* iMediaInfo;
+ TMmsConformance iConformance;
+
+ TUint32 iResolverFlags;
+ TUint32 iMaxSendSize;
+ TSize iSettingsImageSize;
+ TUint8 iMmsVersion;
+
+ };
+
+#include <mmsconformance.inl>
+
+#endif // __MMSCONFORMANCE_H