messagingappbase/obexmtms/obexmtm/obexutil/include/obexMtmUtil.h
changeset 80 8b14b30db193
parent 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/obexmtms/obexmtm/obexutil/include/obexMtmUtil.h	Wed Nov 03 22:55:44 2010 +0530
@@ -0,0 +1,225 @@
+// Copyright (c) 2001-2009 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:
+// $Workfile: obexMtmUtil.h $
+// $Author: Stevep $
+// $Revision: 10 $
+// $Date: 25/03/02 8:49 $
+// 
+//
+
+
+#ifndef __OBEXMTMUTIL_H__
+#define __OBEXMTMUTIL_H__
+
+
+#include <e32std.h>
+
+#include <BAUTILS.H>	// NearestLanguageFile
+#include <basched.h>
+#include <coeutils.h>	// ConeUtils::FileExists
+#include <apparc.h>		// CApaApplication::GenerateFileName
+#include <apgcli.h>		// RApaLsSession   <-- data recognition.
+
+#include <txtrich.h>	// Richtext
+#include <utf.h>		// CharConv
+#include <baclipb.h>	// Clipboard
+
+// Obex
+#include <obex.h>
+
+// MS
+#include <msvAPI.h>
+#include <msvIDs.h>
+#include <msvUIDs.h>
+#include <msvSTD.hrh>
+
+extern const TInt KMaxObexPasswordLength;
+const TUid KObexFileNameStreamUid = {0x1000AAC5};
+
+// temporary IDs to indicate either a filename or a headerlist entry in the stream
+const TInt32 KObexFileNameStreamFileNameUid		= 0x1000;
+const TInt32 KObexFileNameStreamHeaderListUid	= 0x1001;
+
+class CObexHeaderList;
+
+//
+// Container class for an array with descriptors and header lists associated with it
+//
+class CObexMtmFileNameWithHeaders : public CBase
+/**
+@internalTechnology
+@released
+*/
+	{
+public:
+	/**
+	 * Canonical NewL factory function.
+	 *
+	 * @return an empty CObexMtmFileNameWithHeaders class
+	 * @leave KErrXXX system wide error codes
+	 */
+	IMPORT_C static CObexMtmFileNameWithHeaders* NewL();
+
+	/**
+	 * Destructor. Will destroy the data pointed to by the 2 member pointers.
+	 */
+	CObexMtmFileNameWithHeaders::~CObexMtmFileNameWithHeaders();
+
+private:
+	/**
+	 * Constructor.
+	 */
+	CObexMtmFileNameWithHeaders();
+
+public:
+	/**
+	 * iFileName points to a descriptor (owned by this class) which holds the filename
+	 */
+	TDesC16			*iFileName;
+	/**
+	 * iHeaderList points to a CObexHeaderList class containing the set of headers for this file.
+	 */
+	CObexHeaderList *iHeaderList;
+	};
+
+//
+// Class to allow an arbitrary number of filenames to be saved to a CMsvEntry
+//
+// For obex msgs the obex objects to send are stored in files and not in the msg body. 
+// These files may be copied into messaging and attached to the msg as "proper" 
+// attachments, OR the msg itself can contain a list of filenames of files that exist
+// anywhere on the filesystem. This class is used in the latter case to externalise/
+// internalise filenames to/from the msg entry.
+//
+//
+typedef RPointerArray<CObexMtmFileNameWithHeaders> RObexMtmFileNameWithHeadersArray;
+
+class CObexMtmFileNameExternaliser : public CBase
+/** Allows an arbitrary number of filenames to be saved to a CMsvEntry.
+
+@publishedPartner
+@released
+*/
+//this class was originally classified as internal technology but was changed to publised partner as one licensee used 
+//the static function ExternaliseAndCommit1FileNameL() in its code before the API classification work was done
+	{  
+public: //static methods
+	
+	/**
+	 * Static function to write one and only one filename to the message store, then finalise and commit it. This function
+	 * should be called ONCE ONLY. To externalise more than one filename, instantiate this class and use ExternaliseFileNameL()
+	 * followed by CommitStoreL().
+	 * @param aEntry the entry whose store is to be written to
+	 * @param aDes The filename to write to the store
+	 * @leave KErrXXX system-wide error codes
+	 */	
+	
+	IMPORT_C	static	void ExternaliseAndCommit1FileNameL(CMsvEntry* aEntry, const TDesC16* aDes);
+
+	/**
+	* Static function to read in one filename from the store.
+	*
+	* @param aEntry entry to read the filename from
+	* @param aDes Descriptor to receive the new filename. Any existing data will be overwritten. MUST be long enough to contain the name.
+	* @leave KErrXXX system wide error codes.
+	*/
+	
+	IMPORT_C	static	void Internalise1FileNameL(CMsvEntry* aEntry, TDes16* aDes);
+
+	/**
+	 * Static function to get the filenames stored within the message entry. The returned array is pushed onto the cleanup
+	 * stack.
+	 *
+	 * @param aMessageStore Store from which the names are to be read
+	 * @return Array of filenames, pushed onto the cleanup stack.
+	 * @leave System wide error codes
+	 */
+	
+	IMPORT_C	static   RObexMtmFileNameWithHeadersArray* InternaliseFileNamesLC(CMsvStore& aMessageStore);
+
+public: //non-static methods
+	
+	/**
+	 * Canonical NewL factory function.
+	 *
+	 * @param aSession A messaging server session
+	 * @param aId TMsvId of the entry to externalise/internalise to/from. This association is fixed for the lifetime of this instance of the class.
+	 * @return a newly constucted CObexMtmFileNameExternaliser
+	 * @leave KErrXXX system wide error codes
+	 */
+	
+	IMPORT_C	static  CObexMtmFileNameExternaliser* NewL(CMsvSession* aSession, TMsvId aId);
+	
+	/**
+	 * Destructor. Will revert the stream to its original state if the store hasn't been comitted.
+	 */
+	
+	CObexMtmFileNameExternaliser::~CObexMtmFileNameExternaliser();
+
+	/**
+	 * Initialises the store of the given entry, ready for reading or writing.
+	 *
+	 * @param aId The TMsvId of the entry whose store should be initialised.
+	 * @leave KErrXXX system wide error codes.
+	 */
+	
+	IMPORT_C	void InitialiseStoreL(TMsvId aId);
+
+	/**
+	 * Externalises a single filename to the associated entry's message store.
+	 *
+	 * @param aFileName the filename to externalise.
+	 * @leave KErrXXX system-wide error codes.
+	 */
+
+	IMPORT_C  	void ExternaliseFileNameL(const TDesC16* aFileName);
+
+	/**
+	 * Externalises a pair consisting of a single filename and an obex header list to the associated entry's message store.
+	 *
+	 * @param aFileName the filename to externalise.
+	 * @param aHeaderList the header list to externalise.
+	 * @leave KErrXXX system-wide error codes.
+	 */
+
+	IMPORT_C  	void ExternaliseFileNameAndHeadersL(const TDesC16* aFileName, const CObexHeaderList* aHeaderList);
+
+	/**
+	 * Finalises and commits the store. This function MUST be called once all of the filenames have been externalised, and not
+	 * before. If it is not called, any changes will be lost and the store will revert to its former state.
+	 *
+	 * @leave KErrXXX system wide error codes.
+	 */
+	
+	IMPORT_C  	void CommitStoreL();
+
+private:
+	
+	/**
+	 * Constructor	
+	 *
+	 * @param aSession A messaging server session
+	 */
+	
+	CObexMtmFileNameExternaliser(CMsvSession* aSession);
+
+private:
+	CMsvSession*		iSession; //< Session with the message server
+	CMsvEntry*			iEntry; //< Message entry
+	CMsvStore*			iMessageStore; //< Direct interface to the message store associated with a particular entry
+	RMsvWriteStream		iMessageWriteStream; //< Accesses streams in a message store with write access
+	TBool				iHaveCommitted; //< Indicates whether the message write stream has committed changes
+	};
+
+#endif // __OBEXMTMUTIL_H__