williamr@2: // Copyright (c) 1998-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: #if !defined(__MSVREG_H__) williamr@2: #define __MSVREG_H__ williamr@2: #if !defined(__E32BASE_H__) williamr@2: #include williamr@2: #endif williamr@2: #if !defined(__F32FILE_H__) williamr@2: #include williamr@2: #endif williamr@2: williamr@2: williamr@2: williamr@2: /** williamr@2: @internalComponent williamr@2: @released williamr@2: */ williamr@2: enum TMtsrDllIndex // Used in CMtmGroupData williamr@2: { williamr@2: EMtsrServerComponentIndex, williamr@2: EMtsrClientComponentIndex, williamr@2: EMtsrUiComponentIndex, williamr@2: EMtsrUiDataComponentIndex williamr@2: }; williamr@2: williamr@2: const TInt KHumanReadableNameLength=50; williamr@2: typedef TBuf THumanReadableName; // could be used client side williamr@2: williamr@2: #define KMsvDefaultTimeoutMicroSeconds32 30000000 williamr@2: williamr@2: // forward declarations williamr@2: class RWriteStream; williamr@2: class RReadStream; williamr@2: class RFs; williamr@2: williamr@2: williamr@2: class CMtmDllInfo : public CBase williamr@2: /** Encapsulates the registration data for a single concrete MTM component. williamr@2: williamr@2: It is used in the creation of registration data for an MTM group. Typically, williamr@2: an application gathers a number of CMtmDllInfo objects into an CMtmDllInfoArray. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CMtmDllInfo* NewL(const TDesC& aHumanReadableName,const TUidType& aUidType,const TDesC& aFilename,TInt aEntryPointOrdinalNumber,const TVersion aVersion); williamr@2: IMPORT_C static CMtmDllInfo* NewL(const CMtmDllInfo& aMtmDllInfo); williamr@2: IMPORT_C static CMtmDllInfo* NewL(RReadStream& aStream); williamr@2: IMPORT_C ~CMtmDllInfo(); williamr@2: IMPORT_C void SetHumanReadableNameL(const TDesC& aHumanReadableName); williamr@2: inline TPtrC HumanReadableName() const; williamr@2: IMPORT_C void InternalizeL(RReadStream& aStream); williamr@2: IMPORT_C void ExternalizeL(RWriteStream& aStream) const; // not used but as it is exported it has been kept williamr@2: IMPORT_C TBool operator==(const CMtmDllInfo& aMtmDllInfo) const; williamr@2: void SetMessagingCapability(TBool aCapability); williamr@2: void SetSendBodyCapability(TBool aCapability); williamr@2: void SetCapabilitiesAvailable(TBool aBool); williamr@2: IMPORT_C TBool MessagingCapability() const; williamr@2: IMPORT_C TBool SendBodyCapability() const; williamr@2: IMPORT_C TBool CapabilitiesAvailable() const; williamr@2: TPtrC FileName() const; williamr@2: private: williamr@2: CMtmDllInfo(); williamr@2: CMtmDllInfo(const TUidType& aUidType,TInt aEntryPointOrdinalNumber,const TVersion aVersion); williamr@2: CMtmDllInfo(const CMtmDllInfo& aMtmDllInfo); williamr@2: void ConstructL(const TDesC& aHumanReadableName, const TDesC& aFilename); williamr@2: private: williamr@2: HBufC* iHumanReadableName; // Should be less than KHumanReadableNameLength williamr@2: public: williamr@2: /** Group of UIDs for the MTM. See NewL() for details. */ williamr@2: TUidType iUidType; // Three uids williamr@2: /** Ordinal of factory function for the MTM component */ williamr@2: TInt iEntryPointOrdinalNumber; williamr@2: /** Version information for the MTM component */ williamr@2: TVersion iVersion; williamr@2: williamr@2: /** Flag that indicates if the MTM can send messages */ williamr@2: TBool iMessagingCapability; williamr@2: /** Flag that indicates if the MTM can handle body text */ williamr@2: TBool iSendBodyCapability; williamr@2: /** Flag that indicates if settings have been made for the williamr@2: MessagingCapability() and SendBodyCapability() flags */ williamr@2: TBool iCapabilitiesAvailable; williamr@2: private: williamr@2: HBufC* iFilename; williamr@2: }; williamr@2: williamr@2: williamr@2: class CMtmDllInfoArray : public CArrayPtrFlat williamr@2: /** Collects the registration data for concrete MTM components, as encapsulated williamr@2: in CMtmDllInfo objects, into an array. williamr@2: williamr@2: Basic array functionality is provided by the base class CArrayPtrFlat. williamr@2: williamr@2: It is used in the creation of registration data for an MTM group: see CMtmGroupData. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C CMtmDllInfoArray(); williamr@2: IMPORT_C ~CMtmDllInfoArray(); williamr@2: IMPORT_C void AddMtmDllInfoL(CMtmDllInfo* aMtmDllInfo); williamr@2: }; williamr@2: williamr@2: class TCapabilitySet; williamr@2: williamr@2: class CMtmGroupData : public CBase williamr@2: /** Encapsulates the registration data for an MTM group. williamr@2: williamr@2: It is used to access and write the registration data file for an MTM group. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CMtmGroupData* NewL(TUid aMtmTypeUid, TUid aTechnologyTypeUid,CMtmDllInfoArray* aMtmDllInfoArray, const TCapabilitySet& aMtmRequiredCaps); williamr@2: IMPORT_C static CMtmGroupData* NewL(const CMtmGroupData& aMtmGroupData); williamr@2: IMPORT_C static CMtmGroupData* NewL(RReadStream& aStream); williamr@2: IMPORT_C ~CMtmGroupData(); williamr@2: IMPORT_C void InternalizeL(RReadStream& aStream); williamr@2: IMPORT_C void ExternalizeL(RWriteStream& aStream) const; // not used but as it is exported it has been kept williamr@2: inline TUid MtmTypeUid() const; williamr@2: inline TUid TechnologyTypeUid() const; williamr@2: IMPORT_C const CMtmDllInfoArray& MtmDllInfoArray() const; williamr@2: IMPORT_C const TCapabilitySet& GetMtmRequiredCapabilities() const; williamr@2: IMPORT_C TBool operator==(const CMtmGroupData& aMtmGroupData) const; williamr@2: private: williamr@2: CMtmGroupData(TUid aMtmTypeUid, TUid aTechnologyTypeUid, CMtmDllInfoArray* aMtmDllInfoArray, const TCapabilitySet& aMtmRequiredCaps); williamr@2: void ConstructL(const CMtmGroupData& aMtmGroupData); williamr@2: void ConstructL(); williamr@2: void AppendMtmDllInfoArrayL(const CMtmDllInfoArray& aMtmDllInfoArray); williamr@2: CMtmDllInfoArray& MtmDllInfoArrayPrivate(); williamr@2: CMtmGroupData(TUid aMtmTypeUid=KNullUid,TUid aTechnologyTypeUid=KNullUid); williamr@2: void AppendMtmDllInfoL(CMtmDllInfo* aMtmDllInfo); // Leaves if second uid wrong williamr@2: private: williamr@2: TUid iMtmTypeUid; williamr@2: TUid iTechnologyTypeUid; williamr@2: CMtmDllInfoArray* iMtmDllInfoArray; williamr@2: TCapabilitySet iMtmRequiredCaps; williamr@2: }; williamr@2: williamr@2: williamr@2: class MRegisteredMtmDllObserver williamr@2: /** williamr@2: @internalComponent williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: virtual TInt UseMtmGroup(TUid aMtmTypeUid)=0; williamr@2: virtual TInt ReleaseMtmGroup(TUid aMtmTypeUid)=0; williamr@2: }; williamr@2: williamr@2: williamr@2: // Real non-derivable class williamr@2: williamr@2: class CRegisteredMtmDll : public CTimer williamr@2: /** Allows an MTM object to access registry information about itself. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CRegisteredMtmDll* NewL(TUid aMtmTypeUid,TUid aTechnologyTypeUid,const CMtmDllInfo& aMtmDllInfo,const TTimeIntervalMicroSeconds32 aTimeoutMicroSeconds32,MRegisteredMtmDllObserver& aRegisteredMtmDllObserver); williamr@2: IMPORT_C ~CRegisteredMtmDll(); williamr@2: williamr@2: inline TUid MtmTypeUid() const; williamr@2: inline TUid TechnologyTypeUid() const; williamr@2: inline const CMtmDllInfo& MtmDllInfo() const; williamr@2: williamr@2: inline TInt MtmDllRefCount() const; williamr@2: williamr@2: IMPORT_C TInt GetLibrary(RFs& aFs,RLibrary& aMtmDllLibrary); // Increments reference count if successful or returns error williamr@2: IMPORT_C void ReleaseLibrary(); // Decrements access count williamr@2: // Should be called from destructor of any objects created from the library williamr@2: private: williamr@2: CRegisteredMtmDll(TUid aMtmTypeUid,TUid aTechnologyTypeUid,const TTimeIntervalMicroSeconds32 aTimeoutMicroSeconds32,MRegisteredMtmDllObserver& aRegisteredMtmDllObserver); williamr@2: void ConstructL(const CMtmDllInfo& aMtmDllInfo); williamr@2: void LoadLibraryL(RFs& aFs); williamr@2: williamr@2: void RunL(); williamr@2: williamr@2: private: williamr@2: TUid iMtmTypeUid; williamr@2: TUid iTechnologyTypeUid; williamr@2: CMtmDllInfo* iMtmDllInfo; williamr@2: RLibrary iMtmDllLibrary; williamr@2: TInt iMtmDllRefCount; williamr@2: TTimeIntervalMicroSeconds32 iTimeoutMicroSeconds32; williamr@2: MRegisteredMtmDllObserver& iRegisteredMtmDllObserver; williamr@2: }; williamr@2: williamr@2: williamr@2: williamr@2: class CRegisteredMtmDllArray : public CArrayPtrFlat williamr@2: /** williamr@2: @internalComponent williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C CRegisteredMtmDllArray(); williamr@2: IMPORT_C ~CRegisteredMtmDllArray(); williamr@2: IMPORT_C void AddRegisteredMtmDllL(CRegisteredMtmDll* aRegisteredMtmDll); williamr@2: }; williamr@2: williamr@2: // Base class williamr@2: williamr@2: class CMtmDllRegistry : public CBase williamr@2: /** Accesses the various MTM component registries. williamr@2: williamr@2: The derived classes used by williamr@2: clients are CClientMtmRegistry, CMtmUiDataRegistry, and CMtmUiRegistry. It williamr@2: provides functions to discover the MTMs registered in such a registry. The williamr@2: registered MTMs can be regarded as existing in a list: you can use NumRegisteredMtmDlls() williamr@2: to get the number in the list, and MtmTypeUid() to index into it. williamr@2: williamr@2: @internalComponent williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C ~CMtmDllRegistry(); williamr@2: williamr@2: inline TInt NumRegisteredMtmDlls() const; williamr@2: IMPORT_C TUid MtmTypeUid(TInt anIndex) const; williamr@2: williamr@2: inline TBool IsPresent(TUid aMtmTypeUid) const; williamr@2: IMPORT_C TUid TechnologyTypeUid(TUid aMtmTypeUid) const; williamr@2: IMPORT_C const CMtmDllInfo& RegisteredMtmDllInfo(TUid aMtmTypeUid) const; williamr@2: IMPORT_C TBool IsInUse(TUid aMtmTypeUid) const; // returns true if specified DLL in use williamr@2: IMPORT_C TBool IsInUse() const; // returns true if any DLL in use williamr@2: williamr@2: protected: williamr@2: IMPORT_C CMtmDllRegistry(RFs& aFs,TUid aMtmDllTypeUid,TTimeIntervalMicroSeconds32 aTimeoutMicroSeconds32=KMsvDefaultTimeoutMicroSeconds32); williamr@2: williamr@2: IMPORT_C TInt MtmTypeUidToIndex(TUid anMtmTypeUid) const; williamr@2: williamr@2: IMPORT_C TInt AddRegisteredMtmDll(TUid aMtmTypeUid,TUid aTechnologyTypeUid,const CMtmDllInfo& aMtmDllInfo,MRegisteredMtmDllObserver& aRegisteredMtmDllObserver); // returns error williamr@2: IMPORT_C void RemoveRegisteredMtmDll(TUid aMtmTypeUid); williamr@2: IMPORT_C void RemoveAllRegisteredMtmDlls(); williamr@2: williamr@2: private: williamr@2: void DoAddRegisteredMtmDllL(TUid aMtmTypeUid,TUid aTechnologyTypeUid,const CMtmDllInfo& aMtmDllInfo,MRegisteredMtmDllObserver& aRegisteredMtmDllObserver); // returns error williamr@2: williamr@2: protected: williamr@2: RFs& iFs; williamr@2: TUid iMtmDllTypeUid; // Second Uid in all Dlls williamr@2: CRegisteredMtmDllArray iRegisteredMtmDllArray; // Inline CArray, OK because no NewL(); williamr@2: TTimeIntervalMicroSeconds32 iTimeoutMicroSeconds32; williamr@2: }; williamr@2: williamr@2: williamr@2: #include williamr@2: williamr@2: #endif