epoc32/include/biodb.h
branchSymbian2
changeset 2 2fe1408b6811
parent 0 061f57f2323e
--- a/epoc32/include/biodb.h	Tue Nov 24 13:55:44 2009 +0000
+++ b/epoc32/include/biodb.h	Tue Mar 16 16:12:26 2010 +0000
@@ -1,1 +1,221 @@
-biodb.h
+// Copyright (c) 1999-2009 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 "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
+// which accompanies this distribution, and is available
+// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef __BIODB_H__
+#define __BIODB_H__
+
+#include <bif.h>				// the bif reader
+#include <f32file.h>
+
+class CBifEntry;
+
+/** UID of the BIODB.DLL. */
+const TUid KUidBioDBDll ={0x10005542};	
+
+/** Buffer to hold BIF identification text. */
+typedef TBuf<KMaxBioIdText> TBioMsgIdText;
+
+/** BIO information file (BIF) database.
+
+This class reads the installed BIF files and allows information from them 
+to be easily extracted.
+
+@see BIO_INFO_FILE 
+@publishedAll
+@released
+*/
+class CBIODatabase : public CBase
+	{
+public:
+	/** Search methods. */
+	enum TSearchList
+		{
+		/** Begin search from the start. */
+		EStart, 
+		/** Begin search from the last index position. */
+		ENext
+		};
+public:
+	IMPORT_C static CBIODatabase* NewLC(RFs& afileSystem);
+	IMPORT_C static CBIODatabase* NewL(RFs& afileSystem);
+	IMPORT_C ~CBIODatabase();
+
+public:
+	// BIF files contain all the information that needs to be registered
+	// for each BIO Message type
+
+	// Completely refresh the database will all the BIF Files in the
+	// default directory
+	IMPORT_C void AddAllBifsL(RFs& afileSystem);
+
+	// Add one bifFile using the file name, then using Neil's handy 
+	// class to read it
+	// This will add the Parser
+	IMPORT_C void AddBifL(CBioInfoFileReader* aBifReader);
+	IMPORT_C void RemoveBifL(TUid aMsgID);
+	IMPORT_C void RemoveBifL(TInt aIndex);
+
+	// BIO Messages are determined to of a BIO type if we have the BIO
+	// Parser identified by a WAP/NBS port, IANA MIME type or a Pattern
+	IMPORT_C TInt BIOCount();
+
+	// Get the BioEntry at this index
+	// Return Index if found, NULL if not
+	IMPORT_C const CArrayFix<TBioMsgId>* BIOEntryLC(TInt index);
+	
+
+	// Get the whole bif file class
+	IMPORT_C const CBioInfoFileReader& BifReader(TInt aIndex) const;
+     
+	// Get the BIO Entry based on what type it is, pos indicates where to start looking 
+	// after, and will get updated to current pos
+	IMPORT_C const CArrayFix<TBioMsgId>* BioEntryByTypeLC(
+								TSearchList aSearchType,
+								TBioMsgIdType portType, 
+								TInt& rIndex);
+
+	IMPORT_C void GetBioIndexWithMsgIDL(TUid aMsgID, TInt& rIndex);
+
+	// Get the BioMessageID for the Index
+	IMPORT_C void GetBioMsgID(TInt aIndex, TUid& rMsgID);
+
+	// Get the BioParserName for the Index
+	IMPORT_C const TPtrC GetBioParserName(TInt aIndex);
+	
+	// Get the BioParserName for the BioMessageID
+	IMPORT_C const TPtrC GetBioParserNameL(TUid aMsgID);
+	
+	// Get the ControlID for the Index
+	IMPORT_C void GetBioControlID(TInt aIndex, TUid& rControlID);
+	
+	// Get the ControlID for the BioMessageID
+	IMPORT_C void GetBioControlIDL(TUid aMsgID, TUid& rControlID);
+	
+	IMPORT_C const TPtrC GetBioControlName(TInt aIndex);
+	IMPORT_C const TPtrC GetBioControlNameL(TUid aMsgID);
+	
+	// Get the String Extension for the BioMessageID
+	IMPORT_C const TPtrC GetFileExtL(TUid aMsgID);
+
+	IMPORT_C void GetDefaultSendBearerL(TUid aBioUID, TBioMsgId& rBioMsgIdentifier);
+	IMPORT_C void GetDefaultSendBearerTypeL(TUid aBioUID, TBioMsgIdType& rPortType);
+	IMPORT_C void GetDefaultSendBearerByTypeL(TUid aBioUID, TBioMsgIdType aPortType, TBioMsgId& rBioMsgIdentifier);
+
+	// BIO Messages are determined to of a BIO type if we have the BIO
+	// Parser identified by a WAP/NBS port, IANA MIME type or a Pattern
+	// Return an Index
+
+	// Get the Port# or Identifying string for sending
+	IMPORT_C void GetPortNumberL(TUid aMsgID, TBioMsgIdType aPortType, TInt& aPortNumber);
+	IMPORT_C void GetIdentifierTextL(TUid aMsgID, TBioMsgIdType aPortType, TBioMsgIdText& aText);
+
+	// Test to see if this is a BioMessage
+	// Pass in the type ... if its NBS or IANA pass in the string pattern
+	//						if its WAP or SecureWap, pass in the port number
+	// return kErrNone if success, kErrNotFound if it fails
+	IMPORT_C TInt IsBioMessageL(TBioMsgIdType aPortType, const TDesC& aPattern, TUint16 aPort, TUid& rBioMsgUID);
+
+	IMPORT_C TInt IsBioMessageL(TBioMsgId bioMessageData, TUid& rBioMsgUID);
+
+private:
+	CBIODatabase();
+	void ConstructL(RFs& afileSystem);
+
+private:
+	//Utilities
+	void GetTransportIDL(TInt aIndex, TBioMsgIdType aPortType, TBioMsgId& aBioMsgID);
+	TBool IsLanguageFileL(const TDesC& aFileName, TInt& aExtLength) const;
+	// If Persistence is required...
+	// void InternalizeL(RReadStream& aStream);		
+	// void ExternalizeL(RWriteStream& aStream) const;	
+	
+private:
+	CArrayPtrFlat<CBioInfoFileReader>* iBifReaders;
+
+};
+
+/** Callback interface implemented by classes to receive notifications of BIF files 
+changes from CBifChangeObserver. 
+
+@publishedPartner
+@released
+*/
+class MBifChangeObserver 
+	{
+public:
+	/** BIF change events. */
+	enum TBifChangeEvent
+		{
+		/** Unknown change. */
+		EBifChangeUnknown = 0,
+		/** BIF added. */
+		EBifAdded,
+		/** BIF deleted. */
+		EBifDeleted,
+		/** BIF changed. */
+		EBifChanged
+		};
+
+public: 
+	/** Called when a BIF change occurs.
+	
+	@param aEvent Change event type
+	@param aBioID BIO message type of changed BIF */
+	virtual void HandleBifChangeL(TBifChangeEvent aEvent, TUid aBioID)=0;
+	};
+
+/** Active object that watches for changes made to the installed BIF files. 
+
+@publishedPartner
+@released
+*/
+class CBifChangeObserver : public CActive
+	{
+public: 
+	IMPORT_C static CBifChangeObserver* NewL(MBifChangeObserver& aObserver, RFs& aFs);
+	IMPORT_C void Start();
+	~CBifChangeObserver();
+	
+	static void CleanupBifArray(TAny* aBifArray);
+
+private:
+	// from CActive
+	virtual void RunL();
+	virtual void DoCancel();
+
+private:
+	CBifChangeObserver(MBifChangeObserver& aObserver, RFs& aFs);
+	void ConstructL();
+	
+	void NotifyObserverL();
+	void WaitForFileNotification();
+	void DoRunL();
+	void CopyEntriesL(const CDir& aDir, CArrayFixFlat<TEntry>& aEntries);
+	TBool CompareReaders(const CBioInfoFileReader& aReader1, const CBioInfoFileReader& aReader2) const;
+	
+	TInt FindEntry(const CBifEntry& aBifEntry, const RPointerArray<CBifEntry>& aEntries, TInt& aIndex) const;
+	
+private:
+	MBifChangeObserver&	iChangeObserver;
+	RFs&			iFs;
+
+	RPointerArray<CBifEntry> iEntries;
+
+	CBIODatabase*	iBioDB;
+	RTimer	iTimer;
+	TInt iRetryCount;
+	};
+
+#endif	// __BIODB_H__