1.1 --- a/epoc32/include/mtsr.h Tue Nov 24 13:55:44 2009 +0000
1.2 +++ b/epoc32/include/mtsr.h Tue Mar 16 16:12:26 2010 +0000
1.3 @@ -1,1 +1,504 @@
1.4 -mtsr.h
1.5 +// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
1.6 +// All rights reserved.
1.7 +// This component and the accompanying materials are made available
1.8 +// 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
1.9 +// which accompanies this distribution, and is available
1.10 +// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
1.11 +//
1.12 +// Initial Contributors:
1.13 +// Nokia Corporation - initial contribution.
1.14 +//
1.15 +// Contributors:
1.16 +//
1.17 +// Description:
1.18 +//
1.19 +
1.20 +#ifndef __MTSR_H__
1.21 +#define __MTSR_H__
1.22 +
1.23 +#include <e32base.h>
1.24 +#include <badesca.h>
1.25 +#include <msvstd.h>
1.26 +#include <msvreg.h>
1.27 +#include <tnonoperationmtmdata.h>
1.28 +
1.29 +// forward declarations
1.30 +class RWriteStream;
1.31 +class RReadStream;
1.32 +class RFs;
1.33 +class CDictionaryFileStore;
1.34 +class CInstalledMtmGroup;
1.35 +class CMsvServerEntry;
1.36 +class TMsvSystemProgress;
1.37 +
1.38 +class CBaseServerMtm : public CActive
1.39 +/** Base class for Server-side MTM components. Server-side MTMs provide all message
1.40 +transport functionality for a particular messaging protocol.
1.41 +
1.42 +MTM implementers implement a derived class to provide such functionality for
1.43 +their message protocol. Writers of message client applications are never concerned
1.44 +with this class and its sub-classes, as these are only accessed by the Message
1.45 +Server.
1.46 +
1.47 +Each MTM interprets the generic commands in different ways. For example, a
1.48 +Fax MTM would transmit a fax when asked to copy a fax from a local folder
1.49 +to a fax service. For the same function, an IMAP MTM would create a copy of
1.50 +the message on the remote server and update the message index to show the
1.51 +copy of the message on the remote server. An important initial design task
1.52 +is to the map the functions to the functionality provided by the protocol.
1.53 +
1.54 +Server-side MTM functions are called by the Message Server as a result of
1.55 +a client request that requires some remote operation with the MTM's protocol.
1.56 +The following steps give a simplified view of the usual sequence of events:
1.57 +
1.58 +1. the Message Server instantiates a Server-side MTM object through the factory
1.59 +function
1.60 +
1.61 +2. the Message Server calls the appropriate asynchronous function on the Server-side
1.62 +MTM interface, passing a TRequestStatus argument
1.63 +
1.64 +3. the Server-side MTM function typically starts whatever asynchronous communications
1.65 +it requires and returns
1.66 +
1.67 +4. the Server-side MTM is signalled when the asynchronous communications complete,
1.68 +and handles the result
1.69 +
1.70 +5. the Server-side MTM signals the Message Server, through the TRequestStatus
1.71 +passed earlier
1.72 +
1.73 +6. the Message Server deletes the Server-side MTM object
1.74 +
1.75 +To qualify this somewhat:
1.76 +
1.77 +1. it is up to the Server-side MTM implementation to decide how to translate
1.78 +data back and forth between the formats used by Message Server (index entry,
1.79 +message store, binary files), and that required by the protocol; this is another
1.80 +important design task
1.81 +
1.82 +2. depending on the protocol being used, the communications sequence can be of
1.83 +considerable complexity; typically it requires division into a number of asynchronous
1.84 +steps
1.85 +
1.86 +3. for greater efficiency where further commands are shortly expected, deletion
1.87 +of the Server-side MTM object can be prevented
1.88 +
1.89 +For asynchronous requests, a Server-side MTM should always complete the TRequestStatus
1.90 +with KErrNone. Any errors should be returned in the progress information.
1.91 +
1.92 +Note the following significant groups of functions:
1.93 +
1.94 +1. Copy and move from remote functions: CopyToLocalL() and MoveToLocalL() are
1.95 +called by the Message Server to get a selection of entries from a remote location.
1.96 +For many protocols, this should be interpreted as message retrieval. For protocols
1.97 +where messages exist on a remote server, this function is typically used to
1.98 +download specific messages, after an initial connection has downloaded message
1.99 +headers.
1.100 +
1.101 +2. Copy and move to remote functions: CopyFromLocalL() and MoveFromLocalL() are
1.102 +called by the Message Server to copy/move a selection of entries to a remote
1.103 +location. For many protocols, this should be interpreted as message sending.
1.104 +
1.105 +3. Copy and move within remote functions: CopyWithinServiceL() and MoveWithinServiceL()
1.106 +are called by the Message Server to copy a selection of entries within a remote
1.107 +service. An example of their use might be for a user rearranging messages
1.108 +within remote folders.
1.109 +@publishedAll
1.110 +@released
1.111 +*/
1.112 + {
1.113 +public:
1.114 + IMPORT_C ~CBaseServerMtm();
1.115 + //
1.116 + /** Copies a selection of entries from a remote location to a local location. This
1.117 + will only be meaningful for some protocols.
1.118 +
1.119 + Requirements:
1.120 +
1.121 + Implementations should provide this function if the messaging protocol supports
1.122 + retrieval of remote entries. If this is not supported, implementations should
1.123 + leave with KErrNotSupported.
1.124 +
1.125 + Implementations of this function have three fundamental steps:
1.126 +
1.127 + 1. doing the transfer operation using the appropriate communications protocols
1.128 +
1.129 + 2. converting protocol-specific data into the three-part storage format (index
1.130 + entry, message store, binary files) required by the Message Server
1.131 +
1.132 + 3. updating entries in the Message Server
1.133 +
1.134 + @param aSelection The collection of message index entries for which the copy/moving
1.135 + is required.
1.136 + @param aDestination The entry ID to which the selection is to be copied
1.137 + @param aStatus Asynchronous completion word for the operation
1.138 + @leave KErrNotSupported The Server-side MTM does not support this operation
1.139 + @leave Other leave codes Dependent on implementation */
1.140 + virtual void CopyToLocalL(const CMsvEntrySelection& aSelection,TMsvId aDestination, TRequestStatus& aStatus)=0;
1.141 + /** Copies a selection of entries from a local location to a remote location.
1.142 +
1.143 + Requirements:
1.144 +
1.145 + Implementations should provide this function if the messaging protocol supports
1.146 + retrieval of remote entries. If this is not supported, implementations should
1.147 + leave with KErrNotSupported.
1.148 +
1.149 + Implementations of this function have three fundamental steps:
1.150 +
1.151 + 1. reading entry data
1.152 +
1.153 + 2. converting entry data from the Message Server format into that required by
1.154 + the protocol
1.155 +
1.156 + 3. doing the transfer operation using the appropriate communications protocols
1.157 +
1.158 + @param aSelection The collection of message index entries for which the copy
1.159 + is required
1.160 + @param aDestination The entry ID of the service by which the entries should
1.161 + be transferred
1.162 + @param aStatus Asynchronous completion word for the operation
1.163 + @leave KErrNotSupported The Server-side MTM does not support this operation
1.164 + @leave Other leave codes Dependent on implementation */
1.165 + virtual void CopyFromLocalL(const CMsvEntrySelection& aSelection,TMsvId aDestination, TRequestStatus& aStatus)=0;
1.166 + /** Copies a selection of entries within a remote location.
1.167 +
1.168 + Requirements:
1.169 +
1.170 + Implementations should provide this function if the messaging protocol supports
1.171 + the ability to copy entries within a remote service. If this is not supported,
1.172 + implementations should leave with KErrNotSupported.
1.173 +
1.174 + @param aSelection The collection of message index entries for which the copy
1.175 + is required
1.176 + @param aDestination The server entry ID to which the selection is to be copied
1.177 + @param aStatus Asynchronous completion word for the operation
1.178 + @leave KErrNotSupported The Server-side MTM does not support this operation
1.179 + @leave Other leave codes Dependent on implementation */
1.180 + virtual void CopyWithinServiceL(const CMsvEntrySelection& aSelection,TMsvId aDestination, TRequestStatus& aStatus)=0;
1.181 + /** Deletes each entry in the supplied selection when called by the message Server.
1.182 + If any of the entries in the selection is a parent entry, then all its children
1.183 + should also be deleted, recursively to the bottom of the ownership tree.
1.184 +
1.185 + Implementations should provide this function if the messaging protocol supports
1.186 + deletion of remote entries. If this is not supported, implementations should
1.187 + leave with KErrNotSupported.
1.188 +
1.189 + @param aSelection The collection of entries that are to be deleted.
1.190 + @param aStatus Asynchronous completion object.
1.191 + @leave KErrNotSupported The Server-side MTM does not support this operation
1.192 + @leave Other leave codes Dependent on implementation */
1.193 + virtual void DeleteAllL(const CMsvEntrySelection& aSelection, TRequestStatus& aStatus)=0;
1.194 + /** Creates a new remote entry with relevant data when called by the Message Server.
1.195 +
1.196 + Implementations should provide this function if the messaging protocol supports
1.197 + creation of remote entries. If this is not supported, implementations should
1.198 + leave with KErrNotSupported.
1.199 +
1.200 + As with ChangeL(), the Server-side MTM implementation must decide what information
1.201 + in the TMsvEntry is relevant to the remote entry, and translate it appropriately
1.202 + for the specific protocol. Most of the data contained in the TMsvEntry is
1.203 + specific to the Message Server, and would probably have no direct correlation
1.204 + with the protocol's own storage format. For example, for a folder, probably
1.205 + only the name and parent are needed, so if the protocol supports creation
1.206 + of remote folders, the implementation could:
1.207 +
1.208 + 1. check for a folder type entry
1.209 +
1.210 + 2. get the folder name and parent details from aNewEntry
1.211 +
1.212 + 3. initiate a protocol-specific action to create the remote folder
1.213 +
1.214 + @param aNewEntry Data by which to create entry
1.215 + @param aStatus Asynchronous completion word for the operation.
1.216 + @leave KErrNotSupported The Server-side MTM does not support this operation
1.217 + @leave Other leave codes Dependent on implementation */
1.218 + virtual void CreateL(TMsvEntry aNewEntry, TRequestStatus& aStatus)=0;
1.219 + /** Updates a remote entry with relevant data when called by the Message Server.
1.220 +
1.221 + Implementations should provide this function if the messaging protocol supports
1.222 + updating of remote entries. If this is not supported, implementations should
1.223 + leave with KErrNotSupported.
1.224 +
1.225 + The Server-side MTM implementation must decide what information in the TMsvEntry
1.226 + is relevant to the remote entry, and translate it appropriately for the specific
1.227 + protocol. Most of the data contained in the TMsvEntry is specific to the Symbian
1.228 + OS Message Server, and would probably have no direct correlation with the
1.229 + protocol's own storage format. Some entry data may however be useful. For
1.230 + example, if the protocol supports remote renaming of folders, the implementation
1.231 + could:
1.232 +
1.233 + 1. check for a folder type entry
1.234 +
1.235 + 2. extract the folder name from aNewEntry.iDetails
1.236 +
1.237 + 3. check if the folder name has changed by comparing the new name with iDetails
1.238 + in the index entry currently; if not, complete with KErrNone
1.239 +
1.240 + 4. initiate a protocol-specific action to rename the remote folder
1.241 +
1.242 + The implementation should also always update the local Message Server index
1.243 + through CMsvServerEntry::ChangeL().
1.244 +
1.245 + @param aNewEntry Data by which to update entry
1.246 + @param aStatus Asynchronous completion word for the operation.
1.247 + @leave KErrNotSupported The Server-side MTM does not support this operation
1.248 + @leave Other leave codes Dependent on implementation */
1.249 + virtual void ChangeL(TMsvEntry aNewEntry, TRequestStatus& aStatus)=0;
1.250 + //
1.251 + /** Executes an MTM-specific operation on a selection of entries when called by
1.252 + the Message Server.
1.253 +
1.254 + The call is made as a response to a client program invoking an MTM-specific
1.255 + operation through CBaseMtm::InvokeSyncFunctionL()/InvokeAsyncFunctionL().
1.256 + The aSelection, aCommand, and aParameter arguments pass the values of the
1.257 + original aSelection, aFunctionId, and aParameter respectively arguments from
1.258 + such a call. The use (if any) of the aSelection and aParameter arguments by
1.259 + the function depends on the command.
1.260 +
1.261 + @param aSelection A selection of message entries on which the command is to
1.262 + be executed
1.263 + @param aCommand The MTM-specific command to be carried out
1.264 + @param aParameter Command-specific parameters
1.265 + @param aStatus Asynchronous completion word for the operation */
1.266 + virtual void StartCommandL(CMsvEntrySelection& aSelection, TInt aCommand, const TDesC8& aParameter, TRequestStatus& aStatus)=0;
1.267 + //
1.268 + /** Tests if the Server-side MTM object should be deleted when called by the Message
1.269 + Server
1.270 +
1.271 + It is useful to stop the MTM being deleted when more commands are expected
1.272 + shortly. This would be the case, for example, after receiving a command to
1.273 + go online.
1.274 +
1.275 + If there are no more commands expected by the Server-side MTM object, then
1.276 + the function should return EFalse, and the Message Server will delete it.
1.277 +
1.278 + @return ETrue: the MTM object should not be deleted EFalse: the MTM object
1.279 + can be deleted */
1.280 + virtual TBool CommandExpected()=0;
1.281 + //
1.282 + /** This function is called by the Message Server to get progress information for
1.283 + the current asynchronous operation.
1.284 +
1.285 + The call is made as a response to a client program requesting progress information
1.286 + through CMsvOperation::ProgressL(). The packing format used in the TDesC8
1.287 + is MTM-specific. Only the implementation of the User Interface MTM progress
1.288 + information functions need to understand the format.
1.289 +
1.290 + The progress buffer should have a maximum size of 256 bytes.
1.291 +
1.292 + @return Progress information on current asynchronous operation
1.293 + @see CBaseMtmUi::DisplayProgressSummary()
1.294 + @see CBaseMtmUi::GetProgress() */
1.295 + virtual const TDesC8& Progress()=0;
1.296 + //
1.297 + /** Moves a selection of entries from a remote location to a local location.
1.298 +
1.299 + Requirements:
1.300 +
1.301 + Implementations should provide this function if the messaging protocol supports
1.302 + retrieval of remote entries. If this is not supported, implementations should
1.303 + leave with KErrNotSupported.
1.304 +
1.305 + Implementations of this function have three fundamental steps:
1.306 +
1.307 + 1. doing the transfer operation using the appropriate communications protocols
1.308 +
1.309 + 2. converting protocol-specific data into the three-part storage format (index
1.310 + entry, message store, binary files) required by the Message Server
1.311 +
1.312 + 3. updating entries in the Message Server
1.313 +
1.314 + MoveToLocalL() should differ from CopyToLocalL() in additionally deleting
1.315 + the original remote data.
1.316 +
1.317 + @param aSelection The collection of message index entries for which the moving
1.318 + is required.
1.319 + @param aDestination The entry ID to which the selection is to be copied/moved
1.320 + @param aStatus Asynchronous completion word for the operation
1.321 + @leave KErrNotSupported The Server-side MTM does not support this operation
1.322 + @leave Other leave codes Dependent on implementation */
1.323 + virtual void MoveToLocalL(const CMsvEntrySelection& aSelection,TMsvId aDestination, TRequestStatus& aStatus)=0;
1.324 + /** Moves a selection of entries from a local location to a remote location.
1.325 +
1.326 + Requirements:
1.327 +
1.328 + Implementations should provide this function if the messaging protocol supports
1.329 + retrieval of remote entries. If this is not supported, implementations should
1.330 + leave with KErrNotSupported.
1.331 +
1.332 + Implementations of this function have three fundamental steps:
1.333 +
1.334 + 1. reading entry data
1.335 +
1.336 + 2. converting entry data from the Message Server format into that required by
1.337 + the protocol
1.338 +
1.339 + 3. doing the transfer operation using the appropriate communications protocols
1.340 +
1.341 + The implementation of MoveFromLocalL() should differ from CopyFromLocalL()
1.342 + in additionally deleting the original local data.
1.343 +
1.344 + @param aSelection The collection of message index entries for which the move
1.345 + is required
1.346 + @param aDestination The entry ID of the service by which the entries should
1.347 + be transferred
1.348 + @param aStatus Asynchronous completion word for the operation
1.349 + @leave KErrNotSupported The Server-side MTM does not support this operation
1.350 + @leave Other leave codes Dependent on implementation */
1.351 + virtual void MoveFromLocalL(const CMsvEntrySelection& aSelection,TMsvId aDestination, TRequestStatus& aStatus)=0;
1.352 + /** Moves a selection of entries within a remote location.
1.353 +
1.354 + Requirements:
1.355 +
1.356 + Implementations should provide this function if the messaging protocol supports
1.357 + the ability to move entries within a remote service. If this is not supported,
1.358 + implementations should leave with KErrNotSupported.
1.359 +
1.360 + The implementation of MoveWithinServiceL() should differ from CopyWithinServiceL()
1.361 + in additionally deleting the original data.
1.362 +
1.363 + @param aSelection The collection of message index entries for which the move
1.364 + is required
1.365 + @param aDestination The server entry ID to which the selection is to be moved
1.366 + @param aStatus Asynchronous completion word for the operation
1.367 + @leave KErrNotSupported The Server-side MTM does not support this operation
1.368 + @leave Other leave codes Dependent on implementation */
1.369 + virtual void MoveWithinServiceL(const CMsvEntrySelection& aSelection,TMsvId aDestination, TRequestStatus& aStatus)=0;
1.370 +
1.371 + IMPORT_C TInt SystemProgress(TMsvSystemProgress& aOutSysProg);
1.372 + TInt GetNonOperationMtmData(TNonOperationMtmDataType& aMtmDataType, TPtrC8& aResultBuffer);
1.373 +
1.374 +protected:
1.375 + IMPORT_C CBaseServerMtm(CRegisteredMtmDll& aRegisteredMtmDll, CMsvServerEntry* aServerEntry);
1.376 + /** Handles the completion of any asynchronous requests that it makes. It is called
1.377 + from the base class RunL() .
1.378 +
1.379 + Note that any leaves made by this function result in DoComplete() being called
1.380 + with the leave code. */
1.381 + virtual void DoRunL()=0;
1.382 + /** Called by the base class RunL() if DoRunL() leaves.
1.383 +
1.384 + It should be implemented to handle this error. For example, progress information
1.385 + could be updated to reflect the problem.
1.386 +
1.387 + @param aError The leave code given by DoRunL(). */
1.388 + virtual void DoComplete(TInt aError)=0;
1.389 + //
1.390 + IMPORT_C TInt Extension_(TUint aExtensionId, TAny *&a0, TAny *a1);
1.391 + //
1.392 +private:
1.393 + // from CActive
1.394 + IMPORT_C void RunL();
1.395 + IMPORT_C TInt RunError(TInt aError);
1.396 + //
1.397 +protected:
1.398 + /** The entry on which to operate. It is set in the constructor.
1.399 +
1.400 + The destructor deletes this member. */
1.401 + CMsvServerEntry* iServerEntry;
1.402 +
1.403 + // Method used for extension: called by non virtual methods that need
1.404 + // to have a polymorphic behaviour.
1.405 + IMPORT_C virtual TAny* GetInterface(TUid aUid);
1.406 + //
1.407 +private:
1.408 + CRegisteredMtmDll& iRegisteredMtmDll;
1.409 +
1.410 +private:
1.411 + // Extra data member to allow for future extensions
1.412 + TAny* iExtensionData;
1.413 + };
1.414 +
1.415 +
1.416 +class CServerMtmDllRegistry : public CMtmDllRegistry
1.417 +/**
1.418 +@publishedAll
1.419 +@released
1.420 +*/
1.421 + {
1.422 +friend class CMtmRegistryControl;
1.423 +public:
1.424 + IMPORT_C static CServerMtmDllRegistry* NewL(RFs& aFs,TTimeIntervalMicroSeconds32 aTimeoutMicroSeconds32=KMsvDefaultTimeoutMicroSeconds32);
1.425 + IMPORT_C ~CServerMtmDllRegistry();
1.426 + IMPORT_C CBaseServerMtm* NewServerMtmL(TUid aMtmTypeUid, CMsvServerEntry* aInitialEntry);
1.427 + //
1.428 +protected:
1.429 + CServerMtmDllRegistry(RFs& aFs,TTimeIntervalMicroSeconds32 aTimeoutMicroSeconds32);
1.430 + //
1.431 +private:
1.432 + CBaseServerMtm* NewMtmL(const RLibrary& aLib, CMsvServerEntry* aServerEntry, CRegisteredMtmDll& aReg) const;
1.433 + };
1.434 +
1.435 +
1.436 +class CInstalledMtmGroupArray : public CArrayPtrFlat<CInstalledMtmGroup>
1.437 +/**
1.438 +@internalComponent
1.439 +@released
1.440 +*/
1.441 + {
1.442 +public:
1.443 + CInstalledMtmGroupArray();
1.444 + ~CInstalledMtmGroupArray();
1.445 + void AddInstalledMtmGroupL(CInstalledMtmGroup* aInstalledMtmGroup);
1.446 + };
1.447 +
1.448 +//**********************************
1.449 +// CMsvMtmCache
1.450 +//**********************************
1.451 +
1.452 +
1.453 +//**********************************
1.454 +// CMtmRegistryControl
1.455 +//**********************************
1.456 +
1.457 +class CMtmRegistryControl : public CBase, public MRegisteredMtmDllObserver
1.458 +/**
1.459 +@publishedAll
1.460 +@released
1.461 +*/
1.462 + {
1.463 +public:
1.464 + IMPORT_C static CMtmRegistryControl* NewL(RFs& anFs,CServerMtmDllRegistry& aServerMtmDllRegistry);
1.465 + IMPORT_C ~CMtmRegistryControl();
1.466 +
1.467 + IMPORT_C TInt InstallMtmGroup(const TDesC& aFullName,TUid& aMtmTypeUid);
1.468 + IMPORT_C TInt FullNameToMtmTypeUid(const TDesC& aFullName,TUid& aMtmTypeUid) const;
1.469 + IMPORT_C TInt DeInstallMtmGroup(TUid aMtmTypeUid); // returns error on storing registry
1.470 +
1.471 + IMPORT_C TInt UseMtmGroup(TUid aMtmTypeUid);
1.472 + IMPORT_C TInt ReleaseMtmGroup(TUid aMtmTypeUid);
1.473 + IMPORT_C TBool IsInUse(TUid aMtmTypeUid) const;
1.474 +
1.475 + IMPORT_C TInt FillRegisteredMtmDllArray(TUid aMtmDllTypeUid,CRegisteredMtmDllArray& aRegisteredMtmDllArray,TTimeIntervalMicroSeconds32 aTimeoutMicroSeconds32=0); // Fill array with Dlls whose second uid is aMtmDllTypeUid
1.476 + IMPORT_C CMtmGroupData* GetMtmGroupDataL(TUid aMtmTypeUid) const;
1.477 + const CMtmGroupData& GetMtmGroupDataReferenceL(TUid aMtmTypeUid) const;
1.478 +
1.479 + IMPORT_C void StoreRegistryL() const;
1.480 + IMPORT_C void RestoreRegistryL();
1.481 +
1.482 + IMPORT_C void InternalizeL(RReadStream& aStream);
1.483 + IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
1.484 +
1.485 +private:
1.486 + CMtmRegistryControl(RFs& anFs,CServerMtmDllRegistry& aServerMtmDllRegistry);
1.487 + void ConstructL();
1.488 + TInt MtmTypeUidToIndex(TUid aMtmTypeUid) const;
1.489 + TInt UidTypeToIndex(TUidType aUidType) const;
1.490 + void DoInstallMtmGroupL(const TDesC& aFullName,TUid& aMtmTypeUid);
1.491 + CMtmGroupData* ReadDataFileStoreL(const TDesC& aFullName) const;
1.492 + void DoDeInstallMtmGroupL(TUid aMtmTypeUid);
1.493 + void DoInternalizeL(RReadStream& aStream);
1.494 + void AddInstalledMtmGroupL(CInstalledMtmGroup* aInstalledMtmGroup);
1.495 + void RemoveInstalledMtmGroup(TUid aMtmTypeUid);
1.496 + TBool IsResFileL(const TDesC& aFullName) const;
1.497 + TUid DoFindMtmTypeUidL(const TDesC& aFullName) const;
1.498 +
1.499 + CMtmGroupData *LoadMTMFileL(const TDesC& aFullName, TUid &aUid);
1.500 + CMtmGroupData *LoadDatFileL(const TDesC& aFullName, TUid &aUid);
1.501 + CMtmGroupData *LoadResFileL(const TDesC& aFullName, TUid &aUid);
1.502 +private:
1.503 + RFs& iFs;
1.504 + CInstalledMtmGroupArray iInstalledMtmGroupArray;
1.505 + CServerMtmDllRegistry& iServerMtmDllRegistry;
1.506 + };
1.507 +
1.508 +#endif // __MTSR_H__