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